* tools: add support for model-specific tool registration
This PR goes with https://github.com/microsoft/vscode/pull/287666
This allows the registration of tools that are scoped to specific
language models. These tools can be registered at runtime with
definitions derived from e.g. the server.
I think we should adopt this and go away from the current
`alternativeDefinitions` pattern which we have used previously.
Example of having tools specific for GPT 4.1 vs 4o:
```ts
ToolRegistry.registerModelSpecificTool(
{
name: 'gpt41_get_time',
inputSchema: {},
description: 'Get the current date and time (4.1)',
displayName: 'Get Time (GPT 4.1)',
toolReferenceName: 'get_time',
source: undefined,
tags: [],
models: [{ id: 'gpt-4.1' }],
},
class implements ICopilotTool<unknown> {
invoke() {
return new vscode.LanguageModelToolResult([new vscode.LanguageModelTextPart('Current year is 2041 (GPT 4.1)')]);
}
}
);
ToolRegistry.registerModelSpecificTool(
{
name: 'gpt4o_get_time',
inputSchema: {},
description: 'Get the current date and time (4o)',
displayName: 'Get Time (GPT 4o)',
toolReferenceName: 'get_time',
source: undefined,
tags: [],
models: [{ id: 'gpt-4o' }],
},
class implements ICopilotTool<unknown> {
invoke() {
return new vscode.LanguageModelToolResult([new vscode.LanguageModelTextPart('Current year is 2040 (GPT 4o)')]);
}
}
);
```
* demo
* fix
* overrides
* add overridesTool
* fix inverted logic
* test fixes and back compat
* make memory tool model specific
* fix tests and contribute memory to the vscode toolset
* verison
* fix unit tests
* rm config
* fix missing askquestions
---------
Co-authored-by: bhavyaus <bhavyau@microsoft.com>
* Add hierarchical token support for request logger grouping
* chronological ordering, pr feedback
* revert subagent as child, not working
* Revert subagent hierarchy features from CapturingToken
Remove parentToken, createChild(), getRoot(), isDescendantOf() and currentToken
since tool invocation happens outside the parent's captureInvocation() context,
making AsyncLocalStorage-based context propagation infeasible.
Updated docs with Future Improvements section describing potential solutions.
* clean up tests
* perf feedback
* feat: add NES expected edit capture feature
Add functionality to capture expected edits when NES suggestions are rejected:
- Add ExpectedEditCaptureController for managing capture sessions
- Add configuration settings for enabling the feature
- Register capture commands with keybindings
- Add context key for inlineEditsEnabled to enable keybindings
- Include documentation for the feature
* Revert debug recorder to original settings
* feat: add tests for filtering sensitive files in inline edit logs
- Implemented unit tests to ensure sensitive files such as .env files, private keys, and files in sensitive directories are filtered out correctly from logs.
- Added handling for Windows-style backslash paths in the filtering function.
- Preserved non-document log entries during filtering.
feat: add NesFeedbackSubmitter tests
- Created comprehensive tests for the NesFeedbackSubmitter class, covering methods for extracting document paths and filtering recordings by excluded paths.
- Ensured proper handling of metadata files and invalid JSON scenarios.
- Included performance tests for filtering large recordings efficiently.
fix: enhance inline completion provider with document path metadata
- Updated inline completion provider to include document path in metadata during rejection captures.
feat: add command for submitting expected edits in inline edit provider feature
- Registered a new command to allow submission of captured edits in the inline edit provider feature.
* refactor: update GitHub session retrieval method and adjust test expectations for performance
* test: update inlineEditDebugComponent tests for consistent string quoting
* feat: enhance sensitive file filtering with case-insensitive matching and additional patterns
* feat: add User-Agent header to GitHub API requests in NesFeedbackSubmitter
* Move NES Expected Edit Capture documentation
* fix compilation
* move spec to docs/
* simplify by not having `| undefiend`
* nicer tracing
* remove redundancy
* migrate to sublogger
* web-compat Buffer
* reuse code
* correct composition of edits
* use cmd+enter to save the captured edits
---------
Co-authored-by: Erik Portillo <6964428+erikportillo@users.noreply.github.com>