| feat(agent_teams): add external-agent join surface (skill+cli / mcp)
Let agents outside the team process (third-party CLIs or independent
services) act as first-class members by talking directly to the shared
team database and zmq messager: external/ (TeamJoinDescriptor +
ExternalTeamClient + inbound rendering), skill/ (non-interactive
team-member CLI + SKILL.md) and mcp/ (stdio FastMCP server). Complements
F_07 bridge (text relay) with an autonomous direct-join path.
Refs: #751
| 5 天前 |
| test(swarm): cover operator / member external-access scopes
Rewrite the external MCP + CLI tests for the two-scenario design: member scope
exposes the real teammate tools {read_inbox, view_task, claim_task,
send_message} with empty instructions and claim_task(status=completed) folds in
completion; operator scope exposes the broad control set incl. create_task with
workflow instructions. conftest gains a scope arg; test_client / test_format are
unchanged. The external CLI e2e god-view prompt uses claim_task(status="completed").
Refs: #751
| 22 分钟前 |
| test(swarm): cover operator / member external-access scopes
Rewrite the external MCP + CLI tests for the two-scenario design: member scope
exposes the real teammate tools {read_inbox, view_task, claim_task,
send_message} with empty instructions and claim_task(status=completed) folds in
completion; operator scope exposes the broad control set incl. create_task with
workflow instructions. conftest gains a scope arg; test_client / test_format are
unchanged. The external CLI e2e god-view prompt uses claim_task(status="completed").
Refs: #751
| 22 分钟前 |
| feat(swarm): harden external CLI members and add gemini support
- mcp: scope team tools by member role; centralize session-context binding
- runtime: raise on streaming premature EOF; reinvoke inactivity timeout +
prompt abort; surface CLI narration live to the team stream via a queue bridge
- prompts: build external CLI members' system prompt from the shared team-rail
sections (role/workflow/lifecycle/persona), excluding other DeepAgent rails
- adapters: add gemini adapter with cross-turn --session-id/--resume; switch
codex to exec --json + developer_instructions; per-CLI system-prompt and
MCP-registration (gemini/hermes) injection; structured-output summaries
Refs: #751
| 5 天前 |
| test(swarm): cover harness subscribe and spawn first-start injection
- Update harness/runtime tests for the merged subscribe surface and
constructor-time config (stub runtimes expose subscribe).
- Cover spawn first-start: empty query subscribes without sending;
restart re-spawns with initial_message=None.
Refs: #751
| 22 分钟前 |
| feat(agent_teams): add external-agent join surface (skill+cli / mcp)
Let agents outside the team process (third-party CLIs or independent
services) act as first-class members by talking directly to the shared
team database and zmq messager: external/ (TeamJoinDescriptor +
ExternalTeamClient + inbound rendering), skill/ (non-interactive
team-member CLI + SKILL.md) and mcp/ (stdio FastMCP server). Complements
F_07 bridge (text relay) with an autonomous direct-join path.
Refs: #751
| 5 天前 |
| feat(agent_teams): add external-agent join surface (skill+cli / mcp)
Let agents outside the team process (third-party CLIs or independent
services) act as first-class members by talking directly to the shared
team database and zmq messager: external/ (TeamJoinDescriptor +
ExternalTeamClient + inbound rendering), skill/ (non-interactive
team-member CLI + SKILL.md) and mcp/ (stdio FastMCP server). Complements
F_07 bridge (text relay) with an autonomous direct-join path.
Refs: #751
| 5 天前 |
| feat(agent_teams): external-cli spawn_member role + MCP auto-injection
Promote external CLI agents (claudecode / codex) to first-class team
members the leader can spawn autonomously, resolving the two F_21
follow-ups (leader-callable tool, MCP config injection).
- Static config: TeamAgentSpec.external_cli_agents (ExternalCliAgentSpec);
the non-empty set of declared cli_agent kinds is the capability ceiling.
- spawn_member gains role_type='external_cli' + cli_agent, dispatching to
TeamBackend.spawn_external_cli_agent (validated against the declared set).
- Spawn path auto-injects the team MCP server per CLI (claude --mcp-config,
codex -c mcp_servers...); the descriptor env flows via process inheritance.
- system test: 4-member (2 claude + 2 codex) workspace-write + verify e2e.
Refs: #751
| 5 天前 |
| test(swarm): cover MemberRuntime adoption across team harness layers
Rewrite team tests against the adopted surface: StreamController over a fake
MemberRuntime (forward/observer/retry/state-round mapping/idle-settled), CLI
runtimes driving _drive directly plus a MemberRuntime surface test, TeamHarness
build over a fake native, forward-layer retry semantics, coordination nudges
asserting deliver_input, and plan-mode seeding via _seed_initial_plan_mode.
Drop tests whose premise (FirstIterationGate, StreamController-driven round
restart) no longer exists.
Refs: #984
| 22 分钟前 |
| feat(swarm): render absolute+relative time in agent-facing text
Message and task timestamps were stored (ms UTC epoch) but dropped at the
rendering layer, so agents could not judge recency, ordering, or delay.
Add timefmt.format_time_context to render '<local time> (<relative diff>)'
across message/task-board/stale nudges, external/MCP/CLI rendering, and
view_task output. Storage is unchanged; TaskSummary gains updated_at so the
list view can show relative time.
Refs: #751
| 5 天前 |
| test(swarm): cover operator / member external-access scopes
Rewrite the external MCP + CLI tests for the two-scenario design: member scope
exposes the real teammate tools {read_inbox, view_task, claim_task,
send_message} with empty instructions and claim_task(status=completed) folds in
completion; operator scope exposes the broad control set incl. create_task with
workflow instructions. conftest gains a scope arg; test_client / test_format are
unchanged. The external CLI e2e god-view prompt uses claim_task(status="completed").
Refs: #751
| 22 分钟前 |