diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt index b124f913..bc7b9a0a 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt @@ -103,7 +103,7 @@ class ContextWorkspace { * @param contextBlock 注册的新上下文块 */ fun register(contextBlock: ContextBlock) = lock.write { - val removedBlocks = mutableListOf() + val changedSourceKeys = linkedSetOf() val iterator = stateSet.iterator() while (iterator.hasNext()) { val currentBlock = iterator.next() @@ -113,44 +113,44 @@ class ContextWorkspace { if (currentBlock.applyReplaceFade() <= 0.0) { iterator.remove() - removedBlocks.add(currentBlock) + changedSourceKeys.add(currentBlock.sourceKey) } } stateSet += contextBlock - recordRegister(contextBlock, removedBlocks) + changedSourceKeys.add(contextBlock.sourceKey) + record("register", changedSourceKeys) } fun expire(blockName: String, source: String) = lock.write { val sourceKey = ContextBlock.SourceKey(blockName, source) - val removedBlocks = mutableListOf() + val changedSourceKeys = linkedSetOf() val iterator = stateSet.iterator() while (iterator.hasNext()) { val block = iterator.next() if (block.sourceKey == sourceKey) { iterator.remove() - removedBlocks.add(block) + changedSourceKeys.add(block.sourceKey) } } - if (removedBlocks.isNotEmpty()) { - recordExpire(sourceKey) + if (changedSourceKeys.isNotEmpty()) { + record("expire", changedSourceKeys) } } - private fun recordRegister(addedBlock: ContextBlock, removedBlocks: List) { + private fun record(action: String, changedSourceKeys: Set) { val payload = JSONObject() - payload["action"] = "register" - payload["added"] = blockSnapshot(addedBlock) - payload["removed"] = removedBlocks.map(::blockSnapshot) - TraceRecorder.record(TraceEvent(tracePath, payload)) - } - - private fun recordExpire(sourceKey: ContextBlock.SourceKey) { - val payload = JSONObject() - payload["action"] = "expire" - payload["changedSourceKey"] = JSONObject.of( - "blockName", sourceKey.blockName, - "source", sourceKey.source - ) + payload["action"] = action + payload["changedSourceKeys"] = changedSourceKeys + .sortedWith( + compareBy { it.blockName } + .thenBy { it.source } + ) + .map { sourceKey -> + JSONObject.of( + "blockName", sourceKey.blockName, + "source", sourceKey.source + ) + } payload["blocks"] = stateSet .sortedWith( compareBy { it.sourceKey.blockName }