chore: sanitize tool parts locally

This commit is contained in:
Adam
2025-10-30 14:57:32 -05:00
parent 4dafc532a8
commit dc96664578

View File

@@ -77,21 +77,22 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
break break
} }
case "message.part.updated": { case "message.part.updated": {
const parts = store.part[event.properties.part.messageID] const part = sanitizePart(event.properties.part)
const parts = store.part[part.messageID]
if (!parts) { if (!parts) {
setStore("part", event.properties.part.messageID, [event.properties.part]) setStore("part", part.messageID, [part])
break break
} }
const result = Binary.search(parts, event.properties.part.id, (p) => p.id) const result = Binary.search(parts, part.id, (p) => p.id)
if (result.found) { if (result.found) {
setStore("part", event.properties.part.messageID, result.index, reconcile(event.properties.part)) setStore("part", part.messageID, result.index, reconcile(part))
break break
} }
setStore( setStore(
"part", "part",
event.properties.part.messageID, part.messageID,
produce((draft) => { produce((draft) => {
draft.splice(result.index, 0, event.properties.part) draft.splice(result.index, 0, part)
}), }),
) )
break break
@@ -121,6 +122,23 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const sanitizer = createMemo(() => new RegExp(`${store.path.directory}/`, "g")) const sanitizer = createMemo(() => new RegExp(`${store.path.directory}/`, "g"))
const sanitize = (text: string) => text.replace(sanitizer(), "") const sanitize = (text: string) => text.replace(sanitizer(), "")
const absolute = (path: string) => (store.path.directory + "/" + path).replace("//", "/") const absolute = (path: string) => (store.path.directory + "/" + path).replace("//", "/")
const sanitizePart = (part: Part) => {
if (part.type === "tool") {
if (part.state.status === "completed") {
for (const key in part.state.metadata) {
if (typeof part.state.metadata[key] === "string") {
part.state.metadata[key] = sanitize(part.state.metadata[key] as string)
}
}
for (const key in part.state.input) {
if (typeof part.state.input[key] === "string") {
part.state.input[key] = sanitize(part.state.input[key] as string)
}
}
}
}
return part
}
return { return {
data: store, data: store,
@@ -155,7 +173,10 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
.slice() .slice()
.sort((a, b) => a.id.localeCompare(b.id)) .sort((a, b) => a.id.localeCompare(b.id))
for (const message of messages.data!) { for (const message of messages.data!) {
draft.part[message.info.id] = message.parts.slice().sort((a, b) => a.id.localeCompare(b.id)) draft.part[message.info.id] = message.parts
.slice()
.map(sanitizePart)
.sort((a, b) => a.id.localeCompare(b.id))
} }
}), }),
) )