@eclipse-lyra/extension-command-shell 0.0.0

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.
@@ -0,0 +1,355 @@
1
+ import { css, html } from "lit";
2
+ import { commandRegistry, i18n, LyraPart, contributionRegistry, SYSTEM_LANGUAGE_BUNDLES } from "@eclipse-lyra/core";
3
+ import { state, customElement } from "lit/decorators.js";
4
+ import { createRef, ref } from "lit/directives/ref.js";
5
+ const namespace = "commandshell";
6
+ const en = { "PROMPT": "Run commands", "EMPTY": "Type a command and press Enter. Examples: open_editor path=test.txt, touch xy.txt && open_editor xy.txt", "CLEAR": "Clear" };
7
+ const de = { "PROMPT": "Befehle ausführen", "EMPTY": "Geben Sie einen Befehl ein und drücken Sie Enter.", "CLEAR": "Löschen" };
8
+ const commandshellBundle = {
9
+ namespace,
10
+ en,
11
+ de
12
+ };
13
+ const NAMED_PARAM_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]*=.*$/;
14
+ function tokenize(segment) {
15
+ const tokens = [];
16
+ let i = 0;
17
+ const len = segment.length;
18
+ while (i < len) {
19
+ while (i < len && /\s/.test(segment[i])) i++;
20
+ if (i >= len) break;
21
+ if (segment[i] === '"') {
22
+ let end = i + 1;
23
+ while (end < len && segment[end] !== '"') {
24
+ if (segment[end] === "\\") end++;
25
+ end++;
26
+ }
27
+ tokens.push(segment.slice(i + 1, end).replace(/\\"/g, '"'));
28
+ i = end + 1;
29
+ } else {
30
+ let start = i;
31
+ while (i < len && !/\s/.test(segment[i]) && segment[i] !== '"') i++;
32
+ if (i > start) {
33
+ tokens.push(segment.slice(start, i));
34
+ }
35
+ }
36
+ }
37
+ return tokens;
38
+ }
39
+ function splitChain(line) {
40
+ const result = [];
41
+ const regex = /(\s*&&\s*|\s*\|\s*)/g;
42
+ let lastIndex = 0;
43
+ let match;
44
+ while ((match = regex.exec(line)) !== null) {
45
+ const segment = line.slice(lastIndex, match.index).trim();
46
+ if (segment) {
47
+ const op = match[0].includes("|") ? "|" : "&&";
48
+ result.push({ segment, operator: op });
49
+ }
50
+ lastIndex = regex.lastIndex;
51
+ }
52
+ const tail = line.slice(lastIndex).trim();
53
+ if (tail) {
54
+ result.push({ segment: tail, operator: null });
55
+ }
56
+ return result;
57
+ }
58
+ function resolveParams(tokens, command) {
59
+ const params = {};
60
+ const positionals = [];
61
+ const paramNames = command?.parameters?.map((p) => p.name) ?? [];
62
+ for (const token of tokens) {
63
+ if (NAMED_PARAM_REGEX.test(token)) {
64
+ const eqIdx = token.indexOf("=");
65
+ const name = token.slice(0, eqIdx);
66
+ const value = token.slice(eqIdx + 1);
67
+ if (value === "true" || value === "false") {
68
+ params[name] = value === "true";
69
+ } else {
70
+ params[name] = value;
71
+ }
72
+ } else {
73
+ positionals.push(token);
74
+ }
75
+ }
76
+ paramNames.forEach((name, i) => {
77
+ if (positionals[i] !== void 0 && !(name in params)) {
78
+ params[name] = positionals[i];
79
+ }
80
+ });
81
+ return params;
82
+ }
83
+ function parseShellLine(line, commandRegistry2) {
84
+ const segments = splitChain(line);
85
+ return segments.map(({ segment, operator }) => {
86
+ const tokens = tokenize(segment);
87
+ if (tokens.length === 0) {
88
+ return { command: { commandId: "", params: {} }, operator };
89
+ }
90
+ const commandId = tokens[0];
91
+ const command = commandRegistry2.hasCommand(commandId) ? commandRegistry2.getCommand(commandId) : void 0;
92
+ const paramTokens = tokens.slice(1);
93
+ const params = resolveParams(paramTokens, command);
94
+ return { command: { commandId, params }, operator };
95
+ });
96
+ }
97
+ function mapOutputToParams(output, producerCommand) {
98
+ if (output == null) return {};
99
+ if (typeof output === "object" && !Array.isArray(output)) {
100
+ return output;
101
+ }
102
+ const firstOutput = producerCommand?.output?.[0];
103
+ if (firstOutput) {
104
+ return { [firstOutput.name]: output };
105
+ }
106
+ return {};
107
+ }
108
+ async function runShellLine(line, registry = commandRegistry) {
109
+ const segments = parseShellLine(line, registry);
110
+ const results = [];
111
+ let pipedOutput = null;
112
+ let lastProducerCommand;
113
+ for (let i = 0; i < segments.length; i++) {
114
+ const { command, operator } = segments[i];
115
+ if (!command.commandId) continue;
116
+ const cmd = registry.hasCommand(command.commandId) ? registry.getCommand(command.commandId) : void 0;
117
+ if (!cmd) {
118
+ return {
119
+ success: false,
120
+ results,
121
+ error: `Command not found: ${command.commandId}`
122
+ };
123
+ }
124
+ const mergedParams = {
125
+ ...mapOutputToParams(pipedOutput ?? void 0, lastProducerCommand),
126
+ ...command.params
127
+ };
128
+ const context = registry.createExecutionContext(mergedParams);
129
+ try {
130
+ const result = registry.execute(command.commandId, context);
131
+ const resolved = result instanceof Promise ? await result : result;
132
+ results.push(resolved);
133
+ if (operator === "|") {
134
+ pipedOutput = mapOutputToParams(resolved, cmd);
135
+ lastProducerCommand = cmd;
136
+ } else {
137
+ pipedOutput = null;
138
+ lastProducerCommand = void 0;
139
+ }
140
+ } catch (err) {
141
+ const msg = err instanceof Error ? err.message : String(err);
142
+ return {
143
+ success: false,
144
+ results,
145
+ error: msg
146
+ };
147
+ }
148
+ }
149
+ return { success: true, results };
150
+ }
151
+ var __defProp = Object.defineProperty;
152
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
153
+ var __decorateClass = (decorators, target, key, kind) => {
154
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
155
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
156
+ if (decorator = decorators[i])
157
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
158
+ if (kind && result) __defProp(target, key, result);
159
+ return result;
160
+ };
161
+ const t = i18n("commandshell");
162
+ let LyraCommandShell = class extends LyraPart {
163
+ constructor() {
164
+ super(...arguments);
165
+ this.inputValue = "";
166
+ this.history = [];
167
+ this.running = false;
168
+ this.inputRef = createRef();
169
+ this.outputRef = createRef();
170
+ }
171
+ async handleRun() {
172
+ const line = this.inputValue.trim();
173
+ if (!line || this.running) return;
174
+ this.inputValue = "";
175
+ this.running = true;
176
+ this.requestUpdate();
177
+ const result = await runShellLine(line);
178
+ this.history = [
179
+ ...this.history,
180
+ { command: line, result, timestamp: /* @__PURE__ */ new Date() }
181
+ ];
182
+ this.running = false;
183
+ this.requestUpdate();
184
+ this.updateComplete.then(() => {
185
+ const container = this.outputRef.value;
186
+ if (container) {
187
+ container.scrollTop = container.scrollHeight;
188
+ }
189
+ });
190
+ }
191
+ handleKeyDown(e) {
192
+ if (e.key === "Enter") {
193
+ e.preventDefault();
194
+ this.handleRun();
195
+ }
196
+ }
197
+ clearOutput() {
198
+ this.history = [];
199
+ this.requestUpdate();
200
+ }
201
+ formatResult(result) {
202
+ if (result.error) return result.error;
203
+ if (result.results.length === 0) return "";
204
+ const last = result.results[result.results.length - 1];
205
+ if (last == null) return "";
206
+ if (typeof last === "object") return JSON.stringify(last, null, 2);
207
+ return String(last);
208
+ }
209
+ render() {
210
+ return html`
211
+ <div class="shell-container">
212
+ <div class="output-area" ${ref(this.outputRef)}>
213
+ ${this.history.length === 0 ? html`<div class="empty-state">${t("EMPTY")}</div>` : this.history.map(
214
+ (entry) => html`
215
+ <div class="history-entry">
216
+ <div class="command-line">
217
+ <span class="prompt">$</span>
218
+ <span class="command">${entry.command}</span>
219
+ </div>
220
+ <div
221
+ class="result ${entry.result.success ? "" : "error"}"
222
+ >
223
+ ${entry.result.success ? this.formatResult(entry.result) || "OK" : entry.result.error}
224
+ </div>
225
+ </div>
226
+ `
227
+ )}
228
+ </div>
229
+ <div class="input-row">
230
+ <span class="prompt">$</span>
231
+ <wa-input
232
+ ${ref(this.inputRef)}
233
+ placeholder="${t("PROMPT")}"
234
+ .value=${this.inputValue}
235
+ @input=${(e) => {
236
+ this.inputValue = e.target.value;
237
+ }}
238
+ @keydown=${this.handleKeyDown}
239
+ autocomplete="off"
240
+ size="small"
241
+ class="shell-input"
242
+ ></wa-input>
243
+ </div>
244
+ </div>
245
+ `;
246
+ }
247
+ renderToolbar() {
248
+ return html`
249
+ <lyra-command icon="trash" title="${t("CLEAR")}" .action=${() => this.clearOutput()}>
250
+ ${t("CLEAR")}
251
+ </lyra-command>
252
+ `;
253
+ }
254
+ };
255
+ LyraCommandShell.styles = css`
256
+ :host {
257
+ display: flex;
258
+ flex-direction: column;
259
+ height: 100%;
260
+ width: 100%;
261
+ }
262
+
263
+ .shell-container {
264
+ display: flex;
265
+ flex-direction: column;
266
+ height: 100%;
267
+ width: 100%;
268
+ }
269
+
270
+ .output-area {
271
+ flex: 1;
272
+ overflow-y: auto;
273
+ padding: 0.5rem;
274
+ font-family: var(--wa-font-mono);
275
+ font-size: 0.875rem;
276
+ line-height: 1.5;
277
+ }
278
+
279
+ .empty-state {
280
+ color: var(--wa-color-neutral-text-subtle);
281
+ font-style: italic;
282
+ padding: 0.5rem;
283
+ }
284
+
285
+ .history-entry {
286
+ margin-bottom: 0.75rem;
287
+ }
288
+
289
+ .command-line {
290
+ display: flex;
291
+ align-items: baseline;
292
+ gap: 0.5rem;
293
+ margin-bottom: 0.25rem;
294
+ }
295
+
296
+ .prompt {
297
+ color: var(--wa-color-primary-text);
298
+ font-weight: 600;
299
+ }
300
+
301
+ .command {
302
+ color: var(--wa-color-neutral-text);
303
+ word-break: breaall;
304
+ }
305
+
306
+ .result {
307
+ padding-left: 1.5rem;
308
+ color: var(--wa-color-neutral-text-subtle);
309
+ font-size: 0.8rem;
310
+ white-space: pre-wrap;
311
+ word-break: breaword;
312
+ }
313
+
314
+ .result.error {
315
+ color: var(--wa-color-danger-text);
316
+ }
317
+
318
+ .input-row {
319
+ display: flex;
320
+ align-items: center;
321
+ gap: 0.5rem;
322
+ padding: 0.5rem;
323
+ border-top: 1px solid var(--wa-color-neutral-border);
324
+ background: var(--wa-color-neutral-background);
325
+ }
326
+
327
+ .input-row .prompt {
328
+ flex-shrink: 0;
329
+ }
330
+
331
+ .shell-input {
332
+ flex: 1;
333
+ min-width: 0;
334
+ }
335
+ `;
336
+ __decorateClass([
337
+ state()
338
+ ], LyraCommandShell.prototype, "inputValue", 2);
339
+ __decorateClass([
340
+ state()
341
+ ], LyraCommandShell.prototype, "history", 2);
342
+ __decorateClass([
343
+ state()
344
+ ], LyraCommandShell.prototype, "running", 2);
345
+ LyraCommandShell = __decorateClass([
346
+ customElement("lyra-command-shell")
347
+ ], LyraCommandShell);
348
+ contributionRegistry.registerContribution(SYSTEM_LANGUAGE_BUNDLES, commandshellBundle);
349
+ contributionRegistry.registerContribution("system.fastviews-bottomend", {
350
+ name: "command-shell",
351
+ label: "Command Shell",
352
+ icon: "terminal",
353
+ component: (id) => html`<lyra-command-shell id="${id}"></lyra-command-shell>`
354
+ });
355
+ //# sourceMappingURL=command-shell-extension-2hHWfJJ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-shell-extension-2hHWfJJ3.js","sources":["../src/shell-parser.ts","../src/shell-runner.ts","../src/command-shell.ts","../src/command-shell-extension.ts"],"sourcesContent":["import type { CommandRegistry, Command } from \"@eclipse-lyra/core\";\n\nexport interface ParsedCommand {\n commandId: string;\n params: Record<string, string | boolean>;\n}\n\nexport interface ParsedSegment {\n command: ParsedCommand;\n operator: \"&&\" | \"|\" | null;\n}\n\nconst NAMED_PARAM_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]*=.*$/;\n\nfunction tokenize(segment: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n const len = segment.length;\n\n while (i < len) {\n while (i < len && /\\s/.test(segment[i])) i++;\n if (i >= len) break;\n\n if (segment[i] === '\"') {\n let end = i + 1;\n while (end < len && segment[end] !== '\"') {\n if (segment[end] === \"\\\\\") end++;\n end++;\n }\n tokens.push(segment.slice(i + 1, end).replace(/\\\\\"/g, '\"'));\n i = end + 1;\n } else {\n let start = i;\n while (i < len && !/\\s/.test(segment[i]) && segment[i] !== '\"') i++;\n if (i > start) {\n tokens.push(segment.slice(start, i));\n }\n }\n }\n return tokens;\n}\n\nfunction splitChain(line: string): { segment: string; operator: \"&&\" | \"|\" | null }[] {\n const result: { segment: string; operator: \"&&\" | \"|\" | null }[] = [];\n const regex = /(\\s*&&\\s*|\\s*\\|\\s*)/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(line)) !== null) {\n const segment = line.slice(lastIndex, match.index).trim();\n if (segment) {\n const op = match[0].includes(\"|\") ? \"|\" as const : \"&&\" as const;\n result.push({ segment, operator: op });\n }\n lastIndex = regex.lastIndex;\n }\n const tail = line.slice(lastIndex).trim();\n if (tail) {\n result.push({ segment: tail, operator: null });\n }\n return result;\n}\n\nfunction resolveParams(\n tokens: string[],\n command: Command | undefined\n): Record<string, string | boolean> {\n const params: Record<string, string | boolean> = {};\n const positionals: string[] = [];\n const paramNames = command?.parameters?.map((p) => p.name) ?? [];\n\n for (const token of tokens) {\n if (NAMED_PARAM_REGEX.test(token)) {\n const eqIdx = token.indexOf(\"=\");\n const name = token.slice(0, eqIdx);\n const value = token.slice(eqIdx + 1);\n if (value === \"true\" || value === \"false\") {\n params[name] = value === \"true\";\n } else {\n params[name] = value;\n }\n } else {\n positionals.push(token);\n }\n }\n\n paramNames.forEach((name, i) => {\n if (positionals[i] !== undefined && !(name in params)) {\n params[name] = positionals[i];\n }\n });\n\n return params;\n}\n\nexport function parseShellLine(\n line: string,\n commandRegistry: CommandRegistry\n): ParsedSegment[] {\n const segments = splitChain(line);\n return segments.map(({ segment, operator }) => {\n const tokens = tokenize(segment);\n if (tokens.length === 0) {\n return { command: { commandId: \"\", params: {} }, operator };\n }\n const commandId = tokens[0];\n const command = commandRegistry.hasCommand(commandId)\n ? commandRegistry.getCommand(commandId)\n : undefined;\n const paramTokens = tokens.slice(1);\n const params = resolveParams(paramTokens, command);\n return { command: { commandId, params }, operator };\n });\n}\n","import { commandRegistry, type CommandRegistry, type Command } from \"@eclipse-lyra/core\";\nimport { parseShellLine } from \"./shell-parser\";\n\nexport interface RunResult {\n success: boolean;\n results: unknown[];\n error?: string;\n}\n\nfunction mapOutputToParams(\n output: unknown,\n producerCommand: Command | undefined\n): Record<string, unknown> {\n if (output == null) return {};\n if (typeof output === \"object\" && !Array.isArray(output)) {\n return output as Record<string, unknown>;\n }\n const firstOutput = producerCommand?.output?.[0];\n if (firstOutput) {\n return { [firstOutput.name]: output };\n }\n return {};\n}\n\nexport async function runShellLine(\n line: string,\n registry: CommandRegistry = commandRegistry\n): Promise<RunResult> {\n const segments = parseShellLine(line, registry);\n const results: unknown[] = [];\n let pipedOutput: Record<string, unknown> | null = null;\n let lastProducerCommand: Command | undefined;\n\n for (let i = 0; i < segments.length; i++) {\n const { command, operator } = segments[i];\n if (!command.commandId) continue;\n\n const cmd = registry.hasCommand(command.commandId)\n ? registry.getCommand(command.commandId)\n : undefined;\n if (!cmd) {\n return {\n success: false,\n results,\n error: `Command not found: ${command.commandId}`,\n };\n }\n\n const mergedParams = {\n ...mapOutputToParams(pipedOutput ?? undefined, lastProducerCommand),\n ...command.params,\n };\n\n const context = registry.createExecutionContext(mergedParams);\n\n try {\n const result = registry.execute(command.commandId, context);\n const resolved = result instanceof Promise ? await result : result;\n results.push(resolved);\n\n if (operator === \"|\") {\n pipedOutput = mapOutputToParams(resolved, cmd) as Record<string, unknown>;\n lastProducerCommand = cmd;\n } else {\n pipedOutput = null;\n lastProducerCommand = undefined;\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n success: false,\n results,\n error: msg,\n };\n }\n }\n\n return { success: true, results };\n}\n","import { css, html } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { createRef, ref, Ref } from \"lit/directives/ref.js\";\nimport { LyraPart } from \"@eclipse-lyra/core\";\nimport { i18n } from \"@eclipse-lyra/core\";\nimport { runShellLine, type RunResult } from \"./shell-runner\";\n\nconst t = i18n(\"commandshell\");\n\nexport interface ShellHistoryEntry {\n command: string;\n result: RunResult;\n timestamp: Date;\n}\n\n@customElement(\"lyra-command-shell\")\nexport class LyraCommandShell extends LyraPart {\n @state()\n private inputValue = \"\";\n\n @state()\n private history: ShellHistoryEntry[] = [];\n\n @state()\n private running = false;\n\n private inputRef: Ref<HTMLElement> = createRef();\n private outputRef: Ref<HTMLDivElement> = createRef();\n\n private async handleRun() {\n const line = this.inputValue.trim();\n if (!line || this.running) return;\n\n this.inputValue = \"\";\n this.running = true;\n this.requestUpdate();\n\n const result = await runShellLine(line);\n this.history = [\n ...this.history,\n { command: line, result, timestamp: new Date() },\n ];\n this.running = false;\n this.requestUpdate();\n\n this.updateComplete.then(() => {\n const container = this.outputRef.value;\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n });\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Enter\") {\n e.preventDefault();\n this.handleRun();\n }\n }\n\n private clearOutput() {\n this.history = [];\n this.requestUpdate();\n }\n\n private formatResult(result: RunResult): string {\n if (result.error) return result.error;\n if (result.results.length === 0) return \"\";\n const last = result.results[result.results.length - 1];\n if (last == null) return \"\";\n if (typeof last === \"object\") return JSON.stringify(last, null, 2);\n return String(last);\n }\n\n render() {\n return html`\n <div class=\"shell-container\">\n <div class=\"output-area\" ${ref(this.outputRef)}>\n ${this.history.length === 0\n ? html`<div class=\"empty-state\">${t(\"EMPTY\")}</div>`\n : this.history.map(\n (entry) => html`\n <div class=\"history-entry\">\n <div class=\"command-line\">\n <span class=\"prompt\">$</span>\n <span class=\"command\">${entry.command}</span>\n </div>\n <div\n class=\"result ${entry.result.success ? \"\" : \"error\"}\"\n >\n ${entry.result.success\n ? this.formatResult(entry.result) || \"OK\"\n : entry.result.error}\n </div>\n </div>\n `\n )}\n </div>\n <div class=\"input-row\">\n <span class=\"prompt\">$</span>\n <wa-input\n ${ref(this.inputRef)}\n placeholder=\"${t(\"PROMPT\")}\"\n .value=${this.inputValue}\n @input=${(e: Event) => {\n this.inputValue = (e.target as HTMLInputElement & { value: string }).value;\n }}\n @keydown=${this.handleKeyDown}\n autocomplete=\"off\"\n size=\"small\"\n class=\"shell-input\"\n ></wa-input>\n </div>\n </div>\n `;\n }\n\n protected renderToolbar() {\n return html`\n <lyra-command icon=\"trash\" title=\"${t(\"CLEAR\")}\" .action=${() => this.clearOutput()}>\n ${t(\"CLEAR\")}\n </lyra-command>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n }\n\n .shell-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n }\n\n .output-area {\n flex: 1;\n overflow-y: auto;\n padding: 0.5rem;\n font-family: var(--wa-font-mono);\n font-size: 0.875rem;\n line-height: 1.5;\n }\n\n .empty-state {\n color: var(--wa-color-neutral-text-subtle);\n font-style: italic;\n padding: 0.5rem;\n }\n\n .history-entry {\n margin-bottom: 0.75rem;\n }\n\n .command-line {\n display: flex;\n align-items: baseline;\n gap: 0.5rem;\n margin-bottom: 0.25rem;\n }\n\n .prompt {\n color: var(--wa-color-primary-text);\n font-weight: 600;\n }\n\n .command {\n color: var(--wa-color-neutral-text);\n word-break: breaall;\n }\n\n .result {\n padding-left: 1.5rem;\n color: var(--wa-color-neutral-text-subtle);\n font-size: 0.8rem;\n white-space: pre-wrap;\n word-break: breaword;\n }\n\n .result.error {\n color: var(--wa-color-danger-text);\n }\n\n .input-row {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem;\n border-top: 1px solid var(--wa-color-neutral-border);\n background: var(--wa-color-neutral-background);\n }\n\n .input-row .prompt {\n flex-shrink: 0;\n }\n\n .shell-input {\n flex: 1;\n min-width: 0;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"lyra-command-shell\": LyraCommandShell;\n }\n}\n","import { html } from \"lit\";\nimport { contributionRegistry, SYSTEM_LANGUAGE_BUNDLES } from \"@eclipse-lyra/core\";\nimport { i18nLazy } from \"@eclipse-lyra/core\";\nimport commandshellBundle from \"./commandshell.json\";\nimport \"./command-shell\";\n\ncontributionRegistry.registerContribution(SYSTEM_LANGUAGE_BUNDLES, commandshellBundle as any);\n\ncontributionRegistry.registerContribution(\"system.fastviews-bottomend\", {\n name: \"command-shell\",\n label: \"Command Shell\",\n icon: \"terminal\",\n component: (id: string) => html`<lyra-command-shell id=\"${id}\"></lyra-command-shell>`,\n});\n"],"names":["commandRegistry"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=command-shell-extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-shell-extension.d.ts","sourceRoot":"","sources":["../src/command-shell-extension.ts"],"names":[],"mappings":"AAIA,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { LyraPart } from '@eclipse-lyra/core';
2
+ import { RunResult } from './shell-runner';
3
+ export interface ShellHistoryEntry {
4
+ command: string;
5
+ result: RunResult;
6
+ timestamp: Date;
7
+ }
8
+ export declare class LyraCommandShell extends LyraPart {
9
+ private inputValue;
10
+ private history;
11
+ private running;
12
+ private inputRef;
13
+ private outputRef;
14
+ private handleRun;
15
+ private handleKeyDown;
16
+ private clearOutput;
17
+ private formatResult;
18
+ render(): import('lit-html').TemplateResult<1>;
19
+ protected renderToolbar(): import('lit-html').TemplateResult<1>;
20
+ static styles: import('lit').CSSResult;
21
+ }
22
+ declare global {
23
+ interface HTMLElementTagNameMap {
24
+ "lyra-command-shell": LyraCommandShell;
25
+ }
26
+ }
27
+ //# sourceMappingURL=command-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-shell.d.ts","sourceRoot":"","sources":["../src/command-shell.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI9D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBACa,gBAAiB,SAAQ,QAAQ;IAE5C,OAAO,CAAC,UAAU,CAAM;IAGxB,OAAO,CAAC,OAAO,CAA2B;IAG1C,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,SAAS,CAAoC;YAEvC,SAAS;IAwBvB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IASpB,MAAM;IA2CN,SAAS,CAAC,aAAa;IAQvB,MAAM,CAAC,MAAM,0BAgFX;CACH;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
@@ -0,0 +1,16 @@
1
+ declare const _default: {
2
+ "namespace": "commandshell",
3
+ "en": {
4
+ "PROMPT": "Run commands",
5
+ "EMPTY": "Type a command and press Enter. Examples: open_editor path=test.txt, touch xy.txt && open_editor xy.txt",
6
+ "CLEAR": "Clear"
7
+ },
8
+ "de": {
9
+ "PROMPT": "Befehle ausführen",
10
+ "EMPTY": "Geben Sie einen Befehl ein und drücken Sie Enter.",
11
+ "CLEAR": "Löschen"
12
+ }
13
+ }
14
+ ;
15
+
16
+ export default _default;
@@ -0,0 +1,20 @@
1
+ declare const _default: {
2
+ "namespace": "extensions",
3
+ "en": {
4
+ "EXT_COMMANDSHELL_NAME": "Command Shell",
5
+ "EXT_COMMANDSHELL_DESC": "Shell-like UI for running framework commands",
6
+ "COMMANDSHELL_PROMPT": "Run commands",
7
+ "COMMANDSHELL_EMPTY": "Type a command and press Enter. Examples: open_editor path=test.txt, touch xy.txt && open_editor xy.txt",
8
+ "COMMANDSHELL_CLEAR": "Clear"
9
+ },
10
+ "de": {
11
+ "EXT_COMMANDSHELL_NAME": "Befehlsshell",
12
+ "EXT_COMMANDSHELL_DESC": "Shell-ähnliche Oberfläche zum Ausführen von Framework-Befehlen",
13
+ "COMMANDSHELL_PROMPT": "Befehle ausführen",
14
+ "COMMANDSHELL_EMPTY": "Geben Sie einen Befehl ein und drücken Sie Enter.",
15
+ "COMMANDSHELL_CLEAR": "Löschen"
16
+ }
17
+ }
18
+ ;
19
+
20
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ import { contributionRegistry, SYSTEM_LANGUAGE_BUNDLES, i18nLazy, extensionRegistry } from "@eclipse-lyra/core";
2
+ import pkg from "../package.json";
3
+ const namespace = "extensions";
4
+ const en = { "EXT_COMMANDSHELL_NAME": "Command Shell", "EXT_COMMANDSHELL_DESC": "Shell-like UI for running framework commands", "COMMANDSHELL_PROMPT": "Run commands", "COMMANDSHELL_EMPTY": "Type a command and press Enter. Examples: open_editor path=test.txt, touch xy.txt && open_editor xy.txt", "COMMANDSHELL_CLEAR": "Clear" };
5
+ const de = { "EXT_COMMANDSHELL_NAME": "Befehlsshell", "EXT_COMMANDSHELL_DESC": "Shell-ähnliche Oberfläche zum Ausführen von Framework-Befehlen", "COMMANDSHELL_PROMPT": "Befehle ausführen", "COMMANDSHELL_EMPTY": "Geben Sie einen Befehl ein und drücken Sie Enter.", "COMMANDSHELL_CLEAR": "Löschen" };
6
+ const bundle = {
7
+ namespace,
8
+ en,
9
+ de
10
+ };
11
+ contributionRegistry.registerContribution(SYSTEM_LANGUAGE_BUNDLES, bundle);
12
+ const t = i18nLazy("extensions");
13
+ extensionRegistry.registerExtension({
14
+ id: pkg.name,
15
+ name: t("EXT_COMMANDSHELL_NAME"),
16
+ description: t("EXT_COMMANDSHELL_DESC"),
17
+ loader: () => import("./command-shell-extension-2hHWfJJ3.js"),
18
+ icon: "terminal"
19
+ });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { extensionRegistry, i18nLazy, contributionRegistry, SYSTEM_LANGUAGE_BUNDLES } from \"@eclipse-lyra/core\";\nimport bundle from \"./i18n.json\";\nimport pkg from \"../package.json\";\n\ncontributionRegistry.registerContribution(SYSTEM_LANGUAGE_BUNDLES, bundle as any);\n\nconst t = i18nLazy(\"extensions\");\n\nextensionRegistry.registerExtension({\n id: pkg.name,\n name: t(\"EXT_COMMANDSHELL_NAME\"),\n description: t(\"EXT_COMMANDSHELL_DESC\"),\n loader: () => import(\"./command-shell-extension\"),\n icon: \"terminal\",\n});\n"],"names":[],"mappings":";;;;;;;;;;AAIA,qBAAqB,qBAAqB,yBAAyB,MAAa;AAEhF,MAAM,IAAI,SAAS,YAAY;AAE/B,kBAAkB,kBAAkB;AAAA,EAClC,IAAI,IAAI;AAAA,EACR,MAAM,EAAE,uBAAuB;AAAA,EAC/B,aAAa,EAAE,uBAAuB;AAAA,EACtC,QAAQ,MAAM,OAAO,uCAA2B;AAAA,EAChD,MAAM;AACR,CAAC;"}
@@ -0,0 +1,11 @@
1
+ import { CommandRegistry } from '@eclipse-lyra/core';
2
+ export interface ParsedCommand {
3
+ commandId: string;
4
+ params: Record<string, string | boolean>;
5
+ }
6
+ export interface ParsedSegment {
7
+ command: ParsedCommand;
8
+ operator: "&&" | "|" | null;
9
+ }
10
+ export declare function parseShellLine(line: string, commandRegistry: CommandRegistry): ParsedSegment[];
11
+ //# sourceMappingURL=shell-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-parser.d.ts","sourceRoot":"","sources":["../src/shell-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;CAC7B;AAqFD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,eAAe,GAC/B,aAAa,EAAE,CAejB"}
@@ -0,0 +1,8 @@
1
+ import { CommandRegistry } from '@eclipse-lyra/core';
2
+ export interface RunResult {
3
+ success: boolean;
4
+ results: unknown[];
5
+ error?: string;
6
+ }
7
+ export declare function runShellLine(line: string, registry?: CommandRegistry): Promise<RunResult>;
8
+ //# sourceMappingURL=shell-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-runner.d.ts","sourceRoot":"","sources":["../src/shell-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,eAAe,EAAgB,MAAM,oBAAoB,CAAC;AAGzF,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,eAAiC,GAC1C,OAAO,CAAC,SAAS,CAAC,CAmDpB"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@eclipse-lyra/extension-command-shell",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "vite build"
19
+ },
20
+ "dependencies": {
21
+ "@eclipse-lyra/core": "*"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "^5.9.3",
25
+ "vite": "^7.1.12",
26
+ "vite-plugin-dts": "^4.5.4"
27
+ }
28
+ }