bridgellm 0.1.7 → 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 +113 -63
- 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 +8 -58
- 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 -28
- 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.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
|
*/
|
package/dist/ui.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createInterface } from 'node:readline';
|
|
1
|
+
import { createInterface, emitKeypressEvents } from 'node:readline';
|
|
2
2
|
const DIM = '\x1b[2m';
|
|
3
3
|
const BOLD = '\x1b[1m';
|
|
4
4
|
const GREEN = '\x1b[32m';
|
|
@@ -6,6 +6,10 @@ const CYAN = '\x1b[36m';
|
|
|
6
6
|
const YELLOW = '\x1b[33m';
|
|
7
7
|
const RED = '\x1b[31m';
|
|
8
8
|
const RESET = '\x1b[0m';
|
|
9
|
+
// Restore cursor on exit (in case of crash during selection)
|
|
10
|
+
process.on('exit', () => {
|
|
11
|
+
process.stdout.write('\x1b[?25h');
|
|
12
|
+
});
|
|
9
13
|
export function heading(text) {
|
|
10
14
|
console.log(`\n ${BOLD}${text}${RESET}`);
|
|
11
15
|
}
|
|
@@ -34,60 +38,100 @@ export async function ask(question) {
|
|
|
34
38
|
});
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
41
|
+
* Arrow-key navigable select list.
|
|
42
|
+
* Use ↑/↓ to move, Enter to confirm.
|
|
39
43
|
*/
|
|
40
44
|
export async function select(label, options, extra) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
const items = [...options];
|
|
46
|
+
const newIdx = extra?.newLabel ? items.length : -1;
|
|
47
|
+
if (extra?.newLabel)
|
|
48
|
+
items.push(`+ ${extra.newLabel}`);
|
|
49
|
+
let selected = extra?.defaultIndex ?? 0;
|
|
50
|
+
if (selected < 0 || selected >= items.length)
|
|
51
|
+
selected = 0;
|
|
52
|
+
const totalLines = items.length;
|
|
53
|
+
// Print label
|
|
54
|
+
if (label) {
|
|
55
|
+
heading(label);
|
|
56
|
+
console.log('');
|
|
57
|
+
}
|
|
58
|
+
// Initial render
|
|
59
|
+
renderItems(items, selected, newIdx);
|
|
60
|
+
// Hide cursor during selection
|
|
61
|
+
process.stdout.write('\x1b[?25l');
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
emitKeypressEvents(process.stdin);
|
|
64
|
+
if (process.stdin.isTTY)
|
|
65
|
+
process.stdin.setRawMode(true);
|
|
66
|
+
process.stdin.resume();
|
|
67
|
+
const onKeypress = (_str, key) => {
|
|
68
|
+
if (!key)
|
|
69
|
+
return;
|
|
70
|
+
if (key.ctrl && key.name === 'c') {
|
|
71
|
+
cleanup();
|
|
72
|
+
process.exit(0);
|
|
73
|
+
}
|
|
74
|
+
if (key.name === 'up' && selected > 0) {
|
|
75
|
+
selected--;
|
|
76
|
+
rerender(items, selected, totalLines, newIdx);
|
|
77
|
+
}
|
|
78
|
+
else if (key.name === 'down' && selected < items.length - 1) {
|
|
79
|
+
selected++;
|
|
80
|
+
rerender(items, selected, totalLines, newIdx);
|
|
81
|
+
}
|
|
82
|
+
else if (key.name === 'return') {
|
|
83
|
+
cleanup();
|
|
84
|
+
console.log('');
|
|
85
|
+
if (selected === newIdx) {
|
|
86
|
+
resolve({ value: '', isNew: true });
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const clean = options[selected].replace(/\s*\(.*\)$/, '');
|
|
90
|
+
resolve({ value: clean, isNew: false });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const cleanup = () => {
|
|
95
|
+
process.stdout.write('\x1b[?25h'); // show cursor
|
|
96
|
+
process.stdin.removeListener('keypress', onKeypress);
|
|
97
|
+
if (process.stdin.isTTY)
|
|
98
|
+
process.stdin.setRawMode(false);
|
|
99
|
+
process.stdin.pause();
|
|
100
|
+
};
|
|
101
|
+
process.stdin.on('keypress', onKeypress);
|
|
45
102
|
});
|
|
46
|
-
|
|
47
|
-
|
|
103
|
+
}
|
|
104
|
+
function formatItem(item, index, selected, newIdx) {
|
|
105
|
+
const arrow = index === selected ? `${GREEN}❯${RESET}` : ' ';
|
|
106
|
+
let text;
|
|
107
|
+
if (index === selected) {
|
|
108
|
+
text = index === newIdx ? `${CYAN}${item}${RESET}` : `${CYAN}${BOLD}${item}${RESET}`;
|
|
48
109
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const idx = parseInt(input, 10) - 1;
|
|
52
|
-
if (idx >= 0 && idx < options.length) {
|
|
53
|
-
// Extract clean name (strip any metadata in parens)
|
|
54
|
-
const clean = options[idx].replace(/\s*\(.*\)$/, '');
|
|
55
|
-
return { value: clean, isNew: false };
|
|
110
|
+
else {
|
|
111
|
+
text = `${DIM}${item}${RESET}`;
|
|
56
112
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
113
|
+
return ` ${arrow} ${text}`;
|
|
114
|
+
}
|
|
115
|
+
function renderItems(items, selected, newIdx) {
|
|
116
|
+
for (let i = 0; i < items.length; i++) {
|
|
117
|
+
console.log(formatItem(items[i], i, selected, newIdx));
|
|
60
118
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
119
|
+
}
|
|
120
|
+
function rerender(items, selected, totalLines, newIdx) {
|
|
121
|
+
process.stdout.write(`\x1b[${totalLines}A`);
|
|
122
|
+
for (let i = 0; i < items.length; i++) {
|
|
123
|
+
process.stdout.write('\x1b[2K');
|
|
124
|
+
console.log(formatItem(items[i], i, selected, newIdx));
|
|
64
125
|
}
|
|
65
|
-
throw new Error('Invalid selection');
|
|
66
126
|
}
|
|
67
127
|
/**
|
|
68
|
-
*
|
|
128
|
+
* Arrow-key navigable role picker.
|
|
69
129
|
*/
|
|
70
|
-
export async function selectRole() {
|
|
130
|
+
export async function selectRole(defaultRole) {
|
|
71
131
|
const ROLES = ['backend', 'frontend', 'web', 'mobile', 'ios', 'android', 'infra', 'data', 'qa', 'design'];
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
for (let i = 0; i < ROLES.length; i += 2) {
|
|
76
|
-
const left = `${DIM}${i + 1}.${RESET} ${ROLES[i]}`;
|
|
77
|
-
const right = i + 1 < ROLES.length ? `${DIM}${i + 2}.${RESET} ${ROLES[i + 1]}` : '';
|
|
78
|
-
console.log(` ${left.padEnd(28)}${right}`);
|
|
79
|
-
}
|
|
80
|
-
console.log('');
|
|
81
|
-
const input = await ask(`${DIM}Enter number or name:${RESET} `);
|
|
82
|
-
const idx = parseInt(input, 10) - 1;
|
|
83
|
-
if (idx >= 0 && idx < ROLES.length) {
|
|
84
|
-
return ROLES[idx];
|
|
85
|
-
}
|
|
86
|
-
const normalized = input.toLowerCase().trim();
|
|
87
|
-
const match = ROLES.find(r => r === normalized);
|
|
88
|
-
if (match)
|
|
89
|
-
return match;
|
|
90
|
-
throw new Error(`Invalid role "${input}". Must be one of: ${ROLES.join(', ')}`);
|
|
132
|
+
const defaultIdx = defaultRole ? Math.max(0, ROLES.indexOf(defaultRole)) : 0;
|
|
133
|
+
const { value } = await select('Select your role', ROLES, { defaultIndex: defaultIdx });
|
|
134
|
+
return value;
|
|
91
135
|
}
|
|
92
136
|
/**
|
|
93
137
|
* Show a summary box.
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bridgellm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Let your AI coding agents talk to each other across services",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -48,7 +48,6 @@
|
|
|
48
48
|
"README.md"
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"commander": "^13.0.0",
|
|
52
51
|
"open": "^10.0.0"
|
|
53
52
|
},
|
|
54
53
|
"devDependencies": {
|