diff --git a/console/index.html b/console/index.html
index f3321b1..ca357aa 100644
--- a/console/index.html
+++ b/console/index.html
@@ -92,17 +92,41 @@
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/console/src/deploy.ts b/console/src/deploy.ts
index 0e181bf..e190f3b 100644
--- a/console/src/deploy.ts
+++ b/console/src/deploy.ts
@@ -37,6 +37,16 @@ function fillOptions(sel: HTMLSelectElement, names: string[], keepNoneFirst: boo
sel.innerHTML = opts.join("");
}
+// list_k8s_contexts / list_namespaces response shapes (oab-mcp, studio#104) —
+// kept minimal (just what this panel reads), not the tools' full contract.
+interface K8sContextsResponse {
+ contexts: { name: string }[];
+ current_context: string | null;
+}
+interface K8sNamespacesResponse {
+ namespaces: string[];
+}
+
export type DeployMode = { kind: "new-fleet" } | { kind: "add-instance"; fleetName: string };
// What the panel reports back once a deploy + fleets.toml write both succeed —
@@ -75,9 +85,18 @@ export function initDeployPanel(deps: DeployPanelDeps): DeployPanelHandle | null
const cancelBtn = document.getElementById("deploy-cancel") as HTMLButtonElement | null;
const identityForm = document.getElementById("deploy-identity-form") as HTMLFormElement | null;
const nameInput = document.getElementById("deploy-fleet-name") as HTMLInputElement | null;
+ const providerSel = document.getElementById("deploy-provider") as HTMLSelectElement | null;
+ const awsFieldsEl = document.getElementById("deploy-aws-fields");
const regionInput = document.getElementById("deploy-region") as HTMLInputElement | null;
const profileInput = document.getElementById("deploy-profile") as HTMLInputElement | null;
const principalInput = document.getElementById("deploy-principal") as HTMLInputElement | null;
+ const k8sFieldsEl = document.getElementById("deploy-k8s-fields");
+ const k8sContextSel = document.getElementById("deploy-k8s-context") as HTMLSelectElement | null;
+ // Namespace is a text input with a