@neurcode-ai/cli 0.4.0 ā 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/watch.d.ts +8 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +43 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/services/watch/BlobStore.d.ts +33 -0
- package/dist/services/watch/BlobStore.d.ts.map +1 -0
- package/dist/services/watch/BlobStore.js +108 -0
- package/dist/services/watch/BlobStore.js.map +1 -0
- package/dist/services/watch/Journal.d.ts +60 -0
- package/dist/services/watch/Journal.d.ts.map +1 -0
- package/dist/services/watch/Journal.js +174 -0
- package/dist/services/watch/Journal.js.map +1 -0
- package/dist/services/watch/Sentinel.d.ts +42 -0
- package/dist/services/watch/Sentinel.d.ts.map +1 -0
- package/dist/services/watch/Sentinel.js +179 -0
- package/dist/services/watch/Sentinel.js.map +1 -0
- package/package.json +10 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch command - Start the Neurcode Watch service
|
|
3
|
+
*
|
|
4
|
+
* Starts a background service that watches for file changes and records
|
|
5
|
+
* them to support the "Time Machine" feature.
|
|
6
|
+
*/
|
|
7
|
+
export declare function watchCommand(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,YAAY,kBAmCjC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.watchCommand = watchCommand;
|
|
4
|
+
const Sentinel_1 = require("../services/watch/Sentinel");
|
|
5
|
+
/**
|
|
6
|
+
* Watch command - Start the Neurcode Watch service
|
|
7
|
+
*
|
|
8
|
+
* Starts a background service that watches for file changes and records
|
|
9
|
+
* them to support the "Time Machine" feature.
|
|
10
|
+
*/
|
|
11
|
+
async function watchCommand() {
|
|
12
|
+
try {
|
|
13
|
+
// Get project root (current working directory)
|
|
14
|
+
const projectRoot = process.cwd();
|
|
15
|
+
// Create and initialize Sentinel
|
|
16
|
+
const sentinel = new Sentinel_1.Sentinel(projectRoot);
|
|
17
|
+
await sentinel.initialize();
|
|
18
|
+
// Start watching
|
|
19
|
+
await sentinel.start();
|
|
20
|
+
console.log('ā
Neurcode Watch is running...');
|
|
21
|
+
console.log(' Press Ctrl+C to stop\n');
|
|
22
|
+
// Handle graceful shutdown
|
|
23
|
+
const shutdown = async () => {
|
|
24
|
+
console.log('\nš Shutting down...');
|
|
25
|
+
await sentinel.stop();
|
|
26
|
+
process.exit(0);
|
|
27
|
+
};
|
|
28
|
+
process.on('SIGINT', shutdown);
|
|
29
|
+
process.on('SIGTERM', shutdown);
|
|
30
|
+
// Keep the process alive
|
|
31
|
+
// The watcher will keep the event loop alive
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof Error) {
|
|
35
|
+
console.error('ā Error starting watch service:', error.message);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.error('ā Unknown error:', error);
|
|
39
|
+
}
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":";;AAQA,oCAmCC;AA3CD,yDAAsD;AAEtD;;;;;GAKG;AACI,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,+CAA+C;QAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,iCAAiC;QACjC,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5B,iBAAiB;QACjB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,yBAAyB;QACzB,6CAA6C;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,7 @@ const verify_1 = require("./commands/verify");
|
|
|
14
14
|
const config_1 = require("./commands/config");
|
|
15
15
|
const map_1 = require("./commands/map");
|
|
16
16
|
const allow_1 = require("./commands/allow");
|
|
17
|
+
const watch_1 = require("./commands/watch");
|
|
17
18
|
// Read version from package.json
|
|
18
19
|
let version = '0.1.2'; // fallback
|
|
19
20
|
try {
|
|
@@ -93,6 +94,12 @@ program
|
|
|
93
94
|
.action((filePath) => {
|
|
94
95
|
(0, allow_1.allowCommand)(filePath);
|
|
95
96
|
});
|
|
97
|
+
program
|
|
98
|
+
.command('watch')
|
|
99
|
+
.description('Start Neurcode Watch - A local background service that records file changes for Time Machine feature')
|
|
100
|
+
.action(() => {
|
|
101
|
+
(0, watch_1.watchCommand)();
|
|
102
|
+
});
|
|
96
103
|
program
|
|
97
104
|
.command('verify')
|
|
98
105
|
.description('Verify plan adherence - Compare current changes against an Architect Plan')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlobStore - Content-Addressable Storage for file content
|
|
3
|
+
*
|
|
4
|
+
* Stores compressed file content in .neurcode/blobs/ directory.
|
|
5
|
+
* Filename is the SHA-256 hash of the content.
|
|
6
|
+
*/
|
|
7
|
+
export declare class BlobStore {
|
|
8
|
+
private readonly blobsDir;
|
|
9
|
+
constructor(projectRoot: string);
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the blob store directory
|
|
12
|
+
*/
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Store content and return its hash
|
|
16
|
+
* @param content - The file content to store
|
|
17
|
+
* @returns The SHA-256 hash of the content
|
|
18
|
+
*/
|
|
19
|
+
store(content: string): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if a blob exists by hash
|
|
22
|
+
* @param hash - The SHA-256 hash
|
|
23
|
+
* @returns True if the blob exists
|
|
24
|
+
*/
|
|
25
|
+
exists(hash: string): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Get the path to a blob by hash
|
|
28
|
+
* @param hash - The SHA-256 hash
|
|
29
|
+
* @returns The full path to the blob file
|
|
30
|
+
*/
|
|
31
|
+
getBlobPath(hash: string): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=BlobStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobStore.d.ts","sourceRoot":"","sources":["../../../src/services/watch/BlobStore.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB7C;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5C;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGlC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BlobStore = void 0;
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const zlib_1 = require("zlib");
|
|
39
|
+
const fs_1 = require("fs");
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const fsExtra = __importStar(require("fs-extra"));
|
|
42
|
+
/**
|
|
43
|
+
* BlobStore - Content-Addressable Storage for file content
|
|
44
|
+
*
|
|
45
|
+
* Stores compressed file content in .neurcode/blobs/ directory.
|
|
46
|
+
* Filename is the SHA-256 hash of the content.
|
|
47
|
+
*/
|
|
48
|
+
class BlobStore {
|
|
49
|
+
blobsDir;
|
|
50
|
+
constructor(projectRoot) {
|
|
51
|
+
this.blobsDir = path.join(projectRoot, '.neurcode', 'blobs');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Initialize the blob store directory
|
|
55
|
+
*/
|
|
56
|
+
async initialize() {
|
|
57
|
+
await fsExtra.ensureDir(this.blobsDir);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Store content and return its hash
|
|
61
|
+
* @param content - The file content to store
|
|
62
|
+
* @returns The SHA-256 hash of the content
|
|
63
|
+
*/
|
|
64
|
+
async store(content) {
|
|
65
|
+
// Compute SHA-256 hash
|
|
66
|
+
const hash = (0, crypto_1.createHash)('sha256').update(content, 'utf8').digest('hex');
|
|
67
|
+
const blobPath = path.join(this.blobsDir, hash);
|
|
68
|
+
// Check if blob already exists
|
|
69
|
+
try {
|
|
70
|
+
await fs_1.promises.access(blobPath);
|
|
71
|
+
// Blob already exists, return hash
|
|
72
|
+
return hash;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Blob doesn't exist, create it
|
|
76
|
+
}
|
|
77
|
+
// Compress content with GZIP
|
|
78
|
+
const compressed = (0, zlib_1.gzipSync)(Buffer.from(content, 'utf8'));
|
|
79
|
+
// Write compressed content to disk
|
|
80
|
+
await fs_1.promises.writeFile(blobPath, compressed);
|
|
81
|
+
return hash;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if a blob exists by hash
|
|
85
|
+
* @param hash - The SHA-256 hash
|
|
86
|
+
* @returns True if the blob exists
|
|
87
|
+
*/
|
|
88
|
+
async exists(hash) {
|
|
89
|
+
const blobPath = path.join(this.blobsDir, hash);
|
|
90
|
+
try {
|
|
91
|
+
await fs_1.promises.access(blobPath);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the path to a blob by hash
|
|
100
|
+
* @param hash - The SHA-256 hash
|
|
101
|
+
* @returns The full path to the blob file
|
|
102
|
+
*/
|
|
103
|
+
getBlobPath(hash) {
|
|
104
|
+
return path.join(this.blobsDir, hash);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.BlobStore = BlobStore;
|
|
108
|
+
//# sourceMappingURL=BlobStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobStore.js","sourceRoot":"","sources":["../../../src/services/watch/BlobStore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAoC;AACpC,+BAAgC;AAChC,2BAAoC;AACpC,2CAA6B;AAC7B,kDAAoC;AAEpC;;;;;GAKG;AACH,MAAa,SAAS;IACH,QAAQ,CAAS;IAElC,YAAY,WAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe;QACzB,uBAAuB;QACvB,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhD,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,mCAAmC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;QAED,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAA,eAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAE1D,mCAAmC;QACnC,MAAM,aAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAjED,8BAiEC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface Session {
|
|
2
|
+
id: string;
|
|
3
|
+
startTime: number;
|
|
4
|
+
}
|
|
5
|
+
export interface Event {
|
|
6
|
+
id?: number;
|
|
7
|
+
sessionId: string;
|
|
8
|
+
filePath: string;
|
|
9
|
+
hash: string;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Journal - SQLite database for tracking file change history
|
|
14
|
+
*
|
|
15
|
+
* Stores sessions and events in .neurcode/history.db
|
|
16
|
+
*/
|
|
17
|
+
export declare class Journal {
|
|
18
|
+
private db;
|
|
19
|
+
private readonly dbPath;
|
|
20
|
+
constructor(projectRoot: string);
|
|
21
|
+
/**
|
|
22
|
+
* Initialize database schema
|
|
23
|
+
*/
|
|
24
|
+
private initializeSchema;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new session
|
|
27
|
+
* @returns The session ID
|
|
28
|
+
*/
|
|
29
|
+
createSession(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Record a file change event
|
|
32
|
+
* @param sessionId - The session ID
|
|
33
|
+
* @param filePath - The path to the changed file
|
|
34
|
+
* @param hash - The SHA-256 hash of the file content
|
|
35
|
+
*/
|
|
36
|
+
recordEvent(sessionId: string, filePath: string, hash: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get all events for a session
|
|
39
|
+
* @param sessionId - The session ID
|
|
40
|
+
* @returns Array of events
|
|
41
|
+
*/
|
|
42
|
+
getSessionEvents(sessionId: string): Event[];
|
|
43
|
+
/**
|
|
44
|
+
* Get all events for a file
|
|
45
|
+
* @param filePath - The file path
|
|
46
|
+
* @returns Array of events
|
|
47
|
+
*/
|
|
48
|
+
getFileEvents(filePath: string): Event[];
|
|
49
|
+
/**
|
|
50
|
+
* Get the latest event for a file
|
|
51
|
+
* @param filePath - The file path
|
|
52
|
+
* @returns The latest event or null
|
|
53
|
+
*/
|
|
54
|
+
getLatestFileEvent(filePath: string): Event | null;
|
|
55
|
+
/**
|
|
56
|
+
* Close the database connection
|
|
57
|
+
*/
|
|
58
|
+
close(): void;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Journal.d.ts","sourceRoot":"","sources":["../../../src/services/watch/Journal.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,WAAW,EAAE,MAAM;IAgB/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;OAGG;IACH,aAAa,IAAI,MAAM;IAavB;;;;;OAKG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAWpE;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE;IAW5C;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE;IAWxC;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAalD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.Journal = void 0;
|
|
40
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const fsExtra = __importStar(require("fs-extra"));
|
|
43
|
+
const uuid_1 = require("uuid");
|
|
44
|
+
/**
|
|
45
|
+
* Journal - SQLite database for tracking file change history
|
|
46
|
+
*
|
|
47
|
+
* Stores sessions and events in .neurcode/history.db
|
|
48
|
+
*/
|
|
49
|
+
class Journal {
|
|
50
|
+
db;
|
|
51
|
+
dbPath;
|
|
52
|
+
constructor(projectRoot) {
|
|
53
|
+
this.dbPath = path.join(projectRoot, '.neurcode', 'history.db');
|
|
54
|
+
// Ensure .neurcode directory exists
|
|
55
|
+
fsExtra.ensureDirSync(path.dirname(this.dbPath));
|
|
56
|
+
// Open database connection
|
|
57
|
+
this.db = new better_sqlite3_1.default(this.dbPath);
|
|
58
|
+
// Enable WAL mode for better performance
|
|
59
|
+
this.db.pragma('journal_mode = WAL');
|
|
60
|
+
// Initialize schema
|
|
61
|
+
this.initializeSchema();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Initialize database schema
|
|
65
|
+
*/
|
|
66
|
+
initializeSchema() {
|
|
67
|
+
// Create sessions table
|
|
68
|
+
this.db.exec(`
|
|
69
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
70
|
+
id TEXT PRIMARY KEY,
|
|
71
|
+
start_time INTEGER NOT NULL
|
|
72
|
+
)
|
|
73
|
+
`);
|
|
74
|
+
// Create events table
|
|
75
|
+
this.db.exec(`
|
|
76
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
77
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
78
|
+
session_id TEXT NOT NULL,
|
|
79
|
+
file_path TEXT NOT NULL,
|
|
80
|
+
hash TEXT NOT NULL,
|
|
81
|
+
timestamp INTEGER NOT NULL,
|
|
82
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id)
|
|
83
|
+
)
|
|
84
|
+
`);
|
|
85
|
+
// Create index on session_id for faster queries
|
|
86
|
+
this.db.exec(`
|
|
87
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_id ON events(session_id)
|
|
88
|
+
`);
|
|
89
|
+
// Create index on file_path for faster queries
|
|
90
|
+
this.db.exec(`
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_events_file_path ON events(file_path)
|
|
92
|
+
`);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a new session
|
|
96
|
+
* @returns The session ID
|
|
97
|
+
*/
|
|
98
|
+
createSession() {
|
|
99
|
+
const sessionId = (0, uuid_1.v4)();
|
|
100
|
+
const startTime = Date.now();
|
|
101
|
+
const stmt = this.db.prepare(`
|
|
102
|
+
INSERT INTO sessions (id, start_time)
|
|
103
|
+
VALUES (?, ?)
|
|
104
|
+
`);
|
|
105
|
+
stmt.run(sessionId, startTime);
|
|
106
|
+
return sessionId;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Record a file change event
|
|
110
|
+
* @param sessionId - The session ID
|
|
111
|
+
* @param filePath - The path to the changed file
|
|
112
|
+
* @param hash - The SHA-256 hash of the file content
|
|
113
|
+
*/
|
|
114
|
+
recordEvent(sessionId, filePath, hash) {
|
|
115
|
+
const timestamp = Date.now();
|
|
116
|
+
const stmt = this.db.prepare(`
|
|
117
|
+
INSERT INTO events (session_id, file_path, hash, timestamp)
|
|
118
|
+
VALUES (?, ?, ?, ?)
|
|
119
|
+
`);
|
|
120
|
+
stmt.run(sessionId, filePath, hash, timestamp);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get all events for a session
|
|
124
|
+
* @param sessionId - The session ID
|
|
125
|
+
* @returns Array of events
|
|
126
|
+
*/
|
|
127
|
+
getSessionEvents(sessionId) {
|
|
128
|
+
const stmt = this.db.prepare(`
|
|
129
|
+
SELECT id, session_id, file_path, hash, timestamp
|
|
130
|
+
FROM events
|
|
131
|
+
WHERE session_id = ?
|
|
132
|
+
ORDER BY timestamp ASC
|
|
133
|
+
`);
|
|
134
|
+
return stmt.all(sessionId);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get all events for a file
|
|
138
|
+
* @param filePath - The file path
|
|
139
|
+
* @returns Array of events
|
|
140
|
+
*/
|
|
141
|
+
getFileEvents(filePath) {
|
|
142
|
+
const stmt = this.db.prepare(`
|
|
143
|
+
SELECT id, session_id, file_path, hash, timestamp
|
|
144
|
+
FROM events
|
|
145
|
+
WHERE file_path = ?
|
|
146
|
+
ORDER BY timestamp DESC
|
|
147
|
+
`);
|
|
148
|
+
return stmt.all(filePath);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get the latest event for a file
|
|
152
|
+
* @param filePath - The file path
|
|
153
|
+
* @returns The latest event or null
|
|
154
|
+
*/
|
|
155
|
+
getLatestFileEvent(filePath) {
|
|
156
|
+
const stmt = this.db.prepare(`
|
|
157
|
+
SELECT id, session_id, file_path, hash, timestamp
|
|
158
|
+
FROM events
|
|
159
|
+
WHERE file_path = ?
|
|
160
|
+
ORDER BY timestamp DESC
|
|
161
|
+
LIMIT 1
|
|
162
|
+
`);
|
|
163
|
+
const result = stmt.get(filePath);
|
|
164
|
+
return result || null;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Close the database connection
|
|
168
|
+
*/
|
|
169
|
+
close() {
|
|
170
|
+
this.db.close();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.Journal = Journal;
|
|
174
|
+
//# sourceMappingURL=Journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Journal.js","sourceRoot":"","sources":["../../../src/services/watch/Journal.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oEAAsC;AAEtC,2CAA6B;AAC7B,kDAAoC;AACpC,+BAAoC;AAepC;;;;GAIG;AACH,MAAa,OAAO;IACV,EAAE,CAAe;IACR,MAAM,CAAS;IAEhC,YAAY,WAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAEhE,oCAAoC;QACpC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEjD,2BAA2B;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpC,yCAAyC;QACzC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAErC,oBAAoB;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,wBAAwB;QACxB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;KAKZ,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;KASZ,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;KAEZ,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;KAEZ,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,MAAM,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,SAAiB,EAAE,QAAgB,EAAE,IAAY;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,SAAiB;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAY,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,QAAgB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAY,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,QAAgB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAM5B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAsB,CAAC;QACvD,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAjJD,0BAiJC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sentinel - File system watcher that records file changes
|
|
3
|
+
*
|
|
4
|
+
* Watches the project root for file changes, stores content in BlobStore,
|
|
5
|
+
* and records events in Journal. Uses debouncing to prevent high CPU usage.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Sentinel {
|
|
8
|
+
private watcher;
|
|
9
|
+
private blobStore;
|
|
10
|
+
private journal;
|
|
11
|
+
private sessionId;
|
|
12
|
+
private projectRoot;
|
|
13
|
+
private debounceTimer;
|
|
14
|
+
private pendingChanges;
|
|
15
|
+
private readonly debounceMs;
|
|
16
|
+
constructor(projectRoot: string);
|
|
17
|
+
/**
|
|
18
|
+
* Initialize the watch service
|
|
19
|
+
*/
|
|
20
|
+
initialize(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Start watching the project root
|
|
23
|
+
*/
|
|
24
|
+
start(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Handle a file change event (with debouncing)
|
|
27
|
+
*/
|
|
28
|
+
private handleChange;
|
|
29
|
+
/**
|
|
30
|
+
* Process all pending changes after debounce period
|
|
31
|
+
*/
|
|
32
|
+
private processPendingChanges;
|
|
33
|
+
/**
|
|
34
|
+
* Stop watching
|
|
35
|
+
*/
|
|
36
|
+
stop(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Get the current session ID
|
|
39
|
+
*/
|
|
40
|
+
getSessionId(): string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=Sentinel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sentinel.d.ts","sourceRoot":"","sources":["../../../src/services/watch/Sentinel.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,cAAc,CAAuD;IAC7E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAO;gBAEtB,WAAW,EAAE,MAAM;IAO/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;YACW,qBAAqB;IAoCnC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Sentinel = void 0;
|
|
37
|
+
const chokidar = __importStar(require("chokidar"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const fs_1 = require("fs");
|
|
40
|
+
const BlobStore_1 = require("./BlobStore");
|
|
41
|
+
const Journal_1 = require("./Journal");
|
|
42
|
+
/**
|
|
43
|
+
* Sentinel - File system watcher that records file changes
|
|
44
|
+
*
|
|
45
|
+
* Watches the project root for file changes, stores content in BlobStore,
|
|
46
|
+
* and records events in Journal. Uses debouncing to prevent high CPU usage.
|
|
47
|
+
*/
|
|
48
|
+
class Sentinel {
|
|
49
|
+
watcher = null;
|
|
50
|
+
blobStore;
|
|
51
|
+
journal;
|
|
52
|
+
sessionId;
|
|
53
|
+
projectRoot;
|
|
54
|
+
debounceTimer = null;
|
|
55
|
+
pendingChanges = new Map();
|
|
56
|
+
debounceMs = 500;
|
|
57
|
+
constructor(projectRoot) {
|
|
58
|
+
this.projectRoot = projectRoot;
|
|
59
|
+
this.blobStore = new BlobStore_1.BlobStore(projectRoot);
|
|
60
|
+
this.journal = new Journal_1.Journal(projectRoot);
|
|
61
|
+
this.sessionId = this.journal.createSession();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Initialize the watch service
|
|
65
|
+
*/
|
|
66
|
+
async initialize() {
|
|
67
|
+
await this.blobStore.initialize();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Start watching the project root
|
|
71
|
+
*/
|
|
72
|
+
async start() {
|
|
73
|
+
if (this.watcher) {
|
|
74
|
+
throw new Error('Sentinel is already watching');
|
|
75
|
+
}
|
|
76
|
+
// Ignore patterns for common directories and files
|
|
77
|
+
const ignored = [
|
|
78
|
+
'**/.git/**',
|
|
79
|
+
'**/node_modules/**',
|
|
80
|
+
'**/.neurcode/**',
|
|
81
|
+
'**/.next/**',
|
|
82
|
+
'**/dist/**',
|
|
83
|
+
'**/build/**',
|
|
84
|
+
'**/.DS_Store',
|
|
85
|
+
'**/Thumbs.db',
|
|
86
|
+
];
|
|
87
|
+
this.watcher = chokidar.watch(this.projectRoot, {
|
|
88
|
+
ignored,
|
|
89
|
+
persistent: true,
|
|
90
|
+
ignoreInitial: true, // Don't process existing files on startup
|
|
91
|
+
awaitWriteFinish: {
|
|
92
|
+
stabilityThreshold: 200,
|
|
93
|
+
pollInterval: 100,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
// Handle file changes
|
|
97
|
+
this.watcher.on('add', (filePath) => this.handleChange(filePath, 'add'));
|
|
98
|
+
this.watcher.on('change', (filePath) => this.handleChange(filePath, 'change'));
|
|
99
|
+
this.watcher.on('unlink', (filePath) => this.handleChange(filePath, 'unlink'));
|
|
100
|
+
this.watcher.on('error', (error) => {
|
|
101
|
+
console.error('ā Watch error:', error);
|
|
102
|
+
});
|
|
103
|
+
console.log(`šļø Watching: ${this.projectRoot}`);
|
|
104
|
+
console.log(`š Session ID: ${this.sessionId}`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Handle a file change event (with debouncing)
|
|
108
|
+
*/
|
|
109
|
+
handleChange(filePath, eventType) {
|
|
110
|
+
// Normalize path relative to project root
|
|
111
|
+
const relativePath = path.relative(this.projectRoot, filePath);
|
|
112
|
+
// Store the most recent event type for this file
|
|
113
|
+
this.pendingChanges.set(relativePath, eventType);
|
|
114
|
+
// Clear existing debounce timer
|
|
115
|
+
if (this.debounceTimer) {
|
|
116
|
+
clearTimeout(this.debounceTimer);
|
|
117
|
+
}
|
|
118
|
+
// Set new debounce timer
|
|
119
|
+
this.debounceTimer = setTimeout(() => {
|
|
120
|
+
this.processPendingChanges();
|
|
121
|
+
}, this.debounceMs);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Process all pending changes after debounce period
|
|
125
|
+
*/
|
|
126
|
+
async processPendingChanges() {
|
|
127
|
+
const changes = Array.from(this.pendingChanges.entries());
|
|
128
|
+
this.pendingChanges.clear();
|
|
129
|
+
if (changes.length === 0) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
for (const [filePath, eventType] of changes) {
|
|
133
|
+
try {
|
|
134
|
+
if (eventType === 'unlink') {
|
|
135
|
+
// File was deleted - we can't read it, but we can record the deletion
|
|
136
|
+
// For now, we'll skip recording deletions (or record with a special marker)
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
// Read file content
|
|
140
|
+
const fullPath = path.join(this.projectRoot, filePath);
|
|
141
|
+
const content = await fs_1.promises.readFile(fullPath, 'utf-8');
|
|
142
|
+
// Store content in blob store
|
|
143
|
+
const hash = await this.blobStore.store(content);
|
|
144
|
+
// Record event in journal
|
|
145
|
+
this.journal.recordEvent(this.sessionId, filePath, hash);
|
|
146
|
+
console.log(`š Recorded: ${filePath} (${hash.substring(0, 8)}...)`);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
// Skip files that can't be read (permissions, binary files, etc.)
|
|
150
|
+
if (error instanceof Error) {
|
|
151
|
+
// Silently skip - this is expected for some files
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Stop watching
|
|
158
|
+
*/
|
|
159
|
+
async stop() {
|
|
160
|
+
if (this.debounceTimer) {
|
|
161
|
+
clearTimeout(this.debounceTimer);
|
|
162
|
+
this.debounceTimer = null;
|
|
163
|
+
}
|
|
164
|
+
if (this.watcher) {
|
|
165
|
+
await this.watcher.close();
|
|
166
|
+
this.watcher = null;
|
|
167
|
+
}
|
|
168
|
+
this.journal.close();
|
|
169
|
+
console.log('š Watch stopped');
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the current session ID
|
|
173
|
+
*/
|
|
174
|
+
getSessionId() {
|
|
175
|
+
return this.sessionId;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.Sentinel = Sentinel;
|
|
179
|
+
//# sourceMappingURL=Sentinel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sentinel.js","sourceRoot":"","sources":["../../../src/services/watch/Sentinel.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurcode-ai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Neurcode CLI - AI code governance and diff analysis",
|
|
5
5
|
"bin": {
|
|
6
6
|
"neurcode": "./dist/index.js"
|
|
@@ -38,17 +38,24 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@neurcode-ai/diff-parser": "^0.1.0",
|
|
40
40
|
"@neurcode-ai/policy-engine": "^0.1.0",
|
|
41
|
+
"better-sqlite3": "^12.5.0",
|
|
41
42
|
"chalk": "^4.1.2",
|
|
43
|
+
"chokidar": "^3.6.0",
|
|
42
44
|
"commander": "^11.1.0",
|
|
45
|
+
"fs-extra": "^11.2.0",
|
|
43
46
|
"glob": "^10.3.10",
|
|
44
|
-
"ts-morph": "^24.0.0"
|
|
47
|
+
"ts-morph": "^24.0.0",
|
|
48
|
+
"uuid": "^9.0.1"
|
|
45
49
|
},
|
|
46
50
|
"publishConfig": {
|
|
47
51
|
"access": "public"
|
|
48
52
|
},
|
|
49
53
|
"devDependencies": {
|
|
50
|
-
"@types/
|
|
54
|
+
"@types/better-sqlite3": "^7.6.11",
|
|
55
|
+
"@types/fs-extra": "^11.0.4",
|
|
51
56
|
"@types/glob": "^8.1.0",
|
|
57
|
+
"@types/node": "^20.10.0",
|
|
58
|
+
"@types/uuid": "^9.0.8",
|
|
52
59
|
"typescript": "^5.3.0"
|
|
53
60
|
}
|
|
54
61
|
}
|