Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
837 commits
Select commit Hold shift + click to select a range
d8f61ca
fix: fix remaining 10 test failures + uri_resolver SkillProvider guard
Leoyzen Jul 10, 2026
9eed618
fix: fix lifecycle config frozen test + ruff TRY004 fix
Leoyzen Jul 10, 2026
7601d80
fix: remove remaining agent.tools references in test files
Leoyzen Jul 10, 2026
b6cc897
fix(capabilities): use ctx.deps.host.internal_fs for code mode script…
Leoyzen Jul 10, 2026
01a4db3
fix: fix mypy error and WorkersTools duplicate tool registration
Leoyzen Jul 10, 2026
9ac4389
refactor: delete tools/factory.py dead code, add Resource.source fiel…
Leoyzen Jul 10, 2026
577fad1
refactor(m3.5): Complete agent_pool backdoor cleanup (#142)
Leoyzen Jul 10, 2026
f339808
fix(opencode): broadcast QuestionAskedEvent for durable elicitation +…
Million-mo Jul 11, 2026
7d7cf95
feat: implement extension-source-architecture (#143)
Leoyzen Jul 12, 2026
138f092
feat(openspec): add m3-5-backdoor-cleanup change
Leoyzen Jul 10, 2026
3043838
refactor(openspec): remove SkillService from cleanup, defer to separa…
Leoyzen Jul 10, 2026
634be7c
fix(capabilities): convert MCP FunctionTool to pydantic-ai Tool befor…
Leoyzen Jul 12, 2026
b686ede
fix(capabilities,lifecycle): address PR #144 review comments
Leoyzen Jul 12, 2026
646a7f1
Merge develop/agentic into refactor/agentwolf_v1
Leoyzen Jul 12, 2026
d3802aa
fixup! Merge develop/agentic into refactor/agentwolf_v1
Leoyzen Jul 12, 2026
6f07fd3
feat(skills): restore skill system capabilities after M3 refactor
Leoyzen Jul 12, 2026
63a2c42
docs(openspec): add restore-skill-capabilities change with specs and RFC
Leoyzen Jul 12, 2026
4a3cdf5
test(skills): add 30 tests for skill tool registration and e2e scenarios
Leoyzen Jul 12, 2026
8863e3d
fix(skills): address code review feedback from PR #145
Leoyzen Jul 12, 2026
f61a66f
fix(skills): remove dead skill_commands references from server code a…
Leoyzen Jul 12, 2026
ad93d44
fix(skills): resolve CI lint, mypy, and test failures
Leoyzen Jul 12, 2026
982bc33
fix(skills): address CI test failure and gemini code review feedback
Leoyzen Jul 12, 2026
8ff8b89
refactor(skills): remove provider field from ResolvedSkillURI (D9 fla…
Leoyzen Jul 12, 2026
87b283f
fix(docs): fix load_skill docstring formatting
Leoyzen Jul 12, 2026
661456c
fix(resolver): fall back to provider search when ExtensionRegistry fails
Leoyzen Jul 12, 2026
6c73118
fix(registry): use ResolvedSkillURI.parse() in ExtensionRegistry.reso…
Leoyzen Jul 12, 2026
23c530f
feat(registry): propagate real skill_path through ExtensionRegistry t…
Leoyzen Jul 12, 2026
3016311
chore(archive): commit archived restore-skill-capabilities spec artif…
Leoyzen Jul 12, 2026
9aa6c1c
fix(tests): update tests for Skill return type from resolve_uri() and…
Leoyzen Jul 12, 2026
6553302
fix(server): initialize command_store from pool.skills for OpenCode s…
Leoyzen Jul 12, 2026
a61b004
feat(server): subscribe to ChangeEvent stream for dynamic CommandStor…
Leoyzen Jul 12, 2026
6e0c19d
fix(lint): remove duplicate from __future__ import annotations
Leoyzen Jul 12, 2026
e0437d6
fix(tests): update security and scratchpad tests for D9 flat URI + Sk…
Leoyzen Jul 12, 2026
712f4ba
fix: address gemini code review feedback (7 comments)
Leoyzen Jul 12, 2026
87a9346
fixup! fix: address gemini code review feedback (7 comments)
Leoyzen Jul 12, 2026
9f16c2c
chore(openspec): archive 13 stale/completed changes
Leoyzen Jul 12, 2026
f34d351
docs(openspec): add pre-m4-protocol-cleanup change + RFC-0053
Leoyzen Jul 13, 2026
9fdb5ff
refactor(acp): replace hasattr patterns with typed interfaces
Leoyzen Jul 13, 2026
6b8d6b2
refactor(lifecycle): add set_replaying() to CommChannel protocol
Leoyzen Jul 13, 2026
4986e32
refactor(lifecycle): replace isinstance check with publishes_to_event…
Leoyzen Jul 13, 2026
0fb9a62
refactor(orchestrator): hold direct dimension refs, remove type: igno…
Leoyzen Jul 13, 2026
e4dd21d
fixup! refactor(orchestrator): hold direct dimension refs, remove typ…
Leoyzen Jul 13, 2026
602b4ad
Revert "refactor(acp): replace hasattr patterns with typed interfaces"
Leoyzen Jul 13, 2026
ccca963
Revert "refactor(lifecycle): add set_replaying() to CommChannel proto…
Leoyzen Jul 13, 2026
69d5e62
Revert "refactor(lifecycle): replace isinstance check with publishes_…
Leoyzen Jul 13, 2026
33ce6d4
Revert "refactor(orchestrator): hold direct dimension refs, remove ty…
Leoyzen Jul 13, 2026
b31e89e
Revert "fixup! refactor(orchestrator): hold direct dimension refs, re…
Leoyzen Jul 13, 2026
814398c
refactor: pre-M4 protocol cleanup — ACP path unification, legacy remo…
Leoyzen Jul 13, 2026
7797e98
chore: remove dot omo directory.
Leoyzen Jul 13, 2026
3c68bb4
fix(skills): remove duplicate MCP tool registration from SkillManagerCap
Leoyzen Jul 13, 2026
c269d12
fix(elicitation): timeout default null, checkpoint save upsert, crash…
Leoyzen Jul 13, 2026
15b29ed
fix(elicitation): RunErrorEvent on timeout + event consumer restart o…
Leoyzen Jul 13, 2026
26f02ee
fix(elicitation): route resume through pool lifecycle, not standalone
Leoyzen Jul 14, 2026
254f22a
fix(elicitation): preserve conversation history on cancel via StreamC…
Leoyzen Jul 14, 2026
5b94cf9
fix: ruff lint and format fixes for elicitation cancel changes
Leoyzen Jul 14, 2026
bd30cca
fix: resolve all pre-existing CI lint, format, and type errors
Leoyzen Jul 14, 2026
633dd0c
fix: remove unused type: ignore on combined_toolset.py line 183
Leoyzen Jul 14, 2026
19dd406
fix: handle MessageHistory objects in _create_run_handle
Leoyzen Jul 14, 2026
53695e3
fix: eliminate phantom 'acp-default' session from ACP server startup
Leoyzen Jul 14, 2026
e4b943a
fix: reset session status from 'closed' to 'active' on ACP resume
Leoyzen Jul 14, 2026
2a92159
fix: preserve history when agentlet.iter() exit fails after turn comp…
Leoyzen Jul 14, 2026
2ba00e9
feat: remove llmling-models & upgrade pydantic-ai to v2.9.0 (#153)
Million-mo Jul 14, 2026
def2a99
docs: sync v2-message-id-infrastructure OpenSpec with RFC-0054 Phase 4
Leoyzen Jul 15, 2026
cdcb407
Revert "docs: sync v2-message-id-infrastructure OpenSpec with RFC-005…
Leoyzen Jul 15, 2026
5e3330c
feat: v2-message-id-infrastructure (#157)
Leoyzen Jul 15, 2026
b361237
docs: add Python 3.12+ best practices and telemetry/span instrumentat…
Leoyzen Jul 15, 2026
73a746f
fix: add span instrumentation for critical-path methods (fix-span-ins…
Leoyzen Jul 16, 2026
6f6dae3
fix: add entry-point spans to fix orphan traces in ACP path
Leoyzen Jul 16, 2026
dc311a2
fix: remove f-string templates from span names and fix missing span i…
Leoyzen Jul 16, 2026
b2b1cfd
fix: call _end() separately in safe_span to prevent Missing Span
Leoyzen Jul 16, 2026
9c2c5d9
fix: use safe_span for session.consume_run and delegation.subagent
Leoyzen Jul 16, 2026
d4fb576
fix: wrap nested async generators with aclosing() to prevent span leaks
Leoyzen Jul 16, 2026
52a2e6b
chore(deps): add filelock>=3.13 for team state file locking
Leoyzen Jul 16, 2026
5a53f89
feat(config): add TeamModeConfig model for dynamic team mode
Leoyzen Jul 16, 2026
19151e1
feat(config): add team_mode field to manifest and agent config
Leoyzen Jul 16, 2026
83a1291
feat(capabilities): add team_mode_config to AgentContext
Leoyzen Jul 16, 2026
7c1250d
feat(capabilities): add FileTeamState for file-based team persistence
Leoyzen Jul 16, 2026
34457b9
feat(capabilities): add TeamCommCapability skeleton and factory regis…
Leoyzen Jul 16, 2026
ee8bd28
feat(capabilities): implement universal team communication tools
Leoyzen Jul 16, 2026
e0451ba
fix: add span instrumentation for critical-path methods (fix-span-ins…
Leoyzen Jul 16, 2026
dd43821
fix: update integration tests for deps param and EventBus subscription
Leoyzen Jul 16, 2026
5941a17
feat(capabilities): implement lead-only team management tools
Leoyzen Jul 16, 2026
667c66c
feat(capabilities): enforce team mode bounds at runtime
Leoyzen Jul 16, 2026
50ccb20
feat(capabilities): add TTL cleanup for expired team state
Leoyzen Jul 16, 2026
9f93aa2
feat(capabilities): implement auto_init for session-startup team crea…
Leoyzen Jul 16, 2026
ca69c52
test(integration): add team mode integration tests
Leoyzen Jul 16, 2026
b6eea3b
docs: add team mode documentation and examples
Leoyzen Jul 16, 2026
1e1a1ff
fix: resolve ruff format and mypy errors in team mode files
Leoyzen Jul 16, 2026
ca7ad1a
fix: pass deps=None in SessionPool.send_message() (#166)
Leoyzen Jul 16, 2026
c038621
Revert "fix: add span instrumentation for critical-path methods (fix-…
Leoyzen Jul 16, 2026
eeb4f94
fix: wire ACPSkillBridge to expose skills as ACP slash commands (#164)
Leoyzen Jul 16, 2026
ef35691
chore: add openspec to gitignore
Leoyzen Jul 16, 2026
e070bb7
feat: span instrumentation for critical-path methods (#167)
Leoyzen Jul 16, 2026
4a18687
fix: address PR review — hierarchical key mkdir, orphaned session cle…
Leoyzen Jul 16, 2026
d97cc1a
Merge remote-tracking branch 'origin/refactor/agentwolf_v1' into feat…
Leoyzen Jul 16, 2026
41035e7
fix: resolve CI lint and format errors in test files
Leoyzen Jul 16, 2026
5ef806b
refactor: remove auto_init, use delegation.create_child_session in te…
Leoyzen Jul 16, 2026
a56b104
refactor: session debt cleanup — state machine, storage ISP, creation…
Leoyzen Jul 17, 2026
454232c
fix: preserve ThinkingPart in OpenCode session restore and OpenAI API…
Leoyzen Jul 17, 2026
ac8de78
fix: persist MCP connections across turns by eager-entering MCPToolse…
Leoyzen Jul 17, 2026
94dc4b1
refactor: remove SessionStore, migrate to StorageProvider (#180)
Leoyzen Jul 17, 2026
b8fded3
fix: restore persisted sessions from store in list_sessions (#181)
Leoyzen Jul 17, 2026
7012d0e
fix: get_or_load_session must check SessionController registration
Leoyzen Jul 17, 2026
e97c91a
fixup! refactor: session debt cleanup — state machine, storage ISP, c…
Leoyzen Jul 17, 2026
2cbb75b
fix(storage): increase title generation retries and reduce log noise
Leoyzen Jul 17, 2026
cc68223
Merge remote-tracking branch 'origin/refactor/agentwolf_v1' into feat…
Leoyzen Jul 17, 2026
430a4f8
refactor: rename auto_init to defaults, clean up docs and examples
Leoyzen Jul 17, 2026
d1d2fcc
fix: factory per-session TeamCommCapability not added when compile st…
Leoyzen Jul 17, 2026
7bd6365
fix: ctx parameter typed as Any instead of RunContext in team tools
Leoyzen Jul 17, 2026
3425581
fix: resolve AgentContext from PydanticAI runtime context deps.data
Leoyzen Jul 17, 2026
8f4e75b
fix: set team_role metadata in factory create_session_agent
Leoyzen Jul 17, 2026
774f5e3
fix: write team_id back to session.metadata after team_create
Leoyzen Jul 17, 2026
461d386
feat: inject agent descriptions into team mode instructions
Leoyzen Jul 17, 2026
0e0bc80
fix: auto-close member sessions when lead run terminates
Leoyzen Jul 17, 2026
7cc4a1f
test: add L2 FunctionModel flow tests for team lifecycle
Leoyzen Jul 17, 2026
a9347db
feat: role-aware tool filtering via prepare_tools + role-specific ins…
Leoyzen Jul 17, 2026
ef40b2e
fix: add create_child_session to DelegationService test stubs
Leoyzen Jul 17, 2026
f5985ab
feat: log team state directory path on team_create
Leoyzen Jul 17, 2026
328ef23
feat(testing): Layered Testing Infrastructure — L1-L4 taxonomy, VCR, …
Leoyzen Jul 18, 2026
1edd18a
feat(testing): Protocol E2E Coverage — 144 tests across ACP + OpenCod…
Leoyzen Jul 18, 2026
cb8da3f
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 18, 2026
677a05f
fix: adapt team_session_leak test to merged session lifecycle changes
Leoyzen Jul 18, 2026
52e7a65
test: redesign team mode test strategy with L1-L4 layered architecture
Leoyzen Jul 18, 2026
d984e8a
test: migrate MagicMock tests to real pool + fix VCR cassette replay
Leoyzen Jul 18, 2026
87f68dc
fix: rewrite E2E smoke test to match existing SSE patterns
Leoyzen Jul 18, 2026
1d1f44c
fix: VCR tests fail in CI — OpenAI client needs API key at init
Leoyzen Jul 18, 2026
bdedd45
fix: resolve 9 known bugs and clean up xfail markers (#200)
Leoyzen Jul 18, 2026
f173112
fix: remove TaskManager deprecation — migrate to ManagedTaskGroup + a…
Leoyzen Jul 18, 2026
0de37d0
test(vcr): record cassettes and mark known bugs as xfail (#202)
Leoyzen Jul 18, 2026
e8b1aa4
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 18, 2026
c15a470
fix: adapt VCR tests to PR #202 infrastructure + filter litellm requests
Leoyzen Jul 18, 2026
f88c3fa
test(vcr): fix streaming event sequence and PartStartEvent structure …
Leoyzen Jul 18, 2026
fc212c7
fix: propagate real agent/model in opencode_server async path (#211)
Leoyzen Jul 18, 2026
c74fbdd
test(vcr): fix ACP VCR tests and record cassettes (#207) (#212)
Leoyzen Jul 18, 2026
a990e62
fix: preserve instance-level tools by reusing agent home session (#20…
Leoyzen Jul 18, 2026
fce26c0
fix(lifecycle): wire RunHandle._journal to CommChannel._journal (#210)
Leoyzen Jul 18, 2026
f995dea
fix(orchestrator): prevent double cancel() from killing start() gener…
Leoyzen Jul 18, 2026
5a4331b
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 18, 2026
dd4a197
fix: eliminate race condition in concurrent message processing (#213)
Leoyzen Jul 18, 2026
542b5ae
test(vcr): fix AG-UI protocol tests to use correct route structure (#…
Leoyzen Jul 18, 2026
29f1499
fix: handle parametrized test names in check_cassettes.py
Leoyzen Jul 19, 2026
ec5a7ce
fix: resolve model defaults dynamically + persist real model info fro…
Leoyzen Jul 19, 2026
9a843fe
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 19, 2026
f9f8642
fix: register lead as team member + idle-based cleanup
Leoyzen Jul 19, 2026
79cd2a6
fix: use wall-clock time for SessionData timestamps instead of monoto…
Leoyzen Jul 19, 2026
fe0068e
fix(opencode): MCP status reporting — GET /mcp returns real server st…
Leoyzen Jul 19, 2026
53d078e
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 19, 2026
c4e9cb6
test: add multi-turn red-flag tests for issue #221 (#236)
Leoyzen Jul 20, 2026
11d2a63
fix(orchestrator): keep RunLoop generator alive for multi-turn sessio…
Leoyzen Jul 20, 2026
2c842a5
fix(identifiers): use now_ms() + 8-byte encoding to fix C1 timestamp …
Leoyzen Jul 20, 2026
f323369
fix(storage): add message_id tiebreaker to message ordering (C2/R1) (…
Leoyzen Jul 20, 2026
753f909
test: add event layer test coverage (EventBus, crash recovery, steer/…
Leoyzen Jul 20, 2026
30412fb
feat: add team_add_member and team_remove_member tools
Leoyzen Jul 20, 2026
2102dd2
fix(elicitation): set run_ctx.cancelled on RunAbortedError to stop Ru…
Leoyzen Jul 20, 2026
96a0440
feat: show team_id and state dir in team_status output
Leoyzen Jul 20, 2026
47baa74
fix(opencode): defer assistant message broadcast to event bridge (C3/…
Leoyzen Jul 20, 2026
5a4cd4a
fix(opencode): handle duplicate message ID in append_message_to_sessi…
Leoyzen Jul 20, 2026
183cc31
Revert "fix(opencode): handle duplicate message ID in append_message_…
Leoyzen Jul 20, 2026
b9c3c3d
fix: team_add_member bugs — agent field, blackboard key sanitization,…
Leoyzen Jul 20, 2026
d971e51
test: tighten team_add/remove_member tests — 8 new cases, reusable he…
Leoyzen Jul 20, 2026
7b02c89
fix(opencode): handle duplicate message ID in append_message_to_sessi…
Leoyzen Jul 20, 2026
badb8c1
fix: ghost member on send_message + shutdown_request marks member off…
Leoyzen Jul 20, 2026
0fd3265
fix: BUG-001 team_status missing dynamic members + NOTE-001 delete_bl…
Leoyzen Jul 20, 2026
3c4d813
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 20, 2026
331cf14
fix: task_update with invalid task_id returns friendly error
Leoyzen Jul 20, 2026
ec8d706
fix: allow load_session for closed sessions (history replay)
Leoyzen Jul 20, 2026
0f13296
chore(config): optimize ty and ruff standalone configs to reduce fals…
Leoyzen Jul 20, 2026
30488d2
refactor(orchestrator): per-prompt RunHandle — persistent SessionStat…
Leoyzen Jul 20, 2026
0bd1dd4
refactor: team tools return XML-wrapped content instead of JSON
Leoyzen Jul 20, 2026
a4bd25b
fix(D3): set time.completed in event bridge StreamCompleteEvent handl…
Leoyzen Jul 20, 2026
ec754a4
fix(opencode): split per-session lock to unblock prompt_async during …
Leoyzen Jul 20, 2026
b0471ca
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 21, 2026
67710ea
fix: normalize ThinkingPart content and preserve fields in storage ro…
Million-mo Jul 21, 2026
da0005b
fix(ty): suppress pydantic-ai false positives and enable per-file ty …
Leoyzen Jul 21, 2026
234556d
fix(opencode): implement session revert stage/clear/commit model (#256)
Leoyzen Jul 21, 2026
b1dd5a4
feat: UserMessageInsertedEvent for steer/followup display (#257)
Leoyzen Jul 21, 2026
a2eadb9
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 21, 2026
c6b6251
feat: team tools return pydantic-ai ToolReturn, add source="team" for…
Leoyzen Jul 21, 2026
f5a9379
feat: team member awareness + team_status runtime state + task associ…
Leoyzen Jul 22, 2026
225e1be
refactor: merge broadcast_notice into notify parameter for team_add_m…
Leoyzen Jul 22, 2026
11fc62f
feat: reuse agent display_name for team member names
Leoyzen Jul 22, 2026
6d472d5
fix: propagate team member name to agent display_name
Leoyzen Jul 22, 2026
be21040
refactor: shorten task_id and team_id to 8-char hex prefix
Leoyzen Jul 22, 2026
857a44e
refactor: team message XML wrapper in body, remove protocol handler p…
Leoyzen Jul 22, 2026
7f8ba38
refactor: use English for all team message templates
Leoyzen Jul 22, 2026
8a0d1f7
style: wrap member names, agent names, and roles in backticks
Leoyzen Jul 22, 2026
3373b65
feat: restrict task_create to lead-only
Leoyzen Jul 22, 2026
08ac5f9
fix(opencode): populate tool input from ToolCallProgressEvent when in…
Leoyzen Jul 22, 2026
a88b894
fix(orchestrator): drain prompt_queue after cancel to prevent stuck m…
Leoyzen Jul 22, 2026
9e8776b
test(opencode): add e2e and integration tests for tool input visibili…
Leoyzen Jul 22, 2026
f0607f9
fix(opencode): child session assistant message uses child's model_id …
Leoyzen Jul 22, 2026
54d25c6
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 22, 2026
d747248
fix(elicitation): broadcast question for MCP path + add future timeou…
Leoyzen Jul 22, 2026
3533348
refactor: remove urgent param, use notice_delivery_mode config, clean…
Leoyzen Jul 22, 2026
bc10c70
fix(orchestrator): sanitize invalid JSON tool call args in history (#…
Leoyzen Jul 22, 2026
2361955
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 22, 2026
1af2963
fix(opencode): make POST /message async to match OpenCode protocol (#…
Leoyzen Jul 22, 2026
3fc6cbe
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 22, 2026
837da06
fix(logging): use local timezone and reduce SSE event log noise (#274)
Leoyzen Jul 22, 2026
960c798
fix(ty): suppress false positives and eliminate all ty errors (825→0)
Leoyzen Jul 22, 2026
5bd51a3
refactor(utils): extract flatten_prompts helper using match/case
Leoyzen Jul 22, 2026
743cea0
refactor(agents): use flatten_prompts helper in Turn implementations
Leoyzen Jul 22, 2026
d64323f
refactor(orchestrator): use flatten_prompts + match/case in session pool
Leoyzen Jul 22, 2026
7a65d44
fix(ci): make check_cassette_credentials executable and extract magic…
Leoyzen Jul 22, 2026
bfb852d
fix: durable recovery event pipeline — user messages not displaying i…
Leoyzen Jul 22, 2026
095eadb
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 22, 2026
ee74c21
feat: write_blackboard append mode + value format description
Leoyzen Jul 22, 2026
89c9aa9
fix: defer member cleanup when lead or members have active runs
Leoyzen Jul 22, 2026
3b59937
fix(opencode): use integer epoch ns for session time.created/updated
Leoyzen Jul 22, 2026
0d5e1d7
fix(opencode): populate AssistantMessage tokens/cost from EventProces…
Leoyzen Jul 22, 2026
b8bc9ec
fix(opencode): populate AssistantMessage tokens/cost from EventProces…
Leoyzen Jul 22, 2026
2903bfa
feat: team_create prompt param, watch mode for list_blackboard/team_s…
Leoyzen Jul 22, 2026
a1e2b47
feat: task_update note field for progress tracking
Leoyzen Jul 22, 2026
6372d5a
feat: prompt members to use task_update(note=...) for progress
Leoyzen Jul 22, 2026
cf59bab
feat: notice_role config for system/user message injection
Leoyzen Jul 22, 2026
1f9744d
fix(opencode): handle SystemPromptPart in user message event processing
Leoyzen Jul 22, 2026
25bed9b
fix: wrap SystemPromptPart in ModelRequest for enqueue compatibility
Leoyzen Jul 22, 2026
2b88013
feat(tools): migrate question_for_user and ask_followup_question from…
Million-mo Jul 23, 2026
8215a8b
feat(observability): per-run trace + span reduction + auto-instrument…
Leoyzen Jul 23, 2026
e78c95e
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 23, 2026
8d2382d
fix: wire entrypoint registry into YAML capability resolution (#277)
Leoyzen Jul 23, 2026
be46872
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 23, 2026
7018e0b
feat(team-mode): merge shutdown_request into team_remove_member, add …
Leoyzen Jul 23, 2026
b8581ca
feat(team-mode): add unfinished task reminder harness for team members
Leoyzen Jul 23, 2026
790ee8f
feat(team-mode): add watch_task_ids to list_blackboard and team_statu…
Leoyzen Jul 23, 2026
9e4d878
feat(team-mode): add owner parameter to task_create
Leoyzen Jul 23, 2026
99aa736
feat(team-mode): add max_watch_timeout config and timeout<=0 no-limit…
Leoyzen Jul 23, 2026
35ea2c3
fix(storage): enable SQLite WAL mode and busy_timeout to prevent data…
Leoyzen Jul 23, 2026
bcf4c70
fix(team-mode): event-driven ephemeral member cleanup instead of 5s p…
Leoyzen Jul 23, 2026
bbae2fb
feat(team-mode): notify lead when member crashes via unified message …
Leoyzen Jul 23, 2026
2f5e406
feat(team-mode): make idle_timeout and poll_interval YAML-configurable
Leoyzen Jul 23, 2026
3232d24
feat(team-mode): push notifications for task assignment and unblock
Leoyzen Jul 23, 2026
2e8377d
fix(mcp): prevent MCPElicitResult leaking to fastmcp elicitation wrapper
Million-mo Jul 24, 2026
f9e4099
Merge pull request #279 from Million-mo/fix/elicitation-mcp-result-leak
Million-mo Jul 24, 2026
85b7f3f
fix(team-mode): use team_member_name for task_update permission check
Leoyzen Jul 24, 2026
40d7139
fix(team-mode): check session.is_closing before chaining queued prompts
Leoyzen Jul 24, 2026
a253f80
feat(team-mode): allow members to use task_create for subtasks
Leoyzen Jul 24, 2026
9611242
fix(orchestrator): steer messages no longer lost in race window
Leoyzen Jul 24, 2026
19f79c2
fix(team-mode): suppress member crash notification during normal shut…
Leoyzen Jul 24, 2026
744ec4b
refactor(team): switch child session creation from RunLoopDelegationS…
Leoyzen Jul 24, 2026
2efb714
fix(identifiers): switch session IDs to descending order to match Ope…
Leoyzen Jul 24, 2026
9da3a80
fix: sync created_at_ns with session ID timestamp for consistent orde…
Leoyzen Jul 24, 2026
0ca588a
Merge branch 'main' into feat/dynamic-team-mode
Leoyzen Jul 24, 2026
0e98ed5
fix(capabilities): eliminate prefix cache invalidation from in-place …
Leoyzen Jul 24, 2026
f80fba1
Merge remote-tracking branch 'origin/main' into feat/dynamic-team-mode
Leoyzen Jul 24, 2026
386a52c
deps: upgrade pydantic-ai-slim from 2.9.0 to >=2.12.0
Leoyzen Jul 24, 2026
30cf514
fix: default request_limit to None (unlimited) for native agents
Leoyzen Jul 25, 2026
7733a0a
Merge branch 'main' into feat/dynamic-team-mode
Leoyzen Jul 25, 2026
89c2251
fix(team-mode): add 2ms delay between member session creations
Leoyzen Jul 25, 2026
f6aaa4c
fix: resolve Pydantic TypeAdapter error when registering MCP subagent…
wensm77 Jul 26, 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