feedbackbasket-cli 3.0.0 → 3.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/CHANGELOG.md +301 -274
- package/README.md +342 -336
- package/dist/src/auth/login.d.ts +4 -3
- package/dist/src/auth/login.js +70 -43
- package/dist/src/capabilities.d.ts +4 -0
- package/dist/src/client.d.ts +7 -1
- package/dist/src/client.js +21 -12
- package/dist/src/commands/auth.d.ts +9 -3
- package/dist/src/commands/auth.js +100 -93
- package/dist/src/commands/feedback-bulk-update.js +21 -5
- package/dist/src/commands/feedback-create.js +26 -3
- package/dist/src/commands/feedback-update.js +26 -2
- package/dist/src/commands/feedback.js +30 -9
- package/dist/src/types.d.ts +7 -0
- package/dist/src/version.d.ts +1 -1
- package/package.json +54 -54
- package/skills/feedbackbasket/SKILL.md +413 -378
|
@@ -23,8 +23,7 @@ import { createFeedbackBulkUpdateCommand } from './feedback-bulk-update.js';
|
|
|
23
23
|
import { createFeedbackExportCommand } from './feedback-export.js';
|
|
24
24
|
import { createFeedbackReplyCommand, createFeedbackRepliesCommand } from './feedback-reply.js';
|
|
25
25
|
export function createFeedbackCommand(getWriter) {
|
|
26
|
-
const feedback = new Command('feedback')
|
|
27
|
-
.description('View and manage feedback');
|
|
26
|
+
const feedback = new Command('feedback').description('View and manage feedback');
|
|
28
27
|
// Write subcommands
|
|
29
28
|
feedback.addCommand(createFeedbackCreateCommand(getWriter));
|
|
30
29
|
feedback.addCommand(createFeedbackUpdateCommand(getWriter));
|
|
@@ -42,6 +41,7 @@ export function createFeedbackCommand(getWriter) {
|
|
|
42
41
|
.option('--all', 'Show feedback across all projects (ignore default project)')
|
|
43
42
|
.option('--category <category>', 'Filter by category (BUG, FEATURE_REQUEST, IMPROVEMENT, QUESTION)')
|
|
44
43
|
.option('--status <status>', 'Filter by status (OPEN, UNDER_REVIEW, PLANNED, IN_PROGRESS, COMPLETE, CLOSED)')
|
|
44
|
+
.option('--close-reason <reason>', 'Filter by close reason')
|
|
45
45
|
.option('--sentiment <sentiment>', 'Filter by sentiment (POSITIVE, NEGATIVE, NEUTRAL)')
|
|
46
46
|
.option('--search <query>', 'Search feedback content')
|
|
47
47
|
.option('--limit <n>', 'Max results (1-100)', '20')
|
|
@@ -54,6 +54,7 @@ export function createFeedbackCommand(getWriter) {
|
|
|
54
54
|
projectId: await resolveProjectId(client, opts.project, opts.all),
|
|
55
55
|
category: opts.category,
|
|
56
56
|
status: opts.status,
|
|
57
|
+
closeReason: opts.closeReason,
|
|
57
58
|
sentiment: opts.sentiment,
|
|
58
59
|
search: opts.search,
|
|
59
60
|
limit: parseInt(opts.limit, 10),
|
|
@@ -65,13 +66,22 @@ export function createFeedbackCommand(getWriter) {
|
|
|
65
66
|
}
|
|
66
67
|
const breadcrumbs = [];
|
|
67
68
|
if (opts.project) {
|
|
68
|
-
breadcrumbs.push({
|
|
69
|
+
breadcrumbs.push({
|
|
70
|
+
action: 'View bugs for this project',
|
|
71
|
+
cmd: `feedbackbasket bugs list --project ${opts.project}`,
|
|
72
|
+
});
|
|
69
73
|
}
|
|
70
74
|
if (result.pagination.hasMore) {
|
|
71
75
|
const nextOffset = parseInt(opts.offset, 10) + parseInt(opts.limit, 10);
|
|
72
|
-
breadcrumbs.push({
|
|
76
|
+
breadcrumbs.push({
|
|
77
|
+
action: 'Next page',
|
|
78
|
+
cmd: `feedbackbasket feedback list --offset ${nextOffset} --limit ${opts.limit}${opts.project ? ` --project ${opts.project}` : ''}`,
|
|
79
|
+
});
|
|
73
80
|
}
|
|
74
|
-
breadcrumbs.push({
|
|
81
|
+
breadcrumbs.push({
|
|
82
|
+
action: 'Search',
|
|
83
|
+
cmd: 'feedbackbasket feedback search "<query>"',
|
|
84
|
+
});
|
|
75
85
|
writer.ok(result.feedback, {
|
|
76
86
|
summary: `Showing ${result.feedback.length} of ${result.pagination.totalCount} feedback items`,
|
|
77
87
|
notice: result.pagination.hasMore ? `Use --offset ${parseInt(opts.offset, 10) + parseInt(opts.limit, 10)} to see more` : undefined,
|
|
@@ -92,8 +102,14 @@ export function createFeedbackCommand(getWriter) {
|
|
|
92
102
|
writer.ok(item, {
|
|
93
103
|
summary: `Feedback ${item.id}`,
|
|
94
104
|
breadcrumbs: [
|
|
95
|
-
{
|
|
96
|
-
|
|
105
|
+
{
|
|
106
|
+
action: 'Update status',
|
|
107
|
+
cmd: `feedbackbasket feedback update ${item.id} --status <STATUS>`,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
action: 'Add note',
|
|
111
|
+
cmd: `feedbackbasket feedback note ${item.id} "<note>"`,
|
|
112
|
+
},
|
|
97
113
|
{ action: 'Back to list', cmd: 'feedbackbasket feedback list' },
|
|
98
114
|
],
|
|
99
115
|
});
|
|
@@ -120,7 +136,10 @@ export function createFeedbackCommand(getWriter) {
|
|
|
120
136
|
summary: `${result.pagination.totalCount} result${result.pagination.totalCount === 1 ? '' : 's'} for "${query}"`,
|
|
121
137
|
breadcrumbs: [
|
|
122
138
|
{ action: 'List all feedback', cmd: 'feedbackbasket feedback list' },
|
|
123
|
-
{
|
|
139
|
+
{
|
|
140
|
+
action: 'Search bugs',
|
|
141
|
+
cmd: `feedbackbasket bugs list --search "${query}"`,
|
|
142
|
+
},
|
|
124
143
|
],
|
|
125
144
|
});
|
|
126
145
|
});
|
|
@@ -156,7 +175,7 @@ function renderFeedbackList(items) {
|
|
|
156
175
|
const cat = categoryEmoji[item.category ?? ''] ?? brand.muted('[?]');
|
|
157
176
|
const priority = priorityLabel(item.aiPriorityScore);
|
|
158
177
|
const content = item.content.length > 80 ? item.content.slice(0, 77) + '...' : item.content;
|
|
159
|
-
const status = brand.muted(`[${item.status}]`);
|
|
178
|
+
const status = brand.muted(`[${item.status}${item.closeReason ? ` · ${item.closeReason}` : ''}]`);
|
|
160
179
|
const proj = item.project ? brand.primary(item.project.name) : '';
|
|
161
180
|
console.log(`${cat} ${priority} ${status} ${proj} ${brand.muted(item.id)}`);
|
|
162
181
|
console.log(` ${content}`);
|
|
@@ -175,6 +194,8 @@ function renderFeedbackDetail(item) {
|
|
|
175
194
|
console.log();
|
|
176
195
|
const fields = [
|
|
177
196
|
['Status', item.status],
|
|
197
|
+
['Close Reason', item.closeReason],
|
|
198
|
+
['Close Note', item.closeNote],
|
|
178
199
|
['Category', item.category],
|
|
179
200
|
['Feedback Type', formatFeedbackType(item)],
|
|
180
201
|
['Sentiment', item.sentiment],
|
package/dist/src/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type FeedbackStatus = 'OPEN' | 'UNDER_REVIEW' | 'PLANNED' | 'IN_PROGRESS' | 'COMPLETE' | 'CLOSED';
|
|
2
|
+
export type FeedbackCloseReason = 'DUPLICATE' | 'NOT_PLANNED' | 'COULD_NOT_REPRODUCE' | 'NOT_ACTIONABLE' | 'NO_LONGER_RELEVANT' | 'SPAM' | 'OTHER';
|
|
2
3
|
export type FeedbackCategory = 'BUG' | 'FEATURE_REQUEST' | 'IMPROVEMENT' | 'QUESTION';
|
|
3
4
|
export type Sentiment = 'POSITIVE' | 'NEGATIVE' | 'NEUTRAL';
|
|
4
5
|
export type Severity = 'high' | 'medium' | 'low';
|
|
@@ -93,6 +94,9 @@ export interface Feedback {
|
|
|
93
94
|
content: string;
|
|
94
95
|
email?: string | null;
|
|
95
96
|
status: FeedbackStatus;
|
|
97
|
+
closeReason?: FeedbackCloseReason | null;
|
|
98
|
+
closeNote?: string | null;
|
|
99
|
+
closedAt?: string | null;
|
|
96
100
|
category?: FeedbackCategory | null;
|
|
97
101
|
sentiment?: Sentiment | null;
|
|
98
102
|
aiSummary?: string | null;
|
|
@@ -186,6 +190,8 @@ export interface FeedbackCreateInput {
|
|
|
186
190
|
type?: 'bug' | 'feature' | 'general';
|
|
187
191
|
category?: FeedbackCategory;
|
|
188
192
|
status?: FeedbackStatus;
|
|
193
|
+
closeReason?: FeedbackCloseReason;
|
|
194
|
+
closeNote?: string;
|
|
189
195
|
email?: string;
|
|
190
196
|
pageUrl?: string;
|
|
191
197
|
metadata?: Record<string, unknown>;
|
|
@@ -232,6 +238,7 @@ export interface FeedbackParams {
|
|
|
232
238
|
projectId?: string;
|
|
233
239
|
category?: FeedbackCategory;
|
|
234
240
|
status?: FeedbackStatus;
|
|
241
|
+
closeReason?: FeedbackCloseReason;
|
|
235
242
|
sentiment?: Sentiment;
|
|
236
243
|
search?: string;
|
|
237
244
|
limit?: number;
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION: "3.
|
|
1
|
+
export declare const VERSION: "3.2.0";
|
|
2
2
|
export declare const USER_AGENT: string;
|
package/package.json
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "feedbackbasket-cli",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "Command-line interface for FeedbackBasket — manage feedback and waitlists from your terminal",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/src/cli.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"feedbackbasket": "dist/bin/feedbackbasket.js"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"test": "tsx --test tests/*.test.ts",
|
|
13
|
-
"dev": "tsx bin/feedbackbasket.ts",
|
|
14
|
-
"start": "node dist/bin/feedbackbasket.js",
|
|
15
|
-
"check:parity": "tsx scripts/check-parity.ts",
|
|
16
|
-
"docs:generate": "tsx scripts/generate-capabilities.ts",
|
|
17
|
-
"docs:check": "tsx scripts/generate-capabilities.ts --check",
|
|
18
|
-
"prepublishOnly": "npm run check:parity && npm run docs:check && npm test && npm run build"
|
|
19
|
-
},
|
|
20
|
-
"keywords": [
|
|
21
|
-
"feedbackbasket",
|
|
22
|
-
"feedback",
|
|
23
|
-
"cli",
|
|
24
|
-
"ai-agent",
|
|
25
|
-
"developer-tools"
|
|
26
|
-
],
|
|
27
|
-
"author": "deifosv",
|
|
28
|
-
"license": "MIT",
|
|
29
|
-
"repository": {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "https://github.com/deifos/feedbackbasket-cli.git"
|
|
32
|
-
},
|
|
33
|
-
"homepage": "https://feedbackbasket.com",
|
|
34
|
-
"dependencies": {
|
|
35
|
-
"chalk": "^5.3.0",
|
|
36
|
-
"commander": "^13.1.0",
|
|
37
|
-
"feedbackbasket-agent-contract": "3.
|
|
38
|
-
"open": "^10.1.0"
|
|
39
|
-
},
|
|
40
|
-
"devDependencies": {
|
|
41
|
-
"@types/node": "^22.0.0",
|
|
42
|
-
"tsx": "^4.23.0",
|
|
43
|
-
"typescript": "^5.7.0"
|
|
44
|
-
},
|
|
45
|
-
"engines": {
|
|
46
|
-
"node": ">=18"
|
|
47
|
-
},
|
|
48
|
-
"files": [
|
|
49
|
-
"dist/**/*",
|
|
50
|
-
"skills/**/*",
|
|
51
|
-
"README.md",
|
|
52
|
-
"CHANGELOG.md"
|
|
53
|
-
]
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "feedbackbasket-cli",
|
|
3
|
+
"version": "3.2.0",
|
|
4
|
+
"description": "Command-line interface for FeedbackBasket — manage feedback and waitlists from your terminal",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/cli.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"feedbackbasket": "dist/bin/feedbackbasket.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "tsx --test tests/*.test.ts",
|
|
13
|
+
"dev": "tsx bin/feedbackbasket.ts",
|
|
14
|
+
"start": "node dist/bin/feedbackbasket.js",
|
|
15
|
+
"check:parity": "tsx scripts/check-parity.ts",
|
|
16
|
+
"docs:generate": "tsx scripts/generate-capabilities.ts",
|
|
17
|
+
"docs:check": "tsx scripts/generate-capabilities.ts --check",
|
|
18
|
+
"prepublishOnly": "npm run check:parity && npm run docs:check && npm test && npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"feedbackbasket",
|
|
22
|
+
"feedback",
|
|
23
|
+
"cli",
|
|
24
|
+
"ai-agent",
|
|
25
|
+
"developer-tools"
|
|
26
|
+
],
|
|
27
|
+
"author": "deifosv",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/deifos/feedbackbasket-cli.git"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://feedbackbasket.com",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"chalk": "^5.3.0",
|
|
36
|
+
"commander": "^13.1.0",
|
|
37
|
+
"feedbackbasket-agent-contract": "3.2.0",
|
|
38
|
+
"open": "^10.1.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^22.0.0",
|
|
42
|
+
"tsx": "^4.23.0",
|
|
43
|
+
"typescript": "^5.7.0"
|
|
44
|
+
},
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18"
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist/**/*",
|
|
50
|
+
"skills/**/*",
|
|
51
|
+
"README.md",
|
|
52
|
+
"CHANGELOG.md"
|
|
53
|
+
]
|
|
54
|
+
}
|