@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.
- package/dist/client/assets/{arc-CAysfmX5.js → arc-DXtN3EWJ.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BKqRYsm4.js → architectureDiagram-3BPJPVTR-CIGqW1z-.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-Ce7Eorec.js → blockDiagram-GPEHLZMM-BafNS_H6.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CJ77zauH.js → c4Diagram-AAUBKEIU-YdAgRSis.js} +1 -1
- package/dist/client/assets/channel-BEYTrUAm.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-Rk_3zLxJ.js → chunk-2J33WTMH-eiP5y5G-.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-DPIz6Nvf.js → chunk-4BX2VUAB-CvLGzPMF.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-D-TkbGh2.js → chunk-55IACEB6-Y-S9Fb8A.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-B4NOSIZV.js → chunk-727SXJPM-6sJH1RI9.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-Cm_TGLYm.js → chunk-AQP2D5EJ-hV1r_IXO.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-Bu45BUVh.js → chunk-FMBD7UC4-CC3L28S5.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-C1Bw8_gg.js → chunk-ND2GUHAM-BZ3czhdH.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DueG15o0.js → chunk-QZHKN3VN-Bjyd6Yr-.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-CvnF5Ud6.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CvnF5Ud6.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-YgpMurXf.js → cose-bilkent-S5V4N54A-CfxdDghE.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-Dop7Oq67.js → dagre-BM42HDAG-B8CddsbB.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-unMfBEJH.js → diagram-2AECGRRQ-F0yS0fVB.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-D9EJ9qMI.js → diagram-5GNKFQAL-cW0i0qlh.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-C5IykOIR.js → diagram-KO2AKTUF-BzAKMeJT.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DJAuPngz.js → diagram-LMA3HP47-qdC4XqIl.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-B3wHFtS-.js → diagram-OG6HWLK6-CGcpi6Dh.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-Dm7kt9o5.js → erDiagram-TEJ5UH35-CxNTDicM.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-s9Lds3ny.js → flowDiagram-I6XJVG4X-qkGa5TqY.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CRQNYdAf.js → ganttDiagram-6RSMTGT7-D9mVPoQi.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DhYjK4Jb.js → gitGraphDiagram-PVQCEYII-DA0grAXe.js} +1 -1
- package/dist/client/assets/{index-CbSY9HfS.js → index-BqUY1Bm4.js} +1 -1
- package/dist/client/assets/{index-C0U2kwuB.js → index-TU1k6ov6.js} +5 -5
- package/dist/client/assets/{infoDiagram-5YYISTIA-CRKJ0PSH.js → infoDiagram-5YYISTIA-CGljtLs3.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CEAkB0IY.js → ishikawaDiagram-YF4QCWOH-CtC0xrmG.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-CyOK5_DG.js → journeyDiagram-JHISSGLW-URLnVZeN.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-BfKjiJSo.js → kanban-definition-UN3LZRKU-C2Q6aqQh.js} +1 -1
- package/dist/client/assets/{linear-DLR6miy3.js → linear-ByKHtsIx.js} +1 -1
- package/dist/client/assets/{mermaid.core-D7AdC_lE.js → mermaid.core-Dl_f2KLc.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-zYyJtDSa.js → mindmap-definition-RKZ34NQL-CaJ9IDLI.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-BgP8PFlo.js → pieDiagram-4H26LBE5-mmYaf2Oa.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Di8h7J96.js → quadrantDiagram-W4KKPZXB-B_PO6OCC.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DuTzFl3R.js → requirementDiagram-4Y6WPE33-M4huwJt1.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DBRoMm_T.js → sankeyDiagram-5OEKKPKP-B0hb1sWh.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Bmb-1HUN.js → sequenceDiagram-3UESZ5HK-BAqSptnA.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-fnv5ayn-.js → stateDiagram-AJRCARHV-DTNkvPi5.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CVN3oGTF.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-ByWRdpQX.js → timeline-definition-PNZ67QCA-MgAjHz8Q.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN--2WGpVXW.js → vennDiagram-CIIHVFJN-DmKoO51W.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-24zlnzxK.js → wardley-L42UT6IY-CWcyHnYs.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Cllvqb3K.js → wardleyDiagram-YWT4CUSO-BGIGmFP9.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-ZcdC6nPE.js → xychartDiagram-2RQKCTM6-D20YIvEl.js} +1 -1
- package/dist/client/index.html +1 -1
- package/package.json +1 -1
- package/src/server/agent-coordinator-types.ts +158 -0
- package/src/server/agent-coordinator.ts +919 -0
- package/src/server/agent-deps-builders.ts +425 -0
- package/src/server/agent.test.ts +22 -6
- package/src/server/agent.ts +35 -4987
- package/src/server/claude-autocontinue-commands.test.ts +494 -0
- package/src/server/claude-autocontinue-commands.ts +256 -0
- package/src/server/claude-cancel-handler.test.ts +472 -0
- package/src/server/claude-cancel-handler.ts +241 -0
- package/src/server/claude-chat-management.test.ts +395 -0
- package/src/server/claude-chat-management.ts +251 -0
- package/src/server/claude-harness-stream.test.ts +273 -0
- package/src/server/claude-harness-stream.ts +158 -0
- package/src/server/claude-loop-orch-commands.test.ts +579 -0
- package/src/server/claude-loop-orch-commands.ts +466 -0
- package/src/server/claude-message-normalizer.test.ts +213 -0
- package/src/server/claude-message-normalizer.ts +436 -0
- package/src/server/claude-prompt-helpers.test.ts +248 -0
- package/src/server/claude-prompt-helpers.ts +139 -0
- package/src/server/claude-sdk-queue.test.ts +169 -0
- package/src/server/claude-sdk-queue.ts +82 -0
- package/src/server/claude-send-command.test.ts +414 -0
- package/src/server/claude-send-command.ts +420 -0
- package/src/server/claude-session-config-helpers.test.ts +279 -0
- package/src/server/claude-session-config-helpers.ts +151 -0
- package/src/server/claude-session-config.test.ts +250 -0
- package/src/server/claude-session-config.ts +159 -0
- package/src/server/claude-session-error-handler.test.ts +498 -0
- package/src/server/claude-session-error-handler.ts +361 -0
- package/src/server/claude-session-lifecycle.test.ts +669 -0
- package/src/server/claude-session-lifecycle.ts +283 -0
- package/src/server/claude-session-rebuild.test.ts +224 -0
- package/src/server/claude-session-rebuild.ts +101 -0
- package/src/server/claude-session-runner.test.ts +523 -0
- package/src/server/claude-session-runner.ts +521 -0
- package/src/server/claude-session-spawner.test.ts +401 -0
- package/src/server/claude-session-spawner.ts +401 -0
- package/src/server/claude-session-start.test.ts +205 -0
- package/src/server/claude-session-start.ts +277 -0
- package/src/server/claude-session-state-queries.test.ts +344 -0
- package/src/server/claude-session-state-queries.ts +160 -0
- package/src/server/claude-session-state.ts +104 -0
- package/src/server/claude-slash-commands.test.ts +277 -0
- package/src/server/claude-slash-commands.ts +234 -0
- package/src/server/claude-spawn-helpers.test.ts +221 -0
- package/src/server/claude-spawn-helpers.ts +179 -0
- package/src/server/claude-steer-log.test.ts +243 -0
- package/src/server/claude-steer-log.ts +58 -0
- package/src/server/claude-subagent-tool-response.test.ts +213 -0
- package/src/server/claude-subagent-tool-response.ts +165 -0
- package/src/server/claude-subagent-wiring.test.ts +263 -0
- package/src/server/claude-subagent-wiring.ts +324 -0
- package/src/server/claude-tool-respond.test.ts +321 -0
- package/src/server/claude-tool-respond.ts +142 -0
- package/src/server/claude-turn-runner.test.ts +310 -0
- package/src/server/claude-turn-runner.ts +228 -0
- package/src/server/claude-turn-starter.test.ts +266 -0
- package/src/server/claude-turn-starter.ts +566 -0
- package/src/server/claude-usage-math.test.ts +169 -0
- package/src/server/claude-usage-math.ts +132 -0
- package/src/server/diff-store-branch-ops.adapter.test.ts +332 -0
- package/src/server/diff-store-branch-ops.adapter.ts +602 -0
- package/src/server/diff-store-commit-ops.adapter.test.ts +358 -0
- package/src/server/diff-store-commit-ops.adapter.ts +258 -0
- package/src/server/diff-store-errors.ts +85 -0
- package/src/server/diff-store-file-ops.adapter.ts +212 -0
- package/src/server/diff-store-git-branch.adapter.ts +686 -0
- package/src/server/diff-store-io.adapter.ts +27 -0
- package/src/server/diff-store-parse.test.ts +212 -0
- package/src/server/diff-store-parse.ts +122 -0
- package/src/server/diff-store-state.ts +82 -0
- package/src/server/diff-store.ts +76 -1854
- package/src/server/event-store-apply.test.ts +280 -0
- package/src/server/event-store-apply.ts +132 -0
- package/src/server/event-store-chat-lifecycle.test.ts +408 -0
- package/src/server/event-store-chat-lifecycle.ts +441 -0
- package/src/server/event-store-entity-write.ts +356 -0
- package/src/server/event-store-helpers.test.ts +230 -0
- package/src/server/event-store-helpers.ts +235 -0
- package/src/server/event-store-init.ts +276 -0
- package/src/server/event-store-messages.adapter.test.ts +365 -0
- package/src/server/event-store-messages.adapter.ts +213 -0
- package/src/server/event-store-orch-subscription.ts +124 -0
- package/src/server/event-store-orch.test.ts +462 -0
- package/src/server/event-store-orch.ts +312 -0
- package/src/server/event-store-peripheral-events.adapter.test.ts +254 -0
- package/src/server/event-store-peripheral-events.adapter.ts +105 -0
- package/src/server/event-store-snapshot.test.ts +597 -0
- package/src/server/event-store-snapshot.ts +658 -0
- package/src/server/event-store-subagent.test.ts +408 -0
- package/src/server/event-store-subagent.ts +198 -0
- package/src/server/event-store-tool-requests.test.ts +210 -0
- package/src/server/event-store-tool-requests.ts +131 -0
- package/src/server/event-store-transcript-write.adapter.ts +285 -0
- package/src/server/event-store-write-ops.test.ts +554 -0
- package/src/server/event-store-write-ops.ts +529 -0
- package/src/server/event-store.test.ts +35 -0
- package/src/server/event-store.ts +251 -2285
- package/src/server/harness-types.ts +15 -1
- package/src/server/oauth-errors.ts +19 -0
- package/src/server/ws-router-agent-ctrl.test.ts +187 -0
- package/src/server/ws-router-agent-ctrl.ts +137 -0
- package/src/server/ws-router-broadcast.ts +488 -0
- package/src/server/ws-router-chat.test.ts +461 -0
- package/src/server/ws-router-chat.ts +279 -0
- package/src/server/ws-router-defaults.test.ts +283 -0
- package/src/server/ws-router-defaults.ts +434 -0
- package/src/server/ws-router-diff.test.ts +167 -0
- package/src/server/ws-router-diff.ts +250 -0
- package/src/server/ws-router-envelope.ts +329 -0
- package/src/server/ws-router-misc.test.ts +422 -0
- package/src/server/ws-router-misc.ts +265 -0
- package/src/server/ws-router-orch.test.ts +190 -0
- package/src/server/ws-router-orch.ts +93 -0
- package/src/server/ws-router-project.test.ts +403 -0
- package/src/server/ws-router-project.ts +256 -0
- package/src/server/ws-router-push.test.ts +193 -0
- package/src/server/ws-router-push.ts +120 -0
- package/src/server/ws-router-settings.test.ts +173 -0
- package/src/server/ws-router-settings.ts +416 -0
- package/src/server/ws-router-skills.test.ts +194 -0
- package/src/server/ws-router-skills.ts +204 -0
- package/src/server/ws-router-utils.ts +224 -0
- package/src/server/ws-router.ts +339 -2254
- package/src/shared/app-settings-types.ts +365 -0
- package/src/shared/core-types.ts +27 -0
- package/src/shared/git-diff-types.ts +165 -0
- package/src/shared/mcp-types.ts +105 -0
- package/src/shared/provider-model-types.ts +437 -0
- package/src/shared/subagent-types.ts +198 -0
- package/src/shared/tool-call-types.ts +314 -0
- package/src/shared/transcript-types.ts +270 -0
- package/src/shared/types.ts +25 -1711
- package/dist/client/assets/channel-KQhRwDzJ.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-ChxT1GNq.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-ChxT1GNq.js +0 -1
- 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)
|