@signetai/connector-openclaw 0.146.4 → 0.147.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/dist/index.js +595 -27
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -10766,6 +10766,251 @@ function up82(db) {
|
|
|
10766
10766
|
`);
|
|
10767
10767
|
db.exec("CREATE INDEX IF NOT EXISTS idx_skill_inv_harness ON skill_invocations(harness, created_at)");
|
|
10768
10768
|
}
|
|
10769
|
+
var DEPENDENCY_TYPES = new Set([
|
|
10770
|
+
"uses",
|
|
10771
|
+
"requires",
|
|
10772
|
+
"owned_by",
|
|
10773
|
+
"owns",
|
|
10774
|
+
"blocks",
|
|
10775
|
+
"informs",
|
|
10776
|
+
"maintains",
|
|
10777
|
+
"implements",
|
|
10778
|
+
"built",
|
|
10779
|
+
"depends_on",
|
|
10780
|
+
"related_to",
|
|
10781
|
+
"learned_from",
|
|
10782
|
+
"teaches",
|
|
10783
|
+
"knows",
|
|
10784
|
+
"assumes",
|
|
10785
|
+
"supports_claim",
|
|
10786
|
+
"authored_by",
|
|
10787
|
+
"links_to",
|
|
10788
|
+
"contains",
|
|
10789
|
+
"contains_note",
|
|
10790
|
+
"contradicts",
|
|
10791
|
+
"supersedes",
|
|
10792
|
+
"part_of",
|
|
10793
|
+
"produced_artifact",
|
|
10794
|
+
"precedes",
|
|
10795
|
+
"follows",
|
|
10796
|
+
"triggers",
|
|
10797
|
+
"may_execute",
|
|
10798
|
+
"requires_approval_from",
|
|
10799
|
+
"impacts",
|
|
10800
|
+
"produces",
|
|
10801
|
+
"consumes"
|
|
10802
|
+
]);
|
|
10803
|
+
function sqlStringList(values) {
|
|
10804
|
+
return [...values].map((value) => `'${value}'`).join(", ");
|
|
10805
|
+
}
|
|
10806
|
+
function hasTable3(db, table) {
|
|
10807
|
+
return Boolean(db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table));
|
|
10808
|
+
}
|
|
10809
|
+
function hasColumn12(db, table, column) {
|
|
10810
|
+
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
10811
|
+
return rows.some((row) => row.name === column);
|
|
10812
|
+
}
|
|
10813
|
+
function addColumnIfMissing20(db, table, column, definition) {
|
|
10814
|
+
if (!hasColumn12(db, table, column))
|
|
10815
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
10816
|
+
}
|
|
10817
|
+
function documentScopeColumnsPreservingExisting(db) {
|
|
10818
|
+
const preserveAgentId = hasColumn12(db, "documents", "agent_id");
|
|
10819
|
+
const preserveProject = hasColumn12(db, "documents", "project");
|
|
10820
|
+
if (preserveAgentId) {
|
|
10821
|
+
db.exec(`
|
|
10822
|
+
CREATE TEMP TABLE __signet_doc_agent_guard AS
|
|
10823
|
+
SELECT id, agent_id FROM documents
|
|
10824
|
+
WHERE NULLIF(TRIM(agent_id), '') IS NOT NULL
|
|
10825
|
+
AND NULLIF(TRIM(agent_id), '') <> 'default'
|
|
10826
|
+
`);
|
|
10827
|
+
}
|
|
10828
|
+
if (preserveProject) {
|
|
10829
|
+
db.exec(`
|
|
10830
|
+
CREATE TEMP TABLE __signet_doc_project_guard AS
|
|
10831
|
+
SELECT id, project FROM documents
|
|
10832
|
+
WHERE NULLIF(TRIM(project), '') IS NOT NULL
|
|
10833
|
+
`);
|
|
10834
|
+
}
|
|
10835
|
+
try {
|
|
10836
|
+
up80(db);
|
|
10837
|
+
if (preserveAgentId) {
|
|
10838
|
+
db.exec(`
|
|
10839
|
+
UPDATE documents
|
|
10840
|
+
SET agent_id = (SELECT agent_id FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
10841
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
10842
|
+
`);
|
|
10843
|
+
}
|
|
10844
|
+
if (preserveProject) {
|
|
10845
|
+
db.exec(`
|
|
10846
|
+
UPDATE documents
|
|
10847
|
+
SET project = (SELECT project FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
10848
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
10849
|
+
`);
|
|
10850
|
+
}
|
|
10851
|
+
} finally {
|
|
10852
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_agent_guard");
|
|
10853
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_project_guard");
|
|
10854
|
+
}
|
|
10855
|
+
}
|
|
10856
|
+
function up83(db) {
|
|
10857
|
+
up79(db);
|
|
10858
|
+
if (hasTable3(db, "documents")) {
|
|
10859
|
+
documentScopeColumnsPreservingExisting(db);
|
|
10860
|
+
}
|
|
10861
|
+
up81(db);
|
|
10862
|
+
addColumnIfMissing20(db, "memories", "superseded_by", "TEXT");
|
|
10863
|
+
addColumnIfMissing20(db, "memories", "superseded_at", "TEXT");
|
|
10864
|
+
addColumnIfMissing20(db, "memories", "superseded_reason", "TEXT");
|
|
10865
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded_by ON memories(superseded_by)");
|
|
10866
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_active_supersession ON memories(is_deleted, superseded_by)");
|
|
10867
|
+
if (!hasTable3(db, "relations") || !hasTable3(db, "entity_dependencies"))
|
|
10868
|
+
return;
|
|
10869
|
+
addColumnIfMissing20(db, "entity_dependencies", "confidence", "REAL");
|
|
10870
|
+
addColumnIfMissing20(db, "entity_dependencies", "reason", "TEXT");
|
|
10871
|
+
addColumnIfMissing20(db, "entity_dependencies", "source_id", "TEXT");
|
|
10872
|
+
addColumnIfMissing20(db, "entity_dependencies", "source_kind", "TEXT");
|
|
10873
|
+
addColumnIfMissing20(db, "entity_dependencies", "proposal_evidence", "TEXT NOT NULL DEFAULT '[]'");
|
|
10874
|
+
addColumnIfMissing20(db, "entity_dependencies", "status", "TEXT NOT NULL DEFAULT 'active'");
|
|
10875
|
+
const relationConfidence = hasColumn12(db, "relations", "confidence") ? "r.confidence" : "NULL";
|
|
10876
|
+
const relationUpdatedAt = hasColumn12(db, "relations", "updated_at") ? "r.updated_at" : "r.created_at";
|
|
10877
|
+
const sourceAgentId = hasColumn12(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(src.agent_id), ''), 'default')" : "'default'";
|
|
10878
|
+
const targetAgentId = hasColumn12(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(dst.agent_id), ''), 'default')" : "'default'";
|
|
10879
|
+
db.exec(`
|
|
10880
|
+
INSERT OR IGNORE INTO entity_dependencies (
|
|
10881
|
+
id,
|
|
10882
|
+
source_entity_id,
|
|
10883
|
+
target_entity_id,
|
|
10884
|
+
agent_id,
|
|
10885
|
+
dependency_type,
|
|
10886
|
+
strength,
|
|
10887
|
+
confidence,
|
|
10888
|
+
reason,
|
|
10889
|
+
created_at,
|
|
10890
|
+
updated_at,
|
|
10891
|
+
source_id,
|
|
10892
|
+
source_kind,
|
|
10893
|
+
proposal_evidence,
|
|
10894
|
+
status
|
|
10895
|
+
)
|
|
10896
|
+
SELECT
|
|
10897
|
+
'relation:' || r.id,
|
|
10898
|
+
r.source_entity_id,
|
|
10899
|
+
r.target_entity_id,
|
|
10900
|
+
COALESCE(${sourceAgentId}, ${targetAgentId}, 'default'),
|
|
10901
|
+
CASE WHEN r.relation_type IN (${sqlStringList(DEPENDENCY_TYPES)}) THEN r.relation_type ELSE 'related_to' END,
|
|
10902
|
+
MAX(0.1, MIN(1.0, COALESCE(r.strength, 0.5))),
|
|
10903
|
+
MAX(0.1, MIN(1.0, COALESCE(${relationConfidence}, 0.7))),
|
|
10904
|
+
'legacy relation backfill: ' || r.relation_type,
|
|
10905
|
+
COALESCE(r.created_at, datetime('now')),
|
|
10906
|
+
COALESCE(${relationUpdatedAt}, r.created_at, datetime('now')),
|
|
10907
|
+
r.id,
|
|
10908
|
+
'relation',
|
|
10909
|
+
'[]',
|
|
10910
|
+
'active'
|
|
10911
|
+
FROM relations r
|
|
10912
|
+
JOIN entities src ON src.id = r.source_entity_id
|
|
10913
|
+
JOIN entities dst ON dst.id = r.target_entity_id
|
|
10914
|
+
WHERE r.source_entity_id <> r.target_entity_id
|
|
10915
|
+
AND ${sourceAgentId} = ${targetAgentId}
|
|
10916
|
+
`);
|
|
10917
|
+
}
|
|
10918
|
+
function up84(db) {
|
|
10919
|
+
db.exec(`
|
|
10920
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_imports (
|
|
10921
|
+
path TEXT PRIMARY KEY,
|
|
10922
|
+
mtime_ms INTEGER NOT NULL,
|
|
10923
|
+
ctime_ms INTEGER NOT NULL,
|
|
10924
|
+
size INTEGER NOT NULL,
|
|
10925
|
+
content_hash TEXT NOT NULL,
|
|
10926
|
+
importer_version INTEGER NOT NULL,
|
|
10927
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
10928
|
+
last_imported_at TEXT NOT NULL,
|
|
10929
|
+
last_seen_at TEXT NOT NULL,
|
|
10930
|
+
status TEXT NOT NULL DEFAULT 'imported',
|
|
10931
|
+
error TEXT
|
|
10932
|
+
);
|
|
10933
|
+
|
|
10934
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_chunks (
|
|
10935
|
+
file_path TEXT NOT NULL,
|
|
10936
|
+
chunk_hash TEXT NOT NULL,
|
|
10937
|
+
chunk_index INTEGER NOT NULL,
|
|
10938
|
+
memory_id TEXT,
|
|
10939
|
+
source_id TEXT,
|
|
10940
|
+
created_at TEXT NOT NULL,
|
|
10941
|
+
PRIMARY KEY (file_path, chunk_hash)
|
|
10942
|
+
);
|
|
10943
|
+
|
|
10944
|
+
CREATE INDEX IF NOT EXISTS idx_legacy_markdown_chunks_memory_id
|
|
10945
|
+
ON legacy_markdown_chunks(memory_id);
|
|
10946
|
+
`);
|
|
10947
|
+
}
|
|
10948
|
+
function up85(db) {
|
|
10949
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name IN ('relations', 'entity_dependencies')").all();
|
|
10950
|
+
const tableNames = new Set(tables.map((r) => String(r.name)));
|
|
10951
|
+
if (!tableNames.has("relations") || !tableNames.has("entity_dependencies"))
|
|
10952
|
+
return;
|
|
10953
|
+
const relCols = db.prepare("PRAGMA table_info(relations)").all();
|
|
10954
|
+
const depCols = db.prepare("PRAGMA table_info(entity_dependencies)").all();
|
|
10955
|
+
const rel = new Set(relCols.map((c) => String(c.name)));
|
|
10956
|
+
const dep = new Set(depCols.map((c) => String(c.name)));
|
|
10957
|
+
if (!rel.has("source_entity_id") || !rel.has("relation_type"))
|
|
10958
|
+
return;
|
|
10959
|
+
if (!dep.has("source_entity_id") || !dep.has("dependency_type") || !dep.has("agent_id"))
|
|
10960
|
+
return;
|
|
10961
|
+
const hasRelConfidence = rel.has("confidence");
|
|
10962
|
+
const hasRelUpdated = rel.has("updated_at");
|
|
10963
|
+
const hasDepConfidence = dep.has("confidence");
|
|
10964
|
+
const hasDepReason = dep.has("reason");
|
|
10965
|
+
const hasDepStatus = dep.has("status");
|
|
10966
|
+
const selectParts = ["id", "source_entity_id", "target_entity_id"];
|
|
10967
|
+
const colParts = ["id", "source_entity_id", "target_entity_id"];
|
|
10968
|
+
selectParts.push("relation_type");
|
|
10969
|
+
colParts.push("dependency_type");
|
|
10970
|
+
selectParts.push("strength", "created_at");
|
|
10971
|
+
colParts.push("strength", "created_at");
|
|
10972
|
+
selectParts.push("'default'");
|
|
10973
|
+
colParts.push("agent_id");
|
|
10974
|
+
selectParts.push("NULL");
|
|
10975
|
+
colParts.push("aspect_id");
|
|
10976
|
+
if (hasRelConfidence && hasDepConfidence) {
|
|
10977
|
+
selectParts.push("confidence");
|
|
10978
|
+
colParts.push("confidence");
|
|
10979
|
+
}
|
|
10980
|
+
if (hasDepReason) {
|
|
10981
|
+
selectParts.push("'extracted'");
|
|
10982
|
+
colParts.push("reason");
|
|
10983
|
+
}
|
|
10984
|
+
if (hasDepStatus) {
|
|
10985
|
+
selectParts.push("'active'");
|
|
10986
|
+
colParts.push("status");
|
|
10987
|
+
}
|
|
10988
|
+
if (hasRelUpdated && dep.has("updated_at")) {
|
|
10989
|
+
selectParts.push("updated_at");
|
|
10990
|
+
colParts.push("updated_at");
|
|
10991
|
+
}
|
|
10992
|
+
const selectClause = selectParts.join(", ");
|
|
10993
|
+
const colsClause = colParts.join(", ");
|
|
10994
|
+
db.exec(`INSERT OR IGNORE INTO entity_dependencies (${colsClause})
|
|
10995
|
+
SELECT ${selectClause}
|
|
10996
|
+
FROM relations
|
|
10997
|
+
WHERE source_entity_id IS NOT NULL
|
|
10998
|
+
AND target_entity_id IS NOT NULL
|
|
10999
|
+
AND relation_type IS NOT NULL`);
|
|
11000
|
+
}
|
|
11001
|
+
function addColumnIfMissing21(db, table, column, definition) {
|
|
11002
|
+
const cols = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
11003
|
+
if (cols.some((col) => col.name === column))
|
|
11004
|
+
return;
|
|
11005
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
11006
|
+
}
|
|
11007
|
+
function up86(db) {
|
|
11008
|
+
addColumnIfMissing21(db, "summary_jobs", "content_hash", "TEXT");
|
|
11009
|
+
db.exec(`
|
|
11010
|
+
CREATE INDEX IF NOT EXISTS idx_summary_jobs_agent_session_content_hash
|
|
11011
|
+
ON summary_jobs(agent_id, session_key, content_hash)
|
|
11012
|
+
`);
|
|
11013
|
+
}
|
|
10769
11014
|
var MIGRATIONS = [
|
|
10770
11015
|
{
|
|
10771
11016
|
version: 1,
|
|
@@ -11430,6 +11675,45 @@ var MIGRATIONS = [
|
|
|
11430
11675
|
{ table: "skill_invocations", column: "tool_use_id" }
|
|
11431
11676
|
]
|
|
11432
11677
|
}
|
|
11678
|
+
},
|
|
11679
|
+
{
|
|
11680
|
+
version: 83,
|
|
11681
|
+
name: "memory-lifecycle-repair",
|
|
11682
|
+
up: up83,
|
|
11683
|
+
artifacts: {
|
|
11684
|
+
tables: ["transcript_capture_jobs", "aggregate_evidence_sources", "entity_dependencies"],
|
|
11685
|
+
columns: [
|
|
11686
|
+
{ table: "documents", column: "agent_id" },
|
|
11687
|
+
{ table: "documents", column: "project" },
|
|
11688
|
+
{ table: "memories", column: "superseded_by" },
|
|
11689
|
+
{ table: "memories", column: "superseded_at" },
|
|
11690
|
+
{ table: "memories", column: "superseded_reason" }
|
|
11691
|
+
]
|
|
11692
|
+
}
|
|
11693
|
+
},
|
|
11694
|
+
{
|
|
11695
|
+
version: 84,
|
|
11696
|
+
name: "legacy-markdown-import-state",
|
|
11697
|
+
up: up84,
|
|
11698
|
+
artifacts: {
|
|
11699
|
+
tables: ["legacy_markdown_imports", "legacy_markdown_chunks"]
|
|
11700
|
+
}
|
|
11701
|
+
},
|
|
11702
|
+
{
|
|
11703
|
+
version: 85,
|
|
11704
|
+
name: "backfill-relations-to-dependencies",
|
|
11705
|
+
up: up85,
|
|
11706
|
+
artifacts: {
|
|
11707
|
+
tables: ["entity_dependencies"]
|
|
11708
|
+
}
|
|
11709
|
+
},
|
|
11710
|
+
{
|
|
11711
|
+
version: 86,
|
|
11712
|
+
name: "summary-jobs-content-hash",
|
|
11713
|
+
up: up86,
|
|
11714
|
+
artifacts: {
|
|
11715
|
+
columns: [{ table: "summary_jobs", column: "content_hash" }]
|
|
11716
|
+
}
|
|
11433
11717
|
}
|
|
11434
11718
|
];
|
|
11435
11719
|
var LATEST_SCHEMA_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
|
|
@@ -18780,7 +19064,7 @@ function memoriesFtsNeedsTokenizerRepair2(sql) {
|
|
|
18780
19064
|
return true;
|
|
18781
19065
|
return !normalized.includes(`tokenize='${MEMORIES_FTS_TOKENIZER2}'`);
|
|
18782
19066
|
}
|
|
18783
|
-
function
|
|
19067
|
+
function up87(db) {
|
|
18784
19068
|
db.exec(`
|
|
18785
19069
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
18786
19070
|
version INTEGER PRIMARY KEY,
|
|
@@ -18869,31 +19153,31 @@ function up83(db) {
|
|
|
18869
19153
|
} catch {}
|
|
18870
19154
|
createMemoriesFts2(db);
|
|
18871
19155
|
}
|
|
18872
|
-
function
|
|
19156
|
+
function hasColumn13(db, table, column) {
|
|
18873
19157
|
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
18874
19158
|
return rows.some((r) => r.name === column);
|
|
18875
19159
|
}
|
|
18876
|
-
function
|
|
18877
|
-
if (!
|
|
19160
|
+
function addColumnIfMissing22(db, table, column, definition) {
|
|
19161
|
+
if (!hasColumn13(db, table, column)) {
|
|
18878
19162
|
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
18879
19163
|
}
|
|
18880
19164
|
}
|
|
18881
19165
|
function up210(db) {
|
|
18882
|
-
|
|
18883
|
-
|
|
18884
|
-
|
|
18885
|
-
|
|
18886
|
-
|
|
18887
|
-
|
|
18888
|
-
|
|
18889
|
-
|
|
18890
|
-
|
|
18891
|
-
|
|
18892
|
-
|
|
18893
|
-
|
|
18894
|
-
|
|
18895
|
-
|
|
18896
|
-
|
|
19166
|
+
addColumnIfMissing22(db, "memories", "content_hash", "TEXT");
|
|
19167
|
+
addColumnIfMissing22(db, "memories", "normalized_content", "TEXT");
|
|
19168
|
+
addColumnIfMissing22(db, "memories", "is_deleted", "INTEGER DEFAULT 0");
|
|
19169
|
+
addColumnIfMissing22(db, "memories", "deleted_at", "TEXT");
|
|
19170
|
+
addColumnIfMissing22(db, "memories", "extraction_status", "TEXT DEFAULT 'none'");
|
|
19171
|
+
addColumnIfMissing22(db, "memories", "embedding_model", "TEXT");
|
|
19172
|
+
addColumnIfMissing22(db, "memories", "extraction_model", "TEXT");
|
|
19173
|
+
addColumnIfMissing22(db, "memories", "update_count", "INTEGER DEFAULT 0");
|
|
19174
|
+
addColumnIfMissing22(db, "memories", "who", "TEXT");
|
|
19175
|
+
addColumnIfMissing22(db, "memories", "why", "TEXT");
|
|
19176
|
+
addColumnIfMissing22(db, "memories", "project", "TEXT");
|
|
19177
|
+
addColumnIfMissing22(db, "memories", "pinned", "INTEGER DEFAULT 0");
|
|
19178
|
+
addColumnIfMissing22(db, "memories", "importance", "REAL DEFAULT 0.5");
|
|
19179
|
+
addColumnIfMissing22(db, "memories", "last_accessed", "TEXT");
|
|
19180
|
+
addColumnIfMissing22(db, "memories", "access_count", "INTEGER DEFAULT 0");
|
|
18897
19181
|
db.exec(`
|
|
18898
19182
|
CREATE TABLE IF NOT EXISTS memory_history (
|
|
18899
19183
|
id TEXT PRIMARY KEY,
|
|
@@ -18989,7 +19273,7 @@ function up210(db) {
|
|
|
18989
19273
|
ON memory_entity_mentions(entity_id);
|
|
18990
19274
|
`);
|
|
18991
19275
|
}
|
|
18992
|
-
function
|
|
19276
|
+
function addColumnIfMissing23(db, table, column, definition) {
|
|
18993
19277
|
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
18994
19278
|
if (rows.some((r) => r.name === column))
|
|
18995
19279
|
return false;
|
|
@@ -18997,8 +19281,8 @@ function addColumnIfMissing22(db, table, column, definition) {
|
|
|
18997
19281
|
return true;
|
|
18998
19282
|
}
|
|
18999
19283
|
function up310(db) {
|
|
19000
|
-
|
|
19001
|
-
|
|
19284
|
+
addColumnIfMissing23(db, "memories", "why", "TEXT");
|
|
19285
|
+
addColumnIfMissing23(db, "memories", "project", "TEXT");
|
|
19002
19286
|
db.exec(`DROP INDEX IF EXISTS idx_memories_content_hash`);
|
|
19003
19287
|
db.exec(`
|
|
19004
19288
|
UPDATE memories
|
|
@@ -19155,7 +19439,7 @@ function up710(db) {
|
|
|
19155
19439
|
db.exec("ALTER TABLE memory_jobs ADD COLUMN document_id TEXT");
|
|
19156
19440
|
}
|
|
19157
19441
|
}
|
|
19158
|
-
function
|
|
19442
|
+
function up88(db) {
|
|
19159
19443
|
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='embeddings'").all();
|
|
19160
19444
|
if (tables.length === 0)
|
|
19161
19445
|
return;
|
|
@@ -20424,7 +20708,7 @@ function up492(db) {
|
|
|
20424
20708
|
);
|
|
20425
20709
|
`);
|
|
20426
20710
|
}
|
|
20427
|
-
function
|
|
20711
|
+
function hasTable4(db, name) {
|
|
20428
20712
|
return db.prepare(`SELECT name
|
|
20429
20713
|
FROM sqlite_master
|
|
20430
20714
|
WHERE type = 'table' AND name = ?
|
|
@@ -20454,7 +20738,7 @@ function up502(db) {
|
|
|
20454
20738
|
CREATE INDEX IF NOT EXISTS idx_entity_dependency_history_created
|
|
20455
20739
|
ON entity_dependency_history(created_at DESC);
|
|
20456
20740
|
`);
|
|
20457
|
-
if (!
|
|
20741
|
+
if (!hasTable4(db, "entity_dependencies"))
|
|
20458
20742
|
return;
|
|
20459
20743
|
db.exec("DROP TRIGGER IF EXISTS trg_entity_dependencies_related_to_reason_insert");
|
|
20460
20744
|
db.exec("DROP TRIGGER IF EXISTS trg_entity_dependencies_related_to_reason_update");
|
|
@@ -21464,11 +21748,256 @@ function up822(db) {
|
|
|
21464
21748
|
`);
|
|
21465
21749
|
db.exec("CREATE INDEX IF NOT EXISTS idx_skill_inv_harness ON skill_invocations(harness, created_at)");
|
|
21466
21750
|
}
|
|
21751
|
+
var DEPENDENCY_TYPES2 = new Set([
|
|
21752
|
+
"uses",
|
|
21753
|
+
"requires",
|
|
21754
|
+
"owned_by",
|
|
21755
|
+
"owns",
|
|
21756
|
+
"blocks",
|
|
21757
|
+
"informs",
|
|
21758
|
+
"maintains",
|
|
21759
|
+
"implements",
|
|
21760
|
+
"built",
|
|
21761
|
+
"depends_on",
|
|
21762
|
+
"related_to",
|
|
21763
|
+
"learned_from",
|
|
21764
|
+
"teaches",
|
|
21765
|
+
"knows",
|
|
21766
|
+
"assumes",
|
|
21767
|
+
"supports_claim",
|
|
21768
|
+
"authored_by",
|
|
21769
|
+
"links_to",
|
|
21770
|
+
"contains",
|
|
21771
|
+
"contains_note",
|
|
21772
|
+
"contradicts",
|
|
21773
|
+
"supersedes",
|
|
21774
|
+
"part_of",
|
|
21775
|
+
"produced_artifact",
|
|
21776
|
+
"precedes",
|
|
21777
|
+
"follows",
|
|
21778
|
+
"triggers",
|
|
21779
|
+
"may_execute",
|
|
21780
|
+
"requires_approval_from",
|
|
21781
|
+
"impacts",
|
|
21782
|
+
"produces",
|
|
21783
|
+
"consumes"
|
|
21784
|
+
]);
|
|
21785
|
+
function sqlStringList2(values) {
|
|
21786
|
+
return [...values].map((value) => `'${value}'`).join(", ");
|
|
21787
|
+
}
|
|
21788
|
+
function hasTable32(db, table) {
|
|
21789
|
+
return Boolean(db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table));
|
|
21790
|
+
}
|
|
21791
|
+
function hasColumn122(db, table, column) {
|
|
21792
|
+
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
21793
|
+
return rows.some((row) => row.name === column);
|
|
21794
|
+
}
|
|
21795
|
+
function addColumnIfMissing202(db, table, column, definition) {
|
|
21796
|
+
if (!hasColumn122(db, table, column))
|
|
21797
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
21798
|
+
}
|
|
21799
|
+
function documentScopeColumnsPreservingExisting2(db) {
|
|
21800
|
+
const preserveAgentId = hasColumn122(db, "documents", "agent_id");
|
|
21801
|
+
const preserveProject = hasColumn122(db, "documents", "project");
|
|
21802
|
+
if (preserveAgentId) {
|
|
21803
|
+
db.exec(`
|
|
21804
|
+
CREATE TEMP TABLE __signet_doc_agent_guard AS
|
|
21805
|
+
SELECT id, agent_id FROM documents
|
|
21806
|
+
WHERE NULLIF(TRIM(agent_id), '') IS NOT NULL
|
|
21807
|
+
AND NULLIF(TRIM(agent_id), '') <> 'default'
|
|
21808
|
+
`);
|
|
21809
|
+
}
|
|
21810
|
+
if (preserveProject) {
|
|
21811
|
+
db.exec(`
|
|
21812
|
+
CREATE TEMP TABLE __signet_doc_project_guard AS
|
|
21813
|
+
SELECT id, project FROM documents
|
|
21814
|
+
WHERE NULLIF(TRIM(project), '') IS NOT NULL
|
|
21815
|
+
`);
|
|
21816
|
+
}
|
|
21817
|
+
try {
|
|
21818
|
+
up802(db);
|
|
21819
|
+
if (preserveAgentId) {
|
|
21820
|
+
db.exec(`
|
|
21821
|
+
UPDATE documents
|
|
21822
|
+
SET agent_id = (SELECT agent_id FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
21823
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
21824
|
+
`);
|
|
21825
|
+
}
|
|
21826
|
+
if (preserveProject) {
|
|
21827
|
+
db.exec(`
|
|
21828
|
+
UPDATE documents
|
|
21829
|
+
SET project = (SELECT project FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
21830
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
21831
|
+
`);
|
|
21832
|
+
}
|
|
21833
|
+
} finally {
|
|
21834
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_agent_guard");
|
|
21835
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_project_guard");
|
|
21836
|
+
}
|
|
21837
|
+
}
|
|
21838
|
+
function up832(db) {
|
|
21839
|
+
up792(db);
|
|
21840
|
+
if (hasTable32(db, "documents")) {
|
|
21841
|
+
documentScopeColumnsPreservingExisting2(db);
|
|
21842
|
+
}
|
|
21843
|
+
up812(db);
|
|
21844
|
+
addColumnIfMissing202(db, "memories", "superseded_by", "TEXT");
|
|
21845
|
+
addColumnIfMissing202(db, "memories", "superseded_at", "TEXT");
|
|
21846
|
+
addColumnIfMissing202(db, "memories", "superseded_reason", "TEXT");
|
|
21847
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded_by ON memories(superseded_by)");
|
|
21848
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_active_supersession ON memories(is_deleted, superseded_by)");
|
|
21849
|
+
if (!hasTable32(db, "relations") || !hasTable32(db, "entity_dependencies"))
|
|
21850
|
+
return;
|
|
21851
|
+
addColumnIfMissing202(db, "entity_dependencies", "confidence", "REAL");
|
|
21852
|
+
addColumnIfMissing202(db, "entity_dependencies", "reason", "TEXT");
|
|
21853
|
+
addColumnIfMissing202(db, "entity_dependencies", "source_id", "TEXT");
|
|
21854
|
+
addColumnIfMissing202(db, "entity_dependencies", "source_kind", "TEXT");
|
|
21855
|
+
addColumnIfMissing202(db, "entity_dependencies", "proposal_evidence", "TEXT NOT NULL DEFAULT '[]'");
|
|
21856
|
+
addColumnIfMissing202(db, "entity_dependencies", "status", "TEXT NOT NULL DEFAULT 'active'");
|
|
21857
|
+
const relationConfidence = hasColumn122(db, "relations", "confidence") ? "r.confidence" : "NULL";
|
|
21858
|
+
const relationUpdatedAt = hasColumn122(db, "relations", "updated_at") ? "r.updated_at" : "r.created_at";
|
|
21859
|
+
const sourceAgentId = hasColumn122(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(src.agent_id), ''), 'default')" : "'default'";
|
|
21860
|
+
const targetAgentId = hasColumn122(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(dst.agent_id), ''), 'default')" : "'default'";
|
|
21861
|
+
db.exec(`
|
|
21862
|
+
INSERT OR IGNORE INTO entity_dependencies (
|
|
21863
|
+
id,
|
|
21864
|
+
source_entity_id,
|
|
21865
|
+
target_entity_id,
|
|
21866
|
+
agent_id,
|
|
21867
|
+
dependency_type,
|
|
21868
|
+
strength,
|
|
21869
|
+
confidence,
|
|
21870
|
+
reason,
|
|
21871
|
+
created_at,
|
|
21872
|
+
updated_at,
|
|
21873
|
+
source_id,
|
|
21874
|
+
source_kind,
|
|
21875
|
+
proposal_evidence,
|
|
21876
|
+
status
|
|
21877
|
+
)
|
|
21878
|
+
SELECT
|
|
21879
|
+
'relation:' || r.id,
|
|
21880
|
+
r.source_entity_id,
|
|
21881
|
+
r.target_entity_id,
|
|
21882
|
+
COALESCE(${sourceAgentId}, ${targetAgentId}, 'default'),
|
|
21883
|
+
CASE WHEN r.relation_type IN (${sqlStringList2(DEPENDENCY_TYPES2)}) THEN r.relation_type ELSE 'related_to' END,
|
|
21884
|
+
MAX(0.1, MIN(1.0, COALESCE(r.strength, 0.5))),
|
|
21885
|
+
MAX(0.1, MIN(1.0, COALESCE(${relationConfidence}, 0.7))),
|
|
21886
|
+
'legacy relation backfill: ' || r.relation_type,
|
|
21887
|
+
COALESCE(r.created_at, datetime('now')),
|
|
21888
|
+
COALESCE(${relationUpdatedAt}, r.created_at, datetime('now')),
|
|
21889
|
+
r.id,
|
|
21890
|
+
'relation',
|
|
21891
|
+
'[]',
|
|
21892
|
+
'active'
|
|
21893
|
+
FROM relations r
|
|
21894
|
+
JOIN entities src ON src.id = r.source_entity_id
|
|
21895
|
+
JOIN entities dst ON dst.id = r.target_entity_id
|
|
21896
|
+
WHERE r.source_entity_id <> r.target_entity_id
|
|
21897
|
+
AND ${sourceAgentId} = ${targetAgentId}
|
|
21898
|
+
`);
|
|
21899
|
+
}
|
|
21900
|
+
function up842(db) {
|
|
21901
|
+
db.exec(`
|
|
21902
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_imports (
|
|
21903
|
+
path TEXT PRIMARY KEY,
|
|
21904
|
+
mtime_ms INTEGER NOT NULL,
|
|
21905
|
+
ctime_ms INTEGER NOT NULL,
|
|
21906
|
+
size INTEGER NOT NULL,
|
|
21907
|
+
content_hash TEXT NOT NULL,
|
|
21908
|
+
importer_version INTEGER NOT NULL,
|
|
21909
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
21910
|
+
last_imported_at TEXT NOT NULL,
|
|
21911
|
+
last_seen_at TEXT NOT NULL,
|
|
21912
|
+
status TEXT NOT NULL DEFAULT 'imported',
|
|
21913
|
+
error TEXT
|
|
21914
|
+
);
|
|
21915
|
+
|
|
21916
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_chunks (
|
|
21917
|
+
file_path TEXT NOT NULL,
|
|
21918
|
+
chunk_hash TEXT NOT NULL,
|
|
21919
|
+
chunk_index INTEGER NOT NULL,
|
|
21920
|
+
memory_id TEXT,
|
|
21921
|
+
source_id TEXT,
|
|
21922
|
+
created_at TEXT NOT NULL,
|
|
21923
|
+
PRIMARY KEY (file_path, chunk_hash)
|
|
21924
|
+
);
|
|
21925
|
+
|
|
21926
|
+
CREATE INDEX IF NOT EXISTS idx_legacy_markdown_chunks_memory_id
|
|
21927
|
+
ON legacy_markdown_chunks(memory_id);
|
|
21928
|
+
`);
|
|
21929
|
+
}
|
|
21930
|
+
function up852(db) {
|
|
21931
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name IN ('relations', 'entity_dependencies')").all();
|
|
21932
|
+
const tableNames = new Set(tables.map((r) => String(r.name)));
|
|
21933
|
+
if (!tableNames.has("relations") || !tableNames.has("entity_dependencies"))
|
|
21934
|
+
return;
|
|
21935
|
+
const relCols = db.prepare("PRAGMA table_info(relations)").all();
|
|
21936
|
+
const depCols = db.prepare("PRAGMA table_info(entity_dependencies)").all();
|
|
21937
|
+
const rel = new Set(relCols.map((c) => String(c.name)));
|
|
21938
|
+
const dep = new Set(depCols.map((c) => String(c.name)));
|
|
21939
|
+
if (!rel.has("source_entity_id") || !rel.has("relation_type"))
|
|
21940
|
+
return;
|
|
21941
|
+
if (!dep.has("source_entity_id") || !dep.has("dependency_type") || !dep.has("agent_id"))
|
|
21942
|
+
return;
|
|
21943
|
+
const hasRelConfidence = rel.has("confidence");
|
|
21944
|
+
const hasRelUpdated = rel.has("updated_at");
|
|
21945
|
+
const hasDepConfidence = dep.has("confidence");
|
|
21946
|
+
const hasDepReason = dep.has("reason");
|
|
21947
|
+
const hasDepStatus = dep.has("status");
|
|
21948
|
+
const selectParts = ["id", "source_entity_id", "target_entity_id"];
|
|
21949
|
+
const colParts = ["id", "source_entity_id", "target_entity_id"];
|
|
21950
|
+
selectParts.push("relation_type");
|
|
21951
|
+
colParts.push("dependency_type");
|
|
21952
|
+
selectParts.push("strength", "created_at");
|
|
21953
|
+
colParts.push("strength", "created_at");
|
|
21954
|
+
selectParts.push("'default'");
|
|
21955
|
+
colParts.push("agent_id");
|
|
21956
|
+
selectParts.push("NULL");
|
|
21957
|
+
colParts.push("aspect_id");
|
|
21958
|
+
if (hasRelConfidence && hasDepConfidence) {
|
|
21959
|
+
selectParts.push("confidence");
|
|
21960
|
+
colParts.push("confidence");
|
|
21961
|
+
}
|
|
21962
|
+
if (hasDepReason) {
|
|
21963
|
+
selectParts.push("'extracted'");
|
|
21964
|
+
colParts.push("reason");
|
|
21965
|
+
}
|
|
21966
|
+
if (hasDepStatus) {
|
|
21967
|
+
selectParts.push("'active'");
|
|
21968
|
+
colParts.push("status");
|
|
21969
|
+
}
|
|
21970
|
+
if (hasRelUpdated && dep.has("updated_at")) {
|
|
21971
|
+
selectParts.push("updated_at");
|
|
21972
|
+
colParts.push("updated_at");
|
|
21973
|
+
}
|
|
21974
|
+
const selectClause = selectParts.join(", ");
|
|
21975
|
+
const colsClause = colParts.join(", ");
|
|
21976
|
+
db.exec(`INSERT OR IGNORE INTO entity_dependencies (${colsClause})
|
|
21977
|
+
SELECT ${selectClause}
|
|
21978
|
+
FROM relations
|
|
21979
|
+
WHERE source_entity_id IS NOT NULL
|
|
21980
|
+
AND target_entity_id IS NOT NULL
|
|
21981
|
+
AND relation_type IS NOT NULL`);
|
|
21982
|
+
}
|
|
21983
|
+
function addColumnIfMissing212(db, table, column, definition) {
|
|
21984
|
+
const cols = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
21985
|
+
if (cols.some((col) => col.name === column))
|
|
21986
|
+
return;
|
|
21987
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
21988
|
+
}
|
|
21989
|
+
function up862(db) {
|
|
21990
|
+
addColumnIfMissing212(db, "summary_jobs", "content_hash", "TEXT");
|
|
21991
|
+
db.exec(`
|
|
21992
|
+
CREATE INDEX IF NOT EXISTS idx_summary_jobs_agent_session_content_hash
|
|
21993
|
+
ON summary_jobs(agent_id, session_key, content_hash)
|
|
21994
|
+
`);
|
|
21995
|
+
}
|
|
21467
21996
|
var MIGRATIONS2 = [
|
|
21468
21997
|
{
|
|
21469
21998
|
version: 1,
|
|
21470
21999
|
name: "baseline",
|
|
21471
|
-
up:
|
|
22000
|
+
up: up87,
|
|
21472
22001
|
artifacts: { tables: ["memories", "conversations", "embeddings"] }
|
|
21473
22002
|
},
|
|
21474
22003
|
{
|
|
@@ -21517,7 +22046,7 @@ var MIGRATIONS2 = [
|
|
|
21517
22046
|
{
|
|
21518
22047
|
version: 8,
|
|
21519
22048
|
name: "embeddings-unique-hash",
|
|
21520
|
-
up:
|
|
22049
|
+
up: up88
|
|
21521
22050
|
},
|
|
21522
22051
|
{
|
|
21523
22052
|
version: 9,
|
|
@@ -22128,6 +22657,45 @@ var MIGRATIONS2 = [
|
|
|
22128
22657
|
{ table: "skill_invocations", column: "tool_use_id" }
|
|
22129
22658
|
]
|
|
22130
22659
|
}
|
|
22660
|
+
},
|
|
22661
|
+
{
|
|
22662
|
+
version: 83,
|
|
22663
|
+
name: "memory-lifecycle-repair",
|
|
22664
|
+
up: up832,
|
|
22665
|
+
artifacts: {
|
|
22666
|
+
tables: ["transcript_capture_jobs", "aggregate_evidence_sources", "entity_dependencies"],
|
|
22667
|
+
columns: [
|
|
22668
|
+
{ table: "documents", column: "agent_id" },
|
|
22669
|
+
{ table: "documents", column: "project" },
|
|
22670
|
+
{ table: "memories", column: "superseded_by" },
|
|
22671
|
+
{ table: "memories", column: "superseded_at" },
|
|
22672
|
+
{ table: "memories", column: "superseded_reason" }
|
|
22673
|
+
]
|
|
22674
|
+
}
|
|
22675
|
+
},
|
|
22676
|
+
{
|
|
22677
|
+
version: 84,
|
|
22678
|
+
name: "legacy-markdown-import-state",
|
|
22679
|
+
up: up842,
|
|
22680
|
+
artifacts: {
|
|
22681
|
+
tables: ["legacy_markdown_imports", "legacy_markdown_chunks"]
|
|
22682
|
+
}
|
|
22683
|
+
},
|
|
22684
|
+
{
|
|
22685
|
+
version: 85,
|
|
22686
|
+
name: "backfill-relations-to-dependencies",
|
|
22687
|
+
up: up852,
|
|
22688
|
+
artifacts: {
|
|
22689
|
+
tables: ["entity_dependencies"]
|
|
22690
|
+
}
|
|
22691
|
+
},
|
|
22692
|
+
{
|
|
22693
|
+
version: 86,
|
|
22694
|
+
name: "summary-jobs-content-hash",
|
|
22695
|
+
up: up862,
|
|
22696
|
+
artifacts: {
|
|
22697
|
+
columns: [{ table: "summary_jobs", column: "content_hash" }]
|
|
22698
|
+
}
|
|
22131
22699
|
}
|
|
22132
22700
|
];
|
|
22133
22701
|
var LATEST_SCHEMA_VERSION2 = MIGRATIONS2[MIGRATIONS2.length - 1]?.version ?? 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signetai/connector-openclaw",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.147.0",
|
|
4
4
|
"description": "Signet connector for OpenClaw - configures workspace and memory hooks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"test": "bun test"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@signetai/connector-base": "0.
|
|
29
|
-
"@signetai/core": "0.
|
|
28
|
+
"@signetai/connector-base": "0.147.0",
|
|
29
|
+
"@signetai/core": "0.147.0",
|
|
30
30
|
"json5": "^2.2.3"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|