feat: select workspace by name via /workspaces/lookup

Add workspace_name input; the runner resolves it to a workspace_id through
GET {api_base}/workspaces/lookup?user_id=... before uploading the agent.
workspace_id remains as an explicit override. Name matching is NFC-normalized
(handles Korean NFD/NFC) with a case-insensitive fallback, and a no-match
error lists the available workspace names. Requires one of name/id.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-07 16:12:04 +09:00
co-authored by Claude Opus 4.8
parent 1f34c9186f
commit 6b8cff4556
2 changed files with 92 additions and 7 deletions
+14 -5
View File
@@ -21,9 +21,11 @@
# 그러면 api_base = http://agent-backend:8000 (container_name, 내부 포트 8000).
#
# 실행 흐름 (SKILL.md §0.6 경로 A):
# upload-agent 등록 → SSE start → stage_complete 자동 confirm → execution_complete
# workspaces/lookup(이름→UUID) → upload-agent 등록 → SSE start →
# stage_complete 자동 confirm → execution_complete
# stage_error 발생 시 세션을 cancel 하고 실패 처리한다.
# 전체 이벤트 로그 / final_output / summary 는 아티팩트로 저장된다.
# ※ workspace_name(작업실 이름) 또는 workspace_id(UUID) 중 하나는 반드시 지정.
#
# 실행 시간 상한 (주의):
# Gitea 의 [actions] ENDLESS_TASK_TIMEOUT 과 act_runner 의 runner.timeout 기본값이
@@ -48,10 +50,15 @@ on:
required: false
default: 'jsahn'
type: string
workspace_id:
description: 'AgentBackend workspace_id'
workspace_name:
description: '작업실 이름 (예: 팬아웃 테스트). GET /workspaces/lookup 으로 UUID 자동 해석'
required: false
default: 'e1d0baed-cec9-44af-9989-b7aab09bcfd1'
default: ''
type: string
workspace_id:
description: '작업실 UUID 직접 지정(override). 비우면 workspace_name 으로 해석'
required: false
default: ''
type: string
user_input:
description: 'Agent 에 전달할 user_input'
@@ -95,16 +102,18 @@ jobs:
YAML_PATH: ${{ inputs.yaml_path }}
API_BASE: ${{ inputs.api_base }}
AGENT_USER_ID: ${{ inputs.user_id }}
AGENT_WORKSPACE_NAME: ${{ inputs.workspace_name }}
AGENT_WORKSPACE_ID: ${{ inputs.workspace_id }}
AGENT_USER_INPUT: ${{ inputs.user_input }}
START_STAGE_INDEX: ${{ inputs.start_stage_index }}
MAX_RUNTIME_SECONDS: ${{ inputs.max_runtime_seconds }}
# '=' 형식 필수: user_input 이 '-' 로 시작하는 자유 텍스트여도 argparse 가 값으로 인식
# '=' 형식 필수: 값이 '-' 로 시작하는 자유 텍스트여도 argparse 가 값으로 인식
run: |
python scripts/run_agent_api.py \
--yaml-path="$YAML_PATH" \
--api-base="$API_BASE" \
--user-id="$AGENT_USER_ID" \
--workspace-name="$AGENT_WORKSPACE_NAME" \
--workspace-id="$AGENT_WORKSPACE_ID" \
--user-input="$AGENT_USER_INPUT" \
--start-stage-index="$START_STAGE_INDEX" \