@camunda8/cli 2.7.0 → 2.8.0-alpha.10
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/PLUGIN-HELP.md +145 -8
- package/README.md +1171 -73
- package/dist/command-dispatch.d.ts.map +1 -1
- package/dist/command-dispatch.js +3 -2
- package/dist/command-dispatch.js.map +1 -1
- package/dist/command-framework.d.ts.map +1 -1
- package/dist/command-framework.js +22 -1
- package/dist/command-framework.js.map +1 -1
- package/dist/command-registry.d.ts +49 -346
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +46 -54
- package/dist/command-registry.js.map +1 -1
- package/dist/commands/completion.d.ts +16 -33
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +31 -689
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/mcp-proxy.d.ts +0 -17
- package/dist/commands/mcp-proxy.d.ts.map +1 -1
- package/dist/commands/mcp-proxy.js +3 -104
- package/dist/commands/mcp-proxy.js.map +1 -1
- package/dist/commands/open.d.ts +3 -44
- package/dist/commands/open.d.ts.map +1 -1
- package/dist/commands/open.js +5 -81
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/plugins.d.ts +2 -8
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +2 -28
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/run.d.ts +8 -8
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +60 -60
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/search.d.ts +2 -39
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +2 -83
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts +1 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +5 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/watch.d.ts +2 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +17 -8
- package/dist/commands/watch.js.map +1 -1
- package/dist/completion.d.ts +36 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +816 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -1
- package/dist/config.js.map +1 -1
- package/dist/{commands/deployments.d.ts → deployments.d.ts} +1 -1
- package/dist/deployments.d.ts.map +1 -0
- package/dist/{commands/deployments.js → deployments.js} +8 -8
- package/dist/deployments.js.map +1 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/{commands/help.js → help.js} +107 -43
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +285 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp-proxy-helpers.d.ts +23 -0
- package/dist/mcp-proxy-helpers.d.ts.map +1 -0
- package/dist/mcp-proxy-helpers.js +109 -0
- package/dist/mcp-proxy-helpers.js.map +1 -0
- package/dist/open-helpers.d.ts +52 -0
- package/dist/open-helpers.d.ts.map +1 -0
- package/dist/open-helpers.js +88 -0
- package/dist/open-helpers.js.map +1 -0
- package/dist/plugin-loader.d.ts +61 -2
- package/dist/plugin-loader.d.ts.map +1 -1
- package/dist/plugin-loader.js +229 -22
- package/dist/plugin-loader.js.map +1 -1
- package/dist/plugin-version.d.ts +15 -0
- package/dist/plugin-version.d.ts.map +1 -0
- package/dist/plugin-version.js +37 -0
- package/dist/plugin-version.js.map +1 -0
- package/dist/search-helpers.d.ts +46 -0
- package/dist/search-helpers.d.ts.map +1 -0
- package/dist/search-helpers.js +90 -0
- package/dist/search-helpers.js.map +1 -0
- package/dist/watch-constants.d.ts +7 -0
- package/dist/watch-constants.d.ts.map +1 -0
- package/dist/watch-constants.js +7 -0
- package/dist/watch-constants.js.map +1 -0
- package/package.json +11 -7
- package/dist/commands/deployments.d.ts.map +0 -1
- package/dist/commands/deployments.js.map +0 -1
- package/dist/commands/help.d.ts.map +0 -1
- package/dist/commands/help.js.map +0 -1
- /package/dist/{commands/help.d.ts → help.d.ts} +0 -0
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAiFH;;GAEG;AACH,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAwDzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwDzD"}
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,13 @@ import { fileURLToPath } from "node:url";
|
|
|
8
8
|
import { parseArgs } from "node:util";
|
|
9
9
|
import { createClient } from "./client.js";
|
|
10
10
|
import { COMMAND_DISPATCH } from "./command-dispatch.js";
|
|
11
|
-
import { COMMAND_REGISTRY, deriveParseArgsOptions, getCommandDef, resolveAlias, } from "./command-registry.js";
|
|
11
|
+
import { COMMAND_REGISTRY, deriveParseArgsOptions, GLOBAL_FLAGS, getCommandDef, resolveAlias, } from "./command-registry.js";
|
|
12
12
|
import { detectUnknownFlags, validateFlags } from "./command-validation.js";
|
|
13
|
-
import { refreshCompletionsIfStale } from "./
|
|
14
|
-
import { showCommandHelp, showHelp, showVerbResources, showVersion, } from "./commands/help.js";
|
|
13
|
+
import { refreshCompletionsIfStale } from "./completion.js";
|
|
15
14
|
import { loadSessionState, resolveTenantId } from "./config.js";
|
|
15
|
+
import { showCommandHelp, showHelp, showVerbResources, showVersion, } from "./help.js";
|
|
16
16
|
import { getLogger } from "./logger.js";
|
|
17
|
-
import { executePluginCommand, loadInstalledPlugins } from "./plugin-loader.js";
|
|
17
|
+
import { executePluginCommand, getPluginCommands, isPassthroughPluginCommand, loadInstalledPlugins, } from "./plugin-loader.js";
|
|
18
18
|
import { c8ctl } from "./runtime.js";
|
|
19
19
|
import { printUpdateNotification, startUpdateCheck } from "./update-check.js";
|
|
20
20
|
/**
|
|
@@ -67,6 +67,181 @@ export function resolveProcessDefinitionId(values) {
|
|
|
67
67
|
str(values.processDefinitionId) ||
|
|
68
68
|
str(values.bpmnProcessId));
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Return the raw argv tokens that follow the verb position, where the
|
|
72
|
+
* verb position is found by walking from the start and skipping leading
|
|
73
|
+
* GLOBAL_FLAGS only (consuming the value of string-typed global flags).
|
|
74
|
+
* The first non-flag token — or any unknown `--*`/`-*` token — is
|
|
75
|
+
* treated as the verb candidate.
|
|
76
|
+
*
|
|
77
|
+
* This avoids `argv.indexOf(verb)`, which is unsafe because the verb
|
|
78
|
+
* string may also appear as the value of a global string flag (e.g.
|
|
79
|
+
* `--profile <verb>`). Returns `[]` if no verb token is found at or
|
|
80
|
+
* after the scan position.
|
|
81
|
+
*/
|
|
82
|
+
export function sliceArgvAfterVerb(argv, verb) {
|
|
83
|
+
const stringGlobalNames = new Set();
|
|
84
|
+
const stringGlobalShorts = new Set();
|
|
85
|
+
const booleanGlobalNames = new Set();
|
|
86
|
+
const booleanGlobalShorts = new Set();
|
|
87
|
+
for (const [name, def] of Object.entries(GLOBAL_FLAGS)) {
|
|
88
|
+
const short = "short" in def ? def.short : undefined;
|
|
89
|
+
if (def.type === "string") {
|
|
90
|
+
stringGlobalNames.add(name);
|
|
91
|
+
if (short)
|
|
92
|
+
stringGlobalShorts.add(short);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
booleanGlobalNames.add(name);
|
|
96
|
+
if (short)
|
|
97
|
+
booleanGlobalShorts.add(short);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
let i = 0;
|
|
101
|
+
while (i < argv.length) {
|
|
102
|
+
const tok = argv[i];
|
|
103
|
+
if (tok === "--") {
|
|
104
|
+
// GNU `--` convention: end of options. The next token is the
|
|
105
|
+
// verb candidate. Skip the separator and continue scanning so
|
|
106
|
+
// `c8ctl -- <verb> <args...>` dispatches correctly with the
|
|
107
|
+
// full post-verb argv (rather than bailing and forwarding []).
|
|
108
|
+
i++;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (tok.startsWith("--")) {
|
|
112
|
+
const eq = tok.indexOf("=");
|
|
113
|
+
const name = eq >= 0 ? tok.slice(2, eq) : tok.slice(2);
|
|
114
|
+
if (booleanGlobalNames.has(name)) {
|
|
115
|
+
i++;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (stringGlobalNames.has(name)) {
|
|
119
|
+
i += eq < 0 ? 2 : 1;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
// Unknown long flag — do not silently consume a value. Fall through
|
|
123
|
+
// to the verb match below (and bail if it doesn't match).
|
|
124
|
+
}
|
|
125
|
+
else if (tok.startsWith("-") && tok.length === 2) {
|
|
126
|
+
const short = tok.slice(1);
|
|
127
|
+
if (booleanGlobalShorts.has(short)) {
|
|
128
|
+
i++;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (stringGlobalShorts.has(short)) {
|
|
132
|
+
i += 2;
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// First token that is not a leading GLOBAL_FLAG must be the verb.
|
|
137
|
+
if (tok === verb)
|
|
138
|
+
return argv.slice(i + 1);
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Strip GLOBAL_FLAGS (and the value of any string-typed global flag) from
|
|
145
|
+
* a raw argv slice before forwarding to a passthrough plugin handler
|
|
146
|
+
* (#366). GLOBAL_FLAGS already affect the c8ctl runtime via their
|
|
147
|
+
* regular handling in `main()`; the plugin must not see them again.
|
|
148
|
+
*
|
|
149
|
+
* Conservative behaviour: an isolated `--` terminator is preserved and
|
|
150
|
+
* everything after it is forwarded verbatim, matching POSIX convention.
|
|
151
|
+
*/
|
|
152
|
+
export function stripGlobalFlags(argv) {
|
|
153
|
+
const booleanFlags = new Set();
|
|
154
|
+
const stringFlags = new Set();
|
|
155
|
+
const booleanShorts = new Set();
|
|
156
|
+
const stringShorts = new Set();
|
|
157
|
+
for (const [name, def] of Object.entries(GLOBAL_FLAGS)) {
|
|
158
|
+
const short = "short" in def ? def.short : undefined;
|
|
159
|
+
if (def.type === "boolean") {
|
|
160
|
+
booleanFlags.add(name);
|
|
161
|
+
if (short)
|
|
162
|
+
booleanShorts.add(short);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
stringFlags.add(name);
|
|
166
|
+
if (short)
|
|
167
|
+
stringShorts.add(short);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const out = [];
|
|
171
|
+
let i = 0;
|
|
172
|
+
let sawTerminator = false;
|
|
173
|
+
while (i < argv.length) {
|
|
174
|
+
const tok = argv[i];
|
|
175
|
+
if (sawTerminator) {
|
|
176
|
+
out.push(tok);
|
|
177
|
+
i++;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (tok === "--") {
|
|
181
|
+
sawTerminator = true;
|
|
182
|
+
out.push(tok);
|
|
183
|
+
i++;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (tok.startsWith("--")) {
|
|
187
|
+
const eq = tok.indexOf("=");
|
|
188
|
+
const name = eq >= 0 ? tok.slice(2, eq) : tok.slice(2);
|
|
189
|
+
if (booleanFlags.has(name) || stringFlags.has(name)) {
|
|
190
|
+
if (eq < 0 && stringFlags.has(name))
|
|
191
|
+
i++; // consume value
|
|
192
|
+
i++;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else if (tok.startsWith("-") && tok.length === 2) {
|
|
197
|
+
const short = tok.slice(1);
|
|
198
|
+
if (booleanShorts.has(short)) {
|
|
199
|
+
i++;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (stringShorts.has(short)) {
|
|
203
|
+
i += 2; // consume short flag and its value
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
out.push(tok);
|
|
208
|
+
i++;
|
|
209
|
+
}
|
|
210
|
+
return out;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Remove tokens for blocked plugin flags from an argv slice so they cannot
|
|
214
|
+
* shift positionals during the plugin-flag re-parse.
|
|
215
|
+
*
|
|
216
|
+
* The built-in may declare a blocked flag as boolean while the plugin
|
|
217
|
+
* declared it as string. In that case the user supplied a value token
|
|
218
|
+
* (--name value) that the built-in parser leaves in positionals. We use
|
|
219
|
+
* the PLUGIN's declared type to decide whether to strip a following token.
|
|
220
|
+
*/
|
|
221
|
+
function stripBlockedFlagTokens(argv, blocked, pluginFlagDefs) {
|
|
222
|
+
const out = [];
|
|
223
|
+
let i = 0;
|
|
224
|
+
while (i < argv.length) {
|
|
225
|
+
const arg = argv[i];
|
|
226
|
+
if (arg.startsWith("--")) {
|
|
227
|
+
const eqIdx = arg.indexOf("=");
|
|
228
|
+
const name = eqIdx >= 0 ? arg.slice(2, eqIdx) : arg.slice(2);
|
|
229
|
+
if (blocked.has(name)) {
|
|
230
|
+
if (eqIdx < 0 &&
|
|
231
|
+
pluginFlagDefs[name]?.type === "string" &&
|
|
232
|
+
i + 1 < argv.length &&
|
|
233
|
+
!argv[i + 1].startsWith("-")) {
|
|
234
|
+
i++;
|
|
235
|
+
}
|
|
236
|
+
i++;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
out.push(arg);
|
|
241
|
+
i++;
|
|
242
|
+
}
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
70
245
|
/**
|
|
71
246
|
* Warn about unrecognized flags for a verb × resource combination.
|
|
72
247
|
*/
|
|
@@ -92,6 +267,22 @@ async function main() {
|
|
|
92
267
|
// Fire-and-forget: check for CLI updates in the background
|
|
93
268
|
startUpdateCheck(c8ctl.version);
|
|
94
269
|
const { values, positionals } = parseCliArgs();
|
|
270
|
+
// Apply per-invocation output mode override (#356).
|
|
271
|
+
// Precedence: --json flag > C8CTL_OUTPUT_MODE env var > persisted session.
|
|
272
|
+
// Setting `c8ctl.outputMode` directly is in-memory only; saveSessionState
|
|
273
|
+
// uses the separately-tracked persistedOutputMode from config.ts so this
|
|
274
|
+
// override never leaks back to disk.
|
|
275
|
+
if (values.json === true) {
|
|
276
|
+
c8ctl.outputMode = "json";
|
|
277
|
+
}
|
|
278
|
+
else if (process.env.C8CTL_OUTPUT_MODE === "json") {
|
|
279
|
+
c8ctl.outputMode = "json";
|
|
280
|
+
}
|
|
281
|
+
else if (process.env.C8CTL_OUTPUT_MODE === "text") {
|
|
282
|
+
c8ctl.outputMode = "text";
|
|
283
|
+
}
|
|
284
|
+
// Any other C8CTL_OUTPUT_MODE value (including unset, empty, or
|
|
285
|
+
// "yaml"/typo) falls through to the persisted mode loaded above.
|
|
95
286
|
// Initialize logger with current output mode from c8ctl runtime
|
|
96
287
|
const logger = getLogger(c8ctl.outputMode);
|
|
97
288
|
// Resolve sort order from --asc / --desc flags (default: asc)
|
|
@@ -157,6 +348,95 @@ async function main() {
|
|
|
157
348
|
}
|
|
158
349
|
return;
|
|
159
350
|
}
|
|
351
|
+
// Check if this is a plugin command — only for verbs not claimed by a built-in.
|
|
352
|
+
// Placed after help/menu handling so those reserved verbs can never be shadowed.
|
|
353
|
+
const pluginCommands = getPluginCommands();
|
|
354
|
+
if (verb && Object.hasOwn(pluginCommands, verb) && !getCommandDef(verb)) {
|
|
355
|
+
const cmd = pluginCommands[verb];
|
|
356
|
+
const cmdFlagDefs = typeof cmd !== "function" ? cmd.flags : undefined;
|
|
357
|
+
// Passthrough plugin contract (#366): strip GLOBAL_FLAGS from the
|
|
358
|
+
// raw argv following the verb token and forward the rest verbatim.
|
|
359
|
+
// GLOBAL_FLAGS already affect the c8ctl runtime via their regular
|
|
360
|
+
// handling earlier in main(); the plugin must not see them again.
|
|
361
|
+
// Validation at load time guarantees passthrough commands are the
|
|
362
|
+
// bare-function form and never carry a `flags` declaration.
|
|
363
|
+
if (isPassthroughPluginCommand(verb)) {
|
|
364
|
+
// Locate the verb token by walking process.argv from the start and
|
|
365
|
+
// skipping leading GLOBAL_FLAGS (consuming string-flag values).
|
|
366
|
+
// A naive `indexOf(verb)` is unsafe because `verb` may also appear
|
|
367
|
+
// as the value of a global string flag (e.g. `--profile <verb>`).
|
|
368
|
+
const rawAfterVerb = sliceArgvAfterVerb(process.argv.slice(2), verb);
|
|
369
|
+
const forwarded = stripGlobalFlags(rawAfterVerb);
|
|
370
|
+
await executePluginCommand(verb, forwarded);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
if (cmdFlagDefs) {
|
|
374
|
+
// Use built-in flags as a blacklist: start from the full built-in
|
|
375
|
+
// option set, then add plugin flags only when the name is not already
|
|
376
|
+
// taken. This prevents a plugin flag from silently changing a built-in
|
|
377
|
+
// flag's parse type.
|
|
378
|
+
const builtinOptions = deriveParseArgsOptions();
|
|
379
|
+
const builtinShorts = new Set(Object.values(builtinOptions)
|
|
380
|
+
.map((o) => o.short)
|
|
381
|
+
.filter((s) => s !== undefined));
|
|
382
|
+
const mergedOptions = { ...builtinOptions };
|
|
383
|
+
const blockedFlags = new Set();
|
|
384
|
+
for (const [name, def] of Object.entries(cmdFlagDefs)) {
|
|
385
|
+
if (name in builtinOptions) {
|
|
386
|
+
logger.warn(`Plugin flag --${name} conflicts with a built-in flag and will not be parsed`);
|
|
387
|
+
blockedFlags.add(name);
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
const short = def.short && builtinShorts.has(def.short) ? undefined : def.short;
|
|
391
|
+
if (def.short && !short) {
|
|
392
|
+
logger.warn(`Plugin flag --${name} short alias -${def.short} conflicts with a built-in alias and will be ignored`);
|
|
393
|
+
}
|
|
394
|
+
mergedOptions[name] = {
|
|
395
|
+
type: def.type,
|
|
396
|
+
...(short && { short }),
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
const filteredArgv = stripBlockedFlagTokens(process.argv.slice(2), blockedFlags, cmdFlagDefs);
|
|
400
|
+
let pluginParsed;
|
|
401
|
+
try {
|
|
402
|
+
pluginParsed = parseArgs({
|
|
403
|
+
args: filteredArgv,
|
|
404
|
+
options: mergedOptions,
|
|
405
|
+
allowPositionals: true,
|
|
406
|
+
strict: false,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
411
|
+
console.error(`Error parsing arguments: ${message}`);
|
|
412
|
+
process.exit(1);
|
|
413
|
+
}
|
|
414
|
+
const extractedFlags = {};
|
|
415
|
+
for (const [flagName, def] of Object.entries(cmdFlagDefs)) {
|
|
416
|
+
if (blockedFlags.has(flagName))
|
|
417
|
+
continue;
|
|
418
|
+
const raw = pluginParsed.values[flagName];
|
|
419
|
+
// Repeated string flags arrive as arrays — take the last value
|
|
420
|
+
// (last-write-wins), matching built-in flag normalization.
|
|
421
|
+
const value = def.type === "string" && Array.isArray(raw)
|
|
422
|
+
? (raw.findLast((v) => typeof v === "string") ?? undefined)
|
|
423
|
+
: raw;
|
|
424
|
+
if (value !== undefined) {
|
|
425
|
+
extractedFlags[flagName] = value;
|
|
426
|
+
}
|
|
427
|
+
if (def.required === true && value === undefined) {
|
|
428
|
+
logger.error(`--${flagName} is required`);
|
|
429
|
+
process.exit(1);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
const [_verb, _resource, ...pluginArgs] = pluginParsed.positionals;
|
|
433
|
+
await executePluginCommand(verb, _resource ? [_resource, ...pluginArgs] : pluginArgs, extractedFlags);
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
await executePluginCommand(verb, resource ? [resource, ...args] : args);
|
|
437
|
+
}
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
160
440
|
// Normalize resource
|
|
161
441
|
const normalizedResource = resource ? resolveAlias(resource) : "";
|
|
162
442
|
// Resource validation guard — single chokepoint for all verbs that require a resource.
|
|
@@ -237,11 +517,7 @@ async function main() {
|
|
|
237
517
|
await handler.execute(ctx, values, args);
|
|
238
518
|
return;
|
|
239
519
|
}
|
|
240
|
-
//
|
|
241
|
-
if (await executePluginCommand(verb, resource ? [resource, ...args] : args)) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
// Unknown command
|
|
520
|
+
// Unknown command (plugin check was already done above)
|
|
245
521
|
logger.error(`Unknown command: ${verb}${resource ? ` ${resource}` : ""}`);
|
|
246
522
|
logger.info('Run "c8 help" for usage information');
|
|
247
523
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers extracted from `src/commands/mcp-proxy.ts` so tests can
|
|
3
|
+
* import them without violating the test→commands import boundary
|
|
4
|
+
* (#291). The handler itself remains in `src/commands/mcp-proxy.ts`.
|
|
5
|
+
*/
|
|
6
|
+
import type { CamundaClient } from "@camunda8/orchestration-cluster-api";
|
|
7
|
+
import { type Logger } from "./logger.ts";
|
|
8
|
+
/**
|
|
9
|
+
* Creates a custom fetch function that injects Camunda authentication headers
|
|
10
|
+
* and handles token refresh on 401 errors.
|
|
11
|
+
*
|
|
12
|
+
* @param camundaClient - The Camunda client instance for auth
|
|
13
|
+
* @param timeout - Request timeout in milliseconds (default: 60000)
|
|
14
|
+
* @returns Custom fetch function compatible with MCP SDK transport
|
|
15
|
+
*/
|
|
16
|
+
export declare function createCamundaFetch(camundaClient: CamundaClient, logger: Logger, timeout?: number): typeof fetch;
|
|
17
|
+
/**
|
|
18
|
+
* Normalize remote MCP URL to ensure it points to the MCP endpoint (assuming it ends with /mcp/cluster).
|
|
19
|
+
* - If URL has no path or just "/", append "/mcp/cluster"
|
|
20
|
+
* - If URL ends with "/v2" or "/v2/", replace with "/mcp/cluster"
|
|
21
|
+
*/
|
|
22
|
+
export declare function normalizeRemoteMcpUrl(url: string, mcpServerPath: string): string;
|
|
23
|
+
//# sourceMappingURL=mcp-proxy-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-proxy-helpers.d.ts","sourceRoot":"","sources":["../src/mcp-proxy-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CACjC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAc,GACrB,OAAO,KAAK,CA0Fd;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,GACnB,MAAM,CAqBR"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers extracted from `src/commands/mcp-proxy.ts` so tests can
|
|
3
|
+
* import them without violating the test→commands import boundary
|
|
4
|
+
* (#291). The handler itself remains in `src/commands/mcp-proxy.ts`.
|
|
5
|
+
*/
|
|
6
|
+
import { isRecord } from "./logger.js";
|
|
7
|
+
/**
|
|
8
|
+
* Creates a custom fetch function that injects Camunda authentication headers
|
|
9
|
+
* and handles token refresh on 401 errors.
|
|
10
|
+
*
|
|
11
|
+
* @param camundaClient - The Camunda client instance for auth
|
|
12
|
+
* @param timeout - Request timeout in milliseconds (default: 60000)
|
|
13
|
+
* @returns Custom fetch function compatible with MCP SDK transport
|
|
14
|
+
*/
|
|
15
|
+
export function createCamundaFetch(camundaClient, logger, timeout = 60000) {
|
|
16
|
+
return async (input, init) => {
|
|
17
|
+
// Get fresh auth headers from orchestration-cluster-api
|
|
18
|
+
const authHeaders = await camundaClient.getAuthHeaders();
|
|
19
|
+
// Merge with existing headers
|
|
20
|
+
const headers = new Headers(init?.headers);
|
|
21
|
+
Object.entries(authHeaders).forEach(([key, value]) => {
|
|
22
|
+
headers.set(key, value);
|
|
23
|
+
});
|
|
24
|
+
// Create timeout abort controller
|
|
25
|
+
const timeoutController = new AbortController();
|
|
26
|
+
const timeoutId = setTimeout(() => timeoutController.abort(), timeout);
|
|
27
|
+
try {
|
|
28
|
+
// Merge abort signals (SDK's signal + timeout signal)
|
|
29
|
+
const signal = init?.signal
|
|
30
|
+
? AbortSignal.any([init.signal, timeoutController.signal])
|
|
31
|
+
: timeoutController.signal;
|
|
32
|
+
// Make the request with merged headers
|
|
33
|
+
const response = await fetch(input, { ...init, headers, signal });
|
|
34
|
+
// Handle 401 with token refresh and retry
|
|
35
|
+
if (response.status === 401) {
|
|
36
|
+
clearTimeout(timeoutId);
|
|
37
|
+
logger.info("Received 401 (Unauthorized) response, attempting token refresh and retrying");
|
|
38
|
+
// Force token refresh and rebuild headers
|
|
39
|
+
await camundaClient.forceAuthRefresh();
|
|
40
|
+
const freshHeaders = await camundaClient.getAuthHeaders();
|
|
41
|
+
const retryHeaders = new Headers(init?.headers);
|
|
42
|
+
Object.entries(freshHeaders).forEach(([key, value]) => {
|
|
43
|
+
retryHeaders.set(key, value);
|
|
44
|
+
});
|
|
45
|
+
// Retry with fresh token and timeout
|
|
46
|
+
const retryTimeoutController = new AbortController();
|
|
47
|
+
const retryTimeoutId = setTimeout(() => retryTimeoutController.abort(), timeout);
|
|
48
|
+
try {
|
|
49
|
+
const retrySignal = init?.signal
|
|
50
|
+
? AbortSignal.any([init.signal, retryTimeoutController.signal])
|
|
51
|
+
: retryTimeoutController.signal;
|
|
52
|
+
return await fetch(input, {
|
|
53
|
+
...init,
|
|
54
|
+
headers: retryHeaders,
|
|
55
|
+
signal: retrySignal,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
clearTimeout(retryTimeoutId);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
clearTimeout(timeoutId);
|
|
63
|
+
return response;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
clearTimeout(timeoutId);
|
|
67
|
+
// Convert AbortError to more descriptive timeout error
|
|
68
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
69
|
+
throw new Error(`Request timeout after ${timeout}ms`);
|
|
70
|
+
}
|
|
71
|
+
// Walk the cause chain to handle both Node 22 (shallow) and Node 24 (deeper nesting)
|
|
72
|
+
let cause = error instanceof Error ? error.cause : undefined;
|
|
73
|
+
while (cause != null) {
|
|
74
|
+
if (isRecord(cause) && cause.code === "ECONNREFUSED") {
|
|
75
|
+
const url = typeof input === "string" ? input : input.toString();
|
|
76
|
+
throw new Error(`Connection refused: Unable to connect to ${url}. Please verify the server is running and accessible.`);
|
|
77
|
+
}
|
|
78
|
+
cause = isRecord(cause) ? cause.cause : undefined;
|
|
79
|
+
}
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Normalize remote MCP URL to ensure it points to the MCP endpoint (assuming it ends with /mcp/cluster).
|
|
86
|
+
* - If URL has no path or just "/", append "/mcp/cluster"
|
|
87
|
+
* - If URL ends with "/v2" or "/v2/", replace with "/mcp/cluster"
|
|
88
|
+
*/
|
|
89
|
+
export function normalizeRemoteMcpUrl(url, mcpServerPath) {
|
|
90
|
+
try {
|
|
91
|
+
const urlObj = new URL(url);
|
|
92
|
+
// If path is empty or just "/", append MCP server path
|
|
93
|
+
if (urlObj.pathname === "" || urlObj.pathname === "/") {
|
|
94
|
+
urlObj.pathname = mcpServerPath;
|
|
95
|
+
return urlObj.toString();
|
|
96
|
+
}
|
|
97
|
+
// If path ends with "/v2" (with or without trailing slash), replace with MCP server path
|
|
98
|
+
if (urlObj.pathname.match(/\/v2\/?$/)) {
|
|
99
|
+
urlObj.pathname = urlObj.pathname.replace(/\/v2\/?$/, mcpServerPath);
|
|
100
|
+
return urlObj.toString();
|
|
101
|
+
}
|
|
102
|
+
// Already ends with MCP server path or has custom path - keep as is
|
|
103
|
+
return url;
|
|
104
|
+
}
|
|
105
|
+
catch (_e) {
|
|
106
|
+
return url;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=mcp-proxy-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-proxy-helpers.js","sourceRoot":"","sources":["../src/mcp-proxy-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CACjC,aAA4B,EAC5B,MAAc,EACd,UAAkB,KAAK;IAEvB,OAAO,KAAK,EACX,KAA6B,EAC7B,IAAkB,EACE,EAAE;QACtB,wDAAwD;QACxD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;QAEzD,8BAA8B;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvE,IAAI,CAAC;YACJ,sDAAsD;YACtD,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM;gBAC1B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC1D,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAE5B,uCAAuC;YACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAElE,0CAA0C;YAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,MAAM,CAAC,IAAI,CACV,6EAA6E,CAC7E,CAAC;gBAEF,0CAA0C;gBAC1C,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBACvC,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;gBAC1D,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACrD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBAEH,qCAAqC;gBACrC,MAAM,sBAAsB,GAAG,IAAI,eAAe,EAAE,CAAC;gBACrD,MAAM,cAAc,GAAG,UAAU,CAChC,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,EACpC,OAAO,CACP,CAAC;gBAEF,IAAI,CAAC;oBACJ,MAAM,WAAW,GAAG,IAAI,EAAE,MAAM;wBAC/B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;wBAC/D,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC;oBAEjC,OAAO,MAAM,KAAK,CAAC,KAAK,EAAE;wBACzB,GAAG,IAAI;wBACP,OAAO,EAAE,YAAY;wBACrB,MAAM,EAAE,WAAW;qBACnB,CAAC,CAAC;gBACJ,CAAC;wBAAS,CAAC;oBACV,YAAY,CAAC,cAAc,CAAC,CAAC;gBAC9B,CAAC;YACF,CAAC;YAED,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,uDAAuD;YACvD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,IAAI,CAAC,CAAC;YACvD,CAAC;YAED,qFAAqF;YACrF,IAAI,KAAK,GAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,OAAO,KAAK,IAAI,IAAI,EAAE,CAAC;gBACtB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACtD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjE,MAAM,IAAI,KAAK,CACd,4CAA4C,GAAG,uDAAuD,CACtG,CAAC;gBACH,CAAC;gBACD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACnD,CAAC;YAED,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACpC,GAAW,EACX,aAAqB;IAErB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAE5B,uDAAuD;QACvD,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YACvD,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC;YAChC,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,yFAAyF;QACzF,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YACrE,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,oEAAoE;QACpE,OAAO,GAAG,CAAC;IACZ,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACb,OAAO,GAAG,CAAC;IACZ,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers extracted from `src/commands/open.ts` so tests can import
|
|
3
|
+
* them without violating the test→commands import boundary (#291). The
|
|
4
|
+
* `openAppCommand` / `feedbackCommand` handlers in `src/commands/open.ts`
|
|
5
|
+
* re-import these.
|
|
6
|
+
*/
|
|
7
|
+
export declare const OPEN_APPS: readonly ["operate", "tasklist", "modeler", "optimize"];
|
|
8
|
+
export type AppName = (typeof OPEN_APPS)[number];
|
|
9
|
+
export declare function isAppName(value: string): value is AppName;
|
|
10
|
+
/**
|
|
11
|
+
* Derive the URL of a Camunda web application from the cluster base URL.
|
|
12
|
+
*
|
|
13
|
+
* Only supported for self-managed clusters where the base URL is the REST API
|
|
14
|
+
* endpoint (e.g. `http://localhost:8080/v2`). Returns `null` when the URL
|
|
15
|
+
* does not look like a self-managed gateway (no `/v<n>` suffix).
|
|
16
|
+
*/
|
|
17
|
+
export declare function deriveAppUrl(baseUrl: string, app: AppName): string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Determine the platform-appropriate command and arguments to open a URL.
|
|
20
|
+
*
|
|
21
|
+
* WSL is detected explicitly because it reports `linux`, but should use the
|
|
22
|
+
* Windows opener via interop rather than relying on `xdg-open`.
|
|
23
|
+
*
|
|
24
|
+
* Accepts optional overrides for testing.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getBrowserCommand(url: string, plat?: NodeJS.Platform, env?: Record<string, string | undefined>): {
|
|
27
|
+
command: string;
|
|
28
|
+
args: string[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Open a URL in the default system browser.
|
|
32
|
+
* Works on macOS, Linux, native Windows, and WSL.
|
|
33
|
+
*/
|
|
34
|
+
export declare function openUrl(url: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Validated inputs for the open command.
|
|
37
|
+
*/
|
|
38
|
+
export interface OpenAppInput {
|
|
39
|
+
app: AppName;
|
|
40
|
+
profile?: string;
|
|
41
|
+
dryRun?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Validate raw CLI positional + options for the open command.
|
|
45
|
+
* Returns a fully validated and type-narrowed input object.
|
|
46
|
+
* Exits with code 1 on invalid input.
|
|
47
|
+
*/
|
|
48
|
+
export declare function validateOpenAppOptions(app: string | undefined, options: {
|
|
49
|
+
profile?: string;
|
|
50
|
+
dryRun?: boolean;
|
|
51
|
+
}): OpenAppInput;
|
|
52
|
+
//# sourceMappingURL=open-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-helpers.d.ts","sourceRoot":"","sources":["../src/open-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,eAAO,MAAM,SAAS,yDAKZ,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAGzD;AAKD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMzE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAM,CAAC,QAAqB,EAClC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACnD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAYrC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAkBzC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,YAAY,CAWd"}
|