tokenos 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +571 -0
  2. package/USAGE.md +451 -0
  3. package/dist/config.d.ts +22 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +60 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/db/connection.d.ts +3 -0
  8. package/dist/db/connection.d.ts.map +1 -0
  9. package/dist/db/connection.js +78 -0
  10. package/dist/db/connection.js.map +1 -0
  11. package/dist/db/index.d.ts +4 -0
  12. package/dist/db/index.d.ts.map +1 -0
  13. package/dist/db/index.js +4 -0
  14. package/dist/db/index.js.map +1 -0
  15. package/dist/db/memory.d.ts +6 -0
  16. package/dist/db/memory.d.ts.map +1 -0
  17. package/dist/db/memory.js +62 -0
  18. package/dist/db/memory.js.map +1 -0
  19. package/dist/db/queries.d.ts +29 -0
  20. package/dist/db/queries.d.ts.map +1 -0
  21. package/dist/db/queries.js +215 -0
  22. package/dist/db/queries.js.map +1 -0
  23. package/dist/embeddings/client.d.ts +16 -0
  24. package/dist/embeddings/client.d.ts.map +1 -0
  25. package/dist/embeddings/client.js +70 -0
  26. package/dist/embeddings/client.js.map +1 -0
  27. package/dist/embeddings/index.d.ts +11 -0
  28. package/dist/embeddings/index.d.ts.map +1 -0
  29. package/dist/embeddings/index.js +37 -0
  30. package/dist/embeddings/index.js.map +1 -0
  31. package/dist/embeddings/similarity.d.ts +7 -0
  32. package/dist/embeddings/similarity.d.ts.map +1 -0
  33. package/dist/embeddings/similarity.js +31 -0
  34. package/dist/embeddings/similarity.js.map +1 -0
  35. package/dist/indexer/cli.d.ts +8 -0
  36. package/dist/indexer/cli.d.ts.map +1 -0
  37. package/dist/indexer/cli.js +21 -0
  38. package/dist/indexer/cli.js.map +1 -0
  39. package/dist/indexer/ignore.d.ts +4 -0
  40. package/dist/indexer/ignore.d.ts.map +1 -0
  41. package/dist/indexer/ignore.js +30 -0
  42. package/dist/indexer/ignore.js.map +1 -0
  43. package/dist/indexer/index.d.ts +5 -0
  44. package/dist/indexer/index.d.ts.map +1 -0
  45. package/dist/indexer/index.js +4 -0
  46. package/dist/indexer/index.js.map +1 -0
  47. package/dist/indexer/indexer.d.ts +13 -0
  48. package/dist/indexer/indexer.d.ts.map +1 -0
  49. package/dist/indexer/indexer.js +125 -0
  50. package/dist/indexer/indexer.js.map +1 -0
  51. package/dist/indexer/parser.d.ts +10 -0
  52. package/dist/indexer/parser.d.ts.map +1 -0
  53. package/dist/indexer/parser.js +444 -0
  54. package/dist/indexer/parser.js.map +1 -0
  55. package/dist/indexer/watcher.d.ts +7 -0
  56. package/dist/indexer/watcher.d.ts.map +1 -0
  57. package/dist/indexer/watcher.js +64 -0
  58. package/dist/indexer/watcher.js.map +1 -0
  59. package/dist/main.d.ts +3 -0
  60. package/dist/main.d.ts.map +1 -0
  61. package/dist/main.js +92 -0
  62. package/dist/main.js.map +1 -0
  63. package/dist/reset.d.ts +6 -0
  64. package/dist/reset.d.ts.map +1 -0
  65. package/dist/reset.js +23 -0
  66. package/dist/reset.js.map +1 -0
  67. package/dist/server/index.d.ts +2 -0
  68. package/dist/server/index.d.ts.map +1 -0
  69. package/dist/server/index.js +2 -0
  70. package/dist/server/index.js.map +1 -0
  71. package/dist/server/server.d.ts +4 -0
  72. package/dist/server/server.d.ts.map +1 -0
  73. package/dist/server/server.js +558 -0
  74. package/dist/server/server.js.map +1 -0
  75. package/dist/server/visualize.d.ts +2 -0
  76. package/dist/server/visualize.d.ts.map +1 -0
  77. package/dist/server/visualize.js +299 -0
  78. package/dist/server/visualize.js.map +1 -0
  79. package/dist/test-phase1.d.ts +13 -0
  80. package/dist/test-phase1.d.ts.map +1 -0
  81. package/dist/test-phase1.js +90 -0
  82. package/dist/test-phase1.js.map +1 -0
  83. package/dist/test-phase2.d.ts +13 -0
  84. package/dist/test-phase2.d.ts.map +1 -0
  85. package/dist/test-phase2.js +110 -0
  86. package/dist/test-phase2.js.map +1 -0
  87. package/dist/test-phase3.d.ts +12 -0
  88. package/dist/test-phase3.d.ts.map +1 -0
  89. package/dist/test-phase3.js +85 -0
  90. package/dist/test-phase3.js.map +1 -0
  91. package/dist/types.d.ts +73 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +3 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/cache.d.ts +12 -0
  96. package/dist/utils/cache.d.ts.map +1 -0
  97. package/dist/utils/cache.js +45 -0
  98. package/dist/utils/cache.js.map +1 -0
  99. package/dist/utils/logger.d.ts +16 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +52 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. package/dist/utils/scoring.d.ts +15 -0
  104. package/dist/utils/scoring.d.ts.map +1 -0
  105. package/dist/utils/scoring.js +17 -0
  106. package/dist/utils/scoring.js.map +1 -0
  107. package/dist/verify-parser.d.ts +6 -0
  108. package/dist/verify-parser.d.ts.map +1 -0
  109. package/dist/verify-parser.js +105 -0
  110. package/dist/verify-parser.js.map +1 -0
  111. package/package.json +52 -0
@@ -0,0 +1,64 @@
1
+ import chokidar from "chokidar";
2
+ import { indexFile, removeFile } from "./indexer.js";
3
+ import { logger } from "../utils/logger.js";
4
+ import { createIgnorer, isIgnored } from "./ignore.js";
5
+ export function startWatcher(watchPath, options = {}) {
6
+ const ig = createIgnorer(watchPath);
7
+ const watcher = chokidar.watch(watchPath, {
8
+ ignored: (testPath) => {
9
+ // Don't ignore the root watch directory
10
+ if (testPath === watchPath)
11
+ return false;
12
+ return isIgnored(ig, watchPath, testPath);
13
+ },
14
+ persistent: true,
15
+ ignoreInitial: true, // initial index is done by indexDirectory() — only watch for changes
16
+ awaitWriteFinish: { stabilityThreshold: 150, pollInterval: 50 },
17
+ });
18
+ watcher
19
+ .on("add", async (filePath) => {
20
+ if (!filePath.endsWith(".ts") && !filePath.endsWith(".tsx"))
21
+ return;
22
+ try {
23
+ const result = await indexFile(filePath);
24
+ if (!result.skipped) {
25
+ logger.info("watcher", `added: ${filePath} (+${result.nodes} nodes, +${result.edges} edges)`);
26
+ }
27
+ }
28
+ catch (err) {
29
+ logger.error("watcher", `error indexing ${filePath}:`, err);
30
+ }
31
+ })
32
+ .on("change", async (filePath) => {
33
+ if (!filePath.endsWith(".ts") && !filePath.endsWith(".tsx"))
34
+ return;
35
+ try {
36
+ const result = await indexFile(filePath);
37
+ if (result.skipped) {
38
+ logger.info("watcher", `unchanged: ${filePath} (skipped)`);
39
+ }
40
+ else {
41
+ logger.success("watcher", `updated: ${filePath} (+${result.nodes} nodes)`);
42
+ }
43
+ }
44
+ catch (err) {
45
+ logger.error("watcher", `error re-indexing ${filePath}:`, err);
46
+ }
47
+ })
48
+ .on("unlink", (filePath) => {
49
+ if (!filePath.endsWith(".ts") && !filePath.endsWith(".tsx"))
50
+ return;
51
+ removeFile(filePath);
52
+ logger.info("watcher", `removed: ${filePath}`);
53
+ })
54
+ .on("ready", () => {
55
+ logger.success("watcher", `ready — watching ${watchPath}`);
56
+ options.onReady?.();
57
+ })
58
+ .on("error", (err) => {
59
+ logger.error("watcher", "error:", err);
60
+ options.onError?.(err);
61
+ });
62
+ return watcher;
63
+ }
64
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/indexer/watcher.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "fs";
3
+ import { config } from "./config.js";
4
+ import { startServer } from "./server/index.js";
5
+ import { startWatcher } from "./indexer/index.js";
6
+ import { indexDirectory } from "./indexer/indexer.js";
7
+ import { computeAllImportance } from "./utils/scoring.js";
8
+ // @ts-ignore - Valid Node16 module resolution, IDE false positive
9
+ import { backfillEmbeddings, checkOllama } from "./embeddings/index.js";
10
+ // @ts-ignore - Valid Node16 module resolution, IDE false positive
11
+ import { startVisualizationServer } from "./server/visualize.js";
12
+ import { logger } from "./utils/logger.js";
13
+ // ───── Validate ───────────────────────────────────────────────────────────────
14
+ if (!existsSync(config.watchPath)) {
15
+ logger.error("tokenos", `watch path does not exist: ${config.watchPath}`);
16
+ process.exit(1);
17
+ }
18
+ process.on("uncaughtException", (err) => {
19
+ logger.error("tokenos", "uncaught error:", err);
20
+ });
21
+ process.on("unhandledRejection", (reason) => {
22
+ logger.error("tokenos", "unhandled rejection:", reason);
23
+ });
24
+ // ───── Bootstrap ──────────────────────────────────────────────────────────────
25
+ async function main() {
26
+ const bootStart = Date.now();
27
+ logger.info("tokenos", `starting — watching: ${config.watchPath}`);
28
+ logger.info("tokenos", `database: ${config.dbPath}`);
29
+ logger.info("tokenos", `embedding model: ${config.ollama.model}`);
30
+ // Optionally start visualization UI
31
+ if (config.ui.enabled) {
32
+ try {
33
+ await startVisualizationServer();
34
+ }
35
+ catch {
36
+ logger.error("tokenos", "visualization UI failed to start");
37
+ }
38
+ }
39
+ // Initial full index of the watched directory
40
+ logger.info("tokenos", "running initial index...");
41
+ const totals = await indexDirectory(config.watchPath);
42
+ logger.success("tokenos", `initial index complete: ${totals.files} files, ${totals.nodes} nodes, ${totals.edges} edges`);
43
+ // Back-fill embeddings for newly indexed nodes (graceful if Ollama is offline)
44
+ const ollamaOk = await checkOllama();
45
+ if (ollamaOk) {
46
+ try {
47
+ logger.info("tokenos", "backfilling embeddings...");
48
+ const { updated, skipped } = await backfillEmbeddings();
49
+ logger.success("tokenos", `embeddings ready: ${updated} updated, ${skipped} skipped`);
50
+ }
51
+ catch {
52
+ logger.warn("tokenos", "embeddings skipped (Ollama unavailable)");
53
+ }
54
+ }
55
+ else {
56
+ logger.warn("tokenos", "embeddings skipped (Ollama offline)");
57
+ }
58
+ // Compute importance scores for all nodes
59
+ const { updated: scored } = computeAllImportance();
60
+ logger.success("tokenos", `importance scoring complete: ${scored} nodes scored`);
61
+ // Start chokidar watcher for incremental updates (ignoreInitial=true — initial index is done)
62
+ const watcher = startWatcher(config.watchPath, {
63
+ onReady: () => logger.success("watcher", "ready"),
64
+ });
65
+ // Start MCP stdio server (blocks until client disconnects)
66
+ await startServer();
67
+ logger.viteLike({
68
+ version: "1.0.0",
69
+ timeMs: Date.now() - bootStart,
70
+ localUrl: config.ui.enabled ? `http://localhost:${config.ui.port}/graph` : undefined,
71
+ ollamaOk,
72
+ sqliteOk: true,
73
+ cwd: config.watchPath,
74
+ model: config.ollama.model,
75
+ });
76
+ // Graceful shutdown
77
+ process.on("SIGINT", async () => {
78
+ logger.info("tokenos", "shutting down...");
79
+ await watcher.close();
80
+ process.exit(0);
81
+ });
82
+ process.on("SIGTERM", async () => {
83
+ logger.info("tokenos", "shutting down...");
84
+ await watcher.close();
85
+ process.exit(0);
86
+ });
87
+ }
88
+ main().catch((err) => {
89
+ logger.error("tokenos", "fatal:", err);
90
+ process.exit(1);
91
+ });
92
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reset script — deletes the project database so the next `npm run dev` re-indexes from scratch.
3
+ * Usage: npm run reset
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../src/reset.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/reset.js ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Reset script — deletes the project database so the next `npm run dev` re-indexes from scratch.
3
+ * Usage: npm run reset
4
+ */
5
+ import { existsSync, unlinkSync } from "fs";
6
+ import { config } from "./config.js";
7
+ import { logger } from "./utils/logger.js";
8
+ const dbFiles = [config.dbPath, `${config.dbPath}-shm`, `${config.dbPath}-wal`];
9
+ let deleted = 0;
10
+ for (const file of dbFiles) {
11
+ if (existsSync(file)) {
12
+ unlinkSync(file);
13
+ deleted++;
14
+ }
15
+ }
16
+ if (deleted > 0) {
17
+ logger.success("reset", `deleted ${deleted} database file(s) for: ${config.watchPath}`);
18
+ logger.info("reset", `run \`npm run dev\` to re-index from scratch`);
19
+ }
20
+ else {
21
+ logger.info("reset", `no database found for: ${config.watchPath}`);
22
+ }
23
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../src/reset.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAU,MAAM,IAAI,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC;AAEhF,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,OAAO,0BAA0B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACxF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;AACvE,CAAC;KAAM,CAAC;IACN,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createServer, startServer } from "./server.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createServer, startServer } from "./server.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function createServer(): McpServer;
3
+ export declare function startServer(): Promise<void>;
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmHpE,wBAAgB,YAAY,IAAI,SAAS,CAofxC;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjD"}