@cuongtran001/kanna 1.3.0 → 1.3.1

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.
Files changed (186) hide show
  1. package/dist/client/assets/{arc-CAysfmX5.js → arc-DXtN3EWJ.js} +1 -1
  2. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BKqRYsm4.js → architectureDiagram-3BPJPVTR-CIGqW1z-.js} +1 -1
  3. package/dist/client/assets/{blockDiagram-GPEHLZMM-Ce7Eorec.js → blockDiagram-GPEHLZMM-BafNS_H6.js} +1 -1
  4. package/dist/client/assets/{c4Diagram-AAUBKEIU-CJ77zauH.js → c4Diagram-AAUBKEIU-YdAgRSis.js} +1 -1
  5. package/dist/client/assets/channel-BEYTrUAm.js +1 -0
  6. package/dist/client/assets/{chunk-2J33WTMH-Rk_3zLxJ.js → chunk-2J33WTMH-eiP5y5G-.js} +1 -1
  7. package/dist/client/assets/{chunk-4BX2VUAB-DPIz6Nvf.js → chunk-4BX2VUAB-CvLGzPMF.js} +1 -1
  8. package/dist/client/assets/{chunk-55IACEB6-D-TkbGh2.js → chunk-55IACEB6-Y-S9Fb8A.js} +1 -1
  9. package/dist/client/assets/{chunk-727SXJPM-B4NOSIZV.js → chunk-727SXJPM-6sJH1RI9.js} +1 -1
  10. package/dist/client/assets/{chunk-AQP2D5EJ-Cm_TGLYm.js → chunk-AQP2D5EJ-hV1r_IXO.js} +1 -1
  11. package/dist/client/assets/{chunk-FMBD7UC4-Bu45BUVh.js → chunk-FMBD7UC4-CC3L28S5.js} +1 -1
  12. package/dist/client/assets/{chunk-ND2GUHAM-C1Bw8_gg.js → chunk-ND2GUHAM-BZ3czhdH.js} +1 -1
  13. package/dist/client/assets/{chunk-QZHKN3VN-DueG15o0.js → chunk-QZHKN3VN-Bjyd6Yr-.js} +1 -1
  14. package/dist/client/assets/classDiagram-4FO5ZUOK-CvnF5Ud6.js +1 -0
  15. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CvnF5Ud6.js +1 -0
  16. package/dist/client/assets/{cose-bilkent-S5V4N54A-YgpMurXf.js → cose-bilkent-S5V4N54A-CfxdDghE.js} +1 -1
  17. package/dist/client/assets/{dagre-BM42HDAG-Dop7Oq67.js → dagre-BM42HDAG-B8CddsbB.js} +1 -1
  18. package/dist/client/assets/{diagram-2AECGRRQ-unMfBEJH.js → diagram-2AECGRRQ-F0yS0fVB.js} +1 -1
  19. package/dist/client/assets/{diagram-5GNKFQAL-D9EJ9qMI.js → diagram-5GNKFQAL-cW0i0qlh.js} +1 -1
  20. package/dist/client/assets/{diagram-KO2AKTUF-C5IykOIR.js → diagram-KO2AKTUF-BzAKMeJT.js} +1 -1
  21. package/dist/client/assets/{diagram-LMA3HP47-DJAuPngz.js → diagram-LMA3HP47-qdC4XqIl.js} +1 -1
  22. package/dist/client/assets/{diagram-OG6HWLK6-B3wHFtS-.js → diagram-OG6HWLK6-CGcpi6Dh.js} +1 -1
  23. package/dist/client/assets/{erDiagram-TEJ5UH35-Dm7kt9o5.js → erDiagram-TEJ5UH35-CxNTDicM.js} +1 -1
  24. package/dist/client/assets/{flowDiagram-I6XJVG4X-s9Lds3ny.js → flowDiagram-I6XJVG4X-qkGa5TqY.js} +1 -1
  25. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CRQNYdAf.js → ganttDiagram-6RSMTGT7-D9mVPoQi.js} +1 -1
  26. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DhYjK4Jb.js → gitGraphDiagram-PVQCEYII-DA0grAXe.js} +1 -1
  27. package/dist/client/assets/{index-CbSY9HfS.js → index-BqUY1Bm4.js} +1 -1
  28. package/dist/client/assets/{index-C0U2kwuB.js → index-TU1k6ov6.js} +5 -5
  29. package/dist/client/assets/{infoDiagram-5YYISTIA-CRKJ0PSH.js → infoDiagram-5YYISTIA-CGljtLs3.js} +1 -1
  30. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CEAkB0IY.js → ishikawaDiagram-YF4QCWOH-CtC0xrmG.js} +1 -1
  31. package/dist/client/assets/{journeyDiagram-JHISSGLW-CyOK5_DG.js → journeyDiagram-JHISSGLW-URLnVZeN.js} +1 -1
  32. package/dist/client/assets/{kanban-definition-UN3LZRKU-BfKjiJSo.js → kanban-definition-UN3LZRKU-C2Q6aqQh.js} +1 -1
  33. package/dist/client/assets/{linear-DLR6miy3.js → linear-ByKHtsIx.js} +1 -1
  34. package/dist/client/assets/{mermaid.core-D7AdC_lE.js → mermaid.core-Dl_f2KLc.js} +4 -4
  35. package/dist/client/assets/{mindmap-definition-RKZ34NQL-zYyJtDSa.js → mindmap-definition-RKZ34NQL-CaJ9IDLI.js} +1 -1
  36. package/dist/client/assets/{pieDiagram-4H26LBE5-BgP8PFlo.js → pieDiagram-4H26LBE5-mmYaf2Oa.js} +1 -1
  37. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Di8h7J96.js → quadrantDiagram-W4KKPZXB-B_PO6OCC.js} +1 -1
  38. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DuTzFl3R.js → requirementDiagram-4Y6WPE33-M4huwJt1.js} +1 -1
  39. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DBRoMm_T.js → sankeyDiagram-5OEKKPKP-B0hb1sWh.js} +1 -1
  40. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Bmb-1HUN.js → sequenceDiagram-3UESZ5HK-BAqSptnA.js} +1 -1
  41. package/dist/client/assets/{stateDiagram-AJRCARHV-fnv5ayn-.js → stateDiagram-AJRCARHV-DTNkvPi5.js} +1 -1
  42. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CVN3oGTF.js +1 -0
  43. package/dist/client/assets/{timeline-definition-PNZ67QCA-ByWRdpQX.js → timeline-definition-PNZ67QCA-MgAjHz8Q.js} +1 -1
  44. package/dist/client/assets/{vennDiagram-CIIHVFJN--2WGpVXW.js → vennDiagram-CIIHVFJN-DmKoO51W.js} +1 -1
  45. package/dist/client/assets/{wardley-L42UT6IY-24zlnzxK.js → wardley-L42UT6IY-CWcyHnYs.js} +1 -1
  46. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Cllvqb3K.js → wardleyDiagram-YWT4CUSO-BGIGmFP9.js} +1 -1
  47. package/dist/client/assets/{xychartDiagram-2RQKCTM6-ZcdC6nPE.js → xychartDiagram-2RQKCTM6-D20YIvEl.js} +1 -1
  48. package/dist/client/index.html +1 -1
  49. package/package.json +1 -1
  50. package/src/server/agent-coordinator-types.ts +158 -0
  51. package/src/server/agent-coordinator.ts +919 -0
  52. package/src/server/agent-deps-builders.ts +425 -0
  53. package/src/server/agent.test.ts +22 -6
  54. package/src/server/agent.ts +35 -4987
  55. package/src/server/claude-autocontinue-commands.test.ts +494 -0
  56. package/src/server/claude-autocontinue-commands.ts +256 -0
  57. package/src/server/claude-cancel-handler.test.ts +472 -0
  58. package/src/server/claude-cancel-handler.ts +241 -0
  59. package/src/server/claude-chat-management.test.ts +395 -0
  60. package/src/server/claude-chat-management.ts +251 -0
  61. package/src/server/claude-harness-stream.test.ts +273 -0
  62. package/src/server/claude-harness-stream.ts +158 -0
  63. package/src/server/claude-loop-orch-commands.test.ts +579 -0
  64. package/src/server/claude-loop-orch-commands.ts +466 -0
  65. package/src/server/claude-message-normalizer.test.ts +213 -0
  66. package/src/server/claude-message-normalizer.ts +436 -0
  67. package/src/server/claude-prompt-helpers.test.ts +248 -0
  68. package/src/server/claude-prompt-helpers.ts +139 -0
  69. package/src/server/claude-sdk-queue.test.ts +169 -0
  70. package/src/server/claude-sdk-queue.ts +82 -0
  71. package/src/server/claude-send-command.test.ts +414 -0
  72. package/src/server/claude-send-command.ts +420 -0
  73. package/src/server/claude-session-config-helpers.test.ts +279 -0
  74. package/src/server/claude-session-config-helpers.ts +151 -0
  75. package/src/server/claude-session-config.test.ts +250 -0
  76. package/src/server/claude-session-config.ts +159 -0
  77. package/src/server/claude-session-error-handler.test.ts +498 -0
  78. package/src/server/claude-session-error-handler.ts +361 -0
  79. package/src/server/claude-session-lifecycle.test.ts +669 -0
  80. package/src/server/claude-session-lifecycle.ts +283 -0
  81. package/src/server/claude-session-rebuild.test.ts +224 -0
  82. package/src/server/claude-session-rebuild.ts +101 -0
  83. package/src/server/claude-session-runner.test.ts +523 -0
  84. package/src/server/claude-session-runner.ts +521 -0
  85. package/src/server/claude-session-spawner.test.ts +401 -0
  86. package/src/server/claude-session-spawner.ts +401 -0
  87. package/src/server/claude-session-start.test.ts +205 -0
  88. package/src/server/claude-session-start.ts +277 -0
  89. package/src/server/claude-session-state-queries.test.ts +344 -0
  90. package/src/server/claude-session-state-queries.ts +160 -0
  91. package/src/server/claude-session-state.ts +104 -0
  92. package/src/server/claude-slash-commands.test.ts +277 -0
  93. package/src/server/claude-slash-commands.ts +234 -0
  94. package/src/server/claude-spawn-helpers.test.ts +221 -0
  95. package/src/server/claude-spawn-helpers.ts +179 -0
  96. package/src/server/claude-steer-log.test.ts +243 -0
  97. package/src/server/claude-steer-log.ts +58 -0
  98. package/src/server/claude-subagent-tool-response.test.ts +213 -0
  99. package/src/server/claude-subagent-tool-response.ts +165 -0
  100. package/src/server/claude-subagent-wiring.test.ts +263 -0
  101. package/src/server/claude-subagent-wiring.ts +324 -0
  102. package/src/server/claude-tool-respond.test.ts +321 -0
  103. package/src/server/claude-tool-respond.ts +142 -0
  104. package/src/server/claude-turn-runner.test.ts +310 -0
  105. package/src/server/claude-turn-runner.ts +228 -0
  106. package/src/server/claude-turn-starter.test.ts +266 -0
  107. package/src/server/claude-turn-starter.ts +566 -0
  108. package/src/server/claude-usage-math.test.ts +169 -0
  109. package/src/server/claude-usage-math.ts +132 -0
  110. package/src/server/diff-store-branch-ops.adapter.test.ts +332 -0
  111. package/src/server/diff-store-branch-ops.adapter.ts +602 -0
  112. package/src/server/diff-store-commit-ops.adapter.test.ts +358 -0
  113. package/src/server/diff-store-commit-ops.adapter.ts +258 -0
  114. package/src/server/diff-store-errors.ts +85 -0
  115. package/src/server/diff-store-file-ops.adapter.ts +212 -0
  116. package/src/server/diff-store-git-branch.adapter.ts +686 -0
  117. package/src/server/diff-store-io.adapter.ts +27 -0
  118. package/src/server/diff-store-parse.test.ts +212 -0
  119. package/src/server/diff-store-parse.ts +122 -0
  120. package/src/server/diff-store-state.ts +82 -0
  121. package/src/server/diff-store.ts +76 -1854
  122. package/src/server/event-store-apply.test.ts +280 -0
  123. package/src/server/event-store-apply.ts +132 -0
  124. package/src/server/event-store-chat-lifecycle.test.ts +408 -0
  125. package/src/server/event-store-chat-lifecycle.ts +441 -0
  126. package/src/server/event-store-entity-write.ts +356 -0
  127. package/src/server/event-store-helpers.test.ts +230 -0
  128. package/src/server/event-store-helpers.ts +235 -0
  129. package/src/server/event-store-init.ts +276 -0
  130. package/src/server/event-store-messages.adapter.test.ts +365 -0
  131. package/src/server/event-store-messages.adapter.ts +213 -0
  132. package/src/server/event-store-orch-subscription.ts +124 -0
  133. package/src/server/event-store-orch.test.ts +462 -0
  134. package/src/server/event-store-orch.ts +312 -0
  135. package/src/server/event-store-peripheral-events.adapter.test.ts +254 -0
  136. package/src/server/event-store-peripheral-events.adapter.ts +105 -0
  137. package/src/server/event-store-snapshot.test.ts +597 -0
  138. package/src/server/event-store-snapshot.ts +658 -0
  139. package/src/server/event-store-subagent.test.ts +408 -0
  140. package/src/server/event-store-subagent.ts +198 -0
  141. package/src/server/event-store-tool-requests.test.ts +210 -0
  142. package/src/server/event-store-tool-requests.ts +131 -0
  143. package/src/server/event-store-transcript-write.adapter.ts +285 -0
  144. package/src/server/event-store-write-ops.test.ts +554 -0
  145. package/src/server/event-store-write-ops.ts +529 -0
  146. package/src/server/event-store.test.ts +35 -0
  147. package/src/server/event-store.ts +251 -2285
  148. package/src/server/harness-types.ts +15 -1
  149. package/src/server/oauth-errors.ts +19 -0
  150. package/src/server/ws-router-agent-ctrl.test.ts +187 -0
  151. package/src/server/ws-router-agent-ctrl.ts +137 -0
  152. package/src/server/ws-router-broadcast.ts +488 -0
  153. package/src/server/ws-router-chat.test.ts +461 -0
  154. package/src/server/ws-router-chat.ts +279 -0
  155. package/src/server/ws-router-defaults.test.ts +283 -0
  156. package/src/server/ws-router-defaults.ts +434 -0
  157. package/src/server/ws-router-diff.test.ts +167 -0
  158. package/src/server/ws-router-diff.ts +250 -0
  159. package/src/server/ws-router-envelope.ts +329 -0
  160. package/src/server/ws-router-misc.test.ts +422 -0
  161. package/src/server/ws-router-misc.ts +265 -0
  162. package/src/server/ws-router-orch.test.ts +190 -0
  163. package/src/server/ws-router-orch.ts +93 -0
  164. package/src/server/ws-router-project.test.ts +403 -0
  165. package/src/server/ws-router-project.ts +256 -0
  166. package/src/server/ws-router-push.test.ts +193 -0
  167. package/src/server/ws-router-push.ts +120 -0
  168. package/src/server/ws-router-settings.test.ts +173 -0
  169. package/src/server/ws-router-settings.ts +416 -0
  170. package/src/server/ws-router-skills.test.ts +194 -0
  171. package/src/server/ws-router-skills.ts +204 -0
  172. package/src/server/ws-router-utils.ts +224 -0
  173. package/src/server/ws-router.ts +339 -2254
  174. package/src/shared/app-settings-types.ts +365 -0
  175. package/src/shared/core-types.ts +27 -0
  176. package/src/shared/git-diff-types.ts +165 -0
  177. package/src/shared/mcp-types.ts +105 -0
  178. package/src/shared/provider-model-types.ts +437 -0
  179. package/src/shared/subagent-types.ts +198 -0
  180. package/src/shared/tool-call-types.ts +314 -0
  181. package/src/shared/transcript-types.ts +270 -0
  182. package/src/shared/types.ts +25 -1711
  183. package/dist/client/assets/channel-KQhRwDzJ.js +0 -1
  184. package/dist/client/assets/classDiagram-4FO5ZUOK-ChxT1GNq.js +0 -1
  185. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-ChxT1GNq.js +0 -1
  186. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-D4X-ZnLV.js +0 -1
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Tool call shapes (raw + hydrated) — extracted from shared/types.ts.
3
+ * Completely self-contained: no imports from types.ts.
4
+ * Imported via the re-export barrel in types.ts; all external consumers
5
+ * continue to import from "../shared/types" unchanged.
6
+ */
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // AskUserQuestion / TodoWrite payload primitives
10
+ // ---------------------------------------------------------------------------
11
+
12
+ export interface AskUserQuestionOption {
13
+ label: string
14
+ description?: string
15
+ }
16
+
17
+ export interface AskUserQuestionItem {
18
+ id?: string
19
+ question: string
20
+ header?: string
21
+ options?: AskUserQuestionOption[]
22
+ multiSelect?: boolean
23
+ }
24
+
25
+ export type AskUserQuestionAnswerMap = Record<string, string[]>
26
+
27
+ export interface TodoItem {
28
+ content: string
29
+ status: "pending" | "in_progress" | "completed"
30
+ activeForm: string
31
+ }
32
+
33
+ // ---------------------------------------------------------------------------
34
+ // Raw tool call shapes
35
+ // ---------------------------------------------------------------------------
36
+
37
+ interface ToolCallBase<TKind extends string, TInput> {
38
+ kind: "tool"
39
+ toolKind: TKind
40
+ toolName: string
41
+ toolId: string
42
+ input: TInput
43
+ rawInput?: Record<string, unknown>
44
+ }
45
+
46
+ export interface AskUserQuestionToolCall
47
+ extends ToolCallBase<"ask_user_question", { questions: AskUserQuestionItem[] }> { }
48
+
49
+ export interface ExitPlanModeToolCall
50
+ extends ToolCallBase<"exit_plan_mode", { plan?: string; summary?: string }> { }
51
+
52
+ export interface TodoWriteToolCall
53
+ extends ToolCallBase<"todo_write", { todos: TodoItem[] }> { }
54
+
55
+ export interface SkillToolCall
56
+ extends ToolCallBase<"skill", { skill: string }> { }
57
+
58
+ export interface GlobToolCall
59
+ extends ToolCallBase<"glob", { pattern: string }> { }
60
+
61
+ export interface GrepToolCall
62
+ extends ToolCallBase<"grep", { pattern: string; outputMode?: string }> { }
63
+
64
+ export interface BashToolCall
65
+ extends ToolCallBase<"bash", { command: string; description?: string; timeoutMs?: number; runInBackground?: boolean }> { }
66
+
67
+ export interface WebSearchToolCall
68
+ extends ToolCallBase<"web_search", { query: string }> { }
69
+
70
+ export interface ReadFileToolCall
71
+ extends ToolCallBase<"read_file", { filePath: string }> { }
72
+
73
+ export interface WriteFileToolCall
74
+ extends ToolCallBase<"write_file", { filePath: string; content: string }> { }
75
+
76
+ export interface EditFileToolCall
77
+ extends ToolCallBase<"edit_file", { filePath: string; oldString: string; newString: string }> { }
78
+
79
+ export interface DeleteFileToolCall
80
+ extends ToolCallBase<"delete_file", { filePath: string; content: string }> { }
81
+
82
+ export interface SubagentTaskToolCall
83
+ extends ToolCallBase<"subagent_task", { subagentType?: string }> { }
84
+
85
+ export interface McpGenericToolCall
86
+ extends ToolCallBase<"mcp_generic", { server: string; tool: string; payload: Record<string, unknown> }> { }
87
+
88
+ export interface OfferDownloadToolCall
89
+ extends ToolCallBase<"offer_download", { path: string; label?: string }> { }
90
+
91
+ export interface OfferDownloadToolResult {
92
+ contentUrl: string
93
+ relativePath: string
94
+ fileName: string
95
+ displayName: string
96
+ size: number
97
+ mimeType?: string
98
+ }
99
+
100
+ export interface PreviewFileToolCall
101
+ extends ToolCallBase<"preview_file", { path: string; label?: string }> { }
102
+
103
+ export interface PreviewFileToolResult {
104
+ contentUrl: string
105
+ relativePath: string
106
+ fileName: string
107
+ displayName: string
108
+ size: number
109
+ mimeType: string
110
+ }
111
+
112
+ export type ImageGenerationStatus = "in_progress" | "completed" | "failed"
113
+
114
+ export interface ImageGenerationToolCall
115
+ extends ToolCallBase<"image_generation", { revisedPrompt: string | null; status: ImageGenerationStatus }> { }
116
+
117
+ export interface ImageGenerationToolResult {
118
+ contentUrl: string
119
+ relativePath: string
120
+ fileName: string
121
+ }
122
+
123
+ export interface UnknownToolCall
124
+ extends ToolCallBase<"unknown_tool", { payload: Record<string, unknown> }> { }
125
+
126
+ export interface WorkflowToolCall
127
+ extends ToolCallBase<"workflow", { name?: string; description?: string; scriptPath?: string }> { }
128
+
129
+ export type NormalizedToolCall =
130
+ | AskUserQuestionToolCall
131
+ | ExitPlanModeToolCall
132
+ | TodoWriteToolCall
133
+ | SkillToolCall
134
+ | GlobToolCall
135
+ | GrepToolCall
136
+ | BashToolCall
137
+ | WebSearchToolCall
138
+ | ReadFileToolCall
139
+ | WriteFileToolCall
140
+ | EditFileToolCall
141
+ | DeleteFileToolCall
142
+ | SubagentTaskToolCall
143
+ | McpGenericToolCall
144
+ | OfferDownloadToolCall
145
+ | PreviewFileToolCall
146
+ | ImageGenerationToolCall
147
+ | WorkflowToolCall
148
+ | UnknownToolCall
149
+
150
+ // ---------------------------------------------------------------------------
151
+ // Hydrated tool call shapes
152
+ // ---------------------------------------------------------------------------
153
+
154
+ export interface HydratedToolCallBase<TKind extends string, TInput, TResult> {
155
+ id: string
156
+ messageId?: string
157
+ hidden?: boolean
158
+ kind: "tool"
159
+ toolKind: TKind
160
+ toolName: string
161
+ toolId: string
162
+ input: TInput
163
+ result?: TResult
164
+ rawResult?: string | Record<string, unknown> | readonly unknown[] | null
165
+ isError?: boolean
166
+ /**
167
+ * Set when the underlying tool_result entry was persisted to disk
168
+ * via the subagent payload cap. Mirrored from
169
+ * ToolResultEntry.persisted during hydration.
170
+ */
171
+ persisted?: {
172
+ filePath: string
173
+ originalSize: number
174
+ isJson: boolean
175
+ truncated: true
176
+ }
177
+ timestamp: string
178
+ }
179
+
180
+ export interface AskUserQuestionToolResult {
181
+ answers: AskUserQuestionAnswerMap
182
+ discarded?: boolean
183
+ }
184
+
185
+ export interface ExitPlanModeToolResult {
186
+ confirmed?: boolean
187
+ clearContext?: boolean
188
+ message?: string
189
+ discarded?: boolean
190
+ }
191
+
192
+ export type HydratedAskUserQuestionToolCall =
193
+ HydratedToolCallBase<"ask_user_question", AskUserQuestionToolCall["input"], AskUserQuestionToolResult>
194
+
195
+ export type HydratedExitPlanModeToolCall =
196
+ HydratedToolCallBase<"exit_plan_mode", ExitPlanModeToolCall["input"], ExitPlanModeToolResult>
197
+
198
+ export type HydratedTodoWriteToolCall =
199
+ HydratedToolCallBase<"todo_write", TodoWriteToolCall["input"], unknown>
200
+
201
+ export type HydratedSkillToolCall =
202
+ HydratedToolCallBase<"skill", SkillToolCall["input"], unknown>
203
+
204
+ export type HydratedGlobToolCall =
205
+ HydratedToolCallBase<"glob", GlobToolCall["input"], unknown>
206
+
207
+ export type HydratedGrepToolCall =
208
+ HydratedToolCallBase<"grep", GrepToolCall["input"], unknown>
209
+
210
+ export type HydratedBashToolCall =
211
+ HydratedToolCallBase<"bash", BashToolCall["input"], unknown>
212
+
213
+ export type HydratedWebSearchToolCall =
214
+ HydratedToolCallBase<"web_search", WebSearchToolCall["input"], unknown>
215
+
216
+ export interface ReadFileTextBlock {
217
+ type: "text"
218
+ text: string
219
+ }
220
+
221
+ export interface ReadFileImageBlock {
222
+ type: "image"
223
+ data: string
224
+ mimeType?: string
225
+ }
226
+
227
+ export interface ReadFileToolResult {
228
+ content: string
229
+ blocks?: Array<ReadFileTextBlock | ReadFileImageBlock>
230
+ }
231
+
232
+ export type HydratedReadFileToolCall =
233
+ HydratedToolCallBase<"read_file", ReadFileToolCall["input"], ReadFileToolResult | string>
234
+
235
+ export type HydratedWriteFileToolCall =
236
+ HydratedToolCallBase<"write_file", WriteFileToolCall["input"], unknown>
237
+
238
+ export type HydratedEditFileToolCall =
239
+ HydratedToolCallBase<"edit_file", EditFileToolCall["input"], unknown>
240
+
241
+ export type HydratedDeleteFileToolCall =
242
+ HydratedToolCallBase<"delete_file", DeleteFileToolCall["input"], unknown>
243
+
244
+ export interface SubagentToolStats {
245
+ readCount?: number
246
+ searchCount?: number
247
+ bashCount?: number
248
+ editFileCount?: number
249
+ linesAdded?: number
250
+ linesRemoved?: number
251
+ otherToolCount?: number
252
+ }
253
+
254
+ // Parsed from the `Agent`/`Task` tool_result's top-level `toolUseResult`
255
+ // sidecar (camelCase, written by claude-code into the transcript JSONL and
256
+ // preserved on the tool_result entry's debugRaw). All fields optional — the
257
+ // SDK driver / older transcripts / in-flight calls may omit it entirely.
258
+ export interface SubagentTaskResult {
259
+ agentId?: string
260
+ agentType?: string
261
+ status?: string
262
+ totalTokens?: number
263
+ totalDurationMs?: number
264
+ totalToolUseCount?: number
265
+ toolStats?: SubagentToolStats
266
+ content?: string
267
+ }
268
+
269
+ export type HydratedSubagentTaskToolCall =
270
+ HydratedToolCallBase<"subagent_task", SubagentTaskToolCall["input"], SubagentTaskResult>
271
+
272
+ export type HydratedMcpGenericToolCall =
273
+ HydratedToolCallBase<"mcp_generic", McpGenericToolCall["input"], unknown>
274
+
275
+ export type HydratedOfferDownloadToolCall =
276
+ HydratedToolCallBase<"offer_download", OfferDownloadToolCall["input"], OfferDownloadToolResult>
277
+
278
+ export type HydratedPreviewFileToolCall =
279
+ HydratedToolCallBase<"preview_file", PreviewFileToolCall["input"], PreviewFileToolResult>
280
+
281
+ export type HydratedImageGenerationToolCall =
282
+ HydratedToolCallBase<"image_generation", ImageGenerationToolCall["input"], ImageGenerationToolResult>
283
+
284
+ export interface WorkflowToolResult {
285
+ taskId?: string
286
+ text: string
287
+ }
288
+
289
+ export type HydratedWorkflowToolCall =
290
+ HydratedToolCallBase<"workflow", WorkflowToolCall["input"], WorkflowToolResult>
291
+
292
+ export type HydratedUnknownToolCall =
293
+ HydratedToolCallBase<"unknown_tool", UnknownToolCall["input"], unknown>
294
+
295
+ export type HydratedToolCall =
296
+ | HydratedAskUserQuestionToolCall
297
+ | HydratedExitPlanModeToolCall
298
+ | HydratedTodoWriteToolCall
299
+ | HydratedSkillToolCall
300
+ | HydratedGlobToolCall
301
+ | HydratedGrepToolCall
302
+ | HydratedBashToolCall
303
+ | HydratedWebSearchToolCall
304
+ | HydratedReadFileToolCall
305
+ | HydratedWriteFileToolCall
306
+ | HydratedEditFileToolCall
307
+ | HydratedDeleteFileToolCall
308
+ | HydratedSubagentTaskToolCall
309
+ | HydratedMcpGenericToolCall
310
+ | HydratedOfferDownloadToolCall
311
+ | HydratedPreviewFileToolCall
312
+ | HydratedImageGenerationToolCall
313
+ | HydratedWorkflowToolCall
314
+ | HydratedUnknownToolCall
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Transcript entry shapes and the TranscriptEntry union — extracted from shared/types.ts.
3
+ * Imported via the re-export barrel in types.ts; all external consumers
4
+ * continue to import from "../shared/types" unchanged.
5
+ *
6
+ * import type = erased at compile time → no circular runtime dependency.
7
+ */
8
+
9
+ import type { AgentProvider, ChatAttachment, ProviderUsage } from "./types"
10
+ import type { ToolRequestStatus, ToolRequestDecision } from "./permission-policy"
11
+ import type { NormalizedToolCall, HydratedToolCall } from "./tool-call-types"
12
+
13
+ // ---------------------------------------------------------------------------
14
+ // Shared info shapes (only referenced by transcript entries)
15
+ // ---------------------------------------------------------------------------
16
+
17
+ export interface McpServerInfo {
18
+ name: string
19
+ status: string
20
+ error?: string
21
+ }
22
+
23
+ export interface AccountInfo {
24
+ email?: string
25
+ organization?: string
26
+ subscriptionType?: string
27
+ tokenSource?: string
28
+ apiKeySource?: string
29
+ oauthKeyMasked?: string
30
+ }
31
+
32
+ // ---------------------------------------------------------------------------
33
+ // Context window usage — only used by transcript entries
34
+ // ---------------------------------------------------------------------------
35
+
36
+ export interface ContextWindowUsageSnapshot {
37
+ usedTokens: number
38
+ totalProcessedTokens?: number
39
+ maxTokens?: number
40
+ inputTokens?: number
41
+ cachedInputTokens?: number
42
+ outputTokens?: number
43
+ reasoningOutputTokens?: number
44
+ lastUsedTokens?: number
45
+ lastInputTokens?: number
46
+ lastCachedInputTokens?: number
47
+ lastOutputTokens?: number
48
+ lastReasoningOutputTokens?: number
49
+ toolUses?: number
50
+ durationMs?: number
51
+ /** USD cost for this turn. Provider-reported (Claude) or computed (others). */
52
+ costUsd?: number
53
+ compactsAutomatically: boolean
54
+ }
55
+
56
+ // ---------------------------------------------------------------------------
57
+ // Transcript entry base (private to this module)
58
+ // ---------------------------------------------------------------------------
59
+
60
+ interface TranscriptEntryBase {
61
+ _id: string
62
+ messageId?: string
63
+ createdAt: number
64
+ hidden?: boolean
65
+ debugRaw?: string
66
+ }
67
+
68
+ // ---------------------------------------------------------------------------
69
+ // Transcript entry types
70
+ // ---------------------------------------------------------------------------
71
+
72
+ export interface ToolResultEntry extends TranscriptEntryBase {
73
+ kind: "tool_result"
74
+ toolId: string
75
+ content: string | Record<string, unknown> | readonly unknown[] | null
76
+ isError?: boolean
77
+ /**
78
+ * Set when the original content exceeded the subagent payload cap
79
+ * (50 KB) and the full content was written to disk. `content` then
80
+ * carries only a 2 KB preview wrapped in <persisted-output> tags.
81
+ */
82
+ persisted?: {
83
+ filePath: string
84
+ originalSize: number
85
+ isJson: boolean
86
+ truncated: true
87
+ }
88
+ }
89
+
90
+ export interface UserPromptEntry extends TranscriptEntryBase {
91
+ kind: "user_prompt"
92
+ content: string
93
+ attachments?: ChatAttachment[]
94
+ steered?: boolean
95
+ autoContinue?: { scheduleId: string }
96
+ subagentMentions?: Array<{ subagentId: string; raw: string }>
97
+ unknownSubagentMentions?: Array<{ name: string; raw: string }>
98
+ }
99
+
100
+ export interface SystemInitEntry extends TranscriptEntryBase {
101
+ kind: "system_init"
102
+ provider: AgentProvider
103
+ model: string
104
+ tools: string[]
105
+ agents: string[]
106
+ slashCommands: string[]
107
+ mcpServers: McpServerInfo[]
108
+ }
109
+
110
+ export interface AccountInfoEntry extends TranscriptEntryBase {
111
+ kind: "account_info"
112
+ accountInfo: AccountInfo
113
+ }
114
+
115
+ export interface AssistantTextEntry extends TranscriptEntryBase {
116
+ kind: "assistant_text"
117
+ text: string
118
+ }
119
+
120
+ export interface AssistantThinkingEntry extends TranscriptEntryBase {
121
+ kind: "assistant_thinking"
122
+ text: string
123
+ signature?: string
124
+ }
125
+
126
+ export interface ApiErrorEntry extends TranscriptEntryBase {
127
+ kind: "api_error"
128
+ status: number
129
+ text: string
130
+ requestId?: string
131
+ }
132
+
133
+ // A deliberate model refusal (Claude CLI returns stop_reason "refusal" /
134
+ // Usage-Policy block text) — distinct from a transport/overload api_error.
135
+ // Surfaced as its own kind so the UI can label it "Blocked — Usage Policy"
136
+ // instead of a generic red API-error card.
137
+ // See adr-20260607-surface-policy-refusal-entry.
138
+ export interface PolicyRefusalEntry extends TranscriptEntryBase {
139
+ kind: "policy_refusal"
140
+ text: string
141
+ requestId?: string
142
+ }
143
+
144
+ export interface ToolCallEntry extends TranscriptEntryBase {
145
+ kind: "tool_call"
146
+ tool: NormalizedToolCall
147
+ }
148
+
149
+ export interface ResultEntry extends TranscriptEntryBase {
150
+ kind: "result"
151
+ subtype: "success" | "error" | "cancelled"
152
+ isError: boolean
153
+ durationMs: number
154
+ result: string
155
+ costUsd?: number
156
+ usage?: ProviderUsage
157
+ /**
158
+ * Number of background Workflow tasks still running when this turn ended
159
+ * (from claude-code's `turn_duration` frame). When > 0 the coordinator arms
160
+ * a pending-workflow wake so the agent re-enters to harvest results instead
161
+ * of going idle. Absent/0 on normal turns.
162
+ * See adr-20260603-agent-self-scheduled-wake.
163
+ */
164
+ pendingWorkflowCount?: number
165
+ }
166
+
167
+ export interface StatusEntry extends TranscriptEntryBase {
168
+ kind: "status"
169
+ status: string
170
+ backgroundTaskId?: string
171
+ }
172
+
173
+ export interface ContextWindowUpdatedEntry extends TranscriptEntryBase {
174
+ kind: "context_window_updated"
175
+ usage: ContextWindowUsageSnapshot
176
+ }
177
+
178
+ export interface CompactBoundaryEntry extends TranscriptEntryBase {
179
+ kind: "compact_boundary"
180
+ }
181
+
182
+ export interface CompactSummaryEntry extends TranscriptEntryBase {
183
+ kind: "compact_summary"
184
+ summary: string
185
+ }
186
+
187
+ export interface ContextClearedEntry extends TranscriptEntryBase {
188
+ kind: "context_cleared"
189
+ }
190
+
191
+ export interface InterruptedEntry extends TranscriptEntryBase {
192
+ kind: "interrupted"
193
+ }
194
+
195
+ /**
196
+ * A Claude Code memory/rule file auto-loaded into context (CLAUDE.md, nested
197
+ * CLAUDE.md, `.claude/rules/*.md`). PTY mode surfaces these from the
198
+ * transcript's `type:"nested_memory"` lines. Path only — file content is
199
+ * intentionally not carried (keeps the persisted/replayed event log light).
200
+ */
201
+ export interface MemoryLoadedEntry extends TranscriptEntryBase {
202
+ kind: "memory_loaded"
203
+ path: string
204
+ }
205
+
206
+ export interface AutoContinuePromptEntry extends TranscriptEntryBase {
207
+ kind: "auto_continue_prompt"
208
+ scheduleId: string
209
+ }
210
+
211
+ export interface PendingToolRequestEntry extends TranscriptEntryBase {
212
+ kind: "pending_tool_request"
213
+ toolRequestId: string
214
+ toolName: string
215
+ arguments: Record<string, unknown>
216
+ }
217
+
218
+ export interface ToolRequestResolvedEntry extends TranscriptEntryBase {
219
+ kind: "tool_request_resolved"
220
+ toolRequestId: string
221
+ status: ToolRequestStatus
222
+ decision?: ToolRequestDecision
223
+ }
224
+
225
+ export type TranscriptEntry =
226
+ | UserPromptEntry
227
+ | SystemInitEntry
228
+ | AccountInfoEntry
229
+ | AssistantTextEntry
230
+ | AssistantThinkingEntry
231
+ | ApiErrorEntry
232
+ | PolicyRefusalEntry
233
+ | ToolCallEntry
234
+ | ToolResultEntry
235
+ | ResultEntry
236
+ | StatusEntry
237
+ | ContextWindowUpdatedEntry
238
+ | CompactBoundaryEntry
239
+ | CompactSummaryEntry
240
+ | ContextClearedEntry
241
+ | InterruptedEntry
242
+ | MemoryLoadedEntry
243
+ | AutoContinuePromptEntry
244
+ | PendingToolRequestEntry
245
+ | ToolRequestResolvedEntry
246
+
247
+ // ---------------------------------------------------------------------------
248
+ // Hydrated transcript message (rich UI representation)
249
+ // ---------------------------------------------------------------------------
250
+
251
+ export type HydratedTranscriptMessage =
252
+ | ({ kind: "user_prompt"; content: string; attachments?: ChatAttachment[]; steered?: boolean; autoContinue?: { scheduleId: string }; id: string; messageId?: string; timestamp: string; hidden?: boolean })
253
+ | ({ kind: "system_init"; model: string; tools: string[]; agents: string[]; slashCommands: string[]; mcpServers: McpServerInfo[]; provider: AgentProvider; id: string; messageId?: string; timestamp: string; hidden?: boolean; debugRaw?: string })
254
+ | ({ kind: "account_info"; accountInfo: AccountInfo; id: string; messageId?: string; timestamp: string; hidden?: boolean })
255
+ | ({ kind: "assistant_text"; text: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
256
+ | ({ kind: "assistant_thinking"; text: string; signature?: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
257
+ | ({ kind: "api_error"; status: number; text: string; requestId?: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
258
+ | ({ kind: "policy_refusal"; text: string; requestId?: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
259
+ | ({ kind: "result"; success: boolean; cancelled?: boolean; result: string; durationMs: number; costUsd?: number; id: string; messageId?: string; timestamp: string; hidden?: boolean })
260
+ | ({ kind: "status"; status: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
261
+ | ({ kind: "context_window_updated"; usage: ContextWindowUsageSnapshot; id: string; messageId?: string; timestamp: string; hidden?: boolean })
262
+ | ({ kind: "compact_boundary"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
263
+ | ({ kind: "compact_summary"; summary: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
264
+ | ({ kind: "context_cleared"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
265
+ | ({ kind: "interrupted"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
266
+ | ({ kind: "memory_loaded"; path: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
267
+ | ({ kind: "unknown"; json: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
268
+ | ({ kind: "auto_continue_prompt"; scheduleId: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
269
+ | ({ kind: "pending_tool_request"; toolRequestId: string; toolName: string; arguments: Record<string, unknown>; id: string; messageId?: string; timestamp: string; hidden?: boolean })
270
+ | ({ id: string; messageId?: string; hidden?: boolean } & HydratedToolCall)