opalserve 3.2.0 → 3.2.1
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 +7 -3
- package/dist/cli/commands/add.d.ts +7 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +79 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/default.d.ts +7 -0
- package/dist/cli/commands/default.d.ts.map +1 -0
- package/dist/cli/commands/default.js +75 -0
- package/dist/cli/commands/default.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +43 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +17 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -119,7 +119,9 @@ Under the hood the editor spawns `npx -y opalserve mcp` as its MCP stdio process
|
|
|
119
119
|
|
|
120
120
|
## Releases
|
|
121
121
|
|
|
122
|
-
**3.2.
|
|
122
|
+
**3.2.1 — Coherence polish (current)**: smart `opalserve add <thing>` that detects URL → server, file → context doc, email → invite. Bare `opalserve` is now context-aware (shows status, hints, or first-run guide). Init wizard detects installed AI editors and offers to wire them up at the end.
|
|
123
|
+
|
|
124
|
+
**3.2.0 — Coherence**: `opalserve link <editor>` wires OpalServe into Claude Desktop / Cursor / Cline with one command, plus `opalserve doctor` for self-serve diagnostics, the `opalserve mcp` stdio entry-point, and auto-open of the dashboard on `start`.
|
|
123
125
|
|
|
124
126
|
**3.1.1 — Trust Patch**: hardens the auth and HTTP surface.
|
|
125
127
|
|
|
@@ -133,7 +135,7 @@ Disclosure policy: see [SECURITY.md](SECURITY.md).
|
|
|
133
135
|
|
|
134
136
|
```bash
|
|
135
137
|
opalserve --version
|
|
136
|
-
# 3.2.
|
|
138
|
+
# 3.2.1
|
|
137
139
|
|
|
138
140
|
opalserve start
|
|
139
141
|
# HTTP API http://127.0.0.1:3456
|
|
@@ -274,7 +276,9 @@ http://localhost:3456/dashboard
|
|
|
274
276
|
|
|
275
277
|
| Command | Description |
|
|
276
278
|
|---|---|
|
|
277
|
-
| `opalserve
|
|
279
|
+
| `opalserve` (no args) | Context-aware welcome: status if running, hints if not, first-run guide if fresh |
|
|
280
|
+
| `opalserve add <thing>` | Smart-add — URL → MCP server, file → context doc, email → invite |
|
|
281
|
+
| `opalserve init` | Interactive setup wizard -- configures mode, port, first server, links editors |
|
|
278
282
|
| `opalserve start` | Start the registry server (HTTP API + MCP gateway); opens dashboard in browser |
|
|
279
283
|
| `opalserve start --no-browser` | Start without auto-opening the dashboard |
|
|
280
284
|
| `opalserve status` | Show server status, connected servers, and tool counts |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAkCA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,GAAG,iBAAiB,CAAC;CACvC;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD9F"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { existsSync, statSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { showMiniBanner, showError, showInfo } from '../ui/banner.js';
|
|
5
|
+
import { contextAddCommand } from './context.js';
|
|
6
|
+
import { serverAddCommand } from './server.js';
|
|
7
|
+
import { adminInviteCommand } from './admin.js';
|
|
8
|
+
const URL_PATTERN = /^(?:https?|sse):\/\//i;
|
|
9
|
+
const EMAIL_PATTERN = /^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$/;
|
|
10
|
+
function classify(input) {
|
|
11
|
+
const trimmed = input.trim();
|
|
12
|
+
if (URL_PATTERN.test(trimmed))
|
|
13
|
+
return { kind: 'server', url: trimmed };
|
|
14
|
+
if (EMAIL_PATTERN.test(trimmed))
|
|
15
|
+
return { kind: 'invite', email: trimmed };
|
|
16
|
+
if (!trimmed.includes('\0')) {
|
|
17
|
+
const resolved = resolve(trimmed);
|
|
18
|
+
if (existsSync(resolved)) {
|
|
19
|
+
try {
|
|
20
|
+
const stat = statSync(resolved);
|
|
21
|
+
if (stat.isFile() || stat.isDirectory())
|
|
22
|
+
return { kind: 'context', path: trimmed };
|
|
23
|
+
}
|
|
24
|
+
catch { /* fall through */ }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { kind: 'unknown', input: trimmed };
|
|
28
|
+
}
|
|
29
|
+
export async function addCommand(input, options) {
|
|
30
|
+
if (!input) {
|
|
31
|
+
showMiniBanner();
|
|
32
|
+
showInfo(`Usage: ${chalk.cyan('opalserve add <thing>')}`);
|
|
33
|
+
console.log('');
|
|
34
|
+
console.log(` Smart-detects the kind of thing you're adding:`);
|
|
35
|
+
console.log(` ${chalk.cyan('https://...')} → MCP server (SSE / Streamable HTTP)`);
|
|
36
|
+
console.log(` ${chalk.cyan('./path/file.md')} → context document for the knowledge base`);
|
|
37
|
+
console.log(` ${chalk.cyan('user@team.com')} → invite a user (team mode)`);
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log(` For stdio servers use ${chalk.cyan('opalserve server add')} (the sub-command still works).`);
|
|
40
|
+
console.log('');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const target = classify(input);
|
|
44
|
+
switch (target.kind) {
|
|
45
|
+
case 'server': {
|
|
46
|
+
await serverAddCommand({
|
|
47
|
+
name: options.name,
|
|
48
|
+
url: target.url,
|
|
49
|
+
transport: options.transport ?? 'sse',
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
case 'context': {
|
|
54
|
+
await contextAddCommand(target.path);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
case 'invite': {
|
|
58
|
+
await adminInviteCommand(target.email);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
case 'unknown': {
|
|
62
|
+
showMiniBanner();
|
|
63
|
+
showError(`Could not infer what to do with "${target.input}".`);
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log(` Tried:`);
|
|
66
|
+
console.log(` URL pattern (${chalk.dim('http(s)://...')}) no match`);
|
|
67
|
+
console.log(` file path (${chalk.dim('not found on disk')})`);
|
|
68
|
+
console.log(` email pattern (${chalk.dim('not a@b.c')})`);
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log(` Use one of the explicit subcommands instead:`);
|
|
71
|
+
console.log(` ${chalk.cyan('opalserve server add')}`);
|
|
72
|
+
console.log(` ${chalk.cyan('opalserve context add <file>')}`);
|
|
73
|
+
console.log(` ${chalk.cyan('opalserve admin invite <email>')}`);
|
|
74
|
+
console.log('');
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bare `opalserve` (no subcommand) — context-aware welcome.
|
|
3
|
+
* Doesn't auto-run anything destructive; surfaces what to do next based on
|
|
4
|
+
* what's on disk and whether the gateway is already running.
|
|
5
|
+
*/
|
|
6
|
+
export declare function defaultCommand(): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=default.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/default.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsDpD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { createConnection } from 'node:net';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { showBanner, showInfo, showWarning } from '../ui/banner.js';
|
|
5
|
+
import { listInstalledEditors, OPALSERVE_ENTRY_NAME } from '../editors/index.js';
|
|
6
|
+
import { OpalServeRegistry } from '../../core/registry.js';
|
|
7
|
+
import { getDefaultDbPath } from '../../config/defaults.js';
|
|
8
|
+
function probePort(host, port, timeoutMs = 500) {
|
|
9
|
+
return new Promise(resolve => {
|
|
10
|
+
const socket = createConnection({ host, port });
|
|
11
|
+
const done = (live) => {
|
|
12
|
+
socket.removeAllListeners();
|
|
13
|
+
socket.destroy();
|
|
14
|
+
resolve(live);
|
|
15
|
+
};
|
|
16
|
+
const timer = setTimeout(() => done(false), timeoutMs);
|
|
17
|
+
socket.once('connect', () => { clearTimeout(timer); done(true); });
|
|
18
|
+
socket.once('error', () => { clearTimeout(timer); done(false); });
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Bare `opalserve` (no subcommand) — context-aware welcome.
|
|
23
|
+
* Doesn't auto-run anything destructive; surfaces what to do next based on
|
|
24
|
+
* what's on disk and whether the gateway is already running.
|
|
25
|
+
*/
|
|
26
|
+
export async function defaultCommand() {
|
|
27
|
+
showBanner();
|
|
28
|
+
const dbPath = getDefaultDbPath();
|
|
29
|
+
const firstRun = !existsSync(dbPath);
|
|
30
|
+
if (firstRun) {
|
|
31
|
+
showInfo(chalk.bold('Looks like the first run on this machine.'));
|
|
32
|
+
console.log('');
|
|
33
|
+
console.log(` ${chalk.cyan('opalserve init')} Two-question setup wizard`);
|
|
34
|
+
console.log(` ${chalk.cyan('opalserve add <url>')} Smart-add an MCP server, context doc, or invite`);
|
|
35
|
+
console.log(` ${chalk.cyan('opalserve link <editor>')} Wire OpalServe into Claude Desktop, Cursor, or Cline`);
|
|
36
|
+
console.log(` ${chalk.cyan('opalserve doctor')} Check the install`);
|
|
37
|
+
console.log('');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
let registry = null;
|
|
41
|
+
try {
|
|
42
|
+
registry = await OpalServeRegistry.create({ logging: { level: 'silent' } });
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
showWarning('Could not load configuration — try `opalserve init` to start fresh.');
|
|
46
|
+
console.log('');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const port = registry.config.gateway.port;
|
|
50
|
+
const host = registry.config.gateway.host === '0.0.0.0' ? '127.0.0.1' : registry.config.gateway.host;
|
|
51
|
+
const live = await probePort(host, port);
|
|
52
|
+
const servers = registry.listServers();
|
|
53
|
+
const tools = registry.listTools();
|
|
54
|
+
const linkedEditors = listInstalledEditors().filter(e => e.isLinked(OPALSERVE_ENTRY_NAME));
|
|
55
|
+
console.log(` ${chalk.bold('Status')}`);
|
|
56
|
+
console.log(` Server ${live ? chalk.green('running') + chalk.dim(` http://${host}:${port}`) : chalk.dim('idle (not running)')}`);
|
|
57
|
+
console.log(` Servers ${chalk.cyan(String(servers.length))} registered, ${chalk.cyan(String(servers.filter(s => s.status === 'connected').length))} connected`);
|
|
58
|
+
console.log(` Tools ${chalk.cyan(String(tools.length))} discovered`);
|
|
59
|
+
console.log(` Linked editors ${linkedEditors.length > 0 ? chalk.cyan(linkedEditors.map(e => e.id).join(', ')) : chalk.dim('none')}`);
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(` ${chalk.bold('Next:')}`);
|
|
62
|
+
if (!live) {
|
|
63
|
+
console.log(` ${chalk.cyan('opalserve start')} Start the registry (auto-opens dashboard)`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log(` Open the dashboard at ${chalk.cyan(`http://${host}:${port}/dashboard`)}`);
|
|
67
|
+
}
|
|
68
|
+
if (linkedEditors.length === 0) {
|
|
69
|
+
console.log(` ${chalk.cyan('opalserve link --all')} Wire detected AI editors`);
|
|
70
|
+
}
|
|
71
|
+
console.log(` ${chalk.cyan('opalserve doctor')} Diagnostic check`);
|
|
72
|
+
console.log('');
|
|
73
|
+
await registry.stop();
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/cli/commands/default.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAaA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA2DjD"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { writeFileSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
-
import { select } from '@inquirer/prompts';
|
|
4
|
+
import { select, checkbox } from '@inquirer/prompts';
|
|
5
5
|
import { showBox, showSuccess, showInfo } from '../ui/banner.js';
|
|
6
6
|
import { promptServerName, promptTransportType, promptStdioCommand, promptUrl, promptEnvVars, promptConfirm, promptPort } from '../ui/prompts.js';
|
|
7
|
+
import { SUPPORTED_EDITORS, OPALSERVE_ENTRY_NAME, buildOpalserveEntry, } from '../editors/index.js';
|
|
7
8
|
export async function initCommand() {
|
|
8
9
|
showBox(`Welcome to ${chalk.bold('OpalServe')} Setup\n\n` +
|
|
9
10
|
'This wizard will help you configure OpalServe\n' +
|
|
@@ -43,13 +44,51 @@ export async function initCommand() {
|
|
|
43
44
|
mkdirSync(dirname(configPath), { recursive: true });
|
|
44
45
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
45
46
|
showSuccess(`Configuration saved to ${chalk.cyan(configPath)}`);
|
|
47
|
+
await offerEditorLink();
|
|
46
48
|
console.log('');
|
|
47
49
|
showInfo('Next steps:');
|
|
48
|
-
console.log(` ${chalk.cyan('opalserve start')} Start the registry`);
|
|
49
|
-
console.log(` ${chalk.cyan('opalserve
|
|
50
|
-
console.log(` ${chalk.cyan('opalserve
|
|
50
|
+
console.log(` ${chalk.cyan('opalserve start')} Start the registry (auto-opens dashboard)`);
|
|
51
|
+
console.log(` ${chalk.cyan('opalserve add <thing>')} Smart-add a server / context doc / invite`);
|
|
52
|
+
console.log(` ${chalk.cyan('opalserve doctor')} Diagnostic check`);
|
|
51
53
|
console.log('');
|
|
52
54
|
}
|
|
55
|
+
async function offerEditorLink() {
|
|
56
|
+
const detected = SUPPORTED_EDITORS.filter(e => e.detect());
|
|
57
|
+
if (detected.length === 0)
|
|
58
|
+
return;
|
|
59
|
+
console.log('');
|
|
60
|
+
showInfo(`Detected ${detected.length} AI editor(s) on this machine: ${chalk.cyan(detected.map(e => e.displayName).join(', '))}`);
|
|
61
|
+
const wire = await promptConfirm('Wire OpalServe into them now? (you can do this later with `opalserve link`)', true);
|
|
62
|
+
if (!wire)
|
|
63
|
+
return;
|
|
64
|
+
const choices = detected.map(e => ({
|
|
65
|
+
name: `${e.displayName} ${chalk.dim(`(${e.getConfigPath()})`)}`,
|
|
66
|
+
value: e.id,
|
|
67
|
+
checked: true,
|
|
68
|
+
}));
|
|
69
|
+
const selected = await checkbox({
|
|
70
|
+
message: 'Pick the editors to link:',
|
|
71
|
+
choices,
|
|
72
|
+
});
|
|
73
|
+
if (selected.length === 0)
|
|
74
|
+
return;
|
|
75
|
+
const entry = buildOpalserveEntry();
|
|
76
|
+
for (const id of selected) {
|
|
77
|
+
const adapter = detected.find(e => e.id === id);
|
|
78
|
+
if (!adapter)
|
|
79
|
+
continue;
|
|
80
|
+
try {
|
|
81
|
+
const prior = adapter.link(OPALSERVE_ENTRY_NAME, entry);
|
|
82
|
+
const verb = prior ? 'updated' : 'wired up';
|
|
83
|
+
showSuccess(`${adapter.displayName} ${verb}`);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.log(` ${chalk.red('✗')} ${adapter.displayName}: ${err instanceof Error ? err.message : String(err)}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
console.log('');
|
|
90
|
+
showInfo('Restart your editor for it to pick up the new MCP server.');
|
|
91
|
+
}
|
|
53
92
|
async function promptServerConfig() {
|
|
54
93
|
const name = await promptServerName();
|
|
55
94
|
const transportType = await promptTransportType();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
-
import { showBanner } from './ui/banner.js';
|
|
4
3
|
import { initCommand } from './commands/init.js';
|
|
5
4
|
import { startCommand } from './commands/start.js';
|
|
6
5
|
import { serverListCommand, serverAddCommand, serverRemoveCommand } from './commands/server.js';
|
|
@@ -14,6 +13,8 @@ import { adminInitCommand, adminStatsCommand, adminUsersCommand, adminInviteComm
|
|
|
14
13
|
import { mcpCommand } from './commands/mcp.js';
|
|
15
14
|
import { linkCommand, unlinkCommand } from './commands/link.js';
|
|
16
15
|
import { doctorCommand } from './commands/doctor.js';
|
|
16
|
+
import { addCommand } from './commands/add.js';
|
|
17
|
+
import { defaultCommand } from './commands/default.js';
|
|
17
18
|
import { VERSION } from '../constants.js';
|
|
18
19
|
const program = new Command()
|
|
19
20
|
.name('opalserve')
|
|
@@ -150,6 +151,13 @@ adminCmd
|
|
|
150
151
|
.option('--set <value>', 'Set a permission (format: role:server:tool:permission)')
|
|
151
152
|
.option('--list', 'List all permissions')
|
|
152
153
|
.action(adminPermissionsCommand);
|
|
154
|
+
// --- Smart add (top-level) ---
|
|
155
|
+
program
|
|
156
|
+
.command('add [input]')
|
|
157
|
+
.description('Smart-add — URL → server, file → context doc, email → invite')
|
|
158
|
+
.option('-n, --name <name>', 'Server name (when adding a server)')
|
|
159
|
+
.option('-t, --transport <type>', 'Transport for URL inputs (sse | streamable-http)', 'sse')
|
|
160
|
+
.action(addCommand);
|
|
153
161
|
// --- Health ---
|
|
154
162
|
program
|
|
155
163
|
.command('health')
|
|
@@ -178,9 +186,14 @@ program
|
|
|
178
186
|
.description('Remove OpalServe from an AI editor')
|
|
179
187
|
.option('--all', 'Unlink from every editor where present')
|
|
180
188
|
.action(unlinkCommand);
|
|
181
|
-
//
|
|
189
|
+
// Bare `opalserve` (no subcommand): context-aware welcome.
|
|
182
190
|
if (process.argv.length <= 2) {
|
|
183
|
-
|
|
191
|
+
defaultCommand().catch((err) => {
|
|
192
|
+
process.stderr.write(`opalserve: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
program.parse();
|
|
184
198
|
}
|
|
185
|
-
program.parse();
|
|
186
199
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
package/dist/constants.js
CHANGED
package/package.json
CHANGED