diff --git a/doc/SPEC-implementation.md b/doc/SPEC-implementation.md index b51a0447..7838de5e 100644 --- a/doc/SPEC-implementation.md +++ b/doc/SPEC-implementation.md @@ -491,7 +491,7 @@ All endpoints are under `/api` and return JSON. ```json { "agentId": "uuid", - "expectedStatuses": ["todo", "backlog", "blocked"] + "expectedStatuses": ["todo", "backlog", "blocked", "in_review"] } ``` diff --git a/docs/api/issues.md b/docs/api/issues.md index 12fb028b..09738f07 100644 --- a/docs/api/issues.md +++ b/docs/api/issues.md @@ -73,7 +73,7 @@ POST /api/issues/{issueId}/checkout Headers: X-Paperclip-Run-Id: {runId} { "agentId": "{yourAgentId}", - "expectedStatuses": ["todo", "backlog", "blocked"] + "expectedStatuses": ["todo", "backlog", "blocked", "in_review"] } ``` diff --git a/docs/guides/agent-developer/heartbeat-protocol.md b/docs/guides/agent-developer/heartbeat-protocol.md index 9b6cdb31..7c24715e 100644 --- a/docs/guides/agent-developer/heartbeat-protocol.md +++ b/docs/guides/agent-developer/heartbeat-protocol.md @@ -31,14 +31,14 @@ Close linked issues if the approval resolves them, or comment on why they remain ### Step 3: Get Assignments ``` -GET /api/companies/{companyId}/issues?assigneeAgentId={yourId}&status=todo,in_progress,blocked +GET /api/companies/{companyId}/issues?assigneeAgentId={yourId}&status=todo,in_progress,in_review,blocked ``` Results are sorted by priority. This is your inbox. ### Step 4: Pick Work -- Work on `in_progress` tasks first, then `todo` +- Work on `in_progress` tasks first, then `in_review` when you were woken by a comment on it, then `todo` - Skip `blocked` unless you can unblock it - If `PAPERCLIP_TASK_ID` is set and assigned to you, prioritize it - If woken by a comment mention, read that comment thread first @@ -50,7 +50,7 @@ Before doing any work, you must checkout the task: ``` POST /api/issues/{issueId}/checkout Headers: X-Paperclip-Run-Id: {runId} -{ "agentId": "{yourId}", "expectedStatuses": ["todo", "backlog", "blocked"] } +{ "agentId": "{yourId}", "expectedStatuses": ["todo", "backlog", "blocked", "in_review"] } ``` If already checked out by you, this succeeds. If another agent owns it: `409 Conflict` — stop and pick a different task. **Never retry a 409.** diff --git a/docs/guides/agent-developer/task-workflow.md b/docs/guides/agent-developer/task-workflow.md index 3daeec0b..0aa3d509 100644 --- a/docs/guides/agent-developer/task-workflow.md +++ b/docs/guides/agent-developer/task-workflow.md @@ -11,7 +11,7 @@ Before doing any work on a task, checkout is required: ``` POST /api/issues/{issueId}/checkout -{ "agentId": "{yourId}", "expectedStatuses": ["todo", "backlog", "blocked"] } +{ "agentId": "{yourId}", "expectedStatuses": ["todo", "backlog", "blocked", "in_review"] } ``` This is an atomic operation. If two agents race to checkout the same task, exactly one succeeds and the other gets `409 Conflict`. @@ -82,8 +82,8 @@ This releases your ownership. Leave a comment explaining why. ``` GET /api/agents/me -GET /api/companies/company-1/issues?assigneeAgentId=agent-42&status=todo,in_progress,blocked -# -> [{ id: "issue-101", status: "in_progress" }, { id: "issue-99", status: "todo" }] +GET /api/companies/company-1/issues?assigneeAgentId=agent-42&status=todo,in_progress,in_review,blocked +# -> [{ id: "issue-101", status: "in_progress" }, { id: "issue-100", status: "in_review" }, { id: "issue-99", status: "todo" }] # Continue in_progress work GET /api/issues/issue-101 diff --git a/packages/adapters/openclaw-gateway/src/server/execute.ts b/packages/adapters/openclaw-gateway/src/server/execute.ts index f1c85c11..db369923 100644 --- a/packages/adapters/openclaw-gateway/src/server/execute.ts +++ b/packages/adapters/openclaw-gateway/src/server/execute.ts @@ -390,15 +390,15 @@ function buildWakeText(payload: WakePayload, paperclipEnv: Record { id: "agent-42", companyId: "company-1", ... } # 2. Check inbox -GET /api/companies/company-1/issues?assigneeAgentId=agent-42&status=todo,in_progress,blocked +GET /api/companies/company-1/issues?assigneeAgentId=agent-42&status=todo,in_progress,in_review,blocked -> [ { id: "issue-101", title: "Fix rate limiter bug", status: "in_progress", priority: "high" }, { id: "issue-99", title: "Implement login API", status: "todo", priority: "medium" } diff --git a/ui/src/api/issues.ts b/ui/src/api/issues.ts index 7f0b2b27..73612514 100644 --- a/ui/src/api/issues.ts +++ b/ui/src/api/issues.ts @@ -72,7 +72,7 @@ export const issuesApi = { checkout: (id: string, agentId: string) => api.post(`/issues/${id}/checkout`, { agentId, - expectedStatuses: ["todo", "backlog", "blocked"], + expectedStatuses: ["todo", "backlog", "blocked", "in_review"], }), release: (id: string) => api.post(`/issues/${id}/release`, {}), listComments: (id: string) => api.get(`/issues/${id}/comments`),