@precisionutilityguild/liquid-shadow 1.0.7 → 1.0.10

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 (40) hide show
  1. package/README.md +3 -3
  2. package/dist/data/migrations/000_baseline.sql +27 -0
  3. package/dist/data/migrations/013_file_claims.sql +18 -0
  4. package/dist/data/migrations/014_tribunal_state.sql +24 -0
  5. package/dist/data/migrations/015_repo_level_handoffs_nullable.sql +52 -0
  6. package/dist/data/migrations/016_repair_tribunal_artifact_fk.sql +58 -0
  7. package/dist/entry/cli/index.js +597 -495
  8. package/dist/entry/ember/index.js +109 -32
  9. package/dist/entry/mcp/server.js +443 -347
  10. package/dist/entry/tribunal/index.js +650 -0
  11. package/dist/index.js +441 -345
  12. package/dist/logic/parser/index.js +16 -14
  13. package/dist/skills/shadow_audit/SKILL.md +22 -30
  14. package/dist/skills/shadow_chronicle/SKILL.md +16 -29
  15. package/dist/skills/shadow_continue/SKILL.md +37 -53
  16. package/dist/skills/shadow_coordinate/SKILL.md +46 -0
  17. package/dist/skills/shadow_crystallize/SKILL.md +13 -27
  18. package/dist/skills/shadow_mission/SKILL.md +27 -41
  19. package/dist/skills/shadow_onboard/SKILL.md +26 -35
  20. package/dist/skills/shadow_research/SKILL.md +15 -23
  21. package/dist/skills/shadow_sync/SKILL.md +18 -9
  22. package/dist/skills/shadow_synthesize/SKILL.md +14 -36
  23. package/dist/skills/shadow_trace_impact/SKILL.md +30 -50
  24. package/dist/skills/shadow_understand/SKILL.md +37 -52
  25. package/dist/skills/shadow_workspace/SKILL.md +17 -17
  26. package/dist/web-manifest.json +16 -6
  27. package/package.json +1 -1
  28. package/skills/shadow_audit/SKILL.md +22 -30
  29. package/skills/shadow_chronicle/SKILL.md +16 -29
  30. package/skills/shadow_continue/SKILL.md +37 -53
  31. package/skills/shadow_coordinate/SKILL.md +46 -0
  32. package/skills/shadow_crystallize/SKILL.md +13 -27
  33. package/skills/shadow_mission/SKILL.md +27 -41
  34. package/skills/shadow_onboard/SKILL.md +26 -35
  35. package/skills/shadow_research/SKILL.md +15 -23
  36. package/skills/shadow_sync/SKILL.md +18 -9
  37. package/skills/shadow_synthesize/SKILL.md +14 -36
  38. package/skills/shadow_trace_impact/SKILL.md +30 -50
  39. package/skills/shadow_understand/SKILL.md +37 -52
  40. package/skills/shadow_workspace/SKILL.md +17 -17
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.0.7-blue.svg" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.0.10-blue.svg" alt="Version">
10
10
  <img src="https://img.shields.io/badge/License-Apache--2.0-blue.svg" alt="License">
11
11
  <img src="https://img.shields.io/badge/build-passing-brightgreen.svg" alt="Build">
12
12
  <img src="https://img.shields.io/badge/MCP-First-6D28D9.svg" alt="MCP First">
@@ -42,7 +42,7 @@ Change one function, see the ripple. Trace execution flows and predict the **Bla
42
42
 
43
43
  ---
44
44
 
45
- ## The Tactical Suite (40 Atomic Tools)
45
+ ## The Tactical Suite (45 Atomic Tools)
46
46
 
47
47
  Organized into specialized intelligence suites for the modern agent:
48
48
 
@@ -80,7 +80,7 @@ liquid-shadow dashboard
80
80
 
81
81
  ### 3. The Skills-First Loop
82
82
 
83
- Liquid Shadow is designed for **Autonomy**. While it provides 40 atomic tools, the primary interface for an agent is the **Skills** system. Running `liquid-shadow init` automatically injects these high-level workflows into the agent's environment.
83
+ Liquid Shadow is designed for **Autonomy**. While it provides 45 atomic tools, the primary interface for an agent is the **Skills** system. Running `liquid-shadow init` automatically injects these high-level workflows into the agent's environment.
84
84
 
85
85
  #### High-Signal Workflows
86
86
 
@@ -195,6 +195,14 @@ CREATE TABLE IF NOT EXISTS working_set (
195
195
  FOREIGN KEY(symbol_id) REFERENCES exports(id) ON DELETE CASCADE
196
196
  );
197
197
 
198
+ CREATE TABLE IF NOT EXISTS file_claims (
199
+ file_path TEXT PRIMARY KEY,
200
+ mission_id INTEGER NOT NULL,
201
+ claimed_at REAL DEFAULT (unixepoch()),
202
+ updated_at REAL DEFAULT (unixepoch()),
203
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE
204
+ );
205
+
198
206
  CREATE TABLE IF NOT EXISTS cross_repo_links (
199
207
  id INTEGER PRIMARY KEY AUTOINCREMENT,
200
208
  mission_id INTEGER NOT NULL,
@@ -249,6 +257,23 @@ INSERT OR IGNORE INTO ember_state (key, value) VALUES ('started_at', NULL);
249
257
  INSERT OR IGNORE INTO ember_state (key, value) VALUES ('pid', NULL);
250
258
  INSERT OR IGNORE INTO ember_state (key, value) VALUES ('repo_path', NULL);
251
259
 
260
+ CREATE TABLE IF NOT EXISTS tribunal_state (
261
+ session_id TEXT PRIMARY KEY,
262
+ mission_id INTEGER,
263
+ repo_path TEXT NOT NULL,
264
+ status TEXT DEFAULT 'running',
265
+ phase TEXT DEFAULT 'initializing',
266
+ pid INTEGER,
267
+ artifact_id INTEGER,
268
+ started_at REAL DEFAULT (unixepoch()),
269
+ completed_at REAL,
270
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE SET NULL,
271
+ FOREIGN KEY(artifact_id) REFERENCES mission_artifacts(id) ON DELETE SET NULL
272
+ );
273
+
274
+ CREATE INDEX IF NOT EXISTS idx_tribunal_mission_id ON tribunal_state(mission_id);
275
+ CREATE INDEX IF NOT EXISTS idx_tribunal_status ON tribunal_state(status);
276
+
252
277
  -- ── Metadata / caches ────────────────────────────────────────
253
278
 
254
279
  CREATE TABLE IF NOT EXISTS index_metadata (
@@ -295,6 +320,8 @@ CREATE INDEX IF NOT EXISTS idx_intent_crystal ON intent_logs(crystal_i
295
320
  CREATE INDEX IF NOT EXISTS idx_intent_crystallized ON intent_logs(is_crystallized);
296
321
  CREATE INDEX IF NOT EXISTS idx_intent_embedding ON intent_logs(id) WHERE embedding IS NOT NULL;
297
322
  CREATE INDEX IF NOT EXISTS idx_working_set_mission ON working_set(mission_id);
323
+ CREATE INDEX IF NOT EXISTS idx_file_claims_mission_id ON file_claims(mission_id);
324
+ CREATE INDEX IF NOT EXISTS idx_file_claims_updated_at ON file_claims(updated_at DESC);
298
325
  CREATE INDEX IF NOT EXISTS idx_cross_repo_mission ON cross_repo_links(mission_id);
299
326
  CREATE INDEX IF NOT EXISTS idx_mission_artifacts_mission ON mission_artifacts(mission_id);
300
327
  CREATE INDEX IF NOT EXISTS idx_mission_artifacts_embedding ON mission_artifacts(id) WHERE embedding IS NOT NULL;
@@ -0,0 +1,18 @@
1
+ -- File-level mission claims for atomic coordination.
2
+ -- SQLite UNIQUE(file_path) provides lock semantics without external lock files.
3
+
4
+ CREATE TABLE IF NOT EXISTS file_claims (
5
+ file_path TEXT PRIMARY KEY,
6
+ mission_id INTEGER NOT NULL,
7
+ claimed_at REAL DEFAULT (unixepoch()),
8
+ updated_at REAL DEFAULT (unixepoch()),
9
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE
10
+ );
11
+
12
+ CREATE INDEX IF NOT EXISTS idx_file_claims_mission_id ON file_claims(mission_id);
13
+ CREATE INDEX IF NOT EXISTS idx_file_claims_updated_at ON file_claims(updated_at DESC);
14
+
15
+ -- DOWN
16
+ DROP INDEX IF EXISTS idx_file_claims_updated_at;
17
+ DROP INDEX IF EXISTS idx_file_claims_mission_id;
18
+ DROP TABLE IF EXISTS file_claims;
@@ -0,0 +1,24 @@
1
+ -- Tribunal daemon session state for asynchronous mission peer-review runs.
2
+ -- Session UUID is the primary key; pid is advisory-only for debugging.
3
+
4
+ CREATE TABLE IF NOT EXISTS tribunal_state (
5
+ session_id TEXT PRIMARY KEY,
6
+ mission_id INTEGER,
7
+ repo_path TEXT NOT NULL,
8
+ status TEXT DEFAULT 'running',
9
+ phase TEXT DEFAULT 'initializing',
10
+ pid INTEGER,
11
+ artifact_id INTEGER,
12
+ started_at REAL DEFAULT (unixepoch()),
13
+ completed_at REAL,
14
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE SET NULL,
15
+ FOREIGN KEY(artifact_id) REFERENCES mission_artifacts(id) ON DELETE SET NULL
16
+ );
17
+
18
+ CREATE INDEX IF NOT EXISTS idx_tribunal_mission_id ON tribunal_state(mission_id);
19
+ CREATE INDEX IF NOT EXISTS idx_tribunal_status ON tribunal_state(status);
20
+
21
+ -- DOWN
22
+ DROP INDEX IF EXISTS idx_tribunal_status;
23
+ DROP INDEX IF EXISTS idx_tribunal_mission_id;
24
+ DROP TABLE IF EXISTS tribunal_state;
@@ -0,0 +1,52 @@
1
+ PRAGMA foreign_keys = OFF;
2
+
3
+ ALTER TABLE mission_artifacts RENAME TO mission_artifacts_old;
4
+
5
+ CREATE TABLE IF NOT EXISTS mission_artifacts (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ mission_id INTEGER,
8
+ type TEXT NOT NULL,
9
+ identifier TEXT NOT NULL,
10
+ metadata TEXT,
11
+ embedding TEXT DEFAULT NULL,
12
+ created_at INTEGER DEFAULT (unixepoch()),
13
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE
14
+ );
15
+
16
+ INSERT INTO mission_artifacts (id, mission_id, type, identifier, metadata, embedding, created_at)
17
+ SELECT id, NULLIF(mission_id, 0), type, identifier, metadata, embedding, created_at
18
+ FROM mission_artifacts_old;
19
+
20
+ DROP TABLE mission_artifacts_old;
21
+
22
+ CREATE INDEX IF NOT EXISTS idx_mission_artifacts_mission ON mission_artifacts(mission_id);
23
+ CREATE INDEX IF NOT EXISTS idx_mission_artifacts_embedding ON mission_artifacts(id) WHERE embedding IS NOT NULL;
24
+
25
+ PRAGMA foreign_keys = ON;
26
+
27
+ -- DOWN
28
+ PRAGMA foreign_keys = OFF;
29
+
30
+ ALTER TABLE mission_artifacts RENAME TO mission_artifacts_new;
31
+
32
+ CREATE TABLE IF NOT EXISTS mission_artifacts (
33
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
34
+ mission_id INTEGER NOT NULL,
35
+ type TEXT NOT NULL,
36
+ identifier TEXT NOT NULL,
37
+ metadata TEXT,
38
+ embedding TEXT DEFAULT NULL,
39
+ created_at INTEGER DEFAULT (unixepoch()),
40
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE CASCADE
41
+ );
42
+
43
+ INSERT INTO mission_artifacts (id, mission_id, type, identifier, metadata, embedding, created_at)
44
+ SELECT id, COALESCE(mission_id, 0), type, identifier, metadata, embedding, created_at
45
+ FROM mission_artifacts_new;
46
+
47
+ DROP TABLE mission_artifacts_new;
48
+
49
+ CREATE INDEX IF NOT EXISTS idx_mission_artifacts_mission ON mission_artifacts(mission_id);
50
+ CREATE INDEX IF NOT EXISTS idx_mission_artifacts_embedding ON mission_artifacts(id) WHERE embedding IS NOT NULL;
51
+
52
+ PRAGMA foreign_keys = ON;
@@ -0,0 +1,58 @@
1
+ PRAGMA foreign_keys = OFF;
2
+
3
+ ALTER TABLE tribunal_state RENAME TO tribunal_state_old;
4
+
5
+ CREATE TABLE IF NOT EXISTS tribunal_state (
6
+ session_id TEXT PRIMARY KEY,
7
+ mission_id INTEGER,
8
+ repo_path TEXT NOT NULL,
9
+ status TEXT DEFAULT 'running',
10
+ phase TEXT DEFAULT 'initializing',
11
+ pid INTEGER,
12
+ artifact_id INTEGER,
13
+ started_at REAL DEFAULT (unixepoch()),
14
+ completed_at REAL,
15
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE SET NULL,
16
+ FOREIGN KEY(artifact_id) REFERENCES mission_artifacts(id) ON DELETE SET NULL
17
+ );
18
+
19
+ INSERT INTO tribunal_state (session_id, mission_id, repo_path, status, phase, pid, artifact_id, started_at, completed_at)
20
+ SELECT session_id, mission_id, repo_path, status, phase, pid, artifact_id, started_at, completed_at
21
+ FROM tribunal_state_old;
22
+
23
+ DROP TABLE tribunal_state_old;
24
+
25
+ CREATE INDEX IF NOT EXISTS idx_tribunal_mission_id ON tribunal_state(mission_id);
26
+ CREATE INDEX IF NOT EXISTS idx_tribunal_status ON tribunal_state(status);
27
+
28
+ PRAGMA foreign_keys = ON;
29
+
30
+ -- DOWN
31
+ PRAGMA foreign_keys = OFF;
32
+
33
+ ALTER TABLE tribunal_state RENAME TO tribunal_state_new;
34
+
35
+ CREATE TABLE IF NOT EXISTS tribunal_state (
36
+ session_id TEXT PRIMARY KEY,
37
+ mission_id INTEGER,
38
+ repo_path TEXT NOT NULL,
39
+ status TEXT DEFAULT 'running',
40
+ phase TEXT DEFAULT 'initializing',
41
+ pid INTEGER,
42
+ artifact_id INTEGER,
43
+ started_at REAL DEFAULT (unixepoch()),
44
+ completed_at REAL,
45
+ FOREIGN KEY(mission_id) REFERENCES missions(id) ON DELETE SET NULL,
46
+ FOREIGN KEY(artifact_id) REFERENCES mission_artifacts_old(id) ON DELETE SET NULL
47
+ );
48
+
49
+ INSERT INTO tribunal_state (session_id, mission_id, repo_path, status, phase, pid, artifact_id, started_at, completed_at)
50
+ SELECT session_id, mission_id, repo_path, status, phase, pid, artifact_id, started_at, completed_at
51
+ FROM tribunal_state_new;
52
+
53
+ DROP TABLE tribunal_state_new;
54
+
55
+ CREATE INDEX IF NOT EXISTS idx_tribunal_mission_id ON tribunal_state(mission_id);
56
+ CREATE INDEX IF NOT EXISTS idx_tribunal_status ON tribunal_state(status);
57
+
58
+ PRAGMA foreign_keys = ON;