@specforge/mcp 2.4.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.
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/invitations.d.ts +31 -0
- package/dist/cli/commands/invitations.d.ts.map +1 -0
- package/dist/cli/commands/invitations.js +256 -0
- package/dist/cli/commands/invitations.js.map +1 -0
- package/dist/cli/commands/members.d.ts +55 -0
- package/dist/cli/commands/members.d.ts.map +1 -0
- package/dist/cli/commands/members.js +308 -0
- package/dist/cli/commands/members.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +60 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/core/epic.js +1 -1
- package/dist/tools/core/epic.js.map +1 -1
- package/dist/tools/core/lookup.d.ts.map +1 -1
- package/dist/tools/core/lookup.js +3 -2
- package/dist/tools/core/lookup.js.map +1 -1
- package/dist/tools/core/specification.js +2 -2
- package/dist/tools/core/specification.js.map +1 -1
- package/dist/tools/core/ticket.d.ts.map +1 -1
- package/dist/tools/core/ticket.js +4 -6
- package/dist/tools/core/ticket.js.map +1 -1
- package/dist/tools/core/workflow-guide.d.ts.map +1 -1
- package/dist/tools/core/workflow-guide.js +256 -7
- package/dist/tools/core/workflow-guide.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +136 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +12 -12
|
@@ -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"}
|