feat: Enhance login page UI with delayed redirect instead of transparent 307
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 8s

This commit is contained in:
OG T
2026-06-08 18:37:35 +08:00
parent 36ea11ea0f
commit 752a4a45d7
36 changed files with 2589 additions and 112 deletions

View File

@@ -1,10 +1,22 @@
from .client import VibeWorkAgentSDK, VibeWorkApiError
from .models import (
AgentCard,
ClaimTaskResponse,
ClaimTaskRequest,
ClaimTaskResponse,
SubmitSolutionRequest,
SubmitSolutionResponse,
ListOpenTasksMcpResponse,
CreateSubTaskRequest,
CreateSubTaskResponse,
RequestPeerReviewRequest,
RequestPeerReviewResponse,
BroadcastHelpSignalRequest,
BroadcastHelpSignalResponse,
QueryAgentMemoryRequest,
QueryAgentMemoryResponse,
RentApiResourceRequest,
RentApiResourceResponse,
A2AResourceType,
TaskBounty,
)
@@ -17,4 +29,16 @@ __all__ = [
"SubmitSolutionRequest",
"SubmitSolutionResponse",
"TaskBounty",
"ListOpenTasksMcpResponse",
"CreateSubTaskRequest",
"CreateSubTaskResponse",
"RequestPeerReviewRequest",
"RequestPeerReviewResponse",
"BroadcastHelpSignalRequest",
"BroadcastHelpSignalResponse",
"QueryAgentMemoryRequest",
"QueryAgentMemoryResponse",
"RentApiResourceRequest",
"RentApiResourceResponse",
"A2AResourceType",
]

View File

@@ -12,6 +12,17 @@ from .models import (
ClaimTaskResponse,
SubmitSolutionRequest,
SubmitSolutionResponse,
ListOpenTasksMcpResponse,
CreateSubTaskRequest,
CreateSubTaskResponse,
RequestPeerReviewRequest,
RequestPeerReviewResponse,
BroadcastHelpSignalRequest,
BroadcastHelpSignalResponse,
QueryAgentMemoryRequest,
QueryAgentMemoryResponse,
RentApiResourceRequest,
RentApiResourceResponse,
TaskBounty,
)
@@ -81,6 +92,49 @@ class TasksModule:
response = self.client._request("post", "/api/mcp/submit_solution", payload=payload.model_dump())
return SubmitSolutionResponse.model_validate(response)
def list_open_bounties_via_mcp(
self,
limit: int = 5,
skills: Optional[List[str]] = None,
difficulty: Optional[str] = None,
) -> ListOpenTasksMcpResponse:
payload = {
"skills": skills or [],
"limit": min(max(limit, 1), 20),
}
if difficulty:
payload["difficulty"] = difficulty
response = self.client._request("post", "/api/mcp/list_open_tasks", payload=payload)
return ListOpenTasksMcpResponse.model_validate(response)
@dataclass
class A2AModule:
client: "VibeWorkAgentSDK"
def list_open_bounties(self, limit: int = 8) -> ListOpenTasksMcpResponse:
return self.client.tasks.list_open_bounties_via_mcp(limit=limit)
def create_sub_task(self, request: CreateSubTaskRequest) -> CreateSubTaskResponse:
response = self.client._request("post", "/api/mcp/create_sub_task", payload=request.model_dump())
return CreateSubTaskResponse.model_validate(response)
def request_peer_review(self, request: RequestPeerReviewRequest) -> RequestPeerReviewResponse:
response = self.client._request("post", "/api/mcp/request_peer_review", payload=request.model_dump())
return RequestPeerReviewResponse.model_validate(response)
def broadcast_help_signal(self, request: BroadcastHelpSignalRequest) -> BroadcastHelpSignalResponse:
response = self.client._request("post", "/api/mcp/broadcast_help_signal", payload=request.model_dump())
return BroadcastHelpSignalResponse.model_validate(response)
def query_agent_memory(self, request: QueryAgentMemoryRequest) -> QueryAgentMemoryResponse:
response = self.client._request("post", "/api/mcp/query_agent_memory", payload=request.model_dump())
return QueryAgentMemoryResponse.model_validate(response)
def rent_api_resource(self, request: RentApiResourceRequest) -> RentApiResourceResponse:
response = self.client._request("post", "/api/mcp/rent_api_resource", payload=request.model_dump())
return RentApiResourceResponse.model_validate(response)
class VibeWorkAgentSDK:
def __init__(self, base_url: str = "https://agent.wooo.work", api_key: str | None = None):
@@ -93,6 +147,7 @@ class VibeWorkAgentSDK:
self.identity = IdentityModule(self)
self.tasks = TasksModule(self)
self.a2a = A2AModule(self)
def _request(
self,

View File

@@ -64,3 +64,95 @@ class SubmitSolutionResponse(BaseModel):
submission_id: str
status: Literal["VERIFYING"]
estimated_judge_complete_at: Optional[str] = None
ValidationMode = Literal["VITEST_UNIT", "PLAYWRIGHT_E2E", "AST_PARSING", "VISUAL_REGRESSION"]
A2AResourceType = Literal["GPT_4O", "CLAUDE_3_5_SONNET", "EMBEDDINGS"]
class AcceptanceRule(BaseModel):
assertion: str
expected: object
description: Optional[str] = None
class AcceptanceCriteria(BaseModel):
validation_mode: ValidationMode
test_file_content: str
rules: Optional[List[AcceptanceRule]] = None
class ListOpenTasksMcpResponse(BaseModel):
tasks: List[TaskBounty] = Field(default_factory=list)
total_open: int
stockout_warning: bool
class CreateSubTaskRequest(BaseModel):
parent_task_id: str
claim_token: str
title: str
description: str
reward_amount: int
acceptance_criteria: AcceptanceCriteria
class CreateSubTaskResponse(BaseModel):
sub_task_id: str
status: Literal["DRAFT", "OPEN"]
class RequestPeerReviewRequest(BaseModel):
parent_task_id: str
claim_token: str
code_snippet: str
review_instructions: str
class RequestPeerReviewResponse(BaseModel):
review_task_id: str
status: Literal["OPEN"]
cost: int
message: str
class BroadcastHelpSignalRequest(BaseModel):
parent_task_id: str
claim_token: str
error_message: str
contextual_code: Optional[str] = None
class BroadcastHelpSignalResponse(BaseModel):
sos_task_id: str
status: Literal["OPEN"]
message: str
class QueryAgentMemoryRequest(BaseModel):
query: str
error_code: Optional[str] = None
class QueryAgentMemoryResult(BaseModel):
task_title: str
deliverables: object
similarity_score: Optional[float] = None
class QueryAgentMemoryResponse(BaseModel):
results: List[QueryAgentMemoryResult]
class RentApiResourceRequest(BaseModel):
agent_id: str
resource_type: A2AResourceType
duration_minutes: int
class RentApiResourceResponse(BaseModel):
status: Literal["GRANTED", "INSUFFICIENT_FUNDS"]
proxy_url: Optional[str] = None
proxy_token: Optional[str] = None
cost_deducted: Optional[int] = None
message: str