Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 13 additions & 0 deletions src/components/Root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ import { ProjectInvokePickerScreen } from "../handlers/project/invoke/screen.tsx
import { AddRuntimeScreen } from "../handlers/project/add/runtime/screen.tsx";
import { AddMemoryScreen } from "../handlers/project/add/memory/screen.tsx";
import { ProjectStatusScreen } from "../handlers/project/status/screen.tsx";
import { ProjectRemoveScreen } from "../handlers/project/remove/screen.tsx";
import { HelpScreen, RootScreen } from "../handlers/screen.tsx";
import type { Context } from "../router";

Expand Down Expand Up @@ -821,6 +822,18 @@ export function Root({ path, ctx, core, queryClient }: RootProps) {
path="agentcore/project/add/memory"
element={<AddMemoryScreen ctx={ctx} core={core} />}
/>
<Route
path="agentcore/project/remove"
element={<ProjectRemoveScreen ctx={ctx} core={core} />}
/>
<Route
path="agentcore/project/remove/:resourceType"
element={<ProjectRemoveScreen ctx={ctx} core={core} />}
/>
<Route
path="agentcore/project/remove/:resourceType/:resourceIndex"
element={<ProjectRemoveScreen ctx={ctx} core={core} />}
/>
{/* Every known command without a screen of its own: a group opens its
menu and a leaf its interactive help. Unknown routes retain the
help-and-exit fallback. */}
Expand Down
12 changes: 9 additions & 3 deletions src/handlers/project/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export function createProjectHandler({ core, io }: ProjectHandlerConfig): Router
"deploy",
"status",
"add",
"remove",
);

// Without a default, a bare `agentcore project` falls back to Commander's help
Expand All @@ -59,9 +60,14 @@ export function createProjectHandler({ core, io }: ProjectHandlerConfig): Router
project.handler(createAddProjectResourceHandler(config, core));
project.handler(createExportProjectResourceHandler({ projectManager, core, io }));
project.handler(
withProject({ projectManager: config.projectManager })(
createRemoveProjectHandler({ projectManager: config.projectManager, io: config.io }),
),
createRemoveProjectHandler({
projectManager: config.projectManager,
io: config.io,
middlewares: [
withProject({ projectManager: config.projectManager }),
withTuiWhenInteractive(core, io),
],
}),
);
project.handler(
withProject({ projectManager: config.projectManager })(
Expand Down
2 changes: 1 addition & 1 deletion src/handlers/project/project.screen.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ describe("project menu: command-line-only subcommands", () => {
const r = renderScreen("/agentcore/project");

await waitForText(r.lastFrame, "command line only");
const withScreens = ["create", "deploy", "invoke", "build", "status", "add"];
const withScreens = ["create", "deploy", "invoke", "build", "status", "add", "remove"];
const { screens, cliOnly } = menuEntries(r.lastFrame()!);
expect(screens.toSorted()).toEqual(withScreens.toSorted());
expect(cliOnly.toSorted()).toEqual(
Expand Down
4 changes: 3 additions & 1 deletion src/handlers/project/remove/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { createInterface } from "node:readline/promises";
import { argument, createHandler, flag, ProjectKey } from "../../../router";
import { argument, createHandler, flag, ProjectKey, type Middleware } from "../../../router";
import { InputValidationError, UserCancellationError } from "../../../errors";
import z from "zod";
import type { AppIO } from "../../../io";
Expand All @@ -12,12 +12,14 @@ import { projectMutationResource, projectReference, type ProjectMutationResult }
type RemoveProjectResourceConfig = {
projectManager: ProjectManager;
io: AppIO;
middlewares?: Middleware[];
};

export const createRemoveProjectHandler = (config: RemoveProjectResourceConfig) =>
createHandler({
name: "remove",
description: "remove a resource from the project",
middlewares: config.middlewares,
flags: [
flag("name", "name of the resource to remove", z.string().min(1).optional()),
flag("gateway", "name of the parent Gateway for a Target", z.string().min(1).optional()),
Expand Down
Loading
Loading