Includes public API, user setting, status bar icon and a new service to support metered network connections.
Updates code in various areas performing automated actions using network to delay/pause network operations while network connection is being metered.
* make sure to resize images coming from tool calls
* try/catch, resize in the right areas
* new image service
* some cleanup
* clean up service usage
* no more electron main service
* app.ts cleanup
* address comments
* wrap in try catch and revert
* proper revert
* big refator to ui element's own service
* move native to own file
* add native type
* fix in layer checker
* fix in layer checker
* fix whitespace
* fix another whitespace
* Update layersChecker.js
* build still not passing
* Update layersChecker.js
* update layerChecker using npm run compile
* try updating layer checker rules
* rename simple browser service
* another rename in app.ts
* Initial cut of WebContentExtractorService & a fetch tool
I will likely move the tool into Copilot so it can take advantage of prompt-tsx and embeddings indexing... but this is the first cut to play around with it.
This leverages Chrome DevTools Protocol's `Accessibility.getFullAXTree` command in order to get a representation of a page while marking what is useful on the page and what is not. We take the output of the command and turn it into a string that the caller can easily consume. This transformer will get more sophisticated over time to make sure we keep content that's important, and ditch content that is not.
On the tool side of things... this implements a Confirmation flow that verifies if the urls being requested is a trusted domain. We are _rendering_ these urls (albiet, sandboxed without JS) so we want to make sure they're safe. If it's not trusted, they'll be asked to confirm.
* fix naming
- There's an mcpDiscoveryRegistry that allows components to register in
how they discover MCP servers.
- Config discovery is one of these. Figured out all the bits for a
standalone file config shebang. Duplication there that could be
cleaned up but it works.
- The others are remote and local filesystem discovery. I ended up
making another message channel for the main process/remote server to
get a couple environment variables we need since I didn't see anything
generic for this already(?)

* web version working
* change to mainWindow
* PROPER MOVEMENT
* working for web as well
* move issueFormService to workbench/contrib/issue
* cleaning up{
* more cleanup, added setting
* styling
* use mainwindow to open and closee
* css fixes
* fix css again
* fix CSS and wonky applyCSS rules
* change gulpfile
* add and update system info
* address some of the comments
* move files! small changes
* move JS and non window specific back to electron sandbox
* fix on issueReporter.js
* fix build file
* fix gulp file too....
* move everything into contrib
* fix workbench import
* move everything else into contrib, fix import
* change name to web
* applying more feedback fixes :D
* fix command and remove unused import:
* add back issueTroubleshoot
* fix gulpile outputs
* fix out exclusion:
* First move off of keytar
Since keytar is now deprecated, we need a solution going forward. That solution is the electron safeStorage API.
This PR:
* Uses the Electron safeStorage API for encryption
* Since we have encrypted strings we then store them in the StorageService (at the application & machine level)
This PR also refactors things quite a bit... a diagram of the change is going to be in the PR.
It gives embedders the ability to override the behavior of the secret storage similar to the existing Credential Provider embedder API... only with a better API surface since we no longer need to conform to keytar's shape.
More will come after this PR such as:
* Converting all CredentialService usages to SecretStorageService usages
After a while:
* Removing MainThreadKeytar
* Removing all the old code marked in this PR
* Use InMemoryStorageService
* use pausable emitter
The issue services were due for a clean up. They now have this shape:
* `platform/issue` has the `IssueMainService`, the service running on the Main process that Desktop takes advantage of
* `workbench/contrib/issue` has the contributions and the registered commands
* `workbench/services/issue` has the services that the renderer side can use to launch the issue reporter.
After this, I will work on getting out the raw IPC calls in the IssueMainService.