From 67cf147677ca4f873b314ddd7bd6459faa9aa3ba Mon Sep 17 00:00:00 2001 From: Dotta Date: Mon, 20 Apr 2026 10:00:15 -0500 Subject: [PATCH] fix(workspaces): share routine branch variable name Co-Authored-By: Paperclip --- packages/shared/src/constants.ts | 2 ++ packages/shared/src/index.ts | 1 + server/src/services/routines.ts | 2 +- server/src/services/workspace-runtime.ts | 2 ++ ui/src/components/RoutineRunVariablesDialog.tsx | 10 +++++++--- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts index 035e7bb7edb..810bfd93e45 100644 --- a/packages/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -68,6 +68,8 @@ export const AGENT_ROLE_LABELS: Record = { export const AGENT_DEFAULT_MAX_CONCURRENT_RUNS = 5; +export const WORKSPACE_BRANCH_ROUTINE_VARIABLE = "workspaceBranch"; + export const AGENT_ICON_NAMES = [ "bot", "cpu", diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index bddbb76949e..ae8f9719512 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -10,6 +10,7 @@ export { AGENT_ROLES, AGENT_ROLE_LABELS, AGENT_DEFAULT_MAX_CONCURRENT_RUNS, + WORKSPACE_BRANCH_ROUTINE_VARIABLE, AGENT_ICON_NAMES, ISSUE_STATUSES, INBOX_MINE_ISSUE_STATUSES, diff --git a/server/src/services/routines.ts b/server/src/services/routines.ts index 1665d6d7fe8..60319620982 100644 --- a/server/src/services/routines.ts +++ b/server/src/services/routines.ts @@ -28,6 +28,7 @@ import type { UpdateRoutineTrigger, } from "@paperclipai/shared"; import { + WORKSPACE_BRANCH_ROUTINE_VARIABLE, getBuiltinRoutineVariableValues, extractRoutineVariableNames, interpolateRoutineTemplate, @@ -49,7 +50,6 @@ const OPEN_ISSUE_STATUSES = ["backlog", "todo", "in_progress", "in_review", "blo const LIVE_HEARTBEAT_RUN_STATUSES = ["queued", "running"]; const TERMINAL_ISSUE_STATUSES = new Set(["done", "cancelled"]); const MAX_CATCH_UP_RUNS = 25; -const WORKSPACE_BRANCH_ROUTINE_VARIABLE = "workspaceBranch"; const WEEKDAY_INDEX: Record = { Sun: 0, Mon: 1, diff --git a/server/src/services/workspace-runtime.ts b/server/src/services/workspace-runtime.ts index c86e3f229c9..7ff44f7add2 100644 --- a/server/src/services/workspace-runtime.ts +++ b/server/src/services/workspace-runtime.ts @@ -2272,6 +2272,8 @@ export function buildWorkspaceRuntimeDesiredStatePatch(input: { const nextState: WorkspaceRuntimeDesiredState = input.action === "stop" ? "stopped" : "running"; const applyActionState = (index: number) => { const key = String(index); + // Manual services are intentionally left under operator control even when + // an API action targets that individual service. if (nextServiceStates[key] === "manual") return; nextServiceStates[key] = nextState; }; diff --git a/ui/src/components/RoutineRunVariablesDialog.tsx b/ui/src/components/RoutineRunVariablesDialog.tsx index cff77546da2..b027b2d5be8 100644 --- a/ui/src/components/RoutineRunVariablesDialog.tsx +++ b/ui/src/components/RoutineRunVariablesDialog.tsx @@ -1,5 +1,11 @@ import { useCallback, useEffect, useMemo, useState } from "react"; -import type { Agent, IssueExecutionWorkspaceSettings, Project, RoutineVariable } from "@paperclipai/shared"; +import { + WORKSPACE_BRANCH_ROUTINE_VARIABLE, + type Agent, + type IssueExecutionWorkspaceSettings, + type Project, + type RoutineVariable, +} from "@paperclipai/shared"; import { useQuery } from "@tanstack/react-query"; import { instanceSettingsApi } from "../api/instanceSettings"; import { queryKeys } from "../lib/queryKeys"; @@ -28,8 +34,6 @@ import { } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; -const WORKSPACE_BRANCH_ROUTINE_VARIABLE = "workspaceBranch"; - function buildInitialValues(variables: RoutineVariable[]) { return Object.fromEntries(variables.map((variable) => [variable.name, variable.defaultValue ?? ""])); }