refactor: update task creation to use dynamic initial label from workflow config

This commit is contained in:
Lauren ten Hoor
2026-02-15 18:56:10 +08:00
parent a85f4fd33e
commit 89245f8ffa

View File

@@ -17,16 +17,19 @@ import type { StateLabel } from "../providers/provider.js";
import { DEFAULT_WORKFLOW, getStateLabels } from "../workflow.js"; import { DEFAULT_WORKFLOW, getStateLabels } from "../workflow.js";
import { requireWorkspaceDir, resolveProject, resolveProvider } from "../tool-helpers.js"; import { requireWorkspaceDir, resolveProject, resolveProvider } from "../tool-helpers.js";
/** Derive the initial state label from the workflow config. */
const INITIAL_LABEL = DEFAULT_WORKFLOW.states[DEFAULT_WORKFLOW.initial].label;
export function createTaskCreateTool(api: OpenClawPluginApi) { export function createTaskCreateTool(api: OpenClawPluginApi) {
return (ctx: ToolContext) => ({ return (ctx: ToolContext) => ({
name: "task_create", name: "task_create",
label: "Task Create", label: "Task Create",
description: `Create a new task (issue) in the project's issue tracker. Use this to file bugs, features, or tasks from chat. description: `Create a new task (issue) in the project's issue tracker. Use this to file bugs, features, or tasks from chat.
**IMPORTANT:** Always creates in "Planning" unless the user explicitly asks to start work immediately. Never set label to "To Do" on your own — "Planning" issues require human review before entering the queue. **IMPORTANT:** Always creates in "${INITIAL_LABEL}" unless the user explicitly asks to start work immediately. Never set label to "To Do" on your own — "${INITIAL_LABEL}" issues require human review before entering the queue.
Examples: Examples:
- Default: { title: "Fix login bug" } → created in Planning - Default: { title: "Fix login bug" } → created in ${INITIAL_LABEL}
- User says "create and start working": { title: "Implement auth", description: "...", label: "To Do" }`, - User says "create and start working": { title: "Implement auth", description: "...", label: "To Do" }`,
parameters: { parameters: {
type: "object", type: "object",
@@ -46,7 +49,7 @@ Examples:
}, },
label: { label: {
type: "string", type: "string",
description: `State label. Defaults to "Planning" — only use "To Do" when the user explicitly asks to start work immediately.`, description: `State label. Defaults to "${INITIAL_LABEL}" — only use "To Do" when the user explicitly asks to start work immediately.`,
enum: getStateLabels(DEFAULT_WORKFLOW), enum: getStateLabels(DEFAULT_WORKFLOW),
}, },
assignees: { assignees: {
@@ -65,7 +68,7 @@ Examples:
const groupId = params.projectGroupId as string; const groupId = params.projectGroupId as string;
const title = params.title as string; const title = params.title as string;
const description = (params.description as string) ?? ""; const description = (params.description as string) ?? "";
const label = (params.label as StateLabel) ?? "Planning"; const label = (params.label as StateLabel) ?? INITIAL_LABEL;
const assignees = (params.assignees as string[] | undefined) ?? []; const assignees = (params.assignees as string[] | undefined) ?? [];
const pickup = (params.pickup as boolean) ?? false; const pickup = (params.pickup as boolean) ?? false;
const workspaceDir = requireWorkspaceDir(ctx); const workspaceDir = requireWorkspaceDir(ctx);