Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
410 commits
Select commit Hold shift + click to select a range
5290ddf
Fix TaskOutput command running message
shuxueshuxue Apr 5, 2026
9dff9e4
Land verified auth and runtime fixes
shuxueshuxue Apr 5, 2026
acb43cb
Fix resource overview CI test isolation
shuxueshuxue Apr 5, 2026
02ae7f5
Keep thread detail honest after run errors
shuxueshuxue Apr 5, 2026
5de2f9c
Format idle rebuild regression test
shuxueshuxue Apr 5, 2026
198f935
Fix subagent task surfacing and local volume teardown
shuxueshuxue Apr 5, 2026
4d89210
Hide subagent threads from routing targets
shuxueshuxue Apr 5, 2026
c789419
Rebuild stale idle thread detail from checkpoint
shuxueshuxue Apr 5, 2026
37c838d
Fix OTP auth flow for direct GoTrue clients
shuxueshuxue Apr 5, 2026
6f864f0
Fix blocking subagent status honesty
shuxueshuxue Apr 5, 2026
c9d49ad
Fix frontend auth session reset
shuxueshuxue Apr 5, 2026
c00f419
Normalize blocking subagent cwd prompts
shuxueshuxue Apr 5, 2026
54e2e1d
Merge origin/main and absorb PR198 runtime changes
shuxueshuxue Apr 5, 2026
45f35ff
Close brutal subagent verification gaps
shuxueshuxue Apr 5, 2026
ed99964
Unblock no-main-thread bootstrap entry
shuxueshuxue Apr 5, 2026
297931f
Simplify frontend bootstrap state helpers
shuxueshuxue Apr 5, 2026
eddd47c
Simplify background task projection helpers
shuxueshuxue Apr 5, 2026
833169d
Simplify streaming display helpers
shuxueshuxue Apr 5, 2026
e88d7e6
Prune dead helpers and slim test fixtures
shuxueshuxue Apr 5, 2026
19576f8
Prune dead frontend exports
shuxueshuxue Apr 5, 2026
2fb18be
Simplify query loop followthrough fixtures
shuxueshuxue Apr 5, 2026
3f80f1d
Trim more query loop test boilerplate
shuxueshuxue Apr 5, 2026
a57168d
Simplify query loop followthrough matrix
shuxueshuxue Apr 5, 2026
63a7bba
Simplify agent service tests
shuxueshuxue Apr 5, 2026
5679e92
Simplify threads router tests
shuxueshuxue Apr 5, 2026
4c235c1
Trim more threads router test scaffolding
shuxueshuxue Apr 5, 2026
014bcab
Simplify more threads router tests
shuxueshuxue Apr 5, 2026
3a5a333
Simplify loop tests
shuxueshuxue Apr 5, 2026
bd27ac8
Simplify threads router patch groups
shuxueshuxue Apr 5, 2026
b51fd53
Simplify loop tool fixtures
shuxueshuxue Apr 5, 2026
490a598
Persist visible model errors in history
shuxueshuxue Apr 5, 2026
a9bb1d1
Fix parent Agent completion after subagent finish
shuxueshuxue Apr 5, 2026
4d0f535
Fix footer close after subagent completion
shuxueshuxue Apr 5, 2026
b095938
Fix prompt-too-long detail assertions
shuxueshuxue Apr 5, 2026
5627d57
Format prompt-too-long bridge tests
shuxueshuxue Apr 5, 2026
4974c12
Hide subagent identities from lease resources
shuxueshuxue Apr 5, 2026
07bf18f
Harden staging deploy verification
shuxueshuxue Apr 5, 2026
9d2b947
Rename message tools and remove connections
shuxueshuxue Apr 5, 2026
c0fed15
Fix paused lease rehydration and drop resume button
shuxueshuxue Apr 5, 2026
3d8e013
Refresh live lease binding after resume
shuxueshuxue Apr 5, 2026
369d933
Rename Mycel chat tools and remove social extras
shuxueshuxue Apr 5, 2026
f117c41
Tighten task output and tool parameter contracts
shuxueshuxue Apr 5, 2026
b6d7775
Harden paused Daytona runtime recovery
shuxueshuxue Apr 5, 2026
1119cc4
Fix Daytona resumed lease file roundtrip
shuxueshuxue Apr 5, 2026
1d78e15
Tighten core tool typing contracts
shuxueshuxue Apr 5, 2026
dca2107
Type build_tool contracts explicitly
shuxueshuxue Apr 5, 2026
1f2227e
Share typed tool schema builder
shuxueshuxue Apr 5, 2026
f65757a
Unify typed tool schema definitions
shuxueshuxue Apr 5, 2026
464272b
Tighten remaining typed tool boundaries
shuxueshuxue Apr 5, 2026
2bb468a
Share typed builder across remaining tool services
shuxueshuxue Apr 5, 2026
b919869
Unify agent service tool schemas
shuxueshuxue Apr 5, 2026
17ca005
Fix chat tool names in intro docs
shuxueshuxue Apr 5, 2026
c4958c9
Unify prompt rules first tranche
shuxueshuxue Apr 5, 2026
639d6f2
Harden validation pipeline first slice
shuxueshuxue Apr 5, 2026
945392b
Tighten web and command schema constraints
shuxueshuxue Apr 5, 2026
f9ec17a
Unify filesystem preflight validation
shuxueshuxue Apr 5, 2026
47e0ea7
Structure input validation errors
shuxueshuxue Apr 5, 2026
6351da7
Preflight remote file sizes before download
shuxueshuxue Apr 5, 2026
ad0107d
Unify prompt rule construction
shuxueshuxue Apr 5, 2026
1b301fe
Expose cron tools to agents
shuxueshuxue Apr 5, 2026
ac6e6f9
Add MCP resource tools for member agents
shuxueshuxue Apr 5, 2026
80bb966
Auto-deploy staging on branch pushes
shuxueshuxue Apr 5, 2026
4327e8d
Handle push refs in staging deploy
shuxueshuxue Apr 5, 2026
1c4870b
Add AskUserQuestion core interaction flow
shuxueshuxue Apr 5, 2026
1ebcc94
Add MCP instruction delta middleware
shuxueshuxue Apr 5, 2026
84ac3e0
Add function-result-clearing prompt contract
shuxueshuxue Apr 5, 2026
3466d6a
Remove frontend sandbox pause resume controls
shuxueshuxue Apr 5, 2026
4f43040
Stabilize agent pool sync contract
shuxueshuxue Apr 5, 2026
847f1ae
Remove debug backdoors and fix path schemas
shuxueshuxue Apr 5, 2026
90415ff
Fix ask-user question prompt identity
shuxueshuxue Apr 5, 2026
5a6630c
Prefer visible lease threads in resource monitor
shuxueshuxue Apr 6, 2026
1aef5b8
Keep raw monitor truth out of resource projection
shuxueshuxue Apr 6, 2026
b557594
Refresh resource cache on local run start
shuxueshuxue Apr 6, 2026
c23fb16
Fix Windows local metrics test patching
shuxueshuxue Apr 6, 2026
0385da0
Refresh stale resource snapshots on live drift
shuxueshuxue Apr 6, 2026
ec0b2a2
Abort stale thread permission fetches
shuxueshuxue Apr 6, 2026
dff431d
Retry staging health checks during deploy
shuxueshuxue Apr 6, 2026
05d12b1
Ignore stale permission fetches after navigation
shuxueshuxue Apr 6, 2026
984236e
Invalidate empty cached pricing payloads
shuxueshuxue Apr 6, 2026
cb9262b
Fix ask-user state clearing and Windows pricing cache
shuxueshuxue Apr 6, 2026
167fe15
Fix ask-user question modal flow
shuxueshuxue Apr 6, 2026
c8e298d
Teach wtnew to open Codex worktree tab
shuxueshuxue Apr 6, 2026
991b8d6
Persist embedded ask-user answers in thread history
shuxueshuxue Apr 6, 2026
fba1192
feat: add social system (messaging, relationships, contacts)
nmhjklnm Apr 6, 2026
06b8bc8
refactor: remove entity layer, use member as social identity
nmhjklnm Apr 6, 2026
decce23
refactor: rename entity references to user/member terminology
nmhjklnm Apr 6, 2026
74b87f4
refactor: purge remaining entity references
nmhjklnm Apr 6, 2026
06499fb
refactor: purge entity references from tests and fix orphan detection…
nmhjklnm Apr 6, 2026
6d0530c
fix: CI failures — duplicate keys, stale table refs, import ordering
nmhjklnm Apr 6, 2026
7332074
style: format dependencies.py and test_entities_router.py
nmhjklnm Apr 6, 2026
a831c03
fix: address PR #207 review findings (3C/3H/3M/3L)
nmhjklnm Apr 6, 2026
b85159b
Refine embedded ask-user question card
shuxueshuxue Apr 6, 2026
177ab0a
Refactor streaming tool executor DI (#208)
shuxueshuxue Apr 6, 2026
cb6ce65
Preserve hidden ask-user answers on reload
shuxueshuxue Apr 6, 2026
5e9a06c
Make config defaults pyright-honest
shuxueshuxue Apr 6, 2026
4e2e12e
Align lifespan repos with typed contracts
shuxueshuxue Apr 6, 2026
56d0d4a
Tighten taskboard tool typing boundaries
shuxueshuxue Apr 6, 2026
bec30df
Tighten queue middleware typing imports
shuxueshuxue Apr 6, 2026
63fdbc9
Tighten filesystem middleware typing boundaries
shuxueshuxue Apr 6, 2026
24191d3
Tighten query loop middleware typing
shuxueshuxue Apr 6, 2026
8407c53
Harden streaming service typing seams
shuxueshuxue Apr 6, 2026
2ac3421
Reduce test fixture typing noise
shuxueshuxue Apr 6, 2026
639f8a6
Reduce more test typing noise
shuxueshuxue Apr 6, 2026
1a88520
Reduce runtime and router test typing noise
shuxueshuxue Apr 6, 2026
add753f
Reduce platform test typing noise
shuxueshuxue Apr 6, 2026
289666f
Reduce loop and platform test typing noise
shuxueshuxue Apr 6, 2026
3b9fb34
Reduce bridge and filesystem test typing noise
shuxueshuxue Apr 6, 2026
2ff7ac1
Reduce background cleanup test typing noise
shuxueshuxue Apr 6, 2026
b68bf6e
Reduce LeonAgent integration test typing noise
shuxueshuxue Apr 6, 2026
c35f354
Tighten Daytona SDK typing contract
shuxueshuxue Apr 6, 2026
7ba6fa4
Clear optional dependency typing fog
shuxueshuxue Apr 6, 2026
1964bef
Make Daytona proxy test SDK-independent
shuxueshuxue Apr 6, 2026
3d71483
Tighten command executor pipe contract
shuxueshuxue Apr 6, 2026
668789a
Tighten chat contract boundaries
shuxueshuxue Apr 6, 2026
b6d315b
Tighten sandbox command bridge contracts
shuxueshuxue Apr 6, 2026
075dd95
Tighten E2B SDK handle contracts
shuxueshuxue Apr 6, 2026
85c11a5
Tighten memory and monitor boundary contracts
shuxueshuxue Apr 6, 2026
f362827
Tighten queue notification type contract
shuxueshuxue Apr 6, 2026
96f2709
Tighten lease and sqlite repo contracts
shuxueshuxue Apr 6, 2026
b5221f7
Tighten sandbox manager and runtime contracts
shuxueshuxue Apr 6, 2026
93c1185
Tighten chat session and storage contracts
shuxueshuxue Apr 6, 2026
5a2a799
Fix sandbox manager test terminal fixture
shuxueshuxue Apr 6, 2026
f5f8bfb
Tighten remaining singleton typing seams
shuxueshuxue Apr 6, 2026
d267803
Tighten AgentBay SDK boundary contracts
shuxueshuxue Apr 6, 2026
626fc87
Add stable labels to auth form fields
shuxueshuxue Apr 6, 2026
9949b7e
Handle missing thread lease without console noise
shuxueshuxue Apr 6, 2026
645eb61
Make async command status test shell-aware
shuxueshuxue Apr 6, 2026
042f6d9
Return null for missing thread lease status
shuxueshuxue Apr 6, 2026
3748fe8
refactor(db): drop dead tables and remove AccountRepo
nmhjklnm Apr 6, 2026
d8aa50c
refactor(chat): switch agent consumers to v2 MessagingService
nmhjklnm Apr 6, 2026
214d2cc
refactor(db): migrate chat v1 data to v2, drop v1 tables and code
nmhjklnm Apr 6, 2026
52a5bb3
refactor(storage): Supabase-only core storage, remove SQLite dispatch
nmhjklnm Apr 6, 2026
44bf70c
feat(settings): migrate user/observation/sandbox settings to Supabase
nmhjklnm Apr 6, 2026
91f0d90
feat(config): agent config + skills + sub-agents to Supabase
nmhjklnm Apr 6, 2026
559a8d9
fix(security): multi-tenant data isolation
nmhjklnm Apr 6, 2026
ed7bae2
chore: cleanup v1 chat tests and dead references
nmhjklnm Apr 6, 2026
4296d6d
fix: restore DB_PATH for sandbox SQLite repos, fix helpers.py imports
nmhjklnm Apr 6, 2026
47e1b4c
fix: messaging SSE auth + contacts router dedup
nmhjklnm Apr 6, 2026
486330d
fix(security): repo-level tenant isolation
nmhjklnm Apr 6, 2026
33b8602
refactor(member): wire agent_config_repo into member_service
nmhjklnm Apr 6, 2026
6cf3a48
refactor(ui): reduce nav to 4 items, new route structure
nmhjklnm Apr 6, 2026
5babf60
feat(frontend): Supabase client + realtime hooks
nmhjklnm Apr 6, 2026
1cb10ca
feat: unified conversation list API and store
nmhjklnm Apr 6, 2026
30300a1
feat: unified Chat page with Hire/Visit adaptive main area
nmhjklnm Apr 6, 2026
ce60aba
feat: Contacts page (agent directory + contacts)
nmhjklnm Apr 6, 2026
270419c
refactor: absorb invite-codes into Settings, delete old pages
nmhjklnm Apr 6, 2026
b4522bc
chore: mobile layout + dead code cleanup
nmhjklnm Apr 6, 2026
b59eb6e
refactor: simplify review fixes
nmhjklnm Apr 6, 2026
10d91a8
fix: additional simplify review fixes
nmhjklnm Apr 6, 2026
2269fa2
fix: CI failures — ruff import order, test import, TS strict null
nmhjklnm Apr 6, 2026
10964b0
fix: CI round 2 — ruff format, remove stale accounts param from test
nmhjklnm Apr 6, 2026
d6880a3
fix: graceful degradation when Supabase unavailable in tests/CLI
nmhjklnm Apr 6, 2026
df0c011
chore: delete dead SQLite providers + tests (-8600 lines)
nmhjklnm Apr 6, 2026
8171d19
ci: trigger on PRs targeting dev branch
nmhjklnm Apr 6, 2026
3260edf
fix: revert defensive fallbacks, keep strict Supabase-only
nmhjklnm Apr 6, 2026
c44ce70
fix: address PR review — outlet context, thread redirects, owner_user…
nmhjklnm Apr 6, 2026
a69016e
fix: unused var in ChatLayout, restore Supabase env in CI
nmhjklnm Apr 6, 2026
0cbc6a1
fix(ci): map correct secret names for Supabase env vars
nmhjklnm Apr 6, 2026
15e9e31
fix: remove stale db_path kwarg from resource snapshot upsert
nmhjklnm Apr 6, 2026
d611136
fix: event_store graceful noop when storage unavailable
nmhjklnm Apr 6, 2026
e9d2ef0
Fix Supabase pressure-path runtime seams
shuxueshuxue Apr 6, 2026
abbf4a7
Restore Supabase backend pressure-path contracts
shuxueshuxue Apr 6, 2026
60af593
chore: remove dead UI shells, unused helpers, and pure test scaffoldi…
shuxueshuxue Apr 6, 2026
8c3e7ab
fix: align panel task owner contract (#213)
shuxueshuxue Apr 6, 2026
acc63e9
Tighten streaming error logging seam
shuxueshuxue Apr 6, 2026
dad55e5
docs: capture resource monitor contract split
shuxueshuxue Apr 6, 2026
9be6f93
fix: align thread launch config contract (#214)
shuxueshuxue Apr 6, 2026
2e3fe1a
feat: add user-scoped resource overview route
shuxueshuxue Apr 6, 2026
a8a7a8e
fix: align panel member auth shell (#215)
shuxueshuxue Apr 6, 2026
c2d7219
Fix Supabase tool task id allocation
shuxueshuxue Apr 6, 2026
1a14fa8
Align resource projection shaping contracts
shuxueshuxue Apr 6, 2026
76a5d37
fix: align entities avatar auth shell (#216)
shuxueshuxue Apr 6, 2026
b83023f
Preserve lease start timestamps in user overview
shuxueshuxue Apr 6, 2026
d6e6d1c
Hide stale leases from user resource surfaces
shuxueshuxue Apr 6, 2026
ea75109
fix: align threads member ownership shell (#217)
shuxueshuxue Apr 6, 2026
1b0a123
Fail fast when web runtime lacks Postgres checkpointer
shuxueshuxue Apr 6, 2026
7f2f22b
Validate web checkpointer connectivity at startup
shuxueshuxue Apr 6, 2026
439be0d
Simplify streaming tool executor wiring
shuxueshuxue Apr 6, 2026
1c31d38
docs: capture model error recovery strategy plan
shuxueshuxue Apr 6, 2026
78d7fe3
refactor: turn model error recovery into strategy chain
shuxueshuxue Apr 6, 2026
298cbd7
refactor: align resource provider availability contract
shuxueshuxue Apr 6, 2026
0a6fbf1
refactor: rename monitor resource cache contract
shuxueshuxue Apr 6, 2026
324b6ad
fix: align auth router shell (#218)
shuxueshuxue Apr 6, 2026
b95e21a
docs: capture checkpoint store interface plan
shuxueshuxue Apr 6, 2026
8049928
fix: align entities member lookup shell (#219)
shuxueshuxue Apr 6, 2026
d013400
refactor: isolate loop from langgraph checkpoint format
shuxueshuxue Apr 6, 2026
7f8309f
fix: preserve post-init checkpointer wiring
shuxueshuxue Apr 6, 2026
9294efb
refactor: align memory middleware checkpoint wiring
shuxueshuxue Apr 6, 2026
3655dc5
fix: align messaging chat access shell (#220)
shuxueshuxue Apr 6, 2026
e48b7c2
docs: capture tool runner single async path plan
shuxueshuxue Apr 6, 2026
1b350b6
refactor: collapse tool runner sync twins
shuxueshuxue Apr 6, 2026
bae10dd
fix: align invite codes router shell (#221)
shuxueshuxue Apr 6, 2026
80efbdf
docs: capture storage repo unification plan
shuxueshuxue Apr 6, 2026
da17246
refactor: extend storage container repo coverage
shuxueshuxue Apr 6, 2026
b7aadef
refactor: inject panel repos into web services
shuxueshuxue Apr 6, 2026
1322b01
refactor: route runtime repos through storage container
shuxueshuxue Apr 6, 2026
dc95bcb
test: isolate leon agent runtime storage wiring
shuxueshuxue Apr 6, 2026
f56f76d
refactor: route resource snapshots through storage container
shuxueshuxue Apr 6, 2026
bf14a43
fix: preserve resource snapshot factory contract
shuxueshuxue Apr 6, 2026
d9e5b5e
chore: drop local superpowers docs from repo
shuxueshuxue Apr 7, 2026
f5d9535
fix: align settings workspace shell
shuxueshuxue Apr 6, 2026
d13f84d
chore: drop settings shell docs and integration test
shuxueshuxue Apr 7, 2026
fb3180d
test: split fix bucket by subject area
shuxueshuxue Apr 7, 2026
256f67a
fix: align settings local path shell (#224)
shuxueshuxue Apr 7, 2026
d23236e
refactor: align default-thread storage contract
shuxueshuxue Apr 7, 2026
4996ed0
fix: align thread file channel shell (#225)
shuxueshuxue Apr 7, 2026
313a2ec
fix: align resources overview shell (#226)
shuxueshuxue Apr 7, 2026
d83d10c
refactor: align route default-thread contract
shuxueshuxue Apr 7, 2026
1d9c05a
refactor: drop messaging main-thread residue
shuxueshuxue Apr 7, 2026
9bd8818
chore: remove resources shell helper test (#229)
shuxueshuxue Apr 7, 2026
cecfa83
refactor: align chat tool identity wording
shuxueshuxue Apr 7, 2026
a02ee74
chore: remove unused router loggers (#230)
shuxueshuxue Apr 7, 2026
b2fd39d
refactor: align chat identity prompt wording
shuxueshuxue Apr 7, 2026
00482c0
chore: inline settings local path checks (#231)
shuxueshuxue Apr 7, 2026
b1e3a21
refactor: add chat identity id bridge
shuxueshuxue Apr 7, 2026
d383c0a
chore: inline invite code repo lookup (#232)
shuxueshuxue Apr 7, 2026
1339207
chore: trim invite code helper tests (#233)
shuxueshuxue Apr 7, 2026
a435c71
chore: trim thread file helper tests (#234)
shuxueshuxue Apr 7, 2026
62e3574
chore: trim auth helper tests (#235)
shuxueshuxue Apr 7, 2026
189d628
refactor: add thread user id source
shuxueshuxue Apr 7, 2026
2c7c4b2
chore: remove unused settings save helper (#236)
shuxueshuxue Apr 7, 2026
6a81b6b
refactor: repoint chat identity source
shuxueshuxue Apr 7, 2026
fbde9e3
chore: trim entities helper tests (#237)
shuxueshuxue Apr 7, 2026
309a46d
refactor: resolve chat display ids from thread users
shuxueshuxue Apr 7, 2026
c952753
chore: remove unused directory ensure helpers (#238)
shuxueshuxue Apr 7, 2026
dc6b1d2
refactor: route chat delivery by thread users
shuxueshuxue Apr 7, 2026
5999979
chore: remove unused hook discovery helper (#239)
shuxueshuxue Apr 7, 2026
79fed44
chore: remove unused visibility helpers (#240)
shuxueshuxue Apr 7, 2026
4702860
refactor: resolve route chat display ids from thread users
shuxueshuxue Apr 7, 2026
f78b07a
chore: remove unused event cleanup helper (#241)
shuxueshuxue Apr 7, 2026
9961dda
chore: remove unused tool builder helper (#242)
shuxueshuxue Apr 7, 2026
c3aa5bc
refactor: resolve thread-user sender ownership
shuxueshuxue Apr 7, 2026
9d1bfd5
refactor: resolve chat tool thread-user targets
shuxueshuxue Apr 7, 2026
54cbb20
refactor: resolve chat read thread-user names
shuxueshuxue Apr 7, 2026
87f2ea8
chore: trim thread file helper test (#243)
shuxueshuxue Apr 7, 2026
d681e44
refactor: resolve relationship thread-user names
shuxueshuxue Apr 7, 2026
9797fbb
chore: trim invite code helper test (#244)
shuxueshuxue Apr 7, 2026
0518bbb
refactor: resolve chat search thread-user names
shuxueshuxue Apr 7, 2026
fff80a5
chore: remove dead invite code fallback (#245)
shuxueshuxue Apr 7, 2026
7a342e5
refactor: align chat entity ids with social handles
shuxueshuxue Apr 7, 2026
c9a5c81
chore: remove dead thread list fallback (#246)
shuxueshuxue Apr 7, 2026
2d1ec84
refactor: expose thread user ids in chat lists
shuxueshuxue Apr 7, 2026
b74d3df
refactor: resolve thread user prompt names
shuxueshuxue Apr 7, 2026
386eb01
chore: drop unused resource session helpers (#247)
shuxueshuxue Apr 7, 2026
24bcd98
refactor: expose thread user ids in directory
shuxueshuxue Apr 7, 2026
a5fe6b7
chore: remove dead resource type re-export (#248)
shuxueshuxue Apr 7, 2026
5d943d4
refactor: require thread repos for directory ids
shuxueshuxue Apr 7, 2026
370af23
chore: unexport internal workspace settings type (#249)
shuxueshuxue Apr 7, 2026
b1ab7c3
refactor: preserve owner visibility in directory
shuxueshuxue Apr 7, 2026
c02f53b
chore: remove unused frontend internal types (#250)
shuxueshuxue Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
42 changes: 35 additions & 7 deletions .claude/commands/wtnew.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 创建 Worktree

基于最新 `origin/main` 创建隔离的 worktree 开发环境。
基于最新 `origin/dev` 创建隔离的 worktree 开发环境,并自动拉起一个并行工作的 Kitty + Codex 开发位

## 参数

Expand All @@ -21,7 +21,7 @@ PROJECT_NAME=$(basename "$MAIN_REPO")
git fetch origin
```

确保基于最新的 `origin/main` 创建,避免从过时的 base 分叉。
确保基于最新的 `origin/dev` 创建,避免从过时的 base 分叉。

## Step 2:启用 worktreeConfig

Expand All @@ -38,7 +38,7 @@ git config extensions.worktreeConfig true
路径规则:`~/worktrees/<项目名>--<目录名>`(如 `~/worktrees/leon--feat-eval`)

```bash
git worktree add "$HOME/worktrees/$PROJECT_NAME--<目录名>" -b $ARGUMENTS origin/main
git worktree add "$HOME/worktrees/$PROJECT_NAME--<目录名>" -b $ARGUMENTS origin/dev
```

- worktree 存放在 `~/worktrees/`,与主仓库完全隔离
Expand Down Expand Up @@ -163,16 +163,44 @@ ln -s "$MAIN_REPO/CLAUDE.local.md" CLAUDE.local.md 2>/dev/null
输出:
- worktree 路径
- 分支名
- base 分支(必须明确是 `origin/dev`)
- 分配的端口(backend / frontend)
- 自动生成的描述
- `CLAUDE.local.md` 符号链接状态

询问用户:是否在新 worktree 中打开新的 Claude 会话?
## Step 9:自动拉起 Kitty + Codex 并行工作位

如果是,用 osascript 打开新终端并启动 claude(**必须将路径替换为实际计算出的完整绝对路径,不得使用变量或占位符**):
不要再询问“是否打开新的 Claude 会话”。默认直接拉起一个新的 Kitty tab,并在里面启动 Codex。

要求:
- tab title 固定为 `dev-feature`
- Codex 必须在新建好的 worktree 路径里启动
- 必须用实际计算出的完整绝对路径,不得保留变量或占位符
- 如果当前 shell 没有 `KITTY_LISTEN_ON`,要明确报错并停下,不要静默跳过

执行命令(**必须将路径替换为实际计算出的完整绝对路径,不得使用变量或占位符**):

```bash
osascript -e 'tell app "Terminal" to do script "cd \"/Users/apple/worktrees/<项目名>--<目录名>\" && claude"'
if [ -z "$KITTY_LISTEN_ON" ]; then
echo "❌ 错误:未设置 KITTY_LISTEN_ON,无法自动创建 dev-feature kitty tab"
exit 1
fi

kitty @ --to "$KITTY_LISTEN_ON" launch \
--type tab \
--tab-title "dev-feature" \
--title "dev-feature" \
zsh -lc 'cd "/Users/apple/worktrees/<项目名>--<目录名>" && codex --cd "/Users/apple/worktrees/<项目名>--<目录名>"'
```

关键:`cd` 和 `claude` 必须写在 osascript 的 `do script` 字符串内部,不是写在外层 Bash 命令里。
关键:
- `cd` 和 `codex --cd ...` 必须写在新 tab 的命令字符串内部
- `codex --cd` 和前面的 `cd` 都必须指向同一个实际 worktree 绝对路径
- 不要退回 Terminal / osascript;这里的标准交互面就是 Kitty tab

## Step 10:最终输出

除了原有输出,再追加:
- `Codex tab: dev-feature`
- `Codex cwd: <worktree 绝对路径>`
- 如果启动成功,明确说明“并行开发位已就绪”
7 changes: 6 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ name: CI

on:
push:
branches: [main]
branches: [main, dev]
pull_request:
branches: [main, dev]

jobs:
lint:
Expand Down Expand Up @@ -41,6 +42,10 @@ jobs:
- name: Run tests
# --maxfail=5: surface up to 5 failures per platform before stopping
# e2e tests self-skip via skipif when provider secrets are absent
env:
SUPABASE_PUBLIC_URL: ${{ secrets.SUPABASE_PUBLIC_URL }}
LEON_SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}
SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
run: uv run pytest tests/ --ignore=tests/test_e2e_providers.py --ignore=tests/test_sandbox_e2e.py --ignore=tests/test_daytona_e2e.py --ignore=tests/test_e2e_backend_api.py --ignore=tests/test_e2e_summary_persistence.py --ignore=tests/test_p3_e2e.py --maxfail=5 --timeout=60 -q

frontend:
Expand Down
102 changes: 87 additions & 15 deletions .github/workflows/deploy-staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ name: Deploy Staging
# Both update the staging apps to the target branch, then deploy.

on:
push:
branches:
- pr188-agent-optimize
pull_request:
types: [labeled]
workflow_dispatch:
Expand All @@ -23,43 +26,112 @@ jobs:
deploy-staging:
# For label trigger: only run when the label is exactly "deploy-staging"
if: >
github.event_name == 'push' ||
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'pull_request' && github.event.label.name == 'deploy-staging')
runs-on: ubuntu-latest
env:
STAGING_STACK_UUID: fasbsube26s75ag6qus5bpi2

steps:
- name: Resolve target ref
id: ref
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "ref=${{ github.head_ref }}" >> "$GITHUB_OUTPUT"
elif [ "${{ github.event_name }}" = "push" ]; then
echo "ref=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
else
echo "ref=${{ inputs.ref }}" >> "$GITHUB_OUTPUT"
fi

- name: Update staging backend branch
- name: Check out target ref
uses: actions/checkout@v4
with:
ref: ${{ steps.ref.outputs.ref }}

- name: Resolve target commit
id: target
run: |
curl -s -X PATCH "${{ secrets.COOLIFY_URL }}/api/v1/applications/${{ secrets.COOLIFY_BACKEND_STAGING_UUID }}" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"git_branch": "${{ steps.ref.outputs.ref }}"}'
set -euo pipefail
echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"

- name: Assert repo staging compose contract
run: |
set -euo pipefail
grep -F "leon-home:/root/.leon" docker-compose.yml >/dev/null
grep -F "volumes:" docker-compose.yml >/dev/null

- name: Update staging frontend branch
- name: Update staging stack branch
run: |
curl -s -X PATCH "${{ secrets.COOLIFY_URL }}/api/v1/applications/${{ secrets.COOLIFY_FRONTEND_STAGING_UUID }}" \
set -euo pipefail
body="$(curl -sS --fail-with-body -X PATCH "${{ secrets.COOLIFY_URL }}/api/v1/applications/${STAGING_STACK_UUID}" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"git_branch": "${{ steps.ref.outputs.ref }}"}'
-d "{\"git_branch\": \"${{ steps.ref.outputs.ref }}\"}")"
echo "$body"
printf '%s' "$body" | jq -e --arg uuid "$STAGING_STACK_UUID" '.uuid == $uuid' >/dev/null

- name: Deploy staging stack
id: deploy
run: |
set -euo pipefail
body="$(curl -sS --fail-with-body "${{ secrets.COOLIFY_URL }}/api/v1/deploy?uuid=${STAGING_STACK_UUID}&force=false" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}")"
echo "$body"
printf '%s' "$body" | jq -e --arg uuid "$STAGING_STACK_UUID" '.deployments[0].resource_uuid == $uuid' >/dev/null
echo "deployment_uuid=$(printf '%s' "$body" | jq -r '.deployments[0].deployment_uuid')" >> "$GITHUB_OUTPUT"

- name: Wait for staging deployment
run: |
set -euo pipefail
deployment_uuid="${{ steps.deploy.outputs.deployment_uuid }}"
for _ in $(seq 1 60); do
body="$(curl -sS --fail-with-body "${{ secrets.COOLIFY_URL }}/api/v1/deployments/${deployment_uuid}" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}")"
status="$(printf '%s' "$body" | jq -r '.status')"
echo "deployment status: $status"
if [ "$status" = "finished" ]; then
exit 0
fi
if [ "$status" != "queued" ] && [ "$status" != "in_progress" ]; then
echo "$body"
exit 1
fi
sleep 10
done
echo "Timed out waiting for staging deployment ${deployment_uuid}"
exit 1

- name: Deploy backend to staging
- name: Verify Coolify staging contract
run: |
curl -sX GET "${{ secrets.COOLIFY_URL }}/api/v1/deploy?uuid=${{ secrets.COOLIFY_BACKEND_STAGING_UUID }}&force=false" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}"
set -euo pipefail
body="$(curl -sS --fail-with-body "${{ secrets.COOLIFY_URL }}/api/v1/applications/${STAGING_STACK_UUID}" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}")"
echo "$body" | jq '{uuid,git_branch,docker_compose_location}'
printf '%s' "$body" | jq -e --arg ref "${{ steps.ref.outputs.ref }}" '.git_branch == $ref' >/dev/null
printf '%s' "$body" | jq -e '.docker_compose_raw | contains("leon-home:/root/.leon")' >/dev/null
printf '%s' "$body" | jq -e --arg volume "${STAGING_STACK_UUID}_leon-home:/root/.leon" '.docker_compose | contains($volume)' >/dev/null
printf '%s' "$body" | jq -e --arg sha "${{ steps.target.outputs.sha }}" '.docker_compose | contains($sha)' >/dev/null

- name: Deploy frontend to staging
- name: Verify staging health contract
run: |
curl -sX GET "${{ secrets.COOLIFY_URL }}/api/v1/deploy?uuid=${{ secrets.COOLIFY_FRONTEND_STAGING_UUID }}&force=false" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}"
set -euo pipefail
for attempt in $(seq 1 18); do
status="$(curl -sS -o /tmp/staging-health.json -w '%{http_code}' "https://app.staging.mycel.nextmind.space/api/monitor/health")"
echo "health attempt ${attempt}: status=${status}"
if [ "$status" = "200" ]; then
body="$(cat /tmp/staging-health.json)"
echo "$body"
printf '%s' "$body" | jq -e '.db.path == "/root/.leon/sandbox.db"' >/dev/null
printf '%s' "$body" | jq -e '.db.exists == true' >/dev/null
exit 0
fi
cat /tmp/staging-health.json || true
sleep 10
done
echo "Staging health contract did not become ready in time"
exit 1

- name: Comment on PR with staging URL
if: github.event_name == 'pull_request'
Expand All @@ -70,5 +142,5 @@ jobs:
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🚀 **预发部署已触发**\n\n- 前端: https://app.staging.mycel.nextmind.space\n- 后端: https://api.staging.mycel.nextmind.space\n\n分支: \`${{ steps.ref.outputs.ref }}\``
body: `🚀 **预发部署已触发**\n\n- 共享 Staging: https://app.staging.mycel.nextmind.space\n- API(同域反代): https://app.staging.mycel.nextmind.space/api\n\n分支: \`${{ steps.ref.outputs.ref }}\``
})
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ worktrees/
# Development artifacts — never commit
docs/lessons/
docs/plans/
docs/superpowers/plans/
docs/superpowers/specs/
frontend/.vite/
.playwright-cli/
ops
Expand Down
6 changes: 4 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

# Install dependencies (cached layer before source copy)
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-install-project
# @@@sandbox-sdk-image-parity - shared staging/provider inventory should reflect runtime truth,
# not "SDK missing from image" accidents while config files are present.
RUN uv sync --frozen --no-dev --extra sandbox --extra e2b --extra daytona --no-install-project

# Copy source and install project
COPY . .
RUN uv sync --frozen --no-dev
RUN uv sync --frozen --no-dev --extra sandbox --extra e2b --extra daytona

ENV PATH="/app/.venv/bin:$PATH"

Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,16 +95,18 @@ Full-featured web platform for managing and interacting with agents:

### Multi-Agent Communication

Agents are first-class social entities. They can discover each other, send messages, and collaborate autonomously:
Agents are first-class social entities. They can list chats, read messages, send messages, and collaborate autonomously:

```
Member (template)
└→ Entity (social identity — agents and humans both get one)
└→ Thread (agent brain / conversation)
```

- **`chat_send`**: Agent A messages Agent B; B responds autonomously
- **`directory`**: Agents browse and discover other entities
- **`list_chats`**: List active conversations with unread counts and participants
- **`read_messages`**: Read message history before responding
- **`send_message`**: Agent A messages Agent B; B responds autonomously
- **`search_messages`**: Search message history across chats
- **Real-time delivery**: SSE-based chat with typing indicators and read receipts

Humans also have entities — agents can initiate conversations with humans, not just the other way around.
Expand Down
8 changes: 5 additions & 3 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,16 +95,18 @@ cd frontend/app && npm run dev

### 多 Agent 通讯

Agent 是一等公民的社交实体,可以互相发现、发送消息、自主协作:
Agent 是一等公民的社交实体,可以列出对话、读取消息、发送消息、自主协作:

```
Member(模板)
└→ Entity(社交身份——Agent 和人类都有)
└→ Thread(Agent 大脑 / 对话)
```

- **`chat_send`**:Agent A 给 Agent B 发消息,B 自主回复
- **`directory`**:Agent 浏览和发现其他实体
- **`list_chats`**:列出活跃对话、未读数和参与者
- **`read_messages`**:先读取消息历史,再决定如何回复
- **`send_message`**:Agent A 给 Agent B 发消息,B 自主回复
- **`search_messages`**:跨对话搜索消息历史
- **实时投递**:基于 SSE 的聊天,支持输入提示和已读回执

人类也有 Entity——Agent 可以主动找人类对话,而不只是被动响应。
Expand Down
25 changes: 25 additions & 0 deletions backend/taskboard/_service_loader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""Typed task_service loader for taskboard surfaces."""

from __future__ import annotations

from typing import Any, Protocol, cast


class TaskServiceProtocol(Protocol):
def list_tasks(self) -> list[dict[str, Any]]: ...
def get_task(self, task_id: str) -> dict[str, Any] | None: ...
def get_highest_priority_pending_task(self) -> dict[str, Any] | None: ...
def create_task(self, **fields: Any) -> dict[str, Any]: ...
def update_task(self, task_id: str, **fields: Any) -> dict[str, Any] | None: ...


try:
from backend.web.services import task_service as _task_service
except ImportError:
_task_service = None


def require_task_service() -> TaskServiceProtocol:
if _task_service is None:
raise RuntimeError("backend.web.services.task_service is unavailable")
return cast(TaskServiceProtocol, _task_service)
Loading
Loading