@specforge/mcp 2.5.0 → 2.5.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.
@@ -17,4 +17,6 @@ export { registerBlockedCommand } from './blocked.js';
17
17
  export { registerReviewCommand } from './review/index.js';
18
18
  export { registerFeedbackCommand } from './feedback.js';
19
19
  export { registerBlueprintsCommand } from './blueprints.js';
20
+ export { registerMembersCommand } from './members.js';
21
+ export { registerInvitationsCommand } from './invitations.js';
20
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC"}
@@ -17,4 +17,6 @@ export { registerBlockedCommand } from './blocked.js';
17
17
  export { registerReviewCommand } from './review/index.js';
18
18
  export { registerFeedbackCommand } from './feedback.js';
19
19
  export { registerBlueprintsCommand } from './blueprints.js';
20
+ export { registerMembersCommand } from './members.js';
21
+ export { registerInvitationsCommand } from './invitations.js';
20
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Invitations Command
3
+ *
4
+ * Manage project invitations - view received, accept, decline.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Options for invitations command
9
+ */
10
+ interface InvitationsOptions {
11
+ sent?: boolean;
12
+ json?: boolean;
13
+ }
14
+ /**
15
+ * List invitations action handler
16
+ */
17
+ export declare function invitationsListAction(options: InvitationsOptions): Promise<void>;
18
+ /**
19
+ * Accept invitation action handler
20
+ */
21
+ export declare function invitationsAcceptAction(idOrToken: string): Promise<void>;
22
+ /**
23
+ * Decline invitation action handler
24
+ */
25
+ export declare function invitationsDeclineAction(idOrToken: string): Promise<void>;
26
+ /**
27
+ * Register invitations command with Commander
28
+ */
29
+ export declare function registerInvitationsCommand(program: Command): void;
30
+ export {};
31
+ //# sourceMappingURL=invitations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invitations.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/invitations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC;;GAEG;AACH,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0HD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CtF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD9E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C/E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmBjE"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Invitations Command
3
+ *
4
+ * Manage project invitations - view received, accept, decline.
5
+ */
6
+ import ora from 'ora';
7
+ import Table from 'cli-table3';
8
+ import { resolveConfig } from '../config/index.js';
9
+ import { withErrorHandler, CliError, NetworkError } from '../middleware/error-handler.js';
10
+ import { printBlank, printHeader } from '../ui/output.js';
11
+ import { colors } from '../ui/colors.js';
12
+ import { formatRelativeTime } from '../ui/time.js';
13
+ import { ApiClient } from '../../client/api-client.js';
14
+ /**
15
+ * Get role badge with color
16
+ */
17
+ function getRoleBadge(role) {
18
+ switch (role) {
19
+ case 'owner':
20
+ return colors.warning('owner');
21
+ case 'editor':
22
+ return colors.primary('editor');
23
+ case 'viewer':
24
+ return colors.muted('viewer');
25
+ default:
26
+ return role;
27
+ }
28
+ }
29
+ /**
30
+ * Display received invitations as table
31
+ */
32
+ function displayReceivedInvitations(invitations) {
33
+ if (invitations.length === 0) {
34
+ console.log(colors.muted('No pending invitations.'));
35
+ return;
36
+ }
37
+ printHeader('Received Invitations');
38
+ printBlank();
39
+ const table = new Table({
40
+ head: [
41
+ colors.muted('PROJECT'),
42
+ colors.muted('ROLE'),
43
+ colors.muted('INVITED'),
44
+ colors.muted('ID'),
45
+ ],
46
+ style: { head: [], border: [] },
47
+ chars: {
48
+ 'top': '', 'top-mid': '', 'top-left': '', 'top-right': '',
49
+ 'bottom': '', 'bottom-mid': '', 'bottom-left': '', 'bottom-right': '',
50
+ 'left': '', 'left-mid': '', 'mid': '', 'mid-mid': '',
51
+ 'right': '', 'right-mid': '', 'middle': ' ',
52
+ },
53
+ });
54
+ for (const inv of invitations) {
55
+ table.push([
56
+ inv.projectName || inv.projectId,
57
+ getRoleBadge(inv.role),
58
+ formatRelativeTime(inv.invitedAt),
59
+ colors.muted(inv.id.substring(0, 12) + '...'),
60
+ ]);
61
+ }
62
+ console.log(table.toString());
63
+ printBlank();
64
+ console.log(colors.muted('Accept: specforge-mcp invitations accept <id>'));
65
+ console.log(colors.muted('Decline: specforge-mcp invitations decline <id>'));
66
+ }
67
+ /**
68
+ * Display sent invitations as table
69
+ */
70
+ function displaySentInvitations(invitations) {
71
+ if (invitations.length === 0) {
72
+ console.log(colors.muted('No sent invitations.'));
73
+ return;
74
+ }
75
+ printBlank();
76
+ printHeader('Sent Invitations');
77
+ printBlank();
78
+ const table = new Table({
79
+ head: [
80
+ colors.muted('EMAIL'),
81
+ colors.muted('PROJECT'),
82
+ colors.muted('ROLE'),
83
+ colors.muted('STATUS'),
84
+ colors.muted('SENT'),
85
+ ],
86
+ style: { head: [], border: [] },
87
+ chars: {
88
+ 'top': '', 'top-mid': '', 'top-left': '', 'top-right': '',
89
+ 'bottom': '', 'bottom-mid': '', 'bottom-left': '', 'bottom-right': '',
90
+ 'left': '', 'left-mid': '', 'mid': '', 'mid-mid': '',
91
+ 'right': '', 'right-mid': '', 'middle': ' ',
92
+ },
93
+ });
94
+ for (const inv of invitations) {
95
+ let statusBadge;
96
+ switch (inv.status) {
97
+ case 'pending':
98
+ statusBadge = colors.warning('pending');
99
+ break;
100
+ case 'accepted':
101
+ statusBadge = colors.success('accepted');
102
+ break;
103
+ case 'expired':
104
+ statusBadge = colors.error('expired');
105
+ break;
106
+ case 'cancelled':
107
+ statusBadge = colors.muted('cancelled');
108
+ break;
109
+ default:
110
+ statusBadge = inv.status;
111
+ }
112
+ table.push([
113
+ inv.email,
114
+ inv.projectName || inv.projectId.substring(0, 12) + '...',
115
+ getRoleBadge(inv.role),
116
+ statusBadge,
117
+ formatRelativeTime(inv.createdAt),
118
+ ]);
119
+ }
120
+ console.log(table.toString());
121
+ }
122
+ /**
123
+ * List invitations action handler
124
+ */
125
+ export async function invitationsListAction(options) {
126
+ const config = resolveConfig();
127
+ if (!config.apiKey) {
128
+ throw new CliError('Not authenticated', 1, 'Run `specforge-mcp login` to authenticate first');
129
+ }
130
+ const spinner = ora({
131
+ text: 'Fetching invitations...',
132
+ color: 'cyan',
133
+ }).start();
134
+ try {
135
+ const client = new ApiClient({
136
+ apiKey: config.apiKey,
137
+ apiUrl: config.apiUrl,
138
+ debug: config.debug,
139
+ });
140
+ const response = await client.call('list_invitations', {
141
+ includeSent: options.sent,
142
+ });
143
+ spinner.stop();
144
+ if (options.json) {
145
+ console.log(JSON.stringify(response, null, 2));
146
+ return;
147
+ }
148
+ printBlank();
149
+ displayReceivedInvitations(response.received);
150
+ if (options.sent && response.sent) {
151
+ displaySentInvitations(response.sent);
152
+ }
153
+ printBlank();
154
+ }
155
+ catch (error) {
156
+ spinner.fail('Failed to fetch invitations');
157
+ const message = error instanceof Error ? error.message : 'Unknown error';
158
+ throw new NetworkError(`Failed to fetch invitations: ${message}`);
159
+ }
160
+ }
161
+ /**
162
+ * Accept invitation action handler
163
+ */
164
+ export async function invitationsAcceptAction(idOrToken) {
165
+ const config = resolveConfig();
166
+ if (!config.apiKey) {
167
+ throw new CliError('Not authenticated', 1, 'Run `specforge-mcp login` to authenticate first');
168
+ }
169
+ const spinner = ora({
170
+ text: 'Accepting invitation...',
171
+ color: 'cyan',
172
+ }).start();
173
+ try {
174
+ const client = new ApiClient({
175
+ apiKey: config.apiKey,
176
+ apiUrl: config.apiUrl,
177
+ debug: config.debug,
178
+ });
179
+ // Determine if it's a token or invitation ID
180
+ const args = {};
181
+ if (idOrToken.startsWith('proj_inv_')) {
182
+ args.token = idOrToken;
183
+ }
184
+ else {
185
+ args.invitationId = idOrToken;
186
+ }
187
+ const response = await client.call('accept_project_invitation', args);
188
+ spinner.succeed(`Joined ${response.projectName} as ${response.role}`);
189
+ printBlank();
190
+ console.log(colors.muted(response.message));
191
+ printBlank();
192
+ }
193
+ catch (error) {
194
+ spinner.fail('Failed to accept invitation');
195
+ const message = error instanceof Error ? error.message : 'Unknown error';
196
+ throw new NetworkError(`Failed to accept invitation: ${message}`);
197
+ }
198
+ }
199
+ /**
200
+ * Decline invitation action handler
201
+ */
202
+ export async function invitationsDeclineAction(idOrToken) {
203
+ const config = resolveConfig();
204
+ if (!config.apiKey) {
205
+ throw new CliError('Not authenticated', 1, 'Run `specforge-mcp login` to authenticate first');
206
+ }
207
+ const spinner = ora({
208
+ text: 'Declining invitation...',
209
+ color: 'cyan',
210
+ }).start();
211
+ try {
212
+ const client = new ApiClient({
213
+ apiKey: config.apiKey,
214
+ apiUrl: config.apiUrl,
215
+ debug: config.debug,
216
+ });
217
+ // Determine if it's a token or invitation ID
218
+ const args = {};
219
+ if (idOrToken.startsWith('proj_inv_')) {
220
+ args.token = idOrToken;
221
+ }
222
+ else {
223
+ args.invitationId = idOrToken;
224
+ }
225
+ const response = await client.call('decline_project_invitation', args);
226
+ spinner.succeed('Invitation declined');
227
+ printBlank();
228
+ }
229
+ catch (error) {
230
+ spinner.fail('Failed to decline invitation');
231
+ const message = error instanceof Error ? error.message : 'Unknown error';
232
+ throw new NetworkError(`Failed to decline invitation: ${message}`);
233
+ }
234
+ }
235
+ /**
236
+ * Register invitations command with Commander
237
+ */
238
+ export function registerInvitationsCommand(program) {
239
+ const invitationsCmd = program
240
+ .command('invitations')
241
+ .description('Manage project invitations')
242
+ .option('--sent', 'Include sent invitations')
243
+ .option('--json', 'Output as JSON')
244
+ .action(withErrorHandler(invitationsListAction));
245
+ // Accept subcommand
246
+ invitationsCmd
247
+ .command('accept <id-or-token>')
248
+ .description('Accept a project invitation')
249
+ .action(withErrorHandler(invitationsAcceptAction));
250
+ // Decline subcommand
251
+ invitationsCmd
252
+ .command('decline <id-or-token>')
253
+ .description('Decline a project invitation')
254
+ .action(withErrorHandler(invitationsDeclineAction));
255
+ }
256
+ //# sourceMappingURL=invitations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invitations.js","sourceRoot":"","sources":["../../../src/cli/commands/invitations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Members Command
3
+ *
4
+ * Manage project members - list, add, remove, and update roles.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Options for members command
9
+ */
10
+ interface MembersOptions {
11
+ project?: string;
12
+ json?: boolean;
13
+ }
14
+ /**
15
+ * Options for members add command
16
+ */
17
+ interface MembersAddOptions {
18
+ project?: string;
19
+ role?: 'editor' | 'viewer';
20
+ message?: string;
21
+ }
22
+ /**
23
+ * Options for members remove command
24
+ */
25
+ interface MembersRemoveOptions {
26
+ project?: string;
27
+ }
28
+ /**
29
+ * Options for members role command
30
+ */
31
+ interface MembersRoleOptions {
32
+ project?: string;
33
+ }
34
+ /**
35
+ * List members action handler
36
+ */
37
+ export declare function membersListAction(options: MembersOptions): Promise<void>;
38
+ /**
39
+ * Add member action handler
40
+ */
41
+ export declare function membersAddAction(email: string, options: MembersAddOptions): Promise<void>;
42
+ /**
43
+ * Remove member action handler
44
+ */
45
+ export declare function membersRemoveAction(emailOrId: string, options: MembersRemoveOptions): Promise<void>;
46
+ /**
47
+ * Update member role action handler
48
+ */
49
+ export declare function membersRoleAction(emailOrId: string, role: string, options: MembersRoleOptions): Promise<void>;
50
+ /**
51
+ * Register members command with Commander
52
+ */
53
+ export declare function registerMembersCommand(program: Command): void;
54
+ export {};
55
+ //# sourceMappingURL=members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/members.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC;;GAEG;AACH,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkGD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwDf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqEf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B7D"}