Task tool does not recognize new agents added after conversation start (hot-reload gap)
- Lingua principale
- Shell
- Stelle
- 11.2k
- Fork
- 1.9k
- Merge medio
- 14h 16m
- PR unite (30g)
- 6
Descrizione
## Summary
When a new `.agent.md` file is added to `.github/agents/` during an active conversation, the `task` tool's `agent_type` enum does not update - even after `session.agent.reload` successfully rescans the disk and the server's agent registry is refreshed. Users must start a new conversation (`/clear`) for the task tool to recognize newly added agents.
## Expected Behavior
After `session.agent.reload` is triggered (via extension or other mechanism), the `task` tool should recognize newly loaded agents within the same conversation - no restart required.
## Actual Behavior
The task tool captures its agent list once in a closure at creation time and never refreshes it. Even though `session.agent.reload` RPC exists, works, and the server emits `session.custom_agents_updated` event, the task tool's closure remains stale.
## Reproduction Steps
1. Start a Copilot CLI conversation in a repo with `.github/agents/`
2. Create a new agent file: `.github/agents/my-new-agent.agent.md`
3. Trigger reload (via extension calling `session.agent.reload` RPC, or manually)
4. Try to use `task` tool with `agent_type: "my-new-agent"` - fails validation
5. Run `/clear` and try again - now it works
## Root Cause
`taskTool.ts` builds the `allAgentNames` array in a closure when the tool is first created. There is no mechanism to rebuild this closure when agents change. The `refreshTools` path only handles `externalToolsVersion` changes (extension tools), not agent list mutations.
## Proposed Fix
When `session.custom_agents_updated` is emitted (after reload), the task tool's agent enum should be refreshed. Options:
1. **Lazy validation** - Instead of validating against a static enum, query the current agent registry at invocation time
2. **Tool rebuild** - Re-create the task tool when agents change, similar to how `refreshTools` handles extension tool changes
3. **Event subscription** - Have the task tool subscribe to `session.custom_agents_updated` and update its internal list
Option 1 (lazy validation) is simplest and most resilient.
## Additional Context
- `session.agent.reload` is defined in the schema with stability: experimental
- Node SDK 1.0.10 does not expose `agent.reload()` in typed client - must use raw `connection.sendRequest`
- Extensions CAN trigger reload successfully; the gap is only in the task tool's stale closure
- This blocks agent hot-reload workflows where developers iterate without restarting conversations
## Environment
- Copilot CLI (latest as of 2025-07)
- @github/copilot SDK 1.0.10
- Windows 11
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia in taskTool.ts tracciando come viene creata la closure allAgentNames, quindi confrontala con il percorso refreshTools e con l’evento session.custom_agents_updated emesso dopo il ricaricamento. Riproduci la validazione obsoleta di agent_type dopo aver aggiunto un agente e conferma che lo strumento delle attività lo riconosca senza /clear dopo la correzione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- node.js, typescript
- Ambito
- cli, tooling
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 55/100