Skip to content

Commit b2f6bb8

Browse files
committed
clean up some horrible claude code
1 parent c5f6dcb commit b2f6bb8

File tree

3 files changed

+49
-78
lines changed

3 files changed

+49
-78
lines changed

src/api.ts

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -276,32 +276,3 @@ export async function waitForBuild(
276276
writeEmitter.fire(`Workspace is now ${updatedWorkspace.latest_build.status}\r\n`)
277277
return updatedWorkspace
278278
}
279-
280-
// 1. First, get a workspace by owner and name
281-
export async function getAITasksForWorkspace(
282-
restClient: Api,
283-
writeEmitter: vscode.EventEmitter<string>,
284-
workspace: Workspace,
285-
): Promise<WorkspaceAgentTask[]> {
286-
// We need to build up tasks
287-
let awaiting_tasks: WorkspaceAgentTask[] = [];
288-
289-
// The workspace will include agents, and within each agent you can find tasks
290-
// You can access the agents from the workspace resource
291-
const resources = workspace.latest_build.resources;
292-
293-
// Go through each resource
294-
for (const resource of resources) {
295-
if (!resource.agents) {
296-
continue
297-
}
298-
299-
resource.agents.forEach((agent) => {
300-
for (const task of agent.tasks) {
301-
awaiting_tasks.push(task);
302-
}
303-
})
304-
}
305-
306-
return awaiting_tasks;
307-
}

src/commands.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Api } from "coder/site/src/api/api"
22
import { getErrorMessage } from "coder/site/src/api/errors"
33
import { User, Workspace, WorkspaceAgent } from "coder/site/src/api/typesGenerated"
44
import * as vscode from "vscode"
5-
import { getAITasksForWorkspace, makeCoderSdk, needToken } from "./api"
5+
import { makeCoderSdk, needToken } from "./api"
66
import { extractAgents } from "./api-helper"
77
import { CertificateError } from "./error"
88
import { Storage } from "./storage"
@@ -295,7 +295,6 @@ export class Commands {
295295
const doc = await vscode.workspace.openTextDocument(uri)
296296
await vscode.window.showTextDocument(doc)
297297
}
298-
299298

300299
/**
301300
* Log out from the currently logged-in deployment.
@@ -409,12 +408,11 @@ export class Commands {
409408
}
410409

411410
public async openAISession(): Promise<void> {
412-
413411
// Then launch an integrated terminal with screen session
414412
const terminal = vscode.window.createTerminal({
415413
name: "Claude Code Session",
416414
})
417-
415+
418416
// Show the terminal and run the screen command
419417
terminal.show(true)
420418
terminal.sendText("screen -xRR claude-code")

src/workspacesProvider.ts

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Workspace, WorkspaceAgent, WorkspaceAgentTask } from "coder/site/src/ap
33
import { EventSource } from "eventsource"
44
import * as path from "path"
55
import * as vscode from "vscode"
6-
import { createStreamingFetchAdapter, getAITasksForWorkspace } from "./api"
6+
import { createStreamingFetchAdapter } from "./api"
77
import {
88
AgentMetadataEvent,
99
AgentMetadataEventSchemaArray,
@@ -147,29 +147,28 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
147147
})
148148

149149
// Create tree items for each workspace
150-
const workspaceTreeItems = await Promise.all(resp.workspaces.map(async (workspace) => {
151-
const workspaceTreeItem = new WorkspaceTreeItem(
152-
workspace,
153-
this.getWorkspacesQuery === WorkspaceQuery.All,
154-
showMetadata
155-
)
156-
157-
// Fetch AI tasks for the workspace
158-
try {
159-
// Create a dummy emitter for logs
160-
const emitter = new vscode.EventEmitter<string>()
161-
const aiTasks = await getAITasksForWorkspace(restClient, emitter, workspace)
162-
workspaceTreeItem.aiTasks = aiTasks
163-
this.storage.writeToCoderOutputChannel(aiTasks.length.toString())
164-
console.log(aiTasks.length.toString())
165-
} catch (error) {
166-
// Log the error but continue - we don't want to fail the whole tree if AI tasks fail
167-
this.storage.writeToCoderOutputChannel(`Failed to fetch AI tasks for workspace ${workspace.name}: ${errToStr(error, "unknown error")}`)
168-
169-
}
170-
171-
return workspaceTreeItem
172-
}))
150+
const workspaceTreeItems = await Promise.all(
151+
resp.workspaces.map(async (workspace) => {
152+
const workspaceTreeItem = new WorkspaceTreeItem(
153+
workspace,
154+
this.getWorkspacesQuery === WorkspaceQuery.All,
155+
showMetadata,
156+
)
157+
158+
// Fetch AI tasks for the workspace
159+
try {
160+
// Create a dummy emitter for logs
161+
const emitter = new vscode.EventEmitter<string>()
162+
} catch (error) {
163+
// Log the error but continue - we don't want to fail the whole tree if AI tasks fail
164+
this.storage.writeToCoderOutputChannel(
165+
`Failed to fetch AI tasks for workspace ${workspace.name}: ${errToStr(error, "unknown error")}`,
166+
)
167+
}
168+
169+
return workspaceTreeItem
170+
}),
171+
)
173172

174173
return workspaceTreeItems
175174
}
@@ -230,24 +229,25 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
230229
const agentTreeItems = agents.map(
231230
(agent) => new AgentTreeItem(agent, element.workspaceOwner, element.workspaceName, element.watchMetadata),
232231
)
233-
234-
// Add AI task items to the workspace children if there are any
235-
const aiTaskItems = element.aiTasks.map(task => new AITaskTreeItem(task))
236-
237-
// If there are AI tasks, add them at the beginning of the list
238-
if (aiTaskItems.length == 0) {
239-
return Promise.resolve(agentTreeItems)
240-
}
241-
242-
// Return AI task items first, then a separator, then agent items
243-
return Promise.resolve([...aiTaskItems, ...agentTreeItems])
232+
233+
return Promise.resolve(agentTreeItems)
244234
} else if (element instanceof AgentTreeItem) {
245235
const watcher = this.agentWatchers[element.agent.id]
246236
if (watcher?.error) {
247237
return Promise.resolve([new ErrorTreeItem(watcher.error)])
248238
}
239+
240+
const items: vscode.TreeItem[] = []
241+
242+
// Add AI tasks first, if the agent has any associated tasks
243+
const agentTasks = element.agent.tasks.map((task) => new AITaskTreeItem(task))
244+
items.push(...agentTasks)
245+
246+
// Add agent metadata
249247
const savedMetadata = watcher?.metadata || []
250-
return Promise.resolve(savedMetadata.map((metadata) => new AgentMetadataTreeItem(metadata)))
248+
items.push(...savedMetadata.map((metadata) => new AgentMetadataTreeItem(metadata)))
249+
250+
return Promise.resolve(items)
251251
}
252252

253253
return Promise.resolve([])
@@ -320,18 +320,16 @@ class AgentMetadataTreeItem extends vscode.TreeItem {
320320

321321
class AITaskTreeItem extends vscode.TreeItem {
322322
constructor(public readonly task: WorkspaceAgentTask) {
323-
super(task.summary, vscode.TreeItemCollapsibleState.None)
323+
// Add a hand raise emoji (✋) to indicate tasks awaiting user input
324+
super(task.icon, vscode.TreeItemCollapsibleState.None)
324325
this.description = task.summary
325326
this.contextValue = "coderAITask"
326-
327-
// Add an icon using VSCode's built-in Codicons
328-
this.iconPath = new vscode.ThemeIcon("sparkle")
329-
327+
330328
// Add command to handle clicking on the task
331329
this.command = {
332-
command: "coder.openAITask",
330+
command: "coder.openAITask",
333331
title: "Open AI Task",
334-
arguments: [task]
332+
arguments: [task],
335333
}
336334
}
337335
}
@@ -382,12 +380,16 @@ class AgentTreeItem extends OpenableTreeItem {
382380
agent.expanded_directory,
383381
"coderAgent",
384382
)
383+
384+
if (agent.task_waiting_for_user_input) {
385+
this.label = "🙋 " + this.label;
386+
}
385387
}
386388
}
387389

388390
export class WorkspaceTreeItem extends OpenableTreeItem {
389-
public aiTasks: WorkspaceAgentTask[] = []
390-
391+
public aiTasks: {waiting: boolean, tasks: WorkspaceAgentTask[]}[] = []
392+
391393
constructor(
392394
public readonly workspace: Workspace,
393395
public readonly showOwner: boolean,

0 commit comments

Comments
 (0)