worker: support typed initial submit on spawn
This commit is contained in:
@@ -509,7 +509,7 @@ Deno.test("workspace Worker sidebar links New to the dedicated create page", asy
|
||||
);
|
||||
assert(
|
||||
newWorkerPage.includes("worker-launch-form") &&
|
||||
newWorkerPage.includes("buildBrowserCreateWorkerRequest") &&
|
||||
newWorkerPage.includes("buildCreateWorkspaceWorkerRequest") &&
|
||||
newWorkerPage.includes("/workers/launch-options"),
|
||||
"New Worker page should own launch options and creation form behavior",
|
||||
);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {
|
||||
buildBrowserCreateWorkerRequest,
|
||||
buildCreateWorkspaceWorkerRequest,
|
||||
defaultWorkerLaunchForm,
|
||||
} from "./worker-launch.ts";
|
||||
import type { WorkerLaunchOptionsResponse } from "./types.ts";
|
||||
@@ -182,8 +182,8 @@ Deno.test("defaultWorkerLaunchForm preserves a Ticket repository target", () =>
|
||||
assertEquals(form.working_directory_selector, "work/ticket");
|
||||
});
|
||||
|
||||
Deno.test("buildBrowserCreateWorkerRequest sends working_directory id and relative cwd only", () => {
|
||||
const request = buildBrowserCreateWorkerRequest({
|
||||
Deno.test("buildCreateWorkspaceWorkerRequest sends working_directory id and relative cwd only", () => {
|
||||
const request = buildCreateWorkspaceWorkerRequest({
|
||||
runtime_id: "embedded",
|
||||
display_name: "Worker",
|
||||
profile: "builtin:coder",
|
||||
@@ -198,7 +198,7 @@ Deno.test("buildBrowserCreateWorkerRequest sends working_directory id and relati
|
||||
runtime_id: "embedded",
|
||||
display_name: "Worker",
|
||||
profile: "builtin:coder",
|
||||
initial_text: "go",
|
||||
initial_submit: [{ kind: "text", content: "go" }],
|
||||
working_directory: {
|
||||
working_directory_id: "wd-1-repo",
|
||||
relative_cwd: "crates/yoi",
|
||||
@@ -206,8 +206,23 @@ Deno.test("buildBrowserCreateWorkerRequest sends working_directory id and relati
|
||||
});
|
||||
});
|
||||
|
||||
Deno.test("buildBrowserCreateWorkerRequest omits working_directory for embedded no-workdir launches", () => {
|
||||
const request = buildBrowserCreateWorkerRequest({
|
||||
Deno.test("buildCreateWorkspaceWorkerRequest sends no initial segments for an empty draft", () => {
|
||||
const request = buildCreateWorkspaceWorkerRequest({
|
||||
runtime_id: "embedded",
|
||||
display_name: "Worker",
|
||||
profile: "builtin:companion",
|
||||
initial_text: " ",
|
||||
working_directory_id: "",
|
||||
working_directory_repository_id: "",
|
||||
working_directory_selector: "",
|
||||
relative_cwd: "",
|
||||
});
|
||||
|
||||
assertEquals(request.initial_submit, []);
|
||||
});
|
||||
|
||||
Deno.test("buildCreateWorkspaceWorkerRequest omits working_directory for embedded no-workdir launches", () => {
|
||||
const request = buildCreateWorkspaceWorkerRequest({
|
||||
runtime_id: "embedded",
|
||||
display_name: "Worker",
|
||||
profile: "builtin:companion",
|
||||
@@ -222,6 +237,6 @@ Deno.test("buildBrowserCreateWorkerRequest omits working_directory for embedded
|
||||
runtime_id: "embedded",
|
||||
display_name: "Worker",
|
||||
profile: "builtin:companion",
|
||||
initial_text: "chat",
|
||||
initial_submit: [{ kind: "text", content: "chat" }],
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import type { Segment } from "$lib/generated/protocol";
|
||||
|
||||
import type {
|
||||
BrowserWorkerWorkingDirectorySelection,
|
||||
WorkerLaunchOptionsResponse,
|
||||
@@ -14,11 +16,11 @@ export type WorkerLaunchFormState = {
|
||||
relative_cwd: string;
|
||||
};
|
||||
|
||||
export type BrowserCreateWorkerRequest = {
|
||||
export type CreateWorkspaceWorkerRequest = {
|
||||
runtime_id: string;
|
||||
display_name: string;
|
||||
profile: string;
|
||||
initial_text: string;
|
||||
initial_submit: Segment[];
|
||||
working_directory?: BrowserWorkerWorkingDirectorySelection;
|
||||
};
|
||||
|
||||
@@ -92,14 +94,16 @@ export function defaultWorkerLaunchForm(
|
||||
};
|
||||
}
|
||||
|
||||
export function buildBrowserCreateWorkerRequest(
|
||||
export function buildCreateWorkspaceWorkerRequest(
|
||||
form: WorkerLaunchFormState,
|
||||
): BrowserCreateWorkerRequest {
|
||||
const request: BrowserCreateWorkerRequest = {
|
||||
): CreateWorkspaceWorkerRequest {
|
||||
const request: CreateWorkspaceWorkerRequest = {
|
||||
runtime_id: form.runtime_id,
|
||||
display_name: form.display_name,
|
||||
profile: form.profile,
|
||||
initial_text: form.initial_text,
|
||||
initial_submit: form.initial_text.trim()
|
||||
? [{ kind: "text", content: form.initial_text }]
|
||||
: [],
|
||||
};
|
||||
if (form.working_directory_id) {
|
||||
request.working_directory = {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import { untrack } from 'svelte';
|
||||
import { workspaceApiPath } from '$lib/workspace/api/http';
|
||||
import { formatCurrentWorkdirRevision } from '$lib/workspace/settings/workdir-revision';
|
||||
import { buildBrowserCreateWorkerRequest, defaultWorkerLaunchForm } from '$lib/workspace/sidebar/worker-launch';
|
||||
import { buildCreateWorkspaceWorkerRequest, defaultWorkerLaunchForm } from '$lib/workspace/sidebar/worker-launch';
|
||||
import type {
|
||||
BrowserCreateWorkerResponse,
|
||||
BrowserWorkingDirectoryCreateResponse,
|
||||
@@ -210,7 +210,7 @@
|
||||
const response = await fetch(workerApiPath('/workers'), {
|
||||
method: 'POST',
|
||||
headers: { 'content-type': 'application/json' },
|
||||
body: JSON.stringify(buildBrowserCreateWorkerRequest({
|
||||
body: JSON.stringify(buildCreateWorkspaceWorkerRequest({
|
||||
runtime_id: runtimeId,
|
||||
display_name: displayName,
|
||||
profile,
|
||||
|
||||
Reference in New Issue
Block a user