This adds a `toolProgress` proposed API that allows extensions to report
progress keyed on the `toolInvocationToken`. Internally, when given to a
tool, this now includes the call ID of the tool.
We can use that both from extensions and internally to report progress
for tools, and I hooked this up for MCP servers. Currently only the text
is updated.
Involved some changes in the progress service internally:
- Previously `viewId` was a naked string, I wrapped it in an object to
make it more identifiable.
- The progress service is in `workbench/services` and directly calls
into other services to effect progress. In leui of going for a full
'contribution' model, I made a small `ILanguageModelToolProgressService`
that it writes state into and that can be read back out. The state
(an observable) is kept as long as progress is ongoing or this is
is an observer.