feat(server): distinguish agent vs human CLI actions (#181)
* feat(server): distinguish agent vs human CLI actions via X-Agent-ID/X-Task-ID headers Extract resolveActor helper in handler to centralize agent identity resolution from X-Agent-ID header with X-Task-ID cross-validation. Fix DeleteComment, DeleteIssue, and UpdateComment handlers that previously hardcoded "member" as actor type. Forward MULTICA_TASK_ID as X-Task-ID header from CLI client. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(server): add debug logging and test coverage for resolveActor Add slog.Debug on agent/task validation failures for easier debugging. Add TestResolveActor with 5 cases covering member fallback, valid agent, non-existent agent, valid task, and mismatched task. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
810f2df8be
commit
d41b986cb0
7 changed files with 159 additions and 30 deletions
|
|
@ -22,6 +22,7 @@ type APIClient struct {
|
|||
WorkspaceID string
|
||||
Token string
|
||||
AgentID string // When set, requests are attributed to this agent instead of the user.
|
||||
TaskID string // When set, sent as X-Task-ID for agent-task validation.
|
||||
HTTPClient *http.Client
|
||||
}
|
||||
|
||||
|
|
@ -45,6 +46,9 @@ func (c *APIClient) setHeaders(req *http.Request) {
|
|||
if c.AgentID != "" {
|
||||
req.Header.Set("X-Agent-ID", c.AgentID)
|
||||
}
|
||||
if c.TaskID != "" {
|
||||
req.Header.Set("X-Task-ID", c.TaskID)
|
||||
}
|
||||
}
|
||||
|
||||
// GetJSON performs a GET request and decodes the JSON response.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue