chronicle-ai 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.
Files changed (155) hide show
  1. package/README.md +132 -0
  2. package/package.json +86 -0
  3. package/packages/README.md +139 -0
  4. package/packages/cli/README.md +92 -0
  5. package/packages/cli/bin/chronicle.js +2 -0
  6. package/packages/cli/dist/commands/add.d.ts +2 -0
  7. package/packages/cli/dist/commands/add.d.ts.map +1 -0
  8. package/packages/cli/dist/commands/add.js +82 -0
  9. package/packages/cli/dist/commands/add.js.map +1 -0
  10. package/packages/cli/dist/commands/diff.d.ts +11 -0
  11. package/packages/cli/dist/commands/diff.d.ts.map +1 -0
  12. package/packages/cli/dist/commands/diff.js +164 -0
  13. package/packages/cli/dist/commands/diff.js.map +1 -0
  14. package/packages/cli/dist/commands/init.d.ts +2 -0
  15. package/packages/cli/dist/commands/init.d.ts.map +1 -0
  16. package/packages/cli/dist/commands/init.js +54 -0
  17. package/packages/cli/dist/commands/init.js.map +1 -0
  18. package/packages/cli/dist/commands/list.d.ts +2 -0
  19. package/packages/cli/dist/commands/list.d.ts.map +1 -0
  20. package/packages/cli/dist/commands/list.js +62 -0
  21. package/packages/cli/dist/commands/list.js.map +1 -0
  22. package/packages/cli/dist/commands/log.d.ts +4 -0
  23. package/packages/cli/dist/commands/log.d.ts.map +1 -0
  24. package/packages/cli/dist/commands/log.js +223 -0
  25. package/packages/cli/dist/commands/log.js.map +1 -0
  26. package/packages/cli/dist/commands/pause.d.ts +3 -0
  27. package/packages/cli/dist/commands/pause.d.ts.map +1 -0
  28. package/packages/cli/dist/commands/pause.js +49 -0
  29. package/packages/cli/dist/commands/pause.js.map +1 -0
  30. package/packages/cli/dist/commands/queue.d.ts +2 -0
  31. package/packages/cli/dist/commands/queue.d.ts.map +1 -0
  32. package/packages/cli/dist/commands/queue.js +96 -0
  33. package/packages/cli/dist/commands/queue.js.map +1 -0
  34. package/packages/cli/dist/commands/remove.d.ts +2 -0
  35. package/packages/cli/dist/commands/remove.d.ts.map +1 -0
  36. package/packages/cli/dist/commands/remove.js +80 -0
  37. package/packages/cli/dist/commands/remove.js.map +1 -0
  38. package/packages/cli/dist/commands/reset.d.ts +5 -0
  39. package/packages/cli/dist/commands/reset.d.ts.map +1 -0
  40. package/packages/cli/dist/commands/reset.js +90 -0
  41. package/packages/cli/dist/commands/reset.js.map +1 -0
  42. package/packages/cli/dist/commands/restart.d.ts +2 -0
  43. package/packages/cli/dist/commands/restart.d.ts.map +1 -0
  44. package/packages/cli/dist/commands/restart.js +72 -0
  45. package/packages/cli/dist/commands/restart.js.map +1 -0
  46. package/packages/cli/dist/commands/start.d.ts +2 -0
  47. package/packages/cli/dist/commands/start.d.ts.map +1 -0
  48. package/packages/cli/dist/commands/start.js +127 -0
  49. package/packages/cli/dist/commands/start.js.map +1 -0
  50. package/packages/cli/dist/commands/status.d.ts +2 -0
  51. package/packages/cli/dist/commands/status.d.ts.map +1 -0
  52. package/packages/cli/dist/commands/status.js +181 -0
  53. package/packages/cli/dist/commands/status.js.map +1 -0
  54. package/packages/cli/dist/commands/stop.d.ts +2 -0
  55. package/packages/cli/dist/commands/stop.d.ts.map +1 -0
  56. package/packages/cli/dist/commands/stop.js +64 -0
  57. package/packages/cli/dist/commands/stop.js.map +1 -0
  58. package/packages/cli/dist/index.d.ts +2 -0
  59. package/packages/cli/dist/index.d.ts.map +1 -0
  60. package/packages/cli/dist/index.js +85 -0
  61. package/packages/cli/dist/index.js.map +1 -0
  62. package/packages/cli/dist/utils/paths.d.ts +26 -0
  63. package/packages/cli/dist/utils/paths.d.ts.map +1 -0
  64. package/packages/cli/dist/utils/paths.js +183 -0
  65. package/packages/cli/dist/utils/paths.js.map +1 -0
  66. package/packages/cli/package.json +25 -0
  67. package/packages/daemon/README.md +83 -0
  68. package/packages/daemon/dist/ai_test.d.ts +2 -0
  69. package/packages/daemon/dist/ai_test.d.ts.map +1 -0
  70. package/packages/daemon/dist/ai_test.js +4 -0
  71. package/packages/daemon/dist/ai_test.js.map +1 -0
  72. package/packages/daemon/dist/index.d.ts +2 -0
  73. package/packages/daemon/dist/index.d.ts.map +1 -0
  74. package/packages/daemon/dist/index.js +147 -0
  75. package/packages/daemon/dist/index.js.map +1 -0
  76. package/packages/daemon/dist/jobs/AIProcessor.d.ts +6 -0
  77. package/packages/daemon/dist/jobs/AIProcessor.d.ts.map +1 -0
  78. package/packages/daemon/dist/jobs/AIProcessor.js +58 -0
  79. package/packages/daemon/dist/jobs/AIProcessor.js.map +1 -0
  80. package/packages/daemon/dist/jobs/DocProcessor.d.ts +8 -0
  81. package/packages/daemon/dist/jobs/DocProcessor.d.ts.map +1 -0
  82. package/packages/daemon/dist/jobs/DocProcessor.js +336 -0
  83. package/packages/daemon/dist/jobs/DocProcessor.js.map +1 -0
  84. package/packages/daemon/dist/jobs/FileProcessor.d.ts +7 -0
  85. package/packages/daemon/dist/jobs/FileProcessor.d.ts.map +1 -0
  86. package/packages/daemon/dist/jobs/FileProcessor.js +29 -0
  87. package/packages/daemon/dist/jobs/FileProcessor.js.map +1 -0
  88. package/packages/daemon/dist/jobs/SystemProcessor.d.ts +13 -0
  89. package/packages/daemon/dist/jobs/SystemProcessor.d.ts.map +1 -0
  90. package/packages/daemon/dist/jobs/SystemProcessor.js +38 -0
  91. package/packages/daemon/dist/jobs/SystemProcessor.js.map +1 -0
  92. package/packages/daemon/dist/jobs/UpdateProcessor.d.ts +21 -0
  93. package/packages/daemon/dist/jobs/UpdateProcessor.d.ts.map +1 -0
  94. package/packages/daemon/dist/jobs/UpdateProcessor.js +222 -0
  95. package/packages/daemon/dist/jobs/UpdateProcessor.js.map +1 -0
  96. package/packages/daemon/dist/services/AIService.d.ts +90 -0
  97. package/packages/daemon/dist/services/AIService.d.ts.map +1 -0
  98. package/packages/daemon/dist/services/AIService.js +451 -0
  99. package/packages/daemon/dist/services/AIService.js.map +1 -0
  100. package/packages/daemon/dist/services/ConfigService.d.ts +30 -0
  101. package/packages/daemon/dist/services/ConfigService.d.ts.map +1 -0
  102. package/packages/daemon/dist/services/ConfigService.js +69 -0
  103. package/packages/daemon/dist/services/ConfigService.js.map +1 -0
  104. package/packages/daemon/dist/services/DatabaseService.d.ts +204 -0
  105. package/packages/daemon/dist/services/DatabaseService.d.ts.map +1 -0
  106. package/packages/daemon/dist/services/DatabaseService.js +692 -0
  107. package/packages/daemon/dist/services/DatabaseService.js.map +1 -0
  108. package/packages/daemon/dist/services/GitService.d.ts +12 -0
  109. package/packages/daemon/dist/services/GitService.d.ts.map +1 -0
  110. package/packages/daemon/dist/services/GitService.js +68 -0
  111. package/packages/daemon/dist/services/GitService.js.map +1 -0
  112. package/packages/daemon/dist/services/QueueService.d.ts +16 -0
  113. package/packages/daemon/dist/services/QueueService.d.ts.map +1 -0
  114. package/packages/daemon/dist/services/QueueService.js +87 -0
  115. package/packages/daemon/dist/services/QueueService.js.map +1 -0
  116. package/packages/daemon/dist/services/TriggerService.d.ts +37 -0
  117. package/packages/daemon/dist/services/TriggerService.d.ts.map +1 -0
  118. package/packages/daemon/dist/services/TriggerService.js +150 -0
  119. package/packages/daemon/dist/services/TriggerService.js.map +1 -0
  120. package/packages/daemon/dist/services/WatcherService.d.ts +12 -0
  121. package/packages/daemon/dist/services/WatcherService.d.ts.map +1 -0
  122. package/packages/daemon/dist/services/WatcherService.js +77 -0
  123. package/packages/daemon/dist/services/WatcherService.js.map +1 -0
  124. package/packages/daemon/dist/services/index.d.ts +2 -0
  125. package/packages/daemon/dist/services/index.d.ts.map +1 -0
  126. package/packages/daemon/dist/services/index.js +18 -0
  127. package/packages/daemon/dist/services/index.js.map +1 -0
  128. package/packages/daemon/dist/test-ignore.js +0 -0
  129. package/packages/daemon/package.json +28 -0
  130. package/packages/ui/app/actions.ts +73 -0
  131. package/packages/ui/app/api/ai-activity/route.ts +14 -0
  132. package/packages/ui/app/globals.css +98 -0
  133. package/packages/ui/app/layout.tsx +29 -0
  134. package/packages/ui/app/page.tsx +109 -0
  135. package/packages/ui/components/AutoRefresh.tsx +18 -0
  136. package/packages/ui/components/DocumentationViewer.tsx +276 -0
  137. package/packages/ui/components/FileList.tsx +69 -0
  138. package/packages/ui/components/HeaderWithThinking.tsx +102 -0
  139. package/packages/ui/components/JobQueue.tsx +194 -0
  140. package/packages/ui/components/JobQueueWrapper.tsx +31 -0
  141. package/packages/ui/components/MermaidInit.tsx +24 -0
  142. package/packages/ui/components/ProjectContentArea.tsx +186 -0
  143. package/packages/ui/components/ProjectList.tsx +136 -0
  144. package/packages/ui/components/ThinkingDrawer.tsx +377 -0
  145. package/packages/ui/components/ThinkingPanel.tsx +63 -0
  146. package/packages/ui/components/TriggerSettings.tsx +185 -0
  147. package/packages/ui/components/VersionSelector.tsx +132 -0
  148. package/packages/ui/lib/db.ts +521 -0
  149. package/packages/ui/next-env.d.ts +5 -0
  150. package/packages/ui/next.config.js +4 -0
  151. package/packages/ui/package.json +32 -0
  152. package/packages/ui/postcss.config.js +6 -0
  153. package/packages/ui/public/logo.png +0 -0
  154. package/packages/ui/tailwind.config.ts +32 -0
  155. package/packages/ui/tsconfig.json +40 -0
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.queue = queue;
7
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const paths_1 = require("../utils/paths");
10
+ async function queue(action) {
11
+ let dbPath;
12
+ try {
13
+ dbPath = (0, paths_1.getDaemonDbPath)();
14
+ }
15
+ catch (error) {
16
+ console.error('ERROR: ' + error.message);
17
+ process.exit(1);
18
+ }
19
+ const db = new better_sqlite3_1.default(dbPath);
20
+ switch (action) {
21
+ case 'clear':
22
+ // Cancel current job
23
+ db.prepare(`
24
+ UPDATE jobs
25
+ SET status = 'failed', error = 'Cancelled by user', updated_at = unixepoch()
26
+ WHERE status = 'processing'
27
+ `).run();
28
+ // Clear pending jobs
29
+ const deleted = db.prepare(`DELETE FROM jobs WHERE status = 'pending'`).run();
30
+ console.log(`Queue cleared. Removed ${deleted.changes} pending jobs.`);
31
+ // Also reset all doc stages
32
+ db.prepare(`UPDATE doc_stages SET current_stage = 0`).run();
33
+ break;
34
+ case 'kill':
35
+ const killedJob = db.prepare(`
36
+ UPDATE jobs
37
+ SET status = 'failed', error = 'Killed by user', updated_at = unixepoch()
38
+ WHERE status = 'processing'
39
+ `).run();
40
+ if (killedJob.changes > 0) {
41
+ console.log('Current job killed.');
42
+ }
43
+ else {
44
+ console.log('No job currently processing.');
45
+ }
46
+ break;
47
+ case 'status':
48
+ const pending = db.prepare(`SELECT COUNT(*) as count FROM jobs WHERE status = 'pending'`).get();
49
+ const processing = db.prepare(`SELECT * FROM jobs WHERE status = 'processing'`).get();
50
+ console.log('Queue Status:');
51
+ console.log(` Pending: ${pending.count} jobs`);
52
+ if (processing) {
53
+ console.log(` Processing: ${processing.name} (ID: ${processing.id})`);
54
+ }
55
+ else {
56
+ console.log(' Processing: None');
57
+ }
58
+ // Also show running AI activities
59
+ const runningAI = db.prepare(`SELECT COUNT(*) as count FROM ai_activity WHERE status = 'running'`).get();
60
+ if (runningAI.count > 0) {
61
+ console.log(chalk_1.default.yellow(` Running AI Activities: ${runningAI.count}`));
62
+ console.log(chalk_1.default.gray(` Use "chronicle queue kill-ai" to cancel them`));
63
+ }
64
+ break;
65
+ case 'kill-ai':
66
+ const killedAI = db.prepare(`
67
+ UPDATE ai_activity
68
+ SET status = 'error',
69
+ response_preview = 'Cancelled by user',
70
+ thinking_summary = 'Activity was cancelled.'
71
+ WHERE status = 'running'
72
+ `).run();
73
+ if (killedAI.changes > 0) {
74
+ console.log(`Killed ${killedAI.changes} running AI activities.`);
75
+ }
76
+ else {
77
+ console.log('No running AI activities found.');
78
+ }
79
+ break;
80
+ default:
81
+ console.log(`
82
+ Chronicle Queue Management
83
+
84
+ Usage: chronicle queue <action>
85
+
86
+ Actions:
87
+ clear Clear all pending jobs and kill current job
88
+ kill Kill the currently processing job
89
+ kill-ai Kill all running AI activities
90
+ status Show queue status
91
+ `);
92
+ break;
93
+ }
94
+ db.close();
95
+ }
96
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function remove(projectPath?: string): Promise<void>;
2
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAMA,wBAAsB,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,iBA2EhD"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.remove = remove;
7
+ const path_1 = __importDefault(require("path"));
8
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const paths_1 = require("../utils/paths");
11
+ async function remove(projectPath) {
12
+ // Resolve absolute path from arg or cwd
13
+ const targetDir = projectPath ? path_1.default.resolve(process.cwd(), projectPath) : process.cwd();
14
+ const normalizedPath = path_1.default.resolve(targetDir);
15
+ // 1. Connect to Daemon DB
16
+ let dbPath;
17
+ try {
18
+ dbPath = (0, paths_1.getDaemonDbPath)();
19
+ }
20
+ catch (error) {
21
+ console.error(chalk_1.default.red(error.message));
22
+ return;
23
+ }
24
+ const db = new better_sqlite3_1.default(dbPath);
25
+ try {
26
+ // 2. Check if project exists
27
+ const project = db.prepare(`
28
+ SELECT id, path FROM projects WHERE path = ?
29
+ `).get(normalizedPath);
30
+ if (!project) {
31
+ // Try to find by partial match (in case of path normalization issues)
32
+ const allProjects = db.prepare(`
33
+ SELECT id, path FROM projects
34
+ `).all();
35
+ const matchingProject = allProjects.find(p => {
36
+ const normalized = path_1.default.resolve(p.path);
37
+ return normalized === normalizedPath ||
38
+ normalizedPath.startsWith(normalized) ||
39
+ normalized.startsWith(normalizedPath);
40
+ });
41
+ if (matchingProject) {
42
+ console.log(chalk_1.default.yellow(`WARNING: Found project with slightly different path:`));
43
+ console.log(chalk_1.default.yellow(` Stored: ${matchingProject.path}`));
44
+ console.log(chalk_1.default.yellow(` Target: ${normalizedPath}`));
45
+ console.log(chalk_1.default.yellow(`\n Removing stored path instead...`));
46
+ // Use the stored path for removal
47
+ const stmt = db.prepare(`
48
+ INSERT INTO jobs (name, data, status)
49
+ VALUES (?, ?, 'pending')
50
+ `);
51
+ stmt.run('system:project_remove', JSON.stringify({ path: matchingProject.path, action: 'remove' }));
52
+ console.log(chalk_1.default.green(`Queued removal of "${matchingProject.path}" from monitoring.`));
53
+ db.close();
54
+ return;
55
+ }
56
+ console.error(chalk_1.default.red(`ERROR: Project not found in Chronicle: ${normalizedPath}`));
57
+ console.log(chalk_1.default.yellow(`\n Monitored projects:`));
58
+ allProjects.forEach(p => {
59
+ console.log(chalk_1.default.gray(` - ${p.path}`));
60
+ });
61
+ db.close();
62
+ return;
63
+ }
64
+ // 3. Enqueue Job
65
+ const stmt = db.prepare(`
66
+ INSERT INTO jobs (name, data, status)
67
+ VALUES (?, ?, 'pending')
68
+ `);
69
+ stmt.run('system:project_remove', JSON.stringify({ path: normalizedPath, action: 'remove' }));
70
+ console.log(chalk_1.default.green(`Queued removal of "${normalizedPath}" from monitoring.`));
71
+ console.log(chalk_1.default.gray(` The daemon will process this removal shortly.`));
72
+ }
73
+ catch (e) {
74
+ console.error(chalk_1.default.red(`Failed to remove project: ${e.message}`));
75
+ }
76
+ finally {
77
+ db.close();
78
+ }
79
+ }
80
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function reset(options?: {
2
+ force?: boolean;
3
+ backup?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAOA,wBAAsB,KAAK,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBAkF1E"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.reset = reset;
7
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const prompts_1 = __importDefault(require("prompts"));
12
+ const paths_1 = require("../utils/paths");
13
+ async function reset(options) {
14
+ let dbPath;
15
+ try {
16
+ dbPath = (0, paths_1.getDaemonDbPath)();
17
+ }
18
+ catch (error) {
19
+ console.error(chalk_1.default.red('ERROR: ' + error.message));
20
+ return;
21
+ }
22
+ // Check if database exists
23
+ if (!fs_1.default.existsSync(dbPath)) {
24
+ console.log(chalk_1.default.yellow('Database does not exist. Nothing to reset.'));
25
+ return;
26
+ }
27
+ // Get database stats before reset
28
+ const db = new better_sqlite3_1.default(dbPath);
29
+ let projectCount = 0;
30
+ let jobCount = 0;
31
+ let activityCount = 0;
32
+ try {
33
+ projectCount = db.prepare(`SELECT COUNT(*) as count FROM projects`).get().count;
34
+ jobCount = db.prepare(`SELECT COUNT(*) as count FROM jobs`).get().count;
35
+ activityCount = db.prepare(`SELECT COUNT(*) as count FROM ai_activity`).get().count;
36
+ }
37
+ catch {
38
+ // Database might be corrupted, that's okay
39
+ }
40
+ db.close();
41
+ // Show what will be deleted
42
+ console.log(chalk_1.default.bold('\nDatabase Reset\n'));
43
+ console.log(chalk_1.default.yellow('This will permanently delete all Chronicle data:'));
44
+ console.log(chalk_1.default.gray(` - ${projectCount} projects`));
45
+ console.log(chalk_1.default.gray(` - ${jobCount} jobs`));
46
+ console.log(chalk_1.default.gray(` - ${activityCount} AI activity records`));
47
+ console.log(chalk_1.default.gray(` - All documentation versions`));
48
+ console.log(chalk_1.default.gray(` - All file indexes`));
49
+ console.log();
50
+ // Confirmation
51
+ if (!options?.force) {
52
+ const response = await (0, prompts_1.default)({
53
+ type: 'confirm',
54
+ name: 'confirmed',
55
+ message: 'Are you sure you want to reset the database?',
56
+ initial: false
57
+ });
58
+ if (!response.confirmed) {
59
+ console.log(chalk_1.default.gray('Reset cancelled.'));
60
+ return;
61
+ }
62
+ }
63
+ // Optional backup
64
+ if (options?.backup !== false) {
65
+ const backupPath = dbPath + '.backup.' + Date.now();
66
+ try {
67
+ fs_1.default.copyFileSync(dbPath, backupPath);
68
+ console.log(chalk_1.default.green(`Backup created: ${path_1.default.basename(backupPath)}`));
69
+ }
70
+ catch (e) {
71
+ console.log(chalk_1.default.yellow(`WARNING: Could not create backup: ${e.message}`));
72
+ }
73
+ }
74
+ // Reset database by deleting and recreating
75
+ try {
76
+ console.log(chalk_1.default.blue('Resetting database...'));
77
+ // Close any existing connections by deleting the file
78
+ // The daemon will recreate it on next access
79
+ fs_1.default.unlinkSync(dbPath);
80
+ console.log(chalk_1.default.green('Database reset complete.'));
81
+ console.log(chalk_1.default.gray('The daemon will recreate the database schema automatically.'));
82
+ console.log(chalk_1.default.yellow('Note: You may need to restart the daemon for changes to take effect.'));
83
+ console.log();
84
+ }
85
+ catch (e) {
86
+ console.error(chalk_1.default.red(`Failed to reset database: ${e.message}`));
87
+ process.exit(1);
88
+ }
89
+ }
90
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function restart(): Promise<void>;
2
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,kBA0D5B"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.restart = restart;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const paths_1 = require("../utils/paths");
12
+ const start_1 = require("./start");
13
+ async function restart() {
14
+ const spinner = (0, ora_1.default)('Restarting Chronicle System...').start();
15
+ let daemonDir;
16
+ try {
17
+ daemonDir = (0, paths_1.getDaemonDir)();
18
+ }
19
+ catch (error) {
20
+ spinner.fail(chalk_1.default.red(error.message));
21
+ return;
22
+ }
23
+ const chronicleDir = path_1.default.join(daemonDir, '.chronicle');
24
+ const daemonPidFile = path_1.default.join(chronicleDir, 'daemon.pid');
25
+ const uiPidFile = path_1.default.join(chronicleDir, 'ui.pid');
26
+ const uiPortFile = path_1.default.join(chronicleDir, 'ui.port');
27
+ let stoppedAny = false;
28
+ // Stop UI
29
+ if (fs_1.default.existsSync(uiPidFile)) {
30
+ const pid = fs_1.default.readFileSync(uiPidFile, 'utf-8');
31
+ try {
32
+ process.kill(Number(pid));
33
+ stoppedAny = true;
34
+ fs_1.default.unlinkSync(uiPidFile);
35
+ if (fs_1.default.existsSync(uiPortFile))
36
+ fs_1.default.unlinkSync(uiPortFile);
37
+ spinner.text = 'UI stopped...';
38
+ }
39
+ catch (e) {
40
+ spinner.text = chalk_1.default.yellow(`WARNING: Could not kill UI (PID ${pid}): ${e.message}`);
41
+ if (fs_1.default.existsSync(uiPidFile))
42
+ fs_1.default.unlinkSync(uiPidFile);
43
+ }
44
+ }
45
+ // Stop Daemon
46
+ if (fs_1.default.existsSync(daemonPidFile)) {
47
+ const pid = fs_1.default.readFileSync(daemonPidFile, 'utf-8');
48
+ try {
49
+ process.kill(Number(pid));
50
+ stoppedAny = true;
51
+ fs_1.default.unlinkSync(daemonPidFile);
52
+ spinner.text = 'Daemon stopped...';
53
+ }
54
+ catch (e) {
55
+ spinner.text = chalk_1.default.yellow(`WARNING: Could not kill Daemon (PID ${pid}): ${e.message}`);
56
+ if (fs_1.default.existsSync(daemonPidFile))
57
+ fs_1.default.unlinkSync(daemonPidFile);
58
+ }
59
+ }
60
+ if (stoppedAny) {
61
+ spinner.text = 'Waiting for processes to fully stop...';
62
+ // Wait a bit for processes to fully terminate
63
+ await new Promise(resolve => setTimeout(resolve, 1000));
64
+ spinner.succeed('Services stopped.');
65
+ }
66
+ else {
67
+ spinner.info('No services were running.');
68
+ }
69
+ spinner.stop();
70
+ await (0, start_1.start)({});
71
+ }
72
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function start(options: any): Promise<void>;
2
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAQA,wBAAsB,KAAK,CAAC,OAAO,EAAE,GAAG,iBAmGvC"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.start = start;
7
+ const child_process_1 = require("child_process");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const detect_port_1 = __importDefault(require("detect-port"));
13
+ const paths_1 = require("../utils/paths");
14
+ async function start(options) {
15
+ const spinner = (0, ora_1.default)('Starting Chronicle System...').start();
16
+ let daemonDir;
17
+ let uiDir;
18
+ try {
19
+ daemonDir = (0, paths_1.getDaemonDir)();
20
+ uiDir = (0, paths_1.getUiDir)();
21
+ }
22
+ catch (error) {
23
+ spinner.fail(chalk_1.default.red(error.message));
24
+ return;
25
+ }
26
+ // Ensure .chronicle dir exists
27
+ const chronicleDir = path_1.default.join(daemonDir, '.chronicle');
28
+ if (!fs_1.default.existsSync(chronicleDir)) {
29
+ fs_1.default.mkdirSync(chronicleDir, { recursive: true });
30
+ }
31
+ const geminiKeyFile = path_1.default.join(chronicleDir, '.gemini-key');
32
+ if (!fs_1.default.existsSync(geminiKeyFile)) {
33
+ fs_1.default.writeFileSync(geminiKeyFile, '# Chronicle Gemini API key\n# Paste your key on the next line (example: AIza...)\n\n', { mode: 0o600 });
34
+ spinner.info(chalk_1.default.yellow(`Created key file: ${geminiKeyFile}`));
35
+ }
36
+ const geminiKey = readGeminiKey(geminiKeyFile);
37
+ if (!geminiKey) {
38
+ spinner.fail(chalk_1.default.red(`Missing Gemini API key. Add your key to ${geminiKeyFile}`));
39
+ console.log(chalk_1.default.gray('Then run: chronicle start'));
40
+ return;
41
+ }
42
+ const daemonPidFile = path_1.default.join(chronicleDir, 'daemon.pid');
43
+ const uiPidFile = path_1.default.join(chronicleDir, 'ui.pid');
44
+ const uiPortFile = path_1.default.join(chronicleDir, 'ui.port');
45
+ // --- 1. Start Daemon ---
46
+ if (checkPid(daemonPidFile)) {
47
+ spinner.info(chalk_1.default.yellow('Daemon is already running.'));
48
+ }
49
+ else {
50
+ spinner.text = 'Launching Daemon...';
51
+ const out = fs_1.default.openSync(path_1.default.join(chronicleDir, 'out.log'), 'a');
52
+ const err = fs_1.default.openSync(path_1.default.join(chronicleDir, 'err.log'), 'a');
53
+ const daemon = (0, child_process_1.spawn)('npm', ['run', 'start'], {
54
+ cwd: daemonDir,
55
+ detached: true,
56
+ stdio: ['ignore', out, err],
57
+ env: { ...process.env, GOOGLE_API_KEY: geminiKey }
58
+ });
59
+ daemon.unref();
60
+ if (daemon.pid) {
61
+ fs_1.default.writeFileSync(daemonPidFile, String(daemon.pid));
62
+ spinner.succeed(chalk_1.default.green(`Daemon started (PID: ${daemon.pid})`));
63
+ }
64
+ else {
65
+ spinner.fail(chalk_1.default.red('Failed to start Daemon'));
66
+ return;
67
+ }
68
+ }
69
+ // --- 2. Start UI ---
70
+ if (checkPid(uiPidFile)) {
71
+ spinner.info(chalk_1.default.yellow('UI is already running.'));
72
+ if (fs_1.default.existsSync(uiPortFile)) {
73
+ const port = fs_1.default.readFileSync(uiPortFile, 'utf-8');
74
+ console.log(chalk_1.default.cyan(`➜ UI: http://localhost:${port}`));
75
+ }
76
+ }
77
+ else {
78
+ spinner.start('Launching UI...');
79
+ try {
80
+ const port = await (0, detect_port_1.default)(3000);
81
+ const out = fs_1.default.openSync(path_1.default.join(chronicleDir, 'ui-out.log'), 'a');
82
+ const err = fs_1.default.openSync(path_1.default.join(chronicleDir, 'ui-err.log'), 'a');
83
+ const ui = (0, child_process_1.spawn)('npm', ['run', 'dev', '--', '-p', String(port)], {
84
+ cwd: uiDir,
85
+ detached: true,
86
+ stdio: ['ignore', out, err],
87
+ env: { ...process.env, PORT: String(port) }
88
+ });
89
+ ui.unref();
90
+ if (ui.pid) {
91
+ fs_1.default.writeFileSync(uiPidFile, String(ui.pid));
92
+ fs_1.default.writeFileSync(uiPortFile, String(port));
93
+ spinner.succeed(chalk_1.default.green(`UI started (PID: ${ui.pid})`));
94
+ console.log(chalk_1.default.bold.cyan(`\n➜ Dashboard running at: http://localhost:${port}\n`));
95
+ }
96
+ else {
97
+ spinner.fail(chalk_1.default.red('Failed to start UI'));
98
+ }
99
+ }
100
+ catch (error) {
101
+ spinner.fail(chalk_1.default.red(`Failed to start UI: ${error}`));
102
+ }
103
+ }
104
+ }
105
+ function checkPid(pidFile) {
106
+ if (fs_1.default.existsSync(pidFile)) {
107
+ const pid = fs_1.default.readFileSync(pidFile, 'utf-8');
108
+ try {
109
+ process.kill(Number(pid), 0);
110
+ return true;
111
+ }
112
+ catch (e) {
113
+ fs_1.default.unlinkSync(pidFile); // Stale
114
+ return false;
115
+ }
116
+ }
117
+ return false;
118
+ }
119
+ function readGeminiKey(filePath) {
120
+ const content = fs_1.default.readFileSync(filePath, 'utf-8');
121
+ const lines = content
122
+ .split(/\r?\n/)
123
+ .map(line => line.trim())
124
+ .filter(line => line.length > 0 && !line.startsWith('#'));
125
+ return lines[0] || '';
126
+ }
127
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;;;AAQA,sBAmGC;AA3GD,iDAAsC;AACtC,gDAAwB;AACxB,4CAAoB;AACpB,kDAA0B;AAC1B,8CAAsB;AACtB,8DAAqC;AACrC,0CAAwD;AAEjD,KAAK,UAAU,KAAK,CAAC,OAAY;IACpC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,IAAI,SAAiB,CAAC;IACtB,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACD,SAAS,GAAG,IAAA,oBAAY,GAAE,CAAC;QAC3B,KAAK,GAAG,IAAA,gBAAQ,GAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,OAAO;IACX,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAChC,YAAE,CAAC,aAAa,CACZ,aAAa,EACb,sFAAsF,EACtF,EAAE,IAAI,EAAE,KAAK,EAAE,CAClB,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,2CAA2C,aAAa,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO;IACX,CAAC;IAED,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAEtD,0BAA0B;IAC1B,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QACrC,MAAM,GAAG,GAAG,YAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,YAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;YAC1C,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;YAC3B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE;SACrD,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAClD,OAAO;QACX,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACrD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEjC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAU,EAAC,IAAI,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,YAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,YAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC;YAEpE,MAAM,EAAE,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC9D,GAAG,EAAE,KAAK;gBACV,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC3B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;aAC9C,CAAC,CAAC;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;gBACT,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5C,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,IAAI,IAAI,CAAC,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAClD,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC7B,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACnC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO;SAChB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function status(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAuEA,wBAAsB,MAAM,kBAoI3B"}