|
21 | 21 | */
|
22 | 22 | import globalAxios, { type AxiosInstance, isAxiosError } from "axios";
|
23 | 23 | import type dayjs from "dayjs";
|
| 24 | +import type { Task } from "modules/tasks/tasks"; |
24 | 25 | import userAgentParser from "ua-parser-js";
|
25 | 26 | import { delay } from "../utils/delay";
|
26 | 27 | import { OneWayWebSocket } from "../utils/OneWayWebSocket";
|
@@ -422,6 +423,10 @@ export type GetProvisionerDaemonsParams = {
|
422 | 423 | limit?: number;
|
423 | 424 | };
|
424 | 425 |
|
| 426 | +export type TasksFilter = { |
| 427 | + username?: string; |
| 428 | +}; |
| 429 | + |
425 | 430 | /**
|
426 | 431 | * This is the container for all API methods. It's split off to make it more
|
427 | 432 | * clear where API methods should go, but it is eventually merged into the Api
|
@@ -2687,6 +2692,26 @@ class ExperimentalApiMethods {
|
2687 | 2692 |
|
2688 | 2693 | return response.data;
|
2689 | 2694 | };
|
| 2695 | + |
| 2696 | + getTasks = async (filter: TasksFilter): Promise<Task[]> => { |
| 2697 | + const queryExpressions = ["has-ai-task:true"]; |
| 2698 | + |
| 2699 | + if (filter.username) { |
| 2700 | + queryExpressions.push(`owner:${filter.username}`); |
| 2701 | + } |
| 2702 | + |
| 2703 | + const workspaces = await API.getWorkspaces({ |
| 2704 | + q: queryExpressions.join(" "), |
| 2705 | + }); |
| 2706 | + const prompts = await API.experimental.getAITasksPrompts( |
| 2707 | + workspaces.workspaces.map((workspace) => workspace.latest_build.id), |
| 2708 | + ); |
| 2709 | + |
| 2710 | + return workspaces.workspaces.map((workspace) => ({ |
| 2711 | + workspace, |
| 2712 | + prompt: prompts.prompts[workspace.latest_build.id], |
| 2713 | + })); |
| 2714 | + }; |
2690 | 2715 | }
|
2691 | 2716 |
|
2692 | 2717 | // This is a hard coded CSRF token/cookie pair for local development. In prod,
|
|
0 commit comments