mirror of
https://github.com/bendtherules/opencode-multi-model.git
synced 2026-08-18 13:42:21 +00:00
build: add direct cleanup command
This commit is contained in:
@@ -34,8 +34,8 @@ If you installed it via bun and want to use it as a project tool, import it from
|
||||
|
||||
```typescript
|
||||
// .opencode/tools/multi-model.ts
|
||||
import { openTool, closeTool } from "@username/opencode-multi-model"
|
||||
export { openTool, closeTool }
|
||||
import { openTool as open, closeTool as close } from "@username/opencode-multi-model"
|
||||
export { open, close }
|
||||
```
|
||||
|
||||
If you are developing this package locally and want to test it in a project without publishing, import via relative paths:
|
||||
@@ -44,7 +44,7 @@ If you are developing this package locally and want to test it in a project with
|
||||
// .opencode/tools/multi-model.ts
|
||||
import { openTool } from "../../src/tools/open"
|
||||
import { closeTool } from "../../src/tools/close"
|
||||
export { openTool, closeTool }
|
||||
export { openTool as open, closeTool as close }
|
||||
```
|
||||
|
||||
## Usage
|
||||
@@ -57,10 +57,14 @@ Use multi-model-open tool:
|
||||
sessionName: my-session, models: ["openai/gpt-4o", "anthropic/claude-3-5-sonnet"]
|
||||
```
|
||||
|
||||
**Close a session:**
|
||||
**Close a session (using tool):**
|
||||
```
|
||||
Use multi-model-close tool:
|
||||
sessionName: my-session, cleanupWorktrees: true
|
||||
call tool multi-model-close with sessionName: my-session
|
||||
```
|
||||
|
||||
**Close a session (using manual command):**
|
||||
```bash
|
||||
tmux kill-session -t my-session && rm -rf ~/.local/share/opencode/multi-model/my-session && git worktree prune && git branch -D $(git branch --format='%(refname:short)' --list 'opencode/my-session/*')
|
||||
```
|
||||
|
||||
### CLI Usage
|
||||
@@ -78,16 +82,15 @@ export OPENCODE_MULTI_MODEL_BINARY=kilo
|
||||
opencode-multi-model open my-session -m openai/gpt-4o
|
||||
```
|
||||
|
||||
**Close a session:**
|
||||
**Close a session (CLI command):**
|
||||
```bash
|
||||
# Just close the tmux session
|
||||
opencode-multi-model close my-session
|
||||
|
||||
# Close and cleanup worktrees
|
||||
opencode-multi-model close my-session --cleanup-worktrees
|
||||
opencode-multi-model close my-session
|
||||
```
|
||||
|
||||
# Force cleanup without confirmation
|
||||
opencode-multi-model close my-session --cleanup-worktrees --force
|
||||
**Close a session (manual command):**
|
||||
```bash
|
||||
tmux kill-session -t my-session && rm -rf ~/.local/share/opencode/multi-model/my-session && git worktree prune && git branch -D $(git branch --format='%(refname:short)' --list 'opencode/my-session/*')
|
||||
```
|
||||
|
||||
**Help:**
|
||||
|
||||
@@ -25,6 +25,7 @@ program
|
||||
sessionName,
|
||||
models: options.models,
|
||||
binaryName,
|
||||
mode: "cli",
|
||||
});
|
||||
|
||||
if (result.success) {
|
||||
|
||||
+11
-3
@@ -39,6 +39,7 @@ export async function launchMultiModel(options: MultiModelOptions): Promise<Mult
|
||||
const safeSessionName = sanitizeName(sessionName);
|
||||
const models = normalizeModels(options.models);
|
||||
const binaryName = options.binaryName || "opencode";
|
||||
const mode = options.mode || "cli";
|
||||
|
||||
if (!sessionName) {
|
||||
return { success: false, sessionName: "", error: "Error: `sessionName` must not be empty." };
|
||||
@@ -189,6 +190,10 @@ export async function launchMultiModel(options: MultiModelOptions): Promise<Mult
|
||||
const windowNames = windowPlans.map((p) => p.windowName);
|
||||
const attachCommand = `tmux attach -t ${sessionName}`;
|
||||
const cleanupCommand = `tmux kill-session -t ${sessionName} && rm -rf ~/.local/share/opencode/multi-model/${safeSessionName} && git worktree prune && git branch -D $(git branch --format='%(refname:short)' --list 'opencode/${safeSessionName}/*')`;
|
||||
const primaryCleanup =
|
||||
mode === "tool"
|
||||
? `call tool multi-model-close with sessionName: ${sessionName}`
|
||||
: `opencode-multi-model close ${sessionName}`;
|
||||
|
||||
if (failedModels.length > 0) {
|
||||
return {
|
||||
@@ -200,7 +205,9 @@ export async function launchMultiModel(options: MultiModelOptions): Promise<Mult
|
||||
`Succeeded: ${succeededModels.length > 0 ? succeededModels.join(", ") : "none"}.`,
|
||||
`Failed: ${failedModels.join(", ")}.`,
|
||||
`Attach with \`${attachCommand}\` to inspect the session.`,
|
||||
`Cleanup with \n\`${cleanupCommand}\`\nwhen done.`,
|
||||
`Cleanup when done using either:`,
|
||||
`1. ${primaryCleanup}`,
|
||||
`2. Or run manually: \`${cleanupCommand}\``,
|
||||
].join("\n"),
|
||||
};
|
||||
}
|
||||
@@ -211,8 +218,9 @@ export async function launchMultiModel(options: MultiModelOptions): Promise<Mult
|
||||
windows: windowNames,
|
||||
instructions: [
|
||||
`Use \`${attachCommand}\` to join session.`,
|
||||
`When finished, clean up worktrees with:`,
|
||||
`\`${cleanupCommand}\``,
|
||||
`When finished, clean up using either:`,
|
||||
`1. ${primaryCleanup}`,
|
||||
`2. Or run manually: \`${cleanupCommand}\``,
|
||||
].join("\n"),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ export const openTool = tool({
|
||||
sessionName: args.sessionName,
|
||||
models: args.models,
|
||||
binaryName,
|
||||
mode: "tool",
|
||||
});
|
||||
|
||||
context.metadata({
|
||||
|
||||
@@ -8,6 +8,8 @@ export interface MultiModelOptions {
|
||||
models: string[];
|
||||
/** Binary name to use ('opencode' or 'kilo'). Defaults to 'opencode'. */
|
||||
binaryName?: string;
|
||||
/** Caller context: 'cli' shows shell commands, 'tool' shows tool instructions. */
|
||||
mode?: "cli" | "tool";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user