@pella-labs/pinakes 0.1.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +20 -20
  2. package/dist/cli/audit.d.ts +5 -3
  3. package/dist/cli/audit.d.ts.map +1 -1
  4. package/dist/cli/audit.js +3 -24
  5. package/dist/cli/audit.js.map +1 -1
  6. package/dist/cli/contradiction-cli.d.ts +12 -0
  7. package/dist/cli/contradiction-cli.d.ts.map +1 -0
  8. package/dist/cli/contradiction-cli.js +35 -0
  9. package/dist/cli/contradiction-cli.js.map +1 -0
  10. package/dist/cli/contradiction.d.ts +59 -0
  11. package/dist/cli/contradiction.d.ts.map +1 -0
  12. package/dist/cli/contradiction.js +172 -0
  13. package/dist/cli/contradiction.js.map +1 -0
  14. package/dist/cli/export.d.ts +1 -1
  15. package/dist/cli/export.d.ts.map +1 -1
  16. package/dist/cli/export.js +7 -28
  17. package/dist/cli/export.js.map +1 -1
  18. package/dist/cli/import.d.ts +2 -2
  19. package/dist/cli/import.d.ts.map +1 -1
  20. package/dist/cli/import.js +5 -26
  21. package/dist/cli/import.js.map +1 -1
  22. package/dist/cli/index.js +39 -11
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/cli/purge.d.ts +2 -2
  25. package/dist/cli/purge.d.ts.map +1 -1
  26. package/dist/cli/purge.js +2 -23
  27. package/dist/cli/purge.js.map +1 -1
  28. package/dist/cli/rebuild.d.ts +8 -6
  29. package/dist/cli/rebuild.d.ts.map +1 -1
  30. package/dist/cli/rebuild.js +9 -31
  31. package/dist/cli/rebuild.js.map +1 -1
  32. package/dist/cli/serve.d.ts +9 -7
  33. package/dist/cli/serve.d.ts.map +1 -1
  34. package/dist/cli/serve.js +71 -41
  35. package/dist/cli/serve.js.map +1 -1
  36. package/dist/cli/status.d.ts +7 -5
  37. package/dist/cli/status.d.ts.map +1 -1
  38. package/dist/cli/status.js +10 -29
  39. package/dist/cli/status.js.map +1 -1
  40. package/dist/db/client.d.ts +4 -4
  41. package/dist/db/client.js +3 -3
  42. package/dist/db/client.js.map +1 -1
  43. package/dist/db/migrations/migrations/0002_rename_kg_to_pinakes.sql +49 -0
  44. package/dist/db/migrations/migrations/meta/0002_snapshot.json +504 -0
  45. package/dist/db/migrations/migrations/meta/_journal.json +7 -0
  46. package/dist/db/repository.js +5 -5
  47. package/dist/db/repository.js.map +1 -1
  48. package/dist/db/schema.d.ts +84 -84
  49. package/dist/db/schema.d.ts.map +1 -1
  50. package/dist/db/schema.js +49 -49
  51. package/dist/db/schema.js.map +1 -1
  52. package/dist/db/types.d.ts +2 -2
  53. package/dist/db/types.js +1 -1
  54. package/dist/gaps/detector.d.ts +5 -5
  55. package/dist/gaps/detector.js +15 -15
  56. package/dist/gaps/detector.js.map +1 -1
  57. package/dist/ingest/chokidar.js +1 -1
  58. package/dist/ingest/ingester.d.ts +9 -4
  59. package/dist/ingest/ingester.d.ts.map +1 -1
  60. package/dist/ingest/ingester.js +82 -17
  61. package/dist/ingest/ingester.js.map +1 -1
  62. package/dist/ingest/manifest.d.ts +5 -3
  63. package/dist/ingest/manifest.d.ts.map +1 -1
  64. package/dist/ingest/manifest.js +23 -14
  65. package/dist/ingest/manifest.js.map +1 -1
  66. package/dist/ingest/parse/chunk.js +1 -1
  67. package/dist/ingest/parse/markdown.d.ts +2 -2
  68. package/dist/ingest/queue.d.ts +1 -1
  69. package/dist/ingest/queue.js +1 -1
  70. package/dist/ingest/source.d.ts +2 -2
  71. package/dist/ingest/source.d.ts.map +1 -1
  72. package/dist/ingest/source.js +1 -1
  73. package/dist/llm/provider.d.ts +70 -0
  74. package/dist/llm/provider.d.ts.map +1 -0
  75. package/dist/llm/provider.js +235 -0
  76. package/dist/llm/provider.js.map +1 -0
  77. package/dist/mcp/envelope.d.ts +1 -1
  78. package/dist/mcp/tools/execute.d.ts +7 -7
  79. package/dist/mcp/tools/execute.d.ts.map +1 -1
  80. package/dist/mcp/tools/execute.js +41 -59
  81. package/dist/mcp/tools/execute.js.map +1 -1
  82. package/dist/mcp/tools/search.d.ts +13 -8
  83. package/dist/mcp/tools/search.d.ts.map +1 -1
  84. package/dist/mcp/tools/search.js +53 -28
  85. package/dist/mcp/tools/search.js.map +1 -1
  86. package/dist/observability/audit.d.ts +2 -2
  87. package/dist/observability/audit.js +3 -3
  88. package/dist/observability/audit.js.map +1 -1
  89. package/dist/observability/logger.js +4 -4
  90. package/dist/observability/logger.js.map +1 -1
  91. package/dist/observability/metrics.js +1 -1
  92. package/dist/observability/metrics.js.map +1 -1
  93. package/dist/paths.d.ts +61 -0
  94. package/dist/paths.d.ts.map +1 -0
  95. package/dist/paths.js +106 -0
  96. package/dist/paths.js.map +1 -0
  97. package/dist/retrieval/dedup.d.ts +25 -0
  98. package/dist/retrieval/dedup.d.ts.map +1 -0
  99. package/dist/retrieval/dedup.js +97 -0
  100. package/dist/retrieval/dedup.js.map +1 -0
  101. package/dist/retrieval/embedder.d.ts +9 -9
  102. package/dist/retrieval/embedder.d.ts.map +1 -1
  103. package/dist/retrieval/embedder.js +17 -17
  104. package/dist/retrieval/embedder.js.map +1 -1
  105. package/dist/retrieval/expand.d.ts +18 -0
  106. package/dist/retrieval/expand.d.ts.map +1 -0
  107. package/dist/retrieval/expand.js +89 -0
  108. package/dist/retrieval/expand.js.map +1 -0
  109. package/dist/retrieval/fts.d.ts +3 -3
  110. package/dist/retrieval/fts.js +8 -8
  111. package/dist/retrieval/graph.d.ts +47 -0
  112. package/dist/retrieval/graph.d.ts.map +1 -0
  113. package/dist/retrieval/graph.js +144 -0
  114. package/dist/retrieval/graph.js.map +1 -0
  115. package/dist/retrieval/hybrid.d.ts +10 -0
  116. package/dist/retrieval/hybrid.d.ts.map +1 -1
  117. package/dist/retrieval/hybrid.js +57 -2
  118. package/dist/retrieval/hybrid.js.map +1 -1
  119. package/dist/retrieval/vec.d.ts +2 -2
  120. package/dist/retrieval/vec.js +3 -3
  121. package/dist/sandbox/bindings/install.d.ts +5 -5
  122. package/dist/sandbox/bindings/install.d.ts.map +1 -1
  123. package/dist/sandbox/bindings/install.js +3 -3
  124. package/dist/sandbox/bindings/install.js.map +1 -1
  125. package/dist/sandbox/bindings/kg.d.ts.map +1 -1
  126. package/dist/sandbox/bindings/kg.js +10 -0
  127. package/dist/sandbox/bindings/kg.js.map +1 -1
  128. package/dist/sandbox/bindings/pinakes.d.ts +29 -0
  129. package/dist/sandbox/bindings/pinakes.d.ts.map +1 -0
  130. package/dist/sandbox/bindings/pinakes.js +333 -0
  131. package/dist/sandbox/bindings/pinakes.js.map +1 -0
  132. package/dist/sandbox/bindings/write.d.ts +1 -1
  133. package/dist/sandbox/bindings/write.d.ts.map +1 -1
  134. package/dist/sandbox/bindings/write.js +9 -9
  135. package/dist/sandbox/bindings/write.js.map +1 -1
  136. package/dist/sandbox/executor.d.ts +3 -3
  137. package/dist/sandbox/executor.js +6 -6
  138. package/dist/sandbox/executor.js.map +1 -1
  139. package/dist/sandbox/helpers.d.ts +1 -1
  140. package/dist/sandbox/helpers.d.ts.map +1 -1
  141. package/dist/sandbox/helpers.js +2 -2
  142. package/dist/sandbox/vendored-codemode.d.ts +1 -1
  143. package/dist/sandbox/vendored-codemode.js +1 -1
  144. package/dist/server.js +15 -6
  145. package/dist/server.js.map +1 -1
  146. package/package.json +22 -27
package/dist/db/schema.js CHANGED
@@ -1,23 +1,23 @@
1
1
  import { sql } from 'drizzle-orm';
2
2
  import { sqliteTable, text, integer, index, primaryKey } from 'drizzle-orm/sqlite-core';
3
3
  /**
4
- * KG-MCP Drizzle schema (presearch.md §2.3, CLAUDE.md §Database Rules).
4
+ * Pinakes Drizzle schema (presearch.md §2.3, CLAUDE.md §Database Rules).
5
5
  *
6
- * 8 logical tables + `kg_meta` for schema versioning. Two of the eight are
7
- * virtual tables (`kg_chunks_fts`, `kg_chunks_vec`) that drizzle-kit can't
6
+ * 8 logical tables + `pinakes_meta` for schema versioning. Two of the eight are
7
+ * virtual tables (`pinakes_chunks_fts`, `pinakes_chunks_vec`) that drizzle-kit can't
8
8
  * model — they're created via raw SQL appended to the initial migration in
9
9
  * src/db/migrations. The drizzle code below covers the 7 regular tables
10
- * plus kg_meta.
10
+ * plus pinakes_meta.
11
11
  *
12
12
  * Invariants this schema MUST preserve:
13
13
  *
14
- * - `kg_nodes.id` is `sha1(scope + ':' + source_uri + ':' + section_path)`,
14
+ * - `pinakes_nodes.id` is `sha1(scope + ':' + source_uri + ':' + section_path)`,
15
15
  * set by the ingester (NOT auto-generated). Re-ingesting the same
16
16
  * markdown produces identical ids — Phase 2's idempotent upsert relies
17
17
  * on this. The DB never sees the hashing logic; it just stores the value
18
18
  * and enforces uniqueness via the PK.
19
19
  *
20
- * - `kg_chunks.id` is `sha1(node_id + ':' + chunk_index)`, same idea.
20
+ * - `pinakes_chunks.id` is `sha1(node_id + ':' + chunk_index)`, same idea.
21
21
  *
22
22
  * - `chunk_sha = sha1(chunk_text)` is the LOAD-BEARING field for the
23
23
  * per-chunk skip-unchanged optimization (CLAUDE.md §Database Rules #3,
@@ -27,10 +27,10 @@ import { sqliteTable, text, integer, index, primaryKey } from 'drizzle-orm/sqlit
27
27
  * ~50ms = 3s of blocking work that competes with the active coding LLM
28
28
  * for Ollama. Do not remove this column.
29
29
  *
30
- * - `last_accessed_at` on `kg_nodes` exists for the Phase 5 personal-KG
30
+ * - `last_accessed_at` on `pinakes_nodes` exists for the Phase 5 personal-KG
31
31
  * LRU eviction (Loop 6.5 A2). Phase 2 just stamps it on insert/update.
32
32
  *
33
- * - `source_sha` on `kg_nodes` is the file-level hash; staleness detection
33
+ * - `source_sha` on `pinakes_nodes` is the file-level hash; staleness detection
34
34
  * on the query path compares this against the current on-disk hash.
35
35
  *
36
36
  * - All FK relationships use `ON DELETE CASCADE` so deleting a node cleans
@@ -39,7 +39,7 @@ import { sqliteTable, text, integer, index, primaryKey } from 'drizzle-orm/sqlit
39
39
  * every connection in client.ts.
40
40
  */
41
41
  // ----------------------------------------------------------------------------
42
- // kg_meta — schema versioning + bookkeeping
42
+ // pinakes_meta — schema versioning + bookkeeping
43
43
  // ----------------------------------------------------------------------------
44
44
  /**
45
45
  * Tiny key/value table holding `schema_version`, `last_full_rebuild`, and
@@ -50,12 +50,12 @@ import { sqliteTable, text, integer, index, primaryKey } from 'drizzle-orm/sqlit
50
50
  * (in the worst case for sqlite-vec breaking changes) drop + rebuild the
51
51
  * vec virtual table from markdown.
52
52
  */
53
- export const kgMeta = sqliteTable('kg_meta', {
53
+ export const pinakesMeta = sqliteTable('pinakes_meta', {
54
54
  key: text('key').primaryKey(),
55
55
  value: text('value'),
56
56
  });
57
57
  // ----------------------------------------------------------------------------
58
- // kg_nodes — markdown sections + concept entities (Phase 2 only writes
58
+ // pinakes_nodes — markdown sections + concept entities (Phase 2 only writes
59
59
  // kind='section' rows; Phase 4 adds entities, Phase 6 adds gaps)
60
60
  // ----------------------------------------------------------------------------
61
61
  /**
@@ -71,11 +71,11 @@ export const kgMeta = sqliteTable('kg_meta', {
71
71
  * Empty string for top-of-file content above any heading.
72
72
  *
73
73
  * `content` stores the full section markdown (heading + body). Chunks are
74
- * derived from this and stored separately in kg_chunks. We keep both because
75
- * `kg_execute` callers may want the whole section (`kg.get(node_id)`) instead
74
+ * derived from this and stored separately in pinakes_chunks. We keep both because
75
+ * `pinakes_execute` callers may want the whole section (`pinakes.get(node_id)`) instead
76
76
  * of paragraph-sized chunks.
77
77
  */
78
- export const kgNodes = sqliteTable('kg_nodes', {
78
+ export const pinakesNodes = sqliteTable('pinakes_nodes', {
79
79
  /** sha1(scope + ':' + source_uri + ':' + section_path), set by ingester */
80
80
  id: text('id').primaryKey(),
81
81
  /** 'project' | 'personal' — enforced at app layer, not as a CHECK */
@@ -103,11 +103,11 @@ export const kgNodes = sqliteTable('kg_nodes', {
103
103
  /** Unix epoch ms of last read access — Phase 5 LRU eviction (Loop 6.5 A2) */
104
104
  lastAccessedAt: integer('last_accessed_at').notNull(),
105
105
  }, (t) => [
106
- index('idx_kg_nodes_scope_uri').on(t.scope, t.sourceUri),
107
- index('idx_kg_nodes_last_accessed').on(t.lastAccessedAt),
106
+ index('idx_pinakes_nodes_scope_uri').on(t.scope, t.sourceUri),
107
+ index('idx_pinakes_nodes_last_accessed').on(t.lastAccessedAt),
108
108
  ]);
109
109
  // ----------------------------------------------------------------------------
110
- // kg_edges — wikilinks, citations, supersedes, etc. (Phase 4+ writes; Phase 2
110
+ // pinakes_edges — wikilinks, citations, supersedes, etc. (Phase 4+ writes; Phase 2
111
111
  // just creates the table for migration completeness)
112
112
  // ----------------------------------------------------------------------------
113
113
  /**
@@ -119,22 +119,22 @@ export const kgNodes = sqliteTable('kg_nodes', {
119
119
  * markdown parsing. The table exists now so the migration is complete and
120
120
  * Phase 4 doesn't have to add it as a separate migration.
121
121
  */
122
- export const kgEdges = sqliteTable('kg_edges', {
122
+ export const pinakesEdges = sqliteTable('pinakes_edges', {
123
123
  srcId: text('src_id')
124
124
  .notNull()
125
- .references(() => kgNodes.id, { onDelete: 'cascade' }),
125
+ .references(() => pinakesNodes.id, { onDelete: 'cascade' }),
126
126
  dstId: text('dst_id')
127
127
  .notNull()
128
- .references(() => kgNodes.id, { onDelete: 'cascade' }),
128
+ .references(() => pinakesNodes.id, { onDelete: 'cascade' }),
129
129
  /** 'wikilink' | 'cites' | 'supersedes' | 'contradicts' | 'mentions' | 'derived_from' */
130
130
  edgeKind: text('edge_kind').notNull(),
131
131
  }, (t) => [
132
132
  primaryKey({ columns: [t.srcId, t.dstId, t.edgeKind] }),
133
- index('idx_kg_edges_src').on(t.srcId),
134
- index('idx_kg_edges_dst').on(t.dstId),
133
+ index('idx_pinakes_edges_src').on(t.srcId),
134
+ index('idx_pinakes_edges_dst').on(t.dstId),
135
135
  ]);
136
136
  // ----------------------------------------------------------------------------
137
- // kg_chunks — paragraph-level splits of nodes
137
+ // pinakes_chunks — paragraph-level splits of nodes
138
138
  // ----------------------------------------------------------------------------
139
139
  /**
140
140
  * One row per ~500-token chunk derived from a node's `content`. The
@@ -143,8 +143,8 @@ export const kgEdges = sqliteTable('kg_edges', {
143
143
  *
144
144
  * The implicit SQLite `rowid` (auto-assigned for tables without
145
145
  * INTEGER PRIMARY KEY) is what FTS5 and sqlite-vec join on:
146
- * - `kg_chunks_fts` is `content='kg_chunks', content_rowid='rowid'`
147
- * - `kg_chunks_vec.rowid` matches `kg_chunks.rowid`
146
+ * - `pinakes_chunks_fts` is `content='pinakes_chunks', content_rowid='rowid'`
147
+ * - `pinakes_chunks_vec.rowid` matches `pinakes_chunks.rowid`
148
148
  *
149
149
  * `chunk_sha = sha1(text)` is the per-chunk skip-unchanged key. On a
150
150
  * file rewrite, the ingester compares each new chunk's chunk_sha against
@@ -153,13 +153,13 @@ export const kgEdges = sqliteTable('kg_edges', {
153
153
  * re-embedded. This is the load-bearing optimization for Pharos's
154
154
  * whole-file-rewrite-per-turn pattern (CLAUDE.md §Database Rules #3).
155
155
  */
156
- export const kgChunks = sqliteTable('kg_chunks', {
156
+ export const pinakesChunks = sqliteTable('pinakes_chunks', {
157
157
  /** sha1(node_id + ':' + chunk_index) */
158
158
  id: text('id').primaryKey(),
159
- /** FK to kg_nodes; cascade-delete cleans up chunks when a node goes away */
159
+ /** FK to pinakes_nodes; cascade-delete cleans up chunks when a node goes away */
160
160
  nodeId: text('node_id')
161
161
  .notNull()
162
- .references(() => kgNodes.id, { onDelete: 'cascade' }),
162
+ .references(() => pinakesNodes.id, { onDelete: 'cascade' }),
163
163
  /** 0-based position within the node's chunk list */
164
164
  chunkIndex: integer('chunk_index').notNull(),
165
165
  /** The chunk's text content */
@@ -170,9 +170,9 @@ export const kgChunks = sqliteTable('kg_chunks', {
170
170
  tokenCount: integer('token_count').notNull(),
171
171
  /** Unix epoch ms of insert */
172
172
  createdAt: integer('created_at').notNull(),
173
- }, (t) => [index('idx_kg_chunks_node').on(t.nodeId)]);
173
+ }, (t) => [index('idx_pinakes_chunks_node').on(t.nodeId)]);
174
174
  // ----------------------------------------------------------------------------
175
- // kg_log — append-only event log (Karpathy log.md materialized)
175
+ // pinakes_log — append-only event log (Karpathy log.md materialized)
176
176
  // ----------------------------------------------------------------------------
177
177
  /**
178
178
  * Append-only event stream. Phase 2 writes:
@@ -181,9 +181,9 @@ export const kgChunks = sqliteTable('kg_chunks', {
181
181
  * - `'rebuild:start' | 'rebuild:done'` — full-rebuild markers
182
182
  *
183
183
  * `payload` is opaque JSON shaped per `kind`. The reader is the LLM via
184
- * `kg.log.recent(n, opts)` in Phase 4+; Phase 2 just appends.
184
+ * `pinakes.log.recent(n, opts)` in Phase 4+; Phase 2 just appends.
185
185
  */
186
- export const kgLog = sqliteTable('kg_log', {
186
+ export const pinakesLog = sqliteTable('pinakes_log', {
187
187
  id: integer('id').primaryKey({ autoIncrement: true }),
188
188
  /** Unix epoch ms */
189
189
  ts: integer('ts').notNull(),
@@ -195,9 +195,9 @@ export const kgLog = sqliteTable('kg_log', {
195
195
  sourceUri: text('source_uri'),
196
196
  /** Opaque JSON payload, shape per `kind` */
197
197
  payload: text('payload'),
198
- }, (t) => [index('idx_kg_log_ts').on(sql `${t.ts} DESC`)]);
198
+ }, (t) => [index('idx_pinakes_log_ts').on(sql `${t.ts} DESC`)]);
199
199
  // ----------------------------------------------------------------------------
200
- // kg_gaps — detected concept gaps (Phase 6+ writes; Phase 2 creates table)
200
+ // pinakes_gaps — detected concept gaps (Phase 6+ writes; Phase 2 creates table)
201
201
  // ----------------------------------------------------------------------------
202
202
  /**
203
203
  * Concept gaps detected by the Phase 6 gap-detection sub-agent. Phase 2
@@ -207,7 +207,7 @@ export const kgLog = sqliteTable('kg_log', {
207
207
  * multiple turns. `resolved_at` is set when a gap is closed (either by
208
208
  * the LLM writing about the topic or by a manual dismissal).
209
209
  */
210
- export const kgGaps = sqliteTable('kg_gaps', {
210
+ export const pinakesGaps = sqliteTable('pinakes_gaps', {
211
211
  id: integer('id').primaryKey({ autoIncrement: true }),
212
212
  scope: text('scope').notNull(),
213
213
  topic: text('topic').notNull(),
@@ -216,7 +216,7 @@ export const kgGaps = sqliteTable('kg_gaps', {
216
216
  resolvedAt: integer('resolved_at'),
217
217
  });
218
218
  // ----------------------------------------------------------------------------
219
- // kg_audit — every tool call (Phase 5 wires writes; Phase 2 creates table)
219
+ // pinakes_audit — every tool call (Phase 5 wires writes; Phase 2 creates table)
220
220
  // ----------------------------------------------------------------------------
221
221
  /**
222
222
  * Audit log of every MCP tool call. Phase 5 wires the dispatcher to write
@@ -224,12 +224,12 @@ export const kgGaps = sqliteTable('kg_gaps', {
224
224
  * (CLAUDE.md §Security #7). Phase 2 creates the table.
225
225
  *
226
226
  * NB: per CLAUDE.md §Security #7, the JSONL mirror path differs by scope —
227
- * project rows mirror to `.pharos/kg-audit.jsonl` (in the repo, safe for
228
- * `git add .`), personal/both rows mirror to `~/.pharos/profile/kg-audit.jsonl`.
229
- * Personal-scope audit rows go to a separate kg_audit table in the personal
227
+ * project rows mirror to `~/.pinakes/projects/<mangled>/audit.jsonl`,
228
+ * personal/both rows mirror to `~/.pinakes/audit.jsonl`.
229
+ * Personal-scope audit rows go to a separate pinakes_audit table in the personal
230
230
  * DB, never the project DB. This split is enforced at the app layer.
231
231
  */
232
- export const kgAudit = sqliteTable('kg_audit', {
232
+ export const pinakesAudit = sqliteTable('pinakes_audit', {
233
233
  id: integer('id').primaryKey({ autoIncrement: true }),
234
234
  ts: integer('ts').notNull(),
235
235
  toolName: text('tool_name').notNull(),
@@ -242,18 +242,18 @@ export const kgAudit = sqliteTable('kg_audit', {
242
242
  * The list of all schema-managed tables, useful for the schema test that
243
243
  * verifies the migration creates every expected table.
244
244
  */
245
- export const KG_TABLES = [
246
- 'kg_meta',
247
- 'kg_nodes',
248
- 'kg_edges',
249
- 'kg_chunks',
250
- 'kg_log',
251
- 'kg_gaps',
252
- 'kg_audit',
245
+ export const PINAKES_TABLES = [
246
+ 'pinakes_meta',
247
+ 'pinakes_nodes',
248
+ 'pinakes_edges',
249
+ 'pinakes_chunks',
250
+ 'pinakes_log',
251
+ 'pinakes_gaps',
252
+ 'pinakes_audit',
253
253
  ];
254
254
  /**
255
255
  * The two virtual tables created via raw SQL in the migration (drizzle-kit
256
256
  * doesn't emit virtual table DDL). Schema test verifies they exist.
257
257
  */
258
- export const KG_VIRTUAL_TABLES = ['kg_chunks_fts', 'kg_chunks_vec'];
258
+ export const PINAKES_VIRTUAL_TABLES = ['pinakes_chunks_fts', 'pinakes_chunks_vec'];
259
259
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shared types for KG-MCP query results.
2
+ * Shared types for Pinakes query results.
3
3
  *
4
4
  * Phase 2 introduces this file to decouple the tool handlers from any
5
5
  * single store implementation. Phase 1's `MemoryStore` defined `Chunk`
@@ -12,7 +12,7 @@ export type Scope = 'project' | 'personal' | 'both';
12
12
  * A retrieval-shaped chunk. Mirrors what Phase 1's `MemoryStore` returned
13
13
  * so the existing 13 spike tests stay green across the swap. Field shape
14
14
  * is locked — adding fields is fine; renaming/removing breaks the
15
- * sandbox host bindings (`kg.search` returns `{id, text, source_uri}`)
15
+ * sandbox host bindings (`pinakes.search` returns `{id, text, source_uri}`)
16
16
  * and the spike test asserting that shape.
17
17
  */
18
18
  export interface Chunk {
package/dist/db/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shared types for KG-MCP query results.
2
+ * Shared types for Pinakes query results.
3
3
  *
4
4
  * Phase 2 introduces this file to decouple the tool handlers from any
5
5
  * single store implementation. Phase 1's `MemoryStore` defined `Chunk`
@@ -1,18 +1,18 @@
1
1
  import type { Database as BetterSqliteDatabase } from 'better-sqlite3';
2
2
  /**
3
- * Gap detector for KG-MCP Phase 6.
3
+ * Gap detector for Pinakes Phase 6.
4
4
  *
5
5
  * After an ingest transaction commits, scans the new node's content for
6
6
  * concept mentions. A "concept" is a term referenced via bold (`**term**`),
7
7
  * wikilinks (`[[term]]`), or backtick-quoted identifiers that appears ≥3
8
- * times across the entire KG but has no dedicated `kg_nodes` row (i.e., no
8
+ * times across the entire KG but has no dedicated `pinakes_nodes` row (i.e., no
9
9
  * node whose title matches the concept).
10
10
  *
11
- * Upserts into `kg_gaps` with `topic`, `first_seen_at`, `mentions_count`.
11
+ * Upserts into `pinakes_gaps` with `topic`, `first_seen_at`, `mentions_count`.
12
12
  * When a node is later created with a matching title, `resolved_at` is set.
13
13
  *
14
14
  * This is a read-only detection surface — the LLM fills gaps by calling
15
- * `kg.project.write()` to create wiki pages, and re-indexing resolves
15
+ * `pinakes.project.write()` to create wiki pages, and re-indexing resolves
16
16
  * the gap automatically.
17
17
  */
18
18
  /**
@@ -32,7 +32,7 @@ export declare function extractConcepts(content: string): Set<string>;
32
32
  * For each concept extracted from the ingested content:
33
33
  * 1. Count how many chunks across the KG contain the concept (case-insensitive)
34
34
  * 2. Check if a node with a matching title already exists
35
- * 3. If ≥3 mentions and no dedicated node → upsert into `kg_gaps`
35
+ * 3. If ≥3 mentions and no dedicated node → upsert into `pinakes_gaps`
36
36
  *
37
37
  * Also resolves any existing gaps that now have a dedicated node.
38
38
  *
@@ -1,18 +1,18 @@
1
1
  import { logger } from '../observability/logger.js';
2
2
  /**
3
- * Gap detector for KG-MCP Phase 6.
3
+ * Gap detector for Pinakes Phase 6.
4
4
  *
5
5
  * After an ingest transaction commits, scans the new node's content for
6
6
  * concept mentions. A "concept" is a term referenced via bold (`**term**`),
7
7
  * wikilinks (`[[term]]`), or backtick-quoted identifiers that appears ≥3
8
- * times across the entire KG but has no dedicated `kg_nodes` row (i.e., no
8
+ * times across the entire KG but has no dedicated `pinakes_nodes` row (i.e., no
9
9
  * node whose title matches the concept).
10
10
  *
11
- * Upserts into `kg_gaps` with `topic`, `first_seen_at`, `mentions_count`.
11
+ * Upserts into `pinakes_gaps` with `topic`, `first_seen_at`, `mentions_count`.
12
12
  * When a node is later created with a matching title, `resolved_at` is set.
13
13
  *
14
14
  * This is a read-only detection surface — the LLM fills gaps by calling
15
- * `kg.project.write()` to create wiki pages, and re-indexing resolves
15
+ * `pinakes.project.write()` to create wiki pages, and re-indexing resolves
16
16
  * the gap automatically.
17
17
  */
18
18
  // ----------------------------------------------------------------------------
@@ -65,7 +65,7 @@ export function extractConcepts(content) {
65
65
  * For each concept extracted from the ingested content:
66
66
  * 1. Count how many chunks across the KG contain the concept (case-insensitive)
67
67
  * 2. Check if a node with a matching title already exists
68
- * 3. If ≥3 mentions and no dedicated node → upsert into `kg_gaps`
68
+ * 3. If ≥3 mentions and no dedicated node → upsert into `pinakes_gaps`
69
69
  *
70
70
  * Also resolves any existing gaps that now have a dedicated node.
71
71
  *
@@ -84,16 +84,16 @@ export function detectGaps(writer, scope, content, nodesTitles) {
84
84
  if (concepts.size === 0) {
85
85
  return { gaps_created: gapsCreated, gaps_resolved: gapsResolved };
86
86
  }
87
- const countChunkMentions = writer.prepare(`SELECT count(*) AS c FROM kg_chunks ch
88
- JOIN kg_nodes n ON ch.node_id = n.id
87
+ const countChunkMentions = writer.prepare(`SELECT count(*) AS c FROM pinakes_chunks ch
88
+ JOIN pinakes_nodes n ON ch.node_id = n.id
89
89
  WHERE n.scope = ? AND ch.text LIKE '%' || ? || '%' COLLATE NOCASE`);
90
- const findDedicatedNode = writer.prepare(`SELECT id FROM kg_nodes WHERE scope = ? AND LOWER(title) = ? LIMIT 1`);
91
- // kg_gaps doesn't have a unique constraint on (scope, topic).
90
+ const findDedicatedNode = writer.prepare(`SELECT id FROM pinakes_nodes WHERE scope = ? AND LOWER(title) = ? LIMIT 1`);
91
+ // pinakes_gaps doesn't have a unique constraint on (scope, topic).
92
92
  // Check if the gap already exists and update or insert accordingly.
93
- const findGap = writer.prepare(`SELECT id, resolved_at FROM kg_gaps WHERE scope = ? AND topic = ? LIMIT 1`);
94
- const insertGap = writer.prepare(`INSERT INTO kg_gaps (scope, topic, first_seen_at, mentions_count)
93
+ const findGap = writer.prepare(`SELECT id, resolved_at FROM pinakes_gaps WHERE scope = ? AND topic = ? LIMIT 1`);
94
+ const insertGap = writer.prepare(`INSERT INTO pinakes_gaps (scope, topic, first_seen_at, mentions_count)
95
95
  VALUES (?, ?, ?, ?)`);
96
- const updateGapCount = writer.prepare(`UPDATE kg_gaps SET mentions_count = ?, resolved_at = NULL WHERE id = ?`);
96
+ const updateGapCount = writer.prepare(`UPDATE pinakes_gaps SET mentions_count = ?, resolved_at = NULL WHERE id = ?`);
97
97
  const now = Date.now();
98
98
  for (const concept of concepts) {
99
99
  // Count mentions across the KG
@@ -130,7 +130,7 @@ export function resolveGaps(writer, scope, nodesTitles) {
130
130
  return 0;
131
131
  const now = Date.now();
132
132
  let resolved = 0;
133
- const resolveStmt = writer.prepare(`UPDATE kg_gaps SET resolved_at = ?
133
+ const resolveStmt = writer.prepare(`UPDATE pinakes_gaps SET resolved_at = ?
134
134
  WHERE scope = ? AND LOWER(topic) = ? AND resolved_at IS NULL`);
135
135
  for (const title of nodesTitles) {
136
136
  if (!title)
@@ -148,12 +148,12 @@ export function queryGaps(reader, scope, opts) {
148
148
  if (opts?.resolved) {
149
149
  return reader
150
150
  .prepare(`SELECT id, topic, first_seen_at, mentions_count, resolved_at
151
- FROM kg_gaps WHERE scope = ? ORDER BY mentions_count DESC`)
151
+ FROM pinakes_gaps WHERE scope = ? ORDER BY mentions_count DESC`)
152
152
  .all(scope);
153
153
  }
154
154
  return reader
155
155
  .prepare(`SELECT id, topic, first_seen_at, mentions_count, resolved_at
156
- FROM kg_gaps WHERE scope = ? AND resolved_at IS NULL
156
+ FROM pinakes_gaps WHERE scope = ? AND resolved_at IS NULL
157
157
  ORDER BY mentions_count DESC`)
158
158
  .all(scope);
159
159
  }
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/gaps/detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/gaps/detector.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { resolve } from 'node:path';
2
2
  import chokidar from 'chokidar';
3
3
  import { logger } from '../observability/logger.js';
4
4
  /**
5
- * `ChokidarWatcher` — file-system implementation of `IngestSource` for KG-MCP Phase 2.
5
+ * `ChokidarWatcher` — file-system implementation of `IngestSource` for Pinakes Phase 2.
6
6
  *
7
7
  * Watches a wiki directory recursively for `*.md` changes, with the two
8
8
  * critical adaptations for Pharos's wiki-updater (CLAUDE.md §Database Rules #4,
@@ -3,12 +3,12 @@ import type { Embedder } from '../retrieval/embedder.js';
3
3
  import { type Manifest, fileSha, manifestPathFor } from './manifest.js';
4
4
  import { type Chunk as ChunkText } from './parse/chunk.js';
5
5
  /**
6
- * IngesterService — the load-bearing single-flight writer for KG-MCP Phase 2.
6
+ * IngesterService — the load-bearing single-flight writer for Pinakes Phase 2.
7
7
  *
8
8
  * **What it does**: given an absolute path to a markdown file, parse it into
9
9
  * sections, chunk each section, embed only the chunks whose sha changed, and
10
10
  * upsert the result into SQLite under one transaction. Update the consistency
11
- * manifest, append a row to `kg_log`. Errors trigger a clean rollback and an
11
+ * manifest, append a row to `pinakes_log`. Errors trigger a clean rollback and an
12
12
  * error log entry, but never throw past the caller's await — they're caught,
13
13
  * logged, and re-thrown so the rebuild CLI can decide whether to abort or
14
14
  * continue.
@@ -21,7 +21,7 @@ import { type Chunk as ChunkText } from './parse/chunk.js';
21
21
  * single-flight pattern; CLAUDE.md §Architecture #3 / §Database Rules #5.
22
22
  *
23
23
  * - **Per-chunk skip-unchanged**: on a re-ingest of an existing file, we
24
- * load the existing `kg_chunks` rows for that file's nodes, build a
24
+ * load the existing `pinakes_chunks` rows for that file's nodes, build a
25
25
  * `Set<chunk_sha>` of already-embedded chunks, and only call `embedder.embed()`
26
26
  * for chunks whose sha is NOT in the set. This is THE optimization that
27
27
  * makes Pharos's whole-file-rewrite-per-turn pattern viable — without it,
@@ -108,10 +108,15 @@ export declare class IngesterService {
108
108
  private appendLog;
109
109
  }
110
110
  /**
111
- * Reset the in-memory manifest to empty. Used by `kg rebuild` when the
111
+ * Reset the in-memory manifest to empty. Used by `pinakes rebuild` when the
112
112
  * caller passes `--clean` to force a full re-ingest from scratch.
113
113
  */
114
114
  export declare function freshManifest(): Manifest;
115
+ /**
116
+ * Extract wikilink targets from markdown content.
117
+ * Returns deduplicated, normalized (trimmed, lowercase) link targets.
118
+ */
119
+ export declare function extractWikilinks(content: string): string[];
115
120
  export type { ChunkText };
116
121
  export { manifestPathFor };
117
122
  export { fileSha };
@@ -1 +1 @@
1
- {"version":3,"file":"ingester.d.ts","sourceRoot":"","sources":["../../src/ingest/ingester.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EACL,KAAK,QAAQ,EAGb,OAAO,EACP,eAAe,EAOhB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAgB,KAAK,KAAK,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAMH,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD,gFAAgF;AAChF,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAMD,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB;IAO/B;;;;;;OAMG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsBxD;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAcjC;;;OAGG;IACH,WAAW,IAAI,QAAQ;IAIvB;;;OAGG;IACH,cAAc,IAAI,IAAI;YAQR,cAAc;IAkM5B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,SAAS;CAYlB;AAsCD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AAGD,YAAY,EAAE,SAAS,EAAE,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"ingester.d.ts","sourceRoot":"","sources":["../../src/ingest/ingester.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EACL,KAAK,QAAQ,EAGb,OAAO,EACP,eAAe,EAOhB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAgB,KAAK,KAAK,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAMH,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD,gFAAgF;AAChF,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAMD,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB;IAO/B;;;;;;OAMG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsBxD;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAcjC;;;OAGG;IACH,WAAW,IAAI,QAAQ;IAIvB;;;OAGG;IACH,cAAc,IAAI,IAAI;YAQR,cAAc;IAmO5B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,SAAS;CAYlB;AAsCD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AASD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAO1D;AAiCD,YAAY,EAAE,SAAS,EAAE,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,CAAC"}