summaryrefslogtreecommitdiffhomepage
path: root/packages/cli/src/args.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-28 21:56:23 +0900
committerAdam Malczewski <[email protected]>2026-06-28 21:56:23 +0900
commit8175a3df065155c5a164e29bd1c47aad392ae555 (patch)
tree2c5d02672d14c9fe51b785196c28d6d9f72229fd /packages/cli/src/args.ts
parent6dd9ea9b935e5011c16faed6c869c976cf5ff172 (diff)
downloaddispatch-8175a3df065155c5a164e29bd1c47aad392ae555.tar.gz
dispatch-8175a3df065155c5a164e29bd1c47aad392ae555.zip
feat(cli): add --title flag to set tab title when summoning
Add a --title <title> flag to the dispatch CLI so a summoned agent's conversation/tab gets a human-readable title at creation time instead of the auto-derived default (Untitled until the first message append). The title is carried as an additive optional ChatRequest.title field (the HTTP client-server contract), parsed + trimmed server-side in parseChatBody, and persisted via the conversation store's setConversationTitle in the POST /chat route BEFORE the turn starts — so the title is set atomically with creation and before --open signals the frontend to open the tab. No second HTTP round-trip is needed. A whitespace-only title is treated as absent (auto-derive); a non-string title yields HTTP 400. A title-set failure is logged but never blocks the turn (the title is a nicety, the answer is not). The change is purely additive — no existing behavior or assertion changes. Verification: typecheck EXIT 0; test 2021 passed | 6 skipped | 0 failed; check EXIT 0 (12 pre-existing warnings in untouched files).
Diffstat (limited to 'packages/cli/src/args.ts')
-rw-r--r--packages/cli/src/args.ts7
1 files changed, 7 insertions, 0 deletions
diff --git a/packages/cli/src/args.ts b/packages/cli/src/args.ts
index 52f1fba..581d4c2 100644
--- a/packages/cli/src/args.ts
+++ b/packages/cli/src/args.ts
@@ -27,6 +27,7 @@ export type ParsedCommand =
readonly showReasoning: boolean;
readonly open: boolean;
readonly workspaceId?: string | undefined;
+ readonly title?: string | undefined;
}
| {
readonly kind: "list";
@@ -307,6 +308,7 @@ export function parseArgs(argv: readonly string[], opts: ParseOpts): ParsedComma
let open = false;
let server = opts.defaultServer;
let workspaceId: string | undefined;
+ let title: string | undefined;
for (let i = 1; i < argv.length; i++) {
const arg = argv[i] as string;
@@ -338,6 +340,10 @@ export function parseArgs(argv: readonly string[], opts: ParseOpts): ParsedComma
case "--open":
open = true;
break;
+ case "--title":
+ if (i + 1 >= argv.length) return { kind: "error", message: "--title requires a value" };
+ title = argv[++i];
+ break;
case "--effort":
if (i + 1 >= argv.length)
return {
@@ -383,5 +389,6 @@ export function parseArgs(argv: readonly string[], opts: ParseOpts): ParsedComma
showReasoning,
open,
...(workspaceId !== undefined && { workspaceId }),
+ ...(title !== undefined && { title }),
};
}