bob-expense-tracker-chatbot 0.0.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/.env.example ADDED
@@ -0,0 +1,15 @@
1
+ # Bob Expense Tracker ChatBot Configuration
2
+
3
+ # Server Ports
4
+ EXPENSE_BOT_PORT=4600
5
+ EXPENSE_BOT_WS_PORT=4601
6
+
7
+ # Environment
8
+ NODE_ENV=development
9
+
10
+ # Project Configuration
11
+ PROJECT_ROOT=.
12
+ BOB_SHELL_PATH=bob
13
+
14
+ # Database
15
+ # Database file will be created automatically as BobExpenseTrackerChatBot.db
package/README.md ADDED
@@ -0,0 +1,238 @@
1
+ # šŸ’° Bob Expense Tracker ChatBot
2
+
3
+ An AI-powered expense tracking chatbot that can be injected into any web application. Built with Node.js, Express, WebSocket, and React.
4
+
5
+ ## Features
6
+
7
+ - šŸ’¬ **Conversational Interface** - Natural language expense tracking
8
+ - šŸ“Š **Budget Analysis** - AI-powered spending insights
9
+ - šŸ·ļø **Category Management** - Organize expenses by category
10
+ - šŸ“ˆ **Real-time Updates** - WebSocket-based live updates
11
+ - šŸŽØ **Beautiful UI** - Modern, responsive React interface
12
+ - šŸ”Œ **Easy Integration** - Works with any web application
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install bob-expense-tracker-chatbot
18
+ ```
19
+
20
+ ## Quick Start
21
+
22
+ ### 1. Initialize
23
+
24
+ ```bash
25
+ npx BobExpenseTrackerChatBot init
26
+ ```
27
+
28
+ This will:
29
+ - Create configuration files
30
+ - Set up environment variables
31
+ - Inject the chatbot script into your HTML files
32
+
33
+ ### 2. Start the Server
34
+
35
+ ```bash
36
+ npx BobExpenseTrackerChatBot start
37
+ ```
38
+
39
+ The chatbot will be available at:
40
+ - HTTP Server: `http://localhost:4600`
41
+ - WebSocket Server: `ws://localhost:4601`
42
+
43
+ ### 3. Open Your Application
44
+
45
+ Open your web application and the expense tracker chatbot will appear as a sidebar!
46
+
47
+ ## Usage
48
+
49
+ ### CLI Commands
50
+
51
+ ```bash
52
+ # Initialize in your project
53
+ BobExpenseTrackerChatBot init
54
+
55
+ # Start production server
56
+ BobExpenseTrackerChatBot start
57
+
58
+ # Start development server with auto-reload
59
+ BobExpenseTrackerChatBot dev
60
+
61
+ # Build for production
62
+ BobExpenseTrackerChatBot build
63
+
64
+ # Show help
65
+ BobExpenseTrackerChatBot help
66
+ ```
67
+
68
+ ### Manual Integration
69
+
70
+ If automatic injection doesn't work, add this script tag to your HTML:
71
+
72
+ ```html
73
+ <script src="http://localhost:4600/public/inject.js"></script>
74
+ ```
75
+
76
+ ## Configuration
77
+
78
+ Edit `BobExpenseTrackerChatBot.config.json`:
79
+
80
+ ```json
81
+ {
82
+ "version": "0.0.1",
83
+ "port": 4600,
84
+ "wsPort": 4601,
85
+ "projectRoot": "/path/to/your/project",
86
+ "bobShellPath": "bob",
87
+ "features": {
88
+ "chat": true,
89
+ "expenseTracking": true,
90
+ "budgetAnalysis": true,
91
+ "categoryManagement": true,
92
+ "reports": true,
93
+ "aiInsights": true
94
+ }
95
+ }
96
+ ```
97
+
98
+ ## Environment Variables
99
+
100
+ Create `.env.expense-bot`:
101
+
102
+ ```env
103
+ EXPENSE_BOT_PORT=4600
104
+ EXPENSE_BOT_WS_PORT=4601
105
+ NODE_ENV=development
106
+ PROJECT_ROOT=/path/to/your/project
107
+ BOB_SHELL_PATH=bob
108
+ ```
109
+
110
+ ## Features in Detail
111
+
112
+ ### Expense Tracking
113
+
114
+ Track expenses using natural language:
115
+ - "I spent $50 on groceries"
116
+ - "Add $25 for transportation"
117
+ - "Bought coffee for $5"
118
+
119
+ ### Budget Analysis
120
+
121
+ Get insights into your spending:
122
+ - Total expenses
123
+ - Spending by category
124
+ - Trends and patterns
125
+
126
+ ### Categories
127
+
128
+ Default categories include:
129
+ - Food & Dining
130
+ - Transportation
131
+ - Entertainment
132
+ - Utilities
133
+ - Shopping
134
+ - Healthcare
135
+ - Others
136
+
137
+ ## API Endpoints
138
+
139
+ ### HTTP API
140
+
141
+ - `POST /api/ai/chat` - Send chat messages
142
+ - `POST /api/ai/expense` - Add expense
143
+ - `GET /api/ai/expenses/:sessionId` - Get expenses
144
+ - `GET /api/ai/budget-analysis/:sessionId` - Get budget analysis
145
+
146
+ ### WebSocket Events
147
+
148
+ - `init` - Initialize session
149
+ - `chat` - Send chat message
150
+ - `add_expense` - Add new expense
151
+ - `get_expenses` - Request expenses
152
+ - `get_budget_analysis` - Request budget analysis
153
+
154
+ ## Development
155
+
156
+ ### Project Structure
157
+
158
+ ```
159
+ BobExpenseTrackerChatBot/
160
+ ā”œā”€ā”€ src/
161
+ │ ā”œā”€ā”€ server.ts # Express server
162
+ │ ā”œā”€ā”€ cli.ts # CLI tool
163
+ │ ā”œā”€ā”€ websocket.ts # WebSocket handler
164
+ │ ā”œā”€ā”€ database.ts # SQLite database
165
+ │ └── routes/
166
+ │ └── aiRoutes.ts # API routes
167
+ ā”œā”€ā”€ public/
168
+ │ ā”œā”€ā”€ inject.js # Injection script
169
+ │ └── dist/ # Built React app
170
+ ā”œā”€ā”€ iframe-app/ # React UI
171
+ │ ā”œā”€ā”€ src/
172
+ │ │ ā”œā”€ā”€ App.tsx
173
+ │ │ └── main.tsx
174
+ │ └── package.json
175
+ └── package.json
176
+ ```
177
+
178
+ ### Build from Source
179
+
180
+ ```bash
181
+ # Install dependencies
182
+ npm install
183
+
184
+ # Build iframe app
185
+ cd iframe-app && npm install && npm run build && cd ..
186
+
187
+ # Build TypeScript
188
+ npm run build
189
+
190
+ # Start development server
191
+ npm run dev
192
+ ```
193
+
194
+ ## Compatibility
195
+
196
+ Works with:
197
+ - āœ… React
198
+ - āœ… Vue.js
199
+ - āœ… Angular
200
+ - āœ… Next.js
201
+ - āœ… Static HTML
202
+ - āœ… Any web application!
203
+
204
+ ## Requirements
205
+
206
+ - Node.js >= 18.0.0
207
+ - Modern web browser with WebSocket support
208
+
209
+ ## Troubleshooting
210
+
211
+ ### Chatbot not appearing?
212
+
213
+ 1. Check if the script is injected in your HTML
214
+ 2. Verify the server is running on port 4600
215
+ 3. Check browser console for errors
216
+
217
+ ### WebSocket connection failed?
218
+
219
+ 1. Ensure port 4601 is not blocked
220
+ 2. Check firewall settings
221
+ 3. Verify WebSocket URL in configuration
222
+
223
+ ## License
224
+
225
+ MIT
226
+
227
+ ## Author
228
+
229
+ Bob AI
230
+
231
+ ## Support
232
+
233
+ - GitHub: https://github.com/yourusername/BobExpenseTrackerChatBot
234
+ - Issues: https://github.com/yourusername/BobExpenseTrackerChatBot/issues
235
+
236
+ ---
237
+
238
+ Made with šŸ’° by Bob AI
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,332 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const child_process_1 = require("child_process");
40
+ const COLORS = {
41
+ reset: '\x1b[0m',
42
+ bright: '\x1b[1m',
43
+ green: '\x1b[32m',
44
+ blue: '\x1b[34m',
45
+ yellow: '\x1b[33m',
46
+ red: '\x1b[31m',
47
+ cyan: '\x1b[36m',
48
+ };
49
+ function log(message, color = COLORS.reset) {
50
+ console.log(`${color}${message}${COLORS.reset}`);
51
+ }
52
+ function printBanner() {
53
+ log('\n╔════════════════════════════════════════╗', COLORS.cyan);
54
+ log('ā•‘ šŸ’° Bob Expense Tracker ChatBot ā•‘', COLORS.cyan);
55
+ log('ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•\n', COLORS.cyan);
56
+ }
57
+ function printHelp() {
58
+ printBanner();
59
+ log('Usage:', COLORS.bright);
60
+ log(' BobExpenseTrackerChatBot <command>\n', COLORS.reset);
61
+ log('Commands:', COLORS.bright);
62
+ log(' init Initialize Expense Tracker ChatBot in your project', COLORS.green);
63
+ log(' start Start the chatbot server', COLORS.green);
64
+ log(' dev Start in development mode with auto-reload', COLORS.green);
65
+ log(' build Build the chatbot for production', COLORS.green);
66
+ log(' help Show this help message\n', COLORS.green);
67
+ log('Examples:', COLORS.bright);
68
+ log(' BobExpenseTrackerChatBot init', COLORS.cyan);
69
+ log(' BobExpenseTrackerChatBot start', COLORS.cyan);
70
+ log(' BobExpenseTrackerChatBot dev\n', COLORS.cyan);
71
+ }
72
+ async function initProject() {
73
+ printBanner();
74
+ log('šŸš€ Initializing Bob Expense Tracker ChatBot...\n', COLORS.bright);
75
+ const projectRoot = process.cwd();
76
+ const configPath = path.join(projectRoot, 'BobExpenseTrackerChatBot.config.json');
77
+ const envPath = path.join(projectRoot, '.env.expense-bot');
78
+ // Get package version
79
+ const packageJsonPath = path.join(__dirname, '..', 'package.json');
80
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
81
+ const currentVersion = packageJson.version;
82
+ let existingConfig = null;
83
+ let isUpgrade = false;
84
+ // Check if already initialized
85
+ if (fs.existsSync(configPath)) {
86
+ existingConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
87
+ const oldVersion = existingConfig.version || '0.0.0';
88
+ if (oldVersion !== currentVersion) {
89
+ isUpgrade = true;
90
+ log(`šŸ“¦ Detected upgrade from v${oldVersion} to v${currentVersion}\n`, COLORS.cyan);
91
+ // Backup old config
92
+ const backupPath = `${configPath}.v${oldVersion}.backup`;
93
+ fs.writeFileSync(backupPath, JSON.stringify(existingConfig, null, 2));
94
+ log(`šŸ’¾ Backed up old config to: BobExpenseTrackerChatBot.config.json.v${oldVersion}.backup`, COLORS.green);
95
+ }
96
+ else {
97
+ log(`šŸ”„ Re-initializing Bob Expense Tracker ChatBot v${currentVersion}...\n`, COLORS.cyan);
98
+ }
99
+ }
100
+ // Create default config
101
+ const defaultConfig = {
102
+ version: currentVersion,
103
+ port: 4600,
104
+ wsPort: 4601,
105
+ projectRoot: projectRoot,
106
+ bobShellPath: 'bob',
107
+ features: {
108
+ chat: true,
109
+ expenseTracking: true,
110
+ budgetAnalysis: true,
111
+ categoryManagement: true,
112
+ reports: true,
113
+ aiInsights: true
114
+ }
115
+ };
116
+ // Smart merge: preserve user settings if upgrading
117
+ let config = defaultConfig;
118
+ if (existingConfig) {
119
+ config = {
120
+ ...defaultConfig,
121
+ // Preserve user's custom settings
122
+ port: existingConfig.port || defaultConfig.port,
123
+ wsPort: existingConfig.wsPort || defaultConfig.wsPort,
124
+ projectRoot: existingConfig.projectRoot || defaultConfig.projectRoot,
125
+ bobShellPath: existingConfig.bobShellPath || defaultConfig.bobShellPath,
126
+ // Merge features (preserve user's feature toggles)
127
+ features: {
128
+ ...defaultConfig.features,
129
+ ...existingConfig.features
130
+ }
131
+ };
132
+ if (isUpgrade) {
133
+ log('\nšŸ“ Configuration updated:', COLORS.bright);
134
+ log(` āœ“ Version: ${existingConfig.version || 'none'} → ${currentVersion}`, COLORS.green);
135
+ log(` āœ“ Preserved: port (${config.port}), wsPort (${config.wsPort})`, COLORS.green);
136
+ log(` āœ“ Preserved: custom feature settings`, COLORS.green);
137
+ }
138
+ }
139
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
140
+ log(`\nāœ… ${existingConfig ? 'Updated' : 'Created'} BobExpenseTrackerChatBot.config.json`, COLORS.green);
141
+ // Create .expenses directory for data storage
142
+ const expensesDir = path.join(projectRoot, '.expenses');
143
+ if (!fs.existsSync(expensesDir)) {
144
+ fs.mkdirSync(expensesDir, { recursive: true });
145
+ log('āœ… Created .expenses directory', COLORS.green);
146
+ }
147
+ // Create .env file if it doesn't exist
148
+ if (!fs.existsSync(envPath)) {
149
+ const envContent = `# Bob Expense Tracker ChatBot Configuration
150
+ EXPENSE_BOT_PORT=4600
151
+ EXPENSE_BOT_WS_PORT=4601
152
+ NODE_ENV=development
153
+ PROJECT_ROOT=${projectRoot}
154
+ BOB_SHELL_PATH=bob
155
+ `;
156
+ fs.writeFileSync(envPath, envContent);
157
+ log('āœ… Created .env.expense-bot', COLORS.green);
158
+ }
159
+ // Add to .gitignore
160
+ const gitignorePath = path.join(projectRoot, '.gitignore');
161
+ if (fs.existsSync(gitignorePath)) {
162
+ let gitignore = fs.readFileSync(gitignorePath, 'utf-8');
163
+ if (!gitignore.includes('.env.expense-bot')) {
164
+ gitignore += '\n# BobExpenseTrackerChatBot\n.env.expense-bot\nBobExpenseTrackerChatBot.db\n.expenses/\n';
165
+ fs.writeFileSync(gitignorePath, gitignore);
166
+ log('āœ… Updated .gitignore', COLORS.green);
167
+ }
168
+ }
169
+ // Auto-inject script into HTML files
170
+ log('\nšŸ” Searching for HTML entry points...\n', COLORS.bright);
171
+ const htmlFiles = findHtmlFiles(projectRoot);
172
+ const injectedFiles = [];
173
+ if (htmlFiles.length > 0) {
174
+ log(`Found ${htmlFiles.length} HTML file(s)\n`, COLORS.cyan);
175
+ // Prioritize common entry points
176
+ const priorityFiles = htmlFiles.filter(file => {
177
+ const basename = path.basename(file);
178
+ return basename === 'index.html' || basename === 'main.html' || basename === 'app.html';
179
+ });
180
+ const filesToInject = priorityFiles.length > 0 ? priorityFiles : htmlFiles;
181
+ for (const file of filesToInject) {
182
+ const relativePath = path.relative(projectRoot, file);
183
+ try {
184
+ let content = fs.readFileSync(file, 'utf-8');
185
+ // Check if already injected
186
+ if (content.includes('http://localhost:4600/public/inject.js')) {
187
+ log(` ā­ļø ${relativePath} - Already injected`, COLORS.yellow);
188
+ continue;
189
+ }
190
+ // Find </body> tag and inject before it
191
+ const bodyCloseTag = '</body>';
192
+ if (content.includes(bodyCloseTag)) {
193
+ const scriptTag = ` <!-- Expense Tracker ChatBot Injection -->\n <script src="http://localhost:4600/public/inject.js"></script>\n ${bodyCloseTag}`;
194
+ content = content.replace(bodyCloseTag, scriptTag);
195
+ fs.writeFileSync(file, content, 'utf-8');
196
+ log(` āœ… ${relativePath} - Script injected`, COLORS.green);
197
+ injectedFiles.push(relativePath);
198
+ }
199
+ else {
200
+ log(` āš ļø ${relativePath} - No </body> tag found`, COLORS.yellow);
201
+ }
202
+ }
203
+ catch (error) {
204
+ log(` āŒ ${relativePath} - Error: ${error.message}`, COLORS.red);
205
+ }
206
+ }
207
+ if (injectedFiles.length > 0) {
208
+ log(`\n✨ Successfully injected script into ${injectedFiles.length} file(s)!`, COLORS.green);
209
+ }
210
+ else {
211
+ log('\nšŸ’” No files were modified. Add this line before </body> manually:', COLORS.yellow);
212
+ log(' <script src="http://localhost:4600/public/inject.js"></script>\n', COLORS.cyan);
213
+ }
214
+ }
215
+ else {
216
+ log('ā„¹ļø No HTML files found in project.', COLORS.yellow);
217
+ log(' Add this script tag to your HTML files manually:', COLORS.yellow);
218
+ log(' <script src="http://localhost:4600/public/inject.js"></script>\n', COLORS.cyan);
219
+ }
220
+ log('šŸŽ‰ Bob Expense Tracker ChatBot initialized successfully!\n', COLORS.bright);
221
+ log('Next steps:', COLORS.bright);
222
+ log(' 1. Add the script tag to your HTML files (see above)', COLORS.cyan);
223
+ log(' 2. Run: BobExpenseTrackerChatBot start', COLORS.cyan);
224
+ log(' 3. Open your web app and the Expense Tracker ChatBot will appear!\n', COLORS.cyan);
225
+ log('šŸ“š Documentation: https://github.com/yourusername/BobExpenseTrackerChatBot\n', COLORS.blue);
226
+ }
227
+ function findHtmlFiles(dir, fileList = []) {
228
+ const files = fs.readdirSync(dir);
229
+ files.forEach(file => {
230
+ const filePath = path.join(dir, file);
231
+ const stat = fs.statSync(filePath);
232
+ // Skip node_modules, .git, and other common directories
233
+ if (stat.isDirectory()) {
234
+ const skipDirs = ['node_modules', '.git', 'dist', 'build', '.next', '.nuxt', 'coverage'];
235
+ if (!skipDirs.includes(file)) {
236
+ findHtmlFiles(filePath, fileList);
237
+ }
238
+ }
239
+ else if (file.endsWith('.html')) {
240
+ fileList.push(filePath);
241
+ }
242
+ });
243
+ return fileList;
244
+ }
245
+ function startServer(dev = false) {
246
+ printBanner();
247
+ const mode = dev ? 'development' : 'production';
248
+ log(`šŸš€ Starting Bob Expense Tracker ChatBot in ${mode} mode...\n`, COLORS.bright);
249
+ // Check if config exists
250
+ const configPath = path.join(process.cwd(), 'BobExpenseTrackerChatBot.config.json');
251
+ if (!fs.existsSync(configPath)) {
252
+ log('āŒ Bob Expense Tracker ChatBot not initialized!', COLORS.red);
253
+ log(' Run: BobExpenseTrackerChatBot init\n', COLORS.yellow);
254
+ process.exit(1);
255
+ }
256
+ // Load config
257
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
258
+ // Set environment variables
259
+ process.env.EXPENSE_BOT_PORT = config.port.toString();
260
+ process.env.EXPENSE_BOT_WS_PORT = config.wsPort.toString();
261
+ process.env.PROJECT_ROOT = config.projectRoot;
262
+ process.env.BOB_SHELL_PATH = config.bobShellPath || 'bob';
263
+ // Start server
264
+ const serverPath = path.join(__dirname, 'server.js');
265
+ if (dev) {
266
+ // Development mode with tsx watch
267
+ const child = (0, child_process_1.spawn)('npx', ['tsx', 'watch', serverPath.replace('.js', '.ts')], {
268
+ stdio: 'inherit',
269
+ shell: true,
270
+ env: { ...process.env }
271
+ });
272
+ child.on('error', (error) => {
273
+ log(`āŒ Failed to start server: ${error.message}`, COLORS.red);
274
+ process.exit(1);
275
+ });
276
+ }
277
+ else {
278
+ // Production mode
279
+ require(serverPath);
280
+ }
281
+ }
282
+ function buildProject() {
283
+ printBanner();
284
+ log('šŸ”Ø Building Bob Expense Tracker ChatBot...\n', COLORS.bright);
285
+ const child = (0, child_process_1.spawn)('npm', ['run', 'build'], {
286
+ stdio: 'inherit',
287
+ shell: true,
288
+ cwd: __dirname
289
+ });
290
+ child.on('close', (code) => {
291
+ if (code === 0) {
292
+ log('\nāœ… Build completed successfully!', COLORS.green);
293
+ }
294
+ else {
295
+ log('\nāŒ Build failed!', COLORS.red);
296
+ process.exit(1);
297
+ }
298
+ });
299
+ }
300
+ // Main CLI logic
301
+ const args = process.argv.slice(2);
302
+ const command = args[0];
303
+ switch (command) {
304
+ case 'init':
305
+ initProject();
306
+ break;
307
+ case 'start':
308
+ startServer(false);
309
+ break;
310
+ case 'dev':
311
+ startServer(true);
312
+ break;
313
+ case 'build':
314
+ buildProject();
315
+ break;
316
+ case 'help':
317
+ case '--help':
318
+ case '-h':
319
+ printHelp();
320
+ break;
321
+ default:
322
+ if (!command) {
323
+ printHelp();
324
+ }
325
+ else {
326
+ log(`āŒ Unknown command: ${command}\n`, COLORS.red);
327
+ printHelp();
328
+ process.exit(1);
329
+ }
330
+ }
331
+ // Made with Bob
332
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import Database from 'better-sqlite3';
2
+ declare const db: Database.Database;
3
+ export declare const sessions: {
4
+ create: (id: string, projectPath: string, settings: any) => void;
5
+ updateActivity: (id: string) => void;
6
+ get: (id: string) => unknown;
7
+ };
8
+ export declare const chatHistory: {
9
+ add: (sessionId: string, role: string, content: string) => void;
10
+ getBySession: (sessionId: string, limit?: number) => unknown[];
11
+ clear: (sessionId: string) => void;
12
+ };
13
+ export declare const expenseRecords: {
14
+ add: (sessionId: string, expense: any) => number | bigint;
15
+ getBySession: (sessionId: string, filters?: any) => unknown[];
16
+ delete: (id: number) => void;
17
+ update: (id: number, expense: any) => void;
18
+ };
19
+ export default db;
20
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,QAAA,MAAM,EAAE,EAAE,QAAQ,CAAC,QAA+B,CAAC;AAkCnD,eAAO,MAAM,QAAQ;iBACN,MAAM,eAAe,MAAM,YAAY,GAAG;yBASlC,MAAM;cAKjB,MAAM;CAIjB,CAAC;AAGF,eAAO,MAAM,WAAW;qBACL,MAAM,QAAQ,MAAM,WAAW,MAAM;8BAQ5B,MAAM,UAAS,MAAM;uBAU5B,MAAM;CAI1B,CAAC;AAGF,eAAO,MAAM,cAAc;qBACR,MAAM,WAAW,GAAG;8BAgBX,MAAM,YAAY,GAAG;iBAyBlC,MAAM;iBAKN,MAAM,WAAW,GAAG;CAQlC,CAAC;AAEF,eAAe,EAAE,CAAC"}