Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Bcpeinhardt/ai agent session in vscode#488

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
bcpeinhardt merged 30 commits intomainfrombcpeinhardt/ai-agent-session-in-vscode
Apr 22, 2025
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
30 commits
Select commitHold shift + click to select a range
bfa33eb
update deps to kyles branch and make helper for getting agent informa…
bcpeinhardtMar 18, 2025
92c3bfd
agents in sidebar
bcpeinhardtMar 18, 2025
c5f6dcb
janky working demo for meeting
bcpeinhardtMar 18, 2025
b2f6bb8
clean up some horrible claude code
bcpeinhardtMar 18, 2025
c7001d5
separate metadata and tasks
bcpeinhardtMar 18, 2025
f39f458
tweaks to terminal sizing
bcpeinhardtMar 19, 2025
c31cb7c
put coder dep back on main post merge of ai work
bcpeinhardtMar 31, 2025
063b27e
statuses updates
bcpeinhardtApr 1, 2025
be1e137
coder ssh strategy finally working
bcpeinhardtApr 1, 2025
08c93ae
show apps in need of attention only when there are some to show
bcpeinhardtApr 1, 2025
99f3b1d
working with goose and claude
bcpeinhardtApr 1, 2025
cd7c68c
switch up labels
bcpeinhardtApr 1, 2025
26f740d
remove hand raise emojis
bcpeinhardtApr 1, 2025
ac8d5fd
app not application
bcpeinhardtApr 1, 2025
d0386d0
resolve conflict
bcpeinhardtApr 1, 2025
69f9b97
remove unused commands
bcpeinhardtApr 1, 2025
68c2e04
terminal names
bcpeinhardtApr 1, 2025
b1e281c
use built in coder cli
bcpeinhardtApr 2, 2025
5c66430
Merge branch 'main' into bcpeinhardt/ai-agent-session-in-vscode
bcpeinhardtApr 14, 2025
83fafb0
Merge branch 'main' into bcpeinhardt/ai-agent-session-in-vscode
bcpeinhardtApr 15, 2025
22246b9
reset back to working state pre tmux and reverse app statuses so most…
bcpeinhardtApr 21, 2025
80f74f9
only show terminal after ssh command and app commands run
bcpeinhardtApr 21, 2025
0f7dd65
loading indicator
bcpeinhardtApr 21, 2025
8f996dd
update loading msg
bcpeinhardtApr 21, 2025
c24b675
don't mess with terminal size
bcpeinhardtApr 21, 2025
6f83606
workspace name isn't optional
bcpeinhardtApr 21, 2025
579ad4e
changelog and format
bcpeinhardtApr 21, 2025
9340b7d
remove unused icon code
bcpeinhardtApr 21, 2025
8dac372
cleanup
bcpeinhardtApr 21, 2025
866956a
remove unnecessary label assignment (I think there used to be an icon…
bcpeinhardtApr 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
clean up some horrible claude code
  • Loading branch information
@bcpeinhardt
bcpeinhardt committedMar 18, 2025
commitb2f6bb86492db8701868b76460bf55f3b213b89d
29 changes: 0 additions & 29 deletionssrc/api.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -276,32 +276,3 @@ export async function waitForBuild(
writeEmitter.fire(`Workspace is now ${updatedWorkspace.latest_build.status}\r\n`)
return updatedWorkspace
}

// 1. First, get a workspace by owner and name
export async function getAITasksForWorkspace(
restClient: Api,
writeEmitter: vscode.EventEmitter<string>,
workspace: Workspace,
): Promise<WorkspaceAgentTask[]> {
// We need to build up tasks
let awaiting_tasks: WorkspaceAgentTask[] = [];

// The workspace will include agents, and within each agent you can find tasks
// You can access the agents from the workspace resource
const resources = workspace.latest_build.resources;

// Go through each resource
for (const resource of resources) {
if (!resource.agents) {
continue
}

resource.agents.forEach((agent) => {
for (const task of agent.tasks) {
awaiting_tasks.push(task);
}
})
}

return awaiting_tasks;
}
6 changes: 2 additions & 4 deletionssrc/commands.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { Api } from "coder/site/src/api/api"
import { getErrorMessage } from "coder/site/src/api/errors"
import { User, Workspace, WorkspaceAgent } from "coder/site/src/api/typesGenerated"
import * as vscode from "vscode"
import {getAITasksForWorkspace,makeCoderSdk, needToken } from "./api"
import { makeCoderSdk, needToken } from "./api"
import { extractAgents } from "./api-helper"
import { CertificateError } from "./error"
import { Storage } from "./storage"
Expand DownExpand Up@@ -295,7 +295,6 @@ export class Commands {
const doc = await vscode.workspace.openTextDocument(uri)
await vscode.window.showTextDocument(doc)
}


/**
* Log out from the currently logged-in deployment.
Expand DownExpand Up@@ -409,12 +408,11 @@ export class Commands {
}

public async openAISession(): Promise<void> {

// Then launch an integrated terminal with screen session
const terminal = vscode.window.createTerminal({
name: "Claude Code Session",
})

// Show the terminal and run the screen command
terminal.show(true)
terminal.sendText("screen -xRR claude-code")
Expand Down
92 changes: 47 additions & 45 deletionssrc/workspacesProvider.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@ import { Workspace, WorkspaceAgent, WorkspaceAgentTask } from "coder/site/src/ap
import { EventSource } from "eventsource"
import * as path from "path"
import * as vscode from "vscode"
import { createStreamingFetchAdapter, getAITasksForWorkspace } from "./api"
import { createStreamingFetchAdapter } from "./api"
import {
AgentMetadataEvent,
AgentMetadataEventSchemaArray,
Expand DownExpand Up@@ -147,29 +147,28 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
})

// Create tree items for each workspace
const workspaceTreeItems = await Promise.all(resp.workspaces.map(async (workspace) => {
const workspaceTreeItem = new WorkspaceTreeItem(
workspace,
this.getWorkspacesQuery === WorkspaceQuery.All,
showMetadata
)

// Fetch AI tasks for the workspace
try {
// Create a dummy emitter for logs
const emitter = new vscode.EventEmitter<string>()
const aiTasks = await getAITasksForWorkspace(restClient, emitter, workspace)
workspaceTreeItem.aiTasks = aiTasks
this.storage.writeToCoderOutputChannel(aiTasks.length.toString())
console.log(aiTasks.length.toString())
} catch (error) {
// Log the error but continue - we don't want to fail the whole tree if AI tasks fail
this.storage.writeToCoderOutputChannel(`Failed to fetch AI tasks for workspace ${workspace.name}: ${errToStr(error, "unknown error")}`)

}

return workspaceTreeItem
}))
const workspaceTreeItems = await Promise.all(
resp.workspaces.map(async (workspace) => {
const workspaceTreeItem = new WorkspaceTreeItem(
workspace,
this.getWorkspacesQuery === WorkspaceQuery.All,
showMetadata,
)

// Fetch AI tasks for the workspace
try {
// Create a dummy emitter for logs
const emitter = new vscode.EventEmitter<string>()
} catch (error) {
// Log the error but continue - we don't want to fail the whole tree if AI tasks fail
this.storage.writeToCoderOutputChannel(
`Failed to fetch AI tasks for workspace ${workspace.name}: ${errToStr(error, "unknown error")}`,
)
}

return workspaceTreeItem
}),
)

return workspaceTreeItems
}
Expand DownExpand Up@@ -230,24 +229,25 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
const agentTreeItems = agents.map(
(agent) => new AgentTreeItem(agent, element.workspaceOwner, element.workspaceName, element.watchMetadata),
)

// Add AI task items to the workspace children if there are any
const aiTaskItems = element.aiTasks.map(task => new AITaskTreeItem(task))

// If there are AI tasks, add them at the beginning of the list
if (aiTaskItems.length == 0) {
return Promise.resolve(agentTreeItems)
}

// Return AI task items first, then a separator, then agent items
return Promise.resolve([...aiTaskItems, ...agentTreeItems])

return Promise.resolve(agentTreeItems)
} else if (element instanceof AgentTreeItem) {
const watcher = this.agentWatchers[element.agent.id]
if (watcher?.error) {
return Promise.resolve([new ErrorTreeItem(watcher.error)])
}

const items: vscode.TreeItem[] = []

// Add AI tasks first, if the agent has any associated tasks
const agentTasks = element.agent.tasks.map((task) => new AITaskTreeItem(task))
items.push(...agentTasks)

// Add agent metadata
const savedMetadata = watcher?.metadata || []
return Promise.resolve(savedMetadata.map((metadata) => new AgentMetadataTreeItem(metadata)))
items.push(...savedMetadata.map((metadata) => new AgentMetadataTreeItem(metadata)))

return Promise.resolve(items)
}

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

class AITaskTreeItem extends vscode.TreeItem {
constructor(public readonly task: WorkspaceAgentTask) {
super(task.summary, vscode.TreeItemCollapsibleState.None)
// Add a hand raise emoji (✋) to indicate tasks awaiting user input
super(task.icon, vscode.TreeItemCollapsibleState.None)
this.description = task.summary
this.contextValue = "coderAITask"

// Add an icon using VSCode's built-in Codicons
this.iconPath = new vscode.ThemeIcon("sparkle")


// Add command to handle clicking on the task
this.command = {
command: "coder.openAITask",
command: "coder.openAITask",
title: "Open AI Task",
arguments: [task]
arguments: [task],
}
}
}
Expand DownExpand Up@@ -382,12 +380,16 @@ class AgentTreeItem extends OpenableTreeItem {
agent.expanded_directory,
"coderAgent",
)

if (agent.task_waiting_for_user_input) {
this.label = "🙋 " + this.label;
}
}
}

export class WorkspaceTreeItem extends OpenableTreeItem {
public aiTasks: WorkspaceAgentTask[] = []
public aiTasks:{waiting: boolean, tasks:WorkspaceAgentTask[]}[] = []

constructor(
public readonly workspace: Workspace,
public readonly showOwner: boolean,
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp