signetai 0.165.0 → 0.166.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/mcp-stdio.js +153 -15
- package/native-manifest.json +14 -14
- package/package.json +6 -6
package/dist/mcp-stdio.js
CHANGED
|
@@ -43926,6 +43926,7 @@ function buildRememberRequestBody(content, options = {}) {
|
|
|
43926
43926
|
validUntil: options.validUntil,
|
|
43927
43927
|
sourceCreatedAt: options.sourceCreatedAt,
|
|
43928
43928
|
reviewAfter: options.reviewAfter,
|
|
43929
|
+
supersedes: options.supersedes,
|
|
43929
43930
|
hints: options.hints,
|
|
43930
43931
|
transcript: options.transcript,
|
|
43931
43932
|
structured: normalizeStructuredMemoryPayload(options.structured),
|
|
@@ -48289,6 +48290,7 @@ var ONTOLOGY_PROPOSAL_OPERATIONS = [
|
|
|
48289
48290
|
"update_link",
|
|
48290
48291
|
"archive_link",
|
|
48291
48292
|
"merge_entities",
|
|
48293
|
+
"merge_aspects",
|
|
48292
48294
|
"supersede_claim_value",
|
|
48293
48295
|
"create_policy",
|
|
48294
48296
|
"create_action_type",
|
|
@@ -50051,8 +50053,10 @@ var DEFAULT_PIPELINE_V2 = {
|
|
|
50051
50053
|
traversal: {
|
|
50052
50054
|
enabled: true,
|
|
50053
50055
|
primary: true,
|
|
50054
|
-
maxAspectsPerEntity:
|
|
50055
|
-
maxAttributesPerAspect:
|
|
50056
|
+
maxAspectsPerEntity: 20,
|
|
50057
|
+
maxAttributesPerAspect: 50,
|
|
50058
|
+
maxWriteAspectsPerEntity: 20,
|
|
50059
|
+
maxWriteAttributesPerAspect: 50,
|
|
50056
50060
|
maxDependencyHops: 10,
|
|
50057
50061
|
minDependencyStrength: 0.3,
|
|
50058
50062
|
maxBranching: 4,
|
|
@@ -50821,6 +50825,15 @@ function txSupersedeMemory(db, input) {
|
|
|
50821
50825
|
currentSupersededBy: existing.superseded_by
|
|
50822
50826
|
};
|
|
50823
50827
|
}
|
|
50828
|
+
if (existing.superseded_by !== null && existing.superseded_by !== input.supersededBy) {
|
|
50829
|
+
return {
|
|
50830
|
+
status: "already_superseded_by_other",
|
|
50831
|
+
memoryId: input.memoryId,
|
|
50832
|
+
supersededBy: existing.superseded_by,
|
|
50833
|
+
currentVersion: existing.version,
|
|
50834
|
+
currentSupersededBy: existing.superseded_by
|
|
50835
|
+
};
|
|
50836
|
+
}
|
|
50824
50837
|
const target2 = db.prepare(`SELECT id, is_deleted, agent_id, project, scope, visibility
|
|
50825
50838
|
FROM memories
|
|
50826
50839
|
WHERE id = ?`).get(input.supersededBy);
|
|
@@ -50893,7 +50906,7 @@ function applyOntologyOperationBatchInTx(db, params) {
|
|
|
50893
50906
|
const row = getProposalInTx(db, inserted.id, params.agentId);
|
|
50894
50907
|
if (row === null)
|
|
50895
50908
|
throw new OntologyProposalError("Proposal not found", 404);
|
|
50896
|
-
const result = applyOperation(db, row, params.actor);
|
|
50909
|
+
const result = applyOperation(db, row, params.actor, params.writeCaps);
|
|
50897
50910
|
items.push({
|
|
50898
50911
|
proposal: markAppliedInTx(db, row, params.actor, result),
|
|
50899
50912
|
result,
|
|
@@ -51355,7 +51368,7 @@ function restoreAttributeMemoryInTx(db, memoryId, proposal) {
|
|
|
51355
51368
|
createdAt: changedAt
|
|
51356
51369
|
});
|
|
51357
51370
|
}
|
|
51358
|
-
function applyAddClaimValue(db, agentId, proposal, payload) {
|
|
51371
|
+
function applyAddClaimValue(db, agentId, proposal, payload, writeCaps) {
|
|
51359
51372
|
const entity = readString2(payload, "entity");
|
|
51360
51373
|
const aspect = readString2(payload, "aspect");
|
|
51361
51374
|
const claimKey = readString2(payload, "claim_key");
|
|
@@ -51369,6 +51382,9 @@ function applyAddClaimValue(db, agentId, proposal, payload) {
|
|
|
51369
51382
|
if (value === null)
|
|
51370
51383
|
throw new OntologyProposalError("payload.value is required", 400);
|
|
51371
51384
|
const entityId = resolveOrCreateEntity(db, agentId, entity, normalizeEntityType2(readString2(payload, "entity_type")));
|
|
51385
|
+
const addEntityRow = db.prepare("SELECT id, name FROM entities WHERE id = ?").get(entityId);
|
|
51386
|
+
if (addEntityRow !== undefined)
|
|
51387
|
+
enforceAspectCapForNewAspect(db, addEntityRow, agentId, aspect, writeCaps);
|
|
51372
51388
|
const aspectId = resolveOrCreateAspect(db, entityId, agentId, aspect);
|
|
51373
51389
|
const groupKey = readString2(payload, "group_key") ?? "general";
|
|
51374
51390
|
const kind = normalizeAttributeKind(readString2(payload, "kind"));
|
|
@@ -51385,6 +51401,14 @@ function applyAddClaimValue(db, agentId, proposal, payload) {
|
|
|
51385
51401
|
if (existing) {
|
|
51386
51402
|
return { entityId, aspectId, attributeId: existing.id, deduped: true };
|
|
51387
51403
|
}
|
|
51404
|
+
if (writeCaps !== undefined) {
|
|
51405
|
+
const attrCount = db.prepare(`SELECT COUNT(*) AS c FROM entity_attributes
|
|
51406
|
+
WHERE aspect_id = ? AND agent_id = ? AND status = 'active'`).get(aspectId, agentId);
|
|
51407
|
+
if (attrCount.c >= writeCaps.maxAttributesPerAspect) {
|
|
51408
|
+
const aspectName = db.prepare("SELECT name FROM entity_aspects WHERE id = ?").get(aspectId);
|
|
51409
|
+
throw new OntologyProposalError(`aspect '${aspectName?.name ?? aspectId}' is at attribute cap (${attrCount.c}/${writeCaps.maxAttributesPerAspect}) — supersede or expire an existing claim, or consolidate duplicates, before adding`, 409);
|
|
51410
|
+
}
|
|
51411
|
+
}
|
|
51388
51412
|
const id = crypto.randomUUID();
|
|
51389
51413
|
const confidence = clamp01(readNumber(payload, "confidence") ?? proposal.confidence);
|
|
51390
51414
|
const importance = clamp01(readNumber(payload, "importance") ?? confidence);
|
|
@@ -51411,7 +51435,7 @@ function applyAddClaimValue(db, agentId, proposal, payload) {
|
|
|
51411
51435
|
});
|
|
51412
51436
|
return { entityId, aspectId, attributeId: id, memoryId, deduped: false };
|
|
51413
51437
|
}
|
|
51414
|
-
function applySetClaimValue(db, agentId, proposal, payload) {
|
|
51438
|
+
function applySetClaimValue(db, agentId, proposal, payload, writeCaps) {
|
|
51415
51439
|
const entity = readString2(payload, "entity");
|
|
51416
51440
|
const aspect = readString2(payload, "aspect");
|
|
51417
51441
|
const claimKey = canonicalKey(readString2(payload, "claim_key") ?? readString2(payload, "claim"));
|
|
@@ -51453,6 +51477,14 @@ function applySetClaimValue(db, agentId, proposal, payload) {
|
|
|
51453
51477
|
throw new OntologyProposalError("Refusing to replace active constraint claim without force", 409);
|
|
51454
51478
|
}
|
|
51455
51479
|
const previous = active[0] ?? slot[0] ?? null;
|
|
51480
|
+
if (previous === null && writeCaps !== undefined) {
|
|
51481
|
+
const attrCount = db.prepare(`SELECT COUNT(*) AS c FROM entity_attributes
|
|
51482
|
+
WHERE aspect_id = ? AND agent_id = ? AND status = 'active'`).get(aspectId, agentId);
|
|
51483
|
+
if (attrCount.c >= writeCaps.maxAttributesPerAspect) {
|
|
51484
|
+
const aspectName = db.prepare("SELECT name FROM entity_aspects WHERE id = ?").get(aspectId);
|
|
51485
|
+
throw new OntologyProposalError(`aspect '${aspectName?.name ?? aspectId}' is at attribute cap (${attrCount.c}/${writeCaps.maxAttributesPerAspect}) — supersede or expire an existing claim, or consolidate duplicates, before adding`, 409);
|
|
51486
|
+
}
|
|
51487
|
+
}
|
|
51456
51488
|
const version2 = previous === null ? 1 : Math.max(...slot.map((row) => row.version ?? 1)) + 1;
|
|
51457
51489
|
const rootId = previous?.version_root_id ?? previous?.id ?? crypto.randomUUID();
|
|
51458
51490
|
const id = version2 === 1 ? rootId : crypto.randomUUID();
|
|
@@ -51624,7 +51656,21 @@ function applyArchiveEntity(db, agentId, proposal, payload, actor) {
|
|
|
51624
51656
|
WHERE id = ? AND agent_id = ?`).run(actor, readString2(payload, "reason") ?? proposal.rationale, proposal.id, JSON.stringify(proposalAuditEvidence(proposal)), entity.id, agentId);
|
|
51625
51657
|
return { entityId: entity.id, archived: true };
|
|
51626
51658
|
}
|
|
51627
|
-
function
|
|
51659
|
+
function enforceAspectCapForNewAspect(db, entity, agentId, name, writeCaps) {
|
|
51660
|
+
if (writeCaps === undefined)
|
|
51661
|
+
return;
|
|
51662
|
+
const key = canonical(name);
|
|
51663
|
+
const activeAspect = db.prepare(`SELECT id FROM entity_aspects
|
|
51664
|
+
WHERE entity_id = ? AND agent_id = ? AND canonical_name = ? AND COALESCE(status, 'active') = 'active'`).get(entity.id, agentId, key);
|
|
51665
|
+
if (activeAspect != null)
|
|
51666
|
+
return;
|
|
51667
|
+
const aspectCount = db.prepare(`SELECT COUNT(*) AS c FROM entity_aspects
|
|
51668
|
+
WHERE entity_id = ? AND agent_id = ? AND COALESCE(status, 'active') = 'active'`).get(entity.id, agentId);
|
|
51669
|
+
if (aspectCount.c >= writeCaps.maxAspectsPerEntity) {
|
|
51670
|
+
throw new OntologyProposalError(`entity '${entity.name}' is at aspect cap (${aspectCount.c}/${writeCaps.maxAspectsPerEntity}) — consolidate or archive an existing aspect before creating a new one`, 409);
|
|
51671
|
+
}
|
|
51672
|
+
}
|
|
51673
|
+
function applyCreateAspect(db, agentId, proposal, payload, writeCaps) {
|
|
51628
51674
|
const entitySelector = readPayloadSelector(payload, "entity", "entity_id");
|
|
51629
51675
|
const name = readString2(payload, "name") ?? readString2(payload, "aspect");
|
|
51630
51676
|
if (entitySelector === null)
|
|
@@ -51632,6 +51678,7 @@ function applyCreateAspect(db, agentId, proposal, payload) {
|
|
|
51632
51678
|
if (name === null)
|
|
51633
51679
|
throw new OntologyProposalError("payload.name is required", 400);
|
|
51634
51680
|
const entity = resolveEntityStrict(db, agentId, entitySelector);
|
|
51681
|
+
enforceAspectCapForNewAspect(db, entity, agentId, name, writeCaps);
|
|
51635
51682
|
const aspectId = resolveOrCreateAspect(db, entity.id, agentId, name);
|
|
51636
51683
|
db.prepare(`UPDATE entity_aspects
|
|
51637
51684
|
SET proposal_id = ?, proposal_evidence = ?, updated_at = datetime('now')
|
|
@@ -51795,6 +51842,68 @@ function applyMergeEntities(db, agentId, payload) {
|
|
|
51795
51842
|
warnings: plan.warnings
|
|
51796
51843
|
};
|
|
51797
51844
|
}
|
|
51845
|
+
function applyMergeAspects(db, agentId, proposal, payload) {
|
|
51846
|
+
const entitySelector = readPayloadSelector(payload, "entity", "entity_id");
|
|
51847
|
+
const targetSelector = readPayloadSelector(payload, "target", "target_aspect", "target_aspect_id", "aspect");
|
|
51848
|
+
const rawSources = readStringArray(payload, "sources") ?? readStringArray(payload, "source_aspects");
|
|
51849
|
+
if (entitySelector === null)
|
|
51850
|
+
throw new OntologyProposalError("payload.entity is required", 400);
|
|
51851
|
+
if (targetSelector === null)
|
|
51852
|
+
throw new OntologyProposalError("payload.target is required", 400);
|
|
51853
|
+
if (rawSources.length === 0)
|
|
51854
|
+
throw new OntologyProposalError("payload.sources is required", 400);
|
|
51855
|
+
const entity = resolveEntityStrict(db, agentId, entitySelector);
|
|
51856
|
+
const target2 = resolveAspectStrict(db, agentId, entity.id, targetSelector);
|
|
51857
|
+
const newName = readString2(payload, "new_name");
|
|
51858
|
+
if (newName !== null) {
|
|
51859
|
+
const key = canonical(newName);
|
|
51860
|
+
const collision = db.prepare(`SELECT id FROM entity_aspects
|
|
51861
|
+
WHERE entity_id = ? AND agent_id = ? AND id != ?
|
|
51862
|
+
AND COALESCE(status, 'active') = 'active'
|
|
51863
|
+
AND (canonical_name = ? OR LOWER(name) = ?)
|
|
51864
|
+
LIMIT 1`).get(entity.id, agentId, target2.id, key, key);
|
|
51865
|
+
if (collision)
|
|
51866
|
+
throw new OntologyProposalError(`Aspect collides with "${newName}"`, 409);
|
|
51867
|
+
}
|
|
51868
|
+
const evidence = JSON.stringify(proposalAuditEvidence(proposal));
|
|
51869
|
+
const moved = [];
|
|
51870
|
+
let totalMoved = 0;
|
|
51871
|
+
const seen = new Set([target2.id]);
|
|
51872
|
+
for (const raw of rawSources) {
|
|
51873
|
+
if (typeof raw !== "string")
|
|
51874
|
+
throw new OntologyProposalError("payload.sources must be aspect selectors", 400);
|
|
51875
|
+
const source = resolveAspectStrict(db, agentId, entity.id, raw);
|
|
51876
|
+
if (seen.has(source.id))
|
|
51877
|
+
continue;
|
|
51878
|
+
seen.add(source.id);
|
|
51879
|
+
const attributes = db.prepare("SELECT id FROM entity_attributes WHERE aspect_id = ? AND agent_id = ?").all(source.id, agentId);
|
|
51880
|
+
for (const attribute of attributes) {
|
|
51881
|
+
db.prepare(`UPDATE entity_attributes
|
|
51882
|
+
SET aspect_id = ?, updated_at = datetime('now')
|
|
51883
|
+
WHERE id = ? AND agent_id = ?`).run(target2.id, attribute.id, agentId);
|
|
51884
|
+
}
|
|
51885
|
+
db.prepare(`UPDATE entity_aspects
|
|
51886
|
+
SET status = 'archived', archived_at = datetime('now'), archived_by = ?,
|
|
51887
|
+
archive_reason = ?, proposal_id = ?, proposal_evidence = ?, updated_at = datetime('now')
|
|
51888
|
+
WHERE id = ? AND agent_id = ? AND COALESCE(status, 'active') = 'active'`).run(proposal.created_by || "ontology-merge", `Merged into aspect '${target2.name}'`, proposal.id, evidence, source.id, agentId);
|
|
51889
|
+
moved.push({ aspect: source.name, attributes: attributes.length });
|
|
51890
|
+
totalMoved += attributes.length;
|
|
51891
|
+
}
|
|
51892
|
+
if (moved.length === 0)
|
|
51893
|
+
throw new OntologyProposalError("No distinct source aspects to merge", 400);
|
|
51894
|
+
if (newName !== null) {
|
|
51895
|
+
db.prepare(`UPDATE entity_aspects
|
|
51896
|
+
SET name = ?, canonical_name = ?, proposal_id = ?, proposal_evidence = ?, updated_at = datetime('now')
|
|
51897
|
+
WHERE id = ? AND agent_id = ?`).run(newName, canonical(newName), proposal.id, evidence, target2.id, agentId);
|
|
51898
|
+
}
|
|
51899
|
+
return {
|
|
51900
|
+
entityId: entity.id,
|
|
51901
|
+
targetAspectId: target2.id,
|
|
51902
|
+
targetAspect: newName ?? target2.name,
|
|
51903
|
+
mergedAspects: moved,
|
|
51904
|
+
totalAttributesMoved: totalMoved
|
|
51905
|
+
};
|
|
51906
|
+
}
|
|
51798
51907
|
function applyCreateLink(db, agentId, proposal, payload) {
|
|
51799
51908
|
const sourceIdSelector = readString2(payload, "source_entity_id");
|
|
51800
51909
|
const targetIdSelector = readString2(payload, "target_entity_id");
|
|
@@ -51927,7 +52036,7 @@ function applyArchiveEntityAlias(db, agentId, proposal, payload) {
|
|
|
51927
52036
|
throw new OntologyProposalError("Alias not found", 404);
|
|
51928
52037
|
return { aliasId, entityId: entity.id, archived: true };
|
|
51929
52038
|
}
|
|
51930
|
-
function applyOperation(db, proposal, actor) {
|
|
52039
|
+
function applyOperation(db, proposal, actor, writeCaps) {
|
|
51931
52040
|
const payload = parseJsonRecord(proposal.payload);
|
|
51932
52041
|
if (proposal.operation === "create_entity")
|
|
51933
52042
|
return applyCreateEntity(db, proposal.agent_id, proposal, payload);
|
|
@@ -51936,17 +52045,19 @@ function applyOperation(db, proposal, actor) {
|
|
|
51936
52045
|
if (proposal.operation === "archive_entity")
|
|
51937
52046
|
return applyArchiveEntity(db, proposal.agent_id, proposal, payload, actor);
|
|
51938
52047
|
if (proposal.operation === "create_aspect")
|
|
51939
|
-
return applyCreateAspect(db, proposal.agent_id, proposal, payload);
|
|
52048
|
+
return applyCreateAspect(db, proposal.agent_id, proposal, payload, writeCaps);
|
|
51940
52049
|
if (proposal.operation === "rename_aspect")
|
|
51941
52050
|
return applyRenameAspect(db, proposal.agent_id, proposal, payload);
|
|
51942
52051
|
if (proposal.operation === "archive_aspect")
|
|
51943
52052
|
return applyArchiveAspect(db, proposal.agent_id, proposal, payload, actor);
|
|
51944
52053
|
if (proposal.operation === "add_claim_value")
|
|
51945
|
-
return applyAddClaimValue(db, proposal.agent_id, proposal, payload);
|
|
52054
|
+
return applyAddClaimValue(db, proposal.agent_id, proposal, payload, writeCaps);
|
|
51946
52055
|
if (proposal.operation === "set_claim_value")
|
|
51947
|
-
return applySetClaimValue(db, proposal.agent_id, proposal, payload);
|
|
52056
|
+
return applySetClaimValue(db, proposal.agent_id, proposal, payload, writeCaps);
|
|
51948
52057
|
if (proposal.operation === "merge_entities")
|
|
51949
52058
|
return applyMergeEntities(db, proposal.agent_id, payload);
|
|
52059
|
+
if (proposal.operation === "merge_aspects")
|
|
52060
|
+
return applyMergeAspects(db, proposal.agent_id, proposal, payload);
|
|
51950
52061
|
if (proposal.operation === "supersede_claim_value") {
|
|
51951
52062
|
return applySupersedeClaimValue(db, proposal.agent_id, proposal, payload);
|
|
51952
52063
|
}
|
|
@@ -52385,6 +52496,13 @@ var DREAMING_ONTOLOGY_PAYLOAD_SCHEMAS = {
|
|
|
52385
52496
|
survivor: entityId.describe("The entity that survives the merge."),
|
|
52386
52497
|
...reasonField
|
|
52387
52498
|
}),
|
|
52499
|
+
merge_aspects: payload({
|
|
52500
|
+
entityId,
|
|
52501
|
+
target: aspectId.describe("The aspect that absorbs the sources. Use aspect_id."),
|
|
52502
|
+
sources: exports_external.array(aspectId).min(1).describe("Aspect ids to fold into the target. Attributes are moved, sources are archived."),
|
|
52503
|
+
newName: aspectName.describe("Optional new name for the merged aspect.").optional(),
|
|
52504
|
+
...reasonField
|
|
52505
|
+
}),
|
|
52388
52506
|
create_entity: payload({ name: entityName, type: entityType }),
|
|
52389
52507
|
add_claim_value: payload({ entityId, aspectId, claimKey, value: claimValue, reviewAfter }),
|
|
52390
52508
|
set_claim_value: payload({ entityId, aspectId, claimKey, value: claimValue, reviewAfter }),
|
|
@@ -52440,6 +52558,7 @@ var DREAMING_ONTOLOGY_OPERATION_SCHEMA = exports_external.discriminatedUnion("op
|
|
|
52440
52558
|
operation("update_link"),
|
|
52441
52559
|
operation("archive_link"),
|
|
52442
52560
|
operation("merge_entities"),
|
|
52561
|
+
operation("merge_aspects"),
|
|
52443
52562
|
operation("supersede_claim_value"),
|
|
52444
52563
|
operation("create_policy"),
|
|
52445
52564
|
operation("create_action_type"),
|
|
@@ -52454,7 +52573,8 @@ var HYGIENE_ARCHIVE_OPS = new Set([
|
|
|
52454
52573
|
"archive_aspect",
|
|
52455
52574
|
"archive_claim_value",
|
|
52456
52575
|
"archive_link",
|
|
52457
|
-
"merge_entities"
|
|
52576
|
+
"merge_entities",
|
|
52577
|
+
"merge_aspects"
|
|
52458
52578
|
]);
|
|
52459
52579
|
function citationRecord(value) {
|
|
52460
52580
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -52569,6 +52689,10 @@ function attentionProvenance(accessor, agentId, operation2, mintedById) {
|
|
|
52569
52689
|
const survivor = typeof payload2.survivor === "string" ? payload2.survivor : "";
|
|
52570
52690
|
const groupIds = semanticDuplicateIds(accessor, agentId, attention.details.canonicalName ?? "");
|
|
52571
52691
|
expectedTarget = attention.subjectRef === `duplicate:${attention.details.canonicalName}` && groupIds.size > 1 && groupIds.has(survivor) && targets.length >= 2 && targets.every((id) => groupIds.has(id)) && targets.includes(survivor) && targets.some((id) => id !== survivor);
|
|
52692
|
+
} else if (operation2.operation === "merge_aspects") {
|
|
52693
|
+
const sources = Array.isArray(payload2.sources) ? payload2.sources.filter((value) => typeof value === "string") : [];
|
|
52694
|
+
const flaggedAspect = attention.details.aspectId ?? attention.subjectRef.replace(/^aspect:/, "");
|
|
52695
|
+
expectedTarget = attention.subjectRef.startsWith("aspect:") && typeof payload2.target === "string" && sources.length >= 1 && sources.includes(flaggedAspect);
|
|
52572
52696
|
}
|
|
52573
52697
|
if (!expectedTarget)
|
|
52574
52698
|
return null;
|
|
@@ -52675,6 +52799,15 @@ function toApplicatorPayload(accessor, agentId, operation2, payload2) {
|
|
|
52675
52799
|
const sourceIds = targets.filter((id) => id !== survivor);
|
|
52676
52800
|
return { target_entity_id: survivor, source_entity_ids: sourceIds };
|
|
52677
52801
|
}
|
|
52802
|
+
case "merge_aspects": {
|
|
52803
|
+
const entityId2 = stringField(payload2, "entityId");
|
|
52804
|
+
const target3 = stringField(payload2, "target");
|
|
52805
|
+
const sources = stringArrayField(payload2, "sources");
|
|
52806
|
+
if (entityId2 === null || target3 === null || sources === null || sources.length === 0)
|
|
52807
|
+
return null;
|
|
52808
|
+
const name = lookupEntityName(accessor, agentId, entityId2);
|
|
52809
|
+
return name === null ? null : { entity: name, target: target3, sources, new_name: stringField(payload2, "newName") ?? undefined };
|
|
52810
|
+
}
|
|
52678
52811
|
case "create_entity": {
|
|
52679
52812
|
const name = stringField(payload2, "name");
|
|
52680
52813
|
const type = stringField(payload2, "type");
|
|
@@ -52836,7 +52969,8 @@ function applyDreamingOperations(params) {
|
|
|
52836
52969
|
const batch = applyOntologyOperationBatchInTx(db, {
|
|
52837
52970
|
agentId: params.agentId,
|
|
52838
52971
|
actor: params.actor,
|
|
52839
|
-
operations: [entry.input]
|
|
52972
|
+
operations: [entry.input],
|
|
52973
|
+
writeCaps: params.writeCaps
|
|
52840
52974
|
});
|
|
52841
52975
|
db.exec(`RELEASE SAVEPOINT ${savepoint}`);
|
|
52842
52976
|
if (entry.attentionId !== null) {
|
|
@@ -53420,7 +53554,8 @@ function createDreamingCapabilities(params) {
|
|
|
53420
53554
|
agentId: scopeId,
|
|
53421
53555
|
actor,
|
|
53422
53556
|
operations,
|
|
53423
|
-
passId: params.passId
|
|
53557
|
+
passId: params.passId,
|
|
53558
|
+
writeCaps: params.writeCaps
|
|
53424
53559
|
});
|
|
53425
53560
|
params.onOperationsApplied?.(result, operations);
|
|
53426
53561
|
return { ok: result.ok, ...result.error ? { error: result.error } : {}, items: result.items };
|
|
@@ -55463,6 +55598,7 @@ async function createMcpServer(opts) {
|
|
|
55463
55598
|
validFrom: exports_external.string().optional().describe("Start of validity window for this memory"),
|
|
55464
55599
|
validUntil: exports_external.string().optional().describe("End of validity window for this memory"),
|
|
55465
55600
|
reviewAfter: exports_external.string().optional().describe("ISO timestamp when this temporal claim becomes due for review (issue #945)"),
|
|
55601
|
+
supersedes: exports_external.string().optional().describe("Id of an existing memory this write supersedes. The old row is marked superseded in the same transaction, wiring vN -> vN+1 lineage for drill-down history."),
|
|
55466
55602
|
transcript: exports_external.string().optional().describe("Raw source text (conversation transcript) to preserve alongside extracted memory"),
|
|
55467
55603
|
structured: exports_external.object({
|
|
55468
55604
|
entities: exports_external.array(exports_external.object({
|
|
@@ -55515,7 +55651,8 @@ async function createMcpServer(opts) {
|
|
|
55515
55651
|
sourceCreatedAt,
|
|
55516
55652
|
validFrom,
|
|
55517
55653
|
validUntil,
|
|
55518
|
-
reviewAfter: reviewAfter2
|
|
55654
|
+
reviewAfter: reviewAfter2,
|
|
55655
|
+
supersedes
|
|
55519
55656
|
}) => {
|
|
55520
55657
|
const result = await fetchDaemon(baseUrl, "/api/memory/remember", {
|
|
55521
55658
|
method: "POST",
|
|
@@ -55533,7 +55670,8 @@ async function createMcpServer(opts) {
|
|
|
55533
55670
|
sourceCreatedAt,
|
|
55534
55671
|
validFrom,
|
|
55535
55672
|
validUntil,
|
|
55536
|
-
reviewAfter: reviewAfter2
|
|
55673
|
+
reviewAfter: reviewAfter2,
|
|
55674
|
+
supersedes
|
|
55537
55675
|
})
|
|
55538
55676
|
});
|
|
55539
55677
|
if (!result.ok) {
|
package/native-manifest.json
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.166.0",
|
|
4
4
|
"assets": [
|
|
5
5
|
{
|
|
6
6
|
"name": "signet-darwin-arm64",
|
|
7
7
|
"platform": "darwin-arm64",
|
|
8
|
-
"sha256": "
|
|
9
|
-
"size":
|
|
8
|
+
"sha256": "155b6a8c4d9af1904f3593cb30e9325aeffc6274f45cac63ba31e6a31d1f5205",
|
|
9
|
+
"size": 116945824
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"name": "signet-darwin-x64",
|
|
13
13
|
"platform": "darwin-x64",
|
|
14
|
-
"sha256": "
|
|
15
|
-
"size":
|
|
14
|
+
"sha256": "106507b237601bf0e55c682756ac16c686c693e452f5642457f96b8464a59a4b",
|
|
15
|
+
"size": 121571904
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
"name": "signet-linux-arm64",
|
|
19
19
|
"platform": "linux-arm64",
|
|
20
|
-
"sha256": "
|
|
21
|
-
"size":
|
|
20
|
+
"sha256": "ce016781de96917962c4388fd278f21125e8ec27faac8cd0bbe746c1577bf891",
|
|
21
|
+
"size": 154190762
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"name": "signet-linux-x64",
|
|
25
25
|
"platform": "linux-x64",
|
|
26
|
-
"sha256": "
|
|
27
|
-
"size":
|
|
26
|
+
"sha256": "259426f4e14fffd27d296ecbb40779d85909bc77b4feed11af2fd95f5799c2d7",
|
|
27
|
+
"size": 154749747
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"name": "signet-win32-x64.exe",
|
|
31
31
|
"platform": "win32-x64",
|
|
32
|
-
"sha256": "
|
|
33
|
-
"size":
|
|
32
|
+
"sha256": "16f90b1a518e3f9a0631eb0bd722ed69f37a80d4a916e51cefc157aeb19215bf",
|
|
33
|
+
"size": 170883072
|
|
34
34
|
}
|
|
35
35
|
],
|
|
36
36
|
"components": {
|
|
37
37
|
"connectors": {
|
|
38
|
-
"url": "signet-connectors-0.
|
|
39
|
-
"sha256": "
|
|
40
|
-
"size":
|
|
38
|
+
"url": "signet-connectors-0.166.0.tar.gz",
|
|
39
|
+
"sha256": "e2050e9c1d4078a715b144762cfe50dfeb719311c07812ec489eeab7f9bc7ed9",
|
|
40
|
+
"size": 16093
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signetai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.166.0",
|
|
4
4
|
"description": "Signet native CLI installer wrapper",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"access": "public"
|
|
66
66
|
},
|
|
67
67
|
"optionalDependencies": {
|
|
68
|
-
"signetai-darwin-arm64": "https://github.com/Signet-AI/signetai/releases/download/v0.
|
|
69
|
-
"signetai-darwin-x64": "https://github.com/Signet-AI/signetai/releases/download/v0.
|
|
70
|
-
"signetai-linux-arm64": "https://github.com/Signet-AI/signetai/releases/download/v0.
|
|
71
|
-
"signetai-linux-x64": "https://github.com/Signet-AI/signetai/releases/download/v0.
|
|
72
|
-
"signetai-win32-x64": "https://github.com/Signet-AI/signetai/releases/download/v0.
|
|
68
|
+
"signetai-darwin-arm64": "https://github.com/Signet-AI/signetai/releases/download/v0.166.0/signetai-darwin-arm64-0.166.0.tgz",
|
|
69
|
+
"signetai-darwin-x64": "https://github.com/Signet-AI/signetai/releases/download/v0.166.0/signetai-darwin-x64-0.166.0.tgz",
|
|
70
|
+
"signetai-linux-arm64": "https://github.com/Signet-AI/signetai/releases/download/v0.166.0/signetai-linux-arm64-0.166.0.tgz",
|
|
71
|
+
"signetai-linux-x64": "https://github.com/Signet-AI/signetai/releases/download/v0.166.0/signetai-linux-x64-0.166.0.tgz",
|
|
72
|
+
"signetai-win32-x64": "https://github.com/Signet-AI/signetai/releases/download/v0.166.0/signetai-win32-x64-0.166.0.tgz"
|
|
73
73
|
}
|
|
74
74
|
}
|