@askdkc/kiokuko 0.1.9 → 0.1.11

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 (78) hide show
  1. package/README.ja.md +8 -0
  2. package/README.ko.md +8 -0
  3. package/README.md +11 -0
  4. package/README.zh-CN.md +8 -0
  5. package/dist/akinator/service.d.ts.map +1 -1
  6. package/dist/akinator/service.js +2 -1
  7. package/dist/akinator/service.js.map +1 -1
  8. package/dist/cli.d.ts +2 -0
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +11 -3
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/doctor.d.ts +5 -0
  13. package/dist/commands/doctor.d.ts.map +1 -1
  14. package/dist/commands/doctor.js +57 -2
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/export.d.ts.map +1 -1
  17. package/dist/commands/export.js +11 -5
  18. package/dist/commands/export.js.map +1 -1
  19. package/dist/commands/import.d.ts.map +1 -1
  20. package/dist/commands/import.js +37 -10
  21. package/dist/commands/import.js.map +1 -1
  22. package/dist/commands/setup.d.ts +1 -0
  23. package/dist/commands/setup.d.ts.map +1 -1
  24. package/dist/commands/setup.js +1 -0
  25. package/dist/commands/setup.js.map +1 -1
  26. package/dist/context/broker.d.ts.map +1 -1
  27. package/dist/context/broker.js +7 -3
  28. package/dist/context/broker.js.map +1 -1
  29. package/dist/context/delivery.d.ts.map +1 -1
  30. package/dist/context/delivery.js +12 -8
  31. package/dist/context/delivery.js.map +1 -1
  32. package/dist/knowledge/sources.js +1 -1
  33. package/dist/knowledge/sources.js.map +1 -1
  34. package/dist/ledger/archive.d.ts.map +1 -1
  35. package/dist/ledger/archive.js +14 -6
  36. package/dist/ledger/archive.js.map +1 -1
  37. package/dist/ledger/maintenance.js +4 -4
  38. package/dist/ledger/maintenance.js.map +1 -1
  39. package/dist/ledger/promotion.d.ts.map +1 -1
  40. package/dist/ledger/promotion.js +6 -4
  41. package/dist/ledger/promotion.js.map +1 -1
  42. package/dist/memory/curator.d.ts.map +1 -1
  43. package/dist/memory/curator.js +6 -5
  44. package/dist/memory/curator.js.map +1 -1
  45. package/dist/memory/entries.d.ts.map +1 -1
  46. package/dist/memory/entries.js +72 -31
  47. package/dist/memory/entries.js.map +1 -1
  48. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  49. package/dist/memory/hybrid-retrieval.js +11 -5
  50. package/dist/memory/hybrid-retrieval.js.map +1 -1
  51. package/dist/memory/lifecycle.js +6 -6
  52. package/dist/memory/lifecycle.js.map +1 -1
  53. package/dist/memory/rebuild-search.d.ts.map +1 -1
  54. package/dist/memory/rebuild-search.js +26 -7
  55. package/dist/memory/rebuild-search.js.map +1 -1
  56. package/dist/memory/retrieval.d.ts.map +1 -1
  57. package/dist/memory/retrieval.js +9 -7
  58. package/dist/memory/retrieval.js.map +1 -1
  59. package/dist/memory/revisions.d.ts +44 -0
  60. package/dist/memory/revisions.d.ts.map +1 -0
  61. package/dist/memory/revisions.js +122 -0
  62. package/dist/memory/revisions.js.map +1 -0
  63. package/dist/memory/structured-memory.d.ts +2 -0
  64. package/dist/memory/structured-memory.d.ts.map +1 -1
  65. package/dist/memory/structured-memory.js +28 -0
  66. package/dist/memory/structured-memory.js.map +1 -1
  67. package/dist/setup/client-detection.d.ts +4 -0
  68. package/dist/setup/client-detection.d.ts.map +1 -0
  69. package/dist/setup/client-detection.js +66 -0
  70. package/dist/setup/client-detection.js.map +1 -0
  71. package/dist/web/server.js +7 -7
  72. package/dist/web/server.js.map +1 -1
  73. package/migrations/001_initial.sql +51 -17
  74. package/migrations/002_fts.sql +13 -57
  75. package/migrations/004_agent_gateway.sql +4 -2
  76. package/migrations/005_hybrid_search.sql +16 -61
  77. package/migrations/007_akinator_reasoning.sql +4 -3
  78. package/package.json +1 -1
@@ -6,61 +6,17 @@ CREATE VIRTUAL TABLE entries_fts USING fts5(
6
6
  tokenize='unicode61 remove_diacritics 2'
7
7
  );
8
8
 
9
- CREATE TRIGGER entries_fts_ai AFTER INSERT ON entries BEGIN
10
- INSERT INTO entries_fts(rowid, title, body, summary, tags_text)
11
- VALUES (
12
- new.rowid,
13
- new.title,
14
- new.body,
15
- COALESCE(new.summary, ''),
16
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = new.id), '')
17
- );
18
- END;
19
-
20
- CREATE TRIGGER entries_fts_ad AFTER DELETE ON entries BEGIN
21
- DELETE FROM entries_fts WHERE rowid = old.rowid;
22
- END;
23
-
24
- CREATE TRIGGER entries_fts_au AFTER UPDATE ON entries BEGIN
25
- DELETE FROM entries_fts WHERE rowid = old.rowid;
26
- INSERT INTO entries_fts(rowid, title, body, summary, tags_text)
27
- VALUES (
28
- new.rowid,
29
- new.title,
30
- new.body,
31
- COALESCE(new.summary, ''),
32
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = new.id), '')
33
- );
34
- END;
35
-
36
- CREATE TRIGGER tags_fts_ai AFTER INSERT ON tags BEGIN
37
- DELETE FROM entries_fts WHERE rowid = (SELECT rowid FROM entries WHERE id = new.entry_id);
38
- INSERT INTO entries_fts(rowid, title, body, summary, tags_text)
39
- SELECT entries.rowid, entries.title, entries.body, COALESCE(entries.summary, ''),
40
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
41
- FROM entries WHERE entries.id = new.entry_id;
42
- END;
43
-
44
- CREATE TRIGGER tags_fts_ad AFTER DELETE ON tags BEGIN
45
- DELETE FROM entries_fts WHERE rowid = (SELECT rowid FROM entries WHERE id = old.entry_id);
46
- INSERT INTO entries_fts(rowid, title, body, summary, tags_text)
47
- SELECT entries.rowid, entries.title, entries.body, COALESCE(entries.summary, ''),
48
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
49
- FROM entries WHERE entries.id = old.entry_id;
50
- END;
51
-
52
- CREATE TRIGGER tags_fts_au AFTER UPDATE OF tag ON tags BEGIN
53
- DELETE FROM entries_fts WHERE rowid = (SELECT rowid FROM entries WHERE id = old.entry_id);
54
- INSERT INTO entries_fts(rowid, title, body, summary, tags_text)
55
- SELECT entries.rowid, entries.title, entries.body, COALESCE(entries.summary, ''),
56
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
57
- FROM entries WHERE entries.id = new.entry_id;
58
- END;
59
-
9
+ -- FTS is an application-controlled projection of the current revision. There
10
+ -- are deliberately no triggers on entries or tags: historical revisions must
11
+ -- never become searchable and projection refreshes must be explicit.
60
12
  INSERT INTO entries_fts(rowid, title, body, summary, tags_text)
61
- SELECT entries.rowid,
62
- entries.title,
63
- entries.body,
64
- COALESCE(entries.summary, ''),
65
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
66
- FROM entries;
13
+ SELECT e.rowid,
14
+ r.title,
15
+ r.body,
16
+ COALESCE(r.summary, ''),
17
+ COALESCE((SELECT group_concat(tag, ' ')
18
+ FROM entry_revision_tags
19
+ WHERE entry_id = e.id AND revision = e.current_revision), '')
20
+ FROM entries AS e
21
+ JOIN entry_revisions AS r
22
+ ON r.entry_id = e.id AND r.revision = e.current_revision;
@@ -165,12 +165,14 @@ CREATE INDEX idx_context_deliveries_run_created_at
165
165
 
166
166
  CREATE TABLE context_delivery_entries (
167
167
  delivery_id TEXT NOT NULL REFERENCES context_deliveries(delivery_id) ON DELETE CASCADE,
168
- entry_id TEXT NOT NULL REFERENCES entries(id),
168
+ entry_id TEXT NOT NULL,
169
169
  entry_revision INTEGER NOT NULL CHECK (entry_revision > 0),
170
170
  rank INTEGER NOT NULL CHECK (rank > 0),
171
171
  score_components_json TEXT NOT NULL,
172
172
  selection_reason_json TEXT NOT NULL,
173
- PRIMARY KEY (delivery_id, entry_id)
173
+ PRIMARY KEY (delivery_id, entry_id),
174
+ FOREIGN KEY (entry_id, entry_revision)
175
+ REFERENCES entry_revisions(entry_id, revision)
174
176
  );
175
177
 
176
178
  CREATE INDEX idx_context_delivery_entries_entry
@@ -1,6 +1,5 @@
1
- -- Additive hybrid-search projections. The original entries_fts index remains
2
- -- intact so databases can be upgraded and rolled back without losing the v1
3
- -- lexical search path.
1
+ -- Current-revision hybrid-search projections. Historical revisions are never
2
+ -- indexed; application code refreshes these projections after each mutation.
4
3
  CREATE VIRTUAL TABLE entries_trigram USING fts5(
5
4
  title,
6
5
  body,
@@ -22,64 +21,20 @@ CREATE TABLE entry_search_signals (
22
21
  CREATE INDEX idx_entry_search_signals_lookup
23
22
  ON entry_search_signals(signal_type, normalized_value);
24
23
 
25
- CREATE TRIGGER entries_trigram_ai AFTER INSERT ON entries BEGIN
26
- INSERT INTO entries_trigram(rowid, title, body, summary, tags_text)
27
- VALUES (
28
- new.rowid,
29
- new.title,
30
- new.body,
31
- COALESCE(new.summary, ''),
32
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = new.id), '')
33
- );
34
- END;
35
-
36
- CREATE TRIGGER entries_trigram_ad AFTER DELETE ON entries BEGIN
37
- DELETE FROM entries_trigram WHERE rowid = old.rowid;
38
- END;
39
-
40
- CREATE TRIGGER entries_trigram_au AFTER UPDATE ON entries BEGIN
41
- DELETE FROM entries_trigram WHERE rowid = old.rowid;
42
- INSERT INTO entries_trigram(rowid, title, body, summary, tags_text)
43
- VALUES (
44
- new.rowid,
45
- new.title,
46
- new.body,
47
- COALESCE(new.summary, ''),
48
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = new.id), '')
49
- );
50
- END;
51
-
52
- CREATE TRIGGER tags_trigram_ai AFTER INSERT ON tags BEGIN
53
- DELETE FROM entries_trigram WHERE rowid = (SELECT rowid FROM entries WHERE id = new.entry_id);
54
- INSERT INTO entries_trigram(rowid, title, body, summary, tags_text)
55
- SELECT entries.rowid, entries.title, entries.body, COALESCE(entries.summary, ''),
56
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
57
- FROM entries WHERE entries.id = new.entry_id;
58
- END;
59
-
60
- CREATE TRIGGER tags_trigram_ad AFTER DELETE ON tags BEGIN
61
- DELETE FROM entries_trigram WHERE rowid = (SELECT rowid FROM entries WHERE id = old.entry_id);
62
- INSERT INTO entries_trigram(rowid, title, body, summary, tags_text)
63
- SELECT entries.rowid, entries.title, entries.body, COALESCE(entries.summary, ''),
64
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
65
- FROM entries WHERE entries.id = old.entry_id;
66
- END;
67
-
68
- CREATE TRIGGER tags_trigram_au AFTER UPDATE OF tag ON tags BEGIN
69
- DELETE FROM entries_trigram WHERE rowid = (SELECT rowid FROM entries WHERE id = old.entry_id);
70
- INSERT INTO entries_trigram(rowid, title, body, summary, tags_text)
71
- SELECT entries.rowid, entries.title, entries.body, COALESCE(entries.summary, ''),
72
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
73
- FROM entries WHERE entries.id = new.entry_id;
74
- END;
75
-
76
24
  INSERT INTO entries_trigram(rowid, title, body, summary, tags_text)
77
- SELECT entries.rowid,
78
- entries.title,
79
- entries.body,
80
- COALESCE(entries.summary, ''),
81
- COALESCE((SELECT group_concat(tag, ' ') FROM tags WHERE entry_id = entries.id), '')
82
- FROM entries;
25
+ SELECT e.rowid,
26
+ r.title,
27
+ r.body,
28
+ COALESCE(r.summary, ''),
29
+ COALESCE((SELECT group_concat(tag, ' ')
30
+ FROM entry_revision_tags
31
+ WHERE entry_id = e.id AND revision = e.current_revision), '')
32
+ FROM entries AS e
33
+ JOIN entry_revisions AS r
34
+ ON r.entry_id = e.id AND r.revision = e.current_revision;
83
35
 
84
36
  INSERT INTO entry_search_signals(entry_id, signal_type, normalized_value)
85
- SELECT entry_id, 'tag', lower(trim(tag)) FROM tags WHERE length(trim(tag)) > 0;
37
+ SELECT t.entry_id, 'tag', lower(trim(t.tag))
38
+ FROM entry_revision_tags AS t
39
+ JOIN entries AS e ON e.id = t.entry_id AND e.current_revision = t.revision
40
+ WHERE length(trim(t.tag)) > 0;
@@ -50,9 +50,10 @@ BEGIN
50
50
  AND a.workspace = NEW.workspace
51
51
  ) OR NOT EXISTS (
52
52
  SELECT 1
53
- FROM entries AS e
53
+ FROM entries AS e
54
+ JOIN entry_revisions AS er
55
+ ON er.entry_id = e.id AND er.revision = NEW.entry_revision
54
56
  WHERE e.id = NEW.entry_id
55
- AND e.revision = NEW.entry_revision
56
- AND e.workspace IN (NEW.workspace, 'global')
57
+ AND er.workspace IN (NEW.workspace, 'global')
57
58
  );
58
59
  END;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askdkc/kiokuko",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "Model-agnostic external memory for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {