@aliou/sesame 0.2.0 → 0.3.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.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Watch command - monitors and indexes session files on change
3
+ */
4
+ export default function watchCommand(args: string[]): Promise<void>;
5
+ //# sourceMappingURL=watch-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/watch-cmd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,wBAA8B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgMxE"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Watch command - monitors and indexes session files on change
3
+ */
4
+ import { mkdirSync, watch } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { indexSessions } from "../indexer/index";
7
+ import { PiParser } from "../parsers/pi";
8
+ import { openDatabase } from "../storage/db";
9
+ import { expandPath, loadConfig } from "../utils/config";
10
+ import { getXDGPaths } from "../utils/xdg";
11
+ export default async function watchCommand(args) {
12
+ // Parse --interval flag
13
+ let pollInterval = null;
14
+ const intervalIndex = args.indexOf("--interval");
15
+ if (intervalIndex !== -1 && args[intervalIndex + 1]) {
16
+ const intervalValue = parseInt(args[intervalIndex + 1], 10);
17
+ if (Number.isNaN(intervalValue) || intervalValue <= 0) {
18
+ console.error("Error: --interval must be a positive number");
19
+ process.exit(1);
20
+ }
21
+ pollInterval = intervalValue * 1000; // Convert to milliseconds
22
+ }
23
+ // Load configuration
24
+ const config = await loadConfig();
25
+ // Get data directory and ensure it exists
26
+ const paths = getXDGPaths();
27
+ mkdirSync(paths.data, { recursive: true });
28
+ // Open database
29
+ const dbPath = join(paths.data, "index.sqlite");
30
+ const db = openDatabase(dbPath);
31
+ const state = {
32
+ db,
33
+ watchers: [],
34
+ debounceTimers: new Map(),
35
+ isShuttingDown: false,
36
+ };
37
+ // Set up graceful shutdown
38
+ const shutdown = () => {
39
+ if (state.isShuttingDown) {
40
+ return;
41
+ }
42
+ state.isShuttingDown = true;
43
+ console.error("\n[%s] Shutting down...", new Date().toISOString());
44
+ // Clear all debounce timers
45
+ for (const timer of state.debounceTimers.values()) {
46
+ clearTimeout(timer);
47
+ }
48
+ state.debounceTimers.clear();
49
+ // Close all watchers
50
+ for (const watcher of state.watchers) {
51
+ watcher.close();
52
+ }
53
+ state.watchers = [];
54
+ // Clear interval if polling
55
+ if (state.intervalId) {
56
+ clearInterval(state.intervalId);
57
+ }
58
+ // Close database
59
+ state.db.close();
60
+ console.error("[%s] Shutdown complete", new Date().toISOString());
61
+ process.exit(0);
62
+ };
63
+ process.on("SIGINT", shutdown);
64
+ process.on("SIGTERM", shutdown);
65
+ try {
66
+ console.error("[%s] Starting watch mode...", new Date().toISOString());
67
+ // Run initial index pass
68
+ console.error("[%s] Running initial index...", new Date().toISOString());
69
+ await runIndexing(state, config.sources);
70
+ if (pollInterval) {
71
+ // Polling mode
72
+ console.error("[%s] Starting poll-based monitoring (interval: %d seconds)", new Date().toISOString(), pollInterval / 1000);
73
+ state.intervalId = setInterval(async () => {
74
+ if (!state.isShuttingDown) {
75
+ console.error("[%s] Running scheduled index...", new Date().toISOString());
76
+ await runIndexing(state, config.sources);
77
+ }
78
+ }, pollInterval);
79
+ }
80
+ else {
81
+ // File system watch mode
82
+ console.error("[%s] Starting file system monitoring...", new Date().toISOString());
83
+ for (const source of config.sources) {
84
+ const expandedPath = expandPath(source.path);
85
+ if (source.parser !== "pi") {
86
+ console.error("[%s] Skipping watch for %s: unsupported parser '%s'", new Date().toISOString(), source.path, source.parser);
87
+ continue;
88
+ }
89
+ try {
90
+ const watcher = watch(expandedPath, { recursive: true }, (eventType, filename) => {
91
+ if (state.isShuttingDown) {
92
+ return;
93
+ }
94
+ const timestamp = new Date().toISOString();
95
+ console.error("[%s] Detected %s: %s", timestamp, eventType, filename || "unknown");
96
+ // Debounce: clear existing timer and set new one
97
+ const existingTimer = state.debounceTimers.get(expandedPath);
98
+ if (existingTimer) {
99
+ clearTimeout(existingTimer);
100
+ }
101
+ const timer = setTimeout(async () => {
102
+ state.debounceTimers.delete(expandedPath);
103
+ if (!state.isShuttingDown) {
104
+ console.error("[%s] Re-indexing %s...", new Date().toISOString(), expandedPath);
105
+ await runIndexing(state, [source]);
106
+ }
107
+ }, 500);
108
+ state.debounceTimers.set(expandedPath, timer);
109
+ });
110
+ watcher.on("error", (error) => {
111
+ console.error("[%s] Watcher error for %s: %s", new Date().toISOString(), expandedPath, error.message);
112
+ });
113
+ state.watchers.push(watcher);
114
+ console.error("[%s] Watching: %s", new Date().toISOString(), expandedPath);
115
+ }
116
+ catch (error) {
117
+ console.error("[%s] Failed to watch %s: %s", new Date().toISOString(), expandedPath, error instanceof Error ? error.message : String(error));
118
+ }
119
+ }
120
+ }
121
+ console.error("[%s] Watch mode active. Press Ctrl+C to stop.", new Date().toISOString());
122
+ // Keep the process alive
123
+ await new Promise(() => { });
124
+ }
125
+ catch (error) {
126
+ console.error("[%s] Fatal error: %s", new Date().toISOString(), error instanceof Error ? error.message : String(error));
127
+ shutdown();
128
+ process.exit(1);
129
+ }
130
+ }
131
+ async function runIndexing(state, sources) {
132
+ const timestamp = new Date().toISOString();
133
+ for (const source of sources) {
134
+ const expandedPath = expandPath(source.path);
135
+ if (source.parser !== "pi") {
136
+ continue;
137
+ }
138
+ const parser = new PiParser();
139
+ try {
140
+ const result = await indexSessions(state.db, expandedPath, parser);
141
+ // Log to stderr (human-readable)
142
+ console.error("[%s] Indexed %s - added: %d, updated: %d, skipped: %d, errors: %d", timestamp, expandedPath, result.added, result.updated, result.skipped, result.errors);
143
+ // Log to stdout (JSON for machine consumption)
144
+ console.log(JSON.stringify({
145
+ timestamp,
146
+ path: expandedPath,
147
+ added: result.added,
148
+ updated: result.updated,
149
+ skipped: result.skipped,
150
+ errors: result.errors,
151
+ }));
152
+ }
153
+ catch (error) {
154
+ console.error("[%s] Error indexing %s: %s", timestamp, expandedPath, error instanceof Error ? error.message : String(error));
155
+ // Log error to stdout as JSON
156
+ console.log(JSON.stringify({
157
+ timestamp,
158
+ path: expandedPath,
159
+ error: error instanceof Error ? error.message : String(error),
160
+ }));
161
+ }
162
+ }
163
+ }
164
+ //# sourceMappingURL=watch-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-cmd.js","sourceRoot":"","sources":["../../src/commands/watch-cmd.ts"],"names":[],"mappings":"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"}
package/dist/sesame.d.ts CHANGED
@@ -7,6 +7,7 @@ declare const commands: {
7
7
  index: () => Promise<typeof import("./commands/index-cmd")>;
8
8
  search: () => Promise<typeof import("./commands/search-cmd")>;
9
9
  status: () => Promise<typeof import("./commands/status-cmd")>;
10
+ watch: () => Promise<typeof import("./commands/watch-cmd")>;
10
11
  help: () => Promise<{
11
12
  default: (..._args: unknown[]) => Promise<void>;
12
13
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"sesame.d.ts","sourceRoot":"","sources":["../src/sesame.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,QAAA,MAAM,QAAQ;;;;;4BAMY,OAAO,EAAE;;CAElC,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;AAErC,iBAAS,UAAU,SAoBlB;AAED,iBAAe,IAAI,kBA+BlB"}
1
+ {"version":3,"file":"sesame.d.ts","sourceRoot":"","sources":["../src/sesame.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,QAAA,MAAM,QAAQ;;;;;;4BAOY,OAAO,EAAE;;CAElC,CAAC;AAEF,KAAK,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;AAErC,iBAAS,UAAU,SAsBlB;AAED,iBAAe,IAAI,kBA+BlB"}
package/dist/sesame.js CHANGED
@@ -8,6 +8,7 @@ const commands = {
8
8
  index: () => import("./commands/index-cmd"),
9
9
  search: () => import("./commands/search-cmd"),
10
10
  status: () => import("./commands/status-cmd"),
11
+ watch: () => import("./commands/watch-cmd"),
11
12
  help: () => Promise.resolve({
12
13
  default: (..._args) => Promise.resolve(printUsage()),
13
14
  }),
@@ -22,6 +23,8 @@ Commands:
22
23
  index --full Drop and rebuild index
23
24
  search <query> Search sessions
24
25
  status Show index statistics
26
+ watch Watch session files and index on change
27
+ watch --interval <seconds> Poll-based re-indexing at fixed interval
25
28
 
26
29
  Search options:
27
30
  --cwd <path> Filter by project directory
@@ -1 +1 @@
1
- {"version":3,"file":"sesame.js","sourceRoot":"","sources":["../src/sesame.ts"],"names":[],"mappings":";;AACA;;;GAGG;AAEH,MAAM,QAAQ,GAAG;IACf,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAC7C,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;QACd,OAAO,EAAE,CAAC,GAAG,KAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;KAChE,CAAC;CACL,CAAC;AAIF,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;QAClB,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAChB,CAAC;QACD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAElC,IAAI,CAAC,CAAC,WAAW,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"sesame.js","sourceRoot":"","sources":["../src/sesame.ts"],"names":[],"mappings":";;AACA;;;GAGG;AAEH,MAAM,QAAQ,GAAG;IACf,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAC7C,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAC3C,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;QACd,OAAO,EAAE,CAAC,GAAG,KAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;KAChE,CAAC;CACL,CAAC;AAIF,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;CAoBb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;QAClB,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QACpB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAChB,CAAC;QACD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAElC,IAAI,CAAC,CAAC,WAAW,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aliou/sesame",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Semantic search for coding agent sessions",
5
5
  "type": "module",
6
6
  "bin": {