bridgellm 0.1.0 → 0.1.2
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 +48 -27
- package/dist/commands/connect.js +11 -30
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/login.js +22 -32
- package/dist/commands/login.js.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/ui.d.ts +25 -0
- package/dist/ui.js +105 -0
- package/dist/ui.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,24 +4,31 @@ Let AI coding agents talk to each other across teams.
|
|
|
4
4
|
|
|
5
5
|
When two engineers work on different services, their AI agents (Claude Code, Cursor, etc.) can share API contracts, ask questions, and get answers — without Slack.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
#
|
|
11
|
-
|
|
10
|
+
# Option 1: Install globally (use 'bridgellm' directly)
|
|
11
|
+
npm install -g bridgellm
|
|
12
12
|
|
|
13
|
-
#
|
|
14
|
-
npx bridgellm
|
|
13
|
+
# Option 2: No install (use 'npx' each time)
|
|
14
|
+
npx bridgellm
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 1. Login with GitHub (one-time)
|
|
21
|
+
bridgellm login
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
# 2. Connect your project (in your project directory)
|
|
24
|
+
bridgellm connect
|
|
25
|
+
# → picks your team, feature, and role
|
|
26
|
+
# → writes .mcp.json + CLAUDE.md
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
# 3. Restart Claude Code — done!
|
|
29
|
+
```
|
|
23
30
|
|
|
24
|
-
Your agent
|
|
31
|
+
Your agent now has 6 tools to coordinate with other agents:
|
|
25
32
|
|
|
26
33
|
| Tool | What it does |
|
|
27
34
|
|------|-------------|
|
|
@@ -35,22 +42,31 @@ Your agent gets 6 tools:
|
|
|
35
42
|
## Commands
|
|
36
43
|
|
|
37
44
|
```bash
|
|
38
|
-
|
|
39
|
-
bridgellm
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
bridgellm
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
# Auth
|
|
46
|
+
bridgellm login # Login via GitHub OAuth
|
|
47
|
+
|
|
48
|
+
# Project setup
|
|
49
|
+
bridgellm connect # Connect this project to BridgeLLM
|
|
50
|
+
|
|
51
|
+
# Team management
|
|
52
|
+
bridgellm team create <name> # Create a team, get invite code
|
|
53
|
+
bridgellm team join <invite-code> # Join a team
|
|
54
|
+
|
|
55
|
+
# Settings
|
|
56
|
+
bridgellm config show # View current config
|
|
57
|
+
bridgellm config set role frontend # Change your role
|
|
58
|
+
bridgellm config set team my-team # Change your team
|
|
45
59
|
```
|
|
46
60
|
|
|
61
|
+
> All commands also work with `npx`: `npx bridgellm login`, `npx bridgellm connect`, etc.
|
|
62
|
+
|
|
47
63
|
## How It Works
|
|
48
64
|
|
|
49
65
|
```
|
|
50
|
-
Your Claude ──── bridge_write ────▶ BridgeLLM
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
66
|
+
Your Claude ──── bridge_write ────▶ BridgeLLM ◀──── bridge_read ──── Their Claude
|
|
67
|
+
│
|
|
68
|
+
PostgreSQL
|
|
69
|
+
(shared context)
|
|
54
70
|
```
|
|
55
71
|
|
|
56
72
|
No LLM calls on the server. Zero AI costs. Just a database that your agents read and write to.
|
|
@@ -59,9 +75,14 @@ No LLM calls on the server. Zero AI costs. Just a database that your agents read
|
|
|
59
75
|
|
|
60
76
|
Global config lives in `~/.bridgellm/`. Per-project config in `.bridgellm.yml`.
|
|
61
77
|
|
|
62
|
-
| Setting |
|
|
63
|
-
|
|
64
|
-
| Token | Global |
|
|
65
|
-
| Role | Global |
|
|
66
|
-
| Team | Global |
|
|
67
|
-
| Feature |
|
|
78
|
+
| Setting | Scope | Set by |
|
|
79
|
+
|---------|-------|--------|
|
|
80
|
+
| Token | Global | `bridgellm login` |
|
|
81
|
+
| Role | Global | `bridgellm login` or `bridgellm config set role` |
|
|
82
|
+
| Team | Global (local override) | `bridgellm login` or `bridgellm config set team` |
|
|
83
|
+
| Feature | Per-project | `bridgellm connect` |
|
|
84
|
+
|
|
85
|
+
## Requirements
|
|
86
|
+
|
|
87
|
+
- Node.js 18+
|
|
88
|
+
- An MCP-compatible AI agent (Claude Code, Cursor, etc.)
|
package/dist/commands/connect.js
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import { createInterface } from 'node:readline';
|
|
4
3
|
import { getMergedConfig, getLocalConfig, saveLocalConfig, } from '../config.js';
|
|
4
|
+
import { heading, info, success, ask, select, summary } from '../ui.js';
|
|
5
5
|
const CLAUDE_MD_START = '<!-- bridgellm:start -->';
|
|
6
6
|
const CLAUDE_MD_END = '<!-- bridgellm:end -->';
|
|
7
|
-
async function ask(question) {
|
|
8
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
9
|
-
return new Promise((resolve) => {
|
|
10
|
-
rl.question(question, (answer) => {
|
|
11
|
-
rl.close();
|
|
12
|
-
resolve(answer.trim());
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
7
|
async function apiFetch(serverUrl, token, path) {
|
|
17
8
|
const res = await fetch(`${serverUrl}${path}`, {
|
|
18
9
|
headers: { Authorization: `Bearer ${token}` },
|
|
@@ -31,39 +22,28 @@ export async function connect(cwd) {
|
|
|
31
22
|
if (!config.role) {
|
|
32
23
|
throw new Error('No role configured. Run `bridgellm login` first.');
|
|
33
24
|
}
|
|
34
|
-
|
|
25
|
+
heading('BridgeLLM Connect');
|
|
26
|
+
info(`Team: ${config.team} • Role: ${config.role}`);
|
|
35
27
|
// Determine feature
|
|
36
28
|
let feature = config.feature;
|
|
37
29
|
if (!feature) {
|
|
38
|
-
// Fetch available features
|
|
39
30
|
try {
|
|
40
31
|
const { features } = await apiFetch(config.server, config.token, '/api/features');
|
|
41
32
|
if (features.length > 0) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
});
|
|
46
|
-
console.log(` ${features.length + 1}. New feature`);
|
|
47
|
-
const choice = await ask('\n Select feature: ');
|
|
48
|
-
const idx = parseInt(choice, 10) - 1;
|
|
49
|
-
if (idx >= 0 && idx < features.length) {
|
|
50
|
-
feature = features[idx].name;
|
|
51
|
-
}
|
|
52
|
-
else if (idx === features.length || isNaN(idx)) {
|
|
53
|
-
feature = isNaN(idx) ? choice : await ask(' Feature name: ');
|
|
54
|
-
}
|
|
33
|
+
const labels = features.map((f) => `${f.name} (${f.context_count} contexts, ${f.active_sessions} online)`);
|
|
34
|
+
const result = await select('Select feature', labels, { newLabel: 'Create new feature' });
|
|
35
|
+
feature = result.value;
|
|
55
36
|
}
|
|
56
37
|
else {
|
|
57
|
-
feature = await ask('
|
|
38
|
+
feature = await ask('No features yet. Feature name: ');
|
|
58
39
|
}
|
|
59
40
|
}
|
|
60
41
|
catch {
|
|
61
|
-
feature = await ask('
|
|
42
|
+
feature = await ask('Feature name: ');
|
|
62
43
|
}
|
|
63
44
|
}
|
|
64
45
|
if (!feature)
|
|
65
46
|
throw new Error('Feature name is required.');
|
|
66
|
-
console.log(` Feature: ${feature}`);
|
|
67
47
|
// Save local config
|
|
68
48
|
const local = await getLocalConfig(cwd);
|
|
69
49
|
await saveLocalConfig(cwd, { ...local, feature });
|
|
@@ -111,8 +91,9 @@ ${CLAUDE_MD_END}`;
|
|
|
111
91
|
claudeContent + (claudeContent.endsWith('\n') ? '\n' : '\n\n') + claudeBlock + '\n';
|
|
112
92
|
}
|
|
113
93
|
await writeFile(claudePath, claudeContent);
|
|
114
|
-
|
|
115
|
-
|
|
94
|
+
summary({ Team: config.team, Feature: feature, Role: config.role });
|
|
95
|
+
success('Wrote .bridgellm.yml, .mcp.json, CLAUDE.md');
|
|
96
|
+
info('Restart Claude Code to connect.\n');
|
|
116
97
|
}
|
|
117
98
|
function escapeRegex(s) {
|
|
118
99
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import http from 'node:http';
|
|
2
2
|
import { saveToken, saveServerUrl, saveGlobalConfig, getGlobalConfig } from '../config.js';
|
|
3
|
+
import { heading, info, success, ask, select, selectRole, summary } from '../ui.js';
|
|
3
4
|
export async function login(serverUrl) {
|
|
4
5
|
const server = http.createServer();
|
|
5
6
|
const port = await new Promise((resolve, reject) => {
|
|
@@ -19,8 +20,9 @@ export async function login(serverUrl) {
|
|
|
19
20
|
});
|
|
20
21
|
});
|
|
21
22
|
const authUrl = `${serverUrl}/auth/github?cli_port=${port}`;
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
heading('GitHub Authentication');
|
|
24
|
+
info('Opening browser...');
|
|
25
|
+
info(`If it doesn't open, visit:\n ${authUrl}\n`);
|
|
24
26
|
const open = (await import('open')).default;
|
|
25
27
|
await open(authUrl);
|
|
26
28
|
const result = await new Promise((resolve, reject) => {
|
|
@@ -60,23 +62,17 @@ export async function login(serverUrl) {
|
|
|
60
62
|
server.close();
|
|
61
63
|
await saveToken(result.token);
|
|
62
64
|
await saveServerUrl(serverUrl);
|
|
63
|
-
|
|
65
|
+
success(`Logged in as ${result.name}`);
|
|
64
66
|
// Check if global config already has team + role
|
|
65
67
|
const existing = await getGlobalConfig();
|
|
66
68
|
if (existing.team && existing.role) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
summary({ Team: existing.team, Role: existing.role });
|
|
70
|
+
info('Run `bridgellm connect` in your project directory.\n');
|
|
69
71
|
return;
|
|
70
72
|
}
|
|
71
|
-
// First-time setup
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const ask = (q) => {
|
|
75
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
76
|
-
return new Promise((resolve) => {
|
|
77
|
-
rl.question(q, (a) => { rl.close(); resolve(a.trim()); });
|
|
78
|
-
});
|
|
79
|
-
};
|
|
73
|
+
// First-time setup
|
|
74
|
+
heading('First-time setup');
|
|
75
|
+
console.log('');
|
|
80
76
|
// Team
|
|
81
77
|
let teamName;
|
|
82
78
|
const meRes = await fetch(`${serverUrl}/api/me`, {
|
|
@@ -85,15 +81,12 @@ export async function login(serverUrl) {
|
|
|
85
81
|
const me = await meRes.json();
|
|
86
82
|
if (me.team) {
|
|
87
83
|
teamName = me.team.name;
|
|
88
|
-
|
|
84
|
+
success(`Team: ${teamName}`);
|
|
89
85
|
}
|
|
90
86
|
else {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const choice = await ask(' → ');
|
|
95
|
-
if (choice === '1') {
|
|
96
|
-
const name = await ask(' Team name: ');
|
|
87
|
+
const { value, isNew } = await select('No team yet', ['Create a new team', 'Join with invite code']);
|
|
88
|
+
if (value === 'Create a new team') {
|
|
89
|
+
const name = await ask('Team name: ');
|
|
97
90
|
const res = await fetch(`${serverUrl}/api/teams`, {
|
|
98
91
|
method: 'POST',
|
|
99
92
|
headers: { Authorization: `Bearer ${result.token}`, 'Content-Type': 'application/json' },
|
|
@@ -101,10 +94,12 @@ export async function login(serverUrl) {
|
|
|
101
94
|
});
|
|
102
95
|
const data = await res.json();
|
|
103
96
|
teamName = data.team.name;
|
|
104
|
-
|
|
97
|
+
success(`Created "${teamName}"`);
|
|
98
|
+
info(`Invite code: ${data.invite_code}`);
|
|
99
|
+
info('Share this code so teammates can join.\n');
|
|
105
100
|
}
|
|
106
101
|
else {
|
|
107
|
-
const code = await ask('
|
|
102
|
+
const code = await ask('Invite code: ');
|
|
108
103
|
const res = await fetch(`${serverUrl}/api/teams/join`, {
|
|
109
104
|
method: 'POST',
|
|
110
105
|
headers: { Authorization: `Bearer ${result.token}`, 'Content-Type': 'application/json' },
|
|
@@ -112,18 +107,13 @@ export async function login(serverUrl) {
|
|
|
112
107
|
});
|
|
113
108
|
const data = await res.json();
|
|
114
109
|
teamName = data.team.name;
|
|
115
|
-
|
|
110
|
+
success(`Joined "${teamName}"`);
|
|
116
111
|
}
|
|
117
112
|
}
|
|
118
113
|
// Role
|
|
119
|
-
const
|
|
120
|
-
console.log(`\n Your role: ${ROLES.join(', ')}`);
|
|
121
|
-
const role = await ask(' → ');
|
|
122
|
-
if (!ROLES.includes(role)) {
|
|
123
|
-
throw new Error(`Invalid role. Must be one of: ${ROLES.join(', ')}`);
|
|
124
|
-
}
|
|
114
|
+
const role = await selectRole();
|
|
125
115
|
await saveGlobalConfig({ team: teamName, role });
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
summary({ Team: teamName, Role: role });
|
|
117
|
+
info('Run `bridgellm connect` in your project directory.\n');
|
|
128
118
|
}
|
|
129
119
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -92,12 +92,13 @@ config
|
|
|
92
92
|
}
|
|
93
93
|
else if (key === 'role') {
|
|
94
94
|
const ROLES = ['backend', 'frontend', 'web', 'mobile', 'ios', 'android', 'infra', 'data', 'qa', 'design'];
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
const normalized = value.toLowerCase().trim();
|
|
96
|
+
if (!ROLES.includes(normalized)) {
|
|
97
|
+
console.error(` Invalid role "${value}". Must be one of: ${ROLES.join(', ')}`);
|
|
97
98
|
process.exit(1);
|
|
98
99
|
}
|
|
99
|
-
await saveGlobalConfig({ ...global, role:
|
|
100
|
-
console.log(` Role set to: ${
|
|
100
|
+
await saveGlobalConfig({ ...global, role: normalized });
|
|
101
|
+
console.log(` Role set to: ${normalized}`);
|
|
101
102
|
}
|
|
102
103
|
else {
|
|
103
104
|
console.error(` Unknown key: ${key}. Use "team" or "role".`);
|
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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"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare function heading(text: string): void;
|
|
2
|
+
export declare function info(text: string): void;
|
|
3
|
+
export declare function success(text: string): void;
|
|
4
|
+
export declare function warn(text: string): void;
|
|
5
|
+
export declare function error(text: string): void;
|
|
6
|
+
export declare function dim(text: string): void;
|
|
7
|
+
export declare function ask(question: string): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Show a numbered list and let the user pick one.
|
|
10
|
+
* Returns the selected item string.
|
|
11
|
+
*/
|
|
12
|
+
export declare function select(label: string, options: string[], extra?: {
|
|
13
|
+
newLabel?: string;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
value: string;
|
|
16
|
+
isNew: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Show a role picker with numbered grid layout.
|
|
20
|
+
*/
|
|
21
|
+
export declare function selectRole(): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Show a summary box.
|
|
24
|
+
*/
|
|
25
|
+
export declare function summary(items: Record<string, string>): void;
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline';
|
|
2
|
+
const DIM = '\x1b[2m';
|
|
3
|
+
const BOLD = '\x1b[1m';
|
|
4
|
+
const GREEN = '\x1b[32m';
|
|
5
|
+
const CYAN = '\x1b[36m';
|
|
6
|
+
const YELLOW = '\x1b[33m';
|
|
7
|
+
const RED = '\x1b[31m';
|
|
8
|
+
const RESET = '\x1b[0m';
|
|
9
|
+
export function heading(text) {
|
|
10
|
+
console.log(`\n ${BOLD}${text}${RESET}`);
|
|
11
|
+
}
|
|
12
|
+
export function info(text) {
|
|
13
|
+
console.log(` ${text}`);
|
|
14
|
+
}
|
|
15
|
+
export function success(text) {
|
|
16
|
+
console.log(` ${GREEN}✓${RESET} ${text}`);
|
|
17
|
+
}
|
|
18
|
+
export function warn(text) {
|
|
19
|
+
console.log(` ${YELLOW}!${RESET} ${text}`);
|
|
20
|
+
}
|
|
21
|
+
export function error(text) {
|
|
22
|
+
console.error(` ${RED}✗${RESET} ${text}`);
|
|
23
|
+
}
|
|
24
|
+
export function dim(text) {
|
|
25
|
+
console.log(` ${DIM}${text}${RESET}`);
|
|
26
|
+
}
|
|
27
|
+
export async function ask(question) {
|
|
28
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
rl.question(` ${question}`, (answer) => {
|
|
31
|
+
rl.close();
|
|
32
|
+
resolve(answer.trim());
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Show a numbered list and let the user pick one.
|
|
38
|
+
* Returns the selected item string.
|
|
39
|
+
*/
|
|
40
|
+
export async function select(label, options, extra) {
|
|
41
|
+
heading(label);
|
|
42
|
+
console.log('');
|
|
43
|
+
options.forEach((o, i) => {
|
|
44
|
+
console.log(` ${DIM}${i + 1}.${RESET} ${o}`);
|
|
45
|
+
});
|
|
46
|
+
if (extra?.newLabel) {
|
|
47
|
+
console.log(` ${DIM}${options.length + 1}.${RESET} ${CYAN}+ ${extra.newLabel}${RESET}`);
|
|
48
|
+
}
|
|
49
|
+
console.log('');
|
|
50
|
+
const input = await ask(`${DIM}Enter number${options.length > 0 ? ` (1-${options.length + (extra?.newLabel ? 1 : 0)})` : ''}:${RESET} `);
|
|
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 };
|
|
56
|
+
}
|
|
57
|
+
if (extra?.newLabel && (idx === options.length || isNaN(idx))) {
|
|
58
|
+
const name = isNaN(idx) && input ? input : await ask('Name: ');
|
|
59
|
+
return { value: name, isNew: true };
|
|
60
|
+
}
|
|
61
|
+
// Treat raw text input as a name
|
|
62
|
+
if (input && isNaN(idx)) {
|
|
63
|
+
return { value: input, isNew: true };
|
|
64
|
+
}
|
|
65
|
+
throw new Error('Invalid selection');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Show a role picker with numbered grid layout.
|
|
69
|
+
*/
|
|
70
|
+
export async function selectRole() {
|
|
71
|
+
const ROLES = ['backend', 'frontend', 'web', 'mobile', 'ios', 'android', 'infra', 'data', 'qa', 'design'];
|
|
72
|
+
heading('Select your role');
|
|
73
|
+
console.log('');
|
|
74
|
+
// Display in 2 columns
|
|
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(', ')}`);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Show a summary box.
|
|
94
|
+
*/
|
|
95
|
+
export function summary(items) {
|
|
96
|
+
console.log('');
|
|
97
|
+
console.log(` ${DIM}┌─────────────────────────────────┐${RESET}`);
|
|
98
|
+
for (const [key, val] of Object.entries(items)) {
|
|
99
|
+
const line = ` ${key}: ${BOLD}${val}${RESET}`;
|
|
100
|
+
console.log(` ${DIM}│${RESET} ${line.padEnd(40)}${DIM}│${RESET}`);
|
|
101
|
+
}
|
|
102
|
+
console.log(` ${DIM}└─────────────────────────────────┘${RESET}`);
|
|
103
|
+
console.log('');
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|