Merge branch 'dev' into canary
This commit is contained in:
@@ -174,6 +174,13 @@ final class IncrementalTranscriptProjection {
|
||||
case .toolCallInputDelta(let d): return [d.toolCallID]
|
||||
case .toolResult(let r): return [r.toolCallID]
|
||||
case .fileChange(let f): return f.toolCallID.map { [$0] } ?? []
|
||||
case .note(let note):
|
||||
// A note tagged with the edit it brackets (a subagent's lock-acquire / nvrsion-land)
|
||||
// is now part of that edit's scope: chain it to the edit's id so a seal seam can't
|
||||
// separate them. If the edit was already sealed (a rare late note after its scope
|
||||
// closed), the tail reference to a sealed id trips the self-healing reset — a whole
|
||||
// re-fold that necessarily matches `build`. Untagged notes chain to nothing, as before.
|
||||
return note.toolCallID.map { [$0] } ?? []
|
||||
default: return []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -347,6 +347,12 @@ enum TranscriptProjection {
|
||||
return change.toolCallID.flatMap { parentOf[$0] }
|
||||
case .assistantText(let chunk), .thinking(let chunk):
|
||||
return chunk.parentToolCallID
|
||||
case .note(let note):
|
||||
// A lock/nvrsion note tagged with the edit it brackets inherits that edit's subagent
|
||||
// scope — like a `.toolResult`/`.fileChange` — so a subagent's lock-acquire or
|
||||
// nvrsion-land note nests in its card instead of leaking to the main transcript. An
|
||||
// untagged note (a turn-end release, a user git note) has no owner.
|
||||
return note.toolCallID.flatMap { parentOf[$0] }
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user