litmus-cli 1.4.21 → 1.4.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/commands/connect.d.ts +231 -2
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +311 -12
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pause.d.ts +36 -0
- package/dist/commands/pause.d.ts.map +1 -0
- package/dist/commands/pause.js +110 -0
- package/dist/commands/pause.js.map +1 -0
- package/dist/commands/push.d.ts +7 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +40 -1
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/submit.d.ts.map +1 -1
- package/dist/commands/submit.js +48 -2
- package/dist/commands/submit.js.map +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +27 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +45 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/config.d.ts +21 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +53 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/git-bundle.d.ts +19 -0
- package/dist/lib/git-bundle.d.ts.map +1 -0
- package/dist/lib/git-bundle.js +71 -0
- package/dist/lib/git-bundle.js.map +1 -0
- package/dist/lib/session-end.d.ts +111 -0
- package/dist/lib/session-end.d.ts.map +1 -0
- package/dist/lib/session-end.js +126 -0
- package/dist/lib/session-end.js.map +1 -0
- package/dist/lib/submit-route.d.ts +68 -0
- package/dist/lib/submit-route.d.ts.map +1 -0
- package/dist/lib/submit-route.js +73 -0
- package/dist/lib/submit-route.js.map +1 -0
- package/dist/lib/watcher.js +23 -2
- package/dist/lib/watcher.js.map +1 -1
- package/dist/lib/workspace-token.d.ts +69 -0
- package/dist/lib/workspace-token.d.ts.map +1 -0
- package/dist/lib/workspace-token.js +93 -0
- package/dist/lib/workspace-token.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,6 +51,22 @@ Run this from inside your assessment folder when you're done. It packages your w
|
|
|
51
51
|
|
|
52
52
|
Use `litmus submit --yes` to skip the confirmation prompt.
|
|
53
53
|
|
|
54
|
+
### If your assessment runs in a Litmus workspace
|
|
55
|
+
|
|
56
|
+
Some assessments give you a hosted workspace instead of a local folder — you open
|
|
57
|
+
it in the browser or connect to it with `litmus connect`. There is nothing local
|
|
58
|
+
to package there, so `litmus submit` does not apply and will tell you so. Submit
|
|
59
|
+
with:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
litmus push
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Run it in the workspace terminal, where it needs no token, or on your own machine
|
|
66
|
+
as `litmus push <token>` with the token from your assessment page. Either way it
|
|
67
|
+
captures the workspace exactly as it stands, so there is nothing to commit or push
|
|
68
|
+
first. The Submit button on your assessment page does the same thing.
|
|
69
|
+
|
|
54
70
|
## How it works
|
|
55
71
|
|
|
56
72
|
1. `litmus init <token>` — sets up your workspace and starts the clock
|
|
@@ -84,6 +84,144 @@ export declare function buildControlPathBlock(alias: string, p: ParsedSsh): stri
|
|
|
84
84
|
export declare function upsertSshConfigContent(existing: string, alias: string, block: string, controlBlock?: string): string;
|
|
85
85
|
/** Short, stable alias from the workspace hostname (or token as a fallback). */
|
|
86
86
|
export declare function aliasFor(sshHostname: string | null | undefined, token: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* The native editors `litmus connect` can drive, and everything about them that is
|
|
89
|
+
* not shared. Both are VS Code-family, so one set of helpers serves both: the CLI
|
|
90
|
+
* argument grammar (`--remote ssh-remote+<alias>`, `--list-extensions`,
|
|
91
|
+
* `--install-extension … --force`) is identical. What is NOT identical is the
|
|
92
|
+
* Remote-SSH extension, and that is the part worth stating.
|
|
93
|
+
*
|
|
94
|
+
* ENG-1950. MEASURED against a real Cursor (3.17.19, darwin arm64) rather than assumed
|
|
95
|
+
* from VS Code, because a fork is exactly where this silently differs:
|
|
96
|
+
*
|
|
97
|
+
* - `cursor --list-extensions` reports `anysphere.remote-ssh`, whose manifest
|
|
98
|
+
* activates on `onResolveRemoteAuthority:ssh-remote` — i.e. it is the resolver that
|
|
99
|
+
* `--remote ssh-remote+<alias>` needs, the same role `ms-vscode-remote.remote-ssh`
|
|
100
|
+
* plays in VS Code. Microsoft's extension is licensed to VS Code and cannot be
|
|
101
|
+
* installed into Cursor at all, so reusing the VS Code id here would install
|
|
102
|
+
* nothing and leave the candidate in a dead remote window — the one failure this
|
|
103
|
+
* check exists to prevent.
|
|
104
|
+
* - `--install-extension <ext-id>` / `--force` / `--list-extensions` are all
|
|
105
|
+
* documented in `cursor --help`, with VS Code's spelling.
|
|
106
|
+
* - `--remote` is absent from `cursor --help`, as it is from `code --help`: in both
|
|
107
|
+
* bundles the option table carries `remote:{type:"string",allowEmptyValue:true}`
|
|
108
|
+
* with no help category, so it is hidden rather than missing. `code --remote` is
|
|
109
|
+
* already proven in production here; Cursor parses the same grammar.
|
|
110
|
+
*
|
|
111
|
+
* ENG-2152 adds `banner`, and it is the field that makes the rest of this record safe to
|
|
112
|
+
* use. `bin` is a NAME ON PATH, not an identity: Cursor's own CLI is shipped as
|
|
113
|
+
* `Cursor.app/Contents/Resources/app/bin/code`, so a machine where Cursor is the daily
|
|
114
|
+
* driver can easily have `code` resolve to it — which is how a teammate whose default
|
|
115
|
+
* editor is Cursor, choosing VS Code, got Cursor (reported by Elena, 2026-09-03).
|
|
116
|
+
* Everything below then ran against the wrong editor:
|
|
117
|
+
* `--list-extensions` does not report the Microsoft id, so we "install" it and announce
|
|
118
|
+
* "Installed the VS Code Remote-SSH extension", and `--remote` opens Cursor while we say
|
|
119
|
+
* we are opening VS Code. The candidate is then on Cursor's capture lane having never
|
|
120
|
+
* been shown the full-quit notice that lane depends on (ENG-1728), which is silent zero
|
|
121
|
+
* capture.
|
|
122
|
+
*
|
|
123
|
+
* MEASURED 2026-09-04 on darwin arm64, VS Code 1.136.1 and Cursor 3.18.25, with a `code`
|
|
124
|
+
* symlinked to Cursor's CLI to reproduce the report:
|
|
125
|
+
*
|
|
126
|
+
* - `--version` CANNOT tell them apart. Both print exactly three lines — version,
|
|
127
|
+
* commit, arch — with no product name anywhere ("3.18.25" from the `code` that was
|
|
128
|
+
* Cursor). So `hasEditorCli`'s probe is not merely unchecked, it has nothing to
|
|
129
|
+
* check, and the version numbers (1.x vs 3.x) are a coincidence, not a contract.
|
|
130
|
+
* - `--help` line 1 IS the product name: "Visual Studio Code 1.136.1" against
|
|
131
|
+
* "Cursor 3.18.25", on STDOUT (stderr empty), exit 0, no window, instant. It is
|
|
132
|
+
* `product.json`'s `nameLong`, which is why the patterns below are anchored prefixes
|
|
133
|
+
* — VS Code Insiders prints "Visual Studio Code - Insiders", and matching the whole
|
|
134
|
+
* line would refuse it.
|
|
135
|
+
* - The body of `--help` names BOTH editors ("ps aux | grep code | cursor -"), so the
|
|
136
|
+
* identity is read off the first non-empty line and never scanned for.
|
|
137
|
+
* - Cursor 3.18.25 does not even fail loudly on the wrong extension: it answers
|
|
138
|
+
* `--install-extension ms-vscode-remote.remote-ssh --force` with "already installed",
|
|
139
|
+
* exit 0, mapping the Microsoft id onto its own `anysphere.remote-ssh`. So the dead
|
|
140
|
+
* remote window is version-dependent and the FALSE success line is not.
|
|
141
|
+
*/
|
|
142
|
+
export type NativeIde = "vscode" | "cursor";
|
|
143
|
+
export interface NativeEditor {
|
|
144
|
+
/** Which choice this record IS, so a record is self-describing once resolved. */
|
|
145
|
+
ide: NativeIde;
|
|
146
|
+
/** CLI binary we expect on PATH. */
|
|
147
|
+
bin: string;
|
|
148
|
+
/**
|
|
149
|
+
* What `<bin> --help` announces on its FIRST non-empty line when `bin` really is this
|
|
150
|
+
* editor. Anchored prefix, never the whole line and never the body — see the block
|
|
151
|
+
* comment above for the measurement and for why both of those matter.
|
|
152
|
+
*/
|
|
153
|
+
banner: RegExp;
|
|
154
|
+
/** What the candidate calls it — used verbatim in our output. */
|
|
155
|
+
label: string;
|
|
156
|
+
/**
|
|
157
|
+
* The client-side extension that resolves `ssh-remote+…`. Without it the editor
|
|
158
|
+
* silently opens a dead remote window ("Extension 'Remote - SSH' is required").
|
|
159
|
+
* Per-editor, never shared — see the block comment above.
|
|
160
|
+
*/
|
|
161
|
+
remoteSshExt: string;
|
|
162
|
+
/** The palette command that puts `bin` on PATH, for the no-CLI fallback. */
|
|
163
|
+
shellCommand: string;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* ENG-2152 — what the editor CLI we are about to drive says it IS.
|
|
167
|
+
*
|
|
168
|
+
* `hasEditorCli` above answers "does this command exist", which is a different and much
|
|
169
|
+
* weaker question, and treating the answer as an identity is the whole of this bug: the
|
|
170
|
+
* `code` on a Cursor user's PATH can be Cursor's own CLI, which is literally installed
|
|
171
|
+
* under that name inside `Cursor.app`. The measurement behind `banner` is in the
|
|
172
|
+
* `NATIVE_EDITORS` block comment; the three verdicts are what the caller may conclude.
|
|
173
|
+
*
|
|
174
|
+
* `unverified` is deliberately NOT a refusal, and the direction it fails in is the point.
|
|
175
|
+
* The only thing we can positively assert is "this banner is an editor we know", so an
|
|
176
|
+
* unrecognised one — VSCodium, a WSL or devcontainer `code` wrapper, a future rename, a
|
|
177
|
+
* platform where `--help` prints something else — may only move the answer towards
|
|
178
|
+
* "unknown", never towards naming an editor. Refusing there would break candidates for
|
|
179
|
+
* whom connect works today, in exchange for a claim we cannot make; proceeding leaves
|
|
180
|
+
* them exactly where they were before this check existed. What it can never do is
|
|
181
|
+
* silently open the OTHER editor, because that verdict requires recognising it.
|
|
182
|
+
*/
|
|
183
|
+
export type EditorIdentity = {
|
|
184
|
+
kind: "match";
|
|
185
|
+
} | {
|
|
186
|
+
kind: "mismatch";
|
|
187
|
+
actual: NativeIde;
|
|
188
|
+
} | {
|
|
189
|
+
kind: "unverified";
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Map `--help` output to an editor we know, or null.
|
|
193
|
+
*
|
|
194
|
+
* FIRST NON-EMPTY LINE ONLY. The body of `--help` names both editors — Cursor's own
|
|
195
|
+
* usage example is `ps aux | grep code | cursor -` — so anything that scans the whole
|
|
196
|
+
* output identifies whichever pattern it happens to try first, on either editor.
|
|
197
|
+
*/
|
|
198
|
+
export declare function identifyEditorBanner(helpOutput: string): NativeIde | null;
|
|
199
|
+
/** How the identity probe reaches the binary. Injected so the verdicts are testable. */
|
|
200
|
+
export type EditorHelpRunner = (bin: string) => string | null;
|
|
201
|
+
export declare function identifyEditorCli(ed: NativeEditor, run?: EditorHelpRunner): EditorIdentity;
|
|
202
|
+
/**
|
|
203
|
+
* ENG-2152 — the refusal, when the command the candidate's PATH answers with is the
|
|
204
|
+
* other editor.
|
|
205
|
+
*
|
|
206
|
+
* Two routes, and the one that WORKS RIGHT NOW comes first: on a machine where `code` is
|
|
207
|
+
* Cursor, Cursor is almost certainly the daily driver and VS Code may not be installed at
|
|
208
|
+
* all, so leading with "fix your PATH" leads with the thing that may be impossible.
|
|
209
|
+
* That ordering is the same one `announceCursorFullQuit` documents — what a candidate can
|
|
210
|
+
* act on immediately is what they read first.
|
|
211
|
+
*
|
|
212
|
+
* The offered command carries the token already inlined, for the reason `CursorReentry`
|
|
213
|
+
* gives: a `litmus connect <token>` a candidate has to repair themselves is worse than no
|
|
214
|
+
* command at all.
|
|
215
|
+
*
|
|
216
|
+
* When the editor that answered is Cursor, the quit requirement rides along. It is the
|
|
217
|
+
* headline only, not the whole ENG-1728 notice, because the command being offered prints
|
|
218
|
+
* that notice in full at selection time before anything opens — this is a FORWARD
|
|
219
|
+
* reference to output the candidate is about to see, not ENG-2145's back-reference to
|
|
220
|
+
* output that has scrolled away. Restating the whole block here would also have to
|
|
221
|
+
* restate its "this command is still running and will open Cursor for you", which on
|
|
222
|
+
* this path is false.
|
|
223
|
+
*/
|
|
224
|
+
export declare function editorMismatchLines(chosen: NativeEditor, actual: NativeEditor, reentry?: CursorReentry): string[];
|
|
87
225
|
export type IdeChoice = "vscode" | "cursor" | "browser" | "ssh";
|
|
88
226
|
/**
|
|
89
227
|
* Resolve which editor to open: an explicit --ide flag wins; otherwise prompt.
|
|
@@ -94,11 +232,75 @@ export type IdeChoice = "vscode" | "cursor" | "browser" | "ssh";
|
|
|
94
232
|
* selection path rather than by reading a string constant. A warning that is never
|
|
95
233
|
* reached is precisely the bug this ticket is fixing, so a test that cannot see whether
|
|
96
234
|
* it was printed is not a test of it.
|
|
235
|
+
*
|
|
236
|
+
* `reentry` is the way back in, and it is threaded from `runConnect` rather than
|
|
237
|
+
* rebuilt here because only the caller holds the token and the resolved base. When it
|
|
238
|
+
* is absent (a test, a scripted call) the notice degrades to the placeholder form
|
|
239
|
+
* rather than dropping the route — see `cursorReentryLines`.
|
|
97
240
|
*/
|
|
98
|
-
export declare function resolveIde(flag: string | undefined, log?: (line: string) => void): Promise<{
|
|
241
|
+
export declare function resolveIde(flag: string | undefined, log?: (line: string) => void, reentry?: CursorReentry): Promise<{
|
|
99
242
|
ide: IdeChoice;
|
|
100
243
|
chosen: boolean;
|
|
101
244
|
}>;
|
|
245
|
+
/**
|
|
246
|
+
* The candidate's own assessment page.
|
|
247
|
+
*
|
|
248
|
+
* **The slug is the ASSESSMENT ID, never the token**, and getting that wrong fails in
|
|
249
|
+
* the most misleading way available. `app/candidate/[slug]/layout.tsx` tolerates a
|
|
250
|
+
* token-shaped slug as a fallback, so the shell renders and the URL looks right — but
|
|
251
|
+
* `page.tsx` then fetches `/api/candidates/<email>/assessments/<slug>`, whose store
|
|
252
|
+
* lookup (`getAssessmentForCandidate`) matches on `assessment.id` alone. A token 404s
|
|
253
|
+
* there, and the candidate gets "Assessment Not Found. If you were invited under a
|
|
254
|
+
* different email, sign out and try that address" — a page telling them the problem is
|
|
255
|
+
* their account, at the moment they were promised a way back into their workspace.
|
|
256
|
+
* `/auth-redirect` resolves the token through `/api/assessments/by-token` and pushes
|
|
257
|
+
* exactly this shape, which is why it is the one to reproduce.
|
|
258
|
+
*
|
|
259
|
+
* ONE helper because this module prints the page twice for two different reasons (the
|
|
260
|
+
* disclosure refusal and ENG-2145's re-entry route) and both were the broken spelling.
|
|
261
|
+
* `connect-cursor-option.test.ts` asserts over the module's source that no `/candidate/`
|
|
262
|
+
* URL is built any other way — the mistake is invisible to a behavioural test, since
|
|
263
|
+
* both spellings are well-formed URLs that render a page.
|
|
264
|
+
*/
|
|
265
|
+
export declare function candidatePageUrl(apiBase: string, assessmentId: string): string;
|
|
266
|
+
/**
|
|
267
|
+
* The way back into a workspace, as the two things a candidate can act on.
|
|
268
|
+
*
|
|
269
|
+
* `command` is the pasteable form with the token already inlined; a bare
|
|
270
|
+
* `litmus connect <token>` a candidate has to repair themselves is worse than no
|
|
271
|
+
* command at all, which is the same line `showPauseControl` draws on the portal.
|
|
272
|
+
* `pageUrl` is their assessment page, which is the only route that survives losing
|
|
273
|
+
* the terminal as well — see `cursorReentryLines`.
|
|
274
|
+
*/
|
|
275
|
+
export interface CursorReentry {
|
|
276
|
+
command: string;
|
|
277
|
+
pageUrl: string | null;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* ENG-2145 — how to get back in, said in the same breath as "quit".
|
|
281
|
+
*
|
|
282
|
+
* Elena, 2026-09-04, after two people who know the product could not work it out:
|
|
283
|
+
* "it prompts you to quit cursor and come back in but it's not quite intuitive how
|
|
284
|
+
* we're going to get back in."
|
|
285
|
+
*
|
|
286
|
+
* The notice used to offer exactly one route — "let this command reopen it" — and that
|
|
287
|
+
* is the one route the instruction above it destroys. A candidate told to quit Cursor is
|
|
288
|
+
* very likely reading the instruction IN CURSOR'S OWN INTEGRATED TERMINAL, because that
|
|
289
|
+
* is where they have a shell; `Cmd+Q` then takes `litmus connect` with it. What is left
|
|
290
|
+
* on screen is a quit editor, no running command, and nothing anywhere naming the way
|
|
291
|
+
* back. On the clock, that reads as the workspace being gone.
|
|
292
|
+
*
|
|
293
|
+
* So the route is stated as an instruction rather than as a promise about a process that
|
|
294
|
+
* may no longer exist, and the terminal it must be run from is named: a candidate who
|
|
295
|
+
* has just been told to quit an application cannot be told to use that application's
|
|
296
|
+
* terminal. The assessment page comes second and is the one that survives closing the
|
|
297
|
+
* tab AND losing the terminal, which is the state Elena was actually in.
|
|
298
|
+
*
|
|
299
|
+
* Both routes reopen the SAME workspace — `litmus connect` re-registers this machine's
|
|
300
|
+
* key and wakes a parked container through the ENG-2005 machinery, and the portal's own
|
|
301
|
+
* card does the same — so the reassurance is a fact about the platform, not a hope.
|
|
302
|
+
*/
|
|
303
|
+
export declare function cursorReentryLines(reentry?: CursorReentry): string[];
|
|
102
304
|
/**
|
|
103
305
|
* ENG-1950 — the one thing a Cursor candidate has to be told, and the only place we can
|
|
104
306
|
* reliably tell them.
|
|
@@ -116,8 +318,15 @@ export declare function resolveIde(flag: string | undefined, log?: (line: string
|
|
|
116
318
|
*
|
|
117
319
|
* So the copy is written for a candidate, not for us: what to do, and what it costs if
|
|
118
320
|
* they don't. No "hooks", no "capture lane". The mechanism is our problem.
|
|
321
|
+
*
|
|
322
|
+
* ENG-2145 adds the second half of that sentence: what to do is now "quit, THEN run
|
|
323
|
+
* this", because an instruction to quit with no stated way back is what sent two people
|
|
324
|
+
* who know the product looking for their workspace. The order is deliberate — the cost
|
|
325
|
+
* of skipping the quit still comes last, so the thing a candidate acts on immediately is
|
|
326
|
+
* the thing they read first, and `cursorReentryLines` sits between them rather than
|
|
327
|
+
* after the whole notice where it would scroll.
|
|
119
328
|
*/
|
|
120
|
-
export declare function announceCursorFullQuit(log?: (line: string) => void): void;
|
|
329
|
+
export declare function announceCursorFullQuit(log?: (line: string) => void, reentry?: CursorReentry): void;
|
|
121
330
|
/**
|
|
122
331
|
* Map a menu answer to an editor. (ENG-1667 item 3; Cursor added by ENG-1950.)
|
|
123
332
|
*
|
|
@@ -155,6 +364,26 @@ export declare function ideMenuLines(): string[];
|
|
|
155
364
|
* EditorChatConfigResult.
|
|
156
365
|
*/
|
|
157
366
|
export declare function chatConfigAction(ide: IdeChoice, state: "configured" | "unconfigured" | "unavailable"): "write" | "remove" | "none";
|
|
367
|
+
/**
|
|
368
|
+
* ENG-2152 — the same question, once the editor CLI's identity is known.
|
|
369
|
+
*
|
|
370
|
+
* A mismatch is refused before anything opens, so a refused connect drives NO editor and
|
|
371
|
+
* may not WRITE: the entry would leave a live `lwt_` bearer token in an editor we then
|
|
372
|
+
* declined to drive, from an attempt that failed.
|
|
373
|
+
*
|
|
374
|
+
* The obvious spelling — keep `chatConfigAction` and pass it "the editor that actually
|
|
375
|
+
* answered" — reads more obviously correct than it is, and is wrong in the direction
|
|
376
|
+
* nobody pictures. Greptile caught it on #2134. Choose VS Code on a machine where `code`
|
|
377
|
+
* is Cursor and it suppresses the write, correctly. Choose CURSOR on a machine where
|
|
378
|
+
* `cursor` is VS Code and it ENABLES a write that the unpatched code suppressed: the very
|
|
379
|
+
* check added to stop the wrong editor being driven would be what plants the credential.
|
|
380
|
+
* So the typed choice stays the input and the mismatch only ever REMOVES an action.
|
|
381
|
+
*
|
|
382
|
+
* `remove` survives a mismatch and must: yesterday's dead token is in that file however
|
|
383
|
+
* today's connect ends, and `writeChatModelConfig` refuses to create a file that was
|
|
384
|
+
* never there, so on a machine that never ran the VS Code path it touches nothing.
|
|
385
|
+
*/
|
|
386
|
+
export declare function chatConfigActionForIdentity(ide: IdeChoice, state: "configured" | "unconfigured" | "unavailable", identity: EditorIdentity): "write" | "remove" | "none";
|
|
158
387
|
/**
|
|
159
388
|
* What to do when the browser IDE was selected. (Greptile on #1713.)
|
|
160
389
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
|