@signetai/connector-forge 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
|
@@ -9633,6 +9633,251 @@ function up82(db) {
|
|
|
9633
9633
|
`);
|
|
9634
9634
|
db.exec("CREATE INDEX IF NOT EXISTS idx_skill_inv_harness ON skill_invocations(harness, created_at)");
|
|
9635
9635
|
}
|
|
9636
|
+
var DEPENDENCY_TYPES = new Set([
|
|
9637
|
+
"uses",
|
|
9638
|
+
"requires",
|
|
9639
|
+
"owned_by",
|
|
9640
|
+
"owns",
|
|
9641
|
+
"blocks",
|
|
9642
|
+
"informs",
|
|
9643
|
+
"maintains",
|
|
9644
|
+
"implements",
|
|
9645
|
+
"built",
|
|
9646
|
+
"depends_on",
|
|
9647
|
+
"related_to",
|
|
9648
|
+
"learned_from",
|
|
9649
|
+
"teaches",
|
|
9650
|
+
"knows",
|
|
9651
|
+
"assumes",
|
|
9652
|
+
"supports_claim",
|
|
9653
|
+
"authored_by",
|
|
9654
|
+
"links_to",
|
|
9655
|
+
"contains",
|
|
9656
|
+
"contains_note",
|
|
9657
|
+
"contradicts",
|
|
9658
|
+
"supersedes",
|
|
9659
|
+
"part_of",
|
|
9660
|
+
"produced_artifact",
|
|
9661
|
+
"precedes",
|
|
9662
|
+
"follows",
|
|
9663
|
+
"triggers",
|
|
9664
|
+
"may_execute",
|
|
9665
|
+
"requires_approval_from",
|
|
9666
|
+
"impacts",
|
|
9667
|
+
"produces",
|
|
9668
|
+
"consumes"
|
|
9669
|
+
]);
|
|
9670
|
+
function sqlStringList(values) {
|
|
9671
|
+
return [...values].map((value) => `'${value}'`).join(", ");
|
|
9672
|
+
}
|
|
9673
|
+
function hasTable3(db, table) {
|
|
9674
|
+
return Boolean(db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table));
|
|
9675
|
+
}
|
|
9676
|
+
function hasColumn12(db, table, column) {
|
|
9677
|
+
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
9678
|
+
return rows.some((row) => row.name === column);
|
|
9679
|
+
}
|
|
9680
|
+
function addColumnIfMissing20(db, table, column, definition) {
|
|
9681
|
+
if (!hasColumn12(db, table, column))
|
|
9682
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
9683
|
+
}
|
|
9684
|
+
function documentScopeColumnsPreservingExisting(db) {
|
|
9685
|
+
const preserveAgentId = hasColumn12(db, "documents", "agent_id");
|
|
9686
|
+
const preserveProject = hasColumn12(db, "documents", "project");
|
|
9687
|
+
if (preserveAgentId) {
|
|
9688
|
+
db.exec(`
|
|
9689
|
+
CREATE TEMP TABLE __signet_doc_agent_guard AS
|
|
9690
|
+
SELECT id, agent_id FROM documents
|
|
9691
|
+
WHERE NULLIF(TRIM(agent_id), '') IS NOT NULL
|
|
9692
|
+
AND NULLIF(TRIM(agent_id), '') <> 'default'
|
|
9693
|
+
`);
|
|
9694
|
+
}
|
|
9695
|
+
if (preserveProject) {
|
|
9696
|
+
db.exec(`
|
|
9697
|
+
CREATE TEMP TABLE __signet_doc_project_guard AS
|
|
9698
|
+
SELECT id, project FROM documents
|
|
9699
|
+
WHERE NULLIF(TRIM(project), '') IS NOT NULL
|
|
9700
|
+
`);
|
|
9701
|
+
}
|
|
9702
|
+
try {
|
|
9703
|
+
up80(db);
|
|
9704
|
+
if (preserveAgentId) {
|
|
9705
|
+
db.exec(`
|
|
9706
|
+
UPDATE documents
|
|
9707
|
+
SET agent_id = (SELECT agent_id FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
9708
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
9709
|
+
`);
|
|
9710
|
+
}
|
|
9711
|
+
if (preserveProject) {
|
|
9712
|
+
db.exec(`
|
|
9713
|
+
UPDATE documents
|
|
9714
|
+
SET project = (SELECT project FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
9715
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
9716
|
+
`);
|
|
9717
|
+
}
|
|
9718
|
+
} finally {
|
|
9719
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_agent_guard");
|
|
9720
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_project_guard");
|
|
9721
|
+
}
|
|
9722
|
+
}
|
|
9723
|
+
function up83(db) {
|
|
9724
|
+
up79(db);
|
|
9725
|
+
if (hasTable3(db, "documents")) {
|
|
9726
|
+
documentScopeColumnsPreservingExisting(db);
|
|
9727
|
+
}
|
|
9728
|
+
up81(db);
|
|
9729
|
+
addColumnIfMissing20(db, "memories", "superseded_by", "TEXT");
|
|
9730
|
+
addColumnIfMissing20(db, "memories", "superseded_at", "TEXT");
|
|
9731
|
+
addColumnIfMissing20(db, "memories", "superseded_reason", "TEXT");
|
|
9732
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded_by ON memories(superseded_by)");
|
|
9733
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_active_supersession ON memories(is_deleted, superseded_by)");
|
|
9734
|
+
if (!hasTable3(db, "relations") || !hasTable3(db, "entity_dependencies"))
|
|
9735
|
+
return;
|
|
9736
|
+
addColumnIfMissing20(db, "entity_dependencies", "confidence", "REAL");
|
|
9737
|
+
addColumnIfMissing20(db, "entity_dependencies", "reason", "TEXT");
|
|
9738
|
+
addColumnIfMissing20(db, "entity_dependencies", "source_id", "TEXT");
|
|
9739
|
+
addColumnIfMissing20(db, "entity_dependencies", "source_kind", "TEXT");
|
|
9740
|
+
addColumnIfMissing20(db, "entity_dependencies", "proposal_evidence", "TEXT NOT NULL DEFAULT '[]'");
|
|
9741
|
+
addColumnIfMissing20(db, "entity_dependencies", "status", "TEXT NOT NULL DEFAULT 'active'");
|
|
9742
|
+
const relationConfidence = hasColumn12(db, "relations", "confidence") ? "r.confidence" : "NULL";
|
|
9743
|
+
const relationUpdatedAt = hasColumn12(db, "relations", "updated_at") ? "r.updated_at" : "r.created_at";
|
|
9744
|
+
const sourceAgentId = hasColumn12(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(src.agent_id), ''), 'default')" : "'default'";
|
|
9745
|
+
const targetAgentId = hasColumn12(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(dst.agent_id), ''), 'default')" : "'default'";
|
|
9746
|
+
db.exec(`
|
|
9747
|
+
INSERT OR IGNORE INTO entity_dependencies (
|
|
9748
|
+
id,
|
|
9749
|
+
source_entity_id,
|
|
9750
|
+
target_entity_id,
|
|
9751
|
+
agent_id,
|
|
9752
|
+
dependency_type,
|
|
9753
|
+
strength,
|
|
9754
|
+
confidence,
|
|
9755
|
+
reason,
|
|
9756
|
+
created_at,
|
|
9757
|
+
updated_at,
|
|
9758
|
+
source_id,
|
|
9759
|
+
source_kind,
|
|
9760
|
+
proposal_evidence,
|
|
9761
|
+
status
|
|
9762
|
+
)
|
|
9763
|
+
SELECT
|
|
9764
|
+
'relation:' || r.id,
|
|
9765
|
+
r.source_entity_id,
|
|
9766
|
+
r.target_entity_id,
|
|
9767
|
+
COALESCE(${sourceAgentId}, ${targetAgentId}, 'default'),
|
|
9768
|
+
CASE WHEN r.relation_type IN (${sqlStringList(DEPENDENCY_TYPES)}) THEN r.relation_type ELSE 'related_to' END,
|
|
9769
|
+
MAX(0.1, MIN(1.0, COALESCE(r.strength, 0.5))),
|
|
9770
|
+
MAX(0.1, MIN(1.0, COALESCE(${relationConfidence}, 0.7))),
|
|
9771
|
+
'legacy relation backfill: ' || r.relation_type,
|
|
9772
|
+
COALESCE(r.created_at, datetime('now')),
|
|
9773
|
+
COALESCE(${relationUpdatedAt}, r.created_at, datetime('now')),
|
|
9774
|
+
r.id,
|
|
9775
|
+
'relation',
|
|
9776
|
+
'[]',
|
|
9777
|
+
'active'
|
|
9778
|
+
FROM relations r
|
|
9779
|
+
JOIN entities src ON src.id = r.source_entity_id
|
|
9780
|
+
JOIN entities dst ON dst.id = r.target_entity_id
|
|
9781
|
+
WHERE r.source_entity_id <> r.target_entity_id
|
|
9782
|
+
AND ${sourceAgentId} = ${targetAgentId}
|
|
9783
|
+
`);
|
|
9784
|
+
}
|
|
9785
|
+
function up84(db) {
|
|
9786
|
+
db.exec(`
|
|
9787
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_imports (
|
|
9788
|
+
path TEXT PRIMARY KEY,
|
|
9789
|
+
mtime_ms INTEGER NOT NULL,
|
|
9790
|
+
ctime_ms INTEGER NOT NULL,
|
|
9791
|
+
size INTEGER NOT NULL,
|
|
9792
|
+
content_hash TEXT NOT NULL,
|
|
9793
|
+
importer_version INTEGER NOT NULL,
|
|
9794
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
9795
|
+
last_imported_at TEXT NOT NULL,
|
|
9796
|
+
last_seen_at TEXT NOT NULL,
|
|
9797
|
+
status TEXT NOT NULL DEFAULT 'imported',
|
|
9798
|
+
error TEXT
|
|
9799
|
+
);
|
|
9800
|
+
|
|
9801
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_chunks (
|
|
9802
|
+
file_path TEXT NOT NULL,
|
|
9803
|
+
chunk_hash TEXT NOT NULL,
|
|
9804
|
+
chunk_index INTEGER NOT NULL,
|
|
9805
|
+
memory_id TEXT,
|
|
9806
|
+
source_id TEXT,
|
|
9807
|
+
created_at TEXT NOT NULL,
|
|
9808
|
+
PRIMARY KEY (file_path, chunk_hash)
|
|
9809
|
+
);
|
|
9810
|
+
|
|
9811
|
+
CREATE INDEX IF NOT EXISTS idx_legacy_markdown_chunks_memory_id
|
|
9812
|
+
ON legacy_markdown_chunks(memory_id);
|
|
9813
|
+
`);
|
|
9814
|
+
}
|
|
9815
|
+
function up85(db) {
|
|
9816
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name IN ('relations', 'entity_dependencies')").all();
|
|
9817
|
+
const tableNames = new Set(tables.map((r) => String(r.name)));
|
|
9818
|
+
if (!tableNames.has("relations") || !tableNames.has("entity_dependencies"))
|
|
9819
|
+
return;
|
|
9820
|
+
const relCols = db.prepare("PRAGMA table_info(relations)").all();
|
|
9821
|
+
const depCols = db.prepare("PRAGMA table_info(entity_dependencies)").all();
|
|
9822
|
+
const rel = new Set(relCols.map((c) => String(c.name)));
|
|
9823
|
+
const dep = new Set(depCols.map((c) => String(c.name)));
|
|
9824
|
+
if (!rel.has("source_entity_id") || !rel.has("relation_type"))
|
|
9825
|
+
return;
|
|
9826
|
+
if (!dep.has("source_entity_id") || !dep.has("dependency_type") || !dep.has("agent_id"))
|
|
9827
|
+
return;
|
|
9828
|
+
const hasRelConfidence = rel.has("confidence");
|
|
9829
|
+
const hasRelUpdated = rel.has("updated_at");
|
|
9830
|
+
const hasDepConfidence = dep.has("confidence");
|
|
9831
|
+
const hasDepReason = dep.has("reason");
|
|
9832
|
+
const hasDepStatus = dep.has("status");
|
|
9833
|
+
const selectParts = ["id", "source_entity_id", "target_entity_id"];
|
|
9834
|
+
const colParts = ["id", "source_entity_id", "target_entity_id"];
|
|
9835
|
+
selectParts.push("relation_type");
|
|
9836
|
+
colParts.push("dependency_type");
|
|
9837
|
+
selectParts.push("strength", "created_at");
|
|
9838
|
+
colParts.push("strength", "created_at");
|
|
9839
|
+
selectParts.push("'default'");
|
|
9840
|
+
colParts.push("agent_id");
|
|
9841
|
+
selectParts.push("NULL");
|
|
9842
|
+
colParts.push("aspect_id");
|
|
9843
|
+
if (hasRelConfidence && hasDepConfidence) {
|
|
9844
|
+
selectParts.push("confidence");
|
|
9845
|
+
colParts.push("confidence");
|
|
9846
|
+
}
|
|
9847
|
+
if (hasDepReason) {
|
|
9848
|
+
selectParts.push("'extracted'");
|
|
9849
|
+
colParts.push("reason");
|
|
9850
|
+
}
|
|
9851
|
+
if (hasDepStatus) {
|
|
9852
|
+
selectParts.push("'active'");
|
|
9853
|
+
colParts.push("status");
|
|
9854
|
+
}
|
|
9855
|
+
if (hasRelUpdated && dep.has("updated_at")) {
|
|
9856
|
+
selectParts.push("updated_at");
|
|
9857
|
+
colParts.push("updated_at");
|
|
9858
|
+
}
|
|
9859
|
+
const selectClause = selectParts.join(", ");
|
|
9860
|
+
const colsClause = colParts.join(", ");
|
|
9861
|
+
db.exec(`INSERT OR IGNORE INTO entity_dependencies (${colsClause})
|
|
9862
|
+
SELECT ${selectClause}
|
|
9863
|
+
FROM relations
|
|
9864
|
+
WHERE source_entity_id IS NOT NULL
|
|
9865
|
+
AND target_entity_id IS NOT NULL
|
|
9866
|
+
AND relation_type IS NOT NULL`);
|
|
9867
|
+
}
|
|
9868
|
+
function addColumnIfMissing21(db, table, column, definition) {
|
|
9869
|
+
const cols = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
9870
|
+
if (cols.some((col) => col.name === column))
|
|
9871
|
+
return;
|
|
9872
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
9873
|
+
}
|
|
9874
|
+
function up86(db) {
|
|
9875
|
+
addColumnIfMissing21(db, "summary_jobs", "content_hash", "TEXT");
|
|
9876
|
+
db.exec(`
|
|
9877
|
+
CREATE INDEX IF NOT EXISTS idx_summary_jobs_agent_session_content_hash
|
|
9878
|
+
ON summary_jobs(agent_id, session_key, content_hash)
|
|
9879
|
+
`);
|
|
9880
|
+
}
|
|
9636
9881
|
var MIGRATIONS = [
|
|
9637
9882
|
{
|
|
9638
9883
|
version: 1,
|
|
@@ -10297,6 +10542,45 @@ var MIGRATIONS = [
|
|
|
10297
10542
|
{ table: "skill_invocations", column: "tool_use_id" }
|
|
10298
10543
|
]
|
|
10299
10544
|
}
|
|
10545
|
+
},
|
|
10546
|
+
{
|
|
10547
|
+
version: 83,
|
|
10548
|
+
name: "memory-lifecycle-repair",
|
|
10549
|
+
up: up83,
|
|
10550
|
+
artifacts: {
|
|
10551
|
+
tables: ["transcript_capture_jobs", "aggregate_evidence_sources", "entity_dependencies"],
|
|
10552
|
+
columns: [
|
|
10553
|
+
{ table: "documents", column: "agent_id" },
|
|
10554
|
+
{ table: "documents", column: "project" },
|
|
10555
|
+
{ table: "memories", column: "superseded_by" },
|
|
10556
|
+
{ table: "memories", column: "superseded_at" },
|
|
10557
|
+
{ table: "memories", column: "superseded_reason" }
|
|
10558
|
+
]
|
|
10559
|
+
}
|
|
10560
|
+
},
|
|
10561
|
+
{
|
|
10562
|
+
version: 84,
|
|
10563
|
+
name: "legacy-markdown-import-state",
|
|
10564
|
+
up: up84,
|
|
10565
|
+
artifacts: {
|
|
10566
|
+
tables: ["legacy_markdown_imports", "legacy_markdown_chunks"]
|
|
10567
|
+
}
|
|
10568
|
+
},
|
|
10569
|
+
{
|
|
10570
|
+
version: 85,
|
|
10571
|
+
name: "backfill-relations-to-dependencies",
|
|
10572
|
+
up: up85,
|
|
10573
|
+
artifacts: {
|
|
10574
|
+
tables: ["entity_dependencies"]
|
|
10575
|
+
}
|
|
10576
|
+
},
|
|
10577
|
+
{
|
|
10578
|
+
version: 86,
|
|
10579
|
+
name: "summary-jobs-content-hash",
|
|
10580
|
+
up: up86,
|
|
10581
|
+
artifacts: {
|
|
10582
|
+
columns: [{ table: "summary_jobs", column: "content_hash" }]
|
|
10583
|
+
}
|
|
10300
10584
|
}
|
|
10301
10585
|
];
|
|
10302
10586
|
var LATEST_SCHEMA_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
|
|
@@ -17696,7 +17980,7 @@ function memoriesFtsNeedsTokenizerRepair2(sql) {
|
|
|
17696
17980
|
return true;
|
|
17697
17981
|
return !normalized.includes(`tokenize='${MEMORIES_FTS_TOKENIZER2}'`);
|
|
17698
17982
|
}
|
|
17699
|
-
function
|
|
17983
|
+
function up87(db) {
|
|
17700
17984
|
db.exec(`
|
|
17701
17985
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
17702
17986
|
version INTEGER PRIMARY KEY,
|
|
@@ -17785,31 +18069,31 @@ function up83(db) {
|
|
|
17785
18069
|
} catch {}
|
|
17786
18070
|
createMemoriesFts2(db);
|
|
17787
18071
|
}
|
|
17788
|
-
function
|
|
18072
|
+
function hasColumn13(db, table, column) {
|
|
17789
18073
|
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
17790
18074
|
return rows.some((r) => r.name === column);
|
|
17791
18075
|
}
|
|
17792
|
-
function
|
|
17793
|
-
if (!
|
|
18076
|
+
function addColumnIfMissing22(db, table, column, definition) {
|
|
18077
|
+
if (!hasColumn13(db, table, column)) {
|
|
17794
18078
|
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
17795
18079
|
}
|
|
17796
18080
|
}
|
|
17797
18081
|
function up210(db) {
|
|
17798
|
-
|
|
17799
|
-
|
|
17800
|
-
|
|
17801
|
-
|
|
17802
|
-
|
|
17803
|
-
|
|
17804
|
-
|
|
17805
|
-
|
|
17806
|
-
|
|
17807
|
-
|
|
17808
|
-
|
|
17809
|
-
|
|
17810
|
-
|
|
17811
|
-
|
|
17812
|
-
|
|
18082
|
+
addColumnIfMissing22(db, "memories", "content_hash", "TEXT");
|
|
18083
|
+
addColumnIfMissing22(db, "memories", "normalized_content", "TEXT");
|
|
18084
|
+
addColumnIfMissing22(db, "memories", "is_deleted", "INTEGER DEFAULT 0");
|
|
18085
|
+
addColumnIfMissing22(db, "memories", "deleted_at", "TEXT");
|
|
18086
|
+
addColumnIfMissing22(db, "memories", "extraction_status", "TEXT DEFAULT 'none'");
|
|
18087
|
+
addColumnIfMissing22(db, "memories", "embedding_model", "TEXT");
|
|
18088
|
+
addColumnIfMissing22(db, "memories", "extraction_model", "TEXT");
|
|
18089
|
+
addColumnIfMissing22(db, "memories", "update_count", "INTEGER DEFAULT 0");
|
|
18090
|
+
addColumnIfMissing22(db, "memories", "who", "TEXT");
|
|
18091
|
+
addColumnIfMissing22(db, "memories", "why", "TEXT");
|
|
18092
|
+
addColumnIfMissing22(db, "memories", "project", "TEXT");
|
|
18093
|
+
addColumnIfMissing22(db, "memories", "pinned", "INTEGER DEFAULT 0");
|
|
18094
|
+
addColumnIfMissing22(db, "memories", "importance", "REAL DEFAULT 0.5");
|
|
18095
|
+
addColumnIfMissing22(db, "memories", "last_accessed", "TEXT");
|
|
18096
|
+
addColumnIfMissing22(db, "memories", "access_count", "INTEGER DEFAULT 0");
|
|
17813
18097
|
db.exec(`
|
|
17814
18098
|
CREATE TABLE IF NOT EXISTS memory_history (
|
|
17815
18099
|
id TEXT PRIMARY KEY,
|
|
@@ -17905,7 +18189,7 @@ function up210(db) {
|
|
|
17905
18189
|
ON memory_entity_mentions(entity_id);
|
|
17906
18190
|
`);
|
|
17907
18191
|
}
|
|
17908
|
-
function
|
|
18192
|
+
function addColumnIfMissing23(db, table, column, definition) {
|
|
17909
18193
|
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
17910
18194
|
if (rows.some((r) => r.name === column))
|
|
17911
18195
|
return false;
|
|
@@ -17913,8 +18197,8 @@ function addColumnIfMissing22(db, table, column, definition) {
|
|
|
17913
18197
|
return true;
|
|
17914
18198
|
}
|
|
17915
18199
|
function up310(db) {
|
|
17916
|
-
|
|
17917
|
-
|
|
18200
|
+
addColumnIfMissing23(db, "memories", "why", "TEXT");
|
|
18201
|
+
addColumnIfMissing23(db, "memories", "project", "TEXT");
|
|
17918
18202
|
db.exec(`DROP INDEX IF EXISTS idx_memories_content_hash`);
|
|
17919
18203
|
db.exec(`
|
|
17920
18204
|
UPDATE memories
|
|
@@ -18071,7 +18355,7 @@ function up710(db) {
|
|
|
18071
18355
|
db.exec("ALTER TABLE memory_jobs ADD COLUMN document_id TEXT");
|
|
18072
18356
|
}
|
|
18073
18357
|
}
|
|
18074
|
-
function
|
|
18358
|
+
function up88(db) {
|
|
18075
18359
|
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='embeddings'").all();
|
|
18076
18360
|
if (tables.length === 0)
|
|
18077
18361
|
return;
|
|
@@ -19340,7 +19624,7 @@ function up492(db) {
|
|
|
19340
19624
|
);
|
|
19341
19625
|
`);
|
|
19342
19626
|
}
|
|
19343
|
-
function
|
|
19627
|
+
function hasTable4(db, name) {
|
|
19344
19628
|
return db.prepare(`SELECT name
|
|
19345
19629
|
FROM sqlite_master
|
|
19346
19630
|
WHERE type = 'table' AND name = ?
|
|
@@ -19370,7 +19654,7 @@ function up502(db) {
|
|
|
19370
19654
|
CREATE INDEX IF NOT EXISTS idx_entity_dependency_history_created
|
|
19371
19655
|
ON entity_dependency_history(created_at DESC);
|
|
19372
19656
|
`);
|
|
19373
|
-
if (!
|
|
19657
|
+
if (!hasTable4(db, "entity_dependencies"))
|
|
19374
19658
|
return;
|
|
19375
19659
|
db.exec("DROP TRIGGER IF EXISTS trg_entity_dependencies_related_to_reason_insert");
|
|
19376
19660
|
db.exec("DROP TRIGGER IF EXISTS trg_entity_dependencies_related_to_reason_update");
|
|
@@ -20380,11 +20664,256 @@ function up822(db) {
|
|
|
20380
20664
|
`);
|
|
20381
20665
|
db.exec("CREATE INDEX IF NOT EXISTS idx_skill_inv_harness ON skill_invocations(harness, created_at)");
|
|
20382
20666
|
}
|
|
20667
|
+
var DEPENDENCY_TYPES2 = new Set([
|
|
20668
|
+
"uses",
|
|
20669
|
+
"requires",
|
|
20670
|
+
"owned_by",
|
|
20671
|
+
"owns",
|
|
20672
|
+
"blocks",
|
|
20673
|
+
"informs",
|
|
20674
|
+
"maintains",
|
|
20675
|
+
"implements",
|
|
20676
|
+
"built",
|
|
20677
|
+
"depends_on",
|
|
20678
|
+
"related_to",
|
|
20679
|
+
"learned_from",
|
|
20680
|
+
"teaches",
|
|
20681
|
+
"knows",
|
|
20682
|
+
"assumes",
|
|
20683
|
+
"supports_claim",
|
|
20684
|
+
"authored_by",
|
|
20685
|
+
"links_to",
|
|
20686
|
+
"contains",
|
|
20687
|
+
"contains_note",
|
|
20688
|
+
"contradicts",
|
|
20689
|
+
"supersedes",
|
|
20690
|
+
"part_of",
|
|
20691
|
+
"produced_artifact",
|
|
20692
|
+
"precedes",
|
|
20693
|
+
"follows",
|
|
20694
|
+
"triggers",
|
|
20695
|
+
"may_execute",
|
|
20696
|
+
"requires_approval_from",
|
|
20697
|
+
"impacts",
|
|
20698
|
+
"produces",
|
|
20699
|
+
"consumes"
|
|
20700
|
+
]);
|
|
20701
|
+
function sqlStringList2(values) {
|
|
20702
|
+
return [...values].map((value) => `'${value}'`).join(", ");
|
|
20703
|
+
}
|
|
20704
|
+
function hasTable32(db, table) {
|
|
20705
|
+
return Boolean(db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table));
|
|
20706
|
+
}
|
|
20707
|
+
function hasColumn122(db, table, column) {
|
|
20708
|
+
const rows = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
20709
|
+
return rows.some((row) => row.name === column);
|
|
20710
|
+
}
|
|
20711
|
+
function addColumnIfMissing202(db, table, column, definition) {
|
|
20712
|
+
if (!hasColumn122(db, table, column))
|
|
20713
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
20714
|
+
}
|
|
20715
|
+
function documentScopeColumnsPreservingExisting2(db) {
|
|
20716
|
+
const preserveAgentId = hasColumn122(db, "documents", "agent_id");
|
|
20717
|
+
const preserveProject = hasColumn122(db, "documents", "project");
|
|
20718
|
+
if (preserveAgentId) {
|
|
20719
|
+
db.exec(`
|
|
20720
|
+
CREATE TEMP TABLE __signet_doc_agent_guard AS
|
|
20721
|
+
SELECT id, agent_id FROM documents
|
|
20722
|
+
WHERE NULLIF(TRIM(agent_id), '') IS NOT NULL
|
|
20723
|
+
AND NULLIF(TRIM(agent_id), '') <> 'default'
|
|
20724
|
+
`);
|
|
20725
|
+
}
|
|
20726
|
+
if (preserveProject) {
|
|
20727
|
+
db.exec(`
|
|
20728
|
+
CREATE TEMP TABLE __signet_doc_project_guard AS
|
|
20729
|
+
SELECT id, project FROM documents
|
|
20730
|
+
WHERE NULLIF(TRIM(project), '') IS NOT NULL
|
|
20731
|
+
`);
|
|
20732
|
+
}
|
|
20733
|
+
try {
|
|
20734
|
+
up802(db);
|
|
20735
|
+
if (preserveAgentId) {
|
|
20736
|
+
db.exec(`
|
|
20737
|
+
UPDATE documents
|
|
20738
|
+
SET agent_id = (SELECT agent_id FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
20739
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_agent_guard WHERE __signet_doc_agent_guard.id = documents.id)
|
|
20740
|
+
`);
|
|
20741
|
+
}
|
|
20742
|
+
if (preserveProject) {
|
|
20743
|
+
db.exec(`
|
|
20744
|
+
UPDATE documents
|
|
20745
|
+
SET project = (SELECT project FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
20746
|
+
WHERE EXISTS (SELECT 1 FROM __signet_doc_project_guard WHERE __signet_doc_project_guard.id = documents.id)
|
|
20747
|
+
`);
|
|
20748
|
+
}
|
|
20749
|
+
} finally {
|
|
20750
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_agent_guard");
|
|
20751
|
+
db.exec("DROP TABLE IF EXISTS temp.__signet_doc_project_guard");
|
|
20752
|
+
}
|
|
20753
|
+
}
|
|
20754
|
+
function up832(db) {
|
|
20755
|
+
up792(db);
|
|
20756
|
+
if (hasTable32(db, "documents")) {
|
|
20757
|
+
documentScopeColumnsPreservingExisting2(db);
|
|
20758
|
+
}
|
|
20759
|
+
up812(db);
|
|
20760
|
+
addColumnIfMissing202(db, "memories", "superseded_by", "TEXT");
|
|
20761
|
+
addColumnIfMissing202(db, "memories", "superseded_at", "TEXT");
|
|
20762
|
+
addColumnIfMissing202(db, "memories", "superseded_reason", "TEXT");
|
|
20763
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded_by ON memories(superseded_by)");
|
|
20764
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_memories_active_supersession ON memories(is_deleted, superseded_by)");
|
|
20765
|
+
if (!hasTable32(db, "relations") || !hasTable32(db, "entity_dependencies"))
|
|
20766
|
+
return;
|
|
20767
|
+
addColumnIfMissing202(db, "entity_dependencies", "confidence", "REAL");
|
|
20768
|
+
addColumnIfMissing202(db, "entity_dependencies", "reason", "TEXT");
|
|
20769
|
+
addColumnIfMissing202(db, "entity_dependencies", "source_id", "TEXT");
|
|
20770
|
+
addColumnIfMissing202(db, "entity_dependencies", "source_kind", "TEXT");
|
|
20771
|
+
addColumnIfMissing202(db, "entity_dependencies", "proposal_evidence", "TEXT NOT NULL DEFAULT '[]'");
|
|
20772
|
+
addColumnIfMissing202(db, "entity_dependencies", "status", "TEXT NOT NULL DEFAULT 'active'");
|
|
20773
|
+
const relationConfidence = hasColumn122(db, "relations", "confidence") ? "r.confidence" : "NULL";
|
|
20774
|
+
const relationUpdatedAt = hasColumn122(db, "relations", "updated_at") ? "r.updated_at" : "r.created_at";
|
|
20775
|
+
const sourceAgentId = hasColumn122(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(src.agent_id), ''), 'default')" : "'default'";
|
|
20776
|
+
const targetAgentId = hasColumn122(db, "entities", "agent_id") ? "COALESCE(NULLIF(TRIM(dst.agent_id), ''), 'default')" : "'default'";
|
|
20777
|
+
db.exec(`
|
|
20778
|
+
INSERT OR IGNORE INTO entity_dependencies (
|
|
20779
|
+
id,
|
|
20780
|
+
source_entity_id,
|
|
20781
|
+
target_entity_id,
|
|
20782
|
+
agent_id,
|
|
20783
|
+
dependency_type,
|
|
20784
|
+
strength,
|
|
20785
|
+
confidence,
|
|
20786
|
+
reason,
|
|
20787
|
+
created_at,
|
|
20788
|
+
updated_at,
|
|
20789
|
+
source_id,
|
|
20790
|
+
source_kind,
|
|
20791
|
+
proposal_evidence,
|
|
20792
|
+
status
|
|
20793
|
+
)
|
|
20794
|
+
SELECT
|
|
20795
|
+
'relation:' || r.id,
|
|
20796
|
+
r.source_entity_id,
|
|
20797
|
+
r.target_entity_id,
|
|
20798
|
+
COALESCE(${sourceAgentId}, ${targetAgentId}, 'default'),
|
|
20799
|
+
CASE WHEN r.relation_type IN (${sqlStringList2(DEPENDENCY_TYPES2)}) THEN r.relation_type ELSE 'related_to' END,
|
|
20800
|
+
MAX(0.1, MIN(1.0, COALESCE(r.strength, 0.5))),
|
|
20801
|
+
MAX(0.1, MIN(1.0, COALESCE(${relationConfidence}, 0.7))),
|
|
20802
|
+
'legacy relation backfill: ' || r.relation_type,
|
|
20803
|
+
COALESCE(r.created_at, datetime('now')),
|
|
20804
|
+
COALESCE(${relationUpdatedAt}, r.created_at, datetime('now')),
|
|
20805
|
+
r.id,
|
|
20806
|
+
'relation',
|
|
20807
|
+
'[]',
|
|
20808
|
+
'active'
|
|
20809
|
+
FROM relations r
|
|
20810
|
+
JOIN entities src ON src.id = r.source_entity_id
|
|
20811
|
+
JOIN entities dst ON dst.id = r.target_entity_id
|
|
20812
|
+
WHERE r.source_entity_id <> r.target_entity_id
|
|
20813
|
+
AND ${sourceAgentId} = ${targetAgentId}
|
|
20814
|
+
`);
|
|
20815
|
+
}
|
|
20816
|
+
function up842(db) {
|
|
20817
|
+
db.exec(`
|
|
20818
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_imports (
|
|
20819
|
+
path TEXT PRIMARY KEY,
|
|
20820
|
+
mtime_ms INTEGER NOT NULL,
|
|
20821
|
+
ctime_ms INTEGER NOT NULL,
|
|
20822
|
+
size INTEGER NOT NULL,
|
|
20823
|
+
content_hash TEXT NOT NULL,
|
|
20824
|
+
importer_version INTEGER NOT NULL,
|
|
20825
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
20826
|
+
last_imported_at TEXT NOT NULL,
|
|
20827
|
+
last_seen_at TEXT NOT NULL,
|
|
20828
|
+
status TEXT NOT NULL DEFAULT 'imported',
|
|
20829
|
+
error TEXT
|
|
20830
|
+
);
|
|
20831
|
+
|
|
20832
|
+
CREATE TABLE IF NOT EXISTS legacy_markdown_chunks (
|
|
20833
|
+
file_path TEXT NOT NULL,
|
|
20834
|
+
chunk_hash TEXT NOT NULL,
|
|
20835
|
+
chunk_index INTEGER NOT NULL,
|
|
20836
|
+
memory_id TEXT,
|
|
20837
|
+
source_id TEXT,
|
|
20838
|
+
created_at TEXT NOT NULL,
|
|
20839
|
+
PRIMARY KEY (file_path, chunk_hash)
|
|
20840
|
+
);
|
|
20841
|
+
|
|
20842
|
+
CREATE INDEX IF NOT EXISTS idx_legacy_markdown_chunks_memory_id
|
|
20843
|
+
ON legacy_markdown_chunks(memory_id);
|
|
20844
|
+
`);
|
|
20845
|
+
}
|
|
20846
|
+
function up852(db) {
|
|
20847
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name IN ('relations', 'entity_dependencies')").all();
|
|
20848
|
+
const tableNames = new Set(tables.map((r) => String(r.name)));
|
|
20849
|
+
if (!tableNames.has("relations") || !tableNames.has("entity_dependencies"))
|
|
20850
|
+
return;
|
|
20851
|
+
const relCols = db.prepare("PRAGMA table_info(relations)").all();
|
|
20852
|
+
const depCols = db.prepare("PRAGMA table_info(entity_dependencies)").all();
|
|
20853
|
+
const rel = new Set(relCols.map((c) => String(c.name)));
|
|
20854
|
+
const dep = new Set(depCols.map((c) => String(c.name)));
|
|
20855
|
+
if (!rel.has("source_entity_id") || !rel.has("relation_type"))
|
|
20856
|
+
return;
|
|
20857
|
+
if (!dep.has("source_entity_id") || !dep.has("dependency_type") || !dep.has("agent_id"))
|
|
20858
|
+
return;
|
|
20859
|
+
const hasRelConfidence = rel.has("confidence");
|
|
20860
|
+
const hasRelUpdated = rel.has("updated_at");
|
|
20861
|
+
const hasDepConfidence = dep.has("confidence");
|
|
20862
|
+
const hasDepReason = dep.has("reason");
|
|
20863
|
+
const hasDepStatus = dep.has("status");
|
|
20864
|
+
const selectParts = ["id", "source_entity_id", "target_entity_id"];
|
|
20865
|
+
const colParts = ["id", "source_entity_id", "target_entity_id"];
|
|
20866
|
+
selectParts.push("relation_type");
|
|
20867
|
+
colParts.push("dependency_type");
|
|
20868
|
+
selectParts.push("strength", "created_at");
|
|
20869
|
+
colParts.push("strength", "created_at");
|
|
20870
|
+
selectParts.push("'default'");
|
|
20871
|
+
colParts.push("agent_id");
|
|
20872
|
+
selectParts.push("NULL");
|
|
20873
|
+
colParts.push("aspect_id");
|
|
20874
|
+
if (hasRelConfidence && hasDepConfidence) {
|
|
20875
|
+
selectParts.push("confidence");
|
|
20876
|
+
colParts.push("confidence");
|
|
20877
|
+
}
|
|
20878
|
+
if (hasDepReason) {
|
|
20879
|
+
selectParts.push("'extracted'");
|
|
20880
|
+
colParts.push("reason");
|
|
20881
|
+
}
|
|
20882
|
+
if (hasDepStatus) {
|
|
20883
|
+
selectParts.push("'active'");
|
|
20884
|
+
colParts.push("status");
|
|
20885
|
+
}
|
|
20886
|
+
if (hasRelUpdated && dep.has("updated_at")) {
|
|
20887
|
+
selectParts.push("updated_at");
|
|
20888
|
+
colParts.push("updated_at");
|
|
20889
|
+
}
|
|
20890
|
+
const selectClause = selectParts.join(", ");
|
|
20891
|
+
const colsClause = colParts.join(", ");
|
|
20892
|
+
db.exec(`INSERT OR IGNORE INTO entity_dependencies (${colsClause})
|
|
20893
|
+
SELECT ${selectClause}
|
|
20894
|
+
FROM relations
|
|
20895
|
+
WHERE source_entity_id IS NOT NULL
|
|
20896
|
+
AND target_entity_id IS NOT NULL
|
|
20897
|
+
AND relation_type IS NOT NULL`);
|
|
20898
|
+
}
|
|
20899
|
+
function addColumnIfMissing212(db, table, column, definition) {
|
|
20900
|
+
const cols = db.prepare(`PRAGMA table_info(${table})`).all();
|
|
20901
|
+
if (cols.some((col) => col.name === column))
|
|
20902
|
+
return;
|
|
20903
|
+
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
20904
|
+
}
|
|
20905
|
+
function up862(db) {
|
|
20906
|
+
addColumnIfMissing212(db, "summary_jobs", "content_hash", "TEXT");
|
|
20907
|
+
db.exec(`
|
|
20908
|
+
CREATE INDEX IF NOT EXISTS idx_summary_jobs_agent_session_content_hash
|
|
20909
|
+
ON summary_jobs(agent_id, session_key, content_hash)
|
|
20910
|
+
`);
|
|
20911
|
+
}
|
|
20383
20912
|
var MIGRATIONS2 = [
|
|
20384
20913
|
{
|
|
20385
20914
|
version: 1,
|
|
20386
20915
|
name: "baseline",
|
|
20387
|
-
up:
|
|
20916
|
+
up: up87,
|
|
20388
20917
|
artifacts: { tables: ["memories", "conversations", "embeddings"] }
|
|
20389
20918
|
},
|
|
20390
20919
|
{
|
|
@@ -20433,7 +20962,7 @@ var MIGRATIONS2 = [
|
|
|
20433
20962
|
{
|
|
20434
20963
|
version: 8,
|
|
20435
20964
|
name: "embeddings-unique-hash",
|
|
20436
|
-
up:
|
|
20965
|
+
up: up88
|
|
20437
20966
|
},
|
|
20438
20967
|
{
|
|
20439
20968
|
version: 9,
|
|
@@ -21044,6 +21573,45 @@ var MIGRATIONS2 = [
|
|
|
21044
21573
|
{ table: "skill_invocations", column: "tool_use_id" }
|
|
21045
21574
|
]
|
|
21046
21575
|
}
|
|
21576
|
+
},
|
|
21577
|
+
{
|
|
21578
|
+
version: 83,
|
|
21579
|
+
name: "memory-lifecycle-repair",
|
|
21580
|
+
up: up832,
|
|
21581
|
+
artifacts: {
|
|
21582
|
+
tables: ["transcript_capture_jobs", "aggregate_evidence_sources", "entity_dependencies"],
|
|
21583
|
+
columns: [
|
|
21584
|
+
{ table: "documents", column: "agent_id" },
|
|
21585
|
+
{ table: "documents", column: "project" },
|
|
21586
|
+
{ table: "memories", column: "superseded_by" },
|
|
21587
|
+
{ table: "memories", column: "superseded_at" },
|
|
21588
|
+
{ table: "memories", column: "superseded_reason" }
|
|
21589
|
+
]
|
|
21590
|
+
}
|
|
21591
|
+
},
|
|
21592
|
+
{
|
|
21593
|
+
version: 84,
|
|
21594
|
+
name: "legacy-markdown-import-state",
|
|
21595
|
+
up: up842,
|
|
21596
|
+
artifacts: {
|
|
21597
|
+
tables: ["legacy_markdown_imports", "legacy_markdown_chunks"]
|
|
21598
|
+
}
|
|
21599
|
+
},
|
|
21600
|
+
{
|
|
21601
|
+
version: 85,
|
|
21602
|
+
name: "backfill-relations-to-dependencies",
|
|
21603
|
+
up: up852,
|
|
21604
|
+
artifacts: {
|
|
21605
|
+
tables: ["entity_dependencies"]
|
|
21606
|
+
}
|
|
21607
|
+
},
|
|
21608
|
+
{
|
|
21609
|
+
version: 86,
|
|
21610
|
+
name: "summary-jobs-content-hash",
|
|
21611
|
+
up: up862,
|
|
21612
|
+
artifacts: {
|
|
21613
|
+
columns: [{ table: "summary_jobs", column: "content_hash" }]
|
|
21614
|
+
}
|
|
21047
21615
|
}
|
|
21048
21616
|
];
|
|
21049
21617
|
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-forge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.147.0",
|
|
4
4
|
"description": "Signet connector for ForgeCode - installs MCP, identity, and skills integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"typecheck": "tsc --noEmit"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@signetai/connector-base": "0.
|
|
28
|
-
"@signetai/core": "0.
|
|
27
|
+
"@signetai/connector-base": "0.147.0",
|
|
28
|
+
"@signetai/core": "0.147.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^22.0.0",
|