chatroom-cli 1.0.54 → 1.0.64

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.
Files changed (108) hide show
  1. package/README.md +35 -27
  2. package/dist/index.js +12728 -339
  3. package/package.json +11 -10
  4. package/dist/api.d.ts +0 -11
  5. package/dist/api.d.ts.map +0 -1
  6. package/dist/api.js +0 -12
  7. package/dist/api.js.map +0 -1
  8. package/dist/commands/auth-login.d.ts +0 -10
  9. package/dist/commands/auth-login.d.ts.map +0 -1
  10. package/dist/commands/auth-login.js +0 -179
  11. package/dist/commands/auth-login.js.map +0 -1
  12. package/dist/commands/auth-logout.d.ts +0 -6
  13. package/dist/commands/auth-logout.d.ts.map +0 -1
  14. package/dist/commands/auth-logout.js +0 -21
  15. package/dist/commands/auth-logout.js.map +0 -1
  16. package/dist/commands/auth-status.d.ts +0 -6
  17. package/dist/commands/auth-status.d.ts.map +0 -1
  18. package/dist/commands/auth-status.js +0 -50
  19. package/dist/commands/auth-status.js.map +0 -1
  20. package/dist/commands/backlog.d.ts +0 -36
  21. package/dist/commands/backlog.d.ts.map +0 -1
  22. package/dist/commands/backlog.js +0 -310
  23. package/dist/commands/backlog.js.map +0 -1
  24. package/dist/commands/feature.d.ts +0 -14
  25. package/dist/commands/feature.d.ts.map +0 -1
  26. package/dist/commands/feature.js +0 -172
  27. package/dist/commands/feature.js.map +0 -1
  28. package/dist/commands/guidelines.d.ts +0 -17
  29. package/dist/commands/guidelines.d.ts.map +0 -1
  30. package/dist/commands/guidelines.js +0 -71
  31. package/dist/commands/guidelines.js.map +0 -1
  32. package/dist/commands/handoff.d.ts +0 -20
  33. package/dist/commands/handoff.d.ts.map +0 -1
  34. package/dist/commands/handoff.js +0 -83
  35. package/dist/commands/handoff.js.map +0 -1
  36. package/dist/commands/init.d.ts +0 -9
  37. package/dist/commands/init.d.ts.map +0 -1
  38. package/dist/commands/init.js +0 -23
  39. package/dist/commands/init.js.map +0 -1
  40. package/dist/commands/messages.d.ts +0 -24
  41. package/dist/commands/messages.d.ts.map +0 -1
  42. package/dist/commands/messages.js +0 -149
  43. package/dist/commands/messages.js.map +0 -1
  44. package/dist/commands/opencode-install.d.ts +0 -29
  45. package/dist/commands/opencode-install.d.ts.map +0 -1
  46. package/dist/commands/opencode-install.js +0 -416
  47. package/dist/commands/opencode-install.js.map +0 -1
  48. package/dist/commands/task-started.d.ts +0 -13
  49. package/dist/commands/task-started.d.ts.map +0 -1
  50. package/dist/commands/task-started.js +0 -107
  51. package/dist/commands/task-started.js.map +0 -1
  52. package/dist/commands/update.d.ts +0 -6
  53. package/dist/commands/update.d.ts.map +0 -1
  54. package/dist/commands/update.js +0 -78
  55. package/dist/commands/update.js.map +0 -1
  56. package/dist/commands/wait-for-task.d.ts +0 -18
  57. package/dist/commands/wait-for-task.d.ts.map +0 -1
  58. package/dist/commands/wait-for-task.js +0 -306
  59. package/dist/commands/wait-for-task.js.map +0 -1
  60. package/dist/config/defaults.d.ts +0 -12
  61. package/dist/config/defaults.d.ts.map +0 -1
  62. package/dist/config/defaults.js +0 -70
  63. package/dist/config/defaults.js.map +0 -1
  64. package/dist/config/loader.d.ts +0 -52
  65. package/dist/config/loader.d.ts.map +0 -1
  66. package/dist/config/loader.js +0 -202
  67. package/dist/config/loader.js.map +0 -1
  68. package/dist/config/schema.d.ts +0 -52
  69. package/dist/config/schema.d.ts.map +0 -1
  70. package/dist/config/schema.js +0 -99
  71. package/dist/config/schema.js.map +0 -1
  72. package/dist/config.d.ts +0 -20
  73. package/dist/config.d.ts.map +0 -1
  74. package/dist/config.js +0 -20
  75. package/dist/config.js.map +0 -1
  76. package/dist/convex-api/api.d.ts +0 -137
  77. package/dist/convex-api/api.js +0 -23
  78. package/dist/convex-api/index.d.ts +0 -102
  79. package/dist/convex-api/index.d.ts.map +0 -1
  80. package/dist/convex-api/index.js +0 -11
  81. package/dist/convex-api/index.js.map +0 -1
  82. package/dist/index.d.ts +0 -9
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/index.js.map +0 -1
  85. package/dist/infrastructure/auth/middleware.d.ts +0 -20
  86. package/dist/infrastructure/auth/middleware.d.ts.map +0 -1
  87. package/dist/infrastructure/auth/middleware.js +0 -96
  88. package/dist/infrastructure/auth/middleware.js.map +0 -1
  89. package/dist/infrastructure/auth/storage.d.ts +0 -58
  90. package/dist/infrastructure/auth/storage.d.ts.map +0 -1
  91. package/dist/infrastructure/auth/storage.js +0 -242
  92. package/dist/infrastructure/auth/storage.js.map +0 -1
  93. package/dist/infrastructure/convex/client.d.ts +0 -16
  94. package/dist/infrastructure/convex/client.d.ts.map +0 -1
  95. package/dist/infrastructure/convex/client.js +0 -40
  96. package/dist/infrastructure/convex/client.js.map +0 -1
  97. package/dist/infrastructure/history/storage.d.ts +0 -21
  98. package/dist/infrastructure/history/storage.d.ts.map +0 -1
  99. package/dist/infrastructure/history/storage.js +0 -56
  100. package/dist/infrastructure/history/storage.js.map +0 -1
  101. package/dist/utils/file-content.d.ts +0 -29
  102. package/dist/utils/file-content.d.ts.map +0 -1
  103. package/dist/utils/file-content.js +0 -51
  104. package/dist/utils/file-content.js.map +0 -1
  105. package/dist/version.d.ts +0 -14
  106. package/dist/version.d.ts.map +0 -1
  107. package/dist/version.js +0 -43
  108. package/dist/version.js.map +0 -1
@@ -1,310 +0,0 @@
1
- /**
2
- * Backlog commands for managing task queue and backlog
3
- */
4
- import { api } from '../api.js';
5
- import { getSessionId } from '../infrastructure/auth/storage.js';
6
- import { getConvexClient } from '../infrastructure/convex/client.js';
7
- /**
8
- * List tasks in a chatroom
9
- */
10
- export async function listBacklog(chatroomId, options) {
11
- const client = await getConvexClient();
12
- // Get session ID for authentication
13
- const sessionId = getSessionId();
14
- if (!sessionId) {
15
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
16
- process.exit(1);
17
- }
18
- // Validate chatroom ID format
19
- if (!chatroomId ||
20
- typeof chatroomId !== 'string' ||
21
- chatroomId.length < 20 ||
22
- chatroomId.length > 40) {
23
- console.error(`❌ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
24
- process.exit(1);
25
- }
26
- // Validate status filter
27
- const validStatuses = [
28
- 'pending',
29
- 'in_progress',
30
- 'queued',
31
- 'backlog',
32
- 'completed',
33
- 'cancelled',
34
- 'active',
35
- 'pending_review', // tasks awaiting user review
36
- 'archived', // completed + closed
37
- 'all',
38
- ];
39
- const statusFilter = options.status;
40
- if (!statusFilter || !validStatuses.includes(statusFilter)) {
41
- console.error(`❌ Invalid or missing status: ${statusFilter || '(none)'}. Must be one of: ${validStatuses.join(', ')}`);
42
- process.exit(1);
43
- }
44
- try {
45
- // Get task counts
46
- const counts = (await client.query(api.tasks.getTaskCounts, {
47
- sessionId,
48
- chatroomId: chatroomId,
49
- }));
50
- // Get tasks with filter
51
- const tasks = (await client.query(api.tasks.listTasks, {
52
- sessionId,
53
- chatroomId: chatroomId,
54
- statusFilter: statusFilter === 'all'
55
- ? undefined
56
- : statusFilter,
57
- limit: options.limit || 20,
58
- }));
59
- // Display header
60
- console.log('');
61
- console.log('══════════════════════════════════════════════════');
62
- console.log('📋 TASK QUEUE');
63
- console.log('══════════════════════════════════════════════════');
64
- console.log(`Chatroom: ${chatroomId}`);
65
- console.log(`Filter: ${statusFilter}`);
66
- console.log('');
67
- // Display counts summary
68
- console.log('──────────────────────────────────────────────────');
69
- console.log('📊 SUMMARY');
70
- console.log('──────────────────────────────────────────────────');
71
- if (counts.pending > 0)
72
- console.log(` 🟢 Pending: ${counts.pending}`);
73
- if (counts.in_progress > 0)
74
- console.log(` 🔵 In Progress: ${counts.in_progress}`);
75
- if (counts.queued > 0)
76
- console.log(` 🟡 Queued: ${counts.queued}`);
77
- if (counts.backlog > 0)
78
- console.log(` ⚪ Backlog: ${counts.backlog}`);
79
- const activeTotal = counts.pending + counts.in_progress + counts.queued + counts.backlog;
80
- console.log(` 📝 Active Total: ${activeTotal}/100`);
81
- console.log('');
82
- // Display tasks
83
- if (tasks.length === 0) {
84
- console.log('No tasks found.');
85
- }
86
- else {
87
- console.log('──────────────────────────────────────────────────');
88
- console.log('📝 TASKS');
89
- console.log('──────────────────────────────────────────────────');
90
- for (let i = 0; i < tasks.length; i++) {
91
- const task = tasks[i];
92
- const statusEmoji = getStatusEmoji(task.status);
93
- const date = new Date(task.createdAt).toLocaleString('en-US', {
94
- month: 'short',
95
- day: 'numeric',
96
- hour: '2-digit',
97
- minute: '2-digit',
98
- hour12: false,
99
- });
100
- // Use full content or truncate based on --full flag
101
- const displayContent = options.full ? task.content : truncate(task.content, 100);
102
- console.log(`#${i + 1} [${statusEmoji} ${task.status.toUpperCase()}] ${displayContent}`);
103
- console.log(` ID: ${task._id}`);
104
- console.log(` Created: ${date}${task.assignedTo ? ` | Assigned: ${task.assignedTo}` : ''}`);
105
- console.log('');
106
- }
107
- }
108
- console.log('──────────────────────────────────────────────────');
109
- // Calculate total tasks for the current filter to show truncation info
110
- let totalForFilter;
111
- if (statusFilter === 'all') {
112
- totalForFilter =
113
- counts.pending +
114
- counts.in_progress +
115
- counts.queued +
116
- counts.backlog +
117
- counts.completed +
118
- counts.cancelled;
119
- }
120
- else if (statusFilter === 'active') {
121
- totalForFilter = counts.pending + counts.in_progress + counts.queued + counts.backlog;
122
- }
123
- else if (statusFilter === 'archived') {
124
- totalForFilter = counts.completed + counts.cancelled;
125
- }
126
- else if (statusFilter === 'pending_review') {
127
- // pending_review is separate, use tasks.length as best estimate
128
- totalForFilter = tasks.length;
129
- }
130
- else {
131
- totalForFilter = counts[statusFilter] ?? tasks.length;
132
- }
133
- if (tasks.length < totalForFilter) {
134
- console.log(`Showing ${tasks.length} of ${totalForFilter} task(s) (use --limit=N to see more)`);
135
- }
136
- else {
137
- console.log(`Showing ${tasks.length} task(s)`);
138
- }
139
- console.log('');
140
- }
141
- catch (error) {
142
- console.error(`❌ Failed to list tasks: ${error.message}`);
143
- process.exit(1);
144
- }
145
- }
146
- /**
147
- * Add a task to the backlog
148
- */
149
- export async function addBacklog(chatroomId, options) {
150
- const client = await getConvexClient();
151
- // Get session ID for authentication
152
- const sessionId = getSessionId();
153
- if (!sessionId) {
154
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
155
- process.exit(1);
156
- }
157
- // Validate chatroom ID format
158
- if (!chatroomId ||
159
- typeof chatroomId !== 'string' ||
160
- chatroomId.length < 20 ||
161
- chatroomId.length > 40) {
162
- console.error(`❌ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
163
- process.exit(1);
164
- }
165
- // Validate content
166
- if (!options.content || options.content.trim().length === 0) {
167
- console.error(`❌ Task content cannot be empty`);
168
- process.exit(1);
169
- }
170
- try {
171
- const result = await client.mutation(api.tasks.createTask, {
172
- sessionId,
173
- chatroomId: chatroomId,
174
- content: options.content.trim(),
175
- createdBy: options.role,
176
- isBacklog: true,
177
- });
178
- console.log('');
179
- console.log('✅ Task added to backlog');
180
- console.log(` ID: ${result.taskId}`);
181
- console.log(` Status: ${result.status}`);
182
- console.log(` Position: ${result.queuePosition}`);
183
- console.log('');
184
- }
185
- catch (error) {
186
- console.error(`❌ Failed to add task: ${error.message}`);
187
- process.exit(1);
188
- }
189
- }
190
- /**
191
- * Complete a backlog task by ID.
192
- * Use --force to complete stuck in_progress or pending tasks.
193
- */
194
- export async function completeBacklog(chatroomId, options) {
195
- const client = await getConvexClient();
196
- // Get session ID for authentication
197
- const sessionId = getSessionId();
198
- if (!sessionId) {
199
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
200
- process.exit(1);
201
- }
202
- // Validate chatroom ID format
203
- if (!chatroomId ||
204
- typeof chatroomId !== 'string' ||
205
- chatroomId.length < 20 ||
206
- chatroomId.length > 40) {
207
- console.error(`❌ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
208
- process.exit(1);
209
- }
210
- // Validate task ID
211
- if (!options.taskId || options.taskId.trim().length === 0) {
212
- console.error(`❌ Task ID is required`);
213
- process.exit(1);
214
- }
215
- try {
216
- const result = (await client.mutation(api.tasks.completeTaskById, {
217
- sessionId,
218
- taskId: options.taskId,
219
- force: options.force,
220
- }));
221
- console.log('');
222
- if (result.wasForced) {
223
- console.log('⚠️ Task force-completed (was in_progress or pending)');
224
- }
225
- else {
226
- console.log('✅ Task completed');
227
- }
228
- console.log(` ID: ${options.taskId}`);
229
- if (result.promoted) {
230
- console.log(` 📤 Next task promoted: ${result.promoted}`);
231
- console.log('');
232
- console.log('💡 The next queued task is now pending and ready for processing.');
233
- }
234
- console.log('');
235
- }
236
- catch (error) {
237
- console.error(`❌ Failed to complete task: ${error.message}`);
238
- process.exit(1);
239
- }
240
- }
241
- /**
242
- * Reopen a completed backlog task, returning it to pending_user_review status.
243
- */
244
- export async function reopenBacklog(chatroomId, options) {
245
- const client = await getConvexClient();
246
- // Get session ID for authentication
247
- const sessionId = getSessionId();
248
- if (!sessionId) {
249
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
250
- process.exit(1);
251
- }
252
- // Validate chatroom ID format
253
- if (!chatroomId ||
254
- typeof chatroomId !== 'string' ||
255
- chatroomId.length < 20 ||
256
- chatroomId.length > 40) {
257
- console.error(`❌ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
258
- process.exit(1);
259
- }
260
- // Validate task ID
261
- if (!options.taskId || options.taskId.trim().length === 0) {
262
- console.error(`❌ Task ID is required`);
263
- process.exit(1);
264
- }
265
- try {
266
- await client.mutation(api.tasks.reopenBacklogTask, {
267
- sessionId,
268
- taskId: options.taskId,
269
- });
270
- console.log('');
271
- console.log('✅ Task reopened');
272
- console.log(` ID: ${options.taskId}`);
273
- console.log(` Status: pending_user_review`);
274
- console.log('');
275
- console.log('💡 The task is now ready for user review again.');
276
- console.log('');
277
- }
278
- catch (error) {
279
- console.error(`❌ Failed to reopen task: ${error.message}`);
280
- process.exit(1);
281
- }
282
- }
283
- function getStatusEmoji(status) {
284
- switch (status) {
285
- case 'pending':
286
- return '🟢';
287
- case 'in_progress':
288
- return '🔵';
289
- case 'queued':
290
- return '🟡';
291
- case 'backlog':
292
- return '⚪';
293
- case 'completed':
294
- return '✅';
295
- case 'cancelled':
296
- return '❌';
297
- case 'pending_user_review':
298
- return '👀';
299
- case 'closed':
300
- return '🔒';
301
- default:
302
- return '⚫';
303
- }
304
- }
305
- function truncate(str, maxLength) {
306
- if (str.length <= maxLength)
307
- return str;
308
- return str.slice(0, maxLength - 3) + '...';
309
- }
310
- //# sourceMappingURL=backlog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backlog.js","sourceRoot":"","sources":["../../src/commands/backlog.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAW,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AA8BrE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,OAKC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IAEvC,oCAAoC;IACpC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IACE,CAAC,UAAU;QACX,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,CAAC,MAAM,GAAG,EAAE;QACtB,UAAU,CAAC,MAAM,GAAG,EAAE,EACtB,CAAC;QACD,OAAO,CAAC,KAAK,CACX,kEAAkE,UAAU,EAAE,MAAM,IAAI,CAAC,GAAG,CAC7F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG;QACpB,SAAS;QACT,aAAa;QACb,QAAQ;QACR,SAAS;QACT,WAAW;QACX,WAAW;QACX,QAAQ;QACR,gBAAgB,EAAE,6BAA6B;QAC/C,UAAU,EAAE,qBAAqB;QACjC,KAAK;KACN,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,KAAK,CACX,gCAAgC,YAAY,IAAI,QAAQ,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE;YAC1D,SAAS;YACT,UAAU,EAAE,UAAkC;SAC/C,CAAC,CAAe,CAAC;QAElB,wBAAwB;QACxB,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YACrD,SAAS;YACT,UAAU,EAAE,UAAkC;YAC9C,YAAY,EACV,YAAY,KAAK,KAAK;gBACpB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAE,YASc;YACrB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;SAC3B,CAAC,CAAW,CAAC;QAEd,iBAAiB;QACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,sBAAsB,WAAW,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,gBAAgB;QAChB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACvB,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;oBAC5D,KAAK,EAAE,OAAO;oBACd,GAAG,EAAE,SAAS;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;gBAEH,oDAAoD;gBACpD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE,CAAC,CAAC;gBACzF,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CACT,eAAe,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACjF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,uEAAuE;QACvE,IAAI,cAAsB,CAAC;QAC3B,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YAC3B,cAAc;gBACZ,MAAM,CAAC,OAAO;oBACd,MAAM,CAAC,WAAW;oBAClB,MAAM,CAAC,MAAM;oBACb,MAAM,CAAC,OAAO;oBACd,MAAM,CAAC,SAAS;oBAChB,MAAM,CAAC,SAAS,CAAC;QACrB,CAAC;aAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QACxF,CAAC;aAAM,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,cAAc,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACvD,CAAC;aAAM,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;YAC7C,gEAAgE;YAChE,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,MAAM,CAAC,YAAgC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5E,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CACT,WAAW,KAAK,CAAC,MAAM,OAAO,cAAc,sCAAsC,CACnF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA4B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,OAGC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IAEvC,oCAAoC;IACpC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IACE,CAAC,UAAU;QACX,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,CAAC,MAAM,GAAG,EAAE;QACtB,UAAU,CAAC,MAAM,GAAG,EAAE,EACtB,CAAC;QACD,OAAO,CAAC,KAAK,CACX,kEAAkE,UAAU,EAAE,MAAM,IAAI,CAAC,GAAG,CAC7F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE;YACzD,SAAS;YACT,UAAU,EAAE,UAAkC;YAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;YAC/B,SAAS,EAAE,OAAO,CAAC,IAAI;YACvB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAA0B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAIC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IAEvC,oCAAoC;IACpC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IACE,CAAC,UAAU;QACX,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,CAAC,MAAM,GAAG,EAAE;QACtB,UAAU,CAAC,MAAM,GAAG,EAAE,EACtB,CAAC;QACD,OAAO,CAAC,KAAK,CACX,kEAAkE,UAAU,EAAE,MAAM,IAAI,CAAC,GAAG,CAC7F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAChE,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,MAA8B;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAmB,CAAC;QAEtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA+B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,OAGC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IAEvC,oCAAoC;IACpC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IACE,CAAC,UAAU;QACX,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,CAAC,MAAM,GAAG,EAAE;QACtB,UAAU,CAAC,MAAM,GAAG,EAAE,EACtB,CAAC;QACD,OAAO,CAAC,KAAK,CACX,kEAAkE,UAAU,EAAE,MAAM,IAAI,CAAC,GAAG,CAC7F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACjD,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,MAA8B;SAC/C,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA6B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,GAAG,CAAC;QACb,KAAK,qBAAqB;YACxB,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,SAAiB;IAC9C,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC7C,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Feature commands for listing and inspecting features
3
- */
4
- /**
5
- * List features in a chatroom
6
- */
7
- export declare function listFeatures(chatroomId: string, options: {
8
- limit?: number;
9
- }): Promise<void>;
10
- /**
11
- * Inspect a specific feature
12
- */
13
- export declare function inspectFeature(chatroomId: string, messageId: string): Promise<void>;
14
- //# sourceMappingURL=feature.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../src/commands/feature.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CA6Ef;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGzF"}
@@ -1,172 +0,0 @@
1
- /**
2
- * Feature commands for listing and inspecting features
3
- */
4
- import { api } from '../api.js';
5
- import { getSessionId } from '../infrastructure/auth/storage.js';
6
- import { getConvexClient } from '../infrastructure/convex/client.js';
7
- /**
8
- * List features in a chatroom
9
- */
10
- export async function listFeatures(chatroomId, options) {
11
- const client = await getConvexClient();
12
- // Get session ID for authentication
13
- const sessionId = getSessionId();
14
- if (!sessionId) {
15
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
16
- process.exit(1);
17
- }
18
- // Validate chatroom ID format
19
- if (!chatroomId ||
20
- typeof chatroomId !== 'string' ||
21
- chatroomId.length < 20 ||
22
- chatroomId.length > 40) {
23
- console.error(`❌ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
24
- process.exit(1);
25
- }
26
- try {
27
- const features = (await client.query(api.messages.listFeatures, {
28
- sessionId,
29
- chatroomId: chatroomId,
30
- limit: options.limit || 10,
31
- }));
32
- // Display header
33
- console.log('');
34
- console.log('══════════════════════════════════════════════════');
35
- console.log('📦 FEATURES');
36
- console.log('══════════════════════════════════════════════════');
37
- console.log(`Chatroom: ${chatroomId}`);
38
- console.log('');
39
- if (features.length === 0) {
40
- console.log('No features found.');
41
- console.log('');
42
- console.log('💡 Features are created when an agent classifies a task as new_feature');
43
- console.log(' and provides a title, description, and technical specifications.');
44
- }
45
- else {
46
- console.log('──────────────────────────────────────────────────');
47
- console.log('📝 FEATURE LIST');
48
- console.log('──────────────────────────────────────────────────');
49
- for (let i = 0; i < features.length; i++) {
50
- const feature = features[i];
51
- const date = new Date(feature.createdAt).toLocaleString('en-US', {
52
- month: 'short',
53
- day: 'numeric',
54
- hour: '2-digit',
55
- minute: '2-digit',
56
- hour12: false,
57
- });
58
- console.log(`#${i + 1} ${feature.title}`);
59
- if (feature.descriptionPreview) {
60
- console.log(` ${feature.descriptionPreview}`);
61
- }
62
- console.log(` ID: ${feature.id}`);
63
- console.log(` Created: ${date}`);
64
- console.log('');
65
- }
66
- }
67
- console.log('──────────────────────────────────────────────────');
68
- console.log(`Showing ${features.length} feature(s)`);
69
- console.log('');
70
- console.log('💡 Use `chatroom feature inspect <chatroomId> <messageId>` for full details');
71
- console.log('');
72
- }
73
- catch (error) {
74
- console.error(`❌ Failed to list features: ${error.message}`);
75
- process.exit(1);
76
- }
77
- }
78
- /**
79
- * Inspect a specific feature
80
- */
81
- export async function inspectFeature(chatroomId, messageId) {
82
- const client = await getConvexClient();
83
- // Get session ID for authentication
84
- const sessionId = getSessionId();
85
- if (!sessionId) {
86
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
87
- process.exit(1);
88
- }
89
- // Validate chatroom ID format
90
- if (!chatroomId ||
91
- typeof chatroomId !== 'string' ||
92
- chatroomId.length < 20 ||
93
- chatroomId.length > 40) {
94
- console.error(`❌ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
95
- process.exit(1);
96
- }
97
- // Validate message ID
98
- if (!messageId || messageId.trim().length === 0) {
99
- console.error(`❌ Message ID is required`);
100
- process.exit(1);
101
- }
102
- try {
103
- const result = (await client.query(api.messages.inspectFeature, {
104
- sessionId,
105
- chatroomId: chatroomId,
106
- messageId: messageId,
107
- }));
108
- const { feature, thread } = result;
109
- const date = new Date(feature.createdAt).toLocaleString('en-US', {
110
- month: 'short',
111
- day: 'numeric',
112
- year: 'numeric',
113
- hour: '2-digit',
114
- minute: '2-digit',
115
- hour12: false,
116
- });
117
- // Display header
118
- console.log('');
119
- console.log('══════════════════════════════════════════════════');
120
- console.log(`📦 FEATURE: ${feature.title}`);
121
- console.log('══════════════════════════════════════════════════');
122
- console.log(`ID: ${feature.id}`);
123
- console.log(`Created: ${date}`);
124
- console.log('');
125
- // Description
126
- if (feature.description) {
127
- console.log('──────────────────────────────────────────────────');
128
- console.log('📝 DESCRIPTION');
129
- console.log('──────────────────────────────────────────────────');
130
- console.log(feature.description);
131
- console.log('');
132
- }
133
- // Tech specs
134
- if (feature.techSpecs) {
135
- console.log('──────────────────────────────────────────────────');
136
- console.log('🔧 TECHNICAL SPECIFICATIONS');
137
- console.log('──────────────────────────────────────────────────');
138
- console.log(feature.techSpecs);
139
- console.log('');
140
- }
141
- // Original request
142
- console.log('──────────────────────────────────────────────────');
143
- console.log('💬 ORIGINAL REQUEST');
144
- console.log('──────────────────────────────────────────────────');
145
- console.log(feature.content);
146
- console.log('');
147
- // Thread
148
- if (thread.length > 0) {
149
- console.log('──────────────────────────────────────────────────');
150
- console.log('📜 CONVERSATION THREAD');
151
- console.log('──────────────────────────────────────────────────');
152
- for (const msg of thread) {
153
- const msgDate = new Date(msg.createdAt).toLocaleString('en-US', {
154
- hour: '2-digit',
155
- minute: '2-digit',
156
- hour12: false,
157
- });
158
- const typeLabel = msg.type === 'handoff' ? ' [handoff]' : '';
159
- console.log(`[${msgDate}] ${msg.senderRole}${typeLabel}:`);
160
- console.log(` ${msg.content.substring(0, 200)}${msg.content.length > 200 ? '...' : ''}`);
161
- console.log('');
162
- }
163
- }
164
- console.log('══════════════════════════════════════════════════');
165
- console.log('');
166
- }
167
- catch (error) {
168
- console.error(`❌ Failed to inspect feature: ${error.message}`);
169
- process.exit(1);
170
- }
171
- }
172
- //# sourceMappingURL=feature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../src/commands/feature.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Guidelines CLI Commands
3
- *
4
- * Commands for viewing review guidelines by type.
5
- */
6
- export interface ViewGuidelinesOptions {
7
- type: string;
8
- }
9
- /**
10
- * View guidelines by type
11
- */
12
- export declare function viewGuidelines(options: ViewGuidelinesOptions): Promise<void>;
13
- /**
14
- * List available guideline types
15
- */
16
- export declare function listGuidelineTypes(): Promise<void>;
17
- //# sourceMappingURL=guidelines.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guidelines.d.ts","sourceRoot":"","sources":["../../src/commands/guidelines.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAID;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkClF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BxD"}
@@ -1,71 +0,0 @@
1
- /**
2
- * Guidelines CLI Commands
3
- *
4
- * Commands for viewing review guidelines by type.
5
- */
6
- import { api } from '../api.js';
7
- import { getSessionId } from '../infrastructure/auth/storage.js';
8
- import { getConvexClient } from '../infrastructure/convex/client.js';
9
- const VALID_TYPES = ['coding', 'security', 'design', 'performance', 'all'];
10
- /**
11
- * View guidelines by type
12
- */
13
- export async function viewGuidelines(options) {
14
- const { type } = options;
15
- // Validate type
16
- if (!VALID_TYPES.includes(type)) {
17
- console.error(`❌ Invalid guideline type: "${type}"`);
18
- console.error(` Valid types: ${VALID_TYPES.join(', ')}`);
19
- process.exit(1);
20
- }
21
- // Get session ID for authentication
22
- const sessionId = getSessionId();
23
- if (!sessionId) {
24
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
25
- process.exit(1);
26
- }
27
- const client = await getConvexClient();
28
- try {
29
- const result = (await client.query(api.guidelines.getGuidelines, {
30
- type: type,
31
- }));
32
- console.log(`\n${'═'.repeat(60)}`);
33
- console.log(`📋 ${result.title}`);
34
- console.log(`${'═'.repeat(60)}\n`);
35
- console.log(result.content);
36
- console.log(`\n${'═'.repeat(60)}\n`);
37
- }
38
- catch (error) {
39
- const err = error;
40
- console.error(`❌ Error fetching guidelines: ${err.message}`);
41
- process.exit(1);
42
- }
43
- }
44
- /**
45
- * List available guideline types
46
- */
47
- export async function listGuidelineTypes() {
48
- // Get session ID for authentication
49
- const sessionId = getSessionId();
50
- if (!sessionId) {
51
- console.error(`❌ Not authenticated. Please run: chatroom auth login`);
52
- process.exit(1);
53
- }
54
- const client = await getConvexClient();
55
- try {
56
- const types = (await client.query(api.guidelines.listGuidelineTypes, {}));
57
- console.log(`\n📋 Available Guideline Types\n`);
58
- console.log(`${'─'.repeat(50)}`);
59
- for (const t of types) {
60
- console.log(` ${t.type.padEnd(12)} - ${t.description}`);
61
- }
62
- console.log(`${'─'.repeat(50)}`);
63
- console.log(`\nUsage: chatroom guidelines view --type=<type>\n`);
64
- }
65
- catch (error) {
66
- const err = error;
67
- console.error(`❌ Error fetching guideline types: ${err.message}`);
68
- process.exit(1);
69
- }
70
- }
71
- //# sourceMappingURL=guidelines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guidelines.js","sourceRoot":"","sources":["../../src/commands/guidelines.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Complete a task and hand off to the next role
3
- *
4
- * This command uses the atomic handoff mutation which performs all of
5
- * these operations in a single transaction:
6
- * 1. Validates the handoff is allowed (classification rules)
7
- * 2. Completes all in_progress tasks in the chatroom
8
- * 3. Sends the handoff message
9
- * 4. Creates a task for the target agent (if not handing to user)
10
- * 5. Updates the sender's participant status to waiting
11
- * 6. Promotes the next queued task to pending
12
- */
13
- interface HandoffOptions {
14
- role: string;
15
- message: string;
16
- nextRole: string;
17
- }
18
- export declare function handoff(chatroomId: string, options: HandoffOptions): Promise<void>;
19
- export {};
20
- //# sourceMappingURL=handoff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FxF"}