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,85 @@
1
+ /**
2
+ * Phase 3 smoke test — run with: npm run test:phase3
3
+ *
4
+ * Verifies:
5
+ * 1. computeAllImportance runs and updates nodes
6
+ * 2. Classes score higher than imports (type weight)
7
+ * 3. Highly-referenced nodes score higher than isolated nodes
8
+ * 4. Hash-based skip works correctly on unchanged file
9
+ * 5. Re-index of modified content triggers re-index
10
+ */
11
+ import { resolve, dirname } from "path";
12
+ import { fileURLToPath } from "url";
13
+ import { writeFileSync } from "fs";
14
+ import { indexFile } from "./indexer/indexer.js";
15
+ import { getNode, deleteNodesByFile, deleteEdgesByFile, getTopNodes } from "./db/index.js";
16
+ import { computeAllImportance } from "./utils/scoring.js";
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const FIXTURE = resolve(__dirname, "../test-fixtures/sample.ts");
19
+ let passed = 0;
20
+ let failed = 0;
21
+ function assert(label, condition, detail) {
22
+ if (condition) {
23
+ console.log(` āœ… ${label}`);
24
+ passed++;
25
+ }
26
+ else {
27
+ console.log(` āŒ ${label}`, detail ?? "");
28
+ failed++;
29
+ }
30
+ }
31
+ async function run() {
32
+ console.log("\n=== Phase 3 Smoke Test (Scoring + Incremental) ===\n");
33
+ // ── Setup: fresh index of fixture
34
+ console.log("0. Setup: indexing fixture...");
35
+ deleteEdgesByFile(FIXTURE);
36
+ deleteNodesByFile(FIXTURE);
37
+ await indexFile(FIXTURE);
38
+ // ── Step 1: Compute importance
39
+ console.log("\n1. Computing importance scores...");
40
+ const { updated } = computeAllImportance();
41
+ assert("computeAllImportance updates nodes", updated > 0, updated);
42
+ // ── Step 2: Verify type weight
43
+ console.log("\n2. Verifying type weight (class > import)...");
44
+ const calcNode = getNode(`${FIXTURE}::Calculator`);
45
+ const importNode = getNode(`${FIXTURE}::import:fs/promises`);
46
+ assert("Calculator (class) node exists", !!calcNode);
47
+ assert("import node exists", !!importNode);
48
+ if (calcNode && importNode) {
49
+ assert("class importance > import importance", calcNode.importance > importNode.importance, { class: calcNode.importance, import: importNode.importance });
50
+ }
51
+ // ── Step 3: Top nodes list
52
+ console.log("\n3. Checking getTopNodes...");
53
+ const top = getTopNodes(5);
54
+ assert("getTopNodes returns results", top.length > 0, top.length);
55
+ assert("top nodes sorted desc", top[0].importance >= (top[1]?.importance ?? 0));
56
+ console.log(" Top nodes:");
57
+ top.forEach((n, i) => console.log(` ${i + 1}. ${n.name} (${n.type}) — score: ${n.importance}`));
58
+ // ── Step 4: Hash-based skip on unchanged file
59
+ console.log("\n4. Hash-based skip on unchanged file...");
60
+ const result = await indexFile(FIXTURE);
61
+ assert("unchanged file is skipped", result.skipped, result);
62
+ // ── Step 5: Re-index after modification
63
+ console.log("\n5. Re-index after file modification...");
64
+ const originalContent = `// test-fixtures/sample.ts — used by test-phase1.ts`;
65
+ const modifiedContent = `// MODIFIED COMMENT — triggers re-index\n` + originalContent;
66
+ const tmpFixture = resolve(__dirname, "../test-fixtures/sample-modified.ts");
67
+ writeFileSync(tmpFixture, modifiedContent);
68
+ deleteEdgesByFile(tmpFixture);
69
+ deleteNodesByFile(tmpFixture);
70
+ const modResult = await indexFile(tmpFixture);
71
+ assert("modified file is indexed (not skipped)", !modResult.skipped, modResult);
72
+ assert("modified file creates nodes", modResult.nodes > 0, modResult.nodes);
73
+ // Cleanup temp file from DB
74
+ deleteEdgesByFile(tmpFixture);
75
+ deleteNodesByFile(tmpFixture);
76
+ // ── Summary
77
+ console.log(`\n=== Results: ${passed} passed, ${failed} failed ===\n`);
78
+ if (failed > 0)
79
+ process.exit(1);
80
+ }
81
+ run().catch((err) => {
82
+ console.error("Test runner error:", err);
83
+ process.exit(1);
84
+ });
85
+ //# sourceMappingURL=test-phase3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-phase3.js","sourceRoot":"","sources":["../src/test-phase3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ export type NodeType = "function" | "class" | "file" | "import" | "variable" | "component" | "interface" | "type_alias" | "enum" | "route";
2
+ export type EdgeType = "CALLS" | "IMPORTS" | "EXPORTS" | "EXTENDS" | "IMPLEMENTS" | "DEFINES" | "RENDERS" | "CONTAINS" | "TYPE_OF" | "PART_OF_TAB";
3
+ export interface GraphNode {
4
+ id: string;
5
+ type: NodeType;
6
+ name: string;
7
+ file_path: string;
8
+ summary?: string;
9
+ code_snippet?: string;
10
+ embedding?: string;
11
+ meta?: string;
12
+ hash?: string;
13
+ importance: number;
14
+ created_at?: string;
15
+ updated_at?: string;
16
+ }
17
+ export interface GraphEdge {
18
+ id?: number;
19
+ from_node: string;
20
+ to_node: string;
21
+ type: EdgeType;
22
+ }
23
+ export interface ParsedNode {
24
+ id: string;
25
+ type: NodeType;
26
+ name: string;
27
+ file_path: string;
28
+ summary?: string;
29
+ code_snippet?: string;
30
+ meta?: string;
31
+ hash?: string;
32
+ }
33
+ export interface ParsedEdge {
34
+ from_node: string;
35
+ to_node: string;
36
+ type: EdgeType;
37
+ }
38
+ export interface SearchResult extends Omit<GraphNode, "embedding"> {
39
+ similarity?: number;
40
+ }
41
+ export interface GraphResponse {
42
+ nodes: Array<{
43
+ id: string;
44
+ name: string;
45
+ type: string;
46
+ summary?: string;
47
+ importance?: number;
48
+ meta?: Record<string, any>;
49
+ }>;
50
+ edges: Array<{
51
+ from: string;
52
+ to: string;
53
+ type: string;
54
+ }>;
55
+ }
56
+ export interface QueryOptions {
57
+ depth?: number;
58
+ includeCode?: boolean;
59
+ includeSummary?: boolean;
60
+ edgeTypes?: string[];
61
+ nodeTypes?: string[];
62
+ }
63
+ export type QueryMode = "explore" | "trace" | "dependency" | "semantic";
64
+ export interface ConversationMemory {
65
+ id: string;
66
+ title: string;
67
+ summary: string;
68
+ key_points: string[];
69
+ tags: string[];
70
+ created_at: number;
71
+ embedding?: string;
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Shared types for the TokenOS system
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,sCAAsC"}
@@ -0,0 +1,12 @@
1
+ export declare class LRUCache<K, V> {
2
+ private readonly store;
3
+ private readonly maxSize;
4
+ private readonly ttlMs;
5
+ constructor(maxSize?: number, ttlMs?: number);
6
+ get(key: K): V | undefined;
7
+ set(key: K, value: V): void;
8
+ has(key: K): boolean;
9
+ clear(): void;
10
+ get size(): number;
11
+ }
12
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,OAAO,SAAM,EAAE,KAAK,SAAgB;IAKhD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAe1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAa3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,45 @@
1
+ // Simple in-memory LRU cache — no external deps
2
+ export class LRUCache {
3
+ store = new Map();
4
+ maxSize;
5
+ ttlMs;
6
+ constructor(maxSize = 500, ttlMs = 5 * 60 * 1000) {
7
+ this.maxSize = maxSize;
8
+ this.ttlMs = ttlMs;
9
+ }
10
+ get(key) {
11
+ const entry = this.store.get(key);
12
+ if (!entry)
13
+ return undefined;
14
+ if (Date.now() > entry.expiresAt) {
15
+ this.store.delete(key);
16
+ return undefined;
17
+ }
18
+ // Move to end (most-recently-used)
19
+ this.store.delete(key);
20
+ this.store.set(key, entry);
21
+ return entry.value;
22
+ }
23
+ set(key, value) {
24
+ // Evict LRU entry if at capacity
25
+ if (this.store.size >= this.maxSize) {
26
+ const oldestKey = this.store.keys().next().value;
27
+ if (oldestKey !== undefined)
28
+ this.store.delete(oldestKey);
29
+ }
30
+ this.store.set(key, {
31
+ value,
32
+ expiresAt: Date.now() + this.ttlMs,
33
+ });
34
+ }
35
+ has(key) {
36
+ return this.get(key) !== undefined;
37
+ }
38
+ clear() {
39
+ this.store.clear();
40
+ }
41
+ get size() {
42
+ return this.store.size;
43
+ }
44
+ }
45
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAOhD,MAAM,OAAO,QAAQ;IACF,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IACpC,OAAO,CAAS;IAChB,KAAK,CAAS;IAE/B,YAAY,OAAO,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,iCAAiC;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACjD,IAAI,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;SACnC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ export declare const logger: {
2
+ info: (tag: string, message: string) => void;
3
+ success: (tag: string, message: string) => void;
4
+ warn: (tag: string, message: string) => void;
5
+ error: (tag: string, message: string, err?: any) => void;
6
+ viteLike: (params: {
7
+ version: string;
8
+ timeMs: number;
9
+ localUrl?: string;
10
+ ollamaOk?: boolean;
11
+ sqliteOk?: boolean;
12
+ cwd?: string;
13
+ model?: string;
14
+ }) => void;
15
+ };
16
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,MAAM;gBACL,MAAM,WAAW,MAAM;mBAGpB,MAAM,WAAW,MAAM;gBAG1B,MAAM,WAAW,MAAM;iBAGtB,MAAM,WAAW,MAAM,QAAQ,GAAG;uBAO5B;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;CAmBF,CAAC"}
@@ -0,0 +1,52 @@
1
+ import pc from "picocolors";
2
+ function formatTag(tag) {
3
+ switch (tag) {
4
+ case "tokenos":
5
+ return pc.bold(pc.blue(`[${tag}]`));
6
+ case "indexer":
7
+ return pc.bold(pc.magenta(`[${tag}]`));
8
+ case "watcher":
9
+ return pc.bold(pc.cyan(`[${tag}]`));
10
+ case "embeddings":
11
+ return pc.bold(pc.yellow(`[${tag}]`));
12
+ default:
13
+ return pc.bold(pc.gray(`[${tag}]`));
14
+ }
15
+ }
16
+ export const logger = {
17
+ info: (tag, message) => {
18
+ console.error(`${formatTag(tag)} ${message}`);
19
+ },
20
+ success: (tag, message) => {
21
+ console.error(`${formatTag(tag)} ${pc.green(message)}`);
22
+ },
23
+ warn: (tag, message) => {
24
+ console.error(`${formatTag(tag)} ${pc.yellow(message)}`);
25
+ },
26
+ error: (tag, message, err) => {
27
+ if (err) {
28
+ console.error(`${formatTag(tag)} ${pc.red(message)}`, err);
29
+ }
30
+ else {
31
+ console.error(`${formatTag(tag)} ${pc.red(message)}`);
32
+ }
33
+ },
34
+ viteLike: (params) => {
35
+ console.error("");
36
+ console.error(` ${pc.bold(pc.green("TOKENOS"))} ${pc.dim(`v${params.version}`)} ready in ${pc.bold(`${params.timeMs} ms`)}`);
37
+ console.error("");
38
+ if (params.cwd) {
39
+ console.error(` ${pc.green("āžœ")} ${pc.bold("Watching:")} ${pc.cyan(params.cwd)}`);
40
+ }
41
+ if (params.localUrl) {
42
+ console.error(` ${pc.green("āžœ")} ${pc.bold("Local:")} ${pc.cyan(params.localUrl)}`);
43
+ }
44
+ // Health checks
45
+ const ollamaStatus = params.ollamaOk ? pc.green("ok") : pc.red("offline");
46
+ const sqliteStatus = params.sqliteOk ? pc.green("ok") : pc.red("error");
47
+ console.error(` ${pc.green("āžœ")} ${pc.bold("Ollama:")} ${ollamaStatus}${params.model ? ` ${pc.dim(`(${params.model})`)}` : ""}`);
48
+ console.error(` ${pc.green("āžœ")} ${pc.bold("SQLite:")} ${sqliteStatus}`);
49
+ console.error("");
50
+ }
51
+ };
52
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { GraphNode } from "../types.js";
2
+ /**
3
+ * Compute and store importance scores for all nodes using batch SQL.
4
+ *
5
+ * Score = (inDegree * 2) + outDegree + typeWeight
6
+ *
7
+ * - inDegree (x2): more things depend on this → higher importance
8
+ * - outDegree: broader dependencies indicate a more central node
9
+ * - typeWeight: classes/functions preferred over imports
10
+ */
11
+ export declare function computeAllImportance(): {
12
+ updated: number;
13
+ };
14
+ export declare function rankNodes(nodes: GraphNode[]): GraphNode[];
15
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/utils/scoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAE1D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAEzD"}
@@ -0,0 +1,17 @@
1
+ import { batchComputeImportance } from "../db/index.js";
2
+ /**
3
+ * Compute and store importance scores for all nodes using batch SQL.
4
+ *
5
+ * Score = (inDegree * 2) + outDegree + typeWeight
6
+ *
7
+ * - inDegree (x2): more things depend on this → higher importance
8
+ * - outDegree: broader dependencies indicate a more central node
9
+ * - typeWeight: classes/functions preferred over imports
10
+ */
11
+ export function computeAllImportance() {
12
+ return batchComputeImportance();
13
+ }
14
+ export function rankNodes(nodes) {
15
+ return [...nodes].sort((a, b) => b.importance - a.importance);
16
+ }
17
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/utils/scoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,sBAAsB,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAkB;IAC1C,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Parser verification script — validates semantic roles, tab detection, and meta.
3
+ * Run: npx tsx src/verify-parser.ts
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=verify-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-parser.d.ts","sourceRoot":"","sources":["../src/verify-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Parser verification script — validates semantic roles, tab detection, and meta.
3
+ * Run: npx tsx src/verify-parser.ts
4
+ */
5
+ import { parseFile } from "./indexer/parser.js";
6
+ import { resolve } from "path";
7
+ const testFiles = [
8
+ resolve("dev-data/pattern-test.ts"),
9
+ resolve("dev-data/pattern-test.tsx"),
10
+ ];
11
+ let allNodes = [];
12
+ let allEdges = [];
13
+ for (const filePath of testFiles) {
14
+ console.log(`\n${"=".repeat(56)}\nFILE: ${filePath.split("/").pop()}\n${"=".repeat(56)}`);
15
+ const { nodes, edges } = parseFile(filePath);
16
+ allNodes = [...allNodes, ...nodes];
17
+ allEdges = [...allEdges, ...edges];
18
+ // Nodes by type
19
+ const byType = {};
20
+ for (const n of nodes) {
21
+ (byType[n.type] ??= []).push(n.name);
22
+ }
23
+ console.log("\nšŸ“¦ NODES:");
24
+ for (const [type, names] of Object.entries(byType)) {
25
+ console.log(` ${type.padEnd(14)} (${names.length}): ${names.join(", ")}`);
26
+ }
27
+ // Edges by type
28
+ const byEdge = {};
29
+ for (const e of edges) {
30
+ byEdge[e.type] = (byEdge[e.type] ?? 0) + 1;
31
+ }
32
+ console.log("\nšŸ”— EDGES:", JSON.stringify(byEdge));
33
+ // JSX specific
34
+ const jsx = edges.filter((e) => ["RENDERS", "CONTAINS", "PART_OF_TAB"].includes(e.type));
35
+ if (jsx.length > 0) {
36
+ console.log("\nšŸ“ JSX / Tab edges:");
37
+ for (const e of jsx) {
38
+ const from = e.from_node.split("::").pop();
39
+ const to = e.to_node.split("::").pop();
40
+ console.log(` ${e.type.padEnd(14)}: ${from} → ${to}`);
41
+ }
42
+ }
43
+ // Meta output
44
+ const withMeta = nodes.filter((n) => n.meta);
45
+ if (withMeta.length > 0) {
46
+ console.log("\nšŸ·ļø META:");
47
+ for (const n of withMeta) {
48
+ console.log(` ${n.name.padEnd(20)} → ${n.meta}`);
49
+ }
50
+ }
51
+ }
52
+ console.log("\n\nāœ… SUMMARY");
53
+ console.log(` Total nodes: ${allNodes.length}`);
54
+ console.log(` Total edges: ${allEdges.length}`);
55
+ const types = [...new Set(allNodes.map((n) => n.type))].sort();
56
+ const edgeTypes = [...new Set(allEdges.map((e) => e.type))].sort();
57
+ console.log(` Node types: ${types.join(", ")}`);
58
+ console.log(` Edge types: ${edgeTypes.join(", ")}`);
59
+ // Assertions
60
+ const expectedTypes = ["component", "enum", "file", "function", "import", "interface", "type_alias", "variable"];
61
+ const missingTypes = expectedTypes.filter((t) => !types.includes(t));
62
+ if (missingTypes.length === 0) {
63
+ console.log("\nāœ… ALL expected node types present");
64
+ }
65
+ else {
66
+ console.error(`\nāŒ Missing node types: ${missingTypes.join(", ")}`);
67
+ process.exit(1);
68
+ }
69
+ const expectedEdges = ["RENDERS", "CONTAINS", "PART_OF_TAB"];
70
+ const missingEdges = expectedEdges.filter((t) => !edgeTypes.includes(t));
71
+ if (missingEdges.length === 0) {
72
+ console.log("āœ… ALL expected JSX/Tab edge types present");
73
+ }
74
+ else {
75
+ console.error(`āŒ Missing edge types: ${missingEdges.join(", ")}`);
76
+ process.exit(1);
77
+ }
78
+ // Meta assertions
79
+ const metaNodes = allNodes.filter((n) => n.meta);
80
+ if (metaNodes.length > 0) {
81
+ console.log(`āœ… ${metaNodes.length} nodes have semantic meta`);
82
+ // Check at least one has a role
83
+ const withRole = metaNodes.filter((n) => JSON.parse(n.meta).role);
84
+ if (withRole.length > 0) {
85
+ console.log(`āœ… ${withRole.length} nodes have role assignments`);
86
+ }
87
+ else {
88
+ console.error("āŒ No nodes have role assignments");
89
+ process.exit(1);
90
+ }
91
+ // Check at least one has tab
92
+ const withTab = metaNodes.filter((n) => JSON.parse(n.meta).tab);
93
+ if (withTab.length > 0) {
94
+ console.log(`āœ… ${withTab.length} nodes have tab assignments`);
95
+ }
96
+ else {
97
+ console.error("āŒ No nodes have tab assignments");
98
+ process.exit(1);
99
+ }
100
+ }
101
+ else {
102
+ console.error("āŒ No nodes have semantic meta");
103
+ process.exit(1);
104
+ }
105
+ //# sourceMappingURL=verify-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-parser.js","sourceRoot":"","sources":["../src/verify-parser.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "tokenos",
3
+ "version": "1.1.0",
4
+ "description": "TokenOS is a memory layer for AI that reduces token usage by retrieving only the most relevant code and context.",
5
+ "type": "module",
6
+ "bin": {
7
+ "tokenos": "./dist/main.js"
8
+ },
9
+ "files": ["dist/", "README.md", "USAGE.md"],
10
+ "engines": {
11
+ "node": ">=18"
12
+ },
13
+ "keywords": [
14
+ "mcp",
15
+ "codebase",
16
+ "graph",
17
+ "ai",
18
+ "claude",
19
+ "cursor",
20
+ "antigravity-ide",
21
+ "ai-memory",
22
+ "memory",
23
+ "typescript"
24
+ ],
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/wripcode/tokenos"
29
+ },
30
+ "scripts": {
31
+ "build": "tsc",
32
+ "dev": "tsx src/main.ts",
33
+ "reset": "tsx src/reset.ts",
34
+ "index": "tsx src/indexer/cli.ts",
35
+ "prepublishOnly": "npm run build"
36
+ },
37
+ "dependencies": {
38
+ "@modelcontextprotocol/sdk": "^1.8.0",
39
+ "better-sqlite3": "^11.9.1",
40
+ "chokidar": "^4.0.3",
41
+ "ignore": "^7.0.5",
42
+ "picocolors": "^1.1.1",
43
+ "ts-morph": "^25.0.1",
44
+ "zod": "^4.3.6"
45
+ },
46
+ "devDependencies": {
47
+ "@types/better-sqlite3": "^7.6.12",
48
+ "@types/node": "^22.13.13",
49
+ "tsx": "^4.19.3",
50
+ "typescript": "^5.8.2"
51
+ }
52
+ }