@precisionutilityguild/liquid-shadow 1.0.4 → 1.0.5
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 +2 -2
- package/dist/data/migrations/000_baseline.sql +277 -0
- package/dist/entry/cli/index.js +408 -336
- package/dist/entry/mcp/server.js +260 -242
- package/dist/index.js +265 -247
- package/dist/logic/domain/embeddings/worker.js +1 -1
- package/dist/logic/parser/index.js +14 -13
- package/dist/skills/shadow_audit/SKILL.md +40 -0
- package/dist/skills/shadow_chronicle/SKILL.md +40 -0
- package/dist/skills/shadow_continue/SKILL.md +55 -0
- package/dist/skills/shadow_crystallize/SKILL.md +41 -0
- package/dist/skills/shadow_mission/SKILL.md +50 -0
- package/dist/skills/shadow_onboard/SKILL.md +35 -0
- package/dist/skills/shadow_research/SKILL.md +34 -0
- package/dist/skills/shadow_sync/SKILL.md +18 -0
- package/dist/skills/shadow_synthesize/SKILL.md +47 -0
- package/dist/skills/shadow_trace_impact/SKILL.md +55 -0
- package/dist/skills/shadow_understand/SKILL.md +51 -0
- package/dist/skills/shadow_workspace/SKILL.md +30 -0
- package/dist/web-manifest.json +1 -1
- package/package.json +3 -2
- package/skills/shadow_audit/SKILL.md +40 -0
- package/skills/shadow_chronicle/SKILL.md +40 -0
- package/skills/shadow_continue/SKILL.md +55 -0
- package/skills/shadow_crystallize/SKILL.md +41 -0
- package/skills/shadow_mission/SKILL.md +50 -0
- package/skills/shadow_onboard/SKILL.md +35 -0
- package/skills/shadow_research/SKILL.md +34 -0
- package/skills/shadow_sync/SKILL.md +18 -0
- package/skills/shadow_synthesize/SKILL.md +47 -0
- package/skills/shadow_trace_impact/SKILL.md +55 -0
- package/skills/shadow_understand/SKILL.md +51 -0
- package/skills/shadow_workspace/SKILL.md +30 -0
package/README.md
CHANGED
|
@@ -46,8 +46,8 @@ Change one function, see the ripple. Trace execution flows and predict the **Bla
|
|
|
46
46
|
|
|
47
47
|
Organized into specialized intelligence suites for the modern agent:
|
|
48
48
|
|
|
49
|
-
| Suite
|
|
50
|
-
|
|
|
49
|
+
| Suite | Tactical Purpose | Key Tools |
|
|
50
|
+
| :--------------------- | :------------------------------ | :----------------------------------------------------- |
|
|
51
51
|
| **Ops Control** | Mission & context management | `shadow_ops_context`, `shadow_ops_briefing` |
|
|
52
52
|
| **Intelligence** | Deep architectural reasoning | `shadow_analyze_impact`, `shadow_analyze_flow` |
|
|
53
53
|
| **Discovery** | Semantic & config retrieval | `shadow_search_concept`, `shadow_search_config` |
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
-- ============================================================
|
|
2
|
+
-- Liquid Shadow — Baseline Schema (consolidated)
|
|
3
|
+
-- Applied once on fresh databases instead of replaying all
|
|
4
|
+
-- incremental migrations. Existing DBs keep their history.
|
|
5
|
+
-- ============================================================
|
|
6
|
+
|
|
7
|
+
-- ── Core index tables ────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
10
|
+
path TEXT PRIMARY KEY,
|
|
11
|
+
mtime REAL,
|
|
12
|
+
last_scanned_at REAL,
|
|
13
|
+
classification TEXT,
|
|
14
|
+
summary TEXT,
|
|
15
|
+
embedding TEXT,
|
|
16
|
+
content_hash TEXT
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE TABLE IF NOT EXISTS exports (
|
|
20
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
+
file_path TEXT,
|
|
22
|
+
name TEXT,
|
|
23
|
+
kind TEXT,
|
|
24
|
+
signature TEXT,
|
|
25
|
+
doc TEXT,
|
|
26
|
+
start_line INTEGER,
|
|
27
|
+
end_line INTEGER,
|
|
28
|
+
classification TEXT,
|
|
29
|
+
capabilities TEXT,
|
|
30
|
+
parent_id INTEGER,
|
|
31
|
+
embedding TEXT,
|
|
32
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE,
|
|
33
|
+
FOREIGN KEY(parent_id) REFERENCES exports(id) ON DELETE CASCADE
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE TABLE IF NOT EXISTS imports (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
file_path TEXT,
|
|
39
|
+
module_specifier TEXT,
|
|
40
|
+
imported_symbols TEXT,
|
|
41
|
+
resolved_path TEXT,
|
|
42
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE TABLE IF NOT EXISTS configs (
|
|
46
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
47
|
+
file_path TEXT,
|
|
48
|
+
key TEXT,
|
|
49
|
+
value TEXT,
|
|
50
|
+
kind TEXT,
|
|
51
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
CREATE TABLE IF NOT EXISTS file_content (
|
|
55
|
+
file_path TEXT PRIMARY KEY,
|
|
56
|
+
content TEXT,
|
|
57
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
-- ── FTS5 virtual tables ──────────────────────────────────────
|
|
61
|
+
|
|
62
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS exports_fts USING fts5(
|
|
63
|
+
name,
|
|
64
|
+
signature,
|
|
65
|
+
doc,
|
|
66
|
+
content='exports',
|
|
67
|
+
content_rowid='id'
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS files_fts USING fts5(
|
|
71
|
+
path,
|
|
72
|
+
summary,
|
|
73
|
+
content='files',
|
|
74
|
+
content_rowid='rowid'
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS content_fts USING fts5(
|
|
78
|
+
file_path,
|
|
79
|
+
content,
|
|
80
|
+
content='file_content',
|
|
81
|
+
content_rowid='rowid'
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
-- ── FTS sync triggers ────────────────────────────────────────
|
|
85
|
+
|
|
86
|
+
CREATE TRIGGER IF NOT EXISTS exports_ai AFTER INSERT ON exports BEGIN
|
|
87
|
+
INSERT INTO exports_fts(rowid, name, signature, doc)
|
|
88
|
+
VALUES (new.id, new.name, new.signature, new.doc);
|
|
89
|
+
END;
|
|
90
|
+
|
|
91
|
+
CREATE TRIGGER IF NOT EXISTS exports_ad AFTER DELETE ON exports BEGIN
|
|
92
|
+
INSERT INTO exports_fts(exports_fts, rowid, name, signature, doc)
|
|
93
|
+
VALUES('delete', old.id, old.name, old.signature, old.doc);
|
|
94
|
+
END;
|
|
95
|
+
|
|
96
|
+
CREATE TRIGGER IF NOT EXISTS exports_au AFTER UPDATE ON exports BEGIN
|
|
97
|
+
INSERT INTO exports_fts(exports_fts, rowid, name, signature, doc)
|
|
98
|
+
VALUES('delete', old.id, old.name, old.signature, old.doc);
|
|
99
|
+
INSERT INTO exports_fts(rowid, name, signature, doc)
|
|
100
|
+
VALUES (new.id, new.name, new.signature, new.doc);
|
|
101
|
+
END;
|
|
102
|
+
|
|
103
|
+
CREATE TRIGGER IF NOT EXISTS files_ai AFTER INSERT ON files BEGIN
|
|
104
|
+
INSERT INTO files_fts(rowid, path, summary)
|
|
105
|
+
VALUES (new.rowid, new.path, new.summary);
|
|
106
|
+
END;
|
|
107
|
+
|
|
108
|
+
CREATE TRIGGER IF NOT EXISTS files_ad AFTER DELETE ON files BEGIN
|
|
109
|
+
INSERT INTO files_fts(files_fts, rowid, path, summary)
|
|
110
|
+
VALUES('delete', old.rowid, old.path, old.summary);
|
|
111
|
+
END;
|
|
112
|
+
|
|
113
|
+
CREATE TRIGGER IF NOT EXISTS files_au AFTER UPDATE ON files BEGIN
|
|
114
|
+
INSERT INTO files_fts(files_fts, rowid, path, summary)
|
|
115
|
+
VALUES('delete', old.rowid, old.path, old.summary);
|
|
116
|
+
INSERT INTO files_fts(rowid, path, summary)
|
|
117
|
+
VALUES (new.rowid, new.path, new.summary);
|
|
118
|
+
END;
|
|
119
|
+
|
|
120
|
+
CREATE TRIGGER IF NOT EXISTS content_ai AFTER INSERT ON file_content BEGIN
|
|
121
|
+
INSERT INTO content_fts(rowid, file_path, content)
|
|
122
|
+
VALUES (new.rowid, new.file_path, new.content);
|
|
123
|
+
END;
|
|
124
|
+
|
|
125
|
+
CREATE TRIGGER IF NOT EXISTS content_ad AFTER DELETE ON file_content BEGIN
|
|
126
|
+
INSERT INTO content_fts(content_fts, rowid, file_path, content)
|
|
127
|
+
VALUES('delete', old.rowid, old.file_path, old.content);
|
|
128
|
+
END;
|
|
129
|
+
|
|
130
|
+
CREATE TRIGGER IF NOT EXISTS content_au AFTER UPDATE ON file_content BEGIN
|
|
131
|
+
INSERT INTO content_fts(content_fts, rowid, file_path, content)
|
|
132
|
+
VALUES('delete', old.rowid, old.file_path, old.content);
|
|
133
|
+
INSERT INTO content_fts(rowid, file_path, content)
|
|
134
|
+
VALUES (new.rowid, new.file_path, new.content);
|
|
135
|
+
END;
|
|
136
|
+
|
|
137
|
+
-- ── Mission / cognitive overlay ──────────────────────────────
|
|
138
|
+
|
|
139
|
+
CREATE TABLE IF NOT EXISTS missions (
|
|
140
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
141
|
+
name TEXT NOT NULL,
|
|
142
|
+
goal TEXT,
|
|
143
|
+
status TEXT DEFAULT 'planned',
|
|
144
|
+
strategy_graph TEXT,
|
|
145
|
+
git_branch TEXT,
|
|
146
|
+
commit_sha TEXT,
|
|
147
|
+
parent_id INTEGER,
|
|
148
|
+
verification_context TEXT,
|
|
149
|
+
outcome_contract TEXT,
|
|
150
|
+
created_at REAL DEFAULT (unixepoch()),
|
|
151
|
+
updated_at REAL DEFAULT (unixepoch()),
|
|
152
|
+
FOREIGN KEY(parent_id) REFERENCES missions(id) ON DELETE CASCADE
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
CREATE TABLE IF NOT EXISTS mission_artifacts (
|
|
156
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
157
|
+
mission_id INTEGER NOT NULL,
|
|
158
|
+
type TEXT NOT NULL,
|
|
159
|
+
identifier TEXT NOT NULL,
|
|
160
|
+
metadata TEXT,
|
|
161
|
+
created_at INTEGER DEFAULT (unixepoch()),
|
|
162
|
+
FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
CREATE TABLE IF NOT EXISTS intent_logs (
|
|
166
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
167
|
+
mission_id INTEGER, -- NULL = unanchored (heritage, system)
|
|
168
|
+
symbol_id INTEGER,
|
|
169
|
+
file_path TEXT,
|
|
170
|
+
type TEXT,
|
|
171
|
+
content TEXT,
|
|
172
|
+
confidence REAL DEFAULT 1.0,
|
|
173
|
+
symbol_name TEXT,
|
|
174
|
+
signature TEXT,
|
|
175
|
+
commit_sha TEXT,
|
|
176
|
+
is_crystallized INTEGER DEFAULT 0,
|
|
177
|
+
crystal_id INTEGER REFERENCES intent_logs(id) ON DELETE SET NULL,
|
|
178
|
+
embedding TEXT DEFAULT NULL,
|
|
179
|
+
created_at REAL DEFAULT (unixepoch()),
|
|
180
|
+
FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE,
|
|
181
|
+
FOREIGN KEY(symbol_id) REFERENCES exports(id) ON DELETE SET NULL,
|
|
182
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
CREATE TABLE IF NOT EXISTS working_set (
|
|
186
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
187
|
+
mission_id INTEGER,
|
|
188
|
+
file_path TEXT,
|
|
189
|
+
symbol_id INTEGER,
|
|
190
|
+
type TEXT,
|
|
191
|
+
created_at REAL DEFAULT (unixepoch()),
|
|
192
|
+
FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE,
|
|
193
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE,
|
|
194
|
+
FOREIGN KEY(symbol_id) REFERENCES exports(id) ON DELETE CASCADE
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
CREATE TABLE IF NOT EXISTS cross_repo_links (
|
|
198
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
199
|
+
mission_id INTEGER NOT NULL,
|
|
200
|
+
linked_repo_path TEXT NOT NULL,
|
|
201
|
+
linked_mission_id INTEGER NOT NULL,
|
|
202
|
+
relationship TEXT,
|
|
203
|
+
direction TEXT,
|
|
204
|
+
created_at REAL DEFAULT (unixepoch()),
|
|
205
|
+
FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
-- ── Event mesh ───────────────────────────────────────────────
|
|
209
|
+
|
|
210
|
+
CREATE TABLE IF NOT EXISTS event_synapses (
|
|
211
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
212
|
+
type TEXT NOT NULL, -- 'socket_event' | 'api_route'
|
|
213
|
+
name TEXT NOT NULL, -- string contract e.g. 'user:created'
|
|
214
|
+
direction TEXT NOT NULL, -- 'produce' | 'consume'
|
|
215
|
+
file_path TEXT NOT NULL,
|
|
216
|
+
line_number INTEGER,
|
|
217
|
+
code_snippet TEXT,
|
|
218
|
+
created_at REAL DEFAULT (unixepoch())
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
-- ── Metadata / caches ────────────────────────────────────────
|
|
222
|
+
|
|
223
|
+
CREATE TABLE IF NOT EXISTS index_metadata (
|
|
224
|
+
key TEXT PRIMARY KEY,
|
|
225
|
+
value TEXT,
|
|
226
|
+
updated_at REAL DEFAULT (unixepoch())
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
INSERT OR IGNORE INTO index_metadata (key, value) VALUES ('index_completed', 'false');
|
|
230
|
+
INSERT OR IGNORE INTO index_metadata (key, value) VALUES ('index_version', '1');
|
|
231
|
+
INSERT OR IGNORE INTO index_metadata (key, value) VALUES ('last_indexed_at', NULL);
|
|
232
|
+
|
|
233
|
+
CREATE TABLE IF NOT EXISTS search_history (
|
|
234
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
235
|
+
query TEXT NOT NULL,
|
|
236
|
+
mode TEXT NOT NULL,
|
|
237
|
+
branch TEXT,
|
|
238
|
+
created_at REAL DEFAULT (unixepoch())
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
CREATE TABLE IF NOT EXISTS hologram_snapshot (
|
|
242
|
+
section TEXT PRIMARY KEY,
|
|
243
|
+
data TEXT NOT NULL,
|
|
244
|
+
updated_at REAL DEFAULT (unixepoch())
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
-- ── Indexes ──────────────────────────────────────────────────
|
|
248
|
+
|
|
249
|
+
-- Core index
|
|
250
|
+
CREATE INDEX IF NOT EXISTS idx_exports_file_path ON exports(file_path);
|
|
251
|
+
CREATE INDEX IF NOT EXISTS idx_exports_name ON exports(name);
|
|
252
|
+
CREATE INDEX IF NOT EXISTS idx_exports_parent_id ON exports(parent_id);
|
|
253
|
+
CREATE INDEX IF NOT EXISTS idx_exports_classification ON exports(classification);
|
|
254
|
+
CREATE INDEX IF NOT EXISTS idx_imports_file_path ON imports(file_path);
|
|
255
|
+
CREATE INDEX IF NOT EXISTS idx_imports_resolved_path ON imports(resolved_path);
|
|
256
|
+
CREATE INDEX IF NOT EXISTS idx_configs_file_path ON configs(file_path);
|
|
257
|
+
CREATE INDEX IF NOT EXISTS idx_configs_kind ON configs(kind);
|
|
258
|
+
CREATE INDEX IF NOT EXISTS idx_files_classification ON files(classification);
|
|
259
|
+
|
|
260
|
+
-- Mission system
|
|
261
|
+
CREATE INDEX IF NOT EXISTS idx_intent_mission ON intent_logs(mission_id);
|
|
262
|
+
CREATE INDEX IF NOT EXISTS idx_intent_symbol ON intent_logs(symbol_id);
|
|
263
|
+
CREATE INDEX IF NOT EXISTS idx_intent_crystal ON intent_logs(crystal_id);
|
|
264
|
+
CREATE INDEX IF NOT EXISTS idx_intent_crystallized ON intent_logs(is_crystallized);
|
|
265
|
+
CREATE INDEX IF NOT EXISTS idx_intent_embedding ON intent_logs(id) WHERE embedding IS NOT NULL;
|
|
266
|
+
CREATE INDEX IF NOT EXISTS idx_working_set_mission ON working_set(mission_id);
|
|
267
|
+
CREATE INDEX IF NOT EXISTS idx_cross_repo_mission ON cross_repo_links(mission_id);
|
|
268
|
+
CREATE INDEX IF NOT EXISTS idx_mission_artifacts_mission ON mission_artifacts(mission_id);
|
|
269
|
+
|
|
270
|
+
-- Event mesh
|
|
271
|
+
CREATE INDEX IF NOT EXISTS idx_events_name ON event_synapses(name);
|
|
272
|
+
CREATE INDEX IF NOT EXISTS idx_events_file ON event_synapses(file_path);
|
|
273
|
+
|
|
274
|
+
-- Caches
|
|
275
|
+
CREATE INDEX IF NOT EXISTS idx_search_history_created_at ON search_history(created_at DESC);
|
|
276
|
+
CREATE INDEX IF NOT EXISTS idx_search_history_mode ON search_history(mode);
|
|
277
|
+
CREATE INDEX IF NOT EXISTS idx_hologram_snapshot_updated_at ON hologram_snapshot(updated_at DESC);
|