Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
531 commits
Select commit Hold shift + click to select a range
720ee8a
fix(acp): route session/resume and session/fork in _agent_handler
Leoyzen May 29, 2026
bcd8ac8
feat(acp): MCP-over-ACP Transport Support (#35)
Leoyzen Jun 1, 2026
7dea913
feat(orchestrator): implement unified session orchestration, capabili…
Leoyzen Jun 5, 2026
0fad1a0
fix(acp_server): address PR review comments on race conditions and ty…
Leoyzen Jun 1, 2026
5e49b4a
chore(openspec): archive completed changes and sync specs to main
Leoyzen Jun 5, 2026
fc31c57
fix(agentpool): forward input_provider through SessionPool.run_stream…
Leoyzen Jun 5, 2026
645f6a4
fix(agentpool): propagate input_provider through OpenCode/ACP to prev…
Leoyzen Jun 5, 2026
bfffc60
fix(agentpool): persist input_provider in SessionState for auto-resume
Leoyzen Jun 5, 2026
2a0e8d7
fix(acp): support bidirectional mcp/message per MCP-over-ACP spec
Leoyzen Jun 5, 2026
1b547e3
fix(resource_providers): set __wrapped__ on pydantic-ai wrapper for p…
Leoyzen Jun 5, 2026
02f76f2
fix(acp): expose session MCP tools to native agent via SessionPool
Leoyzen Jun 5, 2026
51ee46d
feat(config): default-enable session pool for ACP and OpenCode
Leoyzen Jun 5, 2026
560ad8e
fix(acp_server): deduplicate session MCP providers on repeated prompts
Leoyzen Jun 5, 2026
ad638fe
refactor(storage): remove sync title callback, use metadata_generated…
Leoyzen Jun 5, 2026
c662f29
docs(openspec): archive remove-title-callback-use-metadata-signal change
Leoyzen Jun 5, 2026
2eacba4
fix(agentpool): propagate input_provider to subagent and worker deleg…
Leoyzen Jun 5, 2026
857159f
feat(orchestrator): unify TurnRunner, bind InputProvider to SessionSt…
Leoyzen Jun 6, 2026
926a87f
fix(mcp-over-acp): add correlation registry for elicitation passthrough
Leoyzen Jun 8, 2026
c314937
fix(mcp-over-acp): handle elicitation/create without inner id
Leoyzen Jun 8, 2026
0a85a1d
test(acp): add fastmcp e2e integration tests for MCP-over-ACP
Leoyzen Jun 8, 2026
1a5c0f6
fix(acp): handle flat-format mcp/message from ACP clients
Leoyzen Jun 8, 2026
63a21e7
fix(acp): handle MCP elicitation locally instead of forwarding to ACP…
Leoyzen Jun 8, 2026
d41417e
fix(acp): send elicitation response back to MCP server instead of Cli…
Leoyzen Jun 8, 2026
8e1aba8
fix(eventbus): resolve remaining PLW2901 and test issues
Leoyzen Jun 9, 2026
3c722f6
archive: session-shared-mcp-providers to archive/2026-06-10
Leoyzen Jun 10, 2026
2d72edd
refactor(opencode,acp,orchestrator): unify session execution under Se…
Leoyzen Jun 10, 2026
0be1341
fix(opencode_server): implement missing /project/{id}/directories end…
Leoyzen Jun 11, 2026
ba819b1
docs(acp): correct AGENTS.md ACP scope description
Leoyzen Jun 11, 2026
352d6df
test(opencode): add subagent event behavioral locking tests
Leoyzen Jun 11, 2026
31c5277
refactor(acp,opencode): remove legacy SessionPool feature flags
Leoyzen Jun 11, 2026
b866b07
chore(tests): use env vars for test model defaults
Leoyzen Jun 11, 2026
4be3dd7
refactor(opencode): adopt ProtocolEventConsumerMixin, remove descenda…
Leoyzen Jun 11, 2026
56b250f
feat(agui,api): adopt ProtocolEventConsumerMixin with child consumer …
Leoyzen Jun 11, 2026
3844a63
fix(opencode_server): correctly route subagent events and prioritize …
Leoyzen Jun 11, 2026
77ac7d5
Merge feat/migrate-subagent-events: Tasks 1-5 (OpenCode mixin adoptio…
Leoyzen Jun 11, 2026
2b1cbb5
fix(mixins): resolve circular import by moving EventEnvelope to TYPE_…
Leoyzen Jun 11, 2026
217d8e3
fix(opencode_server): skip child streaming events in parent consumer …
Leoyzen Jun 11, 2026
4370d66
test: fix test suite for ProtocolEventConsumerMixin adoption
Leoyzen Jun 11, 2026
94f4016
fix(acp-mcp): increase timeouts for URL-mode elicitation
Leoyzen Jun 11, 2026
60b4614
fix(opencode): restore parent ToolPart updates for child consumers wi…
Leoyzen Jun 11, 2026
fd9b0c7
fix(acp-mcp): increase ACP message forwarding timeouts to 300s
Leoyzen Jun 11, 2026
0a25012
feat(agui,api): adopt ProtocolEventConsumerMixin with child consumer …
Leoyzen Jun 11, 2026
2dba7e9
fix(opencode_server): correctly route subagent events and prioritize …
Leoyzen Jun 11, 2026
37ce229
fix(mixins): resolve circular import by moving EventEnvelope to TYPE_…
Leoyzen Jun 11, 2026
4584403
fix(opencode_server): skip child streaming events in parent consumer …
Leoyzen Jun 11, 2026
ad63856
test: fix test suite for ProtocolEventConsumerMixin adoption
Leoyzen Jun 11, 2026
7467ea3
fix(opencode): restore parent ToolPart updates for child consumers wi…
Leoyzen Jun 11, 2026
4330f51
feat(agentpool): support parallel teams with prompts, hook context, a…
Apr 30, 2026
1ce7ac0
fix(agentpool): address review feedback for hooks and team prompts
Apr 30, 2026
c06373c
feat(agentpool): support packaged config includes and opencode worksp…
May 8, 2026
c24d7ff
fix(hooks): let CallableHook.execute propagate exceptions to _run_hooks
May 10, 2026
d0d77cf
feat(teams): add per-member timeout for parallel teams
May 10, 2026
636d80a
fix(server): isolate message history per task invocation
May 13, 2026
270bdab
revert(teams): remove MessageHistory injection from Team/TeamRun
May 13, 2026
22e412f
fix: correct MessageHistory import path (messaging, not talk)
May 14, 2026
322ba75
fix(config): resolve kw_args.schemas paths in include_packages
May 15, 2026
777f405
fix(opencode): infer default model from manifest default_agent
May 15, 2026
8b7b9a3
fix(opencode): handle variant name in structured model config
May 15, 2026
02008a5
revert(server): remove serve-api MessageHistory injection
May 20, 2026
c3d8c69
fix(subagent): restore MessageHistory isolation in SubagentTools.task()
May 20, 2026
3517e30
fix(subagent): return task errors to parent agents
May 22, 2026
518e13d
Revert "fix(subagent): return task errors to parent agents"
May 22, 2026
ba465d5
feat(subagent): serialize structured output as JSON in task() results
May 22, 2026
32a7a54
fix(output): propagate result_tool_name from StructuredResponseConfig…
May 22, 2026
e3d8b18
stop native agent stream after completion tool
Jun 3, 2026
1079787
Add metadata-driven terminal tool handling
Jun 3, 2026
0563b5e
Allow agents to opt out of pool MCP inheritance
Jun 4, 2026
850cef4
fix: show todo update notices in opencode
Jun 4, 2026
f97def6
fix: keep opencode todo list task-only
Jun 4, 2026
0dda80a
Make SQL message logging idempotent
Jun 6, 2026
8890eba
Restore deprecated session descriptor
Jun 8, 2026
9a5230f
Fix team template execution context
Jun 8, 2026
743afad
Merge branch 'feat/migrate-subagent-events' into develop/agentic
Leoyzen Jun 11, 2026
c73446e
Honor member timeout in graph teams
Jun 8, 2026
6490985
Remove MCP inheritance opt-out
Jun 9, 2026
301fa52
feat: load team member skills from pool
Jun 10, 2026
564909b
feat: render reviewer skill catalog placeholders
Jun 10, 2026
e741521
Remove redundant skill fallback paths
Jun 11, 2026
6936d07
fix(acp): expand slash commands in SessionPool handler path
Leoyzen Jun 11, 2026
8d95d2d
fix schema override top-level merging
Jun 12, 2026
a43b43d
feat: isolate team members by session
Jun 12, 2026
e6ca795
bind opencode sessions to requested agent
Jun 12, 2026
48b432b
tolerate deleted opencode sessions during cleanup
Jun 12, 2026
c28e4f8
refactor: remove deprecated dead code and reclassify stable APIs (Pha…
Leoyzen Jun 12, 2026
efcb871
Expose skill instruction provider failures
Jun 12, 2026
0db7457
feat(durable): Wave 1 - foundation models, events, config, tool field…
Leoyzen Jun 12, 2026
16488fc
feat(durable): Wave 2 - storage layer checkpoint support (Tasks 8-11)
Leoyzen Jun 12, 2026
f6392d3
feat(durable): Wave 3 - core bridge (Tasks 12,13,14,16)
Leoyzen Jun 12, 2026
9155971
feat(durable): wire DeferredToolBridge before ApprovalBridge (Task 15)
Leoyzen Jun 12, 2026
d31be6d
feat(durable): add SessionPool.resume_session() for native and ACP ag…
Leoyzen Jun 12, 2026
2ff6fa1
feat(durable): Wave 4 - orchestrator checkpoint/resume (Tasks 18-20)
Leoyzen Jun 12, 2026
931f987
feat(acp): Waves 5 - ACP deferred events, session/resume, session/loa…
Leoyzen Jun 12, 2026
111572a
feat(opencode): Wave 6 - deferred ToolPart, session resume with conte…
Leoyzen Jun 12, 2026
de70e62
feat(orchestrator): add deferred timeout auto-expiry with cleanup loo…
Leoyzen Jun 12, 2026
5554354
feat(core): add agent_config_hash with drift detection (Task 29)
Leoyzen Jun 12, 2026
d6b4b46
feat(core): auto-compact message_history before checkpoint when above…
Leoyzen Jun 12, 2026
63fd35d
fix: resolve test regressions from durable-execution changes
Leoyzen Jun 12, 2026
18c5b4d
fix(migrations): correct down_revision to chain from existing head
Leoyzen Jun 12, 2026
ab6420b
fix: resolve 14 test failures across 4 root causes
Leoyzen Jun 13, 2026
c6af037
Fix opencode child task session rendering
Jun 14, 2026
f41d266
Prefer live opencode messages for session rendering
Jun 15, 2026
ecdd506
Preserve MCP text content in tool returns
Jun 15, 2026
6bdab91
Preserve ToolReturn content in MCP bridge
Jun 15, 2026
e64369f
feat(core): Add _turn_owner_task and _in_turn_context infrastructure
Leoyzen Jun 15, 2026
83153a1
feat(core): Update TurnRunner and add _should_route_via_sessionpool()
Leoyzen Jun 15, 2026
66af1a7
Stabilize scoped team session execution
Jun 15, 2026
0aea6af
Merge origin/develop/agentic into rebuttal agent branch
Jun 15, 2026
925f8ec
refactor(agents): Simplify run_stream()/run() routing, remove bypass …
Leoyzen Jun 15, 2026
eb3283f
test(core): Add turn-owner tests, update redflag test, cleanup
Leoyzen Jun 15, 2026
a8f9d1d
chore: Mirror bypass-session-pool removal to agentpool-thin
Leoyzen Jun 15, 2026
0246329
fix(acp): Pass session_manager to ACPProtocolHandler constructor
Leoyzen Jun 15, 2026
58e5a8f
fix(acp): use replace=True when registering skill commands to session…
Leoyzen Jun 16, 2026
43d5b43
feat(agentpool): unify steer/followup message injection for native ag…
Leoyzen Jun 16, 2026
7df7ab8
feat(run_executor): add concurrent-run warning + session_id/parent_se…
Leoyzen Jun 16, 2026
293d903
feat(run_executor): add ToolCallStartEvent dedup, PartStartEvent mapp…
Leoyzen Jun 16, 2026
6e58610
refactor(native_agent): use RunExecutor.execute() in _stream_events()…
Leoyzen Jun 16, 2026
d5be2ed
refactor(native_agent): remove _run_agentlet_core(), migrate callers …
Leoyzen Jun 16, 2026
9e2c2ef
refactor(native_agent): remove merge_queue_into_iterator import; clea…
Leoyzen Jun 16, 2026
523c312
refactor: migrate standalone callers (ACP, Vercel, OpenAI API) to Ses…
Leoyzen Jun 16, 2026
0ba08a7
refactor(base_agent): remove _execute_direct() fallback, require Sess…
Leoyzen Jun 16, 2026
25c9c99
test: full suite verification; docs: document known regressions in st…
Leoyzen Jun 16, 2026
adae987
chore(openspec): archive migrate-to-runexecutor-and-sessionpool change
Leoyzen Jun 16, 2026
b643ae0
fix(core): move agent_type assignment outside conditional to prevent …
Leoyzen Jun 16, 2026
9389293
Merge remote-tracking branch 'origin/develop/agentic' into feature/ta…
Jun 16, 2026
48fa13e
refactor(core): layer run_stream() as react loop, restore standalone …
Leoyzen Jun 17, 2026
f3e874a
refactor: keep skill loading domain neutral
Jun 17, 2026
fcb50d4
fix: resolve piping test hang and test suite failures
Leoyzen Jun 17, 2026
4312d02
fix(run_executor): restore progress event delivery from run_ctx.event…
Leoyzen Jun 17, 2026
94d7a88
fix(agent): skip duplicate MCP tool registration; add as_capability()…
Leoyzen Jun 17, 2026
d8f86d3
fix(core): propagate input_provider and forwarding; fix child session…
Leoyzen Jun 17, 2026
2ccf905
fix(orchestrator): use run_stream() in TurnRunner; share env and inte…
Leoyzen Jun 17, 2026
f8324cf
fix(workers): propagate input_provider in async worker tool
Leoyzen Jun 17, 2026
ee431fc
test(acp): regenerate snapshots with deterministic message_id
Leoyzen Jun 17, 2026
8d67efb
test(opencode_server): fix server_state fixture for EventBus subscrip…
Leoyzen Jun 17, 2026
45fb2d0
test: restore accidentally deleted test_processors.py helper
Leoyzen Jun 17, 2026
95591dd
fix(acp): route resume/load_session through session_manager.resume_se…
Leoyzen Jun 17, 2026
5afd88b
fix(acp): resolve merge conflict in test_acp_resume.py - use resume_s…
Leoyzen Jun 17, 2026
104b16a
feat: route receive_request() to steer/followup instead of deprecated…
Leoyzen Jun 17, 2026
b7318a7
chore: archive 9 completed openspec changes
Leoyzen Jun 17, 2026
b81731e
chore: sync delta specs to main specs after archive
Leoyzen Jun 17, 2026
0a56ed6
fix: add YAML frontmatter to SKILL.md in test_local_resource_provider…
Leoyzen Jun 17, 2026
7aee607
fix(acp): prevent duplicate model entries in available_models
Leoyzen Jun 17, 2026
9cba210
fix(acp): validate resolved model identifiers in set_session_model
Leoyzen Jun 17, 2026
2fe974f
fix(acp): use resolved identifiers as modelId in available_models
Leoyzen Jun 17, 2026
660d410
fix(acp): resolve model identifiers through get_model() for accurate …
Leoyzen Jun 17, 2026
42899f7
Merge origin/develop/agentic into rebuttal agent branch
Jun 18, 2026
dd15225
refactor(agents): remove EventBusHooksAdapter and consolidate RunFail…
Leoyzen Jun 18, 2026
1a49e73
refactor(server): add _skip_event_processing flag, merge SessionStatu…
Leoyzen Jun 18, 2026
b2428ee
refactor(acp): remove fallback path, rename _active to _acp_sessions
Leoyzen Jun 18, 2026
4837e3f
test: update test expectations for SessionStatusBridge removal
Leoyzen Jun 18, 2026
c9ff5db
refactor(config): remove OpenCodeConfig feature flags
Leoyzen Jun 19, 2026
e5c998d
refactor(opencode): simplify session_pool_integration.py — remove hel…
Leoyzen Jun 19, 2026
290ca11
refactor(opencode): route auxiliary paths through SessionPool uncondi…
Leoyzen Jun 19, 2026
d85812a
test(opencode): update integration tests for single-path SessionPool
Leoyzen Jun 19, 2026
661c222
test(opencode): update route tests for unconditional SessionPool
Leoyzen Jun 19, 2026
a7ec675
test(opencode): update ensure-session tests
Leoyzen Jun 19, 2026
f43d3e8
test(opencode): update remaining test files for single-path SessionPool
Leoyzen Jun 19, 2026
625d91b
refactor(scripts): remove should_use_session_pool_for mock from qa_te…
Leoyzen Jun 19, 2026
55e7a52
test: update acp and ancillary test files
Leoyzen Jun 19, 2026
fc7b98d
chore: sync delta specs to main specs after cleanup-opencode-sessionp…
Leoyzen Jun 19, 2026
6b57615
merge: cleanup/acp-server-single-path into develop/agentic
Leoyzen Jun 19, 2026
9fa7535
chore: archive cleanup-acp-server-single-path, sync specs to main
Leoyzen Jun 19, 2026
764dba8
fix: resolve 79 test failures after EventBus/single-path refactoring
Leoyzen Jun 19, 2026
6d000ef
fix: honor terminal and title control metadata
Jun 20, 2026
a8aaf1d
docs: update AGENTS.md with OpenSpec workflow and architecture sections
Leoyzen Jun 22, 2026
419a3f6
Merge remote-tracking branch 'origin/develop/agentic' into feature/ta…
Jun 22, 2026
1557dda
feat: Add WebSocket heartbeat configuration support with enhanced log…
Leoyzen Jun 22, 2026
5749eda
fix(orchestrator): restore MCP provider inheritance for child sessions
Leoyzen Jun 22, 2026
9b8353b
fix(acp): remove duplicate available_commands_update from session.ini…
Leoyzen Jun 22, 2026
2a3f565
Merge remote-tracking branch 'origin/develop/agentic' into feature/ta…
Jun 22, 2026
a13d491
fix(run_executor): treat RunAbortedError as graceful cancellation, no…
Leoyzen Jun 22, 2026
beae3d2
fix: resolve circular imports preventing serve-acp startup
Leoyzen Jun 22, 2026
0ced329
fix(acp): fix get_session() returning None when session not yet in co…
Leoyzen Jun 22, 2026
1b3228b
feat: isolate package scoped skills
Jun 22, 2026
6883c1c
Merge origin/develop/agentic into rebuttal agent branch
Jun 22, 2026
b6d3547
fix: wire session-level MCP providers into pool skill aggregator
Leoyzen Jun 22, 2026
9a74fe7
fix(orchestrator): remove MCP provider inheritance for child sessions
Leoyzen Jun 22, 2026
d872478
fix(acp): handle RunFailedEvent in event converter
Leoyzen Jun 22, 2026
7ded703
fix(acp): send fallback JSON-RPC error on invalid upstream MCP response
Leoyzen Jun 22, 2026
35e6990
fix(toolsets): propagate InputProvider from SessionState in subagent …
Leoyzen Jun 22, 2026
92ed1e9
feat(acp): add zed subagent display mode for ACPEventConverter
Leoyzen Jun 22, 2026
b06554d
fix(orchestrator): create lightweight per-session agent for child ses…
Leoyzen Jun 23, 2026
4a88dd6
fix(acp): restore conversation history without duplicates or cross-se…
Jun 23, 2026
84f251c
Merge origin/develop/agentic into rebuttal agent branch
Jun 23, 2026
c1dd5c9
Merge pull request #54 from Million-mo/develop/agentic
Million-mo Jun 23, 2026
c09a75c
fix(acp): route session/cancel through SessionPool to cancel correct …
Jun 23, 2026
6840466
feat(acp): proactively create per-session agent with conversation his…
Jun 23, 2026
5a156f8
fix(orchestrator): schedule async interrupt() via asyncio.ensure_futu…
Jun 23, 2026
d4f7d7c
Merge pull request #55 from Million-mo/develop/agentic
Million-mo Jun 23, 2026
9cb7a73
fix(mcp): wire elicitation callback into PydanticAI MCP capabilities …
Leoyzen Jun 23, 2026
e62d92c
fix(skills): hide absolute paths and add local-over-MCP priority
Leoyzen Jun 23, 2026
c722590
fix: abort agent run on ACP elicitation cancel
Leoyzen Jun 23, 2026
baf4b2c
fix(orchestrator): suppress spurious RunFailedEvent after StreamCompl…
Leoyzen Jun 23, 2026
2f3d2de
fix: convert tool call parameter errors to ModelRetry instead of cras…
Leoyzen Jun 23, 2026
f2a6e47
fix(mcp): check server capabilities before calling list_resources and…
Leoyzen Jun 23, 2026
6f06024
fix(local): avoid double references/ prefix in read_reference
Leoyzen Jun 23, 2026
d2a77ea
fix(skills): use exact type check for PurePosixPath to avoid routing …
Leoyzen Jun 23, 2026
2f328a9
fix(skills): prioritize resolver fallback ref path for provider-less …
Leoyzen Jun 23, 2026
9d707c3
perf(skills): defer MCP skill sync to background, parallelize discove…
Leoyzen Jun 23, 2026
ded9b8e
chore: update claude opsx skill.
Leoyzen Jun 23, 2026
f593656
docs(openspec): add introduce-anyio-structured-concurrency change plan
Leoyzen Jun 24, 2026
5129ee4
fix: add missing _cancel_tasks to TurnRunner
Leoyzen Jun 24, 2026
0874cb2
Merge branch 'develop/agentic' into feature/tasiawang/rebuttal_agent
Million-mo Jun 24, 2026
edf34ea
Merge pull request #28 from winkyWang/feature/tasiawang/rebuttal_agent
Million-mo Jun 24, 2026
cb0e9dd
test(acp): remove deprecated zed subagent tests (24→0 failures)
Leoyzen Jun 24, 2026
b1a5696
fix(tests): resolve 25+ regression failures, 44→3 parallel failures
Leoyzen Jun 24, 2026
da2b31e
fix(storage): preserve session data across server restart via status …
Jun 24, 2026
6e2a44c
fix(skills): filter provider skills by package scope
Jun 24, 2026
da043be
fix(acp): stop event consumer before cancelling run to prevent sessio…
Jun 24, 2026
2dd62db
Merge pull request #56 from Million-mo/develop/agentic
Million-mo Jun 24, 2026
81fb7c0
Merge pull request #58 from winkyWang/feature/tasiawang/package-scope…
Million-mo Jun 24, 2026
d82f75c
feat(orchestrator): introduce anyio structured concurrency (Phases 1-3)
Jun 24, 2026
f75370e
feat(orchestrator): Phase 4 — EventBus memory streams + consumer updates
Jun 24, 2026
ef1b982
test(phase4): migrate test files to anyio memory streams
Jun 24, 2026
95304fd
feat(acp_agent): Phase 5 — remove merge_queue_into_iterator
Jun 24, 2026
ba119cf
docs(openspec): mark Phase 4 tasks as complete in tasks.md
Jun 24, 2026
285ab4c
docs(openspec): mark Phase 6 tasks as complete in tasks.md
Jun 24, 2026
fb42cb1
refactor(streaming_adapter): replace asyncio.polling with anyio.TaskG…
Jun 24, 2026
703bc82
feat(skills): refactor skills as pydantic-ai capabilities
Leoyzen Jun 24, 2026
d26aec0
fix(mcp): reuse timeout as read_timeout for MCP per-request timeout
Leoyzen Jun 24, 2026
03b4892
feat(mcp): log warning when MCP tool call times out
Leoyzen Jun 24, 2026
9021656
fix(mcp): unify default MCP timeout to 600s
Leoyzen Jun 24, 2026
6edda0e
feat(base_server): Phase 7 — add anyio.TaskGroup to BaseServer and MC…
Jun 25, 2026
8e45104
feat(phase8): add CancelScope(shield=True) for graceful shutdown
Jun 25, 2026
146e1a4
fix(acp): implement proper ACP session/cancel protocol compliance
Jun 25, 2026
881fab2
fix(acp): address code review feedback
Jun 25, 2026
107025a
ci(optimize): only check changed files in PR to avoid unrelated failures
Jun 25, 2026
bc05d64
Merge pull request #59 from Million-mo/develop/agentic
Million-mo Jun 25, 2026
11744af
Merge branch 'develop/agentic' into feature/introduce-anyio-structure…
Million-mo Jun 25, 2026
53aa724
fix(anyio): adapt to anyio 4.13.0 sync context manager API + fix brok…
Million-mo Jun 25, 2026
ea60095
chore: update uv.lock timestamps
Million-mo Jun 25, 2026
81d769b
fix: correct anyio TaskGroup.start_soon() usage and timeout placement
Million-mo Jun 25, 2026
b43f38f
fix: add strong references for event consumer background tasks
Million-mo Jun 25, 2026
6b9edd3
fix(mixins): initialize _consumer_done_events dict in __init__
Million-mo Jun 25, 2026
57f79e6
Merge pull request #61 from Million-mo/feature/introduce-anyio-struct…
Million-mo Jun 25, 2026
2ed15e7
feat(openspec): propose unified tool interception via pydantic-ai cap…
Leoyzen Jun 25, 2026
f9eb2af
fix(session): add todo lock and clear todos for new top-level sessions
A-Qiang Jun 26, 2026
47d35cf
Merge pull request #63 from A-Qiang/fix/todo-list
Million-mo Jun 26, 2026
edf639a
refactor: eliminate pool-level agents, introduce Run/Turn separation,…
Leoyzen Jun 30, 2026
a744fca
fix: correct asyncio.create_task calls, RunStartedEvent parent_sessio…
Million-mo Jun 30, 2026
49f8190
test: cleanup dead tests, add phase8 assertions, and add smoke tests …
Million-mo Jun 30, 2026
0526ea5
ci: disable automatic build triggers, switch to manual workflow_dispatch
Million-mo Jun 30, 2026
c2e6a48
ci: add dedicated pytest workflow with segmented test stages
Million-mo Jun 30, 2026
4807d86
ci: fix IndentationError in smoke test python -c command
Million-mo Jun 30, 2026
61a7f9f
ci: remap openrouter models to openai endpoint, add OPENAI_BASE_URL s…
Million-mo Jun 30, 2026
61de503
ci: exclude slow tests from CI, remove unused OPENAI env vars
Million-mo Jun 30, 2026
6fcf270
ci: restore OPENAI env vars for unit/core jobs (Agent init needs cred…
Million-mo Jun 30, 2026
5731aa1
ci: remove OPENAI env from unit/core jobs to avoid API call hangs
Million-mo Jun 30, 2026
5cd6a93
test: auto-skip credential-dependent tests without OPENAI_API_KEY
Million-mo Jun 30, 2026
340e799
test: fix remaining 16 CI failures
Million-mo Jun 30, 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
  •  
  •  
  •  
155 changes: 155 additions & 0 deletions .claude/commands/opsx/apply.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
---
name: "OPSX: Apply"
description: Implement tasks from an OpenSpec change (Experimental)
category: Workflow
tags: [workflow, artifacts, experimental]
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name (e.g., `/opsx:apply add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **Select the change**

If a name is provided, use it. Otherwise:
- Infer from conversation context if the user mentioned a change
- Auto-select if only one active change exists
- If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select

Always announce: "Using change: <name>" and how to override (e.g., `/opsx:apply <other>`).

2. **Check status to understand the schema**
```bash
openspec status --change "<name>" --json
```
Parse the JSON to understand:
- `schemaName`: The workflow being used (e.g., "spec-driven")
- `planningHome`, `changeRoot`, and `actionContext`: planning scope and edit constraints
- Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)

3. **Get apply instructions**

```bash
openspec instructions apply --change "<name>" --json
```

This returns:
- `contextFiles`: artifact ID -> array of concrete file paths (varies by schema)
- Progress (total, complete, remaining)
- Task list with status
- Dynamic instruction based on current state

**Handle states:**
- If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx:continue`
- If `state: "all_done"`: congratulate, suggest archive
- Otherwise: proceed to implementation

**Workspace guard:** If status JSON reports `actionContext.mode: "workspace-planning"` and `allowedEditRoots` is empty, explain that full workspace apply is not supported in this slice. Treat linked repos and folders as read-only context, ask the user to select an affected area through an explicit implementation workflow, and STOP before editing files.

4. **Read context files**

Read every file path listed under `contextFiles` from the apply instructions output.
The files depend on the schema being used:
- **spec-driven**: proposal, specs, design, tasks
- Other schemas: follow the contextFiles from CLI output

5. **Show current progress**

Display:
- Schema being used
- Progress: "N/M tasks complete"
- Remaining tasks overview
- Dynamic instruction from CLI

6. **Implement tasks (loop until done or blocked)**

For each pending task:
- Show which task is being worked on
- Make the code changes required
- Keep changes minimal and focused
- Mark task complete in the tasks file: `- [ ]` → `- [x]`
- Continue to next task

**Pause if:**
- Task is unclear → ask for clarification
- Implementation reveals a design issue → suggest updating artifacts
- Error or blocker encountered → report and wait for guidance
- User interrupts

7. **On completion or pause, show status**

Display:
- Tasks completed this session
- Overall progress: "N/M tasks complete"
- If all done: suggest archive
- If paused: explain why and wait for guidance

**Output During Implementation**

```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete
```

**Output On Completion**

```
## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! You can archive this change with `/opsx:archive`.
```

**Output On Pause (Issue Encountered)**

```
## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?
```

**Guardrails**
- Keep going through tasks until done or blocked
- Always read context files before starting (from the apply instructions output)
- If task is ambiguous, pause and ask before implementing
- If implementation reveals issues, pause and suggest artifact updates
- Keep code changes minimal and scoped to each task
- Update task checkbox immediately after completing each task
- Pause on errors, blockers, or unclear requirements - don't guess
- Use contextFiles from CLI output, don't assume specific file names

**Fluid Workflow Integration**

This skill supports the "actions on a change" model:

- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly
160 changes: 160 additions & 0 deletions .claude/commands/opsx/archive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
---
name: "OPSX: Archive"
description: Archive a completed change in the experimental workflow
category: Workflow
tags: [workflow, archive, experimental]
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name after `/opsx:archive` (e.g., `/opsx:archive add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

Show only active changes (not already archived).
Include the schema used for each change if available.

**IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check artifact completion status**

Run `openspec status --change "<name>" --json` to check artifact completion.

Parse the JSON to understand:
- `schemaName`: The workflow being used
- `planningHome`, `changeRoot`, `artifactPaths`, and `actionContext`: path and scope context
- `artifacts`: List of artifacts with their status (`done` or other)

If status reports `actionContext.mode: "workspace-planning"`, explain that workspace archive is not supported in this slice and STOP. Do not move workspace changes into repo-local archives or edit linked repos.

**If any artifacts are not `done`:**
- Display warning listing incomplete artifacts
- Prompt user for confirmation to continue
- Proceed if user confirms

3. **Check task completion status**

Read the tasks file (typically `tasks.md`) to check for incomplete tasks.

Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete).

**If incomplete tasks found:**
- Display warning showing count of incomplete tasks
- Prompt user for confirmation to continue
- Proceed if user confirms

**If no tasks file exists:** Proceed without task-related warning.

4. **Assess delta spec sync state**

Use `artifactPaths.specs.existingOutputPaths` from status JSON to check for delta specs. If none exist, proceed without sync prompt.

**If delta specs exist:**
- Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`
- Determine what changes would be applied (adds, modifications, removals, renames)
- Show a combined summary before prompting

**Prompt options:**
- If changes needed: "Sync now (recommended)", "Archive without syncing"
- If already synced: "Archive now", "Sync anyway", "Cancel"

If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.

5. **Perform the archive**

Create an `archive` directory under `planningHome.changesDir` if it doesn't exist:
```bash
mkdir -p "<planningHome.changesDir>/archive"
```

Generate target name using current date: `YYYY-MM-DD-<change-name>`

**Check if target already exists:**
- If yes: Fail with error, suggest renaming existing archive or using different date
- If no: Move `changeRoot` to the archive directory

```bash
mv "<changeRoot>" "<planningHome.changesDir>/archive/YYYY-MM-DD-<name>"
```

6. **Display summary**

Show archive completion summary including:
- Change name
- Schema that was used
- Archive location
- Spec sync status (synced / sync skipped / no delta specs)
- Note about any warnings (incomplete artifacts/tasks)

**Output On Success**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** the archive path derived from `planningHome.changesDir`/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs

All artifacts complete. All tasks complete.
```

**Output On Success (No Delta Specs)**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** the archive path derived from `planningHome.changesDir`/YYYY-MM-DD-<name>/
**Specs:** No delta specs

All artifacts complete. All tasks complete.
```

**Output On Success With Warnings**

```
## Archive Complete (with warnings)

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** the archive path derived from `planningHome.changesDir`/YYYY-MM-DD-<name>/
**Specs:** Sync skipped (user chose to skip)

**Warnings:**
- Archived with 2 incomplete artifacts
- Archived with 3 incomplete tasks
- Delta spec sync was skipped (user chose to skip)

Review the archive if this was not intentional.
```

**Output On Error (Archive Exists)**

```
## Archive Failed

**Change:** <change-name>
**Target:** the archive path derived from `planningHome.changesDir`/YYYY-MM-DD-<name>/

Target archive directory already exists.

**Options:**
1. Rename the existing archive
2. Delete the existing archive if it's a duplicate
3. Wait until a different date to archive
```

**Guardrails**
- Always prompt for change selection if not provided
- Use artifact graph (openspec status --json) for completion checking
- Don't block archive on warnings - just inform and confirm
- Preserve .openspec.yaml when moving to archive (it moves with the directory)
- Show clear summary of what happened
- If sync is requested, use the Skill tool to invoke `openspec-sync-specs` (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting
Loading
Loading