apex-dev 3.0.1 → 3.0.3
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/highlights-eq9cgrbb.scm +604 -0
- package/dist/highlights-ghv9g403.scm +205 -0
- package/dist/highlights-hk7bwhj4.scm +284 -0
- package/dist/highlights-r812a2qc.scm +150 -0
- package/dist/highlights-x6tmsnaa.scm +115 -0
- package/dist/index.js +62488 -0
- package/dist/injections-73j83es3.scm +27 -0
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
- package/package.json +10 -7
- package/.config/amp/settings.json +0 -3
- package/.config/opencode/oh-my-opencode.json +0 -58
- package/.config/opencode/opencode.json +0 -6
- package/.local/share/amp/device-id.json +0 -3
- package/.local/share/amp/history.jsonl +0 -74
- package/.local/share/amp/session.json +0 -6
- package/.local/share/amp/threads/T-019c93b8-fce7-7083-aab9-d5f1c88a9545.json +0 -2528
- package/.local/share/amp/threads/T-019c93c8-4b7a-71df-94ac-867d8236a288.json +0 -7
- package/.local/share/amp/threads/T-019c93cd-5a7d-728e-8289-02e0ef4ca2ff.json +0 -680
- package/.local/share/amp/threads/T-019c93e7-83ca-7633-9eed-12bdcc118163.json +0 -873
- package/.local/share/amp/threads/T-019c93ea-ccd3-765a-88c9-42d7b631e977.json +0 -620
- package/.local/share/amp/threads/T-019c93ee-5977-71af-9ab7-c4611004b703.json +0 -1000
- package/.local/share/amp/threads/T-019c93f0-8328-71ed-a250-6da169cebfe1.json +0 -829
- package/.local/share/amp/threads/T-019c93f5-7bdd-703b-b2cd-0a04da64441a.json +0 -459
- package/.local/share/amp/threads/T-019c93f8-2b2e-733b-8249-9876546d9b5b.json +0 -764
- package/.local/share/amp/threads/T-019c93fd-fade-7195-a3b7-358f180d40b8.json +0 -7
- package/.local/share/amp/threads/T-019c93fe-2e56-705e-827e-eb99bd02e257.json +0 -3593
- package/.local/share/amp/threads/T-019c9408-6e64-77e1-9519-b913e3b24a03.json +0 -1559
- package/.local/share/amp/threads/T-019c9409-feeb-736d-b92c-4f7a263a643c.json +0 -7
- package/.local/share/amp/threads/T-019c940b-8d11-755b-b9e1-f923d8a5e6ba.json +0 -7
- package/.local/share/amp/threads/T-019c943a-6c5e-76a5-bf4e-170f7ad452ce.json +0 -979
- package/.local/share/amp/threads/T-019c94b2-1c8f-76d8-96d0-82449a028849.json +0 -1584
- package/.local/share/amp/threads/T-019c94b6-68f0-726e-92dd-90c5411ca28c.json +0 -7
- package/.local/share/amp/threads/T-019c94bf-a589-72a3-b3c2-a81359d9e0a6.json +0 -7
- package/.local/share/amp/threads/T-019c94e1-1bd9-70ab-b6f2-abd5cab4f4ce.json +0 -1035
- package/.local/share/amp/threads/T-019c94fd-cc4a-714b-896a-74f94020f6eb.json +0 -1310
- package/.local/share/amp/threads/T-019c9501-8976-7138-aca6-245a01a8fe9b.json +0 -7
- package/.local/share/amp/threads/T-019c9504-4b51-763e-8a9f-5d4cdfcf0cfa.json +0 -496
- package/.local/share/amp/threads/T-019c9506-4e3b-74fd-8eda-cedbf3793598.json +0 -2679
- package/.local/share/amp/threads/T-019c9508-178c-718c-88d2-caf816d64f65.json +0 -965
- package/.local/share/amp/threads/T-019c9509-2812-71fd-8fd2-923e29ad34fa.json +0 -7
- package/.local/share/amp/threads/T-019c950e-69fe-77d6-9854-fc73b77a3148.json +0 -4570
- package/.local/share/amp/threads/T-019c9707-6e2b-741c-b4d4-117026a78449.json +0 -2899
- package/.local/share/amp/threads/T-019c971b-6bc0-77b8-8868-f8956d3e71a8.json +0 -7
- package/.local/share/amp/threads/T-019c971b-c87c-75f3-a61f-beb18a1cb25f.json +0 -474
- package/.local/share/amp/threads/T-019c971d-d371-70ac-9805-5c739908e73b.json +0 -802
- package/.local/share/amp/threads/T-019c9722-d73d-74f1-9d1d-8fafaad0ede7.json +0 -7
- package/.local/share/amp/threads/T-019c9761-858c-719b-911f-bc2e4c8cbdde.json +0 -188
- package/.local/share/amp/threads/T-019c9761-f5f3-7606-a900-ebe7f10d6e37.json +0 -121
- package/.local/share/amp/threads/T-019c9763-b1ae-729d-90aa-f59938ce912e.json +0 -799
- package/.local/share/amp/threads/T-019c9769-4a8a-77b8-beab-f48973276f9a.json +0 -1541
- package/.local/share/amp/threads/T-019c9772-edac-7075-b26e-0ada1f8697d2.json +0 -7
- package/.local/share/amp/threads/T-019c97e8-a9ab-71a1-a8f9-109c540c98bf.json +0 -111
- package/.local/share/amp/threads/T-019c97e9-2277-753c-8c5d-df745fa6cfff.json +0 -7
- package/.local/share/amp/threads/T-019c97e9-f28e-758d-9663-e37047a8ed95.json +0 -111
- package/.local/share/amp/threads/T-019c97ea-17c7-77b8-92b2-f641c069bcc9.json +0 -71
- package/.local/share/amp/threads/T-019c97ea-44c6-75b8-88bc-d88113194f6a.json +0 -1611
- package/.local/share/amp/threads/T-019c97ec-abae-7251-a5f6-693adf496a1c.json +0 -7
- package/.local/share/amp/threads/T-019c97f5-8e61-73ad-8c5d-2637abedcde6.json +0 -1341
- package/.local/share/amp/threads/T-019c989d-4f4e-7249-bde0-21d19455ccae.json +0 -163
- package/.local/share/amp/threads/T-019c989d-9024-73c4-bee8-e2ae45028a39.json +0 -124
- package/.local/share/amp/threads/T-019c989e-1394-74ad-8234-ac573fcdb4c7.json +0 -1260
- package/.local/share/amp/threads/T-019c989f-e3dd-772e-85ac-525d0fc88fda.json +0 -403
- package/.local/share/amp/threads/T-019c98a1-7b0c-778a-b311-2e1cff85d710.json +0 -3422
- package/.local/share/amp/threads/T-019c98c5-4b7f-7284-99e9-88aa8c18ba66.json +0 -1830
- package/.local/share/amp/threads/T-019c98d0-f27f-76ec-be10-6df96f22be99.json +0 -4061
- package/.local/share/amp/threads/T-019c98f9-d031-704d-a0c2-f2f395f68f2b.json +0 -509
- package/.local/share/amp/threads/T-019c9919-f9ee-766c-90be-af7a07f6a4c6.json +0 -2075
- package/.local/share/amp/threads/T-019c991c-b98b-7158-9083-cc52408beb13.json +0 -7
- package/.local/share/amp/threads/T-019c991d-66d6-72aa-a9a1-105f7df0ea06.json +0 -7
- package/.local/share/amp/threads/T-019c9c2e-71a4-77ff-bd7f-b053da7f9000.json +0 -1637
- package/.local/share/amp/threads/T-019c9c45-27ca-728b-ba77-835115dfa9b2.json +0 -3893
- package/.local/share/amp/threads/T-019c9c48-45dc-736a-9752-e4119fe698f9.json +0 -7
- package/.local/share/amp/threads/T-019c9c4d-266b-72d0-b56e-74a5777e6583.json +0 -7
- package/.local/share/amp/threads/T-019c9c52-ab89-758f-9178-bda99c39d10b.json +0 -7
- package/.local/share/amp/threads/T-019c9c56-5715-72e2-b8b4-87711a842dd1.json +0 -1799
- package/.local/share/kilo/kilo.db +0 -0
- package/.local/share/kilo/kilo.db-shm +0 -0
- package/.local/share/kilo/kilo.db-wal +0 -0
- package/.local/share/kilo/storage/migration +0 -1
- package/.local/share/kilo/storage/session_diff/ses_36bea4cb9ffe1b0j5HEL14KEaU.json +0 -1
- package/.local/share/kilo/storage/session_diff/ses_36beaa8f2ffeeZ3Y39SQ9UDWQQ.json +0 -1
- package/.local/share/kilo/telemetry-id +0 -1
- package/.local/share/opencode/auth.json +0 -6
- package/.local/share/opencode/opencode.db +0 -0
- package/.local/share/opencode/opencode.db-shm +0 -0
- package/.local/share/opencode/opencode.db-wal +0 -0
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36870ea98ffe8S5ZOCE4F11yFh.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_3687a3e9affewUnHBzvpiPR6df.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36886e68dffeKVgUWf6lzXdEEt.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36bee9f1effeJbiHHLWLR6O3WJ.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36c25e50affef2nhaXq9aSgKH3.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36c260708ffel4wG4yhdo0knDD.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36c261531ffeoVcvqXxry2bN9H.json +0 -6
- package/.local/share/opencode/storage/agent-usage-reminder/ses_36c291bddffePWRiaFLLJAC1y7.json +0 -6
- package/.local/share/opencode/storage/migration +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36870ea98ffe8S5ZOCE4F11yFh.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_3687a3e9affewUnHBzvpiPR6df.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36886e68dffeKVgUWf6lzXdEEt.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36bee9f1effeJbiHHLWLR6O3WJ.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36c25e50affef2nhaXq9aSgKH3.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36c260708ffel4wG4yhdo0knDD.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36c261531ffeoVcvqXxry2bN9H.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36c291bddffePWRiaFLLJAC1y7.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36c2af1c5ffegxEaOZOGcVykyy.json +0 -1
- package/.local/share/opencode/storage/session_diff/ses_36c2be235ffeOa6x8UCk1HW4kU.json +0 -1
- package/.local/share/opencode/tool-output/tool_c93da840c0016GrdyAkOnHGezU +0 -2330
- package/.local/share/opencode/tool-output/tool_c9411e784001cRoQqwVDb1a6lY +0 -1017
- package/.local/state/replit/log-query.db +0 -0
- package/.local/state/replit/log-query.db-shm +0 -0
- package/.local/state/replit/log-query.db-wal +0 -0
- package/.replit +0 -41
- package/.upm/store.json +0 -1
- package/AGENTS.md +0 -32
- package/bun.lock +0 -271
- package/generated-icon.png +0 -0
- package/hello.txt +0 -1
- package/index.jsx +0 -24
- package/src/agent.js +0 -504
- package/src/app.jsx +0 -96
- package/src/commands.js +0 -133
- package/src/components/AssistantMessage.jsx +0 -83
- package/src/components/ChatArea.jsx +0 -84
- package/src/components/DiffView.jsx +0 -26
- package/src/components/Divider.jsx +0 -8
- package/src/components/Header.jsx +0 -44
- package/src/components/HelpModal.jsx +0 -81
- package/src/components/InputBar.jsx +0 -32
- package/src/components/Spinner.jsx +0 -23
- package/src/components/StatusBar.jsx +0 -44
- package/src/components/SystemMessage.jsx +0 -31
- package/src/components/ThinkBlock.jsx +0 -29
- package/src/components/ToolCallItem.jsx +0 -43
- package/src/components/UserMessage.jsx +0 -11
- package/src/components/Welcome.jsx +0 -14
- package/src/config.js +0 -196
- package/src/hooks/useLayout.js +0 -15
- package/src/hooks/useStore.js +0 -6
- package/src/prompt.js +0 -101
- package/src/store.js +0 -99
- package/src/theme.js +0 -19
- package/src/thinking.js +0 -54
- package/src/toolExecutors.js +0 -853
- package/src/tools.js +0 -335
- package/src/utils.js +0 -32
- package/tsconfig.json +0 -10
|
@@ -1,1341 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"v": 7881,
|
|
3
|
-
"id": "T-019c97f5-8e61-73ad-8c5d-2637abedcde6",
|
|
4
|
-
"created": 1772075978347,
|
|
5
|
-
"messages": [
|
|
6
|
-
{
|
|
7
|
-
"role": "user",
|
|
8
|
-
"messageId": 0,
|
|
9
|
-
"content": [
|
|
10
|
-
{
|
|
11
|
-
"type": "text",
|
|
12
|
-
"text": "when the agent is running subagents, i want the open/close drawer to work via click."
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"userState": {
|
|
16
|
-
"currentlyVisibleFiles": []
|
|
17
|
-
},
|
|
18
|
-
"agentMode": "smart",
|
|
19
|
-
"meta": {
|
|
20
|
-
"sentAt": 1772076001322
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"role": "assistant",
|
|
25
|
-
"messageId": 1,
|
|
26
|
-
"content": [
|
|
27
|
-
{
|
|
28
|
-
"type": "text",
|
|
29
|
-
"text": "\n\n"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"type": "thinking",
|
|
33
|
-
"thinking": "The user wants to fix the open/close drawer behavior when subagents are running. Let me first understand the codebase structure to find the relevant code.",
|
|
34
|
-
"signature": "EsUCCkgICxACGAIqQEnf1RW5NP5wP+xDO57kvPIYPpLp6paRwX5P19CjXzt/O0g/8qIwzjkOtX7lrF2Mx8G+riYrLBpEgQ+e7hb+POISDBgZu8oL7wwqVR+dhhoMdhhHEuzf2i1knbiSIjCwlkRw58VXC9mU348upWFrlP2PWfG7J5DE9SCtc8XoD3rY2/ytGPUUZZoHZG7dy+IqqgF4B9WpP6T4cxISPQ/w2e6qi5+aTmVcl4DLhaXjdRFnFUdUIVUn8Met9MacTlqmnK89ANEjIF5jrLk6/90sCWmetV+7HJ2dD8ytpym4aIVWVTktg5WiqHy7F+kd2uVQjwNSGxLeFinSFzmHJ6TNu2F0Xd5tFa/eUZz00sFUclqpaE14jhqfLfioXRow+djz1NocfXq/vq47gAnfXLGEJhJGT/OIe01ZKaM15BgB",
|
|
35
|
-
"provider": "anthropic"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"type": "text",
|
|
39
|
-
"text": "Let me explore the codebase to understand the current drawer implementation."
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"type": "tool_use",
|
|
43
|
-
"complete": true,
|
|
44
|
-
"id": "toolu_vrtx_01XRMwiGtF13tfNJuzAGQC9q",
|
|
45
|
-
"name": "Read",
|
|
46
|
-
"input": {
|
|
47
|
-
"path": "/home/runner/workspace/src"
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"type": "tool_use",
|
|
52
|
-
"complete": true,
|
|
53
|
-
"id": "toolu_vrtx_014NT85Wv9wSb4mxuzmkYJGw",
|
|
54
|
-
"name": "Read",
|
|
55
|
-
"input": {
|
|
56
|
-
"path": "/home/runner/workspace/index.js"
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
],
|
|
60
|
-
"state": {
|
|
61
|
-
"type": "complete",
|
|
62
|
-
"stopReason": "tool_use"
|
|
63
|
-
},
|
|
64
|
-
"usage": {
|
|
65
|
-
"model": "claude-opus-4-6",
|
|
66
|
-
"maxInputTokens": 168000,
|
|
67
|
-
"inputTokens": 3,
|
|
68
|
-
"outputTokens": 165,
|
|
69
|
-
"cacheCreationInputTokens": 1212,
|
|
70
|
-
"cacheReadInputTokens": 13127,
|
|
71
|
-
"totalInputTokens": 14342,
|
|
72
|
-
"timestamp": "2026-02-26T03:20:05.553Z"
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
"role": "user",
|
|
77
|
-
"messageId": 2,
|
|
78
|
-
"content": [
|
|
79
|
-
{
|
|
80
|
-
"type": "tool_result",
|
|
81
|
-
"toolUseID": "toolu_vrtx_01XRMwiGtF13tfNJuzAGQC9q",
|
|
82
|
-
"run": {
|
|
83
|
-
"status": "done",
|
|
84
|
-
"progress": {},
|
|
85
|
-
"result": {
|
|
86
|
-
"absolutePath": "/home/runner/workspace/src",
|
|
87
|
-
"content": "agent.js\ncommands.js\nconfig.js\nprompt.js\nthinking.js\ntoolExecutors.js\ntools.js\nui.js",
|
|
88
|
-
"isDirectory": true,
|
|
89
|
-
"directoryEntries": [
|
|
90
|
-
"agent.js",
|
|
91
|
-
"commands.js",
|
|
92
|
-
"config.js",
|
|
93
|
-
"prompt.js",
|
|
94
|
-
"thinking.js",
|
|
95
|
-
"toolExecutors.js",
|
|
96
|
-
"tools.js",
|
|
97
|
-
"ui.js"
|
|
98
|
-
]
|
|
99
|
-
},
|
|
100
|
-
"trackFiles": [
|
|
101
|
-
"file:///home/runner/workspace/src"
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
"type": "tool_result",
|
|
107
|
-
"toolUseID": "toolu_vrtx_014NT85Wv9wSb4mxuzmkYJGw",
|
|
108
|
-
"run": {
|
|
109
|
-
"status": "done",
|
|
110
|
-
"progress": {},
|
|
111
|
-
"result": {
|
|
112
|
-
"absolutePath": "/home/runner/workspace/index.js",
|
|
113
|
-
"content": "1: #!/usr/bin/env node\n2: 'use strict';\n3: \n4: const { session } = require('./src/config');\n5: const {\n6: t,\n7: indent,\n8: showHeader,\n9: showWelcome,\n10: showPrompt,\n11: showSessionSummary,\n12: createPrompt,\n13: } = require('./src/ui');\n14: const { handleSlashCommand } = require('./src/commands');\n15: const { handleUserInput, setRlClosed, getRlClosed, getIsProcessing } = require('./src/agent');\n16: \n17: // ===== State =====\n18: let rl;\n19: let askQuestion;\n20: \n21: // ===== Input Loop =====\n22: function setupInputLoop() {\n23: setRlClosed(false);\n24: rl = createPrompt();\n25: \n26: rl.on('close', () => {\n27: setRlClosed(true);\n28: if (getIsProcessing()) return;\n29: // If stdin is still usable, re-create readline (e.g. terminal glitch)\n30: if (!process.stdin.destroyed && process.stdin.readable) {\n31: setupInputLoop();\n32: askQuestion();\n33: return;\n34: }\n35: console.log();\n36: showSessionSummary();\n37: console.log(indent(t.dim('Goodbye! ') + t.primary('✦')));\n38: console.log();\n39: process.exit(0);\n40: });\n41: }\n42: \n43: // ===== Main Loop =====\n44: async function main() {\n45: showHeader();\n46: showWelcome();\n47: \n48: setupInputLoop();\n49: \n50: askQuestion = () => {\n51: if (getRlClosed()) return;\n52: process.stdin.resume();\n53: const promptStr = showPrompt();\n54: \n55: rl.question(promptStr, async (answer) => {\n56: if (answer === null || answer === undefined) {\n57: process.exit(0);\n58: }\n59: const input = answer.trim();\n60: \n61: if (!input) { askQuestion(); return; }\n62: \n63: // Slash commands\n64: if (input.startsWith('/')) {\n65: await handleSlashCommand(input, rl);\n66: askQuestion();\n67: return;\n68: }\n69: \n70: if (input === 'exit' || input === 'quit') {\n71: console.log();\n72: showSessionSummary();\n73: console.log(indent(t.dim('Goodbye! ') + t.primary('✦')));\n74: console.log();\n75: process.exit(0);\n76: }\n77: \n78: try {\n79: await handleUserInput(input, { setupInputLoop, askQuestion });\n80: } catch (err) {\n81: console.log(indent(t.red('✗ Unexpected error: ') + t.text(err.message)));\n82: console.log();\n83: }\n84: askQuestion();\n85: });\n86: };\n87: \n88: askQuestion();\n89: }\n90: \n91: // ===== Run =====\n92: main().catch(console.error);"
|
|
114
|
-
},
|
|
115
|
-
"trackFiles": [
|
|
116
|
-
"file:///home/runner/workspace/index.js"
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"role": "assistant",
|
|
124
|
-
"messageId": 3,
|
|
125
|
-
"content": [
|
|
126
|
-
{
|
|
127
|
-
"type": "tool_use",
|
|
128
|
-
"complete": true,
|
|
129
|
-
"id": "toolu_vrtx_017b3bNiThQNhhWZR3tS3rEU",
|
|
130
|
-
"name": "Read",
|
|
131
|
-
"input": {
|
|
132
|
-
"path": "/home/runner/workspace/src/ui.js"
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
"type": "tool_use",
|
|
137
|
-
"complete": true,
|
|
138
|
-
"id": "toolu_vrtx_01HgbA1vBwue3qk1q44obBQz",
|
|
139
|
-
"name": "Read",
|
|
140
|
-
"input": {
|
|
141
|
-
"path": "/home/runner/workspace/src/agent.js"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
],
|
|
145
|
-
"state": {
|
|
146
|
-
"type": "complete",
|
|
147
|
-
"stopReason": "tool_use"
|
|
148
|
-
},
|
|
149
|
-
"usage": {
|
|
150
|
-
"model": "claude-opus-4-6",
|
|
151
|
-
"maxInputTokens": 168000,
|
|
152
|
-
"inputTokens": 1,
|
|
153
|
-
"outputTokens": 107,
|
|
154
|
-
"cacheCreationInputTokens": 2460,
|
|
155
|
-
"cacheReadInputTokens": 13127,
|
|
156
|
-
"totalInputTokens": 15588,
|
|
157
|
-
"timestamp": "2026-02-26T03:20:08.190Z"
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"role": "user",
|
|
162
|
-
"messageId": 4,
|
|
163
|
-
"content": [
|
|
164
|
-
{
|
|
165
|
-
"type": "tool_result",
|
|
166
|
-
"toolUseID": "toolu_vrtx_017b3bNiThQNhhWZR3tS3rEU",
|
|
167
|
-
"run": {
|
|
168
|
-
"status": "done",
|
|
169
|
-
"progress": {},
|
|
170
|
-
"result": {
|
|
171
|
-
"absolutePath": "/home/runner/workspace/src/ui.js",
|
|
172
|
-
"content": "1: 'use strict';\n2: \n3: const chalk = require('chalk');\n4: const ora = require('ora');\n5: const boxen = require('boxen');\n6: const figures = require('figures');\n7: const readline = require('readline');\n8: const { highlight } = require('cli-highlight');\n9: const path = require('path');\n10: const { execSync } = require('child_process');\n11: const { MAX_TOOL_ITERATIONS, PROJECT_ROOT, session, timestamp } = require('./config');\n12: \n13: // ===== Theme (Amp-inspired) =====\n14: const t = {\n15: primary: chalk.hex('#6366f1'),\n16: accent: chalk.hex('#818cf8'),\n17: dim: chalk.dim,\n18: muted: chalk.gray,\n19: text: chalk.white,\n20: bold: chalk.bold,\n21: green: chalk.green,\n22: yellow: chalk.yellow,\n23: red: chalk.red,\n24: blue: chalk.blue,\n25: cyan: chalk.cyan,\n26: italic: chalk.italic,\n27: };\n28: \n29: // ===== Layout =====\n30: const COLS = Math.min(process.stdout.columns || 80, 100);\n31: \n32: function hr() {\n33: return t.dim('─'.repeat(COLS));\n34: }\n35: \n36: function stripAnsi(str) {\n37: return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n38: }\n39: \n40: function indent(str, n = 0) {\n41: if (n === 0) return str;\n42: const prefix = ' '.repeat(n);\n43: return str.split('\\n').map(l => prefix + l).join('\\n');\n44: }\n45: \n46: // ===== Header =====\n47: function showHeader() {\n48: console.clear();\n49: let branch = '';\n50: try { branch = execSync('git rev-parse --abbrev-ref HEAD 2>/dev/null', { encoding: 'utf-8', cwd: PROJECT_ROOT }).trim(); } catch {}\n51: \n52: const name = t.primary.bold('⚡ Apex');\n53: const branchStr = branch ? t.dim('on ') + t.text(branch) : '';\n54: const cwd = t.dim(path.basename(PROJECT_ROOT));\n55: \n56: console.log();\n57: console.log(`${name} ${cwd} ${branchStr}`);\n58: console.log(hr());\n59: }\n60: \n61: // ===== Welcome =====\n62: function showWelcome() {\n63: console.log();\n64: console.log(t.bold('How can I help?'));\n65: console.log(t.dim(`Tools available · Max ${MAX_TOOL_ITERATIONS} iterations per turn`));\n66: console.log();\n67: }\n68: \n69: // ===== Messages =====\n70: function showUserMessage(text) {\n71: console.log();\n72: console.log(t.blue.bold('You'));\n73: console.log(text);\n74: console.log();\n75: }\n76: \n77: function showAssistantHeader() {\n78: console.log(t.primary.bold('Apex'));\n79: }\n80: \n81: function showAssistantMessage(text) {\n82: const lines = text.split('\\n');\n83: const formatted = [];\n84: let inCodeBlock = false;\n85: let codeLines = [];\n86: let codeLang = '';\n87: \n88: for (const line of lines) {\n89: if (line.startsWith('```') && !inCodeBlock) {\n90: inCodeBlock = true;\n91: codeLang = line.slice(3).trim() || 'code';\n92: codeLines = [];\n93: } else if (line.startsWith('```') && inCodeBlock) {\n94: inCodeBlock = false;\n95: formatted.push(renderCodeBlock(codeLines.join('\\n'), codeLang));\n96: } else if (inCodeBlock) {\n97: codeLines.push(line);\n98: } else {\n99: const processed = line.replace(/`([^`]+)`/g, (_, code) => t.cyan(code));\n100: formatted.push(processed);\n101: }\n102: }\n103: \n104: console.log(formatted.join('\\n'));\n105: console.log();\n106: }\n107: \n108: // ===== Code Block =====\n109: function renderCodeBlock(code, lang) {\n110: const label = t.dim(`── ${lang} ──`);\n111: let highlighted;\n112: try {\n113: highlighted = highlight(code, { language: lang, ignoreIllegals: true });\n114: } catch {\n115: highlighted = code;\n116: }\n117: \n118: const cLines = highlighted.split('\\n').map((line, i) => {\n119: return t.dim(String(i + 1).padStart(3) + ' │ ') + line;\n120: });\n121: \n122: return `${label}\\n${cLines.join('\\n')}\\n${t.dim('─'.repeat(Math.min(COLS, 60)))}`;\n123: }\n124: \n125: // ===== Tool Display =====\n126: function toolBadge(name) {\n127: return t.dim('[') + t.accent(name) + t.dim(']');\n128: }\n129: \n130: function toolDetail(name, args) {\n131: switch (name) {\n132: case 'Bash': return args.command || '';\n133: case 'Grep': return `\"${args.pattern}\"${args.path ? ` in ${args.path}` : ''}`;\n134: case 'Glob': return args.pattern || '';\n135: case 'ListDir': return args.path || '.';\n136: case 'Read': {\n137: let d = args.path || '';\n138: if (args.start_line) d += `:${args.start_line}-${args.end_line || ''}`;\n139: return d;\n140: }\n141: case 'Write': return args.path || '';\n142: case 'Edit': return args.path || '';\n143: case 'Patch': return `${args.path} (${(args.edits || []).length} edits)`;\n144: case 'UndoEdit': return args.path || '';\n145: case 'Task': return args.description || '';\n146: case 'CodeReview': {\n147: const extra = (args.files || []).length;\n148: const modCount = session.filesModified.size;\n149: return `${modCount} modified${extra ? ` + ${extra} extra` : ''}`;\n150: }\n151: default: return JSON.stringify(args).slice(0, 60);\n152: }\n153: }\n154: \n155: async function showToolCall(name, detail, startTime) {\n156: const truncDetail = detail.length > 60 ? detail.slice(0, 57) + '...' : detail;\n157: const spinner = ora({\n158: text: `${toolBadge(name)} ${t.dim(truncDetail)}`,\n159: prefixText: ' ',\n160: spinner: 'dots',\n161: color: 'white',\n162: }).start();\n163: return spinner;\n164: }\n165: \n166: function finishToolCall(spinner, name, detail, startTime, success = true) {\n167: const elapsed = Date.now() - startTime;\n168: const icon = success ? t.green('✓') : t.red('✗');\n169: const timeStr = elapsed < 1000 ? `${elapsed}ms` : `${(elapsed / 1000).toFixed(1)}s`;\n170: const truncDetail = detail.length > 60 ? detail.slice(0, 57) + '...' : detail;\n171: \n172: spinner.stopAndPersist({\n173: symbol: icon,\n174: text: `${toolBadge(name)} ${t.dim(truncDetail)} ${t.dim(timeStr)}`,\n175: prefixText: ' ',\n176: });\n177: }\n178: \n179: // ===== Diff =====\n180: function showDiff(filename, diffText) {\n181: console.log(indent(t.bold(path.basename(filename)), 4));\n182: const lines = diffText.split('\\n');\n183: for (const line of lines) {\n184: if (line.startsWith('+')) {\n185: console.log(indent(t.green(line), 4));\n186: } else if (line.startsWith('-')) {\n187: console.log(indent(t.red(line), 4));\n188: }\n189: }\n190: console.log();\n191: }\n192: \n193: \n194: // ===== Prompt =====\n195: function createPrompt() {\n196: return readline.createInterface({\n197: input: process.stdin,\n198: output: process.stdout,\n199: prompt: '',\n200: });\n201: }\n202: \n203: function showPrompt() {\n204: console.log(t.dim(' Ctrl+C to cancel · /help for commands'));\n205: return t.primary('❯ ');\n206: }\n207: \n208: // ===== Session Summary =====\n209: function showSessionSummary() {\n210: const elapsed = ((Date.now() - session.startTime) / 1000 / 60).toFixed(1);\n211: const parts = [\n212: `${elapsed} min`,\n213: `${session.turnCount} turns`,\n214: `${session.toolCallCount} tool calls`,\n215: `${session.totalTokens.toLocaleString()} tokens`,\n216: `$${session.totalCost.toFixed(4)}`,\n217: ];\n218: if (session.filesModified.size > 0) {\n219: parts.push(`${session.filesModified.size} files modified`);\n220: }\n221: if (session.commandsRun.length > 0) {\n222: parts.push(`${session.commandsRun.length} commands`);\n223: }\n224: \n225: console.log();\n226: console.log(t.dim(' Session: ') + t.text(parts.join(' · ')));\n227: console.log();\n228: }\n229: \n230: // ===== Help =====\n231: function showHelpMenu() {\n232: console.log();\n233: console.log(t.bold('Commands'));\n234: console.log(t.dim(' /help ') + 'Show this menu');\n235: console.log(t.dim(' /files ') + 'Show project file tree');\n236: console.log(t.dim(' /clear ') + 'Clear conversation');\n237: console.log(t.dim(' /cost ') + 'Show session stats');\n238: console.log(t.dim(' /undo ') + 'Undo last edit');\n239: console.log(t.dim(' /diff ') + 'Show git diff');\n240: console.log(t.dim(' /git <cmd> ') + 'Run a git command');\n241: console.log(t.dim(' /quit ') + 'Exit');\n242: console.log();\n243: console.log(t.bold('Tools'));\n244: console.log(t.dim(' Read, Write, Edit, Patch, Bash, Grep, Glob, ListDir, UndoEdit, Task, CodeReview'));\n245: console.log();\n246: }\n247: \n248: module.exports = {\n249: t,\n250: COLS,\n251: hr,\n252: stripAnsi,\n253: indent,\n254: showHeader,\n255: showWelcome,\n256: showUserMessage,\n257: showAssistantHeader,\n258: showAssistantMessage,\n259: renderCodeBlock,\n260: toolBadge,\n261: toolDetail,\n262: showToolCall,\n263: finishToolCall,\n264: showDiff,\n265: createPrompt,\n266: showPrompt,\n267: showSessionSummary,\n268: showHelpMenu,\n269: };"
|
|
173
|
-
},
|
|
174
|
-
"trackFiles": [
|
|
175
|
-
"file:///home/runner/workspace/src/ui.js"
|
|
176
|
-
]
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
"type": "tool_result",
|
|
181
|
-
"toolUseID": "toolu_vrtx_01HgbA1vBwue3qk1q44obBQz",
|
|
182
|
-
"run": {
|
|
183
|
-
"status": "done",
|
|
184
|
-
"progress": {},
|
|
185
|
-
"result": {
|
|
186
|
-
"absolutePath": "/home/runner/workspace/src/agent.js",
|
|
187
|
-
"content": "1: 'use strict';\n2: \n3: const ora = require('ora');\n4: const {\n5: NVIDIA_MODEL,\n6: MAX_TOOL_ITERATIONS,\n7: nvidiaClient,\n8: session,\n9: sleep,\n10: } = require('./config');\n11: const { buildSystemPrompt } = require('./prompt');\n12: const { toolDefs } = require('./tools');\n13: const { executeTool } = require('./toolExecutors');\n14: const {\n15: t,\n16: indent,\n17: hr,\n18: showUserMessage,\n19: showAssistantHeader,\n20: toolDetail,\n21: toolBadge,\n22: showToolCall,\n23: finishToolCall,\n24: showDiff,\n25: } = require('./ui');\n26: const {\n27: parseThinkBlocks,\n28: findThinkClose,\n29: stripStrayCloseTag,\n30: splitAtPartialTag,\n31: showThinkingBlock,\n32: } = require('./thinking');\n33: \n34: // ===== State =====\n35: let isProcessing = false;\n36: let rlClosed = false;\n37: \n38: function getIsProcessing() { return isProcessing; }\n39: function setRlClosed(val) { rlClosed = val; }\n40: function getRlClosed() { return rlClosed; }\n41: \n42: // ===== Exploration Detection =====\n43: const EXPLORATION_KEYWORDS = [\n44: 'explore', 'find files', 'where is', 'search for', 'locate',\n45: 'what files', 'which files', 'show me all', 'list all',\n46: 'find code', 'search code', 'find function', 'find class',\n47: 'find module', 'find component', 'find endpoint', 'find route',\n48: 'find api', 'find service', 'find model', 'find controller',\n49: 'where can i find', 'how do i find', 'look for',\n50: 'codebase structure', 'project structure', 'directory structure'\n51: ];\n52: \n53: function isExplorationTask(text) {\n54: const lower = text.toLowerCase();\n55: return EXPLORATION_KEYWORDS.some(keyword => lower.includes(keyword));\n56: }\n57: // ===== AI Conversation — Agentic Loop =====\n58: async function handleUserInput(userInput, { setupInputLoop, askQuestion }) {\n59: isProcessing = true;\n60: session.turnCount++;\n61: showUserMessage(userInput);\n62: session.conversationHistory.push({ role: 'user', content: userInput });\n63: // Auto-delegate to FilePickerMax for exploration tasks\n64: if (isExplorationTask(userInput)) {\n65: const spinner = ora({\n66: text: t.dim('Exploring codebase...'),\n67: prefixText: ' ',\n68: spinner: 'dots',\n69: color: 'cyan',\n70: }).start();\n71: \n72: try {\n73: const pickerResult = await executeTool('FilePickerMax', {\n74: prompt: userInput,\n75: });\n76: spinner.stop();\n77: \n78: // Display the exploration results prominently\n79: console.log(indent(t.cyan.bold('🔍 Codebase Exploration Results'), 2));\n80: console.log(indent(hr(), 2));\n81: console.log(indent(pickerResult, 2));\n82: console.log(indent(hr(), 2));\n83: console.log();\n84: \n85: // Add to conversation history so the agent has context\n86: session.conversationHistory.push({\n87: role: 'assistant',\n88: content: `I've explored the codebase and found the following relevant files:\\n\\n${pickerResult}`,\n89: });\n90: } catch (err) {\n91: spinner.stop();\n92: console.log(indent(t.dim('(Exploration failed: ' + err.message + ')'), 2));\n93: console.log();\n94: }\n95: }\n96: \n97: const startTime = Date.now();\n98: let turnTokens = 0;\n99: let turnToolCalls = 0;\n100: \n101: try {\n102: showAssistantHeader();\n103: console.log();\n104: \n105: const systemPrompt = buildSystemPrompt();\n106: let messages = [\n107: { role: 'system', content: systemPrompt },\n108: ...session.conversationHistory,\n109: ];\n110: \n111: let iterations = 0;\n112: \n113: // Agentic tool-use loop\n114: while (iterations < MAX_TOOL_ITERATIONS) {\n115: iterations++;\n116: \n117: // Show thinking spinner while waiting for first token\n118: const thinkSpinner = ora({\n119: text: t.dim(iterations === 1 ? 'Reasoning deeply...' : 'Thinking further...'),\n120: prefixText: ' ',\n121: spinner: 'dots',\n122: color: 'magenta',\n123: }).start();\n124: \n125: let stream;\n126: const maxRetries = 3;\n127: for (let attempt = 0; attempt <= maxRetries; attempt++) {\n128: try {\n129: stream = await nvidiaClient.chat.completions.create({\n130: model: NVIDIA_MODEL,\n131: messages: messages.map(m => {\n132: // Strip any extra fields the API might reject\n133: const clean = { role: m.role, content: m.content };\n134: if (m.tool_calls) clean.tool_calls = m.tool_calls.map(tc => ({\n135: id: tc.id, type: 'function',\n136: function: { name: tc.function.name, arguments: tc.function.arguments },\n137: }));\n138: if (m.tool_call_id) clean.tool_call_id = m.tool_call_id;\n139: if (m.role === 'assistant' && !m.content) clean.content = null;\n140: return clean;\n141: }),\n142: max_tokens: 4096,\n143: temperature: 0.6,\n144: top_p: 0.95,\n145: tools: toolDefs,\n146: tool_choice: 'auto',\n147: stream: true,\n148: });\n149: break;\n150: } catch (apiErr) {\n151: if (attempt < maxRetries && apiErr.status >= 400 && apiErr.status < 500) {\n152: const delay = 1000 * Math.pow(2, attempt);\n153: thinkSpinner.text = t.dim(`Retrying (${attempt + 1}/${maxRetries})...`);\n154: await sleep(delay);\n155: continue;\n156: }\n157: thinkSpinner.stop();\n158: throw apiErr;\n159: }\n160: }\n161: \n162: // Accumulate streamed response\n163: let fullContent = '';\n164: const toolCallDeltas = {}; // index -> { id, name, arguments }\n165: const seenToolCalls = new Set(); // Track which tool calls we've streamed\n166: let finishReason = null;\n167: let streamUsage = null;\n168: let reasoningText = ''; // collected reasoning from reasoning_content field\n169: \n170: // Display state:\n171: // 'buffering' — accumulating, watching for <think> or safe-to-stream point\n172: // 'thinking' — inside <think>...</think>, accumulating reasoning\n173: // 'streaming' — think block done, streaming content live to terminal\n174: let displayState = 'buffering';\n175: let contentAccum = ''; // buffer for buffering/thinking states\n176: let thinkAccum = ''; // accumulates text inside <think>...</think>\n177: let streamingStarted = false;\n178: let thinkSpinnerStopped = false;\n179: \n180: function stopThinkSpinner() {\n181: if (!thinkSpinnerStopped) { thinkSpinner.stop(); thinkSpinnerStopped = true; }\n182: }\n183: \n184: function writeToTerminal(text) {\n185: if (!text) return;\n186: if (!streamingStarted) {\n187: streamingStarted = true;\n188: process.stdout.write(' ');\n189: }\n190: process.stdout.write(t.text(text));\n191: }\n192: \n193: for await (const chunk of stream) {\n194: if (chunk.usage) streamUsage = chunk.usage;\n195: \n196: const delta = chunk.choices?.[0]?.delta;\n197: if (!delta) {\n198: if (chunk.choices?.[0]?.finish_reason) finishReason = chunk.choices[0].finish_reason;\n199: continue;\n200: }\n201: if (chunk.choices[0].finish_reason) finishReason = chunk.choices[0].finish_reason;\n202: \n203: // Stream tool call deltas immediately as they arrive\n204: if (delta.tool_calls) {\n205: for (const tc of delta.tool_calls) {\n206: const idx = tc.index;\n207: if (!toolCallDeltas[idx]) {\n208: toolCallDeltas[idx] = { id: tc.id || '', name: tc.function?.name || '', arguments: '' };\n209: }\n210: if (tc.id) toolCallDeltas[idx].id = tc.id;\n211: if (tc.function?.name) {\n212: toolCallDeltas[idx].name = tc.function.name;\n213: // Stream the tool call immediately when we have the name\n214: if (!seenToolCalls.has(idx)) {\n215: seenToolCalls.add(idx);\n216: stopThinkSpinner();\n217: const detail = toolDetail(toolCallDeltas[idx].name, null);\n218: process.stdout.write(`\\n ${toolBadge(toolCallDeltas[idx].name)} ${t.dim(detail)}${t.dim('...')}`);\n219: streamingStarted = true; // Mark that we've started streaming\n220: }\n221: }\n222: if (tc.function?.arguments) {\n223: toolCallDeltas[idx].arguments += tc.function.arguments;\n224: }\n225: }\n226: }\n227: \n228: // Handle reasoning_content field (some APIs send reasoning separately)\n229: if (delta.reasoning_content) {\n230: reasoningText += delta.reasoning_content;\n231: }\n232: \n233: // Handle content tokens\n234: if (delta.content) {\n235: fullContent += delta.content;\n236: const hasTool = Object.keys(toolCallDeltas).length > 0;\n237: \n238: if (displayState === 'streaming') {\n239: // Live-stream, but watch for a new <think> block\n240: contentAccum += delta.content;\n241: // Strip any stray closing tags\n242: contentAccum = stripStrayCloseTag(contentAccum);\n243: // Find and handle any <think> in the accumulated buffer\n244: const openIdx = contentAccum.indexOf('<think>');\n245: if (openIdx !== -1) {\n246: // Write everything before <think>\n247: if (openIdx > 0) writeToTerminal(contentAccum.slice(0, openIdx));\n248: thinkAccum = contentAccum.slice(openIdx + 7);\n249: contentAccum = '';\n250: displayState = 'thinking';\n[... omitted lines 251 to 274 ...]\n275: const thought = thinkAccum.slice(0, closeMatch.pos).trim();\n276: const after = thinkAccum.slice(closeMatch.pos + closeMatch.len);\n277: thinkAccum = '';\n278: stopThinkSpinner();\n279: if (thought) showThinkingBlock([thought]);\n280: displayState = 'streaming';\n281: contentAccum = after;\n282: if (!hasTool && after) writeToTerminal(after);\n283: contentAccum = '';\n284: }\n285: \n286: } else {\n287: // 'buffering' — accumulate until we know what's coming\n288: contentAccum += delta.content;\n289: // Strip stray closing tags\n290: contentAccum = stripStrayCloseTag(contentAccum);\n291: const openIdx = contentAccum.indexOf('<think>');\n292: if (openIdx !== -1) {\n293: // Text before <think>: stream it if non-empty\n294: const before = contentAccum.slice(0, openIdx);\n295: thinkAccum = contentAccum.slice(openIdx + 7);\n296: contentAccum = '';\n297: if (!hasTool && before.trim()) writeToTerminal(before);\n298: displayState = 'thinking';\n299: // Check if closing tag already present\n300: const closeMatch = findThinkClose(thinkAccum);\n301: if (closeMatch) {\n302: const thought = thinkAccum.slice(0, closeMatch.pos).trim();\n303: const after = thinkAccum.slice(closeMatch.pos + closeMatch.len);\n304: thinkAccum = '';\n305: stopThinkSpinner();\n306: if (thought) showThinkingBlock([thought]);\n307: displayState = 'streaming';\n308: contentAccum = after;\n309: if (!hasTool && after) writeToTerminal(after);\n310: contentAccum = '';\n311: }\n312: } else if (!contentAccum.includes('<') && contentAccum.length > 20) {\n313: // No think tag coming — start streaming immediately\n314: stopThinkSpinner();\n315: displayState = 'streaming';\n316: if (!hasTool) writeToTerminal(contentAccum);\n317: contentAccum = '';\n318: }\n319: // else keep buffering (might be start of <think>)\n320: }\n321: }\n322: }\n323: \n324: // Stream ended — flush any remaining buffers\n325: stopThinkSpinner();\n326: \n327: if (displayState === 'thinking') {\n328: // Unclosed <think> block — show what we accumulated\n329: const thought = (thinkAccum + contentAccum).trim();\n330: if (thought) showThinkingBlock([thought]);\n331: thinkAccum = '';\n332: contentAccum = '';\n333: displayState = 'streaming';\n334: } else if (displayState === 'buffering') {\n335: // Never left buffering — flush as plain content\n336: const hasTool = Object.keys(toolCallDeltas).length > 0;\n337: if (!hasTool && contentAccum.trim()) writeToTerminal(contentAccum);\n338: contentAccum = '';\n339: } else if (contentAccum) {\n340: // Flush any pending partial-tag buffer\n341: const hasTool = Object.keys(toolCallDeltas).length > 0;\n342: if (!hasTool) writeToTerminal(contentAccum);\n343: contentAccum = '';\n344: }\n345: \n346: // Show reasoning from reasoning_content field if not already shown via tags\n347: if (reasoningText.trim() && displayState !== 'thinking') {\n348: showThinkingBlock([reasoningText.trim()]);\n349: }\n350: \n351: if (streamingStarted) {\n352: process.stdout.write('\\n\\n');\n353: }\n354: \n355: // Final parsed content for history/display (tags stripped)\n356: const { content: displayContent } = parseThinkBlocks(fullContent);\n357: \n358: turnTokens += streamUsage?.total_tokens || 0;\n359: \n360: // Reconstruct the full message object\n361: const toolCalls = Object.keys(toolCallDeltas).sort((a, b) => a - b).map(idx => ({\n362: id: toolCallDeltas[idx].id,\n363: type: 'function',\n364: function: { name: toolCallDeltas[idx].name, arguments: toolCallDeltas[idx].arguments },\n365: }));\n366: \n367: const msg = {\n368: role: 'assistant',\n369: content: fullContent || null,\n370: ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n371: };\n372: \n373: // If the model wants to call tools\n374: if (toolCalls.length > 0) {\n375: messages.push(msg);\n376: \n377: // Show intermediate reasoning that wasn't streamed (e.g. with tool calls)\n378: if (displayContent && displayContent.trim()) {\n379: console.log(indent(t.dim.italic(displayContent.trim()), 6));\n380: console.log();\n381: }\n382: \n383: // Execute tool calls (parallel for independent calls)\n384: const toolPromises = toolCalls.map(async (toolCall) => {\n385: const toolName = toolCall.function.name;\n386: let toolArgs;\n387: try {\n388: toolArgs = JSON.parse(toolCall.function.arguments);\n389: } catch {\n390: toolArgs = {};\n391: }\n392: \n393: const detail = toolDetail(toolName, toolArgs);\n394: const callStart = Date.now();\n395: // Don't use spinner - we already streamed the tool call invocation\n396: // Just update with progress indicator\n397: process.stdout.write(`\\r ${t.dim('▸ executing...')} `);\n398: \n399: // Execute\n400: const result = await executeTool(toolName, toolArgs);\n401: const success = !result.startsWith('Error');\n402: \n403: const elapsed = Date.now() - callStart;\n404: const timeStr = elapsed < 1000 ? `${elapsed}ms` : `${(elapsed / 1000).toFixed(1)}s`;\n405: const icon = success ? t.green('✓') : t.red('✗');\n406: process.stdout.write(`\\r ${icon} ${toolBadge(toolName)} ${t.dim(detail)} ${t.dim(timeStr)}\\n`);\n407: session.toolCallCount++;\n408: turnToolCalls++;\n409: \n410: // Show result preview\n411: const resultLines = result.split('\\n');\n412: let preview;\n413: if (toolName === 'Edit' || toolName === 'Patch') {\n414: // Show diff\n415: showDiff(toolArgs.path, result);\n416: } else if (resultLines.length > 5) {\n417: preview = resultLines.slice(0, 4).join('\\n') + `\\n... (${resultLines.length} lines)`;\n418: console.log(indent(t.dim(preview), 8));\n419: console.log();\n420: } else if (result.trim() && result !== '(no output)') {\n421: console.log(indent(t.dim(result.length > 300 ? result.slice(0, 297) + '...' : result), 8));\n422: console.log();\n423: }\n424: \n425: return { id: toolCall.id, result };\n426: });\n427: \n428: const toolResults = await Promise.all(toolPromises);\n429: \n430: for (const { id, result } of toolResults) {\n431: messages.push({\n432: role: 'tool',\n433: tool_call_id: id,\n434: content: result,\n435: });\n436: }\n437: \n438: // Check for stop condition\n439: if (finishReason === 'stop') break;\n440: continue;\n441: }\n442: \n443: // No tool calls — final text response (already displayed above)\n444: if (fullContent) {\n445: const cleanedContent = displayContent.trim() || fullContent.replace(/<think>[\\s\\S]*?<\\/think>/g, '').trim();\n446: session.conversationHistory.push({ role: 'assistant', content: cleanedContent || fullContent });\n447: }\n448: break;\n449: }\n450: \n451: if (iterations >= MAX_TOOL_ITERATIONS) {\n452: console.log(indent(t.yellow(`⚠ Reached maximum tool iterations (${MAX_TOOL_ITERATIONS}). Stopping.`)));\n453: console.log();\n454: }\n455: \n456: session.totalTokens += turnTokens;\n457: \n458: // Auto-delegate to CodeReview for code changes\n459: if (session.filesModified.size > 0) {\n460: const reviewSpinner = ora({\n461: text: t.dim('Reviewing code changes...'),\n462: prefixText: ' ',\n463: spinner: 'dots',\n464: color: 'magenta',\n465: }).start();\n466: \n467: try {\n468: // Build a summary of what was changed\n469: const reviewPrompt = `User request: ${userInput}\\n\\n${turnTokens > 0 ? `Processed with ${turnTokens} tokens and ${turnToolCalls} tool calls.` : ''}`;\n470: \n471: const reviewResult = await executeTool('CodeReview', {\n472: prompt: reviewPrompt,\n473: });\n474: reviewSpinner.stop();\n475: \n476: // Display the review results prominently\n477: console.log(indent(t.magenta.bold('📋 Code Review'), 2));\n478: console.log(indent(hr(), 2));\n479: console.log(indent(reviewResult, 2));\n480: console.log(indent(hr(), 2));\n481: console.log();\n482: \n483: // Add to conversation history\n484: session.conversationHistory.push({\n485: role: 'assistant',\n486: content: `\\n\\n--- Code Review ---\\n${reviewResult}`,\n487: });\n488: } catch (err) {\n489: reviewSpinner.stop();\n490: console.log(indent(t.dim('(Code review failed: ' + err.message + ')'), 2));\n491: console.log();\n492: }\n493: }\n494: } catch (err) {\n495: console.log();\n496: console.log(indent(t.red('✗ Error: ') + t.text(err.message)));\n497: if (err.status) {\n498: console.log(indent(t.dim(`Status: ${err.status}`) + (err.error ? t.dim(` | Detail: ${JSON.stringify(err.error).slice(0, 200)}`) : '')));\n499: }\n500: if (!process.env.NVIDIA_API_KEY) {\n501: console.log(indent(t.yellow('Set the NVIDIA_API_KEY environment variable with your API key from build.nvidia.com')));\n502: }\n503: console.log();\n504: }\n505: \n506: console.log(indent(hr()));\n507: isProcessing = false;\n508: if (rlClosed) {\n509: // Readline closed during processing — re-create it if stdin is still usable\n510: if (!process.stdin.destroyed && process.stdin.readable) {\n511: setupInputLoop();\n512: askQuestion();\n513: return;\n514: }\n515: process.exit(0);\n516: }\n517: }\n518: \n519: module.exports = {\n520: handleUserInput,\n521: getIsProcessing,\n522: setRlClosed,\n523: getRlClosed,\n524: };"
|
|
188
|
-
},
|
|
189
|
-
"trackFiles": [
|
|
190
|
-
"file:///home/runner/workspace/src/agent.js"
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
]
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
"role": "assistant",
|
|
198
|
-
"messageId": 5,
|
|
199
|
-
"content": [
|
|
200
|
-
{
|
|
201
|
-
"type": "thinking",
|
|
202
|
-
"thinking": "Now let me look at the tool executors to understand the \"Task\" tool (subagent) and how it displays results, particularly the drawer behavior.",
|
|
203
|
-
"signature": "ErgCCkgICxACGAIqQLraias2RqYfIGmsI6a0cDkldGYW/x+QPARGgqlDhG4a0AQ/KgACkM1tvjyn7KOC/V2nCJeSYK4TObB9cArUgwwSDN91aLEFrvcJ48Y/iRoMs9YiwyJp5ndYJZM6IjDvy/H4RnyJffDXJ5JpERGAbc2PI8KEEu8BZQfvc6lSQ20uDhTWDBFLPnNDuZ+79dkqnQEXAR7alnmgUuF8baB6dTIPimWtWtxv/QF13wooulfjXDerLWhWQ73gUqlr+w4Fxc43hvPa+tF+zdiPzqFBMddbuHOqnQiNFVnp9r2+VTzi8HpRI1LmoEGcEbNNEMOfdU+MYjFPYGVs0zqG0qCPwGXX7c3hJnoEeyD8VBFgRcIBf6tB9sAXFosrltH5UaYt5rGCz6RbS3bPmg8MVlbfGAE=",
|
|
204
|
-
"provider": "anthropic"
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
"type": "tool_use",
|
|
208
|
-
"complete": true,
|
|
209
|
-
"id": "toolu_vrtx_01QuKSffTjG3vbZuCjJV9BrV",
|
|
210
|
-
"name": "Read",
|
|
211
|
-
"input": {
|
|
212
|
-
"path": "/home/runner/workspace/src/toolExecutors.js"
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
"type": "tool_use",
|
|
217
|
-
"complete": true,
|
|
218
|
-
"id": "toolu_vrtx_01Bt16BzR4StJ9r1MbQJ48M4",
|
|
219
|
-
"name": "Read",
|
|
220
|
-
"input": {
|
|
221
|
-
"path": "/home/runner/workspace/src/tools.js"
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
],
|
|
225
|
-
"state": {
|
|
226
|
-
"type": "complete",
|
|
227
|
-
"stopReason": "tool_use"
|
|
228
|
-
},
|
|
229
|
-
"usage": {
|
|
230
|
-
"model": "claude-opus-4-6",
|
|
231
|
-
"maxInputTokens": 168000,
|
|
232
|
-
"inputTokens": 1,
|
|
233
|
-
"outputTokens": 156,
|
|
234
|
-
"cacheCreationInputTokens": 12290,
|
|
235
|
-
"cacheReadInputTokens": 13127,
|
|
236
|
-
"totalInputTokens": 25418,
|
|
237
|
-
"timestamp": "2026-02-26T03:20:13.071Z"
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
"role": "user",
|
|
242
|
-
"messageId": 6,
|
|
243
|
-
"content": [
|
|
244
|
-
{
|
|
245
|
-
"type": "tool_result",
|
|
246
|
-
"toolUseID": "toolu_vrtx_01QuKSffTjG3vbZuCjJV9BrV",
|
|
247
|
-
"run": {
|
|
248
|
-
"status": "done",
|
|
249
|
-
"progress": {},
|
|
250
|
-
"result": {
|
|
251
|
-
"absolutePath": "/home/runner/workspace/src/toolExecutors.js",
|
|
252
|
-
"content": "1: 'use strict';\n2: \n3: const fs = require('fs');\n4: const path = require('path');\n5: const https = require('https');\n6: const { execSync } = require('child_process');\n7: const {\n8: PROJECT_ROOT,\n9: TOOL_TIMEOUT,\n10: REVIEWER_MODEL,\n11: REVIEWER_SYSTEM_PROMPT,\n12: FILE_PICKER_MODEL,\n13: FILE_PICKER_SYSTEM_PROMPT,\n14: nvidiaClient,\n15: session,\n16: truncateOutput,\n17: resolvePath,\n18: sleep,\n19: } = require('./config');\n20: \n21: async function executeTool(name, args) {\n22: try {\n23: switch (name) {\n24: case 'Read': {\n25: const filePath = resolvePath(args.path);\n26: const stat = fs.statSync(filePath, { throwIfNoEntry: false });\n27: if (!stat) return `Error: File not found: ${filePath}`;\n28: if (stat.isDirectory()) return `Error: ${filePath} is a directory. Use ListDir instead.`;\n29: const content = fs.readFileSync(filePath, 'utf-8');\n30: const lines = content.split('\\n');\n31: const start = Math.max(0, (args.start_line || 1) - 1);\n32: const end = args.end_line ? Math.min(lines.length, args.end_line) : Math.min(lines.length, start + 500);\n33: const slice = lines.slice(start, end);\n34: const numbered = slice.map((l, i) => `${start + i + 1}: ${l}`).join('\\n');\n35: session.filesRead.add(filePath);\n36: if (end < lines.length) {\n37: return truncateOutput(numbered) + `\\n(showing lines ${start + 1}-${end} of ${lines.length})`;\n38: }\n39: return truncateOutput(numbered);\n40: }\n41: \n42: case 'Write': {\n43: const filePath = resolvePath(args.path);\n44: const dir = path.dirname(filePath);\n45: if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n46: const existed = fs.existsSync(filePath);\n47: const before = existed ? fs.readFileSync(filePath, 'utf-8') : null;\n48: fs.writeFileSync(filePath, args.content, 'utf-8');\n49: if (before !== null) {\n50: session.editHistory.push({ path: filePath, before, after: args.content, timestamp: Date.now() });\n51: }\n52: session.filesModified.add(filePath);\n53: const lines = args.content.split('\\n').length;\n54: return `${existed ? 'Overwritten' : 'Created'}: ${filePath} (${lines} lines)`;\n55: }\n56: \n57: case 'Edit': {\n58: const filePath = resolvePath(args.path);\n59: if (!fs.existsSync(filePath)) return `Error: File not found: ${filePath}`;\n60: const content = fs.readFileSync(filePath, 'utf-8');\n61: const count = content.split(args.old_str).length - 1;\n62: if (count === 0) return `Error: old_str not found in ${path.basename(filePath)}. Make sure it matches exactly (including whitespace and indentation).`;\n63: if (count > 1) return `Error: old_str found ${count} times in ${path.basename(filePath)}. It must be unique. Add more surrounding context to make it unique.`;\n64: const updated = content.replace(args.old_str, args.new_str);\n65: fs.writeFileSync(filePath, updated, 'utf-8');\n66: session.editHistory.push({ path: filePath, before: content, after: updated, timestamp: Date.now() });\n67: session.filesModified.add(filePath);\n68: // Generate a mini diff\n69: const oldLines = args.old_str.split('\\n');\n70: const newLines = args.new_str.split('\\n');\n71: let diff = `Edited: ${filePath}\\n`;\n72: oldLines.forEach(l => diff += `- ${l}\\n`);\n73: newLines.forEach(l => diff += `+ ${l}\\n`);\n74: return diff;\n75: }\n76: \n77: case 'Patch': {\n78: const filePath = resolvePath(args.path);\n79: if (!fs.existsSync(filePath)) return `Error: File not found: ${filePath}`;\n80: let content = fs.readFileSync(filePath, 'utf-8');\n81: const before = content;\n82: const results = [];\n83: for (let i = 0; i < args.edits.length; i++) {\n84: const edit = args.edits[i];\n85: if (!content.includes(edit.old_str)) {\n86: results.push(`Edit ${i + 1}: FAILED - old_str not found`);\n87: continue;\n88: }\n89: content = content.replace(edit.old_str, edit.new_str);\n90: results.push(`Edit ${i + 1}: OK`);\n91: }\n92: fs.writeFileSync(filePath, content, 'utf-8');\n93: session.editHistory.push({ path: filePath, before, after: content, timestamp: Date.now() });\n94: session.filesModified.add(filePath);\n95: return `Patched: ${filePath}\\n${results.join('\\n')}`;\n96: }\n97: \n98: case 'Bash': {\n99: const cwd = args.cwd ? resolvePath(args.cwd) : PROJECT_ROOT;\n100: session.commandsRun.push(args.command);\n101: try {\n102: const output = execSync(args.command, {\n103: encoding: 'utf-8',\n104: timeout: TOOL_TIMEOUT,\n105: cwd,\n106: maxBuffer: 1024 * 1024 * 5,\n107: stdio: ['pipe', 'pipe', 'pipe'],\n108: });\n109: return truncateOutput(output || '(no output)');\n110: } catch (err) {\n111: // Return both stdout and stderr on failure\n112: const stdout = err.stdout || '';\n113: const stderr = err.stderr || '';\n114: const exitCode = err.status || 1;\n115: return truncateOutput(`Exit code: ${exitCode}\\n${stdout}\\n${stderr}`.trim());\n116: }\n117: }\n118: \n119: case 'Grep': {\n120: const searchPath = resolvePath(args.path);\n121: const flags = args.case_sensitive ? '' : '-i';\n122: const include = args.include ? `--include='${args.include}'` : '';\n123: try {\n124: const cmd = `grep -rn ${flags} ${include} --color=never \"${args.pattern.replace(/\"/g, '\\\\\"')}\" \"${searchPath}\" 2>/dev/null | head -80`;\n125: const output = execSync(cmd, { encoding: 'utf-8', timeout: 15000 });\n126: return truncateOutput(output || 'No matches found.');\n127: } catch {\n128: return 'No matches found.';\n129: }\n130: }\n131: \n132: case 'Glob': {\n133: const cwd = args.cwd ? resolvePath(args.cwd) : PROJECT_ROOT;\n134: try {\n135: // Use find command to simulate glob\n136: const pattern = args.pattern;\n137: let cmd;\n138: if (pattern.includes('**')) {\n139: const namePattern = pattern.replace(/\\*\\*\\//g, '').replace(/\\*/g, '*');\n140: cmd = `find \"${cwd}\" -name \"${namePattern}\" -not -path \"*/node_modules/*\" -not -path \"*/.git/*\" 2>/dev/null | head -100`;\n141: } else {\n142: cmd = `find \"${cwd}\" -name \"${pattern}\" -not -path \"*/node_modules/*\" -not -path \"*/.git/*\" 2>/dev/null | head -100`;\n143: }\n144: const output = execSync(cmd, { encoding: 'utf-8', timeout: 10000 });\n145: if (!output.trim()) return 'No files found matching pattern.';\n146: // Make paths relative\n147: const files = output.trim().split('\\n').map(f => path.relative(cwd, f)).sort();\n148: return files.join('\\n');\n149: } catch {\n150: return 'No files found matching pattern.';\n151: }\n152: }\n153: \n154: case 'ListDir': {\n155: const dirPath = resolvePath(args.path);\n156: if (!fs.existsSync(dirPath)) return `Error: Directory not found: ${dirPath}`;\n157: const stat = fs.statSync(dirPath);\n158: if (!stat.isDirectory()) return `Error: ${dirPath} is not a directory.`;\n159: \n160: function listRecursive(dir, depth, maxDepth) {\n161: const entries = fs.readdirSync(dir, { withFileTypes: true })\n162: .filter(e => !e.name.startsWith('.') && e.name !== 'node_modules')\n163: .sort((a, b) => {\n164: if (a.isDirectory() && !b.isDirectory()) return -1;\n165: if (!a.isDirectory() && b.isDirectory()) return 1;\n166: return a.name.localeCompare(b.name);\n167: });\n168: const lines = [];\n169: for (const entry of entries) {\n170: const prefix = ' '.repeat(depth);\n171: if (entry.isDirectory()) {\n172: lines.push(`${prefix}${entry.name}/`);\n173: if (depth < maxDepth) {\n174: lines.push(...listRecursive(path.join(dir, entry.name), depth + 1, maxDepth));\n175: }\n176: } else {\n177: const size = fs.statSync(path.join(dir, entry.name)).size;\n178: const sizeStr = size < 1024 ? `${size}B` : size < 1024 * 1024 ? `${(size / 1024).toFixed(1)}K` : `${(size / (1024 * 1024)).toFixed(1)}M`;\n179: lines.push(`${prefix}${entry.name} (${sizeStr})`);\n180: }\n181: }\n182: return lines;\n183: }\n184: \n185: const maxDepth = args.recursive ? 3 : 0;\n186: const lines = listRecursive(dirPath, 0, maxDepth);\n187: return truncateOutput(lines.join('\\n') || '(empty directory)');\n188: }\n189: \n190: case 'UndoEdit': {\n191: const filePath = resolvePath(args.path);\n192: const lastEdit = [...session.editHistory].reverse().find(e => e.path === filePath);\n193: if (!lastEdit) return `Error: No edit history for ${filePath}`;\n194: fs.writeFileSync(filePath, lastEdit.before, 'utf-8');\n195: session.editHistory = session.editHistory.filter(e => e !== lastEdit);\n196: return `Undone last edit to ${filePath}`;\n197: }\n198: \n199: case 'Task': {\n200: const results = [];\n201: for (const cmd of args.commands) {\n202: try {\n203: const output = execSync(cmd, {\n204: encoding: 'utf-8',\n205: timeout: TOOL_TIMEOUT,\n206: cwd: PROJECT_ROOT,\n207: maxBuffer: 1024 * 1024 * 5,\n208: stdio: ['pipe', 'pipe', 'pipe'],\n209: });\n210: results.push(`✓ ${cmd}\\n${output.trim()}`);\n211: session.commandsRun.push(cmd);\n212: } catch (err) {\n213: results.push(`✗ ${cmd}\\nExit code: ${err.status}\\n${(err.stdout || '').trim()}\\n${(err.stderr || '').trim()}`);\n214: session.commandsRun.push(cmd);\n215: break; // Stop on first failure\n216: }\n217: }\n218: return truncateOutput(`Task: ${args.description}\\n${'─'.repeat(40)}\\n${results.join('\\n\\n')}`);\n219: }\n220: \n221: case 'WebSearch': {\n222: const apiKey = process.env.EXA_API_KEY;\n223: if (!apiKey) return 'Error: EXA_API_KEY environment variable is not set. Get one at https://dashboard.exa.ai/api-keys';\n224: \n225: const body = JSON.stringify({\n226: query: args.query,\n227: numResults: Math.min(args.num_results || 5, 10),\n228: type: args.type || 'auto',\n229: ...(args.include_domains && { includeDomains: args.include_domains }),\n230: ...(args.category && { category: args.category }),\n231: contents: { highlights: { maxCharacters: 300 }, text: { maxCharacters: 1000 } },\n232: });\n233: \n234: const result = await new Promise((resolve) => {\n235: const req = https.request({\n236: hostname: 'api.exa.ai',\n237: path: '/search',\n238: method: 'POST',\n239: headers: {\n240: 'Content-Type': 'application/json',\n241: 'x-api-key': apiKey,\n242: },\n243: }, (res) => {\n244: let data = '';\n245: res.on('data', (chunk) => data += chunk);\n246: res.on('end', () => {\n247: if (res.statusCode !== 200) {\n248: resolve(`Error: Exa API returned ${res.statusCode}: ${data}`);\n249: return;\n250: }\n251: try {\n252: const json = JSON.parse(data);\n253: if (!json.results || json.results.length === 0) {\n254: resolve('No results found.');\n255: return;\n256: }\n257: const formatted = json.results.map((r, i) => {\n258: let entry = `${i + 1}. **${r.title || 'Untitled'}**\\n ${r.url}`;\n259: if (r.publishedDate) entry += `\\n Published: ${r.publishedDate.split('T')[0]}`;\n260: if (r.author) entry += `\\n Author: ${r.author}`;\n261: if (r.text) entry += `\\n ${r.text.trim().slice(0, 500)}`;\n262: else if (r.highlights && r.highlights.length) entry += `\\n ${r.highlights[0].trim().slice(0, 300)}`;\n263: return entry;\n264: }).join('\\n\\n');\n265: resolve(truncateOutput(`Web Search Results (${json.results.length}):\\n${'─'.repeat(40)}\\n${formatted}`));\n266: } catch (e) {\n267: resolve(`Error: Failed to parse Exa response: ${e.message}`);\n268: }\n269: });\n270: });\n271: req.on('error', (e) => resolve(`Error: Exa request failed: ${e.message}`));\n272: req.setTimeout(15000, () => { req.destroy(); resolve('Error: Exa search timed out.'); });\n273: req.write(body);\n274: req.end();\n275: });\n276: return result;\n277: }\n278: \n279: case 'FilePickerMax': {\n280: // Gather full directory tree\n281: let tree = '';\n282: try {\n283: tree = execSync(\n284: `find \"${PROJECT_ROOT}\" -not -path \"*/node_modules/*\" -not -path \"*/.git/*\" -not -path \"*/.cache/*\" -not -path \"*/.local/*\" -not -path \"*/.upm/*\" -not -path \"*/.config/*\" 2>/dev/null | head -500`,\n285: { encoding: 'utf-8', timeout: 15000 }\n286: ).trim();\n287: // Make paths relative\n288: tree = tree.split('\\n').map(f => path.relative(PROJECT_ROOT, f) || '.').join('\\n');\n289: } catch {\n290: tree = '(failed to scan directory tree)';\n291: }\n292: \n293: // Gather previews of all source files (first 8 lines each)\n294: const sourceExts = /\\.(js|ts|jsx|tsx|py|rb|go|rs|java|c|cpp|h|hpp|css|scss|html|svelte|vue|json|yaml|yml|toml|md|sql|sh|bash|env|cfg|ini|xml)$/i;\n295: const allFiles = tree.split('\\n').filter(f => sourceExts.test(f));\n296: const previews = [];\n297: for (const relFile of allFiles.slice(0, 200)) {\n298: const absFile = path.resolve(PROJECT_ROOT, relFile);\n299: try {\n300: const stat = fs.statSync(absFile, { throwIfNoEntry: false });\n301: if (!stat || stat.isDirectory() || stat.size > 512 * 1024) continue;\n302: const content = fs.readFileSync(absFile, 'utf-8');\n303: const first8 = content.split('\\n').slice(0, 8).join('\\n');\n304: previews.push(`--- ${relFile} ---\\n${first8}`);\n305: } catch { /* skip unreadable */ }\n306: }\n307: \n308: const pickerMessages = [\n309: { role: 'system', content: FILE_PICKER_SYSTEM_PROMPT },\n310: {\n311: role: 'user',\n312: content: `# Prompt\\n${args.prompt}\\n\\n# Directory Tree\\n${tree}\\n\\n# File Previews (first 8 lines each)\\n${previews.join('\\n\\n')}`,\n313: },\n314: ];\n315: \n316: try {\n317: let pickerResponse;\n318: for (let attempt = 0; attempt <= 2; attempt++) {\n319: try {\n320: pickerResponse = await nvidiaClient.chat.completions.create({\n321: model: FILE_PICKER_MODEL,\n322: messages: pickerMessages,\n323: max_tokens: 4096,\n324: temperature: 0.2,\n325: });\n326: break;\n327: } catch (retryErr) {\n328: if (attempt < 2 && retryErr.status >= 400 && retryErr.status < 500) {\n329: await sleep(1000 * Math.pow(2, attempt));\n330: continue;\n331: }\n332: throw retryErr;\n333: }\n334: }\n335: const raw = pickerResponse.choices[0]?.message?.content || '[]';\n336: return truncateOutput(`FilePickerMax Results\\n${'─'.repeat(40)}\\n${raw}`);\n337: } catch (apiErr) {\n338: return `Error: FilePickerMax failed — ${apiErr.message}`;\n339: }\n340: }\n341: \n342: case 'CodeReview': {\n343: // Auto-collect all modified files from this session\n344: const allFiles = new Set([...session.filesModified]);\n345: // Add any extra files the agent explicitly passed\n346: if (args.files && args.files.length) {\n347: for (const f of args.files) allFiles.add(resolvePath(f));\n348: }\n349: \n350: if (allFiles.size === 0) {\n351: return 'CodeReview skipped — no files were modified this session.';\n352: }\n353: \n354: // Gather file contents for the reviewer's context\n355: const fileContents = [];\n356: for (const filePath of allFiles) {\n357: if (!fs.existsSync(filePath)) {\n358: fileContents.push(`--- ${filePath} ---\\n[File not found]`);\n359: continue;\n360: }\n361: const stat = fs.statSync(filePath);\n362: if (stat.isDirectory()) continue;\n363: const content = fs.readFileSync(filePath, 'utf-8');\n364: fileContents.push(`--- ${path.relative(PROJECT_ROOT, filePath) || filePath} ---\\n${content}`);\n365: }\n366: \n367: // Build git diff of modified files for richer context\n368: let gitDiff = '';\n369: try {\n370: gitDiff = execSync('git diff 2>/dev/null', { encoding: 'utf-8', cwd: PROJECT_ROOT, timeout: 10000 }).trim();\n371: } catch {}\n372: \n373: const reviewMessages = [\n374: {\n375: role: 'system',\n376: content: REVIEWER_SYSTEM_PROMPT,\n377: },\n378: {\n379: role: 'user',\n380: content: `# What was changed\\n${args.prompt}\\n\\n# Modified files (${allFiles.size})\\n\\n${fileContents.join('\\n\\n')}${gitDiff ? `\\n\\n# Git diff\\n\\`\\`\\`diff\\n${gitDiff}\\n\\`\\`\\`` : ''}`,\n381: },\n382: ];\n383: \n384: try {\n385: let reviewResponse;\n386: for (let attempt = 0; attempt <= 2; attempt++) {\n387: try {\n388: reviewResponse = await nvidiaClient.chat.completions.create({\n389: model: REVIEWER_MODEL,\n390: messages: reviewMessages,\n391: max_tokens: 4096,\n392: temperature: 0.3,\n393: });\n394: break;\n395: } catch (retryErr) {\n396: if (attempt < 2 && retryErr.status >= 400 && retryErr.status < 500) {\n397: await sleep(1000 * Math.pow(2, attempt));\n398: continue;\n399: }\n400: throw retryErr;\n401: }\n402: }\n403: const reviewText = reviewResponse.choices[0]?.message?.content\n404: || reviewResponse.choices[0]?.message?.reasoning_content\n405: || '(No response from reviewer)';\n406: return truncateOutput(`Code Review (${REVIEWER_MODEL}) — ${allFiles.size} file(s)\\n${'─'.repeat(40)}\\n${reviewText}`);\n407: } catch (apiErr) {\n408: return `Error: Code review failed — ${apiErr.message}`;\n409: }\n410: }\n411: \n412: default:\n413: return `Unknown tool: ${name}`;\n414: }\n415: } catch (err) {\n416: return `Error executing ${name}: ${err.message}`;\n417: }\n418: }\n419: \n420: module.exports = { executeTool };"
|
|
253
|
-
},
|
|
254
|
-
"trackFiles": [
|
|
255
|
-
"file:///home/runner/workspace/src/toolExecutors.js"
|
|
256
|
-
]
|
|
257
|
-
}
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
"type": "tool_result",
|
|
261
|
-
"toolUseID": "toolu_vrtx_01Bt16BzR4StJ9r1MbQJ48M4",
|
|
262
|
-
"run": {
|
|
263
|
-
"status": "done",
|
|
264
|
-
"progress": {},
|
|
265
|
-
"result": {
|
|
266
|
-
"absolutePath": "/home/runner/workspace/src/tools.js",
|
|
267
|
-
"content": "1: 'use strict';\n2: \n3: const toolDefs = [\n4: {\n5: type: 'function',\n6: function: {\n7: name: 'Read',\n8: description: 'Read the contents of a file. Returns line-numbered content. Always read a file before editing it.',\n9: parameters: {\n10: type: 'object',\n11: properties: {\n12: path: { type: 'string', description: 'File path to read (absolute or relative to project root).' },\n13: start_line: { type: 'number', description: 'Start line (1-indexed). Omit to read from beginning.' },\n14: end_line: { type: 'number', description: 'End line (1-indexed). Omit to read to end (max 500 lines).' },\n15: },\n16: required: ['path'],\n17: },\n18: },\n19: },\n20: {\n21: type: 'function',\n22: function: {\n23: name: 'Write',\n24: description: 'Create a new file or completely overwrite an existing file. For modifying existing files, prefer Edit instead.',\n25: parameters: {\n26: type: 'object',\n27: properties: {\n28: path: { type: 'string', description: 'File path to write.' },\n29: content: { type: 'string', description: 'Full content to write.' },\n30: },\n31: required: ['path', 'content'],\n32: },\n33: },\n34: },\n35: {\n36: type: 'function',\n37: function: {\n38: name: 'Edit',\n39: description: 'Replace an exact string in a file with new content. The old_str must match exactly (including whitespace). For existing files, this is preferred over Write.',\n40: parameters: {\n41: type: 'object',\n42: properties: {\n43: path: { type: 'string', description: 'File path to edit.' },\n44: old_str: { type: 'string', description: 'Exact string to find (must be unique in the file).' },\n45: new_str: { type: 'string', description: 'Replacement string.' },\n46: },\n47: required: ['path', 'old_str', 'new_str'],\n48: },\n49: },\n50: },\n51: {\n52: type: 'function',\n53: function: {\n54: name: 'Patch',\n55: description: 'Apply multiple find-and-replace edits to a single file atomically. Use when you need to make several changes to the same file.',\n56: parameters: {\n57: type: 'object',\n58: properties: {\n59: path: { type: 'string', description: 'File path to patch.' },\n60: edits: {\n61: type: 'array',\n62: description: 'Array of edits to apply in order.',\n63: items: {\n64: type: 'object',\n65: properties: {\n66: old_str: { type: 'string', description: 'Exact string to find.' },\n67: new_str: { type: 'string', description: 'Replacement string.' },\n68: },\n69: required: ['old_str', 'new_str'],\n70: },\n71: },\n72: },\n73: required: ['path', 'edits'],\n74: },\n75: },\n76: },\n77: {\n78: type: 'function',\n79: function: {\n80: name: 'Bash',\n81: description: 'Execute a shell command. Use for running tests, builds, git commands, installing packages, checking syntax, etc. Commands have a 60-second timeout.',\n82: parameters: {\n83: type: 'object',\n84: properties: {\n85: command: { type: 'string', description: 'Shell command to execute.' },\n86: cwd: { type: 'string', description: 'Working directory (defaults to project root).' },\n87: },\n88: required: ['command'],\n89: },\n90: },\n91: },\n92: {\n93: type: 'function',\n94: function: {\n95: name: 'Grep',\n96: description: 'Search for a pattern across files using regex. Returns matching lines with file paths and line numbers.',\n97: parameters: {\n98: type: 'object',\n99: properties: {\n100: pattern: { type: 'string', description: 'Regex pattern to search for.' },\n101: path: { type: 'string', description: 'Directory or file to search in (defaults to project root).' },\n102: include: { type: 'string', description: 'File glob pattern to include, e.g. \"*.js\" or \"*.ts\"' },\n103: case_sensitive: { type: 'boolean', description: 'Case-sensitive search (default: false).' },\n104: },\n105: required: ['pattern'],\n106: },\n107: },\n108: },\n109: {\n110: type: 'function',\n111: function: {\n112: name: 'Glob',\n113: description: 'Find files matching a glob pattern. Returns file paths sorted by modification time.',\n114: parameters: {\n115: type: 'object',\n116: properties: {\n117: pattern: { type: 'string', description: 'Glob pattern like \"**/*.js\", \"src/**/*.ts\", \"*.json\"' },\n118: cwd: { type: 'string', description: 'Base directory for the search (defaults to project root).' },\n119: },\n120: required: ['pattern'],\n121: },\n122: },\n123: },\n124: {\n125: type: 'function',\n126: function: {\n127: name: 'ListDir',\n128: description: 'List the contents of a directory. Shows files and subdirectories with type indicators.',\n129: parameters: {\n130: type: 'object',\n131: properties: {\n132: path: { type: 'string', description: 'Directory path to list (defaults to project root).' },\n133: recursive: { type: 'boolean', description: 'If true, list recursively (max depth 3).' },\n134: },\n135: required: [],\n136: },\n137: },\n138: },\n139: {\n140: type: 'function',\n141: function: {\n142: name: 'UndoEdit',\n143: description: 'Undo the last edit made to a specific file, restoring its previous content.',\n144: parameters: {\n145: type: 'object',\n146: properties: {\n147: path: { type: 'string', description: 'File path to undo the last edit for.' },\n148: },\n149: required: ['path'],\n150: },\n151: },\n152: },\n153: {\n154: type: 'function',\n155: function: {\n156: name: 'Task',\n157: description: 'Spawn a sub-task by executing a sequence of shell commands for a complex multi-step operation. Useful for build-test-fix cycles.',\n158: parameters: {\n159: type: 'object',\n160: properties: {\n161: description: { type: 'string', description: 'Brief description of the task.' },\n162: commands: {\n163: type: 'array',\n164: description: 'Shell commands to execute in sequence. Stops on first failure.',\n165: items: { type: 'string' },\n166: },\n167: },\n168: required: ['description', 'commands'],\n169: },\n170: },\n171: },\n172: {\n173: type: 'function',\n174: function: {\n175: name: 'WebSearch',\n176: description: 'Search the web using Exa AI. Returns relevant results with titles, URLs, and text snippets. Use this to find up-to-date information, documentation, or answers from the internet.',\n177: parameters: {\n178: type: 'object',\n179: properties: {\n180: query: { type: 'string', description: 'The search query to execute.' },\n181: num_results: { type: 'number', description: 'Number of results to return (default: 5, max: 10).' },\n182: type: { type: 'string', description: 'Search type: \"auto\" (default), \"neural\", or \"keyword\".' },\n183: include_domains: {\n184: type: 'array',\n185: description: 'Only return results from these domains, e.g. [\"github.com\", \"stackoverflow.com\"].',\n186: items: { type: 'string' },\n187: },\n188: category: { type: 'string', description: 'Filter by category: \"news\", \"research paper\", \"tweet\", \"company\", \"personal site\", etc.' },\n189: },\n190: required: ['query'],\n191: },\n192: },\n193: },\n194: {\n195: type: 'function',\n196: function: {\n197: name: 'FilePickerMax',\n198: description: 'Spawn a file-picker sub-agent that deeply explores the codebase to find files relevant to a prompt. It scans the full directory tree and previews every source file, then uses the most capable model to identify and rank the relevant files. Use this when you need to locate files related to a concept, feature, bug, or pattern.',\n199: parameters: {\n200: type: 'object',\n201: properties: {\n202: prompt: { type: 'string', description: 'Describe what kind of files to find. Be specific — e.g. \"files that handle user authentication\", \"all React components related to the dashboard\", \"where database migrations are defined\".' },\n203: },\n204: required: ['prompt'],\n205: },\n206: },\n207: }\n208: ];\n209: \n210: module.exports = { toolDefs };"
|
|
268
|
-
},
|
|
269
|
-
"trackFiles": [
|
|
270
|
-
"file:///home/runner/workspace/src/tools.js"
|
|
271
|
-
]
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
]
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
"role": "assistant",
|
|
278
|
-
"messageId": 7,
|
|
279
|
-
"content": [
|
|
280
|
-
{
|
|
281
|
-
"type": "thinking",
|
|
282
|
-
"thinking": "This is a CLI-based terminal application, not a web UI. The user mentions \"open/close drawer\" and \"subagents\" - this seems to be a terminal CLI application (called \"Apex\") that interfaces with an AI model. \n\nWait, let me re-read the user's request. They said \"when the agent is running subagents, i want the open/close drawer to work via click.\" This is a terminal application. There's no \"drawer\" in the current UI.\n\nHmm, this might be about the Replit interface? Let me check the `.replit` file, since there's a `.replit` file in the workspace. This could be a Replit app with a web frontend.\n \nLet me look at the package.json to see if there's a web server or frontend framework involved, since the user's mention of clickable drawers suggests there might be a web UI component I'm missing.",
|
|
283
|
-
"signature": "EoUKCkgICxACGAIqQEiu3Rux0uP12NdsWJTBBaTpa888eEqsTdyeb5TRoIasE5JEHwkV1tishKr2gdaFUPVcO1PnZU2TS9ctk6/Ls80SDApaTmTCT/PMUZeoaBoMP7jBoOQCFZlcaK/2IjDyUWSnJlOR/pLcBF24LuNzhoXgHtjVf3hr3JN+xhOKnIOitWn/bDbHNhkdDeA48f4q6gjvFlJkDJswn+PKKxIGB8Z8n+DrHdYlt9yPGf/nWiVQ7BIiJ4b8UwLprJ4C+tCj6bez/jJD5zkh6g6bt1NScJqi/X6tOzn66i/PC8UYFIfWxGiG1G9F9/gk8sXJnTRNUZA6FITWY/BId7lhndjOmTzzrUgkiT/upbduYLHUMyewgSkXf/ojhwx2AuEk8nwokIOpc3QtL74nsvsw05z+st5Ea//N0CXon1jFUGtw/L0RejWonZs7A9Ezkla0gZSDfatCo3dDUhLVGSmx9gpP/fsahUV6kDfbRunwEN4tS/rQxCaghHlLSPswZC3DcMx4xCd2ekbET/NyeuE5PsAcBA49TGdU3wHzmuAvyhibk5DT7uhpIF68VM0u0w5aNAm/38j8PtB5kkN62Aik6ml08PiAu7Fmfx4WjkeeCEATMuqa9aY1OI2iMFmxFXj3ZI5AJM6hoyrIoPekFDrVigiQYW/8nNhG1B2JspsC41UXJM7i7GljDP0rn6pManfyMCzylHBvB4x59O4b95oiHBiUW4Sbg2ZIBUY9DsrEjL+iasSm66Nv8eWyDdtbchhrGKFA2bR/VpQXl2VEO8E5C+Uaq4MPPIDc50ke7Ai4kLDN1wqRVBqYUJj2qO6Rz8XKoKnFdak5tKieQOk9YZY4azGYagZMuP5dKP0NPEldXNHaSnHwevWAgGhmuXTND1FD8kPRyGyDZhosJVTa5Y2Reklbt48FIiVtT2HzUcuwEo1aPhxCzRBmZH4WI8JSIoKv09fiPK3uGRQmeuhrp/T4aEpn6bWhVp8FNtzXddCaTBIN/RzCB953onGzZCd/RN4tkkxpYHAifNI9xbialrJB8JzeA62TwYD4q94G47ss6fR7ZCo/ch3ONPPovEMqAdtZu5FPBpIp5BuT1LvkHmvsX5XiR8xgUnm9JADwygv0AZCY6/9zKvqaVb2v3YzkEUtaVtt7O6PkBZv73zrFm2u+jyIir1Wm50bS7erA2v/NTylbWTmp7YRYVKkv14G+eFPOt7OEYXHo7EnN4TeHGIhe15qPUuTb2OpUF8NMRhDYTzLJuZXCW2fqo9uyGDqVsFW7ZHQs31QFp4LrNGmzqaIiNkC1C+g6Pc8frpd9xlcY7KLEdCc/GZfjw0xYee8ilnUQRkKZotK5W4O1IQCRUXpYYT3rVE5/u+uY8ndVtiQSSq5MreMIeYkLfNRnsNzQeldM7yQgWmoruxm6vpnxHcNIQDDdlxaoyOmJPSFDaSBySD6GSm2ex8IWglIhY1wZlaMZ4KUrtAg6mWy2pjLhC8gfPC0O08CnmacLW+zJz7FOOROmN5Xe8c4uKZcKzG5kyJhr7dBq7PxXVEe+s9aerevXRu0jMpNtrBolFM54EbjQKWqGfgMozPwxatac+MqL4MLpGSFRpYlZPWm2BA1mP8agtRjprLN5mZWSMpNMHWA1/NZMuTur6oBgCG4VdgMns2IJM7TY1P1o/syYixhSXOLebklOwn2ZXOoHeZMTAiqtcRgB",
|
|
284
|
-
"provider": "anthropic"
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"type": "tool_use",
|
|
288
|
-
"complete": true,
|
|
289
|
-
"id": "toolu_vrtx_01T2kws422da7bkEuJ5UBjSM",
|
|
290
|
-
"name": "Read",
|
|
291
|
-
"input": {
|
|
292
|
-
"path": "/home/runner/workspace/package.json"
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
"type": "tool_use",
|
|
297
|
-
"complete": true,
|
|
298
|
-
"id": "toolu_vrtx_01SPa3c4kW3wpT999TWjRoK8",
|
|
299
|
-
"name": "Read",
|
|
300
|
-
"input": {
|
|
301
|
-
"path": "/home/runner/workspace/.replit"
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
],
|
|
305
|
-
"state": {
|
|
306
|
-
"type": "complete",
|
|
307
|
-
"stopReason": "tool_use"
|
|
308
|
-
},
|
|
309
|
-
"usage": {
|
|
310
|
-
"model": "claude-opus-4-6",
|
|
311
|
-
"maxInputTokens": 168000,
|
|
312
|
-
"inputTokens": 1,
|
|
313
|
-
"outputTokens": 402,
|
|
314
|
-
"cacheCreationInputTokens": 9159,
|
|
315
|
-
"cacheReadInputTokens": 25417,
|
|
316
|
-
"totalInputTokens": 34577,
|
|
317
|
-
"timestamp": "2026-02-26T03:20:23.517Z"
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
"role": "user",
|
|
322
|
-
"messageId": 8,
|
|
323
|
-
"content": [
|
|
324
|
-
{
|
|
325
|
-
"type": "tool_result",
|
|
326
|
-
"toolUseID": "toolu_vrtx_01T2kws422da7bkEuJ5UBjSM",
|
|
327
|
-
"run": {
|
|
328
|
-
"status": "done",
|
|
329
|
-
"progress": {},
|
|
330
|
-
"result": {
|
|
331
|
-
"absolutePath": "/home/runner/workspace/package.json",
|
|
332
|
-
"content": "1: {\n2: \"name\": \"apex-dev\",\n3: \"version\": \"2.1.3\",\n4: \"description\": \"Apex AI - a friendly agentic coding assistant for the terminal\",\n5: \"main\": \"index.js\",\n6: \"bin\": {\n7: \"apex\": \"./index.js\"\n8: },\n9: \"scripts\": {\n10: \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n11: },\n12: \"keywords\": [],\n13: \"author\": \"\",\n14: \"license\": \"ISC\",\n15: \"dependencies\": {\n16: \"@sourcegraph/amp\": \"^0.0.1772067340-g53cd9b\",\n17: \"boxen\": \"^5.1.2\",\n18: \"chalk\": \"^4.1.2\",\n19: \"cli-highlight\": \"^2.1.11\",\n20: \"figures\": \"^3.2.0\",\n21: \"openai\": \"^6.25.0\",\n22: \"opencode-ai\": \"1.2.14\",\n23: \"ora\": \"^5.4.1\",\n24: \"readline\": \"^1.3.0\"\n25: }\n26: }"
|
|
333
|
-
},
|
|
334
|
-
"trackFiles": [
|
|
335
|
-
"file:///home/runner/workspace/package.json"
|
|
336
|
-
]
|
|
337
|
-
}
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
"type": "tool_result",
|
|
341
|
-
"toolUseID": "toolu_vrtx_01SPa3c4kW3wpT999TWjRoK8",
|
|
342
|
-
"run": {
|
|
343
|
-
"status": "done",
|
|
344
|
-
"progress": {},
|
|
345
|
-
"result": {
|
|
346
|
-
"absolutePath": "/home/runner/workspace/.replit",
|
|
347
|
-
"content": "1: entrypoint = \"index.js\"\n2: modules = [\"nodejs-22\"]\n3: hidden = [\".config\", \"package-lock.json\"]\n4: \n5: [gitHubImport]\n6: requiredFiles = [\".replit\", \"replit.nix\", \"package.json\", \"package-lock.json\"]\n7: \n8: [nix]\n9: channel = \"stable-24_11\"\n10: \n11: [deployment]\n12: run = [\"node\", \"index.js\"]\n13: deploymentTarget = \"autoscale\"\n14: ignorePorts = false\n15: \n16: [agent]\n17: expertMode = true\n18: \n19: [[ports]]\n20: localPort = 3000\n21: externalPort = 80\n22: \n23: [[ports]]\n24: localPort = 9999\n25: externalPort = 3000\n26: \n27: [[ports]]\n28: localPort = 19996\n29: externalPort = 4200\n30: \n31: [[ports]]\n32: localPort = 19997\n33: externalPort = 3003\n34: \n35: [[ports]]\n36: localPort = 19998\n37: externalPort = 3002\n38: \n39: [[ports]]\n40: localPort = 19999\n41: externalPort = 3001"
|
|
348
|
-
},
|
|
349
|
-
"trackFiles": [
|
|
350
|
-
"file:///home/runner/workspace/.replit"
|
|
351
|
-
]
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
]
|
|
355
|
-
},
|
|
356
|
-
{
|
|
357
|
-
"role": "assistant",
|
|
358
|
-
"messageId": 9,
|
|
359
|
-
"content": [
|
|
360
|
-
{
|
|
361
|
-
"type": "thinking",
|
|
362
|
-
"thinking": "This is a CLI terminal application. There's no web frontend or \"drawer\" component in the codebase. The user is asking about a \"drawer\" UI element that doesn't exist yet.\n\nWait - looking at the Replit config, there are port mappings, including port 3000→80, which suggests this might also have a web interface or the user wants one. But looking at the actual code, it's purely CLI.\n\nLet me think about what the user might mean by \"drawer\" in the context of this terminal agent. Looking at the tool result display in agent.js - when tools run, their output is shown. The \"drawer\" might refer to how tool results are displayed - like a collapsible section.\n \nThe user mentioned wanting click-based open/close functionality for drawers when subagents are running, but this is a terminal app where clicking isn't typically possible. Though Replit's web-based terminal does support mouse events through ANSI codes, the user is probably asking about a web UI wrapper that I haven't found yet in the codebase. I'm wondering if the user is actually referring to the Amp web interface they're using right now rather than the CLI app itself, or if there's a web frontend for Apex that I haven't discovered yet. The port configuration suggests a web server should be running, but the main entry point is a CLI tool. Let me search the workspace more carefully to see if there's a web component I'm missing, or if I should just clarify what they're asking about.",
|
|
363
|
-
"signature": "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",
|
|
364
|
-
"provider": "anthropic"
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
"type": "tool_use",
|
|
368
|
-
"complete": true,
|
|
369
|
-
"id": "toolu_vrtx_01NK6L8UmwTacicDwRrb4CqT",
|
|
370
|
-
"name": "glob",
|
|
371
|
-
"input": {
|
|
372
|
-
"filePattern": "**/*.html"
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
{
|
|
376
|
-
"type": "tool_use",
|
|
377
|
-
"complete": true,
|
|
378
|
-
"id": "toolu_vrtx_01EKPvaUMuzyiepSBT6brkA9",
|
|
379
|
-
"name": "glob",
|
|
380
|
-
"input": {
|
|
381
|
-
"filePattern": "**/*.{svelte,tsx,jsx,vue}"
|
|
382
|
-
}
|
|
383
|
-
},
|
|
384
|
-
{
|
|
385
|
-
"type": "tool_use",
|
|
386
|
-
"complete": true,
|
|
387
|
-
"id": "toolu_vrtx_01KWhEB8xUNdFpiDodjpSyDq",
|
|
388
|
-
"name": "Grep",
|
|
389
|
-
"input": {
|
|
390
|
-
"pattern": "drawer",
|
|
391
|
-
"path": "/home/runner/workspace"
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
],
|
|
395
|
-
"state": {
|
|
396
|
-
"type": "complete",
|
|
397
|
-
"stopReason": "tool_use"
|
|
398
|
-
},
|
|
399
|
-
"usage": {
|
|
400
|
-
"model": "claude-opus-4-6",
|
|
401
|
-
"maxInputTokens": 168000,
|
|
402
|
-
"inputTokens": 1,
|
|
403
|
-
"outputTokens": 941,
|
|
404
|
-
"cacheCreationInputTokens": 1158,
|
|
405
|
-
"cacheReadInputTokens": 34576,
|
|
406
|
-
"totalInputTokens": 35735,
|
|
407
|
-
"timestamp": "2026-02-26T03:20:45.776Z"
|
|
408
|
-
}
|
|
409
|
-
},
|
|
410
|
-
{
|
|
411
|
-
"role": "user",
|
|
412
|
-
"messageId": 10,
|
|
413
|
-
"content": [
|
|
414
|
-
{
|
|
415
|
-
"type": "tool_result",
|
|
416
|
-
"toolUseID": "toolu_vrtx_01NK6L8UmwTacicDwRrb4CqT",
|
|
417
|
-
"run": {
|
|
418
|
-
"status": "done",
|
|
419
|
-
"progress": [],
|
|
420
|
-
"result": []
|
|
421
|
-
}
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
"type": "tool_result",
|
|
425
|
-
"toolUseID": "toolu_vrtx_01EKPvaUMuzyiepSBT6brkA9",
|
|
426
|
-
"run": {
|
|
427
|
-
"status": "done",
|
|
428
|
-
"progress": [
|
|
429
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/select.tsx",
|
|
430
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/password.tsx",
|
|
431
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/icon.tsx",
|
|
432
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/form.tsx",
|
|
433
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/code.tsx",
|
|
434
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/base.tsx",
|
|
435
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/select.tsx",
|
|
436
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/password.tsx",
|
|
437
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/icon.tsx",
|
|
438
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/form.tsx",
|
|
439
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/code.tsx",
|
|
440
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/base.tsx",
|
|
441
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/select.tsx",
|
|
442
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/password.tsx",
|
|
443
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/icon.tsx",
|
|
444
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/form.tsx",
|
|
445
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/code.tsx",
|
|
446
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/base.tsx",
|
|
447
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/select.tsx",
|
|
448
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/password.tsx",
|
|
449
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/icon.tsx",
|
|
450
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/form.tsx",
|
|
451
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/code.tsx",
|
|
452
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/base.tsx"
|
|
453
|
-
],
|
|
454
|
-
"result": [
|
|
455
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/select.tsx",
|
|
456
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/password.tsx",
|
|
457
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/icon.tsx",
|
|
458
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/form.tsx",
|
|
459
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/code.tsx",
|
|
460
|
-
"/home/runner/workspace/.cache/kilo/node_modules/@openauthjs/openauth/src/ui/base.tsx",
|
|
461
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/select.tsx",
|
|
462
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/password.tsx",
|
|
463
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/icon.tsx",
|
|
464
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/form.tsx",
|
|
465
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/code.tsx",
|
|
466
|
-
"/home/runner/workspace/.cache/opencode/node_modules/@openauthjs/openauth/src/ui/base.tsx",
|
|
467
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/select.tsx",
|
|
468
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/password.tsx",
|
|
469
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/icon.tsx",
|
|
470
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/form.tsx",
|
|
471
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/code.tsx",
|
|
472
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth/0.4.3@@@1/src/ui/base.tsx",
|
|
473
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/select.tsx",
|
|
474
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/password.tsx",
|
|
475
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/icon.tsx",
|
|
476
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/form.tsx",
|
|
477
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/code.tsx",
|
|
478
|
-
"/home/runner/workspace/.cache/.bun/install/cache/@openauthjs/openauth@0.4.3@@@1/src/ui/base.tsx"
|
|
479
|
-
]
|
|
480
|
-
}
|
|
481
|
-
},
|
|
482
|
-
{
|
|
483
|
-
"type": "tool_result",
|
|
484
|
-
"toolUseID": "toolu_vrtx_01KWhEB8xUNdFpiDodjpSyDq",
|
|
485
|
-
"run": {
|
|
486
|
-
"status": "done",
|
|
487
|
-
"progress": [
|
|
488
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:4285:coat, and a black kerchief. Often, approaching the chest of drawers",
|
|
489
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:25065:has a secret English drawer, you know! And dear Vera has long wanted",
|
|
490
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:28715:Frenchmen who had just thrown out the drawer of a chest, filled with",
|
|
491
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:28717:drawer.",
|
|
492
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:28727:from them some of the plate and bronzes that were in the drawer, moved"
|
|
493
|
-
],
|
|
494
|
-
"result": [
|
|
495
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:4285:coat, and a black kerchief. Often, approaching the chest of drawers",
|
|
496
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:25065:has a secret English drawer, you know! And dear Vera has long wanted",
|
|
497
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:28715:Frenchmen who had just thrown out the drawer of a chest, filled with",
|
|
498
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:28717:drawer.",
|
|
499
|
-
"/home/runner/workspace/node_modules/readline/test/fixtures/afile.txt:28727:from them some of the plate and bronzes that were in the drawer, moved"
|
|
500
|
-
]
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
]
|
|
504
|
-
},
|
|
505
|
-
{
|
|
506
|
-
"role": "assistant",
|
|
507
|
-
"messageId": 11,
|
|
508
|
-
"content": [
|
|
509
|
-
{
|
|
510
|
-
"type": "thinking",
|
|
511
|
-
"thinking": "There's no \"drawer\" component anywhere in this codebase. This is a pure CLI app with no web UI. The user is asking about an \"open/close drawer\" feature for when \"subagents\" are running. \n\nI think the user is referring to the visual display in the terminal when tool calls / sub-tasks are running. Currently, when the agent runs tools (which could be considered \"subagents\" especially the `Task` tool), the output is shown inline. The user wants a collapsible \"drawer\" UI element that can be opened/closed by clicking.\n\nIn terminal applications, you can implement clickable elements using ANSI escape sequences (specifically OSC 8 for hyperlinks, and mouse event handling). \n\nFor a terminal app, the most practical approach would be showing subagent output in a collapsible section with a toggleable header using standard terminal UI patterns like expand/collapse indicators.\n\nActually, I'm realizing this might be more complex than I initially thought. Replit's web-based terminal does support some mouse events, but implementing full interactive drawers is quite involved. I'm also wondering if the user might be thinking about the Amp agent UI itself, which already has drawer components for subagent output—though that's not something I can modify from this workspace. Or perhaps they want a separate web-based frontend for this CLI tool with proper drawer components.\n\nI should probably ask for clarification since this is a pure CLI app without an existing web UI, and I need to understand what they're actually looking for.",
|
|
512
|
-
"signature": "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",
|
|
513
|
-
"provider": "anthropic"
|
|
514
|
-
},
|
|
515
|
-
{
|
|
516
|
-
"type": "text",
|
|
517
|
-
"text": "I don't see a web UI or any \"drawer\" component in this codebase — it's a pure CLI terminal app (`index.js` → `src/agent.js`). Could you clarify what you mean by \"drawer\"? Are you referring to:\n\n1. **Adding a web frontend** with collapsible drawers for subagent (Task tool) output?\n2. **Terminal-based collapsible sections** (using ANSI escape codes for mouse click support) when tools/tasks run?\n3. **Something in the Replit UI** itself that you're experiencing issues with?"
|
|
518
|
-
}
|
|
519
|
-
],
|
|
520
|
-
"state": {
|
|
521
|
-
"type": "complete",
|
|
522
|
-
"stopReason": "end_turn"
|
|
523
|
-
},
|
|
524
|
-
"usage": {
|
|
525
|
-
"model": "claude-opus-4-6",
|
|
526
|
-
"maxInputTokens": 168000,
|
|
527
|
-
"inputTokens": 1,
|
|
528
|
-
"outputTokens": 688,
|
|
529
|
-
"cacheCreationInputTokens": 2086,
|
|
530
|
-
"cacheReadInputTokens": 35734,
|
|
531
|
-
"totalInputTokens": 37821,
|
|
532
|
-
"timestamp": "2026-02-26T03:21:07.178Z"
|
|
533
|
-
},
|
|
534
|
-
"turnElapsedMs": 65853
|
|
535
|
-
},
|
|
536
|
-
{
|
|
537
|
-
"role": "user",
|
|
538
|
-
"messageId": 12,
|
|
539
|
-
"content": [
|
|
540
|
-
{
|
|
541
|
-
"type": "text",
|
|
542
|
-
"text": "in some terminal apps like codebuff, clicking to interact with the CLI is possible."
|
|
543
|
-
}
|
|
544
|
-
],
|
|
545
|
-
"userState": {
|
|
546
|
-
"currentlyVisibleFiles": []
|
|
547
|
-
},
|
|
548
|
-
"agentMode": "smart",
|
|
549
|
-
"meta": {
|
|
550
|
-
"sentAt": 1772076093000
|
|
551
|
-
}
|
|
552
|
-
},
|
|
553
|
-
{
|
|
554
|
-
"role": "assistant",
|
|
555
|
-
"messageId": 13,
|
|
556
|
-
"content": [
|
|
557
|
-
{
|
|
558
|
-
"type": "text",
|
|
559
|
-
"text": "\n\n"
|
|
560
|
-
},
|
|
561
|
-
{
|
|
562
|
-
"type": "thinking",
|
|
563
|
-
"thinking": "The user is saying that in some terminal apps like Codebuff, you can click to interact with CLI elements. They want to add clickable open/close drawers for subagent output in their Apex CLI app.\n\nThis is achievable using terminal mouse event handling via ANSI escape sequences. Modern terminals support mouse tracking, and you can detect mouse clicks on specific regions of the terminal. The approach would be:\n\n1. Enable mouse tracking in the terminal using ANSI escape sequences\n2. When a subagent/task runs, show its output in a collapsible \"drawer\" with a clickable header\n3. Listen for mouse click events on those headers to toggle the drawer open/closed\n\nLet me look at how this could work:\n\n\nI need to enable mouse tracking with the appropriate escape sequences, then listen for mouse events on stdin while tracking where the drawer headers are positioned. When a click happens on a header, I'll re-render that drawer as expanded or collapsed. The tricky part is integrating this with readline since both need to handle input. For the UI, I'd render drawer headers with a chevron indicator—`▸` when collapsed and `▾` when expanded—followed by the task name, and the actual implementation would toggle the drawer's visibility state on click. We track the line positions of these drawer headers. We enable mouse event handling to detect clicks. When a click is detected on a drawer header line, we toggle it.\n\nFor the implementation, I need to add mouse event handling to the terminal, track drawer state with their positions and expanded/collapsed status, and re-render when toggled. The main areas to modify are `src/ui.js` for drawer rendering and mouse handling, and `src/agent.js` for displaying results in drawers.\n\nFor drawer state, I'll keep an array of drawer objects with id, label, content, expanded status, and line position. For mouse handling, I need to enable SGR mouse tracking, parse mouse events from stdin, check if clicks match drawer headers, and toggle accordingly. The rendering will show a right-pointing arrow for collapsed drawers and a down-pointing arrow for expanded ones, with content indented below.\n\nThe tricky part is that terminal output streams can't be easily modified after printing, so I'll need to use cursor movement escape sequences or redraw affected areas. For a streaming app, the most practical approach is storing tool results and redrawing the relevant section when a drawer is toggled. its result in a drawer\n- Show the collapsed drawer header\n- When clicked, use ANSI cursor movement to redraw the section\n\nBut this is complex because other output may have been printed after the drawer. A simpler approach might be:\n- Use ANSI escape sequences to save/restore cursor position\n- Track drawer positions relative to the terminal\n- On click, move cursor to the drawer position, clear from there, and re-render\n\nActually, let me think about this differently. The simplest practical approach:\n\n1. Track all drawers with their content\n2. When a click is detected on a drawer header, re-render the entire output area from that point down\n\nHmm, this is getting complex. Let me look at how tools like `codebuff` handle this. They likely use something like `ink` (React for CLI) or `blessed` which provides widget-based terminal UIs.\n\nBut the user's app uses `ora` and `chalk` for simple terminal output. Adding a full TUI framework would be a major refactor.\n\nSince the drawers are for completed subagent results, I can keep this lightweight: enable mouse tracking, render collapsed drawer headers with results stored in memory, track which terminal row each drawer is on, and when clicked, move the cursor to that row, clear below it, and re-render with the drawer toggled. I'll need to add mouse event handling utilities, manage drawer state, modify how tool results display to use drawers, and handle re-rendering on click. Let me start implementing this step by step.\n\nAdding mouse tracking... I'm realizing the core challenge: modifying already-printed output is fragile, so instead I should show a summary with collapsed drawers after the agent finishes, then enter a review mode where mouse clicks can toggle them open and closed until the user provides their next input.\n\nNow I'm settling on a cleaner approach—I'll create a DrawerManager class that tracks drawer state and uses ANSI cursor positioning to redraw individual sections when clicked, then integrate it into the agent loop to enable mouse tracking during tool output and disable it when waiting for user input.\n\nBuilding the DrawerManager class... enter an interactive mode where we can handle mouse events, clear and redraw sections as needed when clicks come in, then exit once the user presses Enter. For the implementation, I'll use ANSI cursor positioning and clearing sequences to save positions before rendering drawer headers, then match incoming click coordinates to those saved positions to toggle them in place.\n\nThe tricky part is managing what comes after each drawer—I need to track all the content that follows so I can redraw it when a drawer's state changes. I'm thinking through a cleaner architecture with a DrawerManager class that keeps track of each drawer's position, content, and expanded state...\n\nDesigning the class structure...\n\nThe real issue is that if there's non-drawer content between drawers, I'd lose track of it during re-renders. So maybe the simpler approach is to constrain drawers to be the only interactive elements in the output—the assistant's response comes first, then a series of self-contained drawers for tool results, making re-rendering straightforward since I know exactly what needs to be redrawn.\n\nLooking at the actual agent code though, tool results and text get interleaved as the agent runs, with tools potentially calling other tools and streaming text in between. The user probably means they want this to work specifically for the Task tool (subagents), but implementing it for all tool calls would follow the same pattern anyway.\n\nI think the right approach is: when a tool finishes during the agent loop, instead of printing the result inline, I'll render a collapsed drawer header and store the content. Then once the agent turn completes, I can enable click handlers on those drawers.\n\nBut here's the tricky part—if I re-render to toggle a drawer, I'd lose all the interleaved text that streamed between tool calls. So instead of trying to redraw everything, I should make each tool result drawer independently collapsible, where toggling just affects that single drawer's display using cursor movement to insert or remove lines as needed. The ANSI sequences for cursor movement and line manipulation would work, but there's a fundamental problem: terminal row numbers are tied to the visible viewport, not absolute positions, so if content scrolls off-screen the row tracking breaks down. I'm realizing this approach might be overcomplicating things—tools like codebuff probably use a proper TUI library like `ink` or `blessed` to handle this complexity rather than managing raw ANSI sequences.\n\nFor this codebase though, which is already using chalk, ora, and console.log, I think the pragmatic path is to query the cursor position before rendering each drawer, enable mouse tracking to detect clicks, calculate which drawer was hit, then use cursor movement and line operations to toggle it. I'm going to create a new drawer manager module to handle this step by step.\n\nBuilding the drawer manager class... Finishing the mouse event cleanup and implementing cursor position detection...\n\nNow I'm parsing mouse input events to extract button, column, and row coordinates from the terminal escape sequences, which will let me handle clicks on drawer elements. Writing the drawer expansion logic... Finishing the cursor restoration and header rendering... but I'm realizing this approach has some fundamental problems. Getting the cursor position conflicts with readline's input handling, mouse events would interfere, and the line insert/delete operations might not work reliably with terminal scrollback. I need to step back and reconsider the whole strategy—the user mentioned wanting something \"like codebuff,\" so maybe I'm overcomplicating this.\n\nThe real constraint is that readline monopolizes stdin, so I can't listen for mouse events while it's active. But during agent processing when readline is paused, I could handle mouse tracking. The flow would be: user input through readline, then agent processes while I track mouse events on the displayed results, then readline becomes active again for the next input. The issue is that readline operates in line mode by default, delivering complete lines rather than individual keypresses, so mouse events won't work while it's active. I need to pause readline during agent processing, switch stdin to raw mode to capture mouse input, then restore readline when done. Since `setupInputLoop` already creates a new readline instance, I can leverage that pattern to cleanly transition between modes.\n\nNow I'm realizing there's a conflict: readline creates its own interface on stdin, so if I try to read from stdin simultaneously for mouse events, they'll collide. I need to either modify readline to handle mouse events directly, or abandon readline's `question()` method entirely and manage all input myself in raw mode.\n\nActually, let me step back and think about this more pragmatically. The user wants click handling while the agent is running, and I can enable mouse tracking alongside readline in most terminals—readline will just ignore the mouse escape sequences. I can add a data listener on stdin to capture those sequences separately.\n\nThe tricky part is that readline consumes stdin data internally, so mouse events would get interpreted as garbled input and show up in the prompt. I need to intercept them before readline processes them, which means using raw mode on stdin.\n\nSetting up raw mode... I'm realizing that during `handleUserInput`, readline exists but isn't actively waiting for input, so I can pause it temporarily, enable mouse tracking to handle events myself, then resume it when I need the next prompt. This avoids the complexity of closing and recreating readline entirely.\n\nThe practical approach is to create a DrawerManager module that handles tool result display, modify the agent to use it, and implement mouse event handling by enabling raw mode on stdin and listening for escape sequences. I'll need to pass the readline instance or expose it so the agent can pause and resume it as needed.\n\nSetting up mouse event capture... events from reaching readline by... hmm this is the problem.\n\nYou know what, let me try a completely different approach. What if I use the `readline` instance itself and override its `_ttyWrite` method to intercept mouse events? That way, mouse events get caught before readline processes them.\n\nOr... I could just accept that during processing, readline isn't reading input, so mouse events won't cause problems. readline is in the middle of its question callback, so even if it receives data, it won't process it as a new answer until `question()` is called again.\n\nWait, that's actually not true. readline might buffer the data and deliver it as part of the next question's answer. So the real issue is that mouse event data would sit in readline's buffer and appear as garbage when the next question is asked. The clean solution is to close readline before enabling mouse tracking, handle stdin ourselves for mouse events, then disable tracking and recreate readline before returning from the handler. Since the code already has the setup for recreating readline, this pattern should work well. we can have a dedicated \"interactive review\" phase.\n\nThe user said \"when the agent is running subagents\" which implies during processing. But practically, clicking drawers while the agent is still streaming output would be chaotic. I think the best UX would be:\n\n1. During processing: show tool results with collapsed drawer headers (visual indicator that they're clickable)\n2. After processing: enter a brief interactive mode where clicks toggle drawers\n3. On any keyboard input: exit interactive mode and proceed to next prompt\n\nActually, that might be over-engineering. Let me go with the simplest possible approach:\n\n1. Enable mouse tracking for the entire duration of agent processing\n2. Render tool results as drawers with click indicators\n3. Handle click events on stdin (since readline is in callback mode and not actively prompting)\n4. When agent processing finishes, disable mouse tracking\n5. Don't worry about readline interference during processing since we're in the async callback\n\nNow I'm thinking through how to intercept mouse events before readline processes them. I could prepend a listener to stdin that checks if the incoming data is a mouse event sequence, but Node.js EventEmitter doesn't have a way to prevent other listeners from firing—all registered listeners will execute regardless. So I need a different approach than trying to block propagation. I think the cleanest solution is to close the readline interface at the start of `handleUserInput`, set up mouse tracking, process the agent loop normally, disable mouse tracking when done, then recreate readline via `setupInputLoop()` and call `askQuestion()`. This way readline doesn't exist during processing, so there's no interference with mouse events.\n\nLooking at the current code flow, closing `rl` at the start of `handleUserInput` won't prevent the question callback from completing—`rl.close()` just ends the interface but lets the callback finish. Then `setupInputLoop` creates a new readline instance and `askQuestion` uses it. The close event handler checks if processing is active and returns early if so, which is fine. Once `handleUserInput` finishes, the code checks if readline was closed and recreates it if stdin is still available.\n\nSince `askQuestion` references `rl` through closure over the module-scoped variable, it'll automatically use whichever readline instance exists at call time—so after `setupInputLoop` reassigns `rl`, the next `askQuestion()` call will use the new one.\n\nBut there's a potential issue: if `handleUserInput` calls both `setupInputLoop()` and `askQuestion()` internally when the input loop closes, and then the question callback also calls `askQuestion()` after awaiting `handleUserInput`, we'd have two concurrent `askQuestion()` calls running. Looking at the actual flow though, `handleUserInput` only calls `askQuestion()` if it's reinitializing the loop after closure—and it returns immediately after, so the callback's subsequent `askQuestion()` wouldn't execute until that returns. I'm realizing there's likely a bug in the existing code where readline closing during processing causes `askQuestion()` to be called twice, but it probably doesn't surface often since readline doesn't normally close mid-operation. For my approach, I'll skip that complexity and instead intercept mouse events directly on stdin—the escape sequences from mouse tracking will just be discarded by readline's keypress handler since they don't match any recognized key sequences.\n\nBut wait, there's still an issue: the `question()` callback is async and we're inside it, so readline is still actively listening on stdin. Any mouse event escape sequences would get interpreted as keypresses and corrupt the input buffer, so when the next prompt appears, the user would see garbage characters.\n\nI need to prevent mouse events from reaching readline entirely. The cleanest approach is to pause readline during processing—I can call `rl.pause()` to stop it from reading stdin, then handle mouse events directly, and resume it afterward when we're done with the agent loop.\n\nBut actually, I'm overthinking this. Let me go with something much simpler: during the agent turn, I'll show tool results as collapsed one-liners with an expandable indicator, store the full content, and then after the turn finishes, give the user an interactive mode to review the outputs if they want.\n\nWait, that changes the flow too much. What the user really needs is straightforward: collapsible drawers for tool outputs that they can click to expand or collapse, working seamlessly during or after processing. The practical path forward is to enable mouse tracking when the agent starts processing, render the drawers, handle the clicks to toggle them, and then disable mouse tracking before we're done. I don't need to worry about readline conflicts since there's no active question happening during tool execution.\n\nNow I'm second-guessing the readline interaction again—during the user input phase, we're inside the question callback, so readline is technically...\n\nI need to pause readline to prevent stdin interference, which means I'll need access to the readline instance. Rather than creating a global accessor or passing it through multiple layers, I can just pass pause and resume functions directly to handleUserInput through the options object.\n\nBuilding the DrawerManager class... Writing drawer management code... Finishing the mouse event parsing logic, extracting the button, column, and row coordinates from the terminal escape sequence, then checking if it's a left-click press before delegating to the click handler. Then I'm implementing the click handler to find the drawer at that row and toggle its expanded state, followed by the toggle logic that saves the cursor position, moves to the drawer's row, and clears the line to redraw it.\n\nStill writing drawer rendering... Still writing terminal control logic...\n\nI'm realizing the cursor position tracking is the real bottleneck here. The async query approach has timing issues when other stdin handlers are active, so I need to switch to manually tracking the cursor row by counting newlines in the output instead. I need to focus on the minimum viable product here—just getting clickable drawer headers that expand and collapse tool output. I'll enable mouse tracking when the agent starts processing, track which row each drawer header appears on using cursor position queries, and toggle visibility with ANSI codes when clicked, then disable mouse tracking when done.\n\nFor the implementation, I'm creating a DrawerManager class in a new file, updating the agent to use it for tool results, and passing the readline instance through so I can pause it during cursor queries to avoid conflicts.\n\nI'm hitting a timing issue with cursor position queries though, so I'm switching to a synchronous-ish approach using the escape sequence response handler...\n\nWriting cursor position handler...\n\nBut now I realize there's a conflict: if mouse tracking is enabled, both the mouse handler and cursor position handler will be listening to stdin, so I need to multiplex them into a single data handler that routes events to the right place.\n\nI'm setting up a DrawerManager class with a unified stdin handler that can distinguish between cursor position responses and mouse events based on their escape sequence patterns, storing a resolver for pending cursor queries so the handler knows when to process position data versus mouse input.\n\nParsing mouse and cursor events... I'm concerned about potential conflicts between the mouse tracking, raw mode, and the spinner library that shows progress indicators—they all interact with the terminal in different ways. Raw mode will also change how stdin works, so I need to make sure user input during processing doesn't interfere with the data handler. I should also build in graceful fallback behavior in case the terminal doesn't support mouse events, so the game still works even if clicks aren't available.\n\nWriting the DrawerManager class... Setting up the cleanup logic to disable mouse tracking, remove the stdin listener, and restore the terminal's raw mode state to what it was before initialization. Then I'm parsing incoming data to detect cursor position responses and resolve any pending cursor queries.\n\nHandling mouse events by parsing SGR format sequences to extract button, column, and row information, then triggering click handlers when the left mouse button is pressed.\n\nNow I'm adding Ctrl+C detection in raw mode to emit SIGINT, then implementing a cursor position query method that writes an escape sequence and waits for the response with a timeout fallback, followed by a drawer registration function that retrieves the current cursor row before rendering.\n\nBuilding the drawer rendering logic... Writing the drawer toggle logic... Still writing terminal control logic...\n\nActually, I'm realizing there's a conflict with my current approach—enabling raw mode directly could interfere with readline's stdin handling and break Ctrl+C functionality. The cursor position query also won't work reliably if readline is already listening on stdin. I should let readline manage the terminal mode instead and just enable mouse tracking through it, avoiding the raw mode complications altogether.\n\nBut wait, that creates another problem—readline will process mouse events as keypresses even when there's no active question, which would corrupt the line buffer for the next prompt. I need a different strategy: close readline before processing user input, then recreate it for the next question.\n\nRestructuring the input loop...\n\nThe close handler already has an early return during processing, so closing readline won't trigger unwanted side effects. Once `isProcessing` is true, stdin is free for raw mode and mouse tracking, and when processing finishes, the caller recreates readline and continues.\n\nBut there's a problem: if I explicitly close readline at the start, the `rlClosed` flag triggers code at the end of `handleUserInput` that calls `setupInputLoop` and `askQuestion`, and then the caller in index.js does the same thing again. I need to consolidate this—either stop closing readline in index.js entirely, or handle the recreation in just one place.\n\nThe better approach is to pass the readline instance through options and use `rl.pause()` at the start of `handleUserInput` to suspend input processing, then `rl.resume()` at the end after disabling mouse tracking. This way I avoid destroying and recreating the readline interface altogether.\n\nThe only concern is whether `rl.pause()` fully prevents events—the docs say it pauses the input stream but buffered events might still fire, though that shouldn't be an issue once I resume it. pausing, any new stdin data won't be processed by readline.\n\nAfter pausing readline, stdin is paused too. I need to resume it for mouse events:\n\nPausing readline pauses stdin internally. If I then resume stdin, readline might start receiving data again through its internal listener, so that approach won't actually prevent readline from getting the data.\n\nI think the right way is to remove readline's internal data listener temporarily, add my own handler, then restore readline's listener when done — but readline keeps those handlers private.\n\nAlternatively, I could use `rl.close()` and work around the consequences in the flow.\n\nLet me try monkey-patching `process.stdin.emit` to filter out mouse events before readline sees them...\n\nIntercepting mouse events at the emit level...\n\nActually, I'll go with this approach: enable mouse tracking, monkey-patch stdin's emit method to intercept mouse event patterns before readline processes them, handle the clicks in the drawer manager, then restore everything when done. I'll handle cursor position reports the same way.\n\nWriting the DrawerManager implementation... Finishing the monkey-patch implementation...\n\nI need to handle both Buffer objects and strings in the emit interception, and there's a critical issue: if I consume the 'data' event at the emit level, readline won't receive it since it's listening directly on the input stream. That's actually the behavior I want—by intercepting here, I can prevent readline from processing certain sequences while still allowing normal input through. Handling mouse and CPR events...\n\nNow I need to also intercept the `keypress` event since readline listens for that too, so I can prevent certain keys from being processed normally when I want to handle them myself.\n\nActually, wait—`emitKeypressEvents` transforms `data` events into `keypress` events, so if I intercept the `data` event, the `keypress` won't even be emitted. That means I only need to handle the `data` event.\n\nThere's a potential edge case though: the `data` event could contain a mouse event mixed with regular input, like if the user types while a mouse event is being sent. For now, I'll keep it simple and just consume the entire event if it contains a mouse event or CPR response, since this scenario is unlikely in practice.\n\nNow I'm ready to implement this. I need to create the drawers module, update the agent to use it for tool results, and wire up the lifecycle in the main index file. Looking at the current tool result display, it shows a progress indicator, then the result with metadata and a preview—I'll need to refactor that to use the drawer system instead.\n\nI'm thinking about keeping diffs and edits visible inline since those are important to see immediately, but collapsing other verbose output. And while the user mentioned subagents specifically, it makes sense to apply this to all tool results for consistency.\n\nThere's a practical challenge with cursor position queries that I need to handle carefully—I'll need to track rows properly and make sure the mouse event interception is clean with proper cleanup.\n\nI'm also considering the timing issue where escape sequence responses might arrive split across multiple data events, but for simplicity I'll assume they come in single chunks since that's the typical behavior for TTYs. I should also account for terminals that don't support mouse tracking—in those cases the drawers will just display as collapsed one-liners.\n\nOne thing I need to verify: when I enable mouse events with the escape sequences, stdin will receive the mouse data, but my monkey-patch on the emit event intercepts these before readline sees them, so readline won't get garbled input. The raw data still flows through the stream internals, but the patch prevents it from being emitted as regular input events.\n\nActually, I'm realizing my approach won't work—returning true from emit doesn't actually prevent the event from firing. The return value is just informational. I need to avoid calling the original emit entirely for mouse events and CPR responses, so those events never propagate to readline's listeners.\n\nIntercepting the emit call... I'm realizing that bypassing the original emit could break Readable's internal state management, since it tracks things like readableLength when data events fire. Rather than replacing emit entirely, a safer approach would be to intercept at the readline layer instead, modifying how readline processes input before it gets to the data handler.\n\nMonkey-patching readline's internal write function...\n\nActually, I need to reconsider the flow here. In Node.js, raw stdin data gets parsed by `emitKeypressEvents` into keypress events that readline listens for, so mouse escape sequences would be intercepted and parsed somewhere in that pipeline before reaching `_ttyWrite`. Let me trace through what `emitKeypressEvents` actually does with mouse event sequences.\n\nWhen it encounters a mouse event like `\\x1b[<0;10;5M`, it parses it into a keypress object with an undefined name and the full sequence. Then `_ttyWrite` receives this object, but since the name is undefined and doesn't match any known key handlers, it falls through to the character insertion logic. If the raw string `s` is passed along, those escape sequence bytes would get inserted as literal characters into the line buffer, showing up as garbage in the prompt.\n\nHowever, during agent processing when readline is between `question` callbacks, there's no active prompt being displayed, so any inserted garbage characters would be invisible. When the next `question()` is called, it sets up a fresh prompt and I need to verify whether the line buffer gets cleared or if those garbled characters persist.\n\nLooking at how `question()` and `prompt()` work, `prompt()` refreshes the display but I'm uncertain if it actually clears the input buffer, which means mouse event characters could potentially bleed through to the next prompt.\n\nRather than getting bogged down in readline's internals, I'll switch to a cleaner approach: close and recreate the readline interface around the agent loop. I'll close readline at the start of `handleUserInput`, enable raw mode and mouse tracking, run the agent, then disable mouse tracking and let the existing `rlClosed` handler recreate readline when needed.\n\nModifying the close handler and input flow...\n\nThe issue is that I'm closing readline intentionally during processing, but the existing rlClosed check at the end of handleUserInput will trigger recovery logic and call askQuestion, then the caller also calls it—creating a double call. I need to either remove that rlClosed check or distinguish between intentional closes and unexpected ones, so the recovery only happens when readline closes unexpectedly. me simplify: I'll add a flag `intentionalClose` or just modify the flow so that the caller always handles readline re-creation. But there's a timing issue—when I call `rl.close()` at the start of `handleUserInput`, it emits a 'close' event that sets `rlClosed = true`, and the close handler checks if stdin is destroyed. If stdin is fine, it just sets the flag and returns since `isProcessing` is true. Then at the end of `handleUserInput`, the existing code would call `setupInputLoop` and `askQuestion`, but the caller would also call them, causing duplication. The simplest fix is to reset `rlClosed = false` before returning from `handleUserInput` so that check doesn't fire. I'm realizing this approach is getting too complicated with multiple flags. Let me step back and try something simpler: just don't close readline at all. Instead, I'll enable mouse tracking by writing escape codes directly to stdout, then listen for mouse events on stdin using a data handler while readline sits idle in the background. The key question is whether readline receiving mouse event data actually causes problems when there's no active prompt.\n\nLet me trace through the flow: when a mouse event arrives, the keypress handler parses it, but since there's no active question being asked, any characters that don't match known keys would just go into readline's internal line buffer. When the next question is called, readline sets up a fresh prompt, but I need to check whether it clears that buffer or if garbage characters might leak through.\n\nLooking at how the keypress parser handles CSI sequences like mouse events, it seems like unrecognized escape sequences might not be fully consumed, potentially leaving fragments in the buffer that could appear in the next prompt. I see the issue now—unknown mouse event sequences would get inserted as garbage text into the readline buffer. Instead of trying to filter at the readline level, I should intercept the keypress events directly by monkey-patching stdin's emit method to detect and handle mouse sequences before they reach readline.\n\nWriting the event filter... I'm realizing that `emitKeypressEvents` will still process the raw data and emit keypress events even if I intercept them before readline sees them, so I can handle mouse events at the keypress level without breaking the data flow. I'll enable mouse tracking on stdout and then intercept keypress events to filter out mouse sequences before readline processes them.\n\nWriting the event interception code... Intercepting the emit method on the stdin instance itself to intercept mouse and cursor position report sequences before readline sees them, returning true to mark them as consumed so they don't propagate further. Writing the monkey-patch approach... Writing the event handler... Writing the drawer management code... Writing the click handler... Writing the content display... I'm realizing there's an issue with how the cursor position report works—when I call `getCursorRow()`, the response comes back as a data event on stdin that gets converted to a keypress event, but the Node.js keypress parser doesn't specifically handle the CPR response format, so it would just emit it as an unknown sequence rather than a recognized key.\n\nMy regex pattern should still catch it in the keypress event, but there's a potential problem if the escape sequence arrives in multiple chunks—the parser might emit the escape character separately from the rest of the sequence, breaking my detection. To handle this robustly, I should intercept both the raw data events and keypress events to ensure I catch the CPR response regardless of how it's buffered.\n\nIntercepting both event types... Still writing event handler... I'm simplifying the approach by intercepting only at the 'data' event level, which is more reliable. I'm setting up the emit override to check for CPR responses and resolve them when they arrive, then stripping that data from the stream so it doesn't get passed along.\n\nHandling mouse events... I'm finalizing the complete module structure for the drawers and updating the agent to integrate this functionality. Let me think through the edge cases: terminals without mouse support will just ignore the escape codes and keep drawers collapsed, multiple drawers track their own row positions for accurate click detection, resizing during use could invalidate positions but that's an acceptable limitation, and content that scrolls off-screen simply won't be clickable. I'm also deciding whether the preview text should remain visible when a drawer is collapsed or be completely hidden. I'm reconsidering the scope—the user mentioned \"subagents\" which likely refers to any tool calls, so making all tool results collapsible drawers seems like the right call for better UX. Now I need to think through whether the monkey-patch approach will actually work with readline by tracing how mouse events flow through stdin during tool execution. into readline's line buffer, so when the next prompt appears, that character would already be there—same as the current behavior since readline stays active during processing. My change only filters mouse events, so it doesn't make things worse. I should also verify that `emitKeypressEvents` might not be set up on stdin, but since my interceptor works on the 'data' event directly, that's handled. And when I restore the original `emit` function, all the listeners added during interception remain intact, so nothing gets lost. This approach should work cleanly.\n\nNow I'm ready to implement it. I'll create a DrawerManager singleton in a new module, then integrate it into the agent by calling start and stop around the input handling, replacing the inline tool result display with drawer calls. There's one concern though—if readline is consuming the 'data' events before my interceptor can reach them, the cursor position response might get lost, so I need to be careful about how the CPR response flows through the system.\n\nActually, my interceptor sits at the emit level, so it gets first access to all 'data' events before any listeners do. That means I can reliably capture the cursor position response. Now I need to think through the click handling—the `_handleClick` function has to be synchronous since it uses cursor movement sequences, but if the agent is actively streaming text when a click arrives, those cursor movements could corrupt the display. I should either only process clicks when the agent isn't streaming, or queue them for later. For now, I'll go with a simple approach to prevent interference during active streaming.\n\nDefining the DrawerManager class...\n\nI need to think about scroll wheel handling—mouse events include scroll events that I should let through to the terminal instead of consuming them, since my click handler only processes left clicks anyway.\n\nRefining the mouse event filter... Writing the DrawerManager class... Intercepting the stdin emit function to catch mouse events and cursor position reports before other listeners process them. Continuing with the mouse event handling logic...\n\nNow I'm processing the left-click events from the parsed mouse data, calling the click handler for button 0 presses. Then I'm checking if any escape sequences were consumed—if so, I either return early if the string is empty, or pass the remaining data back through the event args. Finally, I'm delegating to the original emit function to propagate the event, and then defining a stop method that disables mouse tracking and restores the original stdin behavior.\n\nSetting up cursor position tracking...\n\nNow I'm implementing the drawer system—when a new drawer is added, I fetch the current cursor row, store the drawer's metadata with truncation for long details, and render its header line to the terminal.\n\nWriting drawer rendering... Still writing the drawer expansion logic... Now I'm adjusting how subsequent drawers shift their positions when content collapses, then restoring the cursor position and exporting the DrawerManager. For the agent.js file, I need to refactor how tool results are displayed, starting with the async mapping of tool calls.\n\nModifying the execution flow...",
|
|
564
|
-
"signature": "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",
|
|
565
|
-
"provider": "anthropic"
|
|
566
|
-
}
|
|
567
|
-
],
|
|
568
|
-
"state": {
|
|
569
|
-
"type": "error",
|
|
570
|
-
"error": {
|
|
571
|
-
"message": "max_tokens"
|
|
572
|
-
}
|
|
573
|
-
},
|
|
574
|
-
"usage": {
|
|
575
|
-
"model": "claude-opus-4-6",
|
|
576
|
-
"maxInputTokens": 168000,
|
|
577
|
-
"inputTokens": 3,
|
|
578
|
-
"outputTokens": 32000,
|
|
579
|
-
"cacheCreationInputTokens": 710,
|
|
580
|
-
"cacheReadInputTokens": 37820,
|
|
581
|
-
"totalInputTokens": 38533,
|
|
582
|
-
"timestamp": "2026-02-26T03:30:50.465Z"
|
|
583
|
-
}
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
"role": "user",
|
|
587
|
-
"messageId": 14,
|
|
588
|
-
"content": [
|
|
589
|
-
{
|
|
590
|
-
"type": "text",
|
|
591
|
-
"text": "."
|
|
592
|
-
}
|
|
593
|
-
],
|
|
594
|
-
"userState": {
|
|
595
|
-
"currentlyVisibleFiles": []
|
|
596
|
-
},
|
|
597
|
-
"agentMode": "smart",
|
|
598
|
-
"meta": {
|
|
599
|
-
"sentAt": 1772076870232
|
|
600
|
-
}
|
|
601
|
-
},
|
|
602
|
-
{
|
|
603
|
-
"role": "assistant",
|
|
604
|
-
"messageId": 15,
|
|
605
|
-
"content": [
|
|
606
|
-
{
|
|
607
|
-
"type": "text",
|
|
608
|
-
"text": "\n\n"
|
|
609
|
-
},
|
|
610
|
-
{
|
|
611
|
-
"type": "thinking",
|
|
612
|
-
"thinking": "The user wants clickable terminal UI elements, similar to what Codebuff (a CLI coding agent) does. In terminal applications, you can use ANSI escape sequences to handle mouse events. This allows users to click on elements in the terminal to toggle them.\n\nLet me think about how to implement this:\n\n1. When subagents (Task tool calls) are running or have completed, show their output in a \"drawer\" format\n2. The drawer header would be clickable - clicking it toggles the visibility of the content\n3. This requires enabling mouse tracking in the terminal using ANSI escape sequences\n\nThe approach would be:\n1. Enable mouse event tracking in the terminal (using `\\x1b[?1000h` for basic mouse tracking or `\\x1b[?1006h` for SGR extended mouse mode)\n\n\n2. Capture mouse click events from stdin and track which drawer header was clicked\n3. Toggle the visibility of that drawer's content and re-render\n\nI'm realizing that full mouse tracking can get complex and interfere with normal text selection, so a simpler approach might work better: render collapsible drawer headers with a visual toggle indicator that users can interact with, making the interface feel responsive without needing complex event handling.\n\nLooking at the current implementation in agent.js, tool results are just written directly to stdout and scroll down the page. To add collapsible drawers, I need to manage drawer state, track their positions in the terminal, set up mouse event listeners, and handle the re-rendering when a drawer gets toggled.\n\nThis requires building out a few key pieces: a Drawer class to manage the collapsible sections, mouse event handling setup, and integration into the tool execution flow so results display in these interactive drawers instead of just scrolling past.\n\nSetting up mouse tracking in the terminal...\n\nThe challenge is that as new tool output arrives, everything scrolls up, so I need to keep track of where each drawer header currently sits on screen.\n\nI'm considering a simpler approach: render drawers in a collapsed state initially, store the cursor position of each drawer header, and when a click happens, use ANSI cursor commands to jump back to that position and re-render the drawer in its toggled state. I'm realizing the scrollback buffer limitation makes modifying old content impossible, so I should focus on drawers that stay visible in the viewport and redraw from the clicked header downward when toggled.\n\nThe user specifically wants clickable open/close drawers for subagent output during execution. Looking at how the Task tool currently renders its results, I need to understand the structure of what gets displayed when commands run.\n\nExamining the Task tool implementation...\n\nBuilding the drawer system...\n\nI'm realizing there's a conflict with stdin handling—readline is using it for user input, but I also need to capture mouse events through stdin during tool processing. The key insight is that readline is only active during the question prompt, so when the agent is actually running tools, I can safely enable raw mode and mouse tracking to capture clicks on the drawers. I need to carefully manage when to enable and disable these modes around the async processing loop.\n\nWriting drawer implementation code... I'm setting up mouse event handling for the terminal, but there's a fundamental issue: the row positions of the drawers change as content scrolls, so clicking on a drawer header becomes unreliable since the mouse coordinates are always relative to the current viewport.\n\nI'm considering a few alternatives—using an alternate screen buffer like vim does to keep a fixed layout, or saving a checkpoint position and re-rendering from there when a click happens. The re-render approach seems more feasible since it would let me track drawer positions relative to a known starting point and refresh the display when needed. the start position is still in the viewport. If it's scrolled away, we can't re-render.\n\n**Approach: Track relative positions**\n\nActually, I think the most practical approach is:\n\n1. Track the number of terminal rows from the bottom of the screen to each drawer header\n2. When a click comes in, the mouse event gives us the absolute viewport row\n3. We can use the terminal's row count to figure out which drawer was clicked\n4. On toggle, we need to redraw from that drawer downward\n\nLet me think about this differently. The mouse event gives us (row, col) relative to the viewport. If I know the total number of rows in the terminal viewport, and I know how many rows have been written since the last drawer header, I can figure out which drawer was clicked.\n\nActually, there's a simpler way: I can use the cursor position reporting escape sequence `\\x1b[6n` to get the current cursor position. Every time I render a drawer header, I query the cursor position and store it. The row in the response is relative to the beginning of the scrollback buffer.\n\nWait no, `\\x1b[6n` returns position relative to the viewport, not the scrollback. So it wraps around.\n\nOK let me think about this even more practically. Here's what I'll do:\n\n1. After all tool results are rendered, I know exactly how many lines were printed\n2. I can save the cursor row for each drawer header by tracking newlines manually\n3. Between tool calls when waiting for the LLM, the output is relatively stable\n4. When a click happens during this stable period, I can match the row to the right drawer\n\nThe most practical approach for a scrolling terminal is to keep a running count of newlines as I render each drawer header, so I can map click positions back to the correct drawer. rendered AFTER the last scroll, and I know how much scrolling has happened... this gets complicated.\n\nLet me step back and try something simpler. I'll only enable click-to-toggle for the most recent tool results while the screen is stable, track their viewport positions, and disable mouse tracking before rendering new content. But actually, there's no idle waiting period between tool execution and the next LLM call—the loop runs continuously. The real opportunity for clicking is during tool execution itself, when the screen isn't changing.\n\nThe Task tool runs synchronously though, so there's no async window for handling mouse events. Maybe what makes sense is supporting collapsible drawers after all processing finishes, when we're back at the readline prompt waiting for the next question. That's when the user could actually interact with the results. The challenge is that readline and raw mode mouse handling conflict with each other.\n\nLooking at how other CLI tools handle this, I could use Ink's approach with an alternate screen buffer and virtual DOM for re-rendering, or go simpler with ANSI escape sequences to enable mouse tracking, detect clicks on drawer headers, and re-render just that section when toggling open/closed state.\n\nI'm settling on a practical approach: track the starting row of the drawers section, enable mouse events via escape sequences, then when a drawer is clicked, move the cursor back to that saved position, clear everything below it, and re-render all drawers with their updated states. The tricky part is reliably saving the cursor position—the standard save/restore sequences don't work well with scrolling, so I'll query the current row position instead and use that as my anchor point for re-rendering.",
|
|
613
|
-
"signature": "",
|
|
614
|
-
"provider": "anthropic"
|
|
615
|
-
}
|
|
616
|
-
],
|
|
617
|
-
"state": {
|
|
618
|
-
"type": "cancelled"
|
|
619
|
-
},
|
|
620
|
-
"usage": {
|
|
621
|
-
"model": "claude-opus-4-6",
|
|
622
|
-
"maxInputTokens": 168000,
|
|
623
|
-
"inputTokens": 3,
|
|
624
|
-
"outputTokens": 11,
|
|
625
|
-
"cacheCreationInputTokens": 24560,
|
|
626
|
-
"cacheReadInputTokens": 13985,
|
|
627
|
-
"totalInputTokens": 38548,
|
|
628
|
-
"timestamp": "2026-02-26T03:36:06.218Z"
|
|
629
|
-
}
|
|
630
|
-
},
|
|
631
|
-
{
|
|
632
|
-
"role": "user",
|
|
633
|
-
"messageId": 16,
|
|
634
|
-
"content": [
|
|
635
|
-
{
|
|
636
|
-
"type": "text",
|
|
637
|
-
"text": "surf codebuff's github repo, then implement it."
|
|
638
|
-
}
|
|
639
|
-
],
|
|
640
|
-
"userState": {
|
|
641
|
-
"currentlyVisibleFiles": []
|
|
642
|
-
},
|
|
643
|
-
"agentMode": "smart",
|
|
644
|
-
"meta": {
|
|
645
|
-
"sentAt": 1772076972036
|
|
646
|
-
}
|
|
647
|
-
},
|
|
648
|
-
{
|
|
649
|
-
"role": "assistant",
|
|
650
|
-
"messageId": 17,
|
|
651
|
-
"content": [
|
|
652
|
-
{
|
|
653
|
-
"type": "text",
|
|
654
|
-
"text": "\n\n"
|
|
655
|
-
},
|
|
656
|
-
{
|
|
657
|
-
"type": "thinking",
|
|
658
|
-
"thinking": "The user wants me to look at Codebuff's GitHub repo to understand how they implement clickable terminal UI elements (like drawers/collapsible sections), then implement similar functionality in this Apex CLI app. Let me search for Codebuff's GitHub repo.",
|
|
659
|
-
"signature": "EqgDCkgICxACGAIqQEuqft7Mar4YPt+YtuUyD18qo8js936XDWsI5P21LkarXKkNgE5zOeljJES70mLbkQq2BDOJ5yI8bxdYpkMebCcSDPI2FpjhCd24nzHFnxoMC8ULI/QZflrdExEoIjAw7+BjihaKQbbbseLl0RyGF4ft4R0Eo75/7GL6ibUondte2uhQMf+HIaJqwPms0IEqjQIlKoJ/vCEjZcuR37zDrzH1pJ/fQSp1DaCtNn1/TOStGyouH5cEZrqDoCD1BA7uQDIrAAtU4bD/PbRmIMX78WzTvAMNei2xDf56BABYQr3bba5tOIPldiYSYoxKZZb+daS+yG+PJ9FCDJwe7dGlF0vsm7gvBnhA4lddwR0hjVLsAZ6PQWbjr6CJ/dO2TZYMPCwtqYX/JWqDBQ8QhaMs0D2/X5nu5OugP5g25fqrOeUBvBTUoCalCELeGWpzX/N17qOaBa6Z0mc9lNFcmoC0UQYAsmSVGlSoMPh0Wk3E04gMdaHlhneH1InIEUktFGZ5876lYz5AhfFHdy76qhrRltOZPotreri3ZmgevIf1PxgB",
|
|
660
|
-
"provider": "anthropic"
|
|
661
|
-
},
|
|
662
|
-
{
|
|
663
|
-
"type": "tool_use",
|
|
664
|
-
"complete": true,
|
|
665
|
-
"id": "toolu_vrtx_01Ub1AcUVwfApQhQDWdSoqhM",
|
|
666
|
-
"name": "web_search",
|
|
667
|
-
"input": {
|
|
668
|
-
"objective": "Find Codebuff's GitHub repository to understand how they implement clickable terminal UI elements like collapsible drawers in their CLI",
|
|
669
|
-
"search_queries": [
|
|
670
|
-
"codebuff github repo CLI",
|
|
671
|
-
"codebuff terminal click interactive",
|
|
672
|
-
"codebuff AI coding CLI github"
|
|
673
|
-
]
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
],
|
|
677
|
-
"state": {
|
|
678
|
-
"type": "complete",
|
|
679
|
-
"stopReason": "tool_use"
|
|
680
|
-
},
|
|
681
|
-
"usage": {
|
|
682
|
-
"model": "claude-opus-4-6",
|
|
683
|
-
"maxInputTokens": 168000,
|
|
684
|
-
"inputTokens": 3,
|
|
685
|
-
"outputTokens": 195,
|
|
686
|
-
"cacheCreationInputTokens": 26,
|
|
687
|
-
"cacheReadInputTokens": 38545,
|
|
688
|
-
"totalInputTokens": 38574,
|
|
689
|
-
"timestamp": "2026-02-26T03:36:17.922Z"
|
|
690
|
-
}
|
|
691
|
-
},
|
|
692
|
-
{
|
|
693
|
-
"role": "user",
|
|
694
|
-
"messageId": 18,
|
|
695
|
-
"content": [
|
|
696
|
-
{
|
|
697
|
-
"type": "tool_result",
|
|
698
|
-
"toolUseID": "toolu_vrtx_01Ub1AcUVwfApQhQDWdSoqhM",
|
|
699
|
-
"run": {
|
|
700
|
-
"status": "done",
|
|
701
|
-
"result": [
|
|
702
|
-
{
|
|
703
|
-
"title": "GitHub - CodebuffAI/codebuff: Generate code from the terminal!",
|
|
704
|
-
"url": "https://github.com/CodebuffAI/codebuff",
|
|
705
|
-
"excerpts": [
|
|
706
|
-
"## Navigation Menu\n\nToggle navigation\n\nAppearance settings\n\nSearch or jump to...\n\n# Search code, repositories, users, issues, pull requests...\n\nSearch\n\nClear\n\n[Search syntax tips](https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax)\n\nAppearance settings\n\nResetting focus\n\nYou signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert\n\nCodebuffAI / **codebuff** Public\n\n* Notifications You must be signed in to change notification settings\n* Fork 369\n* Star 2\\.8k\n\nGenerate code from the terminal!\n\n[codebuff.com](https://codebuff.com \"https://codebuff.com\")\n\n### License\n\nApache-2.0 license\n\n2\\.8k stars 369 forks Branches Tags Activity\n\nStar\n\nNotifications You must be signed in to change notification settings\n\n# CodebuffAI/codebuff\n\nmain\n\nBranches Tags\n\n \n\nGo to file\n\nCode\n\nOpen more actions menu\n\n## Folders and files\n\n|Name |Name |Last commit message |Last commit date |\n| --- | --- | --- | --- |\n|## Latest commit\n\n## History\n\n5,968 Commits\n\n 5,968 Commits |\n|.agents |.agents | | |\n|.bin |.bin | | |\n|.github |.github | | |\n|.vscode |.vscode | | |\n|agents-graveyard |agents-graveyard | | |\n|agents |agents | | |\n|assets |assets | | |\n|cli |cli | | |\n|common |common | | |\n|evals |evals | | |\n|packages |packages | | |\n|python-app |python-app | | |\n|scripts |scripts | | |\n|sdk |sdk | | |\n|test |test | | |\n|web |web | | |\n|.bun-version |.bun-version | | |\n|.codebuffignore |.codebuffignore | | |\n|.env.example |.env.example | | |\n|.envrc |.envrc | | |\n|.gitignore |.gitignore | | |\n|.prettierrc |.prettierrc | | |\n|CODE\\_OF\\_CONDUCT.md |CODE\\_OF\\_CONDUCT.md | | |\n|CONTRIBUTING.md |CONTRIBUTING.md | | |\n|CREATIVE\\_FEATURES\\_DEMO.md |CREATIVE\\_FEATURES\\_DEMO.md | | |\n|INFISICAL\\_SETUP\\_GUIDE.md |INFISICAL\\_SETUP\\_GUIDE.md | | |\n|LICENSE |LICENSE | | |\n|NOTICE |NOTICE | | |\n|README.md |README.md | | |\n|REFACTORING\\_PLAN.md |REFACTORING\\_PLAN.md | | |\n|ROADMAP.md |ROADMAP.md | | |\n|SECURITY.md |SECURITY.md | | |\n|WINDOWS.md |WINDOWS.md | | |\n|authentication.knowledge.md |authentication.knowledge.md | | |\n|bun.lock |bun.lock | | |\n|bunfig.toml |bunfig.toml | | |\n|eslint.config.js |eslint.config.js | | |\n|knowledge.md |knowledge.md | | |\n|package.json |package.json | | |\n|tsconfig.base.json |tsconfig.base.json | | |\n|tsconfig.json |tsconfig.json | | |\n|View all files |\n\n## Repository files navigation\n\n* README\n* Code of conduct\n* Contributing\n* Apache-2.0 license\n* Security\n\n# Codebuff\n\nCodebuff is an **open-source AI coding assistant** that edits your codebase through natural language instructions. Instead of using one model for everything, it coordinates specialized agents that work together to understand your project and make precise changes.\n\nCodebuff beats Claude Code at 61% vs 53% on our evals across 175+ coding tasks over multiple open-source repos that simulate real-world tasks.\n\n## How it works\n\nWhen you ask Codebuff to \"add authentication to my API,\" it might invoke:\n\n1. A **File Picker Agent** to scan your codebase to understand the architecture and find relevant files\n2. A **Planner Agent** to plan which files need changes and in what order\n3. An **Editor Agent** to make precise edits\n4. A **Reviewer Agent** to validate changes\n\nThis multi-agent approach gives you better context understanding, more accurate edits, and fewer errors compared to single-model tools.\n\n## CLI: Install and start coding\n\nInstall:\n\n```\nnpm install -g codebuff\n```\n\nRun:\n\n```\ncd your-project\ncodebuff\n```\n\nThen just tell Codebuff what you want and it handles the rest:\n\n* \"Fix the SQL injection vulnerability in user registration\"\n* \"Add rate limiting to all API endpoints\"\n* \"Refactor the database connection code for better performance\"\n\nCodebuff will find the right files, makes changes across your codebase, and runs tests to make sure nothing breaks.\n\n## Create custom agents\n\nTo get started building your own agents, start Codebuff and run the `/init` command:\n\n```\ncodebuff\n```\n\nThen inside the CLI:\n\n```\n/init\n```\n\nThis creates:\n\n```\nknowledge.md # Project context for Codebuff\n.agents/\n└── types/ # TypeScript type definitions\n ├── agent-definition.ts\n ├── tools.ts\n └── util-types.ts\n```\n\nYou can write agent definition files that give you maximum control over agent behavior.\n\nImplement your workflows by specifying tools, which agents can be spawned, and prompts. We even have TypeScript generators for more programmatic control.\n\nFor example, here's a `git-committer` agent that creates git commits based on the current git state. Notice that it runs `git diff` and `git log` to analyze changes, but then hands control over to the LLM to craft a meaningful commit message and perform the actual commit.\n\n```\nexport default { \n id : 'git-committer' , \n displayName : 'Git Committer' , \n model : 'openai/gpt-5-nano' , \n toolNames : [ 'read_files' , 'run_terminal_command' , 'end_turn' ] , \n\n instructionsPrompt :\n 'You create meaningful git commits by analyzing changes, reading relevant files for context, and crafting clear commit messages that explain the \"why\" behind changes.' , \n\n async * handleSteps ( ) { \n // Analyze what changed \n yield { tool : 'run_terminal_command' , command : 'git diff' } \n yield { tool : 'run_terminal_command' , command : 'git log --oneline -5' } \n\n // Stage files and create commit with good message \n yield 'STEP_ALL' \n } , \n }\n```\n\n## SDK: Run agents in production\n\nInstall the [SDK package](https://www.npmjs.com/package/@codebuff/sdk) \\-- note this is different than the CLI codebuff package.\n\n```\nnpm install @codebuff/sdk\n```\n\nImport the client and run agents!\n\n```\nimport { CodebuffClient } from '@codebuff/sdk' \n\n // 1. Initialize the client \n const client = new CodebuffClient ( { \n apiKey : 'your-api-key' , \n cwd : '/path/to/your/project' , \n onError : ( error ) => console . error ( 'Codebuff error:' , error . message ) , \n } ) \n\n // 2. Do a coding task... \n const result = await client . run ( { \n agent : 'base' , // Codebuff's base coding agent \n prompt : 'Add error handling to all API endpoints' , \n handleEvent : ( event ) => { \n console . log ( 'Progress' , event ) \n } , \n } ) \n\n // 3. Or, run a custom agent! \n const myCustomAgent : AgentDefinition = { \n id : 'greeter' , \n displayName : 'Greeter' , \n model : 'openai/gpt-5.1' , \n instructionsPrompt : 'Say hello!' , \n } \n await client . run ( { \n agent : 'greeter' , \n agentDefinitions : [ myCustomAgent ] , \n prompt : 'My name is Bob.' , \n customToolDefinitions : [ ] , // Add custom tools too! \n handleEvent : ( event ) => { \n console . log ( 'Progress' , event ) \n } , \n } )\n```\n\nLearn more about the SDK [here](https://www.npmjs.com/package/@codebuff/sdk) .\n\n## Why choose Codebuff\n\n**Custom workflows** : TypeScript generators let you mix AI generation with programmatic control. Agents can spawn subagents, branch on conditions, and run multi-step processes.\n\n**Any model on OpenRouter** : Unlike Claude Code which locks you into Anthropic's models, Codebuff supports any model available on [OpenRouter](https://openrouter.ai/models) \\- from Claude and GPT to specialized models like Qwen, DeepSeek, and others. Switch models for different tasks or use the latest releases without waiting for platform updates.\n\n**Reuse any published agent** : Compose existing [published agents](https://www.codebuff.com/store) to get a leg up. Codebuff agents are the new MCP!\n\n**SDK** : Build Codebuff into your applications. Create custom tools, integrate with CI/CD, or embed coding assistance into your products.\n\n## Contributing to Codebuff\n\nWe ❤️ contributions from the community - whether you're fixing bugs, tweaking our agents, or improving documentation.\n\n**Want to contribute?** Check out our Contributing Guide to get started.\n\n### Running Tests\n\nTo run the test suite:\n\n```\ncd cli\nbun test\n```\n\n**For interactive E2E testing** , install tmux:\n\n```\n# macOS \nbrew install tmux\n\n # Ubuntu/Debian \nsudo apt-get install tmux\n\n # Windows (via WSL) \nwsl --install\nsudo apt-get install tmux\n```\n\nSee cli/src/ **tests** /README.md for comprehensive testing documentation.\n\nSome ways you can help:\n\n* 🐛 **Fix bugs** or add features\n* 🤖 **Create specialized agents** and publish them to the Agent Store\n* 📚 **Improve documentation** or write tutorials\n* 💡 **Share ideas** in our [GitHub Issues](https://github.com/CodebuffAI/codebuff/issues)\n\n## Get started\n\n### Install\n\n**CLI** : `npm install -g codebuff`\n\n**SDK** : `npm install @codebuff/sdk`\n\n### Resources\n\n**Documentation** : [codebuff.com/docs](https://codebuff.com/docs)\n\n**Community** : [Discord](https://codebuff.com/discord)\n\n**Issues & Ideas** : [GitHub Issues](https://github.com/CodebuffAI/codebuff/issues)\n\n**Contributing** : CONTRIBUTING.md \\- Start here to contribute!\n\n**Support** : support@codebuff.com\n\n## Star History\n\n[](https://www.star-history.com//codebuff&Date)\n\n## About\n\nGenerate code from the terminal!\n\n[codebuff.com](https://codebuff.com \"https://codebuff.com\")\n\n### Resources\n\nReadme\n\n### License\n\nApache-2.0 license\n\n### Code of conduct\n\nCode of conduct\n\n### Contributing\n\nContributing\n\n### Security policy\n\nSecurity policy\n\n### Uh oh!\n\nThere was an error while loading. Please reload this page .\n\nActivity\n\nCustom properties\n\n### Stars\n\n**2\\.8k** stars\n\n### Watchers\n\n**22** watching\n\n### Forks\n\n**369** forks\n\nReport repository\n\n## Releases\n\n473 tags\n\n## Packages 0\n\nNo packages published\n\n## Used by 775\n\n* * * * * * * * \\+ 767\n\n## Contributors 21\n\n* [](https://github.com/jahooma)\n* [](https://github.com/charleslien)\n* [](https://github.com/brandonkachen)\n* [](https://github.com/apps/github-actions)\n* [](https://github.com/venkr)\n* [](https://github.com/codebuff-team)\n* [](https://github.com/jannalulu)\n* [](https://github.com/thisisharsh7)\n* [](https://github.com/claude)\n* [](https://github.com/dhofheinz)\n* [](https://github.com/dannyighsu)\n* [](https://github.com/PierrunoYT)\n* [](https://github.com/didier-durand)\n* [](https://github.com/AqeelAqeel)\n\n\\+ 7 contributors\n\n## Languages\n\n* TypeScript 97\\.2%\n* MDX 1\\.2%\n* JavaScript 0\\.8%\n* Shell 0\\.6%\n* CSS 0\\.1%\n* Tree-sitter Query 0\\.1%\n\n## Footer\n\nYou can’t perform that action at this time."
|
|
707
|
-
]
|
|
708
|
-
},
|
|
709
|
-
{
|
|
710
|
-
"title": "Codebuff – AI Coding Assistant for Your Terminal",
|
|
711
|
-
"url": "https://www.codebuff.com/",
|
|
712
|
-
"excerpts": [
|
|
713
|
-
"Docs Pricing [GitHub](https://github.com/CodebuffAI/codebuff) Agent Store\n\nToggle menu\n\n# Supercharge Your AI Coding\n\n## Simple. Fast. Powerful. Codebuff works in your terminal.\n\nGet Started\n\n`npm install -g codebuff`\n\nEXPLORER\n\n📁\n\nsrc\n\n📄\n\nindex.ts\n\n📁\n\napi\n\n📄\n\nauth.ts\n\n📄\n\nusers.ts\n\n📄\n\nprojects.ts\n\n📁\n\nutils\n\n📄\n\nhelpers.ts\n\n📄\n\ntypes.ts\n\n📄\n\nconstants.ts\n\n📄\n\nvalidation.ts\n\n📁\n\ncomponents\n\n📄\n\nApp.tsx\n\n📄\n\nButton.tsx\n\n📄\n\nCard.tsx\n\n📄\n\nInput.tsx\n\n📁\n\nforms\n\n📄\n\nLoginForm.tsx\n\n📄\n\nSignupForm.tsx\n\n📁\n\ntests\n\n📄\n\nindex.test.ts\n\n📄\n\nauth.test.ts\n\n📄\n\nutils.test.ts\n\n📁\n\nconfig\n\n📄\n\ntsconfig.json\n\n📄\n\njest.config.js\n\n📄\n\n.env.example\n\n📄\n\nindex.ts\n\n📄\n\nauth.ts\n\n📄\n\nApp.tsx\n\n1\n\nimport { useEffect , useState } from 'react'\n\n2\n\nimport { axios } from 'axios'\n\n3\n\n4\n\ninterface User {\n\n5\n\nid: string\n\n6\n\nemail: string\n\n7\n\n}\n\n8\n\n9\n\nexport function UserProfile () {\n\n10\n\nconst [user, setUser] = useState < User > ();\n\nTERMINAL\n\nCodebuff: Code from your terminal!\n\n🆕 NEW\n\nBENCHMARK RESULTS\n\n## BuffBench Results\n\nState of the art coding agent evaluation using generated workflows and judging from open source repositories\n\n175+\n\nReal Tasks\n\nGit commit reconstruction from open source projects\n\n5\n\nTurn Conversations\n\nPrompting agent simulates human for multiple turns\n\n4D\n\nScoring System\n\nCompletion, efficiency, code quality, and overall scores\n\n[View evaluation methodology ↗](https://github.com/CodebuffAI/codebuff/tree/main/evals)\n\n## Your Codebase, Fully Understood\n\nDEEP PROJECT INSIGHTS & ACTIONS\n\n⚡\n\nIndexes your entire codebase in 2 seconds\n\nCodebuff deeply understands your entire codebase structure, dependencies, and patterns to generate code that other AI tools can't match.\n\nSee How It Works →\n\n🧠\n\n#### Total Codebase Awareness\n\nBuilds a complete map of your project, including hidden dependencies\n\n✂️\n\n#### Surgical Code Edits\n\nMakes pinpoint changes while respecting your codebase's existing structure and style\n\n⚡\n\n#### Instant Solutions\n\nTailors solutions based on your codebase context\n\nhttp://my-app.example/weather\n\n# Weather App\n\nError: API Key Missing\n\nPlease configure the OpenWeatherMap API key to display weather information.\n\nConfigure API\n\nhttp://my-app.example/weather\n\n# Weather Dashboard Pro ✨\n\nEnterprise-grade API integration with real-time updates\n\n☀️\n\n### San Francisco\n\n72°F Sunny\n\nHumidity\n\n45%\n\nWind\n\n8 mph ↗️ NE\n\nPressure\n\n1012 hPa\n\nUV Index\n\n3 Low\n\nUpdated 2 min ago Next update in 5 min\n\nRefresh Now Change Location\n\n**✓ Connected:** API integrated with secure key management, caching and load balancing\n\nBefore\n\nAfter\n\n## Direct Your Codebase Like a Movie\n\nPRECISE CONTROL & FLEXIBILITY\n\n⚡\n\nZero setup hurdles, infinite control\n\nWorks in your terminal with any tech stack, no special environments needed. Just install npm and you're good to go.\n\nView Installation Guide →\n\n## Better and Better Over Time\n\nCONTINUOUS LEARNING & OPTIMIZATION\n\n⚡\n\nPersists project knowledge between sessions\n\nDon't repeat yourself. Codebuff can take notes on your conversations and stores them in human-readable markdown files. Each session teaches it about your specific needs and project setup.\n\nLearn About Knowledge Files →\n\nknowledge.md\n\nYour project's brain - learns and evolves with each use\n\n### Knowledge Growth Over Time\n\nMastery\n\nBasics\n\nDay 1\n\nDay 2\n\nDay 3\n\nDay 4\n\nDay 5\n\nDay 6\n\nDay 7\n\nCodebuff automatically gets better every time you use it\n\n## The Competition\n\nSpoiler: We're faster, smarter, and work anywhere you do\n\nGitHub Copilot\n\nEndless bugs and hallucinations Cursor\n\nConfusing maze of dead ends Claude Code\n\nSlow, multi-step process Cline\n\nRequires constant babysitting\n\n### 🤖 GitHub Copilot\n\nConstant hallucinations and wrong suggestions\n\ntheme-toggle.tsx\n\n// Original code gradually melting\n\nfunction ThemeToggle() {\n\nconst [theme, setTheme] = useState('light');\n\nconst toggleTheme = () => {\n\nsetTheme(theme === 'light' ? 'dark' : 'light');\n\n};\n\nreturn (\n\n<button onClick={toggleTheme}>\n\nToggle Theme: {theme}\n\n</button>\n\n);\n\n}\n\n// Hallucinated code suggestions\n\n🤖 Copilot Chat\n\nGitHub Copilot\n\nI'll help you implement a theme toggle in React. What approach do you want to use?\n\nYou\n\nJust make a simple toggle between light and dark modes.\n\n💡 Suggestion accuracy: 100%\n\n### 😫 Cursor\n\nConfusing interface with unintuitive commands\n\nPROJECT\n\n▶ src\n\n▶ components\n\n▶ utils\n\n▶ public\n\n▶ node\\_modules\n\nmain.tsx\n\nutils.ts\n\ncomponents.tsx\n\n1 import React from 'react';\n\n2 import {useState } from 'react';\n\n3\n\n4 function App(){\n\n5 const [count, setCount] = useState(0);\n\n6\n\n7 return (\n\n8 <div>\n\n9 <h1>Counter: {count}</h1>\n\n10 <button onClick={() => setCount(count + 1)}>Increment</button>\n\n11 </div>\n\n12 );\n\n13 }\n\n14\n\n15 export default App;\n\nAI Commands\n\n/imagine\n\n/edit\n\n/generate\n\n⌘+? 6 errors, 3 warnings\n\n### ⌛ Claude Code\n\nPainfully slow with endless waiting\n\n\\# Add a dark mode toggle button to a React app\n\n$ claude\n\nPlease add a button that toggles the theme between light and dark mode to my React app.\n\nSlowculating (0s ... esc to interrupt)\n\n⌛ Time elapsed: 0:00\n\nClaude Code needs 40 more seconds to generate a simple toggle button\n\n⌘ Press `ESC` to interrupt slowculation...\n\nSLOWCULATING...\n\n### 👶 Cline\n\nRequires constant babysitting\n\nVS Code Only\n\n⬚\n\nEXPLORER\n\nsrc/\n\ncomponents/\n\nButton.tsx\n\nCard.tsx\n\nutils/\n\nhelpers.js (423 lines)\n\nconfig/\n\npublic/\n\n.cline-instructions\n\n⚠️ Editor Limitation: Cline only works in VS Code, not in your preferred editor\n\nInstall VS Code\n\n\\# Request\n\nUpdate the profile page to add a new settings section\n\nConstant attention required\n\n## What Developers Are Saying\n\nWatch them rave about Codebuff (previously \"Manicode\")\n\nDaniel Hsu\n\nFounder & CEO\n\n> I was so flabbergasted that it even did the pip install for me haha Albert Lam\n\nFounder & CEO\n\n> Dude you guys are building something good Chrisjan Wust\n\nFounder & CTO\n\n> I'm honestly surprised by how well the product works! Stefan Gasser\n\nFounder & CEO\n\n> Yesterday at this time, I posted about testing Codebuff for our dark → light mode conversion. Today at 10 AM, our new light design is live in production... Stephen Grugett\n\nFounder & CEO\n\n> Just had a magical manicode moment: ... And it just worked! Dennis Beatty\n\nFounder & CEO\n\n> One of my favorite parts of every day is hearing @brett\\_beatty giggle in awe at @CodebuffAI. We've been using it daily for a couple months now and it's still incredible 🤯 Omar\n\nDesign Engineer\n\n> Just did a complete structural refactoring that would have took 4-8 hours by a human in 30 minutes using Claude (Web) to drive Codebuff to finish line. I think research in AI+AI pair programming is a must.\n\nDaniel Hsu\n\nFounder & CEO\n\n> I was so flabbergasted that it even did the pip install for me haha Albert Lam\n\nFounder & CEO\n\n> Dude you guys are building something good Chrisjan Wust\n\nFounder & CTO\n\n> I'm honestly surprised by how well the product works! Stefan Gasser\n\nFounder & CEO\n\n> Yesterday at this time, I posted about testing Codebuff for our dark → light mode conversion. Today at 10 AM, our new light design is live in production... Stephen Grugett\n\nFounder & CEO\n\n> Just had a magical manicode moment: ... And it just worked! Dennis Beatty\n\nFounder & CEO\n\n> One of my favorite parts of every day is hearing @brett\\_beatty giggle in awe at @CodebuffAI. We've been using it daily for a couple months now and it's still incredible 🤯 Omar\n\nDesign Engineer\n\n> Just did a complete structural refactoring that would have took 4-8 hours by a human in 30 minutes using Claude (Web) to drive Codebuff to finish line. I think research in AI+AI pair programming is a must.\n\nJJ Fliegelman\n\nFounder\n\n> I played around with Codebuff and added some features to something I was working on. It really does have a different feeling than any other AI tools I've used; feels much more right, and I'm impressed by how you managed to land on that when nobody else did. anonymous\n\nSoftware Architect\n\n> I finally tried composer. It's ass compared to manicode Finbarr Taylor\n\nFounder\n\n> manicode.ai > cursor.com for most code changes. I'm now just using cursor for the quick changes within a single file. Manicode lets you make wholesale changes to the codebase with a single prompt. It's 1 step vs many. Gray Newfield\n\nFounder & CEO\n\n> Finally, AI that actually understands my code structure and dependencies. Shardool Patel\n\nFounder & CTO\n\n> Im basically hiring an engineer for $50/month, that's how I see it Dexter Horthy\n\nFounder & CEO\n\n> when investors ask me about codebuff I tell them i use it 6 days a week\n\nJJ Fliegelman\n\nFounder\n\n> I played around with Codebuff and added some features to something I was working on. It really does have a different feeling than any other AI tools I've used; feels much more right, and I'm impressed by how you managed to land on that when nobody else did. anonymous\n\nSoftware Architect\n\n> I finally tried composer. It's ass compared to manicode Finbarr Taylor\n\nFounder\n\n> manicode.ai > cursor.com for most code changes. I'm now just using cursor for the quick changes within a single file. Manicode lets you make wholesale changes to the codebase with a single prompt. It's 1 step vs many. Gray Newfield\n\nFounder & CEO\n\n> Finally, AI that actually understands my code structure and dependencies. Shardool Patel\n\nFounder & CTO\n\n> Im basically hiring an engineer for $50/month, that's how I see it Dexter Horthy\n\nFounder & CEO\n\n> when investors ask me about codebuff I tell them i use it 6 days a week\n\nBacked by\n\n[](https://www.ycombinator.com/companies/codebuff)\n\n[](https://www.producthunt.com/posts/codebuff?embed=true&utm_source=badge-featured&utm_medium=badge&utm_souce=badge-codebuff)\n\n# Ready to experience magic?\n\n## Integrates with your existing workflow. Simple install. No hassles.\n\n`npm install -g codebuff`\n\nFirst time? Check out our step-by-step guide\n\n### Site\n\nHome Docs Pricing Usage\n\n### Legal\n\nPrivacy Policy Terms of Service\n\n### Community\n\n[GitHub](https://github.com/CodebuffAI/codebuff) [Discord](https://codebuff.com/discord)"
|
|
714
|
-
]
|
|
715
|
-
},
|
|
716
|
-
{
|
|
717
|
-
"title": "tips | Codebuff Docs | Codebuff",
|
|
718
|
-
"url": "https://www.codebuff.com/docs/tips",
|
|
719
|
-
"excerpts": [
|
|
720
|
-
"Docs Pricing [GitHub](https://github.com/CodebuffAI/codebuff)\n\nToggle menu\n\n# What Makes Codebuff Unique\n\nCodebuff is an open-source AI coding agent that coordinates specialized sub-agents instead of using one model for everything.\n\nThe result: better code quality and up to 3x faster performance than Claude Code, built on a deep agent framework continuously refined by our in-house evals\n\n## 100+ Seconds Faster Than Claude Code\n\nCodebuff is dramatically faster—often completing features in 1/3 the time.\n\nIn real-world tests:\n\n* **Claude Code** : 19m 37s for a feature\n* **Codebuff** : 6m 45s for the same feature\n\nFurther, in our evals, Codebuff is ~100 seconds faster on average per task.\n\nWe achieve this through parallel agents, better file discovery (see below), and being willing to read all the related files in one go.\n\nSee our detailed comparison with Claude Code .\n\n## Tree-based File Discovery\n\nClaude Code can spend 5+ minutes grep-ing and reading file excerpts one at a time.\n\nCodebuff's approach:\n\n1. **Parse your entire codebase** : We analyze all source files and extract function names, class names, and type names\n2. **Build a code tree** : This creates a compact tree of all directories, files, and symbols in your project\n3. **Grok 4.1 Fast scans the tree** : We feed this code tree to Grok 4.1 Fast, which identifies up to 12 relevant files in seconds\n4. **Gemini Flash summarizes** : Those 12 files are read and summarized by Gemini Flash\n5. **Main agent reads multiple files at once** : With the summaries, the main agent knows exactly what to read\n\nThis entire process takes just a few seconds and efficiently conveys a lot of information to the agent. No more watching your agent slowly explore your codebase.\n\n## Parallel Multi-Strategy Editing\n\nIn MAX mode, Codebuff doesn't just try once—it tries three times in parallel with different strategies and picks the best result.\n\nHow it works:\n\n1. The orchestrator spawns multiple editor agents, each with a different strategy\n2. All implementations run in parallel, reusing the prompt cache\n3. A selector agent chooses the best implementation\n4. The selector can incorporate good ideas from other attempts\n\nThis is remarkably efficient because all parallel agents share the cached conversation history—you only pay once for reading files.\n\n## Automatic Code Review\n\nEvery prompt gets reviewed before Codebuff finishes.\n\n* A reviewer agent spawns automatically\n* It runs in parallel with typechecks and tests\n* Catches bugs, dead code, and quality issues\n* Fixes are applied before you see the result\n\nIn MAX mode, multiple reviewers analyze your code from different angles—all reusing the prompt cache.\n\n## Invisible Context Management\n\nOther tools show you \"% context used\" and make you worry about it.\n\nCodebuff handles context automatically:\n\n* **Smart compaction** : After the prompt cache expires (5 min idle), we automatically summarize the conversation—much more efficient for long sessions\n* **Non-lossy summaries** : 10-20 roundtrips preserved with full details\n* **Deterministic strategy** : User messages, assistant messages, tool calls—all kept\n* **Immediate re-reading** : Codebuff quickly re-reads any relevant files it needs after compaction\n\nYou never think about context. It just works.\n\n## Open Source Multi-Agent Framework\n\nOur entire agent framework is open source . The same code that powers Codebuff powers your custom agents.\n\nKey innovations:\n\n* **Agents as the composable unit** : Not individual LLM calls, but complete agents with tools and prompts\n* **Optional inherited context** : Subagents can optionally inherit conversation history (Claude Code's subagents always start with blank context)\n* **Arbitrary nesting** : Agents can spawn agents that spawn agents—unlimited depth (Claude Code only supports 1 level of subagents)\n* **Programmatic control** : Mix LLM calls with TypeScript code using generator functions\n* **Orchestrator pattern** : One agent with no tools except spawning other agents—perfect context management for free\n\n```\n// Simplified example of the orchestrator pattern\n\nconst orchestrator = {\n\ntools : [ spawnAgent ] ,\n\nspawnableAgents : [ filePicker , editor , reviewer , thinker , researcher ]\n\n}\n```\n\nSpawned agents contribute only their final output, keeping the orchestrator's context clean and focused.\n\n## Research-Driven Agent Development\n\nWe built [BuffBench](https://github.com/CodebuffAI/codebuff/tree/main/evals) —our custom eval suite that tests agent configurations across 175+ real implementation tasks from open source repos.\n\nBuffBench takes a fundamentally different approach from benchmarks like SWE Bench. Instead of passing predefined tests, our evals challenge coding agents to reimplement real git commits through multi-turn conversations. An AI judge scores implementations on completion, efficiency, code quality, and overall correctness—comparing against the ground truth commit.\n\n* **Data-driven optimization** : We measure quality, speed, and cost across many agent combinations\n* **Ship what wins** : Only the highest-scoring, fastest, most cost-effective configurations go live\n* **Most complex agent system** : After testing countless subagent combinations, we ship the most robust multi-agent architecture of any major coding agent\n* **Continuous improvement** : We believe going deeper on agent research will unlock significant further advantages that no one else will find\n\nOur research isn't theoretical—it's deployed in production, constantly refined by real-world testing.\n\n## Ad Revenue Share\n\nCodebuff optionally displays ads above the input box. Each impression earns you credits you can spend on more coding agent usage.\n\n* **Earn while you code** : Ad impressions convert directly to credits\n* **Completely optional** : Turn ads off at any time in settings\n* **Use credits for more prompts** : Earned credits work just like purchased credits\n\n## Polished Terminal UI\n\nCodebuff's CLI is built on [OpenTUI](https://github.com/anomalyco/opentui) —a React-based terminal framework.\n\n* No flicker, ever\n* Hover and click support\n* Sleek, polished experience\n\n## Clickable Follow-up Suggestions\n\nAfter every response, Codebuff suggests three follow-up prompts you can click to execute.\n\n* Codebuff often has ideas you didn't think of\n* One click to continue building\n* A step toward Codebuff as a collaborative partner\n\n## No Babysitting Required\n\nWhen you ask Codebuff to do something, it just does it. No permission prompts. No \"Are you sure?\" dialogs.\n\nYou can step away and come back to finished work.\n\n## Try It Now\n\n```\nnpm install -g codebuff\n```\n\nThen `cd` to your project and run `codebuff` . Experience the difference in seconds.\n\nModes\n\nUsing Codebuff"
|
|
721
|
-
]
|
|
722
|
-
},
|
|
723
|
-
{
|
|
724
|
-
"title": "codebuff/CREATIVE_FEATURES_DEMO.md at main · CodebuffAI/codebuff · GitHub",
|
|
725
|
-
"url": "https://github.com/CodebuffAI/codebuff/blob/main/CREATIVE_FEATURES_DEMO.md",
|
|
726
|
-
"excerpts": [
|
|
727
|
-
"## Navigation Menu\n\nToggle navigation\n\nAppearance settings\n\n* Platform\n \n + AI CODE CREATION\n \n - [GitHub Copilot Write better code with AI](https://github.com/features/copilot)\n - [GitHub Spark Build and deploy intelligent apps](https://github.com/features/spark)\n - [GitHub Models Manage and compare prompts](https://github.com/features/models)\n - [MCP Registry <sup>New</sup> Integrate external tools](https://github.com/mcp)\n + DEVELOPER WORKFLOWS\n \n - [Actions Automate any workflow](https://github.com/features/actions)\n - [Codespaces Instant dev environments](https://github.com/features/codespaces)\n - [Issues Plan and track work](https://github.com/features/issues)\n - [Code Review Manage code changes](https://github.com/features/code-review)\n + APPLICATION SECURITY\n \n - [GitHub Advanced Security Find and fix vulnerabilities](https://github.com/security/advanced-security)\n - [Code security Secure your code as you build](https://github.com/security/advanced-security/code-security)\n - [Secret protection Stop leaks before they start](https://github.com/security/advanced-security/secret-protection)\n + EXPLORE\n \n - [Why GitHub](https://github.com/why-github)\n - [Documentation](https://docs.github.com)\n - [Blog](https://github.blog)\n - [Changelog](https://github.blog/changelog)\n - [Marketplace](https://github.com/marketplace)\n \n [View all features](https://github.com/features)\n* Solutions\n \n + BY COMPANY SIZE\n \n - [Enterprises](https://github.com/enterprise)\n - [Small and medium teams](https://github.com/team)\n - [Startups](https://github.com/enterprise/startups)\n - [Nonprofits](https://github.com/solutions/industry/nonprofits)\n + BY USE CASE\n \n - [App Modernization](https://github.com/solutions/use-case/app-modernization)\n - [DevSecOps](https://github.com/solutions/use-case/devsecops)\n - [DevOps](https://github.com/solutions/use-case/devops)\n - [CI/CD](https://github.com/solutions/use-case/ci-cd)\n - [View all use cases](https://github.com/solutions/use-case)\n + BY INDUSTRY\n \n - [Healthcare](https://github.com/solutions/industry/healthcare)\n - [Financial services](https://github.com/solutions/industry/financial-services)\n - [Manufacturing](https://github.com/solutions/industry/manufacturing)\n - [Government](https://github.com/solutions/industry/government)\n - [View all industries](https://github.com/solutions/industry)\n \n [View all solutions](https://github.com/solutions)\n* Resources\n \n + EXPLORE BY TOPIC\n \n - [AI](https://github.com/resources/articles?topic=ai)\n - [Software Development](https://github.com/resources/articles?topic=software-development)\n - [DevOps](https://github.com/resources/articles?topic=devops)\n - [Security](https://github.com/resources/articles?topic=security)\n - [View all topics](https://github.com/resources/articles)\n + EXPLORE BY TYPE\n \n - [Customer stories](https://github.com/customer-stories)\n - [Events & webinars](https://github.com/resources/events)\n - [Ebooks & reports](https://github.com/resources/whitepapers)\n - [Business insights](https://github.com/solutions/executive-insights)\n - [GitHub Skills](https://skills.github.com)\n + SUPPORT & SERVICES\n \n - [Documentation](https://docs.github.com)\n - [Customer support](https://support.github.com)\n - [Community forum](https://github.com/orgs/community/discussions)\n - [Trust center](https://github.com/trust-center)\n - [Partners](https://github.com/partners)\n* Open Source\n \n + COMMUNITY\n \n - [GitHub Sponsors Fund open source developers](https://github.com/sponsors)\n + PROGRAMS\n \n - [Security Lab](https://securitylab.github.com)\n - [Maintainer Community](https://maintainers.github.com)\n - [Accelerator](https://github.com/accelerator)\n - [Archive Program](https://archiveprogram.github.com)\n + REPOSITORIES\n \n - [Topics](https://github.com/topics)\n - [Trending](https://github.com/trending)\n - [Collections](https://github.com/collections)\n* Enterprise\n \n + ENTERPRISE SOLUTIONS\n \n - [Enterprise platform AI-powered developer platform](https://github.com/enterprise)\n + AVAILABLE ADD-ONS\n \n - [GitHub Advanced Security Enterprise-grade security features](https://github.com/security/advanced-security)\n - [Copilot for Business Enterprise-grade AI features](https://github.com/features/copilot/copilot-business)\n - [Premium Support Enterprise-grade 24/7 support](https://github.com/premium-support)\n* [Pricing](https://github.com/pricing)\n\nSearch or jump to...\n\n# Search code, repositories, users, issues, pull requests...\n\nSearch\n\nClear\n\n[Search syntax tips](https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax)\n\nAppearance settings\n\nResetting focus\n\nYou signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert\n\nCodebuffAI / **codebuff** Public\n\n* Notifications You must be signed in to change notification settings\n* Fork 343\n* Star 2\\.7k\n\n* Code\n* Issues 28\n* Pull requests 9\n* Discussions\n* Actions\n* Projects 0\n* Security ### Uh oh! There was an error while loading. Please reload this page .\n* Insights\n\nAdditional navigation options * Code\n* Issues\n* Pull requests\n* Discussions\n* Actions\n* Projects\n* Security\n* Insights\n\n## Footer\n\nYou can’t perform that action at this time."
|
|
728
|
-
]
|
|
729
|
-
},
|
|
730
|
-
{
|
|
731
|
-
"title": "Codebuff · GitHub",
|
|
732
|
-
"url": "https://github.com/CodebuffAI",
|
|
733
|
-
"excerpts": [
|
|
734
|
-
"## Navigation Menu\n\nToggle navigation\n\nAppearance settings\n\nCodebuffAI\n\n* Platform\n \n + AI CODE CREATION\n \n - [GitHub Copilot Write better code with AI](https://github.com/features/copilot)\n - [GitHub Spark Build and deploy intelligent apps](https://github.com/features/spark)\n - [GitHub Models Manage and compare prompts](https://github.com/features/models)\n - [MCP Registry <sup>New</sup> Integrate external tools](https://github.com/mcp)\n + DEVELOPER WORKFLOWS\n \n - [Actions Automate any workflow](https://github.com/features/actions)\n - [Codespaces Instant dev environments](https://github.com/features/codespaces)\n - [Issues Plan and track work](https://github.com/features/issues)\n - [Code Review Manage code changes](https://github.com/features/code-review)\n + APPLICATION SECURITY\n \n - [GitHub Advanced Security Find and fix vulnerabilities](https://github.com/security/advanced-security)\n - [Code security Secure your code as you build](https://github.com/security/advanced-security/code-security)\n - [Secret protection Stop leaks before they start](https://github.com/security/advanced-security/secret-protection)\n + EXPLORE\n \n - [Why GitHub](https://github.com/why-github)\n - [Documentation](https://docs.github.com)\n - [Blog](https://github.blog)\n - [Changelog](https://github.blog/changelog)\n - [Marketplace](https://github.com/marketplace)\n \n [View all features](https://github.com/features)\n* Solutions\n \n + BY COMPANY SIZE\n \n - [Enterprises](https://github.com/enterprise)\n - [Small and medium teams](https://github.com/team)\n - [Startups](https://github.com/enterprise/startups)\n - [Nonprofits](https://github.com/solutions/industry/nonprofits)\n + BY USE CASE\n \n - [App Modernization](https://github.com/solutions/use-case/app-modernization)\n - [DevSecOps](https://github.com/solutions/use-case/devsecops)\n - [DevOps](https://github.com/solutions/use-case/devops)\n - [CI/CD](https://github.com/solutions/use-case/ci-cd)\n - [View all use cases](https://github.com/solutions/use-case)\n + BY INDUSTRY\n \n - [Healthcare](https://github.com/solutions/industry/healthcare)\n - [Financial services](https://github.com/solutions/industry/financial-services)\n - [Manufacturing](https://github.com/solutions/industry/manufacturing)\n - [Government](https://github.com/solutions/industry/government)\n - [View all industries](https://github.com/solutions/industry)\n \n [View all solutions](https://github.com/solutions)\n* Resources\n \n + EXPLORE BY TOPIC\n \n - [AI](https://github.com/resources/articles?topic=ai)\n - [Software Development](https://github.com/resources/articles?topic=software-development)\n - [DevOps](https://github.com/resources/articles?topic=devops)\n - [Security](https://github.com/resources/articles?topic=security)\n - [View all topics](https://github.com/resources/articles)\n + EXPLORE BY TYPE\n \n - [Customer stories](https://github.com/customer-stories)\n - [Events & webinars](https://github.com/resources/events)\n - [Ebooks & reports](https://github.com/resources/whitepapers)\n - [Business insights](https://github.com/solutions/executive-insights)\n - [GitHub Skills](https://skills.github.com)\n + SUPPORT & SERVICES\n \n - [Documentation](https://docs.github.com)\n - [Customer support](https://support.github.com)\n - [Community forum](https://github.com/orgs/community/discussions)\n - [Trust center](https://github.com/trust-center)\n - [Partners](https://github.com/partners)\n* Open Source\n \n + COMMUNITY\n \n - [GitHub Sponsors Fund open source developers](https://github.com/sponsors)\n + PROGRAMS\n \n - [Security Lab](https://securitylab.github.com)\n - [Maintainer Community](https://maintainers.github.com)\n - [Accelerator](https://github.com/accelerator)\n - [Archive Program](https://archiveprogram.github.com)\n + REPOSITORIES\n \n - [Topics](https://github.com/topics)\n - [Trending](https://github.com/trending)\n - [Collections](https://github.com/collections)\n* Enterprise\n \n + ENTERPRISE SOLUTIONS\n \n - [Enterprise platform AI-powered developer platform](https://github.com/enterprise)\n + AVAILABLE ADD-ONS\n \n - [GitHub Advanced Security Enterprise-grade security features](https://github.com/security/advanced-security)\n - [Copilot for Business Enterprise-grade AI features](https://github.com/features/copilot/copilot-business)\n - [Premium Support Enterprise-grade 24/7 support](https://github.com/premium-support)\n* [Pricing](https://github.com/pricing)\n\nSearch or jump to...\n\n# Search code, repositories, users, issues, pull requests...\n\nSearch\n\nClear\n\n[Search syntax tips](https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax)\n\nAppearance settings\n\nResetting focus\n\nYou signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert\n\n# Codebuff\n\nMake your terminal write code for you\n\n* \n\n* 52 followers\n* United States of America\n* <https://codebuff.com>\n* [@CodebuffAI](https://x.com/CodebuffAI)\n* [company/codebuff](https://www.linkedin.com/company/codebuff)\n* founders@codebuff.com\n\n* Overview\n* Repositories\n* Projects\n* Packages\n* People\n\n## Popular repositories Loading\n\n1. codebuff codebuff Public\n \n Generate code from the terminal!\n \n TypeScript 2\\.7k 342\n2. codebuff-community codebuff-community Public\n \n A showcase of Codebuff projects created by our community\n \n TypeScript 34 9\n3. codebuff-dot-agents codebuff-dot-agents Public\n \n TypeScript 5 4\n4. codebuff-swe-bench codebuff-swe-bench Public\n \n Forked from Aider-AI/aider-swe-bench\n \n Harness used to benchmark Codebuff against SWE Bench benchmarks\n \n Python 2\n5. stagehand stagehand Public\n \n Forked from browserbase/stagehand\n \n An AI web browsing framework focused on simplicity and extensibility – customized for Codebuff\n \n TypeScript 2 2\n6. opentui opentui Public\n \n Forked from anomalyco/opentui\n \n OpenTUI is a library for building terminal user interfaces (TUIs)\n \n TypeScript 1 1\n\n### Repositories\n\nLoading\n\nShowing 6 of 6 repositories\n\n* codebuff-community Public\n \n A showcase of Codebuff projects created by our community\n \n ### Uh oh! There was an error while loading. Please reload this page . CodebuffAI/codebuff-community’s past year of commit activity\n \n TypeScript 34 MIT 9 2 0 Updated Jan 8, 2026\n* codebuff Public\n \n Generate code from the terminal!\n \n ### Uh oh! There was an error while loading. Please reload this page . CodebuffAI/codebuff’s past year of commit activity\n \n TypeScript 2,678 Apache-2.0 342 28 9 Updated Jan 8, 2026\n* codebuff-dot-agents Public\n \n ### Uh oh! There was an error while loading. Please reload this page . CodebuffAI/codebuff-dot-agents’s past year of commit activity\n \n TypeScript 5 Apache-2.0 4 0 0 Updated Jan 4, 2026\n* opentui Public Forked from anomalyco/opentui\n \n OpenTUI is a library for building terminal user interfaces (TUIs)\n \n ### Uh oh! There was an error while loading. Please reload this page . CodebuffAI/opentui’s past year of commit activity\n \n TypeScript 1 MIT 282 0 0 Updated Oct 25, 2025\n* stagehand Public Forked from browserbase/stagehand\n \n An AI web browsing framework focused on simplicity and extensibility – customized for Codebuff\n \n ### Uh oh! There was an error while loading. Please reload this page . CodebuffAI/stagehand’s past year of commit activity\n \n TypeScript 2 MIT 1,315 0 0 Updated Feb 10, 2025\n* codebuff-swe-bench Public Forked from Aider-AI/aider-swe-bench\n \n Harness used to benchmark Codebuff against SWE Bench benchmarks\n \n ### Uh oh! There was an error while loading. Please reload this page . CodebuffAI/codebuff-swe-bench’s past year of commit activity\n \n Python 2 Apache-2.0 22 0 0 Updated Dec 19, 2024\n\n#### People\n\nThis organization has no public members. You must be a member to see who’s a part of this organization.\n\n#### Top languages\n\nLoading…\n\n### Uh oh!\n\nThere was an error while loading. Please reload this page . #### Most used topics\n\nLoading…\n\n### Uh oh!\n\nThere was an error while loading. Please reload this page .\n\n## Footer\n\nYou can’t perform that action at this time."
|
|
735
|
-
]
|
|
736
|
-
}
|
|
737
|
-
],
|
|
738
|
-
"~debug": {
|
|
739
|
-
"showParallelAttribution": false
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
]
|
|
744
|
-
},
|
|
745
|
-
{
|
|
746
|
-
"role": "assistant",
|
|
747
|
-
"messageId": 19,
|
|
748
|
-
"content": [
|
|
749
|
-
{
|
|
750
|
-
"type": "thinking",
|
|
751
|
-
"thinking": "Key finding: Codebuff uses **OpenTUI** - a React-based terminal framework that supports hover and click interactions. Let me look at the OpenTUI library and the Codebuff CLI source code to understand how they implement clickable drawers/collapsible sections.\n\nFrom the Codebuff docs: \"Codebuff's CLI is built on OpenTUI—a React-based terminal framework. No flicker, ever. Hover and click support. Sleek, polished experience.\"\n\nAnd: \"Clickable Follow-up Suggestions - After every response, Codebuff suggests three follow-up prompts you can click to execute.\"\n\n\nNow I'm diving into the OpenTUI library and examining how Codebuff implements these interactive components in their CLI.",
|
|
752
|
-
"signature": "EpAGCkgICxACGAIqQNxf2BF1530wFrwrQcZN5FuIx6sObhxdI6vinT/rl0W+LY8fqb1qSZJq0a2nkrSBfl0Pq6YN2Ev04k9OX0a4d9ISDMaZ7nmohmm+gK+s2BoMoGJjbNOYLv7gVf1TIjAIdfJmm/WHit0v4bDbyrq6I3hFLoXpxfibZ0QMNG02tj9cuzVkgr9XNGp12LnD8ywq9QStA86opSGOfEEXgjhXzKmSZgm1QOpLs7gThdGhGLculU/kiPHN3weYPK4zcqdmRbNab3H76tyUEiM/Jl4fta18uuJCRnrliqRGo67MMZ7DI6wgkcsM/4G/3pPJ1wok7d0U7j9YDD9hM3WTc1/X7fE4/4Flzyir/uuX5/qzSl8dt01jL4EH2CoS1EEHjxJnESKPEqNmkc47uF/gz6H/jsLN74oKRGn8mNANhNUwXyt9L9K4FXJ/2IhgdjNW80FbOKIOBGTZUaZhDDMucrYR5f+QLDbP8/vaQK1wc6Q6TSeXd5v+244aIyr4Q6gcNYEM8i9nTJuLx46h9xNA2N2YnJ1M4VHq6JUMFbibdYiTLnUla9LCnoFUP7m5QXq7U5CxnjNMygw+7nv8CrGVWzm45ZnzSQ6FvIcBGYpx2syvyabk1uBJSsSKBfu4JRodiVSkFEFStWmQ0sTfpIjzLZ1phIYHMgDhbDmmbDVxzXQJixolkhTmqhGN6bVCo7JxDvq8OeGMABDj4py5T7Vix3dweLKKK4zyWcttMsQZ17UepoxVY/gFvH07b35RQLIEj8cZmYOVAQ+HK/HEIRiCXf8ob3tkRgz75gEz0RlKQpwBvnDsFAWfWMP3FWbhpf96TI0GrQt0dcoT279G1h3q2weSlCqOp+SmXB5GPJtJJMmDY1A9sT2uXpnBH4IUIe+FR35gpr+oT9dy1PbTxFLWNHHRrYUYZjJ19Tn2TqrFHAtRUu8QE8iAvD+MfxqPDXe4RTJi9LI0l00o1z5PsYQv52pE154Kxna74YrisgOc9d72DelvCpuJlZZ/v40pMuAG87uQDgMGEhNgwBgB",
|
|
753
|
-
"provider": "anthropic"
|
|
754
|
-
},
|
|
755
|
-
{
|
|
756
|
-
"type": "tool_use",
|
|
757
|
-
"complete": true,
|
|
758
|
-
"id": "toolu_vrtx_01EnT1ThXp7fJSUdTuonMhFb",
|
|
759
|
-
"name": "librarian",
|
|
760
|
-
"input": {
|
|
761
|
-
"query": "How does the Codebuff CLI implement clickable terminal UI elements like collapsible drawers/sections for subagent output? Look at the cli/ directory in the CodebuffAI/codebuff repo, particularly any components related to drawers, collapsible sections, accordion, or expandable output. Also look at the OpenTUI (anomalyco/opentui) library for how click/hover support works in the terminal.",
|
|
762
|
-
"context": "I'm building a CLI coding agent similar to Codebuff. I need to understand how Codebuff implements clickable collapsible drawers in the terminal for subagent output, so I can implement the same pattern. The user specifically wants subagent output to be togglable via click. Codebuff uses OpenTUI, a React-based terminal framework with mouse support."
|
|
763
|
-
}
|
|
764
|
-
}
|
|
765
|
-
],
|
|
766
|
-
"state": {
|
|
767
|
-
"type": "complete",
|
|
768
|
-
"stopReason": "tool_use"
|
|
769
|
-
},
|
|
770
|
-
"usage": {
|
|
771
|
-
"model": "claude-opus-4-6",
|
|
772
|
-
"maxInputTokens": 168000,
|
|
773
|
-
"inputTokens": 1,
|
|
774
|
-
"outputTokens": 421,
|
|
775
|
-
"cacheCreationInputTokens": 14525,
|
|
776
|
-
"cacheReadInputTokens": 38571,
|
|
777
|
-
"totalInputTokens": 53097,
|
|
778
|
-
"timestamp": "2026-02-26T03:36:32.749Z"
|
|
779
|
-
}
|
|
780
|
-
},
|
|
781
|
-
{
|
|
782
|
-
"role": "user",
|
|
783
|
-
"messageId": 20,
|
|
784
|
-
"content": [
|
|
785
|
-
{
|
|
786
|
-
"type": "tool_result",
|
|
787
|
-
"toolUseID": "toolu_vrtx_01EnT1ThXp7fJSUdTuonMhFb",
|
|
788
|
-
"run": {
|
|
789
|
-
"status": "done",
|
|
790
|
-
"result": "Both repositories are inaccessible (private or don't exist publicly). However, based on the context you've provided — Codebuff uses OpenTUI, a React-based terminal framework — I can give you a thorough explanation of how this pattern works, synthesizing what's known about OpenTUI and the Codebuff CLI architecture.\n\n---\n\n## How Codebuff Implements Clickable Collapsible Drawers in the Terminal\n\n### The Stack\n\n```\nCodebuff CLI\n └── React components (TSX)\n └── OpenTUI renderer (anomalyco/opentui)\n └── Ink-style terminal rendering + ANSI mouse escape codes\n```\n\nCodebuff's CLI is built on **OpenTUI**, which is a React-based terminal UI framework similar to [Ink](https://github.com/vadimdemedes/ink) but with first-class **mouse support**. The collapsible drawer pattern works by combining:\n\n1. **Mouse tracking escape codes** (ANSI `\\x1b[?1000h` / `?1006h`) to detect click coordinates in the terminal\n2. **Bounding-box hit detection** to map click `(x, y)` → component\n3. **React state** (`useState`) to toggle open/closed\n\n---\n\n### OpenTUI: How Mouse/Click Support Works\n\nOpenTUI enables terminal mouse support by writing the ANSI mouse tracking escape sequence when the app starts:\n\n```typescript\n// OpenTUI renderer initialization\nprocess.stdout.write('\\x1b[?1000h'); // Enable mouse button events\nprocess.stdout.write('\\x1b[?1006h'); // Enable SGR mouse mode (supports larger terminals)\n```\n\nThen it listens on `process.stdin` for mouse event escape sequences, which look like:\n\n```\n\\x1b[<BUTTON;X;Ym (mouse press at col X, row Y)\n\\x1b[<BUTTON;X;YM (mouse release at col X, row Y)\n```\n\nOpenTUI parses these and dispatches them to components. Each rendered component registers its **bounding box** (top-left corner + width/height) with the renderer. On a click event, the renderer does hit-testing — walking the component tree to find which component's bounding box contains `(x, y)` — and fires the `onClick` handler of the deepest matching component.\n\nThe core pattern in OpenTUI components is:\n\n```tsx\n// OpenTUI exposes an onClick prop (analogous to React DOM's onClick)\n<Box onClick={() => setExpanded(!expanded)}>\n ▶ Subagent: search_files\n</Box>\n```\n\n---\n\n### The Collapsible Drawer Component Pattern\n\nThe drawer/collapsible component in Codebuff's CLI follows this structure:\n\n```tsx\n// Conceptual reconstruction of Codebuff's collapsible subagent drawer\nimport React, { useState } from 'react';\nimport { Box, Text } from 'opentui'; // OpenTUI's primitives\n\ninterface DrawerProps {\n title: string;\n children: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function Drawer({ title, children, defaultOpen = false }: DrawerProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n return (\n <Box flexDirection=\"column\">\n {/* Clickable header row */}\n <Box onClick={() => setIsOpen(o => !o)}>\n <Text color=\"cyan\">{isOpen ? '▼' : '▶'} </Text>\n <Text bold>{title}</Text>\n </Box>\n\n {/* Conditionally rendered body */}\n {isOpen && (\n <Box flexDirection=\"column\" paddingLeft={2}>\n {children}\n </Box>\n )}\n </Box>\n );\n}\n```\n\nUsage for subagent output:\n\n```tsx\n<Drawer title=\"Subagent: read_file(src/auth.ts)\" defaultOpen={false}>\n <Text dimColor>{subagentOutput}</Text>\n</Drawer>\n```\n\n---\n\n### How OpenTUI Maps Clicks to Components\n\nOpenTUI's renderer maintains a **layout tree** after each render cycle (similar to how browsers have a render tree). Each `<Box>` knows its rendered position because OpenTUI uses a Yoga-based (or custom) flexbox layout engine to compute positions before painting to the terminal.\n\n```\nRender cycle:\n1. React reconciler produces a virtual tree\n2. OpenTUI layout engine walks the tree, assigns (x, y, width, height) to every node\n3. OpenTUI painter writes ANSI escape codes to stdout\n4. OpenTUI stores the layout tree in memory\n\nClick event:\n1. stdin emits \\x1b[<0;12;5m (left button, col 12, row 5)\n2. OpenTUI parses → { button: 0, x: 12, y: 5, type: 'press' }\n3. Walk layout tree from leaf to root, find nodes where:\n node.x <= 12 < node.x + node.width\n && node.y <= 5 < node.y + node.height\n4. Fire onClick on deepest matching node (bubbles upward)\n```\n\n---\n\n### The Accordion / Multiple Drawers Pattern\n\nFor a list of subagent calls (e.g., each tool use gets its own drawer), Codebuff renders them as a list of `Drawer` components with independent state:\n\n```tsx\nfunction SubagentOutputList({ calls }: { calls: SubagentCall[] }) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\">\n {calls.map((call, i) => (\n <Drawer\n key={call.id}\n title={`${call.tool}(${call.args})`}\n defaultOpen={i === calls.length - 1} // auto-open latest\n >\n <SubagentOutput call={call} />\n </Drawer>\n ))}\n </Box>\n );\n}\n```\n\nEach drawer manages its own `useState` independently — no shared accordion state needed unless you want only-one-open-at-a-time behavior.\n\n---\n\n### Key Implementation Details to Replicate\n\n| Concern | Implementation |\n|---|---|\n| **Mouse enable/disable** | Write `\\x1b[?1000h\\x1b[?1006h` on start; restore `\\x1b[?1000l` on exit |\n| **Parsing mouse events** | Parse SGR format: `\\x1b[<btn;x;ym` / `\\x1b[<btn;x;yM` from `process.stdin` in raw mode |\n| **Hit detection** | After layout pass, walk component tree and check bounding boxes |\n| **Toggle state** | `useState<boolean>` per drawer; flip on click |\n| **Rendering collapse** | Conditionally render children; re-render only repaints changed rows |\n| **Visual indicator** | `▶` / `▼` prefix on the header line |\n| **Scroll safety** | Track terminal scroll offset; OpenTUI uses full-screen alternate buffer (`\\x1b[?1049h`) to avoid scroll |\n\n---\n\n### Stdin Raw Mode + Mouse Escape Parsing\n\nIf you're implementing this without OpenTUI, here's the core stdin parsing loop:\n\n```typescript\nprocess.stdin.setRawMode(true);\nprocess.stdin.resume();\nprocess.stdout.write('\\x1b[?1000h\\x1b[?1006h'); // enable mouse\n\nprocess.stdin.on('data', (buf: Buffer) => {\n const str = buf.toString();\n\n // SGR mouse format: \\x1b[<btn;x;ym (press) or \\x1b[<btn;x;yM (release)\n const mouseMatch = str.match(/^\\x1b\\[<(\\d+);(\\d+);(\\d+)([mM])/);\n if (mouseMatch) {\n const [, btnStr, xStr, yStr, pressRelease] = mouseMatch;\n const btn = parseInt(btnStr);\n const x = parseInt(xStr) - 1; // SGR is 1-indexed\n const y = parseInt(yStr) - 1;\n const isPress = pressRelease === 'M';\n\n if (isPress && btn === 0) {\n handleClick(x, y); // your hit-test function\n }\n return;\n }\n\n // Ctrl+C to exit\n if (str === '\\x03') {\n process.stdout.write('\\x1b[?1000l\\x1b[?1006l'); // disable mouse\n process.exit();\n }\n});\n```\n\n---\n\n### Summary\n\nThe Codebuff collapsible drawer pattern is:\n\n1. **OpenTUI renders React components** to the terminal using ANSI codes, computing a full layout tree with pixel-precise `(x, y, width, height)` for each `<Box>`\n2. **ANSI mouse escape sequences** stream click coordinates from the terminal emulator into `process.stdin`\n3. **OpenTUI's event dispatcher** hit-tests the layout tree and fires `onClick` on the matching `<Box>`\n4. **React `useState`** in the drawer component toggles `isOpen`, triggering a re-render that conditionally includes/excludes children\n5. The **chevron character** (`▶`/`▼`) in the header gives the visual affordance\n\nSince I couldn't directly access the private `CodebuffAI/codebuff` and `anomalyco/opentui` repositories, the exact file paths and API surface may differ slightly — but this is the canonical pattern for this class of terminal UI. If you can share the repos or paste specific files, I can give you exact line-level references.",
|
|
791
|
-
"progress": [
|
|
792
|
-
{
|
|
793
|
-
"message": "I'll explore both repositories in parallel to understand the full picture.",
|
|
794
|
-
"tool_uses": [
|
|
795
|
-
{
|
|
796
|
-
"tool_name": "list_directory_github",
|
|
797
|
-
"status": "error",
|
|
798
|
-
"input": {
|
|
799
|
-
"path": "cli",
|
|
800
|
-
"repository": "https://github.com/CodebuffAI/codebuff"
|
|
801
|
-
},
|
|
802
|
-
"result": {
|
|
803
|
-
"message": "Failed to list directory: 502 Bad Gateway"
|
|
804
|
-
}
|
|
805
|
-
},
|
|
806
|
-
{
|
|
807
|
-
"tool_name": "list_directory_github",
|
|
808
|
-
"status": "error",
|
|
809
|
-
"input": {
|
|
810
|
-
"path": ".",
|
|
811
|
-
"repository": "https://github.com/anomalyco/opentui"
|
|
812
|
-
},
|
|
813
|
-
"result": {
|
|
814
|
-
"message": "Failed to list directory: 502 Bad Gateway"
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
]
|
|
818
|
-
},
|
|
819
|
-
{
|
|
820
|
-
"message": "",
|
|
821
|
-
"tool_uses": [
|
|
822
|
-
{
|
|
823
|
-
"tool_name": "list_repositories",
|
|
824
|
-
"status": "done",
|
|
825
|
-
"input": {
|
|
826
|
-
"organization": "CodebuffAI"
|
|
827
|
-
},
|
|
828
|
-
"result": {
|
|
829
|
-
"repositories": [],
|
|
830
|
-
"totalCount": 0
|
|
831
|
-
}
|
|
832
|
-
},
|
|
833
|
-
{
|
|
834
|
-
"tool_name": "list_repositories",
|
|
835
|
-
"status": "done",
|
|
836
|
-
"input": {
|
|
837
|
-
"organization": "anomalyco"
|
|
838
|
-
},
|
|
839
|
-
"result": {
|
|
840
|
-
"repositories": [],
|
|
841
|
-
"totalCount": 0
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
]
|
|
845
|
-
},
|
|
846
|
-
{
|
|
847
|
-
"message": "",
|
|
848
|
-
"tool_uses": [
|
|
849
|
-
{
|
|
850
|
-
"tool_name": "glob_github",
|
|
851
|
-
"status": "error",
|
|
852
|
-
"input": {
|
|
853
|
-
"filePattern": "**/*",
|
|
854
|
-
"repository": "https://github.com/CodebuffAI/codebuff",
|
|
855
|
-
"limit": 50
|
|
856
|
-
},
|
|
857
|
-
"result": {
|
|
858
|
-
"message": "Failed to fetch file tree: 502 Bad Gateway"
|
|
859
|
-
}
|
|
860
|
-
},
|
|
861
|
-
{
|
|
862
|
-
"tool_name": "glob_github",
|
|
863
|
-
"status": "error",
|
|
864
|
-
"input": {
|
|
865
|
-
"filePattern": "**/*",
|
|
866
|
-
"repository": "https://github.com/anomalyco/opentui",
|
|
867
|
-
"limit": 50
|
|
868
|
-
},
|
|
869
|
-
"result": {
|
|
870
|
-
"message": "Failed to fetch file tree: 502 Bad Gateway"
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
|
-
]
|
|
874
|
-
},
|
|
875
|
-
{
|
|
876
|
-
"message": "",
|
|
877
|
-
"tool_uses": [
|
|
878
|
-
{
|
|
879
|
-
"tool_name": "search_github",
|
|
880
|
-
"status": "error",
|
|
881
|
-
"input": {
|
|
882
|
-
"pattern": "drawer collapsible accordion",
|
|
883
|
-
"repository": "https://github.com/CodebuffAI/codebuff"
|
|
884
|
-
},
|
|
885
|
-
"result": {
|
|
886
|
-
"message": "Failed to search code: 502 Bad Gateway"
|
|
887
|
-
}
|
|
888
|
-
},
|
|
889
|
-
{
|
|
890
|
-
"tool_name": "search_github",
|
|
891
|
-
"status": "error",
|
|
892
|
-
"input": {
|
|
893
|
-
"pattern": "onClick mouse click terminal",
|
|
894
|
-
"repository": "https://github.com/anomalyco/opentui"
|
|
895
|
-
},
|
|
896
|
-
"result": {
|
|
897
|
-
"message": "Failed to search code: 502 Bad Gateway"
|
|
898
|
-
}
|
|
899
|
-
}
|
|
900
|
-
]
|
|
901
|
-
},
|
|
902
|
-
{
|
|
903
|
-
"message": "It looks like both repositories may be private or inaccessible. Let me try different approaches to find them.",
|
|
904
|
-
"tool_uses": [
|
|
905
|
-
{
|
|
906
|
-
"tool_name": "list_repositories",
|
|
907
|
-
"status": "done",
|
|
908
|
-
"input": {
|
|
909
|
-
"pattern": "codebuff"
|
|
910
|
-
},
|
|
911
|
-
"result": {
|
|
912
|
-
"repositories": [],
|
|
913
|
-
"totalCount": 0
|
|
914
|
-
}
|
|
915
|
-
},
|
|
916
|
-
{
|
|
917
|
-
"tool_name": "list_repositories",
|
|
918
|
-
"status": "done",
|
|
919
|
-
"input": {
|
|
920
|
-
"pattern": "opentui"
|
|
921
|
-
},
|
|
922
|
-
"result": {
|
|
923
|
-
"repositories": [],
|
|
924
|
-
"totalCount": 0
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
]
|
|
928
|
-
},
|
|
929
|
-
{
|
|
930
|
-
"message": "",
|
|
931
|
-
"tool_uses": [
|
|
932
|
-
{
|
|
933
|
-
"tool_name": "commit_search",
|
|
934
|
-
"status": "error",
|
|
935
|
-
"input": {
|
|
936
|
-
"repository": "https://github.com/CodebuffAI/codebuff",
|
|
937
|
-
"query": "drawer collapsible",
|
|
938
|
-
"limit": 5
|
|
939
|
-
},
|
|
940
|
-
"result": {
|
|
941
|
-
"message": "Failed to search commits: 502 Bad Gateway"
|
|
942
|
-
}
|
|
943
|
-
},
|
|
944
|
-
{
|
|
945
|
-
"tool_name": "commit_search",
|
|
946
|
-
"status": "error",
|
|
947
|
-
"input": {
|
|
948
|
-
"repository": "https://github.com/anomalyco/opentui",
|
|
949
|
-
"query": "mouse click",
|
|
950
|
-
"limit": 5
|
|
951
|
-
},
|
|
952
|
-
"result": {
|
|
953
|
-
"message": "Failed to search commits: 502 Bad Gateway"
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
]
|
|
957
|
-
},
|
|
958
|
-
{
|
|
959
|
-
"message": "Both repositories are inaccessible (private or don't exist publicly). However, based on the context you've provided — Codebuff uses OpenTUI, a React-based terminal framework — I can give you a thorough explanation of how this pattern works, synthesizing what's known about OpenTUI and the Codebuff CLI architecture.\n\n---\n\n## How Codebuff Implements Clickable Collapsible Drawers in the Terminal\n\n### The Stack\n\n```\nCodebuff CLI\n └── React components (TSX)\n └── OpenTUI renderer (anomalyco/opentui)\n └── Ink-style terminal rendering + ANSI mouse escape codes\n```\n\nCodebuff's CLI is built on **OpenTUI**, which is a React-based terminal UI framework similar to [Ink](https://github.com/vadimdemedes/ink) but with first-class **mouse support**. The collapsible drawer pattern works by combining:\n\n1. **Mouse tracking escape codes** (ANSI `\\x1b[?1000h` / `?1006h`) to detect click coordinates in the terminal\n2. **Bounding-box hit detection** to map click `(x, y)` → component\n3. **React state** (`useState`) to toggle open/closed\n\n---\n\n### OpenTUI: How Mouse/Click Support Works\n\nOpenTUI enables terminal mouse support by writing the ANSI mouse tracking escape sequence when the app starts:\n\n```typescript\n// OpenTUI renderer initialization\nprocess.stdout.write('\\x1b[?1000h'); // Enable mouse button events\nprocess.stdout.write('\\x1b[?1006h'); // Enable SGR mouse mode (supports larger terminals)\n```\n\nThen it listens on `process.stdin` for mouse event escape sequences, which look like:\n\n```\n\\x1b[<BUTTON;X;Ym (mouse press at col X, row Y)\n\\x1b[<BUTTON;X;YM (mouse release at col X, row Y)\n```\n\nOpenTUI parses these and dispatches them to components. Each rendered component registers its **bounding box** (top-left corner + width/height) with the renderer. On a click event, the renderer does hit-testing — walking the component tree to find which component's bounding box contains `(x, y)` — and fires the `onClick` handler of the deepest matching component.\n\nThe core pattern in OpenTUI components is:\n\n```tsx\n// OpenTUI exposes an onClick prop (analogous to React DOM's onClick)\n<Box onClick={() => setExpanded(!expanded)}>\n ▶ Subagent: search_files\n</Box>\n```\n\n---\n\n### The Collapsible Drawer Component Pattern\n\nThe drawer/collapsible component in Codebuff's CLI follows this structure:\n\n```tsx\n// Conceptual reconstruction of Codebuff's collapsible subagent drawer\nimport React, { useState } from 'react';\nimport { Box, Text } from 'opentui'; // OpenTUI's primitives\n\ninterface DrawerProps {\n title: string;\n children: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function Drawer({ title, children, defaultOpen = false }: DrawerProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n return (\n <Box flexDirection=\"column\">\n {/* Clickable header row */}\n <Box onClick={() => setIsOpen(o => !o)}>\n <Text color=\"cyan\">{isOpen ? '▼' : '▶'} </Text>\n <Text bold>{title}</Text>\n </Box>\n\n {/* Conditionally rendered body */}\n {isOpen && (\n <Box flexDirection=\"column\" paddingLeft={2}>\n {children}\n </Box>\n )}\n </Box>\n );\n}\n```\n\nUsage for subagent output:\n\n```tsx\n<Drawer title=\"Subagent: read_file(src/auth.ts)\" defaultOpen={false}>\n <Text dimColor>{subagentOutput}</Text>\n</Drawer>\n```\n\n---\n\n### How OpenTUI Maps Clicks to Components\n\nOpenTUI's renderer maintains a **layout tree** after each render cycle (similar to how browsers have a render tree). Each `<Box>` knows its rendered position because OpenTUI uses a Yoga-based (or custom) flexbox layout engine to compute positions before painting to the terminal.\n\n```\nRender cycle:\n1. React reconciler produces a virtual tree\n2. OpenTUI layout engine walks the tree, assigns (x, y, width, height) to every node\n3. OpenTUI painter writes ANSI escape codes to stdout\n4. OpenTUI stores the layout tree in memory\n\nClick event:\n1. stdin emits \\x1b[<0;12;5m (left button, col 12, row 5)\n2. OpenTUI parses → { button: 0, x: 12, y: 5, type: 'press' }\n3. Walk layout tree from leaf to root, find nodes where:\n node.x <= 12 < node.x + node.width\n && node.y <= 5 < node.y + node.height\n4. Fire onClick on deepest matching node (bubbles upward)\n```\n\n---\n\n### The Accordion / Multiple Drawers Pattern\n\nFor a list of subagent calls (e.g., each tool use gets its own drawer), Codebuff renders them as a list of `Drawer` components with independent state:\n\n```tsx\nfunction SubagentOutputList({ calls }: { calls: SubagentCall[] }) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\">\n {calls.map((call, i) => (\n <Drawer\n key={call.id}\n title={`${call.tool}(${call.args})`}\n defaultOpen={i === calls.length - 1} // auto-open latest\n >\n <SubagentOutput call={call} />\n </Drawer>\n ))}\n </Box>\n );\n}\n```\n\nEach drawer manages its own `useState` independently — no shared accordion state needed unless you want only-one-open-at-a-time behavior.\n\n---\n\n### Key Implementation Details to Replicate\n\n| Concern | Implementation |\n|---|---|\n| **Mouse enable/disable** | Write `\\x1b[?1000h\\x1b[?1006h` on start; restore `\\x1b[?1000l` on exit |\n| **Parsing mouse events** | Parse SGR format: `\\x1b[<btn;x;ym` / `\\x1b[<btn;x;yM` from `process.stdin` in raw mode |\n| **Hit detection** | After layout pass, walk component tree and check bounding boxes |\n| **Toggle state** | `useState<boolean>` per drawer; flip on click |\n| **Rendering collapse** | Conditionally render children; re-render only repaints changed rows |\n| **Visual indicator** | `▶` / `▼` prefix on the header line |\n| **Scroll safety** | Track terminal scroll offset; OpenTUI uses full-screen alternate buffer (`\\x1b[?1049h`) to avoid scroll |\n\n---\n\n### Stdin Raw Mode + Mouse Escape Parsing\n\nIf you're implementing this without OpenTUI, here's the core stdin parsing loop:\n\n```typescript\nprocess.stdin.setRawMode(true);\nprocess.stdin.resume();\nprocess.stdout.write('\\x1b[?1000h\\x1b[?1006h'); // enable mouse\n\nprocess.stdin.on('data', (buf: Buffer) => {\n const str = buf.toString();\n\n // SGR mouse format: \\x1b[<btn;x;ym (press) or \\x1b[<btn;x;yM (release)\n const mouseMatch = str.match(/^\\x1b\\[<(\\d+);(\\d+);(\\d+)([mM])/);\n if (mouseMatch) {\n const [, btnStr, xStr, yStr, pressRelease] = mouseMatch;\n const btn = parseInt(btnStr);\n const x = parseInt(xStr) - 1; // SGR is 1-indexed\n const y = parseInt(yStr) - 1;\n const isPress = pressRelease === 'M';\n\n if (isPress && btn === 0) {\n handleClick(x, y); // your hit-test function\n }\n return;\n }\n\n // Ctrl+C to exit\n if (str === '\\x03') {\n process.stdout.write('\\x1b[?1000l\\x1b[?1006l'); // disable mouse\n process.exit();\n }\n});\n```\n\n---\n\n### Summary\n\nThe Codebuff collapsible drawer pattern is:\n\n1. **OpenTUI renders React components** to the terminal using ANSI codes, computing a full layout tree with pixel-precise `(x, y, width, height)` for each `<Box>`\n2. **ANSI mouse escape sequences** stream click coordinates from the terminal emulator into `process.stdin`\n3. **OpenTUI's event dispatcher** hit-tests the layout tree and fires `onClick` on the matching `<Box>`\n4. **React `useState`** in the drawer component toggles `isOpen`, triggering a re-render that conditionally includes/excludes children\n5. The **chevron character** (`▶`/`▼`) in the header gives the visual affordance\n\nSince I couldn't directly access the private `CodebuffAI/codebuff` and `anomalyco/opentui` repositories, the exact file paths and API surface may differ slightly — but this is the canonical pattern for this class of terminal UI. If you can share the repos or paste specific files, I can give you exact line-level references.",
|
|
960
|
-
"tool_uses": []
|
|
961
|
-
}
|
|
962
|
-
],
|
|
963
|
-
"~debug": {
|
|
964
|
-
"inferences": [
|
|
965
|
-
{
|
|
966
|
-
"inferenceTimeMs": 3279.4275170000037,
|
|
967
|
-
"usage": {
|
|
968
|
-
"maxInputTokens": 0,
|
|
969
|
-
"inputTokens": 0,
|
|
970
|
-
"outputTokens": 0,
|
|
971
|
-
"cacheCreationInputTokens": null,
|
|
972
|
-
"cacheReadInputTokens": null,
|
|
973
|
-
"totalInputTokens": 0,
|
|
974
|
-
"timestamp": "2026-02-26T03:37:00.403Z"
|
|
975
|
-
}
|
|
976
|
-
},
|
|
977
|
-
{
|
|
978
|
-
"inferenceTimeMs": 1647.1312730000354,
|
|
979
|
-
"usage": {
|
|
980
|
-
"maxInputTokens": 0,
|
|
981
|
-
"inputTokens": 0,
|
|
982
|
-
"outputTokens": 0,
|
|
983
|
-
"cacheCreationInputTokens": null,
|
|
984
|
-
"cacheReadInputTokens": null,
|
|
985
|
-
"totalInputTokens": 0,
|
|
986
|
-
"timestamp": "2026-02-26T03:37:02.631Z"
|
|
987
|
-
}
|
|
988
|
-
},
|
|
989
|
-
{
|
|
990
|
-
"inferenceTimeMs": 2631.658705000067,
|
|
991
|
-
"usage": {
|
|
992
|
-
"maxInputTokens": 0,
|
|
993
|
-
"inputTokens": 0,
|
|
994
|
-
"outputTokens": 0,
|
|
995
|
-
"cacheCreationInputTokens": null,
|
|
996
|
-
"cacheReadInputTokens": null,
|
|
997
|
-
"totalInputTokens": 0,
|
|
998
|
-
"timestamp": "2026-02-26T03:37:05.856Z"
|
|
999
|
-
}
|
|
1000
|
-
},
|
|
1001
|
-
{
|
|
1002
|
-
"inferenceTimeMs": 2382.984793999931,
|
|
1003
|
-
"usage": {
|
|
1004
|
-
"maxInputTokens": 0,
|
|
1005
|
-
"inputTokens": 0,
|
|
1006
|
-
"outputTokens": 0,
|
|
1007
|
-
"cacheCreationInputTokens": null,
|
|
1008
|
-
"cacheReadInputTokens": null,
|
|
1009
|
-
"totalInputTokens": 0,
|
|
1010
|
-
"timestamp": "2026-02-26T03:37:08.626Z"
|
|
1011
|
-
}
|
|
1012
|
-
},
|
|
1013
|
-
{
|
|
1014
|
-
"inferenceTimeMs": 2524.580014999956,
|
|
1015
|
-
"usage": {
|
|
1016
|
-
"maxInputTokens": 0,
|
|
1017
|
-
"inputTokens": 0,
|
|
1018
|
-
"outputTokens": 0,
|
|
1019
|
-
"cacheCreationInputTokens": null,
|
|
1020
|
-
"cacheReadInputTokens": null,
|
|
1021
|
-
"totalInputTokens": 0,
|
|
1022
|
-
"timestamp": "2026-02-26T03:37:11.439Z"
|
|
1023
|
-
}
|
|
1024
|
-
},
|
|
1025
|
-
{
|
|
1026
|
-
"inferenceTimeMs": 2541.477353999857,
|
|
1027
|
-
"usage": {
|
|
1028
|
-
"maxInputTokens": 0,
|
|
1029
|
-
"inputTokens": 0,
|
|
1030
|
-
"outputTokens": 0,
|
|
1031
|
-
"cacheCreationInputTokens": null,
|
|
1032
|
-
"cacheReadInputTokens": null,
|
|
1033
|
-
"totalInputTokens": 0,
|
|
1034
|
-
"timestamp": "2026-02-26T03:37:14.753Z"
|
|
1035
|
-
}
|
|
1036
|
-
},
|
|
1037
|
-
{
|
|
1038
|
-
"inferenceTimeMs": 43066.70214399998,
|
|
1039
|
-
"usage": {
|
|
1040
|
-
"maxInputTokens": 0,
|
|
1041
|
-
"inputTokens": 0,
|
|
1042
|
-
"outputTokens": 0,
|
|
1043
|
-
"cacheCreationInputTokens": null,
|
|
1044
|
-
"cacheReadInputTokens": null,
|
|
1045
|
-
"totalInputTokens": 0,
|
|
1046
|
-
"timestamp": "2026-02-26T03:37:58.119Z"
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
]
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
]
|
|
1054
|
-
},
|
|
1055
|
-
{
|
|
1056
|
-
"role": "assistant",
|
|
1057
|
-
"messageId": 21,
|
|
1058
|
-
"content": [
|
|
1059
|
-
{
|
|
1060
|
-
"type": "thinking",
|
|
1061
|
-
"thinking": "Now I have a good understanding of how Codebuff implements clickable drawers using OpenTUI. However, for the user's Apex CLI app, we don't want to introduce a whole React-based terminal framework. Instead, we need to implement a simpler version using ANSI mouse escape sequences directly.\n\nLet me plan the implementation:\n\n1. **Enable mouse tracking** in the terminal using ANSI escape sequences\n2. **Track the positions of clickable elements** (drawer headers) as they're rendered\n3. **Parse mouse click events** from stdin\n4. **Toggle drawer state** when a drawer header is clicked\n5. **Re-render the drawer** (expand/collapse the output)\n\n\nSince this is a traditional readline-based CLI rather than a full-screen TUI, I can't do complete screen re-rendering. Instead, I'll enable SGR mouse mode on startup and render tool output as collapsible sections with clickable headers, tracking their positions so clicks can toggle the drawer state. the line number/position of each drawer header\n4. **On click events**, check if the click is on a drawer header, and if so, toggle it\n5. **Rewrite the relevant lines** using ANSI cursor positioning\n\nThis gets complicated fast with a scrolling terminal—once content scrolls past, modifying it becomes nearly impossible.\n\nA simpler approach would leverage the alternate screen buffer or track drawer states and re-render the whole section. But actually, the most practical solution for this CLI is to enable mouse tracking, show collapsed headers like `▶ [Tool] details...`, track which row each drawer is on, and toggle them by saving the cursor position, moving to that row, re-rendering the drawer (expanding or collapsing as needed), then restoring the cursor.\n\nThe real constraint here is that this app uses `readline` for input and `console.log` for output, so everything scrolls—once a line moves off screen, I can't go back and edit it. The best compromise is using ANSI escape codes to save and restore cursor position while rewriting specific lines. lines\n- Keep track of drawer states and their screen positions\n- When a click is detected on a drawer header, rewrite the output\n\nLet me look at this from a different angle. Instead of trying to retroactively modify already-printed output, I could:\n\n1. When a tool starts, print the header with `▶`\n2. When the tool finishes, save the result but only show the header (collapsed by default)\n3. The user can click the header to expand it (show the output) or collapse it\n4. Use ANSI escape sequences to insert/remove lines\n\nFor tracking positions, I need to know the current cursor row. I can track this by counting newlines.\n\nLet me think about what's actually feasible here:\n\nThe most practical approach for this codebase is to:\n\n1. Add mouse event parsing to handle clicks\n2. When rendering tool output during subagent runs, render it as a collapsible section\n3. Track drawer elements with their positions\n4. On click, toggle expansion\n\nI'll need to build out three main pieces: a mouse tracking module that enables SGR mouse mode and parses click events against registered regions, a drawer rendering system in the UI layer that handles collapsed/expanded states with toggle indicators, and integration into the agent to wrap tool results in these interactive drawers and handle the toggle callbacks.\n\nThe real challenge is managing terminal re-rendering when content needs to change. I can use ANSI escape sequences to save/restore cursor position and move around the viewport, but the key limitation is that I can only modify what's currently visible on screen—anything that's scrolled into the scrollback buffer is locked in place. So I'll focus on keeping drawers visible and only re-rendering the sections that are still in the viewport.\n\nMy approach is to track each drawer's position and state, then when one gets toggled, use ANSI sequences to insert or delete lines below its header to expand or collapse it. I'll split this into separate modules: one for handling mouse input and detecting clicks on drawer headers, another for managing drawer state and rendering, and then integrate it into the agent to wrap tool outputs in these interactive drawers.\n\nWriting mouse module... Finishing the mouse handler logic to detect left clicks within registered regions and trigger their callbacks, then exporting the module functions. But I'm realizing there's a fundamental issue—readline consumes stdin directly, so I need to rethink how to intercept mouse events before readline processes them.\n\nThe key insight is that multiple data listeners can coexist on stdin in Node.js, but readline will still try to interpret the mouse escape sequences as regular input. I need to set stdin to raw mode manually and listen for data events before readline gets them, then filter out mouse events and pass everything else through.\n\nActually, this approach is getting complicated because I'm trying to layer mouse event handling on top of readline. Let me step back and think about what's actually needed here—the user wants clickable regions in the terminal, which means I need to handle raw mouse input and track drawable areas, not try to patch readline. when subagents are running, click on a drawer to open/close it.\n\n**Simplest practical approach**: Use ANSI escape sequences that modern terminals interpret for mouse interactions. The key insight is that we can hook into stdin data events to detect mouse clicks alongside readline. Here's the trick:\n\n1. Enable mouse reporting via ANSI escapes\n2. Use `process.stdin.on('data', callback)` - this fires BEFORE readline processes the data\n3. In the callback, check if the data is a mouse event\n4. If it is, handle it and prevent readline from seeing it (by removing the listener temporarily)\n\nActually, in Node.js, you CAN'T prevent readline from seeing the data once it's flowing through stdin. The better approach is to:\n\n1. Not use readline during agent processing (when tool outputs are showing)\n2. During processing, use raw mode directly to handle mouse events\n3. When processing finishes, switch back to readline for user input\n\nLooking at the current code flow, during agent processing the readline is waiting for the callback to complete while stdin remains connected to it. The simplest practical approach for this codebase is to enable mouse mode and add a data listener without fighting readline—the key is just letting both coexist and handling mouse events as they come through. is actually:\n1. `askQuestion()` → calls `rl.question(promptStr, callback)`\n2. User types input and presses Enter\n3. Callback fires with the answer → calls `handleUserInput(input, ...)`\n4. Inside `handleUserInput`, agent loop runs (async)\n5. When `handleUserInput` resolves, control returns to the callback\n6. Callback calls `askQuestion()` again\n\nSo during step 4, readline is NOT actively waiting for input. This means we can safely pause readline, enable mouse mode on stdin, handle mouse events directly, and restore everything when processing ends. But I need to make sure Ctrl+C still works to cancel the operation even while readline is paused.\n\nI'll structure this with separate modules for mouse event parsing and drawer state management, then integrate them into the agent and UI layers. For rendering, I'll use terminal escape sequences to move the cursor and manipulate lines when toggling drawers open and closed.\n\nThe key constraint is that I can only modify drawers currently visible on screen—once they scroll off, I can't toggle them anymore. To track drawer positions, I'll query the cursor position, count newlines as output is rendered, and store the screen row for each drawer header.\n\nActually, this is getting complicated with cursor tracking and position management. Let me step back and try a simpler approach instead.\n\nI'll track each drawer's offset relative to the current cursor position rather than using absolute screen coordinates. When toggling a drawer, I calculate how many lines up from the current position it sits, move the cursor there, insert or delete the content lines, then move back and update the offsets for any drawers below it. This is much more straightforward to implement.\n\nNow I'm planning out the actual implementation, starting with the mouse event handling module.\n\nSetting up the DrawerManager class...\n\nActually, I should reconsider the approach here. The real challenge is figuring out where each drawer header appears on screen so clicks map correctly. In a scrolling terminal, absolute positions shift constantly. I think the simpler solution is to work with viewport-relative coordinates instead—both the mouse click positions and cursor queries use the same coordinate space, so I can query the current cursor position with a control sequence and calculate offsets from there.\n\nThe tricky part is handling scrolling: every time content wraps to a new line at the bottom, everything shifts up. Rather than trying to track all that, I could just query the cursor position when rendering each drawer header to record its viewport row, then keep track of how many lines have been output since then to update positions as needed.\n\nActually, I'm overthinking this. Codebuff and OpenTUI use an alternate screen buffer that keeps cursor positions stable, but switching to that would require reworking how all the console output works. For what the user actually needs, I should just go with the simplest approach: parse SGR mouse events from stdin, track which drawer each click corresponds to based on its viewport row, and compute the drawer position from the stored line counts.\n\nWhen a drawer opens or closes, I'll move the cursor to the right spot, insert or delete the content lines, then reposition the cursor back to the end. I'm going to start implementing this by creating separate modules for mouse handling and drawer management.\n\nWriting mouse event handling... Building drawer management system... Writing the drawer toggle logic... I'm realizing the cursor manipulation approach is getting unwieldy, so let me think about this differently using terminal operations. The key constraint is that ANSI commands only work within the visible viewport—anything that's scrolled into the scrollback buffer is unreachable. For drawers still visible on screen, I can save the cursor position, move to the line below the header, insert blank lines, write the content, and restore the cursor.\n\nBut there's a problem: when I insert lines, everything below shifts down, which invalidates my saved cursor position. Instead, I should query the current cursor row, calculate the header's position relative to it, move to just below the header, insert the lines, write the content, then move the cursor back down by the number of lines I inserted. The same logic applies in reverse for closing—find where the content starts, delete those lines, and adjust the cursor position accordingly.\n\nThe challenge is that I need absolute viewport coordinates using `\\x1b[6n` to query the cursor position, but the terminal responds asynchronously through stdin, which adds complexity. Let me pivot to a simpler approach: instead of manipulating individual lines, I'll maintain a list of all drawer states and re-render everything from the first drawer onward whenever one toggles.\n\nFor the user's specific case with agent tool output, the drawers will naturally sit at the bottom of the visible content as new results accumulate, making them clickable. I'll implement cursor position querying with a synchronous wrapper that writes the request and reads the response from stdin, then use absolute positioning to redraw the affected drawers.\n\nSetting up the core modules now...\n\nActually, I need to figure out how to reliably get the cursor position in Node.js. When I send the query escape sequence, the terminal responds on stdin with the row and column. I'm working through a function that sets raw mode, sends the query, listens for the response pattern, and cleans up the listeners afterward.\n\nBut there's a conflict—readline already has stdin during processing, so this approach won't work cleanly. Instead, I'll track the cursor position myself by counting newlines in the output I generate. I'll grab the terminal dimensions upfront and maintain a virtual cursor row as I write, which is much simpler and avoids the stdin contention issue. Writing mouse and drawer modules... Finishing up the mouse event detection helper, then exporting all the mouse control functions. Now I'm thinking through how the drawers module should track positions and handle toggling, and I need to understand what the current output format looks like during tool execution—there's an assistant header, a progress indicator that gets overwritten, the final tool result with timing, and a preview of the first few lines from the result.\n\nThe user wants these result previews to be collapsible, so the tool result header line gets a toggle arrow that expands or collapses the content below it, making the interface much cleaner and less cluttered.\n\nFor implementation, I need to track the drawer state for each result along with its content, then handle click events on the header lines to toggle visibility. When a user clicks a header, I'll identify which drawer was clicked by its position and flip its open/closed state accordingly. opening: insert content lines below the header\n c. If closing: delete content lines below the header\n\nFor figuring out which drawer was clicked, I need to know the viewport row of each drawer header. I'll track this by querying cursor position right before printing the header and storing that row with the drawer.\n\nActually, let me simplify this. I'll keep a counter of lines from the bottom for each drawer, incrementing it whenever new output is printed. When a click happens, I can use the click row and the relative distances between drawers to figure out which one was clicked.\n\nBut I need the current viewport row to map the click position. Let me just query the cursor position at the start and track from there as I print content.\n\nSetting up cursor tracking... I'm realizing the scroll offset approach gets complicated because I need to track how much content has scrolled off the top. Let me try a different angle: instead of pre-calculating row positions, I can query the cursor position when a click happens and work backwards from there to figure out which drawer was clicked based on how many lines back from the current cursor each drawer sits.\n\nThe challenge is that `getCursorPosition` is async and needs stdin access, which conflicts with readline's control of input. During normal processing, readline isn't actively prompting, but stdin might still be bound to it, so I need to find a way around that constraint.\n\nInstead of relying on async cursor queries, I'll track the terminal state manually with a simple class that keeps count of output lines and calculates viewport positions based on what's been written.\n\nDefining the tracker class... I need to figure out how to get the initial cursor position when readline is active, since setting raw mode externally might interfere with readline's own handling. Let me think through the readline API to see if there's a way to query the cursor position without disrupting the existing setup. I can pause readline during processing and handle stdin directly with raw mode enabled, so mouse events get intercepted by my listener before readline tries to interpret them as keyboard input. Then I'll resume readline when processing is done.\n\nWriting the event handler... I'm realizing that closing readline during processing would trigger its close handler, which would try to recreate it—creating a circular problem. I need to check whether the close handler has logic to prevent this recursion, or if I should handle the lifecycle differently to avoid interfering with readline's state management during mouse input processing. I need to handle stdin properly when readline closes—I'll resume it and enable raw mode so I can capture mouse events and Ctrl+C directly. Then at the end of processing, I'll clean up my listener and let the existing logic recreate readline. Now I'm ready to implement this with three files: a mouse event parser, drawer state management, and modifications to the agent to wire everything together.\n\nActually, I'm realizing the line-counting approach gets messy since I'd need to wrap every output call throughout the processing loop. Instead, I'll query the cursor position directly when a click happens—since I'm already in raw mode during processing, that's cleaner and avoids invasive instrumentation everywhere. the `\\x1b[6n` query.\n\nHere's the flow for handling a click:\n1. Mouse click comes in at viewport `(clickCol, clickRow)`\n2. I query cursor position: `\\x1b[6n` → get current viewport row `curRow`\n3. For each drawer, I know `drawer.distanceFromEnd` (lines between this drawer's header and the end of output)\n4. Drawer's viewport row = `curRow - drawer.distanceFromEnd`\n5. If `clickRow == drawer viewport row` → toggle that drawer\n\nFor `drawer.distanceFromEnd`, I increment it by 1 for each newline output after the drawer was created. This requires tracking output...\n\nActually, let me use a completely different approach. I'll use getCursorPosition synchronously right before printing the drawer header.\n\nThe issue is that getCursorPosition is inherently async since it needs to query the terminal and wait for a response. So instead, I'll track each drawer's screen row position directly: I'll maintain a running `currentScreenRow` counter that starts with the initial cursor position, increments with each line of output, and accounts for scrolling when content exceeds the terminal height. Then on click, I just match the click row against each drawer's stored header row, adjusting for any scroll that's occurred. I'm switching to tracking absolute line numbers instead—total newlines output since the start—which makes it easier to compute viewport positions. When a drawer header prints, I'll store its absolute line number, and then on click I can calculate whether it's visible by comparing its computed viewport row against the click position.\n\nTo get the starting cursor position, I need to query it asynchronously using the escape sequence, which means closing readline temporarily so stdin is available for the raw response. I'm implementing the DrawerManager class now...\n\nDefining the drawer manager... Still writing drawer logic... Writing the drawer open logic... Writing the drawer manager class...\n\nActually, I'm realizing this approach with absolute and viewport row calculations is getting unwieldy with all the edge cases around scrolling and line insertion. I should step back and use a much simpler strategy instead.\n\nThe core idea is to wrap each tool result in a drawer with a header and content, then use ANSI escape sequences to save and restore cursor position. I'll track drawers by counting how many lines have been written below them, and when toggling a drawer, I can move the cursor up to that position and rewrite it. For opening, I write the header then the content and move back. For closing, I write the header then blank lines to clear the content and move back.\n\nBut there's a fundamental problem here — when I insert or remove lines, the terminal now has a different number of lines, so moving the cursor back to a fixed position doesn't work anymore. I need to rethink this so that toggling a drawer doesn't actually change the total line count in the terminal.\n\nThe most straightforward solution is to clear everything from the toggled drawer down to the current cursor position and rewrite it all. It's a bit heavy-handed, but it's reliable. If there are multiple drawers stacked, I clear from the one being toggled all the way down and rewrite everything below it, preserving the state of any other drawers.\n\nBuilding the drawer manager... Writing the toggle logic... Finishing the loop to count lines and find which drawer was clicked, then realizing the logic for determining if a click landed on a drawer header needs rethinking—I should approach this by calculating the viewport position differently. I need to trace through the logic more carefully. The function walks backward from the end of the items list, accumulating a line count that represents distance from the bottom. When that count matches the lines-from-cursor value, I've found the target item. If it's a drawer header, I return its ID; otherwise I keep searching. Let me work through a concrete example to verify this handles open drawers and their content correctly. I'm continuing to trace through the algorithm to verify it handles clicks at different positions correctly. When the click lands on content within an open drawer, I need to check whether the backward walk accumulates the right line count before reaching that drawer's header. Still refining the logic...\n\nI need to reconsider how line offsets work from the cursor position. After console output, the cursor sits on a fresh line below everything that was printed, so the last output line is one position up from there. Let me retrace through the example to verify my counting is correct—I'm mapping each item and its content lines to their actual positions, then checking whether a click at a given offset matches a header, content, or regular line. I'm walking through the logic to verify each click offset maps correctly—the open drawer contributes its content lines to the count, then its header gets its own offset, and I need to make sure the algorithm properly distinguishes between clicking drawer headers versus their content or regular lines. I'm verifying the logic works correctly for both content and header clicks, and now I need to implement the toggle behavior—counting lines from the toggled drawer to the end, moving the cursor up, clearing the screen, updating the state, and re-rendering from that point onward.\n\nThe `\\x1b[J` escape sequence will clear any artifacts below the re-rendered content, so that should handle cases where the drawer closes and leaves old content behind. For tracking the cursor position during mouse click detection, I'll need to maintain that state since I can't easily query it while processing raw stdin input.\n\nWriting the implementation... I need to handle the asynchronous nature of querying cursor position during click events—I can write the escape sequence to get the cursor position and parse the response from stdin, though this adds a small delay. Alternatively, I could track the cursor's viewport row myself throughout the session, updating it as I render content, which would let me compute the line offset from clicks without the extra roundtrip.\n\nThe cleaner approach is to query the cursor position once at startup, then track it by counting newlines through the DrawerManager as I output content. This way, when a click arrives, I can immediately calculate how many lines up from the cursor it occurred. The key constraint is routing all output during processing through the DrawerManager so the tracking stays accurate.\n\nLooking at what actually gets output during processing—the spinner, tool streaming, results, and assistant messages—wrapping everything through DrawerManager feels too invasive. I'll switch to querying the cursor position directly on click instead, which is simpler and more reliable.\n\nSo the flow becomes: close readline and enter raw mode with mouse enabled at the start, let output happen normally, display tool results through DrawerManager to track line counts, then when a click comes in, query the current cursor position to figure out where the click landed relative to the viewport.\n\nSetting up the cursor position handler... Writing the click handler...\n\nNow I'm thinking through the timing and concurrency issues—the cursor position query should be fast enough that other async operations like API calls and spinner output won't interfere, since the query writes to stdout and reads from stdin independently of other output streams.\n\nFor the implementation, I need to handle the readline lifecycle carefully: closing the readline instance at the start of processing, setting up raw mode and mouse tracking, doing the work, then cleaning up and letting the existing code recreate the readline instance.\n\nThe challenge is that `handleUserInput` doesn't have direct access to the `rl` object—it only receives helper functions like `setupInputLoop` and `askQuestion`. I could pass `rl` directly, but I'm realizing the real issue is simpler: readline isn't actively listening during processing since we're not in a `rl.question` call at that moment.\n\nHowever, mouse escape sequences would still get buffered by readline's internal state, and when the next `askQuestion()` fires, that garbage data would corrupt the input. So I need to either close readline during processing or shield it from those events. The cleanest approach is to pass a close/reopen mechanism to `handleUserInput`, and the existing code already handles this—when `rl.close()` is called while `isProcessing` is true, it sets a flag and recreates readline afterward.\n\nModifying the interface to pass `rl` directly to `handleUserInput` so it can close readline at the start of processing...\n\nActually, I realize `rl.close()` removes all listeners and pauses stdin, so I'll need to resume it and attach my own data handler for raw mode input, then clean up and let `setupInputLoop()` recreate readline when done. Writing the mouse handler module... Finishing up the parser functions and exporting the mouse control module, then moving into the drawing utilities.\n\nNow I'm defining a DrawManager class that tracks both text output and collapsible drawer sections, assigning each drawer a unique ID and storing metadata about the content lines for position calculations.\n\nContinuing with the rendering logic...\n\nI'm implementing methods to count the total rendered lines across all items and find which drawer is at a specific offset from the bottom of the output. Continuing the toggle logic...\n\nNow I'm calculating how many lines need to be redrawn from this drawer onward, moving the cursor back up to the drawer's start position, clearing everything below it, toggling the drawer's open state, and then re-rendering all items from that point to the end of the list. Finishing the timeout logic for the cursor position request, then handling click events by getting the cursor position and toggling the appropriate drawer based on the offset. I'm also adding a reset method to clear the drawer state, and now I need to integrate this DrawerManager into the agent to handle mouse interactions during processing.\n\nThe tricky part is managing the interaction between DrawerManager's line tracking and other output sources like ora spinners and streaming responses. I'm realizing that tool result output is what should be wrapped in drawers, but spinners and streaming don't go through DrawerManager, which could throw off position calculations if untracked output appears between drawers. I need to think through the output sequence during tool execution to figure out what actually gets tracked versus what doesn't. Adding a method to track external output lines...\n\nNow I'm mapping out all the places where output happens during processing—from the assistant header and thinking spinner through to streaming content, tool calls, and result previews—so I can account for each one when calculating drawer positions.\n\nThe key insight is that tool results and diffs are the main candidates for drawer wrapping, and the cleanest approach would be to wrap each tool result in a drawer right after it completes, rather than printing it directly to the terminal.\n\nLooking at the actual result display logic, I can see it handles different cases—diffs for Edit/Patch operations, truncated previews for long outputs, and full results for shorter ones. I'll replace all of this with drawer creation, using the status line as the drawer header with a toggle icon, and putting the actual result content inside the drawer body. Building the drawer logic... I see how the escape sequences work together—the carriage return moves back to the line start, the clear code wipes everything after that point, and then the drawer header renders on that same clean line. So the progress indicator gets replaced seamlessly by the drawer header, which includes the tool result and a toggle icon. Let me trace through the full output sequence: the tool call name streams in first, then the progress line overwrites itself as execution happens, and finally that line transforms into the drawer header showing the result with timing information.\n\nNow I'm looking at the streaming code that outputs the tool call name during API streaming, and I need to understand how it integrates with the drawer rendering that happens after execution completes. I'm tracing through the output flow step by step. The tool call name gets written with a newline prefix, then the progress indicator overwrites that line with a carriage return. When the tool completes, the status line replaces it again and adds a newline to move forward. For the drawer integration, I'd replace the status line with the drawer header and move the result preview into the drawer content instead. Adjusting the indentation so the drawer header includes the 4-space prefix, then the drawer manager handles rendering the chevron and content with consistent spacing. Finishing the _renderDrawer function...\n\nNow I'm realizing there's a separate issue with tracking external output that happens outside the DrawerManager—like streaming text between tool calls, tool call names, and the newlines that get written directly to stdout. I need to figure out where in the agent loop to add calls that track these external lines so the drawer positioning stays accurate.\n\nActually, let me step back and simplify this. I don't need perfect positioning for every drawer—I can focus on making only the most recent tool outputs interactive. Older drawers will naturally scroll up as new output appears, and users are mostly interested in expanding and collapsing the latest results anyway. This means I can track total lines output by the DrawerManager and compute positions relative to the bottom of the screen rather than trying to maintain absolute coordinates. But I still need to figure out how to map a click position to the actual line offset, which requires knowing the cursor position.\n\nLet me just use getCursorPosition and track external lines—it's not overly complicated. First, I need to identify where all the output happens and add tracking there. The user specifically wants drawer clicks to work when running subagents, which in this case means the Task tool and similar tools like FilePickerMax and CodeReview that produce nested output.\n\nActually, I realize they probably want ALL tool outputs to be collapsible, not just Task. Let me stop overthinking and implement this. I'll track every output line during processing through a DrawerManager, make tool results into drawers, treat everything else as external lines, and use cursor position queries for click handling.\n\nSetting up a helper to wrap console.log and process.stdout.write...\n\nStill writing tracking helpers...\n\nActually, I'm realizing the line tracking approach is getting too complicated with all the different output sources—ora spinners, thinking blocks, streamed text. Let me pivot to querying the cursor position directly instead. When I create a drawer, I'll capture the cursor row at that moment, then when handling a click, I can query the current cursor position and calculate where each drawer actually is on screen based on how much scrolling has happened since it was created.\n\nThe tricky part is that querying cursor position requires reading from stdin asynchronously, which means I need raw mode enabled—but I already have that set up during processing, so it's doable. The real challenge is that querying mid-render adds complexity since I'd need to wait for the response.\n\nSo here's what I'm going to do instead: track each drawer's offset from the cursor by storing how many lines have been output below it. Every time anything gets printed below a drawer, I increment that counter, which gives me a relative position I can use to figure out if a click hit that drawer.\n\nBuilding the DrawerManager class... I'm working through the offset calculation logic for finding a drawer at a given position from the bottom—the key insight is that the offset from the bottom equals the total lines minus the line where the drawer was created.\n\nNow I'm realizing this approach doesn't properly account for open drawers, where the content lines between the header and subsequent content affect the positioning. Let me trace through a concrete example to verify the logic: when I add a drawer with content, render external lines, then add another drawer, I need to make sure the offset calculations reflect the actual positions of all rendered content. Now I'm verifying the offset calculation works for both drawer headers, then realizing I need to distinguish between clicks on headers versus content lines—only the header should trigger a toggle, not the content areas below it.\n\nWhen a drawer gets toggled closed, the total line count shrinks and I need to recalculate both the total output lines and the createdAtLine positions for any drawers that come after it.\n\nWriting toggle logic... I'm realizing the core issue: when I toggle a drawer, I need to re-render everything after it, but I only store line counts for external text, not the actual content itself, so I can't reconstruct what was there before.\n\nInstead of clearing and re-rendering, I should use terminal line insertion and deletion operations—when closing a drawer, delete the content lines it occupied, and when opening one, insert blank lines and write the content into them. This way I don't touch any unrelated text.\n\nImplementing the toggle function... Writing terminal control sequences... Writing the drawer toggle logic... by (linesToBelowHeader) to get to the original end + contentLineCount.\n\nLet me think through this step by step: the cursor starts at row C (bottom), then I move up by (offset - 1) to position it, insert N blank lines which shifts everything below down, write the N content lines which moves the cursor down by N, and finally need to move down by (offset - 1) more to reach the new bottom at C + N.\n\nNow I'm writing the code to move the cursor down by that calculated amount, then marking the drawer as open and updating the total output line count. After that, I need to update the header to show the correct chevron by saving the cursor position and moving back up to where the header is located.\n\nUpdating the header chevron...\n\nI need to calculate the offset from the current cursor position back to where the header was written, then move up that many lines, clear and rewrite the header with the updated chevron state, and move back down to the bottom. Then I'll tackle the close case to make sure it handles the cleanup properly. I need to recalculate how offsets work relative to the cursor position. If offset represents lines above the cursor, then the header sits at `offset` lines up, and the first content line is one line closer at `offset - 1`. To close the drawer and remove content, I'd move the cursor up to that first content line position and then delete downward. I'm working through a concrete example to verify the cursor positioning logic—with the header at offset 4 and two content lines below it, I need to move up 3 lines from the bottom to reach the first content line, then delete both lines with a single escape sequence, which shifts the remaining content up accordingly.",
|
|
1062
|
-
"signature": "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",
|
|
1063
|
-
"provider": "anthropic"
|
|
1064
|
-
}
|
|
1065
|
-
],
|
|
1066
|
-
"state": {
|
|
1067
|
-
"type": "error",
|
|
1068
|
-
"error": {
|
|
1069
|
-
"message": "max_tokens"
|
|
1070
|
-
}
|
|
1071
|
-
},
|
|
1072
|
-
"usage": {
|
|
1073
|
-
"model": "claude-opus-4-6",
|
|
1074
|
-
"maxInputTokens": 168000,
|
|
1075
|
-
"inputTokens": 1,
|
|
1076
|
-
"outputTokens": 32000,
|
|
1077
|
-
"cacheCreationInputTokens": 2788,
|
|
1078
|
-
"cacheReadInputTokens": 53096,
|
|
1079
|
-
"totalInputTokens": 55885,
|
|
1080
|
-
"timestamp": "2026-02-26T03:47:45.772Z"
|
|
1081
|
-
}
|
|
1082
|
-
}
|
|
1083
|
-
],
|
|
1084
|
-
"agentMode": "smart",
|
|
1085
|
-
"nextMessageId": 22,
|
|
1086
|
-
"meta": {
|
|
1087
|
-
"traces": [
|
|
1088
|
-
{
|
|
1089
|
-
"name": "agent",
|
|
1090
|
-
"id": "RhOsR",
|
|
1091
|
-
"startTime": "2026-02-26T03:20:01.326Z",
|
|
1092
|
-
"context": {
|
|
1093
|
-
"messageId": 0
|
|
1094
|
-
},
|
|
1095
|
-
"endTime": "2026-02-26T03:21:07.179Z"
|
|
1096
|
-
},
|
|
1097
|
-
{
|
|
1098
|
-
"name": "inference",
|
|
1099
|
-
"id": "EUWvX",
|
|
1100
|
-
"parent": "RhOsR",
|
|
1101
|
-
"startTime": "2026-02-26T03:20:01.329Z",
|
|
1102
|
-
"context": {
|
|
1103
|
-
"messageId": 0
|
|
1104
|
-
},
|
|
1105
|
-
"endTime": "2026-02-26T03:20:05.556Z"
|
|
1106
|
-
},
|
|
1107
|
-
{
|
|
1108
|
-
"name": "tools",
|
|
1109
|
-
"id": "8U2QW",
|
|
1110
|
-
"parent": "RhOsR",
|
|
1111
|
-
"startTime": "2026-02-26T03:20:05.554Z",
|
|
1112
|
-
"context": {
|
|
1113
|
-
"messageId": 1
|
|
1114
|
-
},
|
|
1115
|
-
"endTime": "2026-02-26T03:20:05.606Z"
|
|
1116
|
-
},
|
|
1117
|
-
{
|
|
1118
|
-
"name": "inference",
|
|
1119
|
-
"id": "q9u37",
|
|
1120
|
-
"parent": "RhOsR",
|
|
1121
|
-
"startTime": "2026-02-26T03:20:05.608Z",
|
|
1122
|
-
"context": {
|
|
1123
|
-
"messageId": 0
|
|
1124
|
-
},
|
|
1125
|
-
"endTime": "2026-02-26T03:20:08.191Z"
|
|
1126
|
-
},
|
|
1127
|
-
{
|
|
1128
|
-
"name": "tools",
|
|
1129
|
-
"id": "4Ci3K",
|
|
1130
|
-
"parent": "RhOsR",
|
|
1131
|
-
"startTime": "2026-02-26T03:20:08.190Z",
|
|
1132
|
-
"context": {
|
|
1133
|
-
"messageId": 3
|
|
1134
|
-
},
|
|
1135
|
-
"endTime": "2026-02-26T03:20:08.214Z"
|
|
1136
|
-
},
|
|
1137
|
-
{
|
|
1138
|
-
"name": "inference",
|
|
1139
|
-
"id": "qlRy2",
|
|
1140
|
-
"parent": "RhOsR",
|
|
1141
|
-
"startTime": "2026-02-26T03:20:08.224Z",
|
|
1142
|
-
"context": {
|
|
1143
|
-
"messageId": 0
|
|
1144
|
-
},
|
|
1145
|
-
"endTime": "2026-02-26T03:20:13.072Z"
|
|
1146
|
-
},
|
|
1147
|
-
{
|
|
1148
|
-
"name": "tools",
|
|
1149
|
-
"id": "jJNhv",
|
|
1150
|
-
"parent": "RhOsR",
|
|
1151
|
-
"startTime": "2026-02-26T03:20:13.071Z",
|
|
1152
|
-
"context": {
|
|
1153
|
-
"messageId": 5
|
|
1154
|
-
},
|
|
1155
|
-
"endTime": "2026-02-26T03:20:13.096Z"
|
|
1156
|
-
},
|
|
1157
|
-
{
|
|
1158
|
-
"name": "inference",
|
|
1159
|
-
"id": "gQfcA",
|
|
1160
|
-
"parent": "RhOsR",
|
|
1161
|
-
"startTime": "2026-02-26T03:20:13.099Z",
|
|
1162
|
-
"context": {
|
|
1163
|
-
"messageId": 0
|
|
1164
|
-
},
|
|
1165
|
-
"endTime": "2026-02-26T03:20:23.518Z"
|
|
1166
|
-
},
|
|
1167
|
-
{
|
|
1168
|
-
"name": "tools",
|
|
1169
|
-
"id": "CvKjq",
|
|
1170
|
-
"parent": "RhOsR",
|
|
1171
|
-
"startTime": "2026-02-26T03:20:23.518Z",
|
|
1172
|
-
"context": {
|
|
1173
|
-
"messageId": 7
|
|
1174
|
-
},
|
|
1175
|
-
"endTime": "2026-02-26T03:20:23.546Z"
|
|
1176
|
-
},
|
|
1177
|
-
{
|
|
1178
|
-
"name": "inference",
|
|
1179
|
-
"id": "Ld2IN",
|
|
1180
|
-
"parent": "RhOsR",
|
|
1181
|
-
"startTime": "2026-02-26T03:20:23.549Z",
|
|
1182
|
-
"context": {
|
|
1183
|
-
"messageId": 0
|
|
1184
|
-
},
|
|
1185
|
-
"endTime": "2026-02-26T03:20:45.777Z"
|
|
1186
|
-
},
|
|
1187
|
-
{
|
|
1188
|
-
"name": "tools",
|
|
1189
|
-
"id": "OdEp5",
|
|
1190
|
-
"parent": "RhOsR",
|
|
1191
|
-
"startTime": "2026-02-26T03:20:45.777Z",
|
|
1192
|
-
"context": {
|
|
1193
|
-
"messageId": 9
|
|
1194
|
-
},
|
|
1195
|
-
"endTime": "2026-02-26T03:20:46.660Z"
|
|
1196
|
-
},
|
|
1197
|
-
{
|
|
1198
|
-
"name": "inference",
|
|
1199
|
-
"id": "vlYY5",
|
|
1200
|
-
"parent": "RhOsR",
|
|
1201
|
-
"startTime": "2026-02-26T03:20:46.661Z",
|
|
1202
|
-
"context": {
|
|
1203
|
-
"messageId": 0
|
|
1204
|
-
},
|
|
1205
|
-
"endTime": "2026-02-26T03:21:07.180Z"
|
|
1206
|
-
},
|
|
1207
|
-
{
|
|
1208
|
-
"name": "agent",
|
|
1209
|
-
"id": "XlioZ",
|
|
1210
|
-
"startTime": "2026-02-26T03:21:33.001Z",
|
|
1211
|
-
"context": {
|
|
1212
|
-
"messageId": 12
|
|
1213
|
-
}
|
|
1214
|
-
},
|
|
1215
|
-
{
|
|
1216
|
-
"name": "inference",
|
|
1217
|
-
"id": "uIh5c",
|
|
1218
|
-
"parent": "XlioZ",
|
|
1219
|
-
"startTime": "2026-02-26T03:21:33.003Z",
|
|
1220
|
-
"context": {
|
|
1221
|
-
"messageId": 12
|
|
1222
|
-
},
|
|
1223
|
-
"endTime": "2026-02-26T03:30:50.466Z"
|
|
1224
|
-
},
|
|
1225
|
-
{
|
|
1226
|
-
"name": "agent",
|
|
1227
|
-
"id": "vIAih",
|
|
1228
|
-
"startTime": "2026-02-26T03:34:30.234Z",
|
|
1229
|
-
"context": {
|
|
1230
|
-
"messageId": 14
|
|
1231
|
-
},
|
|
1232
|
-
"endTime": "2026-02-26T03:36:12.041Z"
|
|
1233
|
-
},
|
|
1234
|
-
{
|
|
1235
|
-
"name": "inference",
|
|
1236
|
-
"id": "L6eFe",
|
|
1237
|
-
"parent": "vIAih",
|
|
1238
|
-
"startTime": "2026-02-26T03:34:30.234Z",
|
|
1239
|
-
"context": {
|
|
1240
|
-
"messageId": 14
|
|
1241
|
-
},
|
|
1242
|
-
"endTime": "2026-02-26T03:36:12.042Z"
|
|
1243
|
-
},
|
|
1244
|
-
{
|
|
1245
|
-
"name": "agent",
|
|
1246
|
-
"id": "4KQqR",
|
|
1247
|
-
"startTime": "2026-02-26T03:36:12.037Z",
|
|
1248
|
-
"context": {
|
|
1249
|
-
"messageId": 16
|
|
1250
|
-
}
|
|
1251
|
-
},
|
|
1252
|
-
{
|
|
1253
|
-
"name": "inference",
|
|
1254
|
-
"id": "d1wJS",
|
|
1255
|
-
"parent": "4KQqR",
|
|
1256
|
-
"startTime": "2026-02-26T03:36:12.040Z",
|
|
1257
|
-
"context": {
|
|
1258
|
-
"messageId": 16
|
|
1259
|
-
},
|
|
1260
|
-
"endTime": "2026-02-26T03:36:17.923Z"
|
|
1261
|
-
},
|
|
1262
|
-
{
|
|
1263
|
-
"name": "tools",
|
|
1264
|
-
"id": "RM0aJ",
|
|
1265
|
-
"parent": "4KQqR",
|
|
1266
|
-
"startTime": "2026-02-26T03:36:17.922Z",
|
|
1267
|
-
"context": {
|
|
1268
|
-
"messageId": 17
|
|
1269
|
-
},
|
|
1270
|
-
"endTime": "2026-02-26T03:36:20.858Z"
|
|
1271
|
-
},
|
|
1272
|
-
{
|
|
1273
|
-
"name": "inference",
|
|
1274
|
-
"id": "4e3hP",
|
|
1275
|
-
"parent": "4KQqR",
|
|
1276
|
-
"startTime": "2026-02-26T03:36:20.879Z",
|
|
1277
|
-
"context": {
|
|
1278
|
-
"messageId": 16
|
|
1279
|
-
},
|
|
1280
|
-
"endTime": "2026-02-26T03:36:32.750Z"
|
|
1281
|
-
},
|
|
1282
|
-
{
|
|
1283
|
-
"name": "tools",
|
|
1284
|
-
"id": "XS94R",
|
|
1285
|
-
"parent": "4KQqR",
|
|
1286
|
-
"startTime": "2026-02-26T03:36:32.750Z",
|
|
1287
|
-
"context": {
|
|
1288
|
-
"messageId": 19
|
|
1289
|
-
},
|
|
1290
|
-
"endTime": "2026-02-26T03:37:58.126Z"
|
|
1291
|
-
},
|
|
1292
|
-
{
|
|
1293
|
-
"name": "inference",
|
|
1294
|
-
"id": "xK1kB",
|
|
1295
|
-
"parent": "4KQqR",
|
|
1296
|
-
"startTime": "2026-02-26T03:37:58.137Z",
|
|
1297
|
-
"context": {
|
|
1298
|
-
"messageId": 16
|
|
1299
|
-
},
|
|
1300
|
-
"endTime": "2026-02-26T03:47:45.772Z"
|
|
1301
|
-
}
|
|
1302
|
-
]
|
|
1303
|
-
},
|
|
1304
|
-
"env": {
|
|
1305
|
-
"initial": {
|
|
1306
|
-
"trees": [
|
|
1307
|
-
{
|
|
1308
|
-
"displayName": "workspace",
|
|
1309
|
-
"uri": "file:///home/runner/workspace"
|
|
1310
|
-
}
|
|
1311
|
-
],
|
|
1312
|
-
"platform": {
|
|
1313
|
-
"os": "linux",
|
|
1314
|
-
"osVersion": "Ubuntu 24.04.2 LTS",
|
|
1315
|
-
"cpuArchitecture": "x64",
|
|
1316
|
-
"webBrowser": false,
|
|
1317
|
-
"client": "CLI",
|
|
1318
|
-
"clientVersion": "0.0.1772067340-g53cd9b",
|
|
1319
|
-
"clientType": "cli",
|
|
1320
|
-
"installationID": "990855e2-5987-4061-ad34-8c29deacfa95",
|
|
1321
|
-
"deviceFingerprint": "v1:fp_5e0b4aaea6d8b2adcf3c155505cf5c39765fb8ea3e8157ac186424d91df98615"
|
|
1322
|
-
},
|
|
1323
|
-
"tags": [
|
|
1324
|
-
"model:claude-opus-4-6"
|
|
1325
|
-
]
|
|
1326
|
-
}
|
|
1327
|
-
},
|
|
1328
|
-
"title": "Drawer toggle click interaction during subagent execution",
|
|
1329
|
-
"~debug": {
|
|
1330
|
-
"lastInferenceUsage": {
|
|
1331
|
-
"model": "claude-opus-4-6",
|
|
1332
|
-
"maxInputTokens": 168000,
|
|
1333
|
-
"inputTokens": 3,
|
|
1334
|
-
"outputTokens": 32000,
|
|
1335
|
-
"cacheCreationInputTokens": 14525,
|
|
1336
|
-
"cacheReadInputTokens": 53096,
|
|
1337
|
-
"totalInputTokens": 55885,
|
|
1338
|
-
"timestamp": "2026-02-26T03:47:45.772Z"
|
|
1339
|
-
}
|
|
1340
|
-
}
|
|
1341
|
-
}
|