Post pipeline stage comment on task creation

New tasks with a Work Category now get a comment listing all stages,
handlers, and the starting stage so the workflow is visible in ClickUp.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
clickup-runner
PeninsulaInd 2026-04-15 12:54:21 -05:00
parent d6f9620d5f
commit 1750c538ff
1 changed files with 36 additions and 0 deletions

View File

@ -22,10 +22,26 @@ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from dotenv import load_dotenv
from cheddahbot.clickup import ClickUpClient
from clickup_runner.skill_map import SKILL_MAP
DEFAULT_ASSIGNEE = 10765627 # Bryan Bigari
def _build_stage_comment(category: str) -> str:
"""Build a pipeline stages comment from SKILL_MAP for a task type."""
stages = SKILL_MAP.get(category)
if not stages:
return ""
lines = ["Pipeline stages for %s:" % category]
for i, (stage, route) in enumerate(stages.items(), 1):
handler = route.handler if route.handler != "claude" else "Claude"
lines.append(
" %d. %s (%s) -> %s" % (i, stage, handler, route.next_status)
)
lines.append('Set Stage to "%s" to start.' % list(stages.keys())[0])
return "\n".join(lines)
def _date_to_unix_ms(date_str: str) -> int:
"""Convert YYYY-MM-DD to Unix milliseconds (noon UTC).
@ -97,6 +113,12 @@ def main():
default="",
help="Time estimate (e.g. '2h', '30m', '1h30m')",
)
parser.add_argument(
"--dependency",
action="append",
default=[],
help="Task ID this task is blocked by (repeatable)",
)
args = parser.parse_args()
api_token = os.environ.get("CLICKUP_API_TOKEN", "")
@ -158,6 +180,14 @@ def main():
task_id, list_id, "Work Category", args.category
)
# Add dependencies (blocked by)
for dep_id in args.dependency:
if not client.add_dependency(task_id, dep_id):
print(
f"Warning: Failed to add dependency on {dep_id}",
file=sys.stderr,
)
# Set any additional custom fields
for field_name, field_value in custom_fields.items():
ok = client.set_custom_field_smart(
@ -169,6 +199,12 @@ def main():
file=sys.stderr,
)
# Post pipeline stages comment if task type has stages
if args.category:
stage_comment = _build_stage_comment(args.category)
if stage_comment:
client.add_comment(task_id, stage_comment)
print(json.dumps({
"id": task_id,
"name": args.name,