@tichopad/notes-query-tool 0.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.
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # notes-query-tool
2
+
3
+ **Prerequisites:** Node.js >= 24, pnpm >= 10
4
+
5
+ Load and index notes:
6
+ `pnpm run dev load --glob "testdata/**/*.md"`
7
+
8
+ Query notes:
9
+ `pnpm run dev query --vector/-v <semantic query> --fulltext/-f <keyword query>`
10
+
11
+ Both `--vector` and `--fulltext` flags are required.
12
+
13
+ An optional `--trigram` / `-g` flag passes a separate plain-text query to the trigram leg. When omitted, the trigram leg falls back to the `--fulltext` value (preserving existing behaviour). Use this when `--fulltext` contains PostgreSQL websearch syntax (`OR`, `-word`, `"phrases"`) that would corrupt trigram scoring.
14
+
15
+ An optional `--trigram-mode` / `-t` flag selects the trigram operator: `strict` (default, uses `strict_word_similarity`) or `word` (uses `word_similarity`).
16
+
17
+ ## Bases
18
+
19
+ A **base** is a named, isolated collection of notes. All files loaded into the index belong to exactly one base, and queries are scoped to a single base — results from one base never appear in another.
20
+
21
+ The default base is named `default`. Pass `--base <name>` to either command to use a different one. A base is created automatically on first load.
22
+
23
+ ```sh
24
+ # Load notes into a named base
25
+ pnpm run dev load --base work --glob "work-notes/**/*.md"
26
+ pnpm run dev load --base personal --glob "personal/**/*.md"
27
+
28
+ # Query within a specific base
29
+ pnpm run dev query --base work -v "project deadlines" -f "deadline project"
30
+
31
+ # Querying a base that doesn't exist exits with an error
32
+ pnpm run dev query --base nonexistent -v "anything" -f "anything"
33
+
34
+ # Drop a base and all its indexed data (prompts for confirmation)
35
+ pnpm run dev drop --base work
36
+
37
+ # Drop without confirmation (useful for scripting)
38
+ pnpm run dev drop --base work --force
39
+ ```
40
+
41
+ ## Search channels
42
+
43
+ Three parallel channels run on every query and are fused by weighted score (vector 0.3 / FTS 0.4 / trigram 0.3):
44
+
45
+ - **Vector** — dense cosine similarity on chunk embeddings. Best for semantic / paraphrase queries.
46
+ - **FTS** — PostgreSQL full-text search via `tsvector`/`websearch_to_tsquery`. Supports websearch syntax: `OR`, `-word`, `"exact phrase"`. Best for keyword matching.
47
+ - **Trigram** *(experimental)* — `pg_trgm` word-distance matching on raw chunk content via `strict_word_similarity` (default) or `word_similarity`. Uses `--trigram` text (or `--fulltext` if not specified). Best for proper-noun and lexical queries that FTS tokenisation misses.
48
+
49
+ The trigram threshold is fixed at 0.3. Use `--trigram-mode strict` for precision (fewer but higher-confidence matches) or `--trigram-mode word` for recall (more matches, looser).
50
+
51
+ ### Re-loading notes after a fresh database
52
+
53
+ If you need to reset the database (e.g. after schema migrations), run:
54
+
55
+ ```bash
56
+ rm -rf dbdata/
57
+ pnpm run dev load --glob 'notes/**/*.md'
58
+ ```
59
+
60
+ ## Development
61
+
62
+ ### Ad-hoc SQL queries
63
+
64
+ Run arbitrary SQL against the local PGLite DB (in `./dbdata/`):
65
+
66
+ ```bash
67
+ pnpm run db:query "SELECT id, path FROM notes LIMIT 5"
68
+ # or via stdin
69
+ pnpm run db:query <<'SQL'
70
+ SELECT count(*) FROM chunks;
71
+ SQL
72
+ ```
73
+
74
+ Output is terse TSV designed for agents/scripts. Vector columns are abbreviated. Row output capped at 200 rows (override with `DB_QUERY_LIMIT`). Multi-statement input supported.
75
+
76
+ ## Examples
77
+
78
+ ```sh
79
+ # Full flags
80
+ pnpm run dev query --vector "Who is my girlfriend and what does she like?" --fulltext "girlfriend interests hobbies"
81
+
82
+ # Short aliases
83
+ pnpm run dev query -v "What are my long-term career goals?" -f "career goals plans"
84
+
85
+ # Mixed
86
+ pnpm run dev query --vector "Summarize my thoughts on stoicism" -f "stoicism notes"
87
+
88
+ # Split --fulltext (websearch syntax) from --trigram (plain text)
89
+ pnpm run dev query -v "async programming patterns" -f "javascript OR python" -g "javascript"
90
+
91
+ # FTS with phrase exclusion; trigram stays clean
92
+ pnpm run dev query -v "nutrition advice" -f '"meal prep" -fast food' -g "meal prep"
93
+ ```
@@ -0,0 +1,2 @@
1
+ CREATE EXTENSION IF NOT EXISTS vector;--> statement-breakpoint
2
+ CREATE EXTENSION IF NOT EXISTS unaccent;
@@ -0,0 +1,24 @@
1
+ CREATE TABLE "chunks" (
2
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "chunks_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
3
+ "file_id" integer NOT NULL,
4
+ "chunk_index" integer NOT NULL,
5
+ "content" text NOT NULL,
6
+ "breadcrumbs" text[] NOT NULL,
7
+ "embedding" vector(768),
8
+ "fts" "tsvector",
9
+ "created_at" timestamp DEFAULT now() NOT NULL,
10
+ "updated_at" timestamp DEFAULT now() NOT NULL
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE TABLE "files" (
14
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "files_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
15
+ "file_path" text NOT NULL,
16
+ "content_hash" text NOT NULL,
17
+ "attributes" jsonb,
18
+ "created_at" timestamp DEFAULT now() NOT NULL,
19
+ "updated_at" timestamp DEFAULT now() NOT NULL,
20
+ CONSTRAINT "files_file_path_unique" UNIQUE("file_path")
21
+ );
22
+ --> statement-breakpoint
23
+ ALTER TABLE "chunks" ADD CONSTRAINT "chunks_file_id_files_id_fk" FOREIGN KEY ("file_id") REFERENCES "public"."files"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
24
+ CREATE INDEX "chunks_fts_idx" ON "chunks" USING gin ("fts");
@@ -0,0 +1,3 @@
1
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;--> statement-breakpoint
2
+ CREATE INDEX IF NOT EXISTS chunks_content_trgm_idx
3
+ ON chunks USING gin (content gin_trgm_ops);
@@ -0,0 +1,12 @@
1
+ CREATE TABLE "bases" (
2
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "bases_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
3
+ "name" text NOT NULL,
4
+ "created_at" timestamp DEFAULT now() NOT NULL,
5
+ "updated_at" timestamp DEFAULT now() NOT NULL,
6
+ CONSTRAINT "bases_name_unique" UNIQUE("name")
7
+ );
8
+ --> statement-breakpoint
9
+ ALTER TABLE "files" DROP CONSTRAINT "files_file_path_unique";--> statement-breakpoint
10
+ ALTER TABLE "files" ADD COLUMN "base_id" integer NOT NULL;--> statement-breakpoint
11
+ ALTER TABLE "files" ADD CONSTRAINT "files_base_id_bases_id_fk" FOREIGN KEY ("base_id") REFERENCES "public"."bases"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
12
+ ALTER TABLE "files" ADD CONSTRAINT "files_base_id_file_path_unique" UNIQUE("base_id","file_path");
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "c4d512fe-fe9b-4dfb-a9b9-55261abae4c8",
3
+ "prevId": "00000000-0000-0000-0000-000000000000",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {},
7
+ "enums": {},
8
+ "schemas": {},
9
+ "views": {},
10
+ "sequences": {},
11
+ "roles": {},
12
+ "policies": {},
13
+ "_meta": {
14
+ "columns": {},
15
+ "schemas": {},
16
+ "tables": {}
17
+ }
18
+ }
@@ -0,0 +1,193 @@
1
+ {
2
+ "id": "6f259cb7-6aa7-425f-ba24-530ce8325605",
3
+ "prevId": "c4d512fe-fe9b-4dfb-a9b9-55261abae4c8",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.chunks": {
8
+ "name": "chunks",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "integer",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "identity": {
17
+ "type": "always",
18
+ "name": "chunks_id_seq",
19
+ "schema": "public",
20
+ "increment": "1",
21
+ "startWith": "1",
22
+ "minValue": "1",
23
+ "maxValue": "2147483647",
24
+ "cache": "1",
25
+ "cycle": false
26
+ }
27
+ },
28
+ "file_id": {
29
+ "name": "file_id",
30
+ "type": "integer",
31
+ "primaryKey": false,
32
+ "notNull": true
33
+ },
34
+ "chunk_index": {
35
+ "name": "chunk_index",
36
+ "type": "integer",
37
+ "primaryKey": false,
38
+ "notNull": true
39
+ },
40
+ "content": {
41
+ "name": "content",
42
+ "type": "text",
43
+ "primaryKey": false,
44
+ "notNull": true
45
+ },
46
+ "breadcrumbs": {
47
+ "name": "breadcrumbs",
48
+ "type": "text[]",
49
+ "primaryKey": false,
50
+ "notNull": true
51
+ },
52
+ "embedding": {
53
+ "name": "embedding",
54
+ "type": "vector(768)",
55
+ "primaryKey": false,
56
+ "notNull": false
57
+ },
58
+ "fts": {
59
+ "name": "fts",
60
+ "type": "tsvector",
61
+ "primaryKey": false,
62
+ "notNull": false
63
+ },
64
+ "created_at": {
65
+ "name": "created_at",
66
+ "type": "timestamp",
67
+ "primaryKey": false,
68
+ "notNull": true,
69
+ "default": "now()"
70
+ },
71
+ "updated_at": {
72
+ "name": "updated_at",
73
+ "type": "timestamp",
74
+ "primaryKey": false,
75
+ "notNull": true,
76
+ "default": "now()"
77
+ }
78
+ },
79
+ "indexes": {
80
+ "chunks_fts_idx": {
81
+ "name": "chunks_fts_idx",
82
+ "columns": [
83
+ {
84
+ "expression": "fts",
85
+ "isExpression": false,
86
+ "asc": true,
87
+ "nulls": "last"
88
+ }
89
+ ],
90
+ "isUnique": false,
91
+ "concurrently": false,
92
+ "method": "gin",
93
+ "with": {}
94
+ }
95
+ },
96
+ "foreignKeys": {
97
+ "chunks_file_id_files_id_fk": {
98
+ "name": "chunks_file_id_files_id_fk",
99
+ "tableFrom": "chunks",
100
+ "tableTo": "files",
101
+ "columnsFrom": ["file_id"],
102
+ "columnsTo": ["id"],
103
+ "onDelete": "cascade",
104
+ "onUpdate": "no action"
105
+ }
106
+ },
107
+ "compositePrimaryKeys": {},
108
+ "uniqueConstraints": {},
109
+ "policies": {},
110
+ "checkConstraints": {},
111
+ "isRLSEnabled": false
112
+ },
113
+ "public.files": {
114
+ "name": "files",
115
+ "schema": "",
116
+ "columns": {
117
+ "id": {
118
+ "name": "id",
119
+ "type": "integer",
120
+ "primaryKey": true,
121
+ "notNull": true,
122
+ "identity": {
123
+ "type": "always",
124
+ "name": "files_id_seq",
125
+ "schema": "public",
126
+ "increment": "1",
127
+ "startWith": "1",
128
+ "minValue": "1",
129
+ "maxValue": "2147483647",
130
+ "cache": "1",
131
+ "cycle": false
132
+ }
133
+ },
134
+ "file_path": {
135
+ "name": "file_path",
136
+ "type": "text",
137
+ "primaryKey": false,
138
+ "notNull": true
139
+ },
140
+ "content_hash": {
141
+ "name": "content_hash",
142
+ "type": "text",
143
+ "primaryKey": false,
144
+ "notNull": true
145
+ },
146
+ "attributes": {
147
+ "name": "attributes",
148
+ "type": "jsonb",
149
+ "primaryKey": false,
150
+ "notNull": false
151
+ },
152
+ "created_at": {
153
+ "name": "created_at",
154
+ "type": "timestamp",
155
+ "primaryKey": false,
156
+ "notNull": true,
157
+ "default": "now()"
158
+ },
159
+ "updated_at": {
160
+ "name": "updated_at",
161
+ "type": "timestamp",
162
+ "primaryKey": false,
163
+ "notNull": true,
164
+ "default": "now()"
165
+ }
166
+ },
167
+ "indexes": {},
168
+ "foreignKeys": {},
169
+ "compositePrimaryKeys": {},
170
+ "uniqueConstraints": {
171
+ "files_file_path_unique": {
172
+ "name": "files_file_path_unique",
173
+ "nullsNotDistinct": false,
174
+ "columns": ["file_path"]
175
+ }
176
+ },
177
+ "policies": {},
178
+ "checkConstraints": {},
179
+ "isRLSEnabled": false
180
+ }
181
+ },
182
+ "enums": {},
183
+ "schemas": {},
184
+ "sequences": {},
185
+ "roles": {},
186
+ "policies": {},
187
+ "views": {},
188
+ "_meta": {
189
+ "columns": {},
190
+ "schemas": {},
191
+ "tables": {}
192
+ }
193
+ }
@@ -0,0 +1,193 @@
1
+ {
2
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
3
+ "prevId": "6f259cb7-6aa7-425f-ba24-530ce8325605",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.chunks": {
8
+ "name": "chunks",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "integer",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "identity": {
17
+ "type": "always",
18
+ "name": "chunks_id_seq",
19
+ "schema": "public",
20
+ "increment": "1",
21
+ "startWith": "1",
22
+ "minValue": "1",
23
+ "maxValue": "2147483647",
24
+ "cache": "1",
25
+ "cycle": false
26
+ }
27
+ },
28
+ "file_id": {
29
+ "name": "file_id",
30
+ "type": "integer",
31
+ "primaryKey": false,
32
+ "notNull": true
33
+ },
34
+ "chunk_index": {
35
+ "name": "chunk_index",
36
+ "type": "integer",
37
+ "primaryKey": false,
38
+ "notNull": true
39
+ },
40
+ "content": {
41
+ "name": "content",
42
+ "type": "text",
43
+ "primaryKey": false,
44
+ "notNull": true
45
+ },
46
+ "breadcrumbs": {
47
+ "name": "breadcrumbs",
48
+ "type": "text[]",
49
+ "primaryKey": false,
50
+ "notNull": true
51
+ },
52
+ "embedding": {
53
+ "name": "embedding",
54
+ "type": "vector(768)",
55
+ "primaryKey": false,
56
+ "notNull": false
57
+ },
58
+ "fts": {
59
+ "name": "fts",
60
+ "type": "tsvector",
61
+ "primaryKey": false,
62
+ "notNull": false
63
+ },
64
+ "created_at": {
65
+ "name": "created_at",
66
+ "type": "timestamp",
67
+ "primaryKey": false,
68
+ "notNull": true,
69
+ "default": "now()"
70
+ },
71
+ "updated_at": {
72
+ "name": "updated_at",
73
+ "type": "timestamp",
74
+ "primaryKey": false,
75
+ "notNull": true,
76
+ "default": "now()"
77
+ }
78
+ },
79
+ "indexes": {
80
+ "chunks_fts_idx": {
81
+ "name": "chunks_fts_idx",
82
+ "columns": [
83
+ {
84
+ "expression": "fts",
85
+ "isExpression": false,
86
+ "asc": true,
87
+ "nulls": "last"
88
+ }
89
+ ],
90
+ "isUnique": false,
91
+ "concurrently": false,
92
+ "method": "gin",
93
+ "with": {}
94
+ }
95
+ },
96
+ "foreignKeys": {
97
+ "chunks_file_id_files_id_fk": {
98
+ "name": "chunks_file_id_files_id_fk",
99
+ "tableFrom": "chunks",
100
+ "tableTo": "files",
101
+ "columnsFrom": ["file_id"],
102
+ "columnsTo": ["id"],
103
+ "onDelete": "cascade",
104
+ "onUpdate": "no action"
105
+ }
106
+ },
107
+ "compositePrimaryKeys": {},
108
+ "uniqueConstraints": {},
109
+ "policies": {},
110
+ "checkConstraints": {},
111
+ "isRLSEnabled": false
112
+ },
113
+ "public.files": {
114
+ "name": "files",
115
+ "schema": "",
116
+ "columns": {
117
+ "id": {
118
+ "name": "id",
119
+ "type": "integer",
120
+ "primaryKey": true,
121
+ "notNull": true,
122
+ "identity": {
123
+ "type": "always",
124
+ "name": "files_id_seq",
125
+ "schema": "public",
126
+ "increment": "1",
127
+ "startWith": "1",
128
+ "minValue": "1",
129
+ "maxValue": "2147483647",
130
+ "cache": "1",
131
+ "cycle": false
132
+ }
133
+ },
134
+ "file_path": {
135
+ "name": "file_path",
136
+ "type": "text",
137
+ "primaryKey": false,
138
+ "notNull": true
139
+ },
140
+ "content_hash": {
141
+ "name": "content_hash",
142
+ "type": "text",
143
+ "primaryKey": false,
144
+ "notNull": true
145
+ },
146
+ "attributes": {
147
+ "name": "attributes",
148
+ "type": "jsonb",
149
+ "primaryKey": false,
150
+ "notNull": false
151
+ },
152
+ "created_at": {
153
+ "name": "created_at",
154
+ "type": "timestamp",
155
+ "primaryKey": false,
156
+ "notNull": true,
157
+ "default": "now()"
158
+ },
159
+ "updated_at": {
160
+ "name": "updated_at",
161
+ "type": "timestamp",
162
+ "primaryKey": false,
163
+ "notNull": true,
164
+ "default": "now()"
165
+ }
166
+ },
167
+ "indexes": {},
168
+ "foreignKeys": {},
169
+ "compositePrimaryKeys": {},
170
+ "uniqueConstraints": {
171
+ "files_file_path_unique": {
172
+ "name": "files_file_path_unique",
173
+ "nullsNotDistinct": false,
174
+ "columns": ["file_path"]
175
+ }
176
+ },
177
+ "policies": {},
178
+ "checkConstraints": {},
179
+ "isRLSEnabled": false
180
+ }
181
+ },
182
+ "enums": {},
183
+ "schemas": {},
184
+ "sequences": {},
185
+ "roles": {},
186
+ "policies": {},
187
+ "views": {},
188
+ "_meta": {
189
+ "columns": {},
190
+ "schemas": {},
191
+ "tables": {}
192
+ }
193
+ }
@@ -0,0 +1,265 @@
1
+ {
2
+ "id": "eadc2e23-8643-4c91-9438-18a9d71f8b84",
3
+ "prevId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.bases": {
8
+ "name": "bases",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "integer",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "identity": {
17
+ "type": "always",
18
+ "name": "bases_id_seq",
19
+ "schema": "public",
20
+ "increment": "1",
21
+ "startWith": "1",
22
+ "minValue": "1",
23
+ "maxValue": "2147483647",
24
+ "cache": "1",
25
+ "cycle": false
26
+ }
27
+ },
28
+ "name": {
29
+ "name": "name",
30
+ "type": "text",
31
+ "primaryKey": false,
32
+ "notNull": true
33
+ },
34
+ "created_at": {
35
+ "name": "created_at",
36
+ "type": "timestamp",
37
+ "primaryKey": false,
38
+ "notNull": true,
39
+ "default": "now()"
40
+ },
41
+ "updated_at": {
42
+ "name": "updated_at",
43
+ "type": "timestamp",
44
+ "primaryKey": false,
45
+ "notNull": true,
46
+ "default": "now()"
47
+ }
48
+ },
49
+ "indexes": {},
50
+ "foreignKeys": {},
51
+ "compositePrimaryKeys": {},
52
+ "uniqueConstraints": {
53
+ "bases_name_unique": {
54
+ "name": "bases_name_unique",
55
+ "nullsNotDistinct": false,
56
+ "columns": ["name"]
57
+ }
58
+ },
59
+ "policies": {},
60
+ "checkConstraints": {},
61
+ "isRLSEnabled": false
62
+ },
63
+ "public.chunks": {
64
+ "name": "chunks",
65
+ "schema": "",
66
+ "columns": {
67
+ "id": {
68
+ "name": "id",
69
+ "type": "integer",
70
+ "primaryKey": true,
71
+ "notNull": true,
72
+ "identity": {
73
+ "type": "always",
74
+ "name": "chunks_id_seq",
75
+ "schema": "public",
76
+ "increment": "1",
77
+ "startWith": "1",
78
+ "minValue": "1",
79
+ "maxValue": "2147483647",
80
+ "cache": "1",
81
+ "cycle": false
82
+ }
83
+ },
84
+ "file_id": {
85
+ "name": "file_id",
86
+ "type": "integer",
87
+ "primaryKey": false,
88
+ "notNull": true
89
+ },
90
+ "chunk_index": {
91
+ "name": "chunk_index",
92
+ "type": "integer",
93
+ "primaryKey": false,
94
+ "notNull": true
95
+ },
96
+ "content": {
97
+ "name": "content",
98
+ "type": "text",
99
+ "primaryKey": false,
100
+ "notNull": true
101
+ },
102
+ "breadcrumbs": {
103
+ "name": "breadcrumbs",
104
+ "type": "text[]",
105
+ "primaryKey": false,
106
+ "notNull": true
107
+ },
108
+ "embedding": {
109
+ "name": "embedding",
110
+ "type": "vector(768)",
111
+ "primaryKey": false,
112
+ "notNull": false
113
+ },
114
+ "fts": {
115
+ "name": "fts",
116
+ "type": "tsvector",
117
+ "primaryKey": false,
118
+ "notNull": false
119
+ },
120
+ "created_at": {
121
+ "name": "created_at",
122
+ "type": "timestamp",
123
+ "primaryKey": false,
124
+ "notNull": true,
125
+ "default": "now()"
126
+ },
127
+ "updated_at": {
128
+ "name": "updated_at",
129
+ "type": "timestamp",
130
+ "primaryKey": false,
131
+ "notNull": true,
132
+ "default": "now()"
133
+ }
134
+ },
135
+ "indexes": {
136
+ "chunks_fts_idx": {
137
+ "name": "chunks_fts_idx",
138
+ "columns": [
139
+ {
140
+ "expression": "fts",
141
+ "isExpression": false,
142
+ "asc": true,
143
+ "nulls": "last"
144
+ }
145
+ ],
146
+ "isUnique": false,
147
+ "concurrently": false,
148
+ "method": "gin",
149
+ "with": {}
150
+ }
151
+ },
152
+ "foreignKeys": {
153
+ "chunks_file_id_files_id_fk": {
154
+ "name": "chunks_file_id_files_id_fk",
155
+ "tableFrom": "chunks",
156
+ "tableTo": "files",
157
+ "columnsFrom": ["file_id"],
158
+ "columnsTo": ["id"],
159
+ "onDelete": "cascade",
160
+ "onUpdate": "no action"
161
+ }
162
+ },
163
+ "compositePrimaryKeys": {},
164
+ "uniqueConstraints": {},
165
+ "policies": {},
166
+ "checkConstraints": {},
167
+ "isRLSEnabled": false
168
+ },
169
+ "public.files": {
170
+ "name": "files",
171
+ "schema": "",
172
+ "columns": {
173
+ "id": {
174
+ "name": "id",
175
+ "type": "integer",
176
+ "primaryKey": true,
177
+ "notNull": true,
178
+ "identity": {
179
+ "type": "always",
180
+ "name": "files_id_seq",
181
+ "schema": "public",
182
+ "increment": "1",
183
+ "startWith": "1",
184
+ "minValue": "1",
185
+ "maxValue": "2147483647",
186
+ "cache": "1",
187
+ "cycle": false
188
+ }
189
+ },
190
+ "base_id": {
191
+ "name": "base_id",
192
+ "type": "integer",
193
+ "primaryKey": false,
194
+ "notNull": true
195
+ },
196
+ "file_path": {
197
+ "name": "file_path",
198
+ "type": "text",
199
+ "primaryKey": false,
200
+ "notNull": true
201
+ },
202
+ "content_hash": {
203
+ "name": "content_hash",
204
+ "type": "text",
205
+ "primaryKey": false,
206
+ "notNull": true
207
+ },
208
+ "attributes": {
209
+ "name": "attributes",
210
+ "type": "jsonb",
211
+ "primaryKey": false,
212
+ "notNull": false
213
+ },
214
+ "created_at": {
215
+ "name": "created_at",
216
+ "type": "timestamp",
217
+ "primaryKey": false,
218
+ "notNull": true,
219
+ "default": "now()"
220
+ },
221
+ "updated_at": {
222
+ "name": "updated_at",
223
+ "type": "timestamp",
224
+ "primaryKey": false,
225
+ "notNull": true,
226
+ "default": "now()"
227
+ }
228
+ },
229
+ "indexes": {},
230
+ "foreignKeys": {
231
+ "files_base_id_bases_id_fk": {
232
+ "name": "files_base_id_bases_id_fk",
233
+ "tableFrom": "files",
234
+ "tableTo": "bases",
235
+ "columnsFrom": ["base_id"],
236
+ "columnsTo": ["id"],
237
+ "onDelete": "cascade",
238
+ "onUpdate": "no action"
239
+ }
240
+ },
241
+ "compositePrimaryKeys": {},
242
+ "uniqueConstraints": {
243
+ "files_base_id_file_path_unique": {
244
+ "name": "files_base_id_file_path_unique",
245
+ "nullsNotDistinct": false,
246
+ "columns": ["base_id", "file_path"]
247
+ }
248
+ },
249
+ "policies": {},
250
+ "checkConstraints": {},
251
+ "isRLSEnabled": false
252
+ }
253
+ },
254
+ "enums": {},
255
+ "schemas": {},
256
+ "sequences": {},
257
+ "roles": {},
258
+ "policies": {},
259
+ "views": {},
260
+ "_meta": {
261
+ "columns": {},
262
+ "schemas": {},
263
+ "tables": {}
264
+ }
265
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "postgresql",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1776198771489,
9
+ "tag": "0000_supreme_baron_strucker",
10
+ "breakpoints": true
11
+ },
12
+ {
13
+ "idx": 1,
14
+ "version": "7",
15
+ "when": 1777114924498,
16
+ "tag": "0001_keen_komodo",
17
+ "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 2,
21
+ "version": "7",
22
+ "when": 1745612400000,
23
+ "tag": "0002_pg_trgm",
24
+ "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "7",
29
+ "when": 1779308820924,
30
+ "tag": "0003_wooden_spacker_dave",
31
+ "breakpoints": true
32
+ }
33
+ ]
34
+ }
package/dist/main.js ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import{defineCommand as rn,runMain as on}from"citty";var q={name:"@tichopad/notes-query-tool",type:"module",version:"0.1.0",description:"CLI tool for indexing and querying Markdown notes",engines:{node:">=24"},packageManager:"pnpm@10.32.1",main:"dist/main.js",bin:{nqt:"dist/main.js"},files:["dist"],scripts:{"db:delete-stale-lock":"rm ./dbdata/postmaster.pid","db:generate":"drizzle-kit generate","db:query":"node scripts/query.ts","db:push":"drizzle-kit push","db:studio":"drizzle-kit studio","benchdata:load":"pnpm run dev load --glob 'benchdata/**/*.md'","benchdata:reindex":"rm -rf dbdata && pnpm run benchdata:load","testdata:load":"pnpm run dev load --glob 'testdata/**/*.md'","testdata:reindex":"rm -rf dbdata && pnpm run testdata:load",dev:"node src/main.ts",build:"node scripts/build.ts",test:"node --test --test-reporter=spec 'src/**/*.test.ts'",bench:"node --test --test-reporter=spec 'bench/**/*.test.ts'",check:"biome check . && tsc --noEmit && pnpm run test",fix:"biome check --write ."},dependencies:{"@electric-sql/pglite":"0.4.4","@huggingface/transformers":"4.1.0",citty:"0.2.2",consola:"3.4.2","drizzle-orm":"0.45.2",marked:"18.0.1",yaml:"2.8.3"},devDependencies:{"@biomejs/biome":"2.4.12","@types/node":"24.12.2","drizzle-kit":"0.31.10",esbuild:"0.28.0",typescript:"6.0.2"},pnpm:{onlyBuiltDependencies:["esbuild","onnxruntime-node","protobufjs","sharp"],patchedDependencies:{"drizzle-kit@0.31.10":"patches/drizzle-kit@0.31.10.patch"}}};import{createInterface as it}from"node:readline";import{defineCommand as at}from"citty";import{eq as pe}from"drizzle-orm";import{PGlite as Xe}from"@electric-sql/pglite";import{pg_trgm as Je}from"@electric-sql/pglite/contrib/pg_trgm";import{unaccent as Ye}from"@electric-sql/pglite/contrib/unaccent";import{vector as Ze}from"@electric-sql/pglite/vector";import{drizzle as et}from"drizzle-orm/pglite";import{homedir as Ke}from"node:os";import{join as J}from"node:path";var Y="onnx-community/embeddinggemma-300m-ONNX",Z="fp32",ee=768;function Ve(){let e=process.env.XDG_DATA_HOME,t=e&&e.length>0?e:J(Ke(),".local","share");return`${J(t,"nqt")}/`}var te=Ve(),ne=2e3,re=30,oe=20,se=20,ie=.3,ae=.4,ue=.3,ce=.3,le=.2,de=.4,me=10;var tt={unaccent:Ye,vector:Ze,pg_trgm:Je};function nt(e=te){let t=new Xe({dataDir:e,extensions:tt});return et({client:t})}var z;function x(){return z||(z=nt()),z}import{sql as fe}from"drizzle-orm";import{integer as rt,pgTable as ot,text as st,timestamp as ge}from"drizzle-orm/pg-core";var k=ot("bases",{id:rt("id").primaryKey().generatedAlwaysAsIdentity(),name:st("name").notNull().unique(),createdAt:ge("created_at").notNull().default(fe`now()`),updatedAt:ge("updated_at").notNull().default(fe`now()`)});var T=class{db;constructor(t){this.db=t??x()}async getBaseByName(t){let[r]=await this.db.select().from(k).where(pe(k.name,t)).limit(1);return r}async getOrCreateBase(t){let r=await this.getBaseByName(t);if(r)return r;let[n]=await this.db.insert(k).values({name:t}).returning();if(!n)throw new Error(`Failed to create base: ${t}`);return n}async deleteBase(t){await this.db.delete(k).where(pe(k.name,t))}};var be=at({meta:{name:"drop",description:"Drop a knowledge base and all its indexed data"},args:{base:{type:"string",description:"Knowledge base name to drop",default:"default"},force:{type:"boolean",description:"Skip confirmation prompt",default:!1}},async run({args:e}){let t=new T;if(await t.getBaseByName(e.base)||(console.error(`Error: Base '${e.base}' not found.`),process.exit(1)),!e.force&&!await ut(`Are you sure you want to drop base '${e.base}'? [y/N] `)){console.log("Aborted.");return}await t.deleteBase(e.base),console.log(`Base '${e.base}' dropped.`)}});function ut(e){return new Promise(t=>{let r=it({input:process.stdin,output:process.stdout});r.question(e,n=>{r.close(),t(n.toLowerCase()==="y"||n.toLowerCase()==="yes")})})}import{createHash as Qt}from"node:crypto";import{readFile as Wt}from"node:fs/promises";import{defineCommand as jt}from"citty";import{pipeline as dt}from"@huggingface/transformers";import{createConsola as ct}from"consola";function lt(){let e=process.env.NQT_LOG_LEVEL;if(e!==void 0){let t=Number(e);if(Number.isInteger(t)&&t>=0&&t<=5)return t}return 3}var R=ct({level:lt()});function he(e){R.level=e}var m={info(e,...t){R.info(e,...t)},warn(e,...t){R.warn(e,...t)},error(e,...t){R.error(e,...t)},debug(e,...t){R.debug(e,...t)},trace(e,...t){R.trace(e,...t)}};async function G(e){return await dt("feature-extraction",Y,{device:e,dtype:Z})}function mt(e){let t=Array.from(e);return t.some(r=>!Number.isFinite(r))?[]:t}var ft="task: search result | query: ",gt="title: ",pt=" | text: ",bt="none";async function L(){let e,t="webgpu";try{e=await G("webgpu"),m.debug("Embedder loaded on WebGPU")}catch{m.warn("WebGPU unavailable, using CPU."),t="cpu",e=await G("cpu"),m.debug("Embedder loaded on CPU")}async function r(n){let o=await e(n,{pooling:"mean",normalize:!0}),s=mt(o.data);if(s.length>0)return s;if(t==="webgpu")return m.warn("WebGPU produced invalid embeddings, falling back to CPU..."),t="cpu",e=await G("cpu"),m.debug("Embedder loaded on CPU"),r(n);throw new Error("Embedding model produced non-finite values")}return{embedQuery(n){return r(ft+n)},embedDocument(n,o){let s=o?.trim()||bt;return r(gt+s+pt+n)}}}import{marked as ht}from"marked";var ye=6;function Ie(e,t){if(t<=0)throw new Error("limit must be > 0");if(e.length===0)return[];if(e.trim().length===0)return[];let r=yt(e);if(r.length===0)return[];let n=xt(r),o=Ee(n,[],t);return Rt(o,t)}function yt(e){let t=ht.lexer(e),r=[],n=0;for(let o of t){let s=o.raw??"",a=n,u=n+s.length;r.push({token:o,start:a,end:u,raw:s}),n=u}return r}function xt(e){return{heading:null,level:0,body:e,start:e[0]?.start??0,end:e[e.length-1]?.end??0}}function wt(e){let t=ye+1;for(let o of e)if(we(o.token)){let s=o.token.depth;s<t&&(t=s)}if(t>ye)return null;let r=[],n=null;for(let o of e)we(o.token)&&o.token.depth===t?(n&&r.push(xe(n)),n={heading:o,level:t,body:[],start:o.start,end:o.end}):(n||(n={heading:null,level:0,body:[],start:o.start,end:o.end}),n.body.push(o),n.end=o.end);return n&&r.push(xe(n)),r}function xe(e){let t=e.body[e.body.length-1];return t?e.end=t.end:e.heading&&(e.end=e.heading.end),e}function we(e){return e.type==="heading"}function Ee(e,t,r){let n=e.heading?$t(e.heading):null,o=n?[...t,n]:t,s=e.body[0]?.start??e.heading?.end??e.start,a=e.body[e.body.length-1]?.end??e.heading?.end??e.end,u=Et(e.body),i=e.heading?`${n}
3
+
4
+ `:"",d=N(i+u),c=W(t,d,r);if(c!==null&&c.text.length<=r&&d.length>0)return[{text:c.text,breadcrumb:c.breadcrumb,startOffset:e.heading?e.heading.start:s,endOffset:a}];let l=wt(e.body);if(l&&l.length>0&&l.some(b=>b.heading!==null)){let b=[];for(let p of l)p.heading===null?p.body.some(h=>h.raw.trim().length>0)&&b.push(...ke(p.body,o,r)):b.push(...Ee(p,o,r));return b}return ke(e.body,o,r)}function ke(e,t,r){if(e.length===0)return[];let n=[];for(let o of e){let s=N(o.raw);if(s.trim().length===0)continue;let a=W(t,s,r);a!==null&&a.text.length<=r?n.push({text:a.text,breadcrumb:a.breadcrumb,startOffset:o.start,endOffset:o.end}):n.push(...kt(o,t,r))}return n}function kt(e,t,r){let n=N(e.raw),o=Tt(n);return o.length>1?Pt(o,e.start,t,r,s=>Te(s,r,Q(t,r))):It(Te(n,r,Q(t,r)),e.start,t,r)}function Tt(e){let t=[],r=/[^.!?]+[.!?]+(?:\s+|$)/g,n=0,o;for(;(o=r.exec(e))!==null;)t.push({text:o[0],offset:o.index}),n=o.index+o[0].length;return n<e.length&&t.push({text:e.slice(n),offset:n}),t.length===0?[{text:e,offset:0}]:t}function Te(e,t,r){let n=Math.max(1,t-r),o=[],s=/\S+\s*/g,a=[],u;for(;(u=s.exec(e))!==null;)a.push({text:u[0],offset:u.index});let i=a[0];if(!i)return Pe(e,n,0);let d="",c=i.offset;for(let l of a){if(l.text.length>n){d.length>0&&(o.push({text:d,offset:c}),d=""),o.push(...Pe(l.text,n,l.offset)),c=l.offset+l.text.length;continue}d.length+l.text.length>n?(o.push({text:d,offset:c}),d=l.text,c=l.offset):(d.length===0&&(c=l.offset),d+=l.text)}return d.length>0&&o.push({text:d,offset:c}),o}function Pe(e,t,r){let n=[];for(let o=0;o<e.length;o+=t)n.push({text:e.slice(o,o+t),offset:r+o});return n}function Pt(e,t,r,n,o){let s=Q(r,n),a=Math.max(1,n-s),u=[],i="",d=e[0]?.offset??0;for(let c of e){if(c.text.length>a){i.length>0&&(u.push(F(i,t+d,r,n)),i="");let l=o(c.text);for(let b of l)u.push(F(b.text,t+c.offset+b.offset,r,n));continue}i.length+c.text.length>a?(u.push(F(i,t+d,r,n)),i=c.text,d=c.offset):(i.length===0&&(d=c.offset),i+=c.text)}return i.length>0&&u.push(F(i,t+d,r,n)),u}function It(e,t,r,n){let o=[];for(let s of e)o.push(F(s.text,t+s.offset,r,n));return o}function F(e,t,r,n){let o=N(e),s=W(r,o,n);if(!s)throw new Error(`emit: assemble returned null for body length ${o.length}, limit ${n}`);let{text:a,breadcrumb:u}=s;if(a.length>n)throw new Error(`emit: assembled text length ${a.length} exceeds limit ${n} \u2014 body was not pre-split correctly`);return{text:a,breadcrumb:u,startOffset:t,endOffset:t+e.length}}function W(e,t,r){let n=[...e];for(;;){if(t.length<=r)return{text:t,breadcrumb:n};if(n.length===0)return null;n=n.slice(1)}}function Q(e,t){if(e.length===0)return 0;let r=`${e.join(`
5
+ `)}
6
+
7
+ `;return r.length>=t?0:r.length}function Et(e){let t="";for(let r of e)t+=r.raw;return t}function $t(e){return e.raw.replace(/\n+$/,"")}function N(e){return e.replace(/\n+$/,"")}function Rt(e,t){if(e.length<=1)return e;let r=[],n=e[0];if(!n)return e;let o=n;for(let s=1;s<e.length;s++){let a=e[s];if(!a)continue;if(!St(o.breadcrumb,a.breadcrumb)){r.push(o),o=a;continue}let u=`${o.text}
8
+
9
+ ${a.text}`;(o.breadcrumb.length>0?`${o.breadcrumb.join(`
10
+ `)}
11
+
12
+ `:"").length+u.length<=t?o={text:u,breadcrumb:o.breadcrumb,startOffset:o.startOffset,endOffset:a.endOffset}:(r.push(o),o=a)}return r.push(o),r}function St(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}import{glob as Dt}from"node:fs/promises";import{basename as _t}from"node:path";async function*$e(e){for await(let t of Dt(e,{withFileTypes:!0,exclude:r=>{let n=_t(r.name);return n!=="."&&n.startsWith(".")}}))t.isFile()&&(yield`${t.parentPath}/${t.name}`)}import{and as Ot,count as Ae,eq as B,sql as U}from"drizzle-orm";import{sql as Ce}from"drizzle-orm";import{customType as At,index as Mt,integer as j,pgTable as Lt,text as ve,timestamp as Fe,vector as Nt}from"drizzle-orm/pg-core";import{sql as Re}from"drizzle-orm";import{integer as Se,jsonb as Ct,pgTable as vt,text as De,timestamp as _e,unique as Ft}from"drizzle-orm/pg-core";var g=vt("files",{id:Se("id").primaryKey().generatedAlwaysAsIdentity(),baseId:Se("base_id").notNull().references(()=>k.id,{onDelete:"cascade"}),filePath:De("file_path").notNull(),contentHash:De("content_hash").notNull(),attributes:Ct("attributes").$type(),createdAt:_e("created_at").notNull().default(Re`now()`),updatedAt:_e("updated_at").notNull().default(Re`now()`)},e=>[Ft().on(e.baseId,e.filePath)]);var Bt=At({dataType(){return"tsvector"}}),f=Lt("chunks",{id:j("id").primaryKey().generatedAlwaysAsIdentity(),fileId:j("file_id").notNull().references(()=>g.id,{onDelete:"cascade"}),chunkIndex:j("chunk_index").notNull(),content:ve("content").notNull(),breadcrumbs:ve("breadcrumbs").array().notNull(),embedding:Nt("embedding",{dimensions:ee}),fts:Bt("fts"),createdAt:Fe("created_at").notNull().default(Ce`now()`),updatedAt:Fe("updated_at").notNull().default(Ce`now()`)},e=>[Mt("chunks_fts_idx").using("gin",e.fts)]);var O=class{db;constructor(t){this.db=t??x()}async getFileProcessingState(t,r){let[n]=await this.db.select({id:g.id,contentHash:g.contentHash}).from(g).where(Ot(B(g.filePath,t),B(g.baseId,r))).limit(1);if(!n)return null;let[o]=await this.db.select({total:Ae(),withEmbedding:Ae(U`CASE WHEN ${f.embedding} IS NOT NULL THEN 1 END`)}).from(f).where(B(f.fileId,n.id)),s=o?.total??0,a=o?.withEmbedding??0,u=s>0&&a===s;return{fileId:n.id,contentHash:n.contentHash,hasStoredChunksWithEmbeddings:u}}async upsertFile(t,r,n,o,s){let a={};n!==null&&(a.title=n);let[u]=await this.db.insert(g).values({filePath:t,contentHash:r,attributes:a,baseId:s}).onConflictDoUpdate({target:[g.baseId,g.filePath],set:{contentHash:r,attributes:a,updatedAt:U`now()`}}).returning({id:g.id});if(!u)throw new Error(`Failed to upsert file: ${t}`);return{id:u.id}}async replaceFileChunks(t,r){await this.db.transaction(async n=>{if(await n.delete(f).where(B(f.fileId,t)),r.length>0){let o=r.map(s=>({fileId:t,chunkIndex:s.chunkIndex,content:s.content,breadcrumbs:s.breadcrumbs,embedding:s.embedding,fts:U`to_tsvector('simple', unaccent(${s.content}))`}));await n.insert(f).values(o)}})}};import K from"node:path";import{parse as Ht}from"yaml";var qt=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function Me(e){let t=e.match(qt);if(!t)return{attributes:null,body:e};try{let r=Ht(t[1]);return{attributes:r&&typeof r=="object"&&!Array.isArray(r)?r:null,body:e.slice(t[0].length)}}catch{return{attributes:null,body:e}}}function zt(e){if(typeof e!="string")return null;let t=e.trim();return t||null}function Le(e){return Array.isArray(e)?e.flatMap(t=>{if(typeof t!="string")return[];let r=t.trim();return r?[r]:[]}):[]}function Gt(e){return e?{title:zt(e.title),aliases:Le(e.aliases),tags:Le(e.tags)}:null}function Ne(e,t,r){let n=[`File: ${e}`,`Path: ${t}`],o=Gt(r);o&&(o.title&&n.push(`Title: ${o.title}`),o.aliases.length>0&&n.push(`Aliases: ${o.aliases.join(", ")}`),o.tags.length>0&&n.push(`Tags: ${o.tags.join(", ")}`));let s=n.join(`
13
+ `),a=[e];o&&(o.title&&o.title!==e&&a.push(o.title),o.aliases.length>0&&a.push(`aliases: ${o.aliases.join(", ")}`),o.tags.length>0&&a.push(`tags: ${o.tags.join(", ")}`));let u=a.join("; ");return{headerPrefix:s,titleString:u}}function Be(e,t){return t===null?{action:"process"}:t.contentHash!==e?{action:"process"}:t.hasStoredChunksWithEmbeddings?{action:"skip"}:{action:"process"}}async function Oe(e,t){let{repo:r,baseId:n,readText:o,hashContent:s,chunkMarkdown:a,embedDocument:u}=t,i=await o(e),d=s(i),c=await r.getFileProcessingState(e,n),l=Be(d,c);if(m.debug(`[${e}] decision: ${l.action}`),l.action==="skip")return m.info(`${e} -> skipped (unchanged)`),{status:"skipped",chunkCount:0};let{attributes:b,body:p}=Me(i),h=K.basename(e,".md"),y=K.basename(K.dirname(e)),{headerPrefix:$,titleString:S}=Ne(h,y,b),P=a(p||i,ne);m.debug(`[${e}] produced ${P.length} chunks`);let{id:A}=await r.upsertFile(e,d,null,new Date,n),M=await Promise.all(P.map(async(D,_)=>{let C=`${$}
14
+
15
+ ${D.text}`,v=D.text.trim(),I=v?await u(v,S):await u(C,S);return m.trace(`[${e}] chunk ${_} embedded (${I.length}d)`),{content:C,embedding:I,chunkIndex:_,breadcrumbs:D.breadcrumb}}));return await r.replaceFileChunks(A,M),m.debug(`[${e}] chunks written to DB`),m.info(`${e} \u2192 ${P.length} chunks`),{status:"processed",chunkCount:P.length}}var He=jt({meta:{name:"load",description:"Load notes files"},args:{glob:{type:"string",description:"Files glob (e.g. 'notes/**/*.md')",required:!0},base:{type:"string",description:"Knowledge base name to use",default:"default"}},async run({args:e}){let t=performance.now();m.debug("Starting load...");let r=0,n=0,o=0,s=0,a=new O,i=await new T().getOrCreateBase(e.base);m.debug(`Using base: ${i.name} (id=${i.id})`);let d=null,c=async(p,h)=>(d||(d=await L(),m.debug("Embedder initialised")),d.embedDocument(p,h)),l=[],b=[];for await(let p of $e(e.glob)){m.debug(`Processing file: ${p}`);let h=await Oe(p,{repo:a,baseId:i.id,readText:y=>Wt(y,"utf8"),hashContent:y=>Qt("sha256").update(y).digest("hex"),chunkMarkdown:Ie,embedDocument:c});l.push(p),b.push(h)}r=l.length;for(let p of b)p.status==="skipped"?n++:(o++,s+=p.chunkCount);console.log(`Done. ${r} files seen, ${o} processed, ${n} skipped, ${s} chunks total.`),console.log(`Time taken: ${((performance.now()-t)/1e3).toFixed(2)}s`)}});import{defineCommand as Jt}from"citty";import{and as V,cosineDistance as Vt,desc as X,eq as E,gt as Xt,sql as w}from"drizzle-orm";import Ut from"node:path";function qe(e,t,r,n){m.trace(`Fusing scores \u2014 vector: ${e.length}, fts: ${t.length}, trigram: ${r.length}`);let o=Math.max(...e.map(i=>i.similarity),1e-9),s=Math.max(...t.map(i=>i.rank),1e-9),a=Math.max(...r.map(i=>i.score),1e-9),u=new Map;for(let i of e)u.set(i.id,{id:i.id,filePath:i.filePath,chunkIndex:i.chunkIndex,breadcrumbs:i.breadcrumbs,content:i.content,score:i.similarity/o*n.vector});for(let i of t){let d=i.rank/s*n.fts,c=u.get(i.id);c?c.score+=d:u.set(i.id,{id:i.id,filePath:i.filePath,chunkIndex:i.chunkIndex,breadcrumbs:i.breadcrumbs,content:i.content,score:d})}for(let i of r){let d=i.score/a*n.trigram,c=u.get(i.id);c?c.score+=d:u.set(i.id,{id:i.id,filePath:i.filePath,chunkIndex:i.chunkIndex,breadcrumbs:i.breadcrumbs,content:i.content,score:d})}return u}function Kt(e){let t=/\[\[([^\]|#]+)(?:[|#][^\]]*)?\]\]/g,r=new Set,n=t.exec(e);for(;n!==null;)n[1]!==void 0&&r.add(n[1].trim()),n=t.exec(e);return[...r]}function ze(e,t,r=me,n=le,o=de){let s=new Map;for(let c of t){let l=Ut.basename(c,".md");s.has(l)||s.set(l,new Set),s.get(l)?.add(c)}let a=new Set([...e.values()].map(c=>c.filePath)),u=[...e.values()].sort((c,l)=>l.score-c.score).slice(0,r),i=new Map;for(let c of u){let l=Kt(c.content);for(let b of l){let p=s.get(b);if(p)for(let h of p){if(h===c.filePath||!a.has(h))continue;let y=i.get(h)??0,$=Math.min(y+n*c.score,o);i.set(h,$),m.trace(`Boosting ${h} by ${($-y).toFixed(4)}`)}}}let d=new Map;for(let[c,l]of e){let b=i.get(l.filePath)??0;d.set(c,b>0?{...l,score:l.score+b}:l)}return d}function Ge(e,t){let r=new Map;for(let n of e.values()){let o=r.get(n.filePath);!o||n.score>o.result.score?r.set(n.filePath,{result:n,extraChunks:o?o.extraChunks+1:0}):o.extraChunks++}return[...r.values()].map(({result:n})=>n).sort((n,o)=>o.score-n.score).slice(0,t)}async function Qe(e){let{vectorText:t,queryText:r,trigramText:n,embedQuery:o,db:s=x(),baseId:a,weights:u={vector:ie,fts:ae,trigram:ue},limits:i={vector:re,fts:oe,trigram:se},trigramThreshold:d=ce,trigramMode:c="strict",topK:l=10}=e,b=await o(t),p=n??r;m.debug(`Executing query \u2014 vector: "${t}", fulltext: "${r}"`);let h=w`1 - (${Vt(f.embedding,b)})`,y=c==="strict"?"strict_word_similarity":"word_similarity",$=c==="strict"?w.raw("<<%"):w.raw("<%"),S=w`${w.raw(y)}(${p}, ${f.content})`,[P,A,M]=await Promise.all([s.select({id:f.id,filePath:g.filePath,chunkIndex:f.chunkIndex,breadcrumbs:f.breadcrumbs,content:f.content,similarity:h}).from(f).innerJoin(g,E(f.fileId,g.id)).where(V(Xt(h,0),E(g.baseId,a))).orderBy(X(h)).limit(i.vector),s.select({id:f.id,filePath:g.filePath,chunkIndex:f.chunkIndex,breadcrumbs:f.breadcrumbs,content:f.content,rank:w`ts_rank(${f.fts}, websearch_to_tsquery('simple', unaccent(${r})))`}).from(f).innerJoin(g,E(f.fileId,g.id)).where(V(w`${f.fts} @@ websearch_to_tsquery('simple', unaccent(${r}))`,E(g.baseId,a))).orderBy(X(w`ts_rank(${f.fts}, websearch_to_tsquery('simple', unaccent(${r})))`)).limit(i.fts),s.transaction(async I=>(await I.execute(w`SELECT set_limit(${d})`),I.select({id:f.id,filePath:g.filePath,chunkIndex:f.chunkIndex,breadcrumbs:f.breadcrumbs,content:f.content,score:S}).from(f).innerJoin(g,E(f.fileId,g.id)).where(V(w`${p} ${$} ${f.content}`,E(g.baseId,a))).orderBy(X(S)).limit(i.trigram)))]);m.debug(`Vector: ${P.length} hits, FTS: ${A.length} hits, Trigram: ${M.length} hits`);let D=await s.select({filePath:g.filePath}).from(g).where(E(g.baseId,a)),_=qe(P,A,M,u);m.debug(`After fusion: ${_.size} unique chunks`);let C=ze(_,D.map(I=>I.filePath));m.debug(`After wikilink rerank: ${C.size} chunks`);let v=Ge(C,l);return m.debug(`Returning ${v.length} results`),v}var We=Jt({meta:{name:"query",description:"Search notes by semantic query"},args:{vector:{type:"string",alias:"v",description:"Semantic query for vector search",required:!0},fulltext:{type:"string",alias:"f",description:'Keyword query for full-text search (supports PostgreSQL websearch syntax: OR, -word, "phrases")',required:!0},trigram:{type:"string",alias:"g",description:"Plain-text keyword for trigram search (defaults to --fulltext)",required:!1},trigramMode:{type:"string",alias:"t",description:"Trigram operator: 'strict' (strict_word_similarity, <<%) or 'word' (word_similarity, <%)",default:"strict"},base:{type:"string",description:"Knowledge base name to use",default:"default"}},async run({args:e}){let t=e.trigramMode;if(t!=="strict"&&t!=="word")throw new Error(`Invalid --trigram-mode "${t}". Must be "strict" or "word".`);let n=await new T().getBaseByName(e.base);n||(m.error(`Base '${e.base}' does not exist.`),process.exit(1));let o=await L(),s=await Qe({vectorText:e.vector,queryText:e.fulltext,trigramText:e.trigram,embedQuery:o.embedQuery.bind(o),trigramMode:t,baseId:n.id});if(s.length===0){m.info("No matching chunks found.");return}for(let a of s){let u="";u+=`<file path="${a.filePath}">
16
+ `,u+=`<meta>
17
+ `,u+=`Chunk index: ${a.chunkIndex}
18
+ `,u+=`Score: ${Number(a.score).toFixed(3)}
19
+ `,a.breadcrumbs.length>0&&(u+=`Breadcrumbs: ${a.breadcrumbs.join(" > ")}
20
+ `),u+=`</meta>
21
+ `,u+=`<content>
22
+ `,u+=`${a.content}
23
+ `,u+=`</content>
24
+ `,u+=`</file>
25
+ `,console.log(u)}}});import{join as Yt}from"node:path";import{fileURLToPath as Zt}from"node:url";import{migrate as en}from"drizzle-orm/pglite/migrator";var tn="./drizzle",nn=Yt(Zt(new URL(".",import.meta.url)),tn);async function je(e){try{m.debug("Running DB migrations..."),await en(e,{migrationsFolder:nn}),m.debug("Migrations complete")}catch(t){throw new Error(`Migration failed: ${t instanceof Error?t.message:String(t)}`,{cause:t})}}var sn=rn({meta:{name:"notes-query-tool",version:q.version,description:q.description,alias:"nqt"},args:{verbose:{type:"boolean",description:"Enable verbose logging (sets log level to max)",default:!1},base:{type:"string",description:"Knowledge base name to use",default:"default"}},subCommands:{load:He,query:We,drop:be},async setup({args:e}){e.verbose&&he(999);let t=x();await t.$client.waitReady,await je(t)},async cleanup(){await x().$client.close()}});await on(sn).catch(e=>{H(`Error: ${e}`,1)});process.on("unhandledRejection",e=>{H(`Unhandled Rejection: ${e}`,1)});process.on("uncaughtException",e=>{H(`Uncaught Exception: ${e}`,1)});process.on("SIGINT",()=>{H("Received SIGINT, shutting down...",0)});function H(e,t){m.error(e),x().$client.close().finally(()=>process.exit(t))}
26
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/main.ts", "../package.json", "../src/commands/drop.ts", "../src/database/base-repository.ts", "../src/database/client.ts", "../src/config.ts", "../src/database/schema/bases.ts", "../src/commands/load.ts", "../src/embedder.ts", "../src/logger.ts", "../src/files/chunker.ts", "../src/files/load-files.ts", "../src/commands/load/load-repository.ts", "../src/database/schema/chunks.ts", "../src/database/schema/files.ts", "../src/commands/load/process-file.ts", "../src/files/frontmatter.ts", "../src/commands/load/build-document-header.ts", "../src/commands/load/decide-file-processing.ts", "../src/commands/query.ts", "../src/query/execute.ts", "../src/query/scoring.ts", "../src/database/migrate.ts"],
4
+ "mappings": "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",
5
+ "names": ["defineCommand", "runMain", "package_default", "createInterface", "defineCommand", "eq", "PGlite", "pg_trgm", "unaccent", "vector", "drizzle", "homedir", "join", "MODEL_ID", "MODEL_DTYPE", "EMBEDDING_DIMS", "getDataDir", "xdg", "base", "DB_DATA_DIR", "CHUNK_LIMIT_CHARS", "VECTOR_LIMIT", "FTS_LIMIT", "TRIGRAM_LIMIT", "VECTOR_WEIGHT", "FTS_WEIGHT", "TRIGRAM_WEIGHT", "TRIGRAM_THRESHOLD", "LINK_BOOST", "LINK_BOOST_CAP", "LINK_SOURCE_TOP_N", "DB_EXTENSIONS", "unaccent", "vector", "pg_trgm", "createDbClient", "dataDir", "DB_DATA_DIR", "pglite", "PGlite", "drizzle", "_db", "getDb", "sql", "integer", "pgTable", "text", "timestamp", "basesTable", "DbBaseRepository", "db", "getDb", "name", "base", "basesTable", "eq", "existing", "created", "dropCommand", "defineCommand", "args", "baseRepo", "DbBaseRepository", "confirm", "prompt", "resolve", "rl", "createInterface", "answer", "createHash", "readFile", "defineCommand", "pipeline", "createConsola", "resolveLevel", "raw", "n", "_consola", "setLogLevel", "level", "logger", "message", "args", "createEmbedder", "device", "pipeline", "MODEL_ID", "MODEL_DTYPE", "extractVector", "data", "vector", "v", "QUERY_PREFIX", "DOC_PREFIX_PREFIX", "DOC_PREFIX_INFIX", "DEFAULT_TITLE", "initEmbedder", "embed", "logger", "getEmbedding", "text", "result", "body", "title", "t", "marked", "MAX_HEADER_LEVEL", "chunkMarkdown", "md", "limit", "pos", "lexWithOffsets", "root", "buildRootSection", "chunks", "renderSection", "greedyMerge", "tokens", "out", "cursor", "t", "raw", "start", "end", "groupByShallowestHeading", "body", "shallowest", "pt", "isHeading", "lvl", "sections", "current", "finalizeSection", "s", "last", "section", "ancestors", "headingLine", "headingLineOf", "childAncestors", "bodyStart", "bodyEnd", "bodyText", "concatRaw", "ownHeadingPrefix", "fullBody", "trimTrailingNewlines", "assembled", "assemble", "subs", "sub", "splitBody", "trimmedRaw", "splitOversizeBlock", "sentences", "splitSentences", "assembleSlices", "remaining", "splitWordsThenChars", "breadcrumbBudgetSize", "assembleSlicesRaw", "slices", "regex", "lastEnd", "m", "budget", "avail", "wordRegex", "words", "first", "hardSlice", "cur", "curOffset", "w", "text", "size", "baseOffset", "i", "furtherSplit", "buf", "bufOffset", "emit", "finer", "f", "startOffset", "trimmed", "a", "breadcrumb", "prefix", "next", "sameBreadcrumb", "mergedBody", "b", "glob", "basename", "loadFilesByGlob", "globPattern", "entry", "f", "b", "and", "count", "eq", "sql", "sql", "customType", "index", "integer", "pgTable", "text", "timestamp", "vector", "sql", "integer", "jsonb", "pgTable", "text", "timestamp", "unique", "filesTable", "pgTable", "integer", "basesTable", "text", "jsonb", "timestamp", "sql", "table", "unique", "tsvector", "customType", "chunksTable", "pgTable", "integer", "filesTable", "text", "vector", "EMBEDDING_DIMS", "timestamp", "sql", "table", "index", "DbLoadRepository", "db", "getDb", "filePath", "baseId", "file", "filesTable", "and", "eq", "chunkResult", "count", "sql", "chunksTable", "total", "withEmbedding", "hasStoredChunksWithEmbeddings", "contentHash", "title", "_updatedAt", "attributes", "fileId", "chunks", "tx", "newChunks", "chunk", "path", "parseYaml", "FRONTMATTER_RE", "extractFrontmatter", "content", "match", "parsed", "normalizeTitle", "value", "title", "normalizeStringList", "item", "normalized", "normalizeDocumentMetadata", "attributes", "buildDocumentHeader", "basename", "parentDir", "headerLines", "metadata", "headerPrefix", "titleParts", "titleString", "decideFileProcessing", "nextContentHash", "existing", "processLoadedFile", "filePath", "deps", "repo", "baseId", "readText", "hashContent", "chunkMarkdown", "embedDocument", "content", "contentHash", "existingState", "decision", "decideFileProcessing", "logger", "attributes", "body", "extractFrontmatter", "basename", "path", "parentDir", "headerPrefix", "titleString", "buildDocumentHeader", "chunks", "CHUNK_LIMIT_CHARS", "fileId", "chunkDocs", "chunk", "i", "augmented", "bodyText", "embedding", "loadCommand", "defineCommand", "args", "start", "logger", "filesSeen", "filesSkipped", "filesProcessed", "chunksProduced", "repo", "DbLoadRepository", "base", "DbBaseRepository", "embedder", "getEmbedDocument", "body", "title", "initEmbedder", "filePaths", "results", "filePath", "loadFilesByGlob", "result", "processLoadedFile", "p", "readFile", "content", "createHash", "chunkMarkdown", "defineCommand", "and", "cosineDistance", "desc", "eq", "gt", "sql", "path", "fuseScores", "vectorResults", "ftsResults", "trigramResults", "weights", "logger", "maxSimilarity", "r", "maxRank", "maxTrigram", "merged", "ftsScore", "existing", "tgScore", "extractWikilinks", "content", "re", "seen", "m", "rerankByWikilinks", "allFilePaths", "topN", "LINK_SOURCE_TOP_N", "linkBoost", "LINK_BOOST", "linkBoostCap", "LINK_BOOST_CAP", "basenameToFilePaths", "fp", "base", "path", "filePathsInResults", "topSources", "a", "b", "boosts", "src", "links", "link", "targets", "prev", "boost", "result", "id", "chunk", "poolByFile", "topK", "byFile", "executeQuery", "opts", "vectorText", "queryText", "trigramText", "embedQuery", "db", "getDb", "baseId", "weights", "VECTOR_WEIGHT", "FTS_WEIGHT", "TRIGRAM_WEIGHT", "limits", "VECTOR_LIMIT", "FTS_LIMIT", "TRIGRAM_LIMIT", "trigramThreshold", "TRIGRAM_THRESHOLD", "trigramMode", "topK", "queryVector", "effectiveTrigramText", "logger", "similarity", "sql", "cosineDistance", "chunksTable", "trigramFn", "trigramOp", "trigramScore", "vectorResults", "ftsResults", "trigramResults", "filesTable", "eq", "and", "gt", "desc", "tx", "allFiles", "fused", "fuseScores", "reranked", "rerankByWikilinks", "f", "results", "poolByFile", "queryCommand", "defineCommand", "args", "mode", "base", "DbBaseRepository", "logger", "embedder", "initEmbedder", "results", "executeQuery", "row", "output", "join", "fileURLToPath", "migrate", "migrationsRelativePath", "migrationsFolder", "join", "fileURLToPath", "runMigrations", "db", "logger", "migrate", "err", "main", "defineCommand", "package_default", "loadCommand", "queryCommand", "dropCommand", "args", "setLogLevel", "db", "getDb", "runMigrations", "runMain", "error", "closeDbAndExit", "reason", "message", "code", "logger"]
6
+ }
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@tichopad/notes-query-tool",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "CLI tool for indexing and querying Markdown notes",
6
+ "engines": {
7
+ "node": ">=24"
8
+ },
9
+ "packageManager": "pnpm@10.32.1",
10
+ "main": "dist/main.js",
11
+ "bin": {
12
+ "nqt": "dist/main.js"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "db:delete-stale-lock": "rm ./dbdata/postmaster.pid",
19
+ "db:generate": "drizzle-kit generate",
20
+ "db:query": "node scripts/query.ts",
21
+ "db:push": "drizzle-kit push",
22
+ "db:studio": "drizzle-kit studio",
23
+ "benchdata:load": "pnpm run dev load --glob 'benchdata/**/*.md'",
24
+ "benchdata:reindex": "rm -rf dbdata && pnpm run benchdata:load",
25
+ "testdata:load": "pnpm run dev load --glob 'testdata/**/*.md'",
26
+ "testdata:reindex": "rm -rf dbdata && pnpm run testdata:load",
27
+ "dev": "node src/main.ts",
28
+ "build": "node scripts/build.ts",
29
+ "test": "node --test --test-reporter=spec 'src/**/*.test.ts'",
30
+ "bench": "node --test --test-reporter=spec 'bench/**/*.test.ts'",
31
+ "check": "biome check . && tsc --noEmit && pnpm run test",
32
+ "fix": "biome check --write ."
33
+ },
34
+ "dependencies": {
35
+ "@electric-sql/pglite": "0.4.4",
36
+ "@huggingface/transformers": "4.1.0",
37
+ "citty": "0.2.2",
38
+ "consola": "3.4.2",
39
+ "drizzle-orm": "0.45.2",
40
+ "marked": "18.0.1",
41
+ "yaml": "2.8.3"
42
+ },
43
+ "devDependencies": {
44
+ "@biomejs/biome": "2.4.12",
45
+ "@types/node": "24.12.2",
46
+ "drizzle-kit": "0.31.10",
47
+ "esbuild": "0.28.0",
48
+ "typescript": "6.0.2"
49
+ },
50
+ "pnpm": {
51
+ "onlyBuiltDependencies": [
52
+ "esbuild",
53
+ "onnxruntime-node",
54
+ "protobufjs",
55
+ "sharp"
56
+ ],
57
+ "patchedDependencies": {
58
+ "drizzle-kit@0.31.10": "patches/drizzle-kit@0.31.10.patch"
59
+ }
60
+ }
61
+ }