| 67 | } |
| 68 | |
| 69 | function part(part: SessionV1.Part): SessionV1.Part { |
| 70 | switch (part.type) { |
| 71 | case "text": |
| 72 | return { |
| 73 | ...part, |
| 74 | text: redact("text", part.id, part.text), |
| 75 | metadata: data("text-metadata", part.id, part.metadata), |
| 76 | } |
| 77 | case "reasoning": |
| 78 | return { |
| 79 | ...part, |
| 80 | text: redact("reasoning", part.id, part.text), |
| 81 | metadata: data("reasoning-metadata", part.id, part.metadata), |
| 82 | } |
| 83 | case "file": |
| 84 | return filepart(part) |
| 85 | case "subtask": |
| 86 | return { |
| 87 | ...part, |
| 88 | prompt: redact("subtask-prompt", part.id, part.prompt), |
| 89 | description: redact("subtask-description", part.id, part.description), |
| 90 | command: part.command === undefined ? undefined : redact("subtask-command", part.id, part.command), |
| 91 | } |
| 92 | case "tool": |
| 93 | return { |
| 94 | ...part, |
| 95 | metadata: data("tool-metadata", part.id, part.metadata), |
| 96 | state: |
| 97 | part.state.status === "pending" |
| 98 | ? { |
| 99 | ...part.state, |
| 100 | input: data("tool-input", part.id, part.state.input) ?? part.state.input, |
| 101 | raw: redact("tool-raw", part.id, part.state.raw), |
| 102 | } |
| 103 | : part.state.status === "running" |
| 104 | ? { |
| 105 | ...part.state, |
| 106 | input: data("tool-input", part.id, part.state.input) ?? part.state.input, |
| 107 | title: part.state.title === undefined ? undefined : redact("tool-title", part.id, part.state.title), |
| 108 | metadata: data("tool-state-metadata", part.id, part.state.metadata), |
| 109 | } |
| 110 | : part.state.status === "completed" |
| 111 | ? { |
| 112 | ...part.state, |
| 113 | input: data("tool-input", part.id, part.state.input) ?? part.state.input, |
| 114 | output: redact("tool-output", part.id, part.state.output), |
| 115 | title: redact("tool-title", part.id, part.state.title), |
| 116 | metadata: data("tool-state-metadata", part.id, part.state.metadata) ?? part.state.metadata, |
| 117 | attachments: part.state.attachments?.map(filepart), |
| 118 | } |
| 119 | : { |
| 120 | ...part.state, |
| 121 | input: data("tool-input", part.id, part.state.input) ?? part.state.input, |
| 122 | metadata: data("tool-state-metadata", part.id, part.state.metadata), |
| 123 | }, |
| 124 | } |
| 125 | case "patch": |
| 126 | return { |