chatroom-cli 1.0.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.
Files changed (81) hide show
  1. package/dist/api.d.ts +86 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +29 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/commands/auth-login.d.ts +10 -0
  6. package/dist/commands/auth-login.d.ts.map +1 -0
  7. package/dist/commands/auth-login.js +165 -0
  8. package/dist/commands/auth-login.js.map +1 -0
  9. package/dist/commands/auth-logout.d.ts +6 -0
  10. package/dist/commands/auth-logout.d.ts.map +1 -0
  11. package/dist/commands/auth-logout.js +21 -0
  12. package/dist/commands/auth-logout.js.map +1 -0
  13. package/dist/commands/auth-status.d.ts +6 -0
  14. package/dist/commands/auth-status.d.ts.map +1 -0
  15. package/dist/commands/auth-status.js +50 -0
  16. package/dist/commands/auth-status.js.map +1 -0
  17. package/dist/commands/complete.d.ts +5 -0
  18. package/dist/commands/complete.d.ts.map +1 -0
  19. package/dist/commands/complete.js +36 -0
  20. package/dist/commands/complete.js.map +1 -0
  21. package/dist/commands/create.d.ts +9 -0
  22. package/dist/commands/create.d.ts.map +1 -0
  23. package/dist/commands/create.js +58 -0
  24. package/dist/commands/create.js.map +1 -0
  25. package/dist/commands/init.d.ts +9 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +45 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/list.d.ts +5 -0
  30. package/dist/commands/list.d.ts.map +1 -0
  31. package/dist/commands/list.js +22 -0
  32. package/dist/commands/list.js.map +1 -0
  33. package/dist/commands/send.d.ts +11 -0
  34. package/dist/commands/send.d.ts.map +1 -0
  35. package/dist/commands/send.js +55 -0
  36. package/dist/commands/send.js.map +1 -0
  37. package/dist/commands/task-complete.d.ts +12 -0
  38. package/dist/commands/task-complete.d.ts.map +1 -0
  39. package/dist/commands/task-complete.js +58 -0
  40. package/dist/commands/task-complete.js.map +1 -0
  41. package/dist/commands/wait-for-message.d.ts +11 -0
  42. package/dist/commands/wait-for-message.d.ts.map +1 -0
  43. package/dist/commands/wait-for-message.js +249 -0
  44. package/dist/commands/wait-for-message.js.map +1 -0
  45. package/dist/config/defaults.d.ts +16 -0
  46. package/dist/config/defaults.d.ts.map +1 -0
  47. package/dist/config/defaults.js +78 -0
  48. package/dist/config/defaults.js.map +1 -0
  49. package/dist/config/loader.d.ts +52 -0
  50. package/dist/config/loader.d.ts.map +1 -0
  51. package/dist/config/loader.js +204 -0
  52. package/dist/config/loader.js.map +1 -0
  53. package/dist/config/schema.d.ts +56 -0
  54. package/dist/config/schema.d.ts.map +1 -0
  55. package/dist/config/schema.js +106 -0
  56. package/dist/config/schema.js.map +1 -0
  57. package/dist/config.d.ts +18 -0
  58. package/dist/config.d.ts.map +1 -0
  59. package/dist/config.js +18 -0
  60. package/dist/config.js.map +1 -0
  61. package/dist/index.d.ts +9 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +132 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/infrastructure/auth/middleware.d.ts +20 -0
  66. package/dist/infrastructure/auth/middleware.d.ts.map +1 -0
  67. package/dist/infrastructure/auth/middleware.js +86 -0
  68. package/dist/infrastructure/auth/middleware.js.map +1 -0
  69. package/dist/infrastructure/auth/storage.d.ts +44 -0
  70. package/dist/infrastructure/auth/storage.d.ts.map +1 -0
  71. package/dist/infrastructure/auth/storage.js +113 -0
  72. package/dist/infrastructure/auth/storage.js.map +1 -0
  73. package/dist/infrastructure/convex/client.d.ts +16 -0
  74. package/dist/infrastructure/convex/client.d.ts.map +1 -0
  75. package/dist/infrastructure/convex/client.js +52 -0
  76. package/dist/infrastructure/convex/client.js.map +1 -0
  77. package/dist/infrastructure/history/storage.d.ts +21 -0
  78. package/dist/infrastructure/history/storage.d.ts.map +1 -0
  79. package/dist/infrastructure/history/storage.js +56 -0
  80. package/dist/infrastructure/history/storage.js.map +1 -0
  81. package/package.json +40 -0
package/dist/api.d.ts ADDED
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Convex API access following proper conventions
3
+ * See: https://docs.convex.dev/client/react
4
+ *
5
+ * We use typed function references to maintain type safety
6
+ */
7
+ import type { FunctionReference } from 'convex/server';
8
+ export type Id<TableName extends string> = string & {
9
+ __tableName: TableName;
10
+ };
11
+ export interface Chatroom {
12
+ _id: Id<'chatroom_rooms'>;
13
+ status: 'active' | 'interrupted' | 'completed';
14
+ ownerId: Id<'users'>;
15
+ teamId?: string;
16
+ teamName?: string;
17
+ teamRoles?: string[];
18
+ teamEntryPoint?: string;
19
+ _creationTime?: number;
20
+ }
21
+ export interface Message {
22
+ _id: Id<'chatroom_messages'>;
23
+ chatroomId: Id<'chatroom_rooms'>;
24
+ senderRole: string;
25
+ content: string;
26
+ type: 'message' | 'handoff' | 'interrupt' | 'join';
27
+ targetRole?: string;
28
+ claimedByRole?: string;
29
+ _creationTime?: number;
30
+ }
31
+ export interface Participant {
32
+ _id: Id<'chatroom_participants'>;
33
+ chatroomId: Id<'chatroom_rooms'>;
34
+ role: string;
35
+ status: 'active' | 'waiting' | 'idle';
36
+ _creationTime?: number;
37
+ }
38
+ export interface TeamReadinessInfo {
39
+ isReady: boolean;
40
+ teamName: string;
41
+ expectedRoles: string[];
42
+ presentRoles: string[];
43
+ missingRoles: string[];
44
+ }
45
+ export declare const api: {
46
+ chatrooms: {
47
+ get: FunctionReference<"query", "public">;
48
+ create: FunctionReference<"mutation", "public">;
49
+ updateStatus: FunctionReference<"mutation", "public">;
50
+ interrupt: FunctionReference<"mutation", "public">;
51
+ getTeamReadiness: FunctionReference<"query", "public">;
52
+ };
53
+ messages: {
54
+ send: FunctionReference<"mutation", "public">;
55
+ list: FunctionReference<"query", "public">;
56
+ getLatestForRole: FunctionReference<"query", "public">;
57
+ claimMessage: FunctionReference<"mutation", "public">;
58
+ };
59
+ participants: {
60
+ join: FunctionReference<"mutation", "public">;
61
+ updateStatus: FunctionReference<"mutation", "public">;
62
+ list: FunctionReference<"query", "public">;
63
+ };
64
+ cliAuth: {
65
+ createAuthRequest: FunctionReference<"mutation", "public">;
66
+ getAuthRequestStatus: FunctionReference<"query", "public">;
67
+ validateSession: FunctionReference<"query", "public">;
68
+ touchSession: FunctionReference<"mutation", "public">;
69
+ };
70
+ };
71
+ export interface AuthRequestResult {
72
+ requestId: string;
73
+ expiresAt: number;
74
+ }
75
+ export interface AuthRequestStatus {
76
+ status: 'pending' | 'approved' | 'denied' | 'expired' | 'not_found';
77
+ sessionId?: string;
78
+ expiresAt?: number;
79
+ }
80
+ export interface SessionValidation {
81
+ valid: boolean;
82
+ userId?: string;
83
+ userName?: string;
84
+ reason?: string;
85
+ }
86
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js ADDED
@@ -0,0 +1,29 @@
1
+ // Create typed function references for the chatroom-related APIs
2
+ // This follows Convex conventions while avoiding backend dependency issues
3
+ export const api = {
4
+ chatrooms: {
5
+ get: 'chatrooms:get',
6
+ create: 'chatrooms:create',
7
+ updateStatus: 'chatrooms:updateStatus',
8
+ interrupt: 'chatrooms:interrupt',
9
+ getTeamReadiness: 'chatrooms:getTeamReadiness',
10
+ },
11
+ messages: {
12
+ send: 'messages:send',
13
+ list: 'messages:list',
14
+ getLatestForRole: 'messages:getLatestForRole',
15
+ claimMessage: 'messages:claimMessage',
16
+ },
17
+ participants: {
18
+ join: 'participants:join',
19
+ updateStatus: 'participants:updateStatus',
20
+ list: 'participants:list',
21
+ },
22
+ cliAuth: {
23
+ createAuthRequest: 'cliAuth:createAuthRequest',
24
+ getAuthRequestStatus: 'cliAuth:getAuthRequestStatus',
25
+ validateSession: 'cliAuth:validateSession',
26
+ touchSession: 'cliAuth:touchSession',
27
+ },
28
+ };
29
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAkDA,iEAAiE;AACjE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,SAAS,EAAE;QACT,GAAG,EAAE,eAAkE;QACvE,MAAM,EAAE,kBAAwE;QAChF,YAAY,EAAE,wBAA8E;QAC5F,SAAS,EAAE,qBAA2E;QACtF,gBAAgB,EAAE,4BAGjB;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,eAAqE;QAC3E,IAAI,EAAE,eAAkE;QACxE,gBAAgB,EAAE,2BAGjB;QACD,YAAY,EAAE,uBAA6E;KAC5F;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mBAAyE;QAC/E,YAAY,EAAE,2BAAiF;QAC/F,IAAI,EAAE,mBAAsE;KAC7E;IACD,OAAO,EAAE;QACP,iBAAiB,EAAE,2BAGlB;QACD,oBAAoB,EAAE,8BAGrB;QACD,eAAe,EAAE,yBAA4E;QAC7F,YAAY,EAAE,sBAA4E;KAC3F;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Auth login command
3
+ * Implements device authorization flow for CLI authentication
4
+ */
5
+ interface AuthLoginOptions {
6
+ force?: boolean;
7
+ }
8
+ export declare function authLogin(options: AuthLoginOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=auth-login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../../src/commands/auth-login.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAwDD,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0HxE"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Auth login command
3
+ * Implements device authorization flow for CLI authentication
4
+ */
5
+ import { api } from '../api.js';
6
+ import { loadConfig } from '../config/loader.js';
7
+ import { saveAuthData, getDeviceName, getCliVersion, isAuthenticated, getAuthFilePath, } from '../infrastructure/auth/storage.js';
8
+ import { getConvexClient } from '../infrastructure/convex/client.js';
9
+ // Poll interval for checking auth status
10
+ const AUTH_POLL_INTERVAL_MS = 2000;
11
+ /**
12
+ * Get the webapp URL for the auth page
13
+ * Priority order:
14
+ * 1. CHATROOM_WEB_URL environment variable (highest priority)
15
+ * 2. webappUrl from ~/.chatroom/chatroom.jsonc config
16
+ * 3. Falls back to http://localhost:3000
17
+ */
18
+ function getWebAppUrl() {
19
+ // 1. Check environment variable override
20
+ const webAppUrlOverride = process.env.CHATROOM_WEB_URL;
21
+ if (webAppUrlOverride) {
22
+ return webAppUrlOverride;
23
+ }
24
+ // 2. Check config file
25
+ try {
26
+ const config = loadConfig();
27
+ if (config?.config?.webappUrl) {
28
+ return config.config.webappUrl;
29
+ }
30
+ }
31
+ catch {
32
+ // Config not found or invalid, continue to default
33
+ }
34
+ // 3. Default to standard Next.js dev port
35
+ return 'http://localhost:3000';
36
+ }
37
+ /**
38
+ * Open URL in the default browser
39
+ */
40
+ async function openBrowser(url) {
41
+ const { exec } = await import('node:child_process');
42
+ const { promisify } = await import('node:util');
43
+ const execAsync = promisify(exec);
44
+ const platform = process.platform;
45
+ try {
46
+ if (platform === 'darwin') {
47
+ await execAsync(`open "${url}"`);
48
+ }
49
+ else if (platform === 'win32') {
50
+ await execAsync(`start "" "${url}"`);
51
+ }
52
+ else {
53
+ // Linux and others
54
+ await execAsync(`xdg-open "${url}"`);
55
+ }
56
+ }
57
+ catch {
58
+ // If opening browser fails, user can manually visit the URL
59
+ console.log(`\nāš ļø Could not open browser automatically.`);
60
+ console.log(` Please visit the URL manually.`);
61
+ }
62
+ }
63
+ export async function authLogin(options) {
64
+ // Check if already authenticated
65
+ if (isAuthenticated() && !options.force) {
66
+ console.log(`āœ… Already authenticated.`);
67
+ console.log(` Auth file: ${getAuthFilePath()}`);
68
+ console.log(`\n Use --force to re-authenticate.`);
69
+ return;
70
+ }
71
+ const client = await getConvexClient();
72
+ // Get device info
73
+ const deviceName = getDeviceName();
74
+ const cliVersion = getCliVersion();
75
+ console.log(`\n${'═'.repeat(50)}`);
76
+ console.log(`šŸ” CHATROOM CLI AUTHENTICATION`);
77
+ console.log(`${'═'.repeat(50)}`);
78
+ console.log(`\nDevice: ${deviceName}`);
79
+ console.log(`CLI Version: ${cliVersion}`);
80
+ // Create auth request
81
+ console.log(`\nā³ Creating authentication request...`);
82
+ const result = (await client.mutation(api.cliAuth.createAuthRequest, {
83
+ deviceName,
84
+ cliVersion,
85
+ }));
86
+ const { requestId, expiresAt } = result;
87
+ const expiresInSeconds = Math.round((expiresAt - Date.now()) / 1000);
88
+ console.log(`\nāœ… Auth request created`);
89
+ console.log(` Request ID: ${requestId.substring(0, 8)}...`);
90
+ console.log(` Expires in: ${expiresInSeconds} seconds`);
91
+ // Get the webapp URL (reads from .env.local PORT or uses defaults)
92
+ const webAppUrl = getWebAppUrl();
93
+ // The auth page should be at /cli-auth
94
+ const authUrl = `${webAppUrl}/cli-auth?request=${requestId}`;
95
+ console.log(`\n${'─'.repeat(50)}`);
96
+ console.log(`šŸ“± AUTHORIZATION REQUIRED`);
97
+ console.log(`${'─'.repeat(50)}`);
98
+ console.log(`\nOpening browser for authorization...`);
99
+ console.log(`\nIf the browser doesn't open, visit this URL:`);
100
+ console.log(`\n ${authUrl}`);
101
+ console.log(`\n${'─'.repeat(50)}`);
102
+ // Open browser
103
+ await openBrowser(authUrl);
104
+ // Poll for approval
105
+ console.log(`\nā³ Waiting for authorization...`);
106
+ console.log(` (Press Ctrl+C to cancel)\n`);
107
+ let pollCount = 0;
108
+ const maxPolls = Math.ceil((expiresAt - Date.now()) / AUTH_POLL_INTERVAL_MS);
109
+ const poll = async () => {
110
+ pollCount++;
111
+ try {
112
+ const status = (await client.query(api.cliAuth.getAuthRequestStatus, {
113
+ requestId,
114
+ }));
115
+ if (status.status === 'approved' && status.sessionId) {
116
+ // Success! Save the session
117
+ saveAuthData({
118
+ sessionId: status.sessionId,
119
+ createdAt: new Date().toISOString(),
120
+ deviceName,
121
+ cliVersion,
122
+ });
123
+ console.log(`\n${'═'.repeat(50)}`);
124
+ console.log(`āœ… AUTHENTICATION SUCCESSFUL`);
125
+ console.log(`${'═'.repeat(50)}`);
126
+ console.log(`\nSession stored at: ${getAuthFilePath()}`);
127
+ console.log(`\nYou can now use chatroom commands.`);
128
+ return true;
129
+ }
130
+ if (status.status === 'denied') {
131
+ console.log(`\nāŒ Authorization denied by user.`);
132
+ process.exit(1);
133
+ }
134
+ if (status.status === 'expired' || status.status === 'not_found') {
135
+ console.log(`\nāŒ Authorization request expired.`);
136
+ console.log(` Please try again: chatroom auth login`);
137
+ process.exit(1);
138
+ }
139
+ // Still pending
140
+ if (pollCount % 5 === 0) {
141
+ const remainingSeconds = Math.round((expiresAt - Date.now()) / 1000);
142
+ process.stdout.write(`\r Waiting... (${remainingSeconds}s remaining) `);
143
+ }
144
+ if (pollCount >= maxPolls) {
145
+ console.log(`\nāŒ Authorization request expired.`);
146
+ console.log(` Please try again: chatroom auth login`);
147
+ process.exit(1);
148
+ }
149
+ return false;
150
+ }
151
+ catch (error) {
152
+ const err = error;
153
+ console.error(`\nāš ļø Error polling for authorization: ${err.message}`);
154
+ return false;
155
+ }
156
+ };
157
+ // Start polling loop
158
+ while (true) {
159
+ const success = await poll();
160
+ if (success)
161
+ break;
162
+ await new Promise((resolve) => setTimeout(resolve, AUTH_POLL_INTERVAL_MS));
163
+ }
164
+ }
165
+ //# sourceMappingURL=auth-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../../src/commands/auth-login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Auth logout command
3
+ * Clears CLI authentication
4
+ */
5
+ export declare function authLogout(): Promise<void>;
6
+ //# sourceMappingURL=auth-logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-logout.d.ts","sourceRoot":"","sources":["../../src/commands/auth-logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAehD"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Auth logout command
3
+ * Clears CLI authentication
4
+ */
5
+ import { clearAuthData, getAuthFilePath, isAuthenticated } from '../infrastructure/auth/storage.js';
6
+ export async function authLogout() {
7
+ if (!isAuthenticated()) {
8
+ console.log(`ā„¹ļø Not currently authenticated.`);
9
+ return;
10
+ }
11
+ const cleared = clearAuthData();
12
+ if (cleared) {
13
+ console.log(`āœ… Logged out successfully.`);
14
+ console.log(` Removed: ${getAuthFilePath()}`);
15
+ }
16
+ else {
17
+ console.error(`āŒ Failed to clear authentication data.`);
18
+ process.exit(1);
19
+ }
20
+ }
21
+ //# sourceMappingURL=auth-logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-logout.js","sourceRoot":"","sources":["../../src/commands/auth-logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpG,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,eAAe,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Auth status command
3
+ * Shows current authentication status
4
+ */
5
+ export declare function authStatus(): Promise<void>;
6
+ //# sourceMappingURL=auth-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-status.d.ts","sourceRoot":"","sources":["../../src/commands/auth-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA6ChD"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Auth status command
3
+ * Shows current authentication status
4
+ */
5
+ import { api } from '../api.js';
6
+ import { loadAuthData, getAuthFilePath, isAuthenticated } from '../infrastructure/auth/storage.js';
7
+ import { getConvexClient } from '../infrastructure/convex/client.js';
8
+ export async function authStatus() {
9
+ console.log(`\n${'═'.repeat(50)}`);
10
+ console.log(`šŸ” AUTHENTICATION STATUS`);
11
+ console.log(`${'═'.repeat(50)}`);
12
+ const authData = loadAuthData();
13
+ if (!isAuthenticated() || !authData) {
14
+ console.log(`\nāŒ Not authenticated`);
15
+ console.log(`\n Run: chatroom auth login`);
16
+ return;
17
+ }
18
+ console.log(`\nšŸ“ Auth file: ${getAuthFilePath()}`);
19
+ console.log(`šŸ“… Created: ${authData.createdAt}`);
20
+ if (authData.deviceName) {
21
+ console.log(`šŸ’» Device: ${authData.deviceName}`);
22
+ }
23
+ if (authData.cliVersion) {
24
+ console.log(`šŸ“¦ CLI Version: ${authData.cliVersion}`);
25
+ }
26
+ // Validate session with backend
27
+ console.log(`\nā³ Validating session...`);
28
+ try {
29
+ const client = await getConvexClient();
30
+ const validation = (await client.query(api.cliAuth.validateSession, {
31
+ sessionId: authData.sessionId,
32
+ }));
33
+ if (validation.valid) {
34
+ console.log(`\nāœ… Session is valid`);
35
+ if (validation.userName) {
36
+ console.log(`šŸ‘¤ User: ${validation.userName}`);
37
+ }
38
+ }
39
+ else {
40
+ console.log(`\nāŒ Session is invalid: ${validation.reason}`);
41
+ console.log(`\n Run: chatroom auth login`);
42
+ }
43
+ }
44
+ catch (error) {
45
+ const err = error;
46
+ console.log(`\nāš ļø Could not validate session: ${err.message}`);
47
+ console.log(` Session may still be valid. Try running a command.`);
48
+ }
49
+ }
50
+ //# sourceMappingURL=auth-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-status.js","sourceRoot":"","sources":["../../src/commands/auth-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAA0B,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE;YAClE,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAsB,CAAC;QAEzB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Complete a chatroom
3
+ */
4
+ export declare function completeChatroom(chatroomId: string): Promise<void>;
5
+ //# sourceMappingURL=complete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCxE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Complete a chatroom
3
+ */
4
+ import { api } from '../api.js';
5
+ import { getSessionId } from '../infrastructure/auth/storage.js';
6
+ import { getConvexClient } from '../infrastructure/convex/client.js';
7
+ export async function completeChatroom(chatroomId) {
8
+ const client = await getConvexClient();
9
+ // Get session ID for authentication
10
+ const sessionId = getSessionId();
11
+ if (!sessionId) {
12
+ console.error(`āŒ Not authenticated. Please run: chatroom auth login`);
13
+ process.exit(1);
14
+ }
15
+ // Validate chatroom ID format
16
+ if (!chatroomId ||
17
+ typeof chatroomId !== 'string' ||
18
+ chatroomId.length < 20 ||
19
+ chatroomId.length > 40) {
20
+ console.error(`āŒ Invalid chatroom ID format: ID must be 20-40 characters (got ${chatroomId?.length || 0})`);
21
+ process.exit(1);
22
+ }
23
+ try {
24
+ await client.mutation(api.chatrooms.updateStatus, {
25
+ sessionId,
26
+ chatroomId: chatroomId,
27
+ status: 'completed',
28
+ });
29
+ console.log(`āœ… Chatroom ${chatroomId} marked as completed`);
30
+ }
31
+ catch (error) {
32
+ console.error(`āŒ Failed to complete chatroom: ${error.message}`);
33
+ process.exit(1);
34
+ }
35
+ }
36
+ //# sourceMappingURL=complete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.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;AAErE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,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,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;YAChD,SAAS;YACT,UAAU,EAAE,UAAkC;YAC9C,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Create a new chatroom
3
+ */
4
+ interface CreateOptions {
5
+ team?: string;
6
+ }
7
+ export declare function createChatroom(options?: CreateOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD/E"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Create a new chatroom
3
+ */
4
+ import { api } from '../api.js';
5
+ import { loadConfig, getTeam, getDefaultTeam, getTeamIds } from '../config/loader.js';
6
+ import { getSessionId } from '../infrastructure/auth/storage.js';
7
+ import { getConvexClient } from '../infrastructure/convex/client.js';
8
+ export async function createChatroom(options = {}) {
9
+ const client = await getConvexClient();
10
+ // Get session ID for authentication
11
+ const sessionId = getSessionId();
12
+ if (!sessionId) {
13
+ console.error(`āŒ Not authenticated. Please run: chatroom auth login`);
14
+ process.exit(1);
15
+ }
16
+ // Load configuration
17
+ const { config, configPath } = loadConfig();
18
+ // Determine which team to use
19
+ let teamId;
20
+ let team;
21
+ if (options.team) {
22
+ team = getTeam(config, options.team);
23
+ if (!team) {
24
+ console.error(`āŒ Team '${options.team}' not found`);
25
+ console.error(` Available teams: ${getTeamIds(config).join(', ')}`);
26
+ process.exit(1);
27
+ }
28
+ teamId = options.team;
29
+ }
30
+ else {
31
+ teamId = config.defaultTeam;
32
+ team = getDefaultTeam(config);
33
+ }
34
+ // Determine entry point (defaults to first role)
35
+ const entryPoint = team.entryPoint ?? team.roles[0];
36
+ // Create the chatroom with team info
37
+ const chatroomId = await client.mutation(api.chatrooms.create, {
38
+ sessionId,
39
+ teamId,
40
+ teamName: team.name,
41
+ teamRoles: team.roles,
42
+ teamEntryPoint: entryPoint,
43
+ });
44
+ console.log(`\nāœ… Chatroom created!`);
45
+ console.log(`šŸ“‹ Chatroom ID: ${chatroomId}`);
46
+ console.log(`šŸ‘„ Team: ${team.name} (${team.roles.join(', ')})`);
47
+ if (configPath) {
48
+ console.log(`šŸ“ Config: ${configPath}`);
49
+ }
50
+ console.log(`\nšŸš€ Next steps:`);
51
+ console.log(` 1. Start agents for each role:`);
52
+ for (const role of team.roles) {
53
+ console.log(` chatroom wait-for-message ${chatroomId} --role=${role}`);
54
+ }
55
+ console.log(`\n 2. Send a message to get started:`);
56
+ console.log(` chatroom send ${chatroomId} --message="Your task here"`);
57
+ }
58
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAMrE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAyB,EAAE;IAC9D,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,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;IAE5C,8BAA8B;IAC9B,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,CAAC;IAET,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAC5B,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,iDAAiD;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpD,qCAAqC;IACrC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QAC7D,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,SAAS,EAAE,IAAI,CAAC,KAAK;QACrB,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,mCAAmC,UAAU,WAAW,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,6BAA6B,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Initialize chatroom configuration
3
+ */
4
+ interface InitOptions {
5
+ force?: boolean;
6
+ }
7
+ export declare function initConfig(options: InitOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAmBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BpE"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Initialize chatroom configuration
3
+ */
4
+ import * as readline from 'readline';
5
+ import { DEFAULT_CONVEX_URL } from '../config/defaults.js';
6
+ import { findConfigPath, createGlobalConfig } from '../config/loader.js';
7
+ /**
8
+ * Prompt user for input
9
+ */
10
+ function prompt(question) {
11
+ const rl = readline.createInterface({
12
+ input: process.stdin,
13
+ output: process.stdout,
14
+ });
15
+ return new Promise((resolve) => {
16
+ rl.question(question, (answer) => {
17
+ rl.close();
18
+ resolve(answer.trim());
19
+ });
20
+ });
21
+ }
22
+ export async function initConfig(options) {
23
+ // Check if config already exists
24
+ const existingConfigPath = findConfigPath();
25
+ if (existingConfigPath && !options.force) {
26
+ console.log(`āœ… Configuration already exists at: ${existingConfigPath}`);
27
+ console.log(' Use --force to overwrite');
28
+ return;
29
+ }
30
+ console.log('\n╔══════════════════════════════════════════════════════════╗');
31
+ console.log('ā•‘ šŸŽ‰ Welcome to Chatroom CLI Setup! šŸŽ‰ ā•‘');
32
+ console.log('ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•\n');
33
+ console.log('Chatroom CLI needs a Convex backend to store messages.');
34
+ console.log('You can use your own deployment or a shared instance.\n');
35
+ console.log(`Default Convex URL: ${DEFAULT_CONVEX_URL}`);
36
+ console.log('(Press Enter to use the default, or enter your own URL)\n');
37
+ const userInput = await prompt('Convex URL: ');
38
+ const convexUrl = userInput || DEFAULT_CONVEX_URL;
39
+ console.log(`\nāœ… Using Convex URL: ${convexUrl}`);
40
+ // Create the global config
41
+ const configPath = createGlobalConfig(convexUrl);
42
+ console.log(`\nšŸ“‹ Configuration saved to: ${configPath}`);
43
+ console.log('\nYou can edit this file later to customize teams and prompts.');
44
+ }
45
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzE;;GAEG;AACH,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;YACvC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAoB;IACnD,iCAAiC;IACjC,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAC;IAE5C,IAAI,kBAAkB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,sCAAsC,kBAAkB,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IAEvE,OAAO,CAAC,GAAG,CAAC,uBAAuB,kBAAkB,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,IAAI,kBAAkB,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;IAElD,2BAA2B;IAC3B,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * List chatroom history
3
+ */
4
+ export declare function listChatrooms(): Promise<void>;
5
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBnD"}