@cuongtran001/kanna 1.2.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-BLk1CZKB.js → arc-DXtN3EWJ.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-B01ZQYte.js → architectureDiagram-3BPJPVTR-CIGqW1z-.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-diL6a3cq.js → blockDiagram-GPEHLZMM-BafNS_H6.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BY1verL8.js → c4Diagram-AAUBKEIU-YdAgRSis.js} +1 -1
- package/dist/client/assets/channel-BEYTrUAm.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-psdZuajw.js → chunk-2J33WTMH-eiP5y5G-.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-CrwQVBc5.js → chunk-4BX2VUAB-CvLGzPMF.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-9-aj4jKO.js → chunk-55IACEB6-Y-S9Fb8A.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-1FNK9_nB.js → chunk-727SXJPM-6sJH1RI9.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DFhvd_Ek.js → chunk-AQP2D5EJ-hV1r_IXO.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-B7MLrDa7.js → chunk-FMBD7UC4-CC3L28S5.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-D4Df05QE.js → chunk-ND2GUHAM-BZ3czhdH.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-Iq17Dznm.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-BmaZhtXy.js → cose-bilkent-S5V4N54A-CfxdDghE.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BCmpfnfP.js → dagre-BM42HDAG-B8CddsbB.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-BIEcKowS.js → diagram-2AECGRRQ-F0yS0fVB.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-CRBABBfv.js → diagram-5GNKFQAL-cW0i0qlh.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BRxUk16N.js → diagram-KO2AKTUF-BzAKMeJT.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DPBs4xl1.js → diagram-LMA3HP47-qdC4XqIl.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BE9rgVv8.js → diagram-OG6HWLK6-CGcpi6Dh.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-D3vgA1xJ.js → erDiagram-TEJ5UH35-CxNTDicM.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-Cgu-8XXC.js → flowDiagram-I6XJVG4X-qkGa5TqY.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CgjXVyTR.js → ganttDiagram-6RSMTGT7-D9mVPoQi.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-zD5D8B-i.js → gitGraphDiagram-PVQCEYII-DA0grAXe.js} +1 -1
- package/dist/client/assets/{index-DBTdhMbJ.js → index-BqUY1Bm4.js} +1 -1
- package/dist/client/assets/index-CLsOWXff.css +32 -0
- package/dist/client/assets/{index-zQLLeAfl.js → index-TU1k6ov6.js} +253 -243
- package/dist/client/assets/{infoDiagram-5YYISTIA-BaFHqT4u.js → infoDiagram-5YYISTIA-CGljtLs3.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-2yAC1br2.js → ishikawaDiagram-YF4QCWOH-CtC0xrmG.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-DacQ-ND5.js → journeyDiagram-JHISSGLW-URLnVZeN.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-Qlbwm3z4.js → kanban-definition-UN3LZRKU-C2Q6aqQh.js} +1 -1
- package/dist/client/assets/{linear-DeafqpgO.js → linear-ByKHtsIx.js} +1 -1
- package/dist/client/assets/{mermaid.core-KYiCPJDj.js → mermaid.core-Dl_f2KLc.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-B1V-T6d3.js → mindmap-definition-RKZ34NQL-CaJ9IDLI.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DOF9OFRu.js → pieDiagram-4H26LBE5-mmYaf2Oa.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-lH1mB7ko.js → quadrantDiagram-W4KKPZXB-B_PO6OCC.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BaTsJ_sS.js → requirementDiagram-4Y6WPE33-M4huwJt1.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Pfxib5iI.js → sankeyDiagram-5OEKKPKP-B0hb1sWh.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BQMEKkBC.js → sequenceDiagram-3UESZ5HK-BAqSptnA.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-CuldNnzp.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-DP7u0YAg.js → timeline-definition-PNZ67QCA-MgAjHz8Q.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-QlrjpNeQ.js → vennDiagram-CIIHVFJN-DmKoO51W.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-BqdJ_sAM.js → wardley-L42UT6IY-CWcyHnYs.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Wi3kaQ5X.js → wardleyDiagram-YWT4CUSO-BGIGmFP9.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-D-KXMyCG.js → xychartDiagram-2RQKCTM6-D20YIvEl.js} +1 -1
- package/dist/client/index.html +2 -2
- 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.oauth-rotation.test.ts +101 -0
- package/src/server/agent.test.ts +24 -8
- package/src/server/agent.ts +35 -4963
- package/src/server/auto-continue/read-model.test.ts +2 -2
- package/src/server/auto-continue/read-model.ts +4 -1
- 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 -2284
- package/src/server/events.ts +3 -0
- package/src/server/harness-types.ts +15 -1
- package/src/server/oauth-errors.ts +19 -0
- package/src/server/read-models.ts +26 -1
- package/src/server/subagent-orchestrator.ts +3 -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/loop-progress.test.ts +106 -0
- package/src/shared/loop-progress.ts +88 -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 +27 -1668
- package/dist/client/assets/channel-BMkhjiLI.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C5Kg1XOD.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C5Kg1XOD.js +0 -1
- package/dist/client/assets/index-H6C-f2Vp.css +0 -32
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Ca2U11af.js +0 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// Subagent domain types: definitions, runtime snapshots, loop progress.
|
|
2
|
+
// Extracted from types.ts to keep the barrel lean.
|
|
3
|
+
// All external consumers importing from "../shared/types" continue to work unchanged.
|
|
4
|
+
|
|
5
|
+
import type { AgentProvider } from "./core-types"
|
|
6
|
+
import type { ClaudeModelOptions, CodexModelOptions } from "./provider-model-types"
|
|
7
|
+
import type { TranscriptEntry } from "./transcript-types"
|
|
8
|
+
|
|
9
|
+
export type SubagentContextScope = "previous-assistant-reply" | "full-transcript"
|
|
10
|
+
|
|
11
|
+
export type SubagentTriggerMode = "auto" | "manual"
|
|
12
|
+
|
|
13
|
+
export interface SubagentRestriction {
|
|
14
|
+
workingDir?: string
|
|
15
|
+
allowedPaths?: string[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface Subagent {
|
|
19
|
+
id: string
|
|
20
|
+
name: string
|
|
21
|
+
description?: string
|
|
22
|
+
provider: AgentProvider
|
|
23
|
+
model: string
|
|
24
|
+
modelOptions: ClaudeModelOptions | CodexModelOptions
|
|
25
|
+
systemPrompt: string
|
|
26
|
+
contextScope: SubagentContextScope
|
|
27
|
+
triggerMode: SubagentTriggerMode
|
|
28
|
+
workingDir?: string
|
|
29
|
+
allowedPaths?: string[]
|
|
30
|
+
// Per-subagent agentic-turn bound — the analog of Claude Code's agent
|
|
31
|
+
// frontmatter `maxTurns`. Unset = unbounded (Claude Code's default).
|
|
32
|
+
// Claude-SDK runs pass it natively to query() (graceful stop, output kept);
|
|
33
|
+
// PTY/Codex runs get a host-side tool-call-count backstop (hard abort).
|
|
34
|
+
maxTurns?: number
|
|
35
|
+
createdAt: number
|
|
36
|
+
updatedAt: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface SubagentInput {
|
|
40
|
+
name: string
|
|
41
|
+
description?: string
|
|
42
|
+
provider: AgentProvider
|
|
43
|
+
model: string
|
|
44
|
+
modelOptions: ClaudeModelOptions | CodexModelOptions
|
|
45
|
+
systemPrompt: string
|
|
46
|
+
contextScope: SubagentContextScope
|
|
47
|
+
triggerMode?: SubagentTriggerMode
|
|
48
|
+
workingDir?: string
|
|
49
|
+
allowedPaths?: string[]
|
|
50
|
+
maxTurns?: number
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface SubagentPatch {
|
|
54
|
+
name?: string
|
|
55
|
+
description?: string | null
|
|
56
|
+
provider?: AgentProvider
|
|
57
|
+
model?: string
|
|
58
|
+
modelOptions?: Partial<ClaudeModelOptions> | Partial<CodexModelOptions>
|
|
59
|
+
systemPrompt?: string
|
|
60
|
+
contextScope?: SubagentContextScope
|
|
61
|
+
triggerMode?: SubagentTriggerMode
|
|
62
|
+
workingDir?: string | null
|
|
63
|
+
allowedPaths?: string[] | null
|
|
64
|
+
maxTurns?: number | null
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type SubagentValidationErrorCode =
|
|
68
|
+
| "EMPTY_NAME"
|
|
69
|
+
| "INVALID_CHAR"
|
|
70
|
+
| "RESERVED_NAME"
|
|
71
|
+
| "DUPLICATE_NAME"
|
|
72
|
+
| "TOO_LONG"
|
|
73
|
+
| "NOT_FOUND"
|
|
74
|
+
| "RESTRICTION_NOT_SUPPORTED"
|
|
75
|
+
| "INVALID_PATH"
|
|
76
|
+
| "PATH_ESCAPE"
|
|
77
|
+
| "EMPTY_ALLOWED_PATHS"
|
|
78
|
+
|
|
79
|
+
export interface SubagentValidationError {
|
|
80
|
+
code: SubagentValidationErrorCode
|
|
81
|
+
message: string
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export type SubagentErrorCode =
|
|
85
|
+
| "AUTH_REQUIRED"
|
|
86
|
+
| "UNKNOWN_SUBAGENT"
|
|
87
|
+
| "MANUAL_ONLY"
|
|
88
|
+
| "LOOP_DETECTED"
|
|
89
|
+
| "DEPTH_EXCEEDED"
|
|
90
|
+
| "TIMEOUT"
|
|
91
|
+
| "MAX_TURNS"
|
|
92
|
+
| "PROVIDER_ERROR"
|
|
93
|
+
| "INTERRUPTED"
|
|
94
|
+
| "USER_CANCELLED"
|
|
95
|
+
| "CAP_EXCEEDED"
|
|
96
|
+
| "NO_LIVE_SESSION"
|
|
97
|
+
|
|
98
|
+
export type SubagentRunStatus = "running" | "completed" | "failed" | "cancelled"
|
|
99
|
+
|
|
100
|
+
export interface ProviderUsage {
|
|
101
|
+
inputTokens?: number
|
|
102
|
+
outputTokens?: number
|
|
103
|
+
cachedInputTokens?: number
|
|
104
|
+
costUsd?: number
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface SubagentPendingTool {
|
|
108
|
+
toolUseId: string
|
|
109
|
+
toolKind: "ask_user_question" | "exit_plan_mode"
|
|
110
|
+
input: Record<string, unknown>
|
|
111
|
+
requestedAt: number
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface SubagentRunSnapshot {
|
|
115
|
+
runId: string
|
|
116
|
+
chatId: string
|
|
117
|
+
subagentId: string | null
|
|
118
|
+
subagentName: string
|
|
119
|
+
/**
|
|
120
|
+
* Short human label for this run, derived from the first line of the spawn
|
|
121
|
+
* prompt (e.g. "Migrate useKannaState.ts"). Null for runs started before this
|
|
122
|
+
* field existed or by error paths that never carried a prompt. Drives the
|
|
123
|
+
* Loop Progress panel rows so each round reads as the chunk it worked on
|
|
124
|
+
* rather than an opaque run id.
|
|
125
|
+
*/
|
|
126
|
+
label: string | null
|
|
127
|
+
provider: AgentProvider
|
|
128
|
+
model: string
|
|
129
|
+
status: SubagentRunStatus
|
|
130
|
+
parentUserMessageId: string
|
|
131
|
+
parentRunId: string | null
|
|
132
|
+
depth: number
|
|
133
|
+
startedAt: number
|
|
134
|
+
finishedAt: number | null
|
|
135
|
+
finalText: string | null
|
|
136
|
+
error: { code: SubagentErrorCode; message: string } | null
|
|
137
|
+
usage: ProviderUsage | null
|
|
138
|
+
/**
|
|
139
|
+
* Every TranscriptEntry the subagent produced, in arrival order. Includes
|
|
140
|
+
* tool_call, tool_result, system_init, account_info, result. assistant_text
|
|
141
|
+
* entries also live here in addition to being concatenated into finalText
|
|
142
|
+
* via subagent_message_delta — clients should prefer entries[] for rich
|
|
143
|
+
* rendering, finalText only as a quick text-only summary.
|
|
144
|
+
*/
|
|
145
|
+
entries: TranscriptEntry[]
|
|
146
|
+
/**
|
|
147
|
+
* Set while the subagent is awaiting a user response to an
|
|
148
|
+
* interactive tool call (AskUserQuestion / ExitPlanMode). Null
|
|
149
|
+
* otherwise. The orchestrator's wall-clock timeout is paused while
|
|
150
|
+
* this is non-null.
|
|
151
|
+
*/
|
|
152
|
+
pendingTool: SubagentPendingTool | null
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export type LoopRowStatus = "pending" | "running" | "done" | "failed"
|
|
156
|
+
|
|
157
|
+
export interface LoopRow {
|
|
158
|
+
runId: string
|
|
159
|
+
label: string
|
|
160
|
+
status: LoopRowStatus
|
|
161
|
+
startedAt: number
|
|
162
|
+
finishedAt: number | null
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export interface LoopRateLimitInfo {
|
|
166
|
+
/** The live auto-continue schedule id, so the panel's Resume action can accept it. */
|
|
167
|
+
scheduleId: string
|
|
168
|
+
/** epoch ms the usage limit resets (and the resume is/would be scheduled for) */
|
|
169
|
+
resetAt: number
|
|
170
|
+
tz: string
|
|
171
|
+
/**
|
|
172
|
+
* true → an auto-continue is already scheduled to fire at `resetAt`
|
|
173
|
+
* (the loop resumes on its own).
|
|
174
|
+
* false → the resume is only proposed and waits on the user
|
|
175
|
+
* (auto-resume setting off) — render a "Resume" action.
|
|
176
|
+
*/
|
|
177
|
+
scheduled: boolean
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export interface LoopProgressSnapshot {
|
|
181
|
+
chatId: string
|
|
182
|
+
/** Whether a loop is currently armed for this chat. */
|
|
183
|
+
armed: boolean
|
|
184
|
+
/** Latest first — most recent delegation at the top, mirroring PROGRESS.md. */
|
|
185
|
+
rows: LoopRow[]
|
|
186
|
+
/** Non-null while the loop is paused on a Claude usage limit. */
|
|
187
|
+
rateLimit: LoopRateLimitInfo | null
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Type guards
|
|
191
|
+
|
|
192
|
+
export function isSubagentContextScope(value: string): value is SubagentContextScope {
|
|
193
|
+
return value === "previous-assistant-reply" || value === "full-transcript"
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export function isSubagentTriggerMode(value: string): value is SubagentTriggerMode {
|
|
197
|
+
return value === "auto" || value === "manual"
|
|
198
|
+
}
|
|
@@ -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
|