bridgellm 0.1.8 → 0.2.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.
- package/README.md +116 -64
- package/dist/commands/connect.d.ts +1 -1
- package/dist/commands/connect.js +28 -96
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/login.js +4 -57
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/team.js +7 -10
- package/dist/commands/team.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +25 -46
- package/dist/config.js.map +1 -1
- package/dist/index.js +169 -116
- package/dist/index.js.map +1 -1
- package/dist/ui.d.ts +5 -4
- package/dist/ui.js +88 -44
- package/dist/ui.js.map +1 -1
- package/package.json +1 -2
package/dist/config.js
CHANGED
|
@@ -16,7 +16,7 @@ export async function getToken() {
|
|
|
16
16
|
return (await readFile(join(BRIDGELLM_DIR, 'token'), 'utf-8')).trim();
|
|
17
17
|
}
|
|
18
18
|
catch {
|
|
19
|
-
throw new Error('Not logged in.
|
|
19
|
+
throw new Error('Not logged in.');
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
// ── Server ──
|
|
@@ -83,7 +83,28 @@ export async function getMergedConfig(cwd) {
|
|
|
83
83
|
feature: local.feature,
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
|
-
// ──
|
|
86
|
+
// ── Write .mcp.json ──
|
|
87
|
+
export async function writeMcpJson(cwd) {
|
|
88
|
+
const config = await getMergedConfig(cwd);
|
|
89
|
+
if (!config.feature || !config.role) {
|
|
90
|
+
throw new Error('Feature and role are required to write .mcp.json');
|
|
91
|
+
}
|
|
92
|
+
const mcpConfig = {
|
|
93
|
+
mcpServers: {
|
|
94
|
+
bridgellm: {
|
|
95
|
+
type: 'http',
|
|
96
|
+
url: `${config.server}/mcp`,
|
|
97
|
+
headers: {
|
|
98
|
+
Authorization: `Bearer ${config.token}`,
|
|
99
|
+
'X-BridgeLLM-Feature': config.feature,
|
|
100
|
+
'X-BridgeLLM-Role': config.role,
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
await writeFile(join(cwd, '.mcp.json'), JSON.stringify(mcpConfig, null, 2) + '\n');
|
|
106
|
+
}
|
|
107
|
+
// ── Clean (project config only) ──
|
|
87
108
|
async function tryUnlink(path) {
|
|
88
109
|
try {
|
|
89
110
|
await unlink(path);
|
|
@@ -99,28 +120,6 @@ export async function clean(cwd) {
|
|
|
99
120
|
removed.push('.mcp.json');
|
|
100
121
|
if (await tryUnlink(join(cwd, '.bridgellm.yml')))
|
|
101
122
|
removed.push('.bridgellm.yml');
|
|
102
|
-
// Remove bridgellm block from CLAUDE.md
|
|
103
|
-
const claudePath = join(cwd, 'CLAUDE.md');
|
|
104
|
-
try {
|
|
105
|
-
const content = await readFile(claudePath, 'utf-8');
|
|
106
|
-
const START = '<!-- bridgellm:start -->';
|
|
107
|
-
const END = '<!-- bridgellm:end -->';
|
|
108
|
-
if (content.includes(START)) {
|
|
109
|
-
const regex = new RegExp(`\\n?${START.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}[\\s\\S]*?${END.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\n?`);
|
|
110
|
-
const cleaned = content.replace(regex, '\n').trim();
|
|
111
|
-
if (cleaned) {
|
|
112
|
-
await writeFile(claudePath, cleaned + '\n');
|
|
113
|
-
removed.push('CLAUDE.md (bridgellm block)');
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
await unlink(claudePath);
|
|
117
|
-
removed.push('CLAUDE.md');
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
// no CLAUDE.md
|
|
123
|
-
}
|
|
124
123
|
if (removed.length > 0) {
|
|
125
124
|
console.log(` Removed: ${removed.join(', ')}`);
|
|
126
125
|
}
|
|
@@ -128,29 +127,9 @@ export async function clean(cwd) {
|
|
|
128
127
|
console.log(' Nothing to clean.');
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
|
-
// ── Reset (local + global) ──
|
|
130
|
+
// ── Reset (local + global, offline-safe) ──
|
|
132
131
|
export async function reset(cwd) {
|
|
133
|
-
// Revoke token on the server before deleting locally
|
|
134
|
-
try {
|
|
135
|
-
const token = await getToken();
|
|
136
|
-
const serverUrl = await getServerUrl();
|
|
137
|
-
const res = await fetch(`${serverUrl}/api/tokens`, {
|
|
138
|
-
method: 'DELETE',
|
|
139
|
-
headers: { Authorization: `Bearer ${token}` },
|
|
140
|
-
});
|
|
141
|
-
if (res.ok) {
|
|
142
|
-
console.log(' Token revoked on server.');
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
console.log(' Could not revoke token on server (may already be expired).');
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
console.log(' Could not reach server to revoke token. Continuing with local cleanup.');
|
|
150
|
-
}
|
|
151
|
-
// Clean local first
|
|
152
132
|
await clean(cwd);
|
|
153
|
-
// Remove global config
|
|
154
133
|
try {
|
|
155
134
|
await rm(BRIDGELLM_DIR, { recursive: true, force: true });
|
|
156
135
|
console.log(' Removed ~/.bridgellm/');
|
|
@@ -158,7 +137,7 @@ export async function reset(cwd) {
|
|
|
158
137
|
catch {
|
|
159
138
|
// already gone
|
|
160
139
|
}
|
|
161
|
-
console.log(' Reset complete.
|
|
140
|
+
console.log(' Reset complete.');
|
|
162
141
|
}
|
|
163
142
|
function parseSimpleYaml(raw) {
|
|
164
143
|
const result = {};
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,2DAA2D,CAAC;AAE1F,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAoBpD,KAAK,UAAU,SAAS;IACtB,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,cAAc;AAEd,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa;IAC3C,MAAM,SAAS,EAAE,CAAC;IAClB,MAAM,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,138 +1,191 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { getToken, getGlobalConfig, saveGlobalConfig, getLocalConfig, saveLocalConfig, getServerUrl, writeMcpJson, clean, reset, DEFAULT_SERVER, } from './config.js';
|
|
3
|
+
import { success, info, error, summary, ask, select, selectRole } from './ui.js';
|
|
3
4
|
import { login } from './commands/login.js';
|
|
4
|
-
import {
|
|
5
|
+
import { selectFeature } from './commands/connect.js';
|
|
5
6
|
import { createTeam, joinTeam } from './commands/team.js';
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
.
|
|
10
|
-
|
|
11
|
-
.version('0.1.0');
|
|
12
|
-
program
|
|
13
|
-
.command('login')
|
|
14
|
-
.description('Authenticate with GitHub OAuth')
|
|
15
|
-
.option('-s, --server <url>', 'Server URL', DEFAULT_SERVER)
|
|
16
|
-
.action(async (opts) => {
|
|
7
|
+
const VERSION = '0.2.0';
|
|
8
|
+
const ROLES = ['backend', 'frontend', 'web', 'mobile', 'ios', 'android', 'infra', 'data', 'qa', 'design'];
|
|
9
|
+
async function main() {
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const flag = args[0];
|
|
17
12
|
try {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
await createTeam(name);
|
|
13
|
+
if (flag === '--help' || flag === '-h') {
|
|
14
|
+
printHelp();
|
|
15
|
+
}
|
|
16
|
+
else if (flag === '--version' || flag === '-v') {
|
|
17
|
+
console.log(VERSION);
|
|
18
|
+
}
|
|
19
|
+
else if (flag === '--reset') {
|
|
20
|
+
await reset(process.cwd());
|
|
21
|
+
}
|
|
22
|
+
else if (flag === '--disconnect') {
|
|
23
|
+
await clean(process.cwd());
|
|
24
|
+
}
|
|
25
|
+
else if (flag === '--reconfigure') {
|
|
26
|
+
await handleSetup(true);
|
|
27
|
+
}
|
|
28
|
+
else if (flag === '--set') {
|
|
29
|
+
await handleSet(args[1], args[2]);
|
|
30
|
+
}
|
|
31
|
+
else if (!flag) {
|
|
32
|
+
await handleSetup(false);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
error(`Unknown flag: ${flag}`);
|
|
36
|
+
printHelp();
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
46
39
|
}
|
|
47
40
|
catch (err) {
|
|
48
|
-
|
|
41
|
+
error(err.message);
|
|
49
42
|
process.exit(1);
|
|
50
43
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
|
|
44
|
+
}
|
|
45
|
+
async function handleSetup(force) {
|
|
46
|
+
const cwd = process.cwd();
|
|
47
|
+
// Step 1: Ensure logged in
|
|
48
|
+
let token;
|
|
56
49
|
try {
|
|
57
|
-
await
|
|
50
|
+
token = await getToken();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
console.log('');
|
|
54
|
+
info('Not logged in — opening browser...');
|
|
55
|
+
await login(DEFAULT_SERVER);
|
|
56
|
+
token = await getToken();
|
|
57
|
+
}
|
|
58
|
+
const server = await getServerUrl();
|
|
59
|
+
const global = await getGlobalConfig();
|
|
60
|
+
// Step 2: Ensure team
|
|
61
|
+
if (!global.team || force) {
|
|
62
|
+
// Check server for existing team membership
|
|
63
|
+
if (!global.team) {
|
|
64
|
+
try {
|
|
65
|
+
const res = await fetch(`${server}/api/me`, {
|
|
66
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
67
|
+
});
|
|
68
|
+
const me = (await res.json());
|
|
69
|
+
if (me.team) {
|
|
70
|
+
global.team = me.team.name;
|
|
71
|
+
await saveGlobalConfig(global);
|
|
72
|
+
success(`Team: ${me.team.name}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// offline or error
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!global.team || force) {
|
|
80
|
+
console.log('');
|
|
81
|
+
const { value } = await select('Team setup', ['Create a new team', 'Join with invite code']);
|
|
82
|
+
if (value === 'Create a new team') {
|
|
83
|
+
const name = await ask('Team name: ');
|
|
84
|
+
await createTeam(name);
|
|
85
|
+
const updated = await getGlobalConfig();
|
|
86
|
+
global.team = updated.team;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const code = await ask('Invite code: ');
|
|
90
|
+
await joinTeam(code);
|
|
91
|
+
const updated = await getGlobalConfig();
|
|
92
|
+
global.team = updated.team;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
58
95
|
}
|
|
59
|
-
|
|
60
|
-
|
|
96
|
+
// Step 3: Ensure role
|
|
97
|
+
if (!global.role || force) {
|
|
98
|
+
console.log('');
|
|
99
|
+
const role = await selectRole(global.role);
|
|
100
|
+
global.role = role;
|
|
101
|
+
await saveGlobalConfig(global);
|
|
102
|
+
success(`Role: ${role}`);
|
|
103
|
+
}
|
|
104
|
+
// Step 4: Feature for this project
|
|
105
|
+
const local = await getLocalConfig(cwd);
|
|
106
|
+
if (local.feature && !force) {
|
|
107
|
+
// Already connected — show status
|
|
108
|
+
console.log('');
|
|
109
|
+
success('Connected');
|
|
110
|
+
summary({
|
|
111
|
+
Team: global.team,
|
|
112
|
+
Feature: local.feature,
|
|
113
|
+
Role: global.role,
|
|
114
|
+
Server: server,
|
|
115
|
+
});
|
|
116
|
+
info('Run with --reconfigure to change settings.\n');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Select feature and write .mcp.json
|
|
120
|
+
console.log('');
|
|
121
|
+
const feature = await selectFeature(server, token, local.feature);
|
|
122
|
+
await saveLocalConfig(cwd, { ...local, feature });
|
|
123
|
+
await writeMcpJson(cwd);
|
|
124
|
+
summary({
|
|
125
|
+
Team: global.team,
|
|
126
|
+
Feature: feature,
|
|
127
|
+
Role: global.role,
|
|
128
|
+
});
|
|
129
|
+
success('Wrote .mcp.json');
|
|
130
|
+
info('Restart Claude Code to connect.\n');
|
|
131
|
+
}
|
|
132
|
+
async function handleSet(key, value) {
|
|
133
|
+
if (!key || !value) {
|
|
134
|
+
error('Usage: bridgellm --set <key> <value>');
|
|
135
|
+
info('Keys: team, role, feature');
|
|
61
136
|
process.exit(1);
|
|
62
137
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.command('config')
|
|
66
|
-
.description('View or update settings');
|
|
67
|
-
config
|
|
68
|
-
.command('show')
|
|
69
|
-
.description('Show current config')
|
|
70
|
-
.action(async () => {
|
|
71
|
-
try {
|
|
138
|
+
const cwd = process.cwd();
|
|
139
|
+
if (key === 'team') {
|
|
72
140
|
const global = await getGlobalConfig();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
console.log(` Team: ${global.team ?? '(not set)'}`);
|
|
76
|
-
console.log(` Role: ${global.role ?? '(not set)'}`);
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
console.error(err.message);
|
|
80
|
-
process.exit(1);
|
|
141
|
+
await saveGlobalConfig({ ...global, team: value });
|
|
142
|
+
success(`Team updated to "${value}"`);
|
|
81
143
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
.action(async (key, value) => {
|
|
87
|
-
try {
|
|
88
|
-
const global = await getGlobalConfig();
|
|
89
|
-
if (key === 'team') {
|
|
90
|
-
await saveGlobalConfig({ ...global, team: value });
|
|
91
|
-
console.log(` Team set to: ${value}`);
|
|
92
|
-
}
|
|
93
|
-
else if (key === 'role') {
|
|
94
|
-
const ROLES = ['backend', 'frontend', 'web', 'mobile', 'ios', 'android', 'infra', 'data', 'qa', 'design'];
|
|
95
|
-
const normalized = value.toLowerCase().trim();
|
|
96
|
-
if (!ROLES.includes(normalized)) {
|
|
97
|
-
console.error(` Invalid role "${value}". Must be one of: ${ROLES.join(', ')}`);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
await saveGlobalConfig({ ...global, role: normalized });
|
|
101
|
-
console.log(` Role set to: ${normalized}`);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
console.error(` Unknown key: ${key}. Use "team" or "role".`);
|
|
144
|
+
else if (key === 'role') {
|
|
145
|
+
const normalized = value.toLowerCase().trim();
|
|
146
|
+
if (!ROLES.includes(normalized)) {
|
|
147
|
+
error(`Invalid role "${value}". Must be one of: ${ROLES.join(', ')}`);
|
|
105
148
|
process.exit(1);
|
|
106
149
|
}
|
|
150
|
+
const global = await getGlobalConfig();
|
|
151
|
+
await saveGlobalConfig({ ...global, role: normalized });
|
|
152
|
+
success(`Role updated to "${normalized}"`);
|
|
107
153
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
});
|
|
113
|
-
program
|
|
114
|
-
.command('clean')
|
|
115
|
-
.description('Remove local project config (.mcp.json, .bridgellm.yml, CLAUDE.md bridgellm block)')
|
|
116
|
-
.action(async () => {
|
|
117
|
-
try {
|
|
118
|
-
await clean(process.cwd());
|
|
154
|
+
else if (key === 'feature') {
|
|
155
|
+
const local = await getLocalConfig(cwd);
|
|
156
|
+
await saveLocalConfig(cwd, { ...local, feature: value });
|
|
157
|
+
success(`Feature updated to "${value}"`);
|
|
119
158
|
}
|
|
120
|
-
|
|
121
|
-
|
|
159
|
+
else {
|
|
160
|
+
error(`Unknown key "${key}". Use: team, role, feature`);
|
|
122
161
|
process.exit(1);
|
|
123
162
|
}
|
|
124
|
-
|
|
125
|
-
program
|
|
126
|
-
.command('reset')
|
|
127
|
-
.description('Remove everything (local + global config) and start fresh')
|
|
128
|
-
.action(async () => {
|
|
163
|
+
// Update .mcp.json if possible
|
|
129
164
|
try {
|
|
130
|
-
await
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
165
|
+
await writeMcpJson(cwd);
|
|
166
|
+
success('.mcp.json updated');
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// not fully configured yet — that's fine
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function printHelp() {
|
|
173
|
+
console.log(`
|
|
174
|
+
bridgellm — let AI coding agents talk to each other
|
|
175
|
+
|
|
176
|
+
Usage:
|
|
177
|
+
bridgellm Set up or show status
|
|
178
|
+
bridgellm --set <key> <value> Change a setting (team, role, feature)
|
|
179
|
+
bridgellm --reconfigure Re-run full setup
|
|
180
|
+
bridgellm --disconnect Remove project config
|
|
181
|
+
bridgellm --reset Wipe all local config
|
|
182
|
+
|
|
183
|
+
Examples:
|
|
184
|
+
bridgellm First-time setup or show status
|
|
185
|
+
bridgellm --set role frontend Switch role
|
|
186
|
+
bridgellm --set feature checkout Switch feature
|
|
187
|
+
bridgellm --reconfigure Change team, role, or feature
|
|
188
|
+
`);
|
|
189
|
+
}
|
|
190
|
+
main();
|
|
138
191
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts
CHANGED
|
@@ -6,19 +6,20 @@ export declare function error(text: string): void;
|
|
|
6
6
|
export declare function dim(text: string): void;
|
|
7
7
|
export declare function ask(question: string): Promise<string>;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Arrow-key navigable select list.
|
|
10
|
+
* Use ↑/↓ to move, Enter to confirm.
|
|
11
11
|
*/
|
|
12
12
|
export declare function select(label: string, options: string[], extra?: {
|
|
13
13
|
newLabel?: string;
|
|
14
|
+
defaultIndex?: number;
|
|
14
15
|
}): Promise<{
|
|
15
16
|
value: string;
|
|
16
17
|
isNew: boolean;
|
|
17
18
|
}>;
|
|
18
19
|
/**
|
|
19
|
-
*
|
|
20
|
+
* Arrow-key navigable role picker.
|
|
20
21
|
*/
|
|
21
|
-
export declare function selectRole(): Promise<string>;
|
|
22
|
+
export declare function selectRole(defaultRole?: string): Promise<string>;
|
|
22
23
|
/**
|
|
23
24
|
* Show a summary box.
|
|
24
25
|
*/
|