Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose shell integration command knowledge to extensions #145234

Closed
Tracked by #22879
Tyriar opened this issue Mar 16, 2022 · 105 comments · Fixed by #224744
Closed
Tracked by #22879

Expose shell integration command knowledge to extensions #145234

Tyriar opened this issue Mar 16, 2022 · 105 comments · Fixed by #224744
Assignees
Labels
api api-finalization feature-request Request for new features or functionality on-testplan terminal-shell-integration Shell integration, command decorations, etc.
Milestone

Comments

@Tyriar
Copy link
Member

Tyriar commented Mar 16, 2022

Shell integration in the terminal could enable APIs like being able to listen to commands that run and get their output/exit code.

Rough example:

interface Terminal {
  executeCommand(command): Thenable<TerminalCommandResult>;
}
@Tyriar Tyriar added feature-request Request for new features or functionality api terminal-shell-integration Shell integration, command decorations, etc. labels Mar 16, 2022
@Tyriar Tyriar added this to the Backlog milestone Mar 16, 2022
@ClockworkV
Copy link

I came here to request this, and here it is already.
Being in Backlog means it'll get on the work plan eventually?

Cheers, looking forward to this, it's the missing link for my 'debug last command line' extension!

@Tyriar
Copy link
Member Author

Tyriar commented Jul 8, 2022

@ClockworkV backlog means it's a valid item and it may be worked on in the future. I'm pretty sure this one will happen within the next year

@meganrogge
Copy link
Contributor

Proposal:

registerQuickFixProvider(...options: ITerminalQuickFixOptions[]): void;


export interface ITerminalQuickFixOptions {
	commandLineMatcher: string | RegExp;
	outputMatcher?: ITerminalOutputMatcher;
	getQuickFixes: TerminalQuickFixCallback;
	exitStatus?: boolean;
}
export type TerminalQuickFixMatchResult = { commandLineMatch: RegExpMatchArray; outputMatch?: RegExpMatchArray | null };
export type TerminalQuickFixAction = IAction | ITerminalQuickFixCommandAction | ITerminalQuickFixOpenerAction;
export type TerminalQuickFixCallback = (matchResult: TerminalQuickFixMatchResult, command: ITerminalCommand) => TerminalQuickFixAction[] | TerminalQuickFixAction | undefined;

export interface ITerminalQuickFixCommandAction {
	type: 'command';
	command: string;
	addNewLine: boolean;
}
export interface ITerminalQuickFixOpenerAction {
	type: 'opener';
	uri: URI;
}
export interface ITerminalOutputMatcher {
	/**
	 * A string or regex to match against the unwrapped line. If this is a regex with the multiline
	 * flag, it will scan an amount of lines equal to `\n` instances in the regex + 1.
	 */
	lineMatcher: string | RegExp;
	/**
	 * Which side of the output to anchor the {@link offset} and {@link length} against.
	 */
	anchor: 'top' | 'bottom';
	/**
	 * How far from either the top or the bottom of the butter to start matching against.
	 */
	offset: number;
	/**
	 * The number of rows to match against, this should be as small as possible for performance
	 * reasons.
	 */
	length: number;
}

@alexr00 and @lszomoru how does this look to you, as you'll be adopting this for the git extension?

@Tyriar
Copy link
Member Author

Tyriar commented Oct 7, 2022

@meganrogge I've forked this off to #162950 as I realized this issue is more about general listening to commands

@mmisiewicz
Copy link

Voting for this issue. The proposed interface would exactly solve a problem I have developing an extension.

@lroberts7
Copy link

+1 for this, can we get it on a roadmap plz?

@mmisiewicz-yext
Copy link

Hi @meganrogge and @Tyriar - I've noticed this issue has been on an "iteration plan" in Nov and Oct of 2022. I'm wondering if you think it will be picked up any time soon? Thanks, really appreciate all the hard work!

@degrammer
Copy link

Hi @Tyriar, can you please confirm, if as part of this feature, allowing access to the active terminal selected text is going to be available / planned to work in the short term? (related issue #188173).

One of the use cases could be for extensions using a command as part of terminal/context to access the selected text from the terminal to perform things like AI Suggestions, Output sharing, etc.

Thank you 🙏🏼

@Tyriar
Copy link
Member Author

Tyriar commented Jun 13, 2024

@degrammer selection access will be done as a part of the buffer access api, not this one. That's been but on hold for a while as I have some competing priorities and want to think about the API shape in the background a bit.

We definitely do want to finalize an api for selection eventually as GH copilot uses the current proposal, unfortunately to make it future proof we need to tie it in with the much more complex buffer proposal.

@Tyriar Tyriar modified the milestones: June 2024, July 2024 Jun 18, 2024
@Tyriar
Copy link
Member Author

Tyriar commented Jun 18, 2024

Moving to July for Python to adopt first and give feedback before finalizing.

@whitequark
Copy link

Is there any way to receive a stream of raw data from a terminal that does not have shell integration? For example if I create a terminal with any command of my choice by setting shellPath to argv[0] and shellArgs to argv[1...].

Since there's only one command that could plausibly be run in that terminal it's not necessary to try and guess which command the output comes from. The current API doesn't seem to offer anything to cover this use case, and I think it would be too limiting for my purpose.

@Tyriar
Copy link
Member Author

Tyriar commented Jun 25, 2024

@whitequark no, this is only for when shell integration is enabled. There is the related proposal for buffer access which allows reading the buffer which would probably cover your use case. #207504

@whitequark
Copy link

@Tyriar Thank you, this really helps!

bricefriha pushed a commit to bricefriha/vscode that referenced this issue Jun 26, 2024
@Tyriar Tyriar modified the milestones: July 2024, August 2024 Jul 22, 2024
@itstreefam
Copy link

I have a quick question. What is the difference between this API and vscode.proposed.terminalExecuteCommandEvent.d.ts? My current use case is grabbing the output from an executed command, and I am using vscode.proposed.terminalExecuteCommandEvent.d.ts to do so. I suppose we can also use read() from vscode.proposed.terminalShellIntegration.d.ts to read the output stream but feel free to correct me. I wonder which one would you think have a higher chance for public release. Before these two APIs I remembered having to work around with the old vscode.proposed.terminalDataWriteEvent.d.ts, so I truly appreciate the current more stable approaches you have made available. Thanks!

@Tyriar
Copy link
Member Author

Tyriar commented Jul 25, 2024

@itstreefam terminalExecuteCommandEvent is old and will be removed, terminalDataWriteEvent is unlikely to get finalized and may be replaced eventually with improvements upon terminalShellIntegration. terminalShellIntegration should be finalized very soon, I just need a fix a few bugs with it.

@Tyriar
Copy link
Member Author

Tyriar commented Jul 30, 2024

Plan:

Tyriar added a commit that referenced this issue Aug 4, 2024
Tyriar added a commit that referenced this issue Aug 7, 2024
@Tyriar Tyriar mentioned this issue Aug 7, 2024
meslubi2021 added a commit to meslubi2021/vscode that referenced this issue Aug 10, 2024
* primary button

* debug: treat 'subtle' frames like 'deemphasized' (microsoft#209078)

To be closer to DAP

Fixes microsoft#206801

* debug: fix resizing window makes debug toolbar disappear (microsoft#209075)

Fixes microsoft#208895

Should work but testing on aux windows was limited due to microsoft#209073

* trees: always handle an twistie events by the tree if it changes collapsed state (microsoft#209090)

This allows preserving your multi-selection while expanding/collapsing other nodes in the tree. I think this is a good overall change to make across our UI. E.g. similarly, without this change, you can't expand a folder in the Explorer view without losing your selection state. cc @joaomoreno

Fixes microsoft#208852

* Adjust scheme and authority of URIs in remote terminals

Fixes microsoft#208572

* Also check file scheme

* Apply environment when selecting default profile as well

Fixes microsoft#204167

* Add ... suffix to new with profile actions

Fixes microsoft#208655

* Add git bash to shell integration description

* Remove notebook view from focus order & accessibility tree when hidden (microsoft#209059)

* Remove notebook view from focus order when hidden

* Set `inert` on the correct container

* Use IconSelectBox to change terminal icon, remove dupes

Fixes microsoft#199964

* testing: fix resolveHandler not called on item replacement (microsoft#209121)

Fixes microsoft#207574

* remove experimental setting (microsoft#209126)

* Remove terminal change icon tests as they required quick pick

* chore: bump katex (microsoft#209141)

* get request to show up in chat view

* Update src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.ts

* Update src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.ts

* Also fire an event when focus & selection goes to empty (microsoft#209145)

Fixes microsoft#209074

* Port followups candidate to main (microsoft#209203)

Fix followups going to participant ID (microsoft#209114)

Fix microsoft/vscode-copilot#4861

* Remove 'session' from transfer API (microsoft#209204)

* Fix typo in editor.action.startDebugTextMate title (microsoft#209160)

TextMate is one word.

* Remove other icon smoke tests

* Limit drop disablement to just http(s) uris (microsoft#209240)

For microsoft#209239

* Introduce ITerminalConfigurationService

Part of microsoft#181900

* Docs

* Adopt terminal config service in terminalActions

* Adopt terminal config service in terminalEditor

* Adopt terminal config service in more files

* Move more to terminal config service

* Remove ITerminalConfigHelper.config completely

Part of microsoft#181900

* Init TerminalConfigurationService

* Test for TerminalConfigurationService

* Pick up editor action command descriptions (microsoft#209259)

Continuation of microsoft#193937 and microsoft#197442

This adds the command descriptions of editor actions to the ICommandQuickPick results so that those results can be picked up by the "similar commands" feature.

Example:

I can add:
```
metadata: {
    description: nls.localize2('test', "xyz"),
}
```
to the [AddLineCommentAction](https://github.com/microsoft/vscode/blob/7d788e70b95c79718b565ff9e255858db4cc74b3/src/vs/editor/contrib/comment/browser/comment.ts#L105)... and then when I search "xyz" it'll show up.

* Fix leak in terminalConfigHelper.test

* Include Command Description in `_getAllCommands` (microsoft#209260)

This is important information for the command so we should include it in this response.

* Move wsl recommendations out of config helper and into contribution

Part of microsoft#181900

* Fix tests

* Fix XtermTerminal.test

* fix microsoft#209167

* Enable dnd in chat references list (microsoft#209263)

* Fix tests for reals this time

* Pick up latest TS for building VS Code (microsoft#209265)

* fix microsoft#207946

* move a line

* clean up

* Remove xterm triggerDataEvent private API usage

* Make types more correct

* Remove _onData access

* Don't use stateful regex (microsoft#209268)

Fixes microsoft#209254

* Remove _onKey access

* Remove _charSizeService access

* Remove unneeded lint suppression

* Remove unused event emitter type

* Remove hack for canvas to force a refresh

I can no longer reproduce this issue and it was a big hack regardless.
Will track issues for any mentioned of bad resizes on the canvas
renderer.

* testing: fix testing-coverage-lineHeight being marked as a color (microsoft#209273)

* De-select output for `focus cell container` commands (microsoft#209269)

* pass message to de-select when container is selected from output

* clear selection in more cases

* Remove xterm canvas renderer from fallback logic

This simplifies things a lot, the plan is to remove the canvas renderer
completely from VS Code if all goes well (microsoft#209276).

Fixes microsoft#209275

* get insert kb to work in input editor

* eng: fix CSS tooling crashes watch task (microsoft#209278)

Get rid of the gulp-postcss plugin and just implement our own, I couldn't get it to work.

Fixes microsoft#207827

* just add as secondary

* Update src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.ts

* Update src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.ts

* Remove isMeasurement (microsoft#209287)

* Remove isMeaasurement from the typing

* Remove isMeasurement

* fix microsoft#146972

* Migrate rest of TerminalConfigHelper to TerminalConfigurationService

Fixes microsoft#181900

* Replace label computer ctor in test

* Remove safari check to use webgl

* remove extra width from aiButton (microsoft#209295)

* Fix hygiene

* use disposableStore

* notebook output performance (microsoft#209282)

* record perf data for notebook outputs

* debounce event per cell

* send size info, emit directly from perf message listener

* fix classification details

* better names

* Fix test failures due to private mangling

* Add `windowOptions` to xtermTerminal

* SCM - Add support for filtering history item changes (microsoft#209327)

* Support Shift+Up/Down keys in notebook outputs (microsoft#209314)

* Fixes microsoft#209324

* Fix opening folders in file picker (microsoft#209330)

Part of microsoft#208937

* SCM - 💄 API cleanup (microsoft#209339)

* SCM - 💄 API cleanup

* Fix compilation

* fix 208710 (microsoft#209343)

* fix syncing profiles (microsoft#209336)

fix microsoft#208710

* bailout if profile with same name exists already

* make it sync

* Fixes microsoft#209251

* add and use ChatInputPart#contentHeight (microsoft#209345)

fixes https://github.com/microsoft/vscode-copilot/issues/4727

* SCM - use custom hover for history item statistics (microsoft#209346)

* Move onto ITerminalConfigurationService

* Bring terminal editor's mousedown handling closer in line with tabbed view

* Use switch, allow Linux to paste regular clipboard too

* Improve setting description

* docs: categorize chat-list-background as other (microsoft#209303)

* Add experimental support for updating markdown links on copy/paste (microsoft#209319)

* Add experimental support for updating markdown links on copy/paste

For microsoft#209318

* Remove log

* use abstract class

* swap lines

* implement as classes

* Logging navigible container events for debug

* make isPresent optional

* Update src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignalLineFeatureContribution.ts

* Log only when config is enabled

* Enable terminal smoke tests on desktop

Fixes microsoft#146811

* exthost: fix profiling not working (microsoft#209142)

* exthost: fix profiling not working

Fixes microsoft#194678. Requires jrieken/v8-inspect-profiler#3 to be merged and published in order to pass the 'host' down.

* bump package

* Inline completion refactoring (microsoft#209011)

* Fix leaks in terminalTabsList

Fixes microsoft#207462

* Fix leaks in terminalInstance dnd

Fixes microsoft#207459

* Fix leaks in hoverService

Fixes microsoft#207454

* Support any OSC link scheme

Fixes microsoft#176812

* SCM - add history item hover (microsoft#209373)

* allow input elements to handle keydown events (microsoft#209362)

* fix microsoft#191745

* move declaration near usage

* chore: increase timeout of Linux x64 job (microsoft#209387)

* Allow via notification

* Fix search text input issues (microsoft#209365)

Fixes microsoft#209361

* fix issue

* api comment (microsoft#209410)

* render inline chat change decoration also inside minimap (microsoft#209414)

* remove restore on profile item (microsoft#209416)

* Engineering - update suppression file (microsoft#209419)

* chore - add `IInstantiationService#dispose` (microsoft#209421)

* Support setting keyboard shortcut from Action Item Context Menu (microsoft#209431)

fixes microsoft#208221

* Introduce hoverDelegate2.ts

Part of microsoft#204965

* Set base delegate, fix imports

* ICustomHover -> IUpdatableHover

* Remove duplicate/deprecated IHoverAction

* Move updatable hover interfaces to hover.ts

* Create IHoverDelegate2.setUpdatableHover

* Add deprecated annotations to old functions

* Move statusBarItem onto new hoverService.setupUpdatableHover

* More adoption, improve deprecated messages

* Remove all usage of setupCustomHover from base/

* Update majority of workbench references to setupCustomHover

* Remove all remaining usages of setupCustomHover

* Remove updatableHoverWidget.ts

* Stub null hover service in some tests

* Fix null access (microsoft#209449)

* Update tab bar colors (microsoft#209451)

tab bar colors debt

* Fix output vsbuffer transfer via workspace edit. (microsoft#209358)

* Fix output vsbuffer transfer via workspace edit.

* Adopt interface change.

* fix microsoft#209091 (microsoft#209454)

* support `vscode.ChatResponseTextEditPart` and support rendering of text edits in chat widget (using the diff editor)

* chore: add new colours (microsoft#209457)

* use disposableStore

* Add CLI cleaning regex (microsoft#209462)

* fix microsoft#152476

* Enable copy paste api in scm input (microsoft#209466)

* Enable dnd and copy paste apis in scm input

For microsoft#209460

Enables dropping or pasting a file from the vscode/system explorer into the scminput to insert the file name. Currently nothing happens when you try this

In the future will also allow extensions to hook into these apis

* Revert organize imports

* Remove duplication

* fix: trim end of matched link (microsoft#209469)

* dispose saved text model with wrong view type (microsoft#209461)

* fix microsoft#184454

* rm empty line

* web: add didResolveRemoteAuthority function for embedders (microsoft#209480)

* Clean up some tests, fix some leaks

* cli: allow public port forwarding via tunnels (microsoft#209489)

* fix microsoft#209487

* chore: increase compile job timeout (microsoft#209497)

* cli: add progress for extraction (microsoft#209499)

For https://github.com/microsoft/vscode-remote-tunnels/issues/724

* Convert Workspace Cell Edit dto to renderer types (microsoft#209498)

* Hide notebook chat actions from f1. (microsoft#209501)

* Fix injected services becoming public by mistake (microsoft#209513)

* Fix injected services becoming public by mistake

Fixes cases of `@IFooService readonly foo: IFooService`. This makes the service public, which is likely not expected and also means we can't mangle it

* Fix name

* Remove unused props

* - extract `IChatListItemRendererOptions`
- use diff editor hiding of unchanged regions
- simpler code compare block (for now)

* Add descriptions for commands microsoft#209511 (microsoft#209524)

* fix microsoft#209441 (microsoft#209526)

* Add color item for sidebar title background (microsoft#209528)

fixes microsoft#209164

* Count replies, not comments (microsoft#209527)

Fixes microsoft/vscode-pull-request-github#5869

* 💄

* Fix tab indicator size when tab action left and tab sizing fixed/shrink (microsoft#209532)

fixes microsoft#207003

* removing issue reporter API (microsoft#209125)

* first snap

* sent the comments to the shadow realm

* one comment we forgot to remove :(

* fix microsoft#207101

* move audio cue config to new file

* rename, move things around

* add accessibility signals to l8n

* add scope

* accessibility signals

* more descriptions

* Add todos for shellIntegration API from API sync

Part of microsoft#145234

* add discard description

* Update src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.ts

* fix microsoft#207813 (microsoft#209553)

* Add eslint rule for potentially unsafe disposable patterns (microsoft#209555)

`DisposableStore`/`MutableDisposable` properties should almost always be `readonly`. Otherwise it's easy to accidentally overwrite the property and leak the previous value. This commonly happens with code such as:

```ts
class Foo {
     private disposables = new DisposableStore();

     bar() {
         this.disposables = new DisposableStore(); // leaks old values
         ...
     }
```

This change adds an eslint rule to enforce this and adopts `readonly` for the caught cases. I only needed to add 2 suppression comments, which seems like an acceptable tradeoff for helping catch a common mistake

* Bump @typescript-eslint versions (microsoft#209516)

6.x is the latest release that supports our current node target

* Fix frontmatter line map (microsoft#209556)

Fixes microsoft#209267

* Fix typo from old code (microsoft#209557)

fix long standing typo

* Add command description (microsoft#209558)

For microsoft#209511

* testing: remove back compat shims for coverage API (microsoft#209559)

Now that the API is finalized, remove the back compat shims that were in place

* chore: update to rust 1.77 (microsoft#209563)

* chore: update to rust 1.77

* fix tests

* debug: add some command descriptions (microsoft#209570)

For microsoft#209511

* Pick up latest md language service (microsoft#209574)

* feat. add a menu item 'expand-select' to expand subtree in search view (microsoft#206033)

* feat. add a menu item 'Expand All' to expand subtree

* feat. update menu text

* Strongly typed instead of `any` for nb config (microsoft#209493)

* Strongly types instead of `any` for nb config

* fix swapped setting fallbacks

* Address review comments

---------

Co-authored-by: Michael Lively <milively@microsoft.com>

* Update borders on template reuse. (microsoft#209577)

* fix: deprecate unity-launch flag (microsoft#209471)

* Clean up chat submit actions (microsoft#209578)

* Align submit/send actions in chat

* Clean up chat submit actions

* Make all remote chat agents sticky (microsoft#209579)

* fix: add open user settings JSON description (microsoft#209583)

* Fix leak (microsoft#209588)

Fix microsoft#208621

* Set role on lightbulb widget (microsoft#209592)

* Add tree sticky scroll colors based on view location fixes microsoft#205441

* Expose comments input as text document (microsoft#209512)

* Expose comments input as text document

Fixes https://github.com/microsoft/vscode-pull-request-github/issues/5875
For microsoft#209508

Exposes comment input editors as text documents that extensions can see. Enables a few features in them too such as 'paste as' and 'drop into'

* Small fixes

* Enable markers in comments

* Fix async

* Fix comment buttons on the top

---------

Co-authored-by: Alex Ross <alros@microsoft.com>

* Adding command descriptions for TF-IDF search (microsoft#209612)

adding descriptions

* debt - `arrays.ts#tail` can return `undefined` (microsoft#209631)

* Fixing typo in description (microsoft#209630)

fixing typo

* Bump distro (microsoft#209636)

* add `StableEditorBottomScrollState` so that inline chat moves lines of interest less (microsoft#209637)

there is still some movement because the height of the zone changes through out the request

* chore - remove arrays#tail, use `array.at(-1)` instead

---------

Co-authored-by: meganrogge <megan.rogge@microsoft.com>
Co-authored-by: Connor Peet <connor@peet.io>
Co-authored-by: Megan Rogge <merogge@microsoft.com>
Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
Co-authored-by: Kyle Cutler <67761731+kycutler@users.noreply.github.com>
Co-authored-by: Aaron Munger <aamunger@microsoft.com>
Co-authored-by: Raymond Zhao <7199958+rzhao271@users.noreply.github.com>
Co-authored-by: Tyler James Leonhardt <me@tylerleonhardt.com>
Co-authored-by: Rob Lourens <roblourens@gmail.com>
Co-authored-by: George Garside <grg.garside@gmail.com>
Co-authored-by: Matt Bierner <matb@microsoft.com>
Co-authored-by: Logan Ramos <lramos15@gmail.com>
Co-authored-by: Andrea Mah <31675041+andreamah@users.noreply.github.com>
Co-authored-by: Matt Mastracci <matthew@mastracci.com>
Co-authored-by: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com>
Co-authored-by: Don Jayamanne <don.jayamanne@outlook.com>
Co-authored-by: Henning Dieterichs <hdieterichs@microsoft.com>
Co-authored-by: Alex Ross <alros@microsoft.com>
Co-authored-by: Sandeep Somavarapu <sasomava@microsoft.com>
Co-authored-by: Johannes Rieken <johannes.rieken@gmail.com>
Co-authored-by: hsfzxjy <hsfzxjy@gmail.com>
Co-authored-by: Benjamin Christopher Simmonds <44439583+benibenj@users.noreply.github.com>
Co-authored-by: Peng Lyu <penn.lv@gmail.com>
Co-authored-by: Justin Chen <54879025+justschen@users.noreply.github.com>
Co-authored-by: Michael Lively <milively@microsoft.com>
Co-authored-by: Premium <pagict@gmail.com>
Co-authored-by: BeniBenj <besimmonds@microsoft.com>
Co-authored-by: Aiday Marlen Kyzy <amarlenkyzy@microsoft.com>
@vs-code-engineering vs-code-engineering bot locked and limited conversation to collaborators Sep 21, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
api api-finalization feature-request Request for new features or functionality on-testplan terminal-shell-integration Shell integration, command decorations, etc.
Projects
None yet
Development

Successfully merging a pull request may close this issue.