Skip to content

Commit a201c07

Browse files
authored
Update dependencies (#794)
Remove the defined `getTaskLog` from `CoderApi` and rely on the exported `Api` method
1 parent 7b4e148 commit a201c07

File tree

8 files changed

+214
-210
lines changed

8 files changed

+214
-210
lines changed

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -508,36 +508,36 @@
508508
"@types/ua-parser-js": "0.7.39",
509509
"@types/vscode": "^1.95.0",
510510
"@types/ws": "^8.18.1",
511-
"@typescript-eslint/eslint-plugin": "^8.54.0",
512-
"@typescript-eslint/parser": "^8.54.0",
511+
"@typescript-eslint/eslint-plugin": "^8.56.0",
512+
"@typescript-eslint/parser": "^8.56.0",
513513
"@vitejs/plugin-react": "catalog:",
514514
"@vitest/coverage-v8": "^4.0.18",
515515
"@vscode/test-cli": "^0.0.12",
516516
"@vscode/test-electron": "^2.5.2",
517517
"@vscode/vsce": "^3.7.1",
518518
"babel-plugin-react-compiler": "catalog:",
519519
"bufferutil": "^4.1.0",
520-
"coder": "github:coder/coder#main",
520+
"coder": "catalog:",
521521
"concurrently": "^9.2.1",
522522
"dayjs": "^1.11.19",
523-
"electron": "^40.2.1",
523+
"electron": "^40.4.1",
524524
"esbuild": "^0.27.3",
525525
"eslint": "^9.39.2",
526526
"eslint-config-prettier": "^10.1.8",
527527
"eslint-import-resolver-typescript": "^4.4.4",
528528
"eslint-plugin-import-x": "^4.16.1",
529-
"eslint-plugin-package-json": "^0.88.2",
529+
"eslint-plugin-package-json": "^0.88.3",
530530
"eslint-plugin-react": "^7.37.5",
531531
"eslint-plugin-react-hooks": "^7.0.1",
532532
"globals": "^17.3.0",
533-
"jsdom": "^28.0.0",
533+
"jsdom": "^28.1.0",
534534
"jsonc-eslint-parser": "^2.4.2",
535535
"memfs": "^4.56.10",
536536
"prettier": "^3.8.1",
537537
"react": "catalog:",
538538
"react-dom": "catalog:",
539539
"typescript": "catalog:",
540-
"typescript-eslint": "^8.54.0",
540+
"typescript-eslint": "^8.56.0",
541541
"utf-8-validate": "^6.0.6",
542542
"vite": "catalog:",
543543
"vitest": "^4.0.18"

packages/shared/src/tasks/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export type LogsStatus = "ok" | "not_available" | "error";
3737
*/
3838
export interface TaskDetails extends TaskPermissions {
3939
task: Task;
40-
logs: TaskLogEntry[];
40+
logs: readonly TaskLogEntry[];
4141
logsStatus: LogsStatus;
4242
}
4343

packages/tasks/src/components/AgentChatHistory.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useFollowScroll } from "../hooks/useFollowScroll";
55
import type { LogsStatus, TaskLogEntry } from "@repo/shared";
66

77
interface AgentChatHistoryProps {
8-
logs: TaskLogEntry[];
8+
logs: readonly TaskLogEntry[];
99
logsStatus: LogsStatus;
1010
isThinking: boolean;
1111
}

pnpm-lock.yaml

Lines changed: 179 additions & 155 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11
packages:
22
- packages/*
33

4-
# Shared dependency versions (use "catalog:" in package.json to reference)
54
catalog:
65
"@tanstack/react-query": ^5.90.21
76
"@types/react": ^19.2.14
87
"@types/react-dom": ^19.2.3
8+
"@types/vscode-webview": ^1.57.5
99
"@vitejs/plugin-react": ^5.1.4
1010
"@vscode-elements/react-elements": ^2.4.0
11-
"@types/vscode-webview": ^1.57.5
1211
"@vscode/codicons": ^0.0.44
1312
babel-plugin-react-compiler: ^1.0.0
13+
coder: github:coder/coder#main
1414
react: ^19.2.4
1515
react-dom: ^19.2.4
1616
typescript: ^5.9.3
1717
vite: ^7.3.1
1818

19-
# Enforce all shared deps come from catalog to prevent version drift
2019
catalogMode: strict
2120

22-
# Native modules allowed to run install scripts (pnpm blocks by default for security)
2321
onlyBuiltDependencies:
24-
- "@vscode/vsce-sign" # vsce signing
25-
- bufferutil # ws perf
26-
- electron # tests
27-
- esbuild # build
28-
- keytar # vsce credentials
29-
- unrs-resolver # eslint resolver
30-
- utf-8-validate # ws validation
22+
- "@vscode/vsce-sign"
23+
- bufferutil
24+
- electron
25+
- esbuild
26+
- keytar
27+
- unrs-resolver
28+
- utf-8-validate

src/api/coderApi.ts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
type ServerSentEvent,
1111
type GetInboxNotificationResponse,
1212
type ProvisionerJobLog,
13-
type TaskLogEntry,
1413
type Workspace,
1514
type WorkspaceAgent,
1615
type WorkspaceAgentLog,
@@ -193,23 +192,6 @@ export class CoderApi extends Api implements vscode.Disposable {
193192
});
194193
}
195194

196-
getTaskLogs = async (user: string, taskId: string) => {
197-
const response = await this.getAxiosInstance().get<{
198-
logs: TaskLogEntry[];
199-
}>(`/api/v2/tasks/${user}/${taskId}/logs`);
200-
return response.data.logs ?? [];
201-
};
202-
203-
sendTaskInput = async (
204-
user: string,
205-
taskId: string,
206-
input: string,
207-
): Promise<void> => {
208-
await this.getAxiosInstance().post(`/api/v2/tasks/${user}/${taskId}/send`, {
209-
input,
210-
});
211-
};
212-
213195
watchInboxNotifications = async (
214196
watchTemplates: string[],
215197
watchTargets: string[],

src/webviews/tasks/tasksPanel.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export class TasksPanel
8989
// Cache logs for last viewed task in stable state
9090
private cachedLogs?: {
9191
taskId: string;
92-
logs: TaskLogEntry[];
92+
logs: readonly TaskLogEntry[];
9393
status: LogsStatus;
9494
};
9595

@@ -542,7 +542,7 @@ export class TasksPanel
542542
*/
543543
private async getLogsWithCache(
544544
task: Task,
545-
): Promise<{ logs: TaskLogEntry[]; logsStatus: LogsStatus }> {
545+
): Promise<{ logs: readonly TaskLogEntry[]; logsStatus: LogsStatus }> {
546546
const stable = isStableTask(task);
547547

548548
// Use cache if same task in stable state
@@ -562,10 +562,10 @@ export class TasksPanel
562562

563563
private async fetchTaskLogs(
564564
taskId: string,
565-
): Promise<{ logs: TaskLogEntry[]; status: LogsStatus }> {
565+
): Promise<{ logs: readonly TaskLogEntry[]; status: LogsStatus }> {
566566
try {
567-
const logs = await this.client.getTaskLogs("me", taskId);
568-
return { logs, status: "ok" };
567+
const response = await this.client.getTaskLogs("me", taskId);
568+
return { logs: response.logs, status: "ok" };
569569
} catch (err) {
570570
if (isAxiosError(err) && err.response?.status === 409) {
571571
return { logs: [], status: "not_available" };

test/unit/webviews/tasks/tasksPanel.test.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { beforeEach, describe, expect, it, vi } from "vitest";
1+
import { beforeEach, describe, expect, it, vi, type Mock } from "vitest";
22
import * as vscode from "vscode";
33

44
import { TasksPanel } from "@/webviews/tasks/tasksPanel";
@@ -44,13 +44,13 @@ type TasksPanelClient = Pick<
4444
| "getHost"
4545
>;
4646

47-
type MockClient = { [K in keyof TasksPanelClient]: ReturnType<typeof vi.fn> };
47+
type MockClient = { [K in keyof TasksPanelClient]: Mock<TasksPanelClient[K]> };
4848

4949
function createClient(baseUrl = "https://coder.example.com"): MockClient {
5050
return {
5151
getTasks: vi.fn().mockResolvedValue([]),
5252
getTask: vi.fn(),
53-
getTaskLogs: vi.fn().mockResolvedValue([]),
53+
getTaskLogs: vi.fn().mockResolvedValue({ logs: [] }),
5454
createTask: vi.fn(),
5555
deleteTask: vi.fn().mockResolvedValue(undefined),
5656
getTemplates: vi.fn().mockResolvedValue([]),
@@ -59,7 +59,7 @@ function createClient(baseUrl = "https://coder.example.com"): MockClient {
5959
stopWorkspace: vi.fn().mockResolvedValue(undefined),
6060
sendTaskInput: vi.fn().mockResolvedValue(undefined),
6161
getHost: vi.fn().mockReturnValue(baseUrl),
62-
};
62+
} as MockClient;
6363
}
6464

6565
interface Harness {
@@ -268,9 +268,9 @@ describe("TasksPanel", () => {
268268
it("returns task with logs", async () => {
269269
const h = createHarness();
270270
h.client.getTask.mockResolvedValue(task());
271-
h.client.getTaskLogs.mockResolvedValue([
272-
logEntry({ content: "Starting" }),
273-
]);
271+
h.client.getTaskLogs.mockResolvedValue({
272+
logs: [logEntry({ content: "Starting" })],
273+
});
274274

275275
const res = await h.request(TasksApi.getTaskDetails, {
276276
taskId: "task-1",
@@ -319,7 +319,7 @@ describe("TasksPanel", () => {
319319
h.client.getTask.mockResolvedValue(
320320
task({ current_state: { timestamp: "", state, message: "", uri: "" } }),
321321
);
322-
h.client.getTaskLogs.mockResolvedValue([logEntry()]);
322+
h.client.getTaskLogs.mockResolvedValue({ logs: [logEntry()] });
323323

324324
await h.request(TasksApi.getTaskDetails, { taskId: "task-1" });
325325
await h.request(TasksApi.getTaskDetails, { taskId: "task-1" });
@@ -574,7 +574,7 @@ describe("TasksPanel", () => {
574574
describe("downloadLogs", () => {
575575
it("saves logs to file", async () => {
576576
const h = createHarness();
577-
h.client.getTaskLogs.mockResolvedValue([logEntry()]);
577+
h.client.getTaskLogs.mockResolvedValue({ logs: [logEntry()] });
578578
const saveUri = vscode.Uri.file("/downloads/logs.txt");
579579
vi.mocked(vscode.window.showSaveDialog).mockResolvedValue(saveUri);
580580
h.ui.setResponse(`Logs saved to ${saveUri.fsPath}`, "Open File");
@@ -593,7 +593,7 @@ describe("TasksPanel", () => {
593593

594594
it("does not open file when notification is dismissed", async () => {
595595
const h = createHarness();
596-
h.client.getTaskLogs.mockResolvedValue([logEntry()]);
596+
h.client.getTaskLogs.mockResolvedValue({ logs: [logEntry()] });
597597
const saveUri = vscode.Uri.file("/downloads/logs.txt");
598598
vi.mocked(vscode.window.showSaveDialog).mockResolvedValue(saveUri);
599599
h.ui.setResponse(`Logs saved to ${saveUri.fsPath}`, undefined);
@@ -612,7 +612,7 @@ describe("TasksPanel", () => {
612612

613613
it("shows warning when no logs", async () => {
614614
const h = createHarness();
615-
h.client.getTaskLogs.mockResolvedValue([]);
615+
h.client.getTaskLogs.mockResolvedValue({ logs: [] });
616616

617617
const res = await h.request(TasksApi.downloadLogs, {
618618
taskId: "task-1",
@@ -644,7 +644,7 @@ describe("TasksPanel", () => {
644644

645645
it("does nothing when user cancels", async () => {
646646
const h = createHarness();
647-
h.client.getTaskLogs.mockResolvedValue([logEntry()]);
647+
h.client.getTaskLogs.mockResolvedValue({ logs: [logEntry()] });
648648
vi.mocked(vscode.window.showSaveDialog).mockResolvedValue(undefined);
649649

650650
const res = await h.request(TasksApi.downloadLogs, {

0 commit comments

Comments
 (0)