Skip to content

Commit 59cda08

Browse files
authored
Merge pull request #1114 from coleam00/dev
Release 0.3.6
2 parents 47796df + 883d136 commit 59cda08

49 files changed

Lines changed: 1775 additions & 652 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/rules/cli.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ bun run cli version
2929

3030
## Startup Behavior
3131

32-
1. Loads `~/.archon/.env` with `override: true` (Archon's config wins over any Bun-auto-loaded CWD vars)
33-
2. Smart Claude auth default: if no `CLAUDE_API_KEY` or `CLAUDE_CODE_OAUTH_TOKEN`, sets `CLAUDE_USE_GLOBAL_AUTH=true`
34-
3. Imports all commands AFTER dotenv setup
32+
1. `@archon/paths/strip-cwd-env-boot` (first import) removes all Bun-auto-loaded CWD `.env` keys from `process.env`
33+
2. Loads `~/.archon/.env` with `override: true` (Archon config wins over shell-inherited vars)
34+
3. Smart Claude auth default: if no `CLAUDE_API_KEY` or `CLAUDE_CODE_OAUTH_TOKEN`, sets `CLAUDE_USE_GLOBAL_AUTH=true`
35+
4. Imports all commands AFTER dotenv setup
3536

3637
## WorkflowRunOptions Interface
3738

CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.3.6] - 2026-04-12
11+
12+
Web UI workflow experience improvements, CWD environment leak protection, and bug fixes.
13+
14+
### Added
15+
16+
- Workflow result card now shows status, duration, node count, and artifact links in chat (#1015)
17+
- Loop iteration progress display in the workflow execution view (#1014)
18+
- Artifact file paths in chat messages are now clickable (#1023)
19+
20+
### Changed
21+
22+
- CWD `.env` variables are now stripped from AI subprocess environments at the `@archon/paths` layer, replacing the old `SUBPROCESS_ENV_ALLOWLIST` approach. Prevents accidental credential leaks from target repo `.env` files (#1067, #1030, #1098, #1070)
23+
- Update check cache TTL reduced from 24 hours to 1 hour
24+
25+
### Fixed
26+
27+
- Duplicate text and tool calls appearing in workflow execution view
28+
- `workflow_step` SSE events not handled correctly, causing missing progress updates
29+
- Nested interactive elements in workflow UI causing React warnings
30+
- Workflow status messages not splitting correctly in WorkflowLogs
31+
- Incorrect `remainingMessage` suppression in stream mode causing lost output
32+
- Binary builds now use `BUNDLED_VERSION` for the app version instead of reading `package.json`
33+
1034
## [0.3.5] - 2026-04-10
1135

1236
Fixes for `archon serve` process lifecycle and static file serving.

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ import type { DagNode, WorkflowDefinition } from '@/lib/api';
399399
### Architecture Layers
400400

401401
**Package Split:**
402-
- **@archon/paths**: Path resolution utilities, Pino logger factory, web dist cache path (`getWebDistDir`) (no @archon/* deps)
402+
- **@archon/paths**: Path resolution utilities, Pino logger factory, web dist cache path (`getWebDistDir`), CWD env stripper (`stripCwdEnv`, `strip-cwd-env-boot`) (no @archon/* deps; `pino` and `dotenv` are allowed external deps)
403403
- **@archon/git**: Git operations - worktrees, branches, repos, exec wrappers (depends only on @archon/paths)
404404
- **@archon/isolation**: Worktree isolation types, providers, resolver, error classifiers (depends only on @archon/git + @archon/paths)
405405
- **@archon/workflows**: Workflow engine - loader, router, executor, DAG, logger, bundled defaults (depends only on @archon/git + @archon/paths + @hono/zod-openapi + zod; DB/AI/config injected via `WorkflowDeps`)

bun.lock

Lines changed: 11 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "archon",
3-
"version": "0.3.5",
3+
"version": "0.3.6",
44
"private": true,
55
"workspaces": [
66
"packages/*"

packages/adapters/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@archon/adapters",
3-
"version": "0.3.5",
3+
"version": "0.3.6",
44
"type": "module",
55
"main": "./src/index.ts",
66
"types": "./src/index.ts",

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@archon/cli",
3-
"version": "0.3.5",
3+
"version": "0.3.6",
44
"type": "module",
55
"main": "./src/cli.ts",
66
"bin": {

packages/cli/src/cli.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@
77
* archon workflow run <name> [msg] Run a workflow
88
* archon version Show version info
99
*/
10+
// Must be the very first import — strips Bun-auto-loaded CWD .env keys before
11+
// any module reads process.env at init time (e.g. @archon/paths/logger reads LOG_LEVEL).
12+
import '@archon/paths/strip-cwd-env-boot';
1013
import { parseArgs } from 'util';
1114
import { config } from 'dotenv';
1215
import { resolve } from 'path';
1316
import { existsSync } from 'fs';
1417

15-
// Load .env from global Archon config (override: true so ~/.archon/.env
16-
// always wins over any Bun-auto-loaded CWD vars).
17-
//
18-
// Credential safety: target repo .env keys that Bun auto-loads from CWD
19-
// cannot leak into AI subprocesses — SUBPROCESS_ENV_ALLOWLIST blocks them.
20-
// The env-leak gate provides a second layer by scanning target repos before
21-
// spawning. No CWD stripping needed.
18+
// Load ~/.archon/.env with override: true — Archon-specific config must win
19+
// over shell-inherited env vars (e.g. PORT, LOG_LEVEL from shell profile).
20+
// CWD .env keys are already gone (stripCwdEnv above), so override only
21+
// affects shell-inherited values, which is the intended behavior.
2222
const globalEnvPath = resolve(process.env.HOME ?? '~', '.archon', '.env');
2323
if (existsSync(globalEnvPath)) {
2424
const result = config({ path: globalEnvPath, override: true });
@@ -30,6 +30,9 @@ if (existsSync(globalEnvPath)) {
3030
}
3131
}
3232

33+
// CLAUDECODE=1 warning is emitted inside stripCwdEnv() (boot import above)
34+
// BEFORE the marker is deleted from process.env. No duplicate warning here.
35+
3336
// Smart defaults for Claude auth
3437
// If no explicit tokens, default to global auth from `claude /login`
3538
if (!process.env.CLAUDE_API_KEY && !process.env.CLAUDE_CODE_OAUTH_TOKEN) {

packages/cli/src/commands/serve.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ export async function serveCommand(opts: ServeOptions): Promise<number> {
6060
await startServer({
6161
webDistPath: webDistDir,
6262
port: opts.port,
63-
skipPlatformAdapters: true,
6463
});
6564
} catch (err) {
6665
const error = toError(err);

packages/core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@archon/core",
3-
"version": "0.3.5",
3+
"version": "0.3.6",
44
"type": "module",
55
"main": "./src/index.ts",
66
"types": "./src/index.ts",
@@ -23,7 +23,7 @@
2323
"./state/*": "./src/state/*.ts"
2424
},
2525
"scripts": {
26-
"test": "bun test src/clients/codex-binary-guard.test.ts && bun test src/utils/codex-binary-resolver.test.ts && bun test src/utils/codex-binary-resolver-dev.test.ts && bun test src/clients/claude.test.ts src/clients/codex.test.ts src/clients/factory.test.ts && bun test src/handlers/command-handler.test.ts && bun test src/handlers/clone.test.ts && bun test src/db/adapters/postgres.test.ts && bun test src/db/adapters/sqlite.test.ts src/db/codebases.test.ts src/db/connection.test.ts src/db/conversations.test.ts src/db/env-vars.test.ts src/db/isolation-environments.test.ts src/db/messages.test.ts src/db/sessions.test.ts src/db/workflow-events.test.ts src/db/workflows.test.ts src/utils/defaults-copy.test.ts src/utils/worktree-sync.test.ts src/utils/conversation-lock.test.ts src/utils/credential-sanitizer.test.ts src/utils/port-allocation.test.ts src/utils/error.test.ts src/utils/error-formatter.test.ts src/utils/github-graphql.test.ts src/utils/env-allowlist.test.ts src/utils/env-leak-scanner.test.ts src/config/ src/state/ && bun test src/utils/path-validation.test.ts && bun test src/services/cleanup-service.test.ts && bun test src/services/title-generator.test.ts && bun test src/workflows/ && bun test src/operations/workflow-operations.test.ts && bun test src/operations/isolation-operations.test.ts && bun test src/orchestrator/orchestrator.test.ts && bun test src/orchestrator/orchestrator-agent.test.ts && bun test src/orchestrator/orchestrator-isolation.test.ts",
26+
"test": "bun test src/clients/codex-binary-guard.test.ts && bun test src/utils/codex-binary-resolver.test.ts && bun test src/utils/codex-binary-resolver-dev.test.ts && bun test src/clients/claude.test.ts src/clients/codex.test.ts src/clients/factory.test.ts && bun test src/handlers/command-handler.test.ts && bun test src/handlers/clone.test.ts && bun test src/db/adapters/postgres.test.ts && bun test src/db/adapters/sqlite.test.ts src/db/codebases.test.ts src/db/connection.test.ts src/db/conversations.test.ts src/db/env-vars.test.ts src/db/isolation-environments.test.ts src/db/messages.test.ts src/db/sessions.test.ts src/db/workflow-events.test.ts src/db/workflows.test.ts src/utils/defaults-copy.test.ts src/utils/worktree-sync.test.ts src/utils/conversation-lock.test.ts src/utils/credential-sanitizer.test.ts src/utils/port-allocation.test.ts src/utils/error.test.ts src/utils/error-formatter.test.ts src/utils/github-graphql.test.ts src/utils/env-leak-scanner.test.ts src/config/ src/state/ && bun test src/utils/path-validation.test.ts && bun test src/services/cleanup-service.test.ts && bun test src/services/title-generator.test.ts && bun test src/workflows/ && bun test src/operations/workflow-operations.test.ts && bun test src/operations/isolation-operations.test.ts && bun test src/orchestrator/orchestrator.test.ts && bun test src/orchestrator/orchestrator-agent.test.ts && bun test src/orchestrator/orchestrator-isolation.test.ts",
2727
"type-check": "bun x tsc --noEmit",
2828
"build": "echo 'No build needed - Bun runs TypeScript directly'"
2929
},

0 commit comments

Comments
 (0)