<a id="http-handler-providers"></a>
# HTTP handler provider 지도

261개 operation을 generic HTTP 모듈 하나에 몰지 않고 **source file × 첫 path family** 단위 provider로 연결한다. 각 절은 route registration이 선택한 handler의 직접 구현 위치다. request/response field, helper 내부와 완료 의미는 [API schema 참조](../contracts/api/schema-reference.md#api-schema-reference)가 소유한다. 이 지도는 호출 graph 전체나 runtime reachability를 대신하지 않는다. [route registration](evidence:api-route-registration)

## Provider 색인

| provider | source | operation | 책임 |
|---|---|---:|---|
| [`server/asset_intercept.go` · `asset-intercept`](#provider-asset-intercept-asset-intercept) | `server/asset_intercept.go` | 5 | asset 수집 전 block/allow rule 관리; `asset-intercept` family |
| [`server/assets.go` · `assets`](#provider-assets-assets) | `server/assets.go` | 4 | 자산 query·mutation과 company/scope 집계; `assets` family |
| [`server/assets.go` · `companies`](#provider-assets-companies) | `server/assets.go` | 6 | 자산 query·mutation과 company/scope 집계; `companies` family |
| [`server/auth.go` · `auth`](#provider-auth-auth) | `server/auth.go` | 4 | 초기 암호·login·암호 변경과 JWT; `auth` family |
| [`server/chat_mentions.go` · `chat`](#provider-chat-mentions-chat) | `server/chat_mentions.go` | 1 | chat mention 검색; `chat` family |
| [`server/chatupload.go` · `chat`](#provider-chatupload-chat) | `server/chatupload.go` | 1 | chat attachment upload; `chat` family |
| [`server/commands.go` · `commands`](#provider-commands-commands) | `server/commands.go` | 2 | tool execution history와 통계; `commands` family |
| [`server/commands.go` · `llm`](#provider-commands-llm) | `server/commands.go` | 5 | tool execution history와 통계; `llm` family |
| [`server/commands.go` · `tokens`](#provider-commands-tokens) | `server/commands.go` | 1 | tool execution history와 통계; `tokens` family |
| [`server/constraints_api.go` · `tasks`](#provider-constraints-api-tasks) | `server/constraints_api.go` | 4 | task constraint CRUD; `tasks` family |
| [`server/conversations.go` · `conversations`](#provider-conversations-conversations) | `server/conversations.go` | 10 | standalone conversation lifecycle·message; `conversations` family |
| [`server/customtool.go` · `tools`](#provider-customtool-tools) | `server/customtool.go` | 4 | custom tool CRUD·test; `tools` family |
| [`server/finding_retests.go` · `exploration`](#provider-finding-retests-exploration) | `server/finding_retests.go` | 3 | finding retest lifecycle; `exploration` family |
| [`server/finding_traffic.go` · `exploration`](#provider-finding-traffic-exploration) | `server/finding_traffic.go` | 7 | finding↔traffic snapshot binding과 body 조회; `exploration` family |
| [`server/findings_groups.go` · `exploration`](#provider-findings-groups-exploration) | `server/findings_groups.go` | 3 | finding group/stats/asset tree projection; `exploration` family |
| [`server/goals_api.go` · `tasks`](#provider-goals-api-tasks) | `server/goals_api.go` | 4 | task goal CRUD; `tasks` family |
| [`server/intent_intervention.go` · `tasks`](#provider-intent-intervention-tasks) | `server/intent_intervention.go` | 1 | worker intent로 사람 message 전달; `tasks` family |
| [`server/intercept.go` · `intercept`](#provider-intercept-intercept) | `server/intercept.go` | 17 | tool intercept rule·pending·history·judge; `intercept` family |
| [`server/notify_api.go` · `notify`](#provider-notify-api-notify) | `server/notify_api.go` | 8 | notification channel·delivery 관리; `notify` family |
| [`server/server.go` · `active`](#provider-server-active) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `active` family |
| [`server/server.go` · `audit`](#provider-server-audit) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `audit` family |
| [`server/server.go` · `chat`](#provider-server-chat) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `chat` family |
| [`server/server.go` · `exploration`](#provider-server-exploration) | `server/server.go` | 18 | core task/exploration/finding/traffic/settings/report route; `exploration` family |
| [`server/server.go` · `gc`](#provider-server-gc) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `gc` family |
| [`server/server.go` · `health`](#provider-server-health) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `health` family |
| [`server/server.go` · `llm`](#provider-server-llm) | `server/server.go` | 3 | core task/exploration/finding/traffic/settings/report route; `llm` family |
| [`server/server.go` · `logs`](#provider-server-logs) | `server/server.go` | 3 | core task/exploration/finding/traffic/settings/report route; `logs` family |
| [`server/server.go` · `report`](#provider-server-report) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `report` family |
| [`server/server.go` · `settings`](#provider-server-settings) | `server/server.go` | 4 | core task/exploration/finding/traffic/settings/report route; `settings` family |
| [`server/server.go` · `stats`](#provider-server-stats) | `server/server.go` | 1 | core task/exploration/finding/traffic/settings/report route; `stats` family |
| [`server/server.go` · `tasks`](#provider-server-tasks) | `server/server.go` | 16 | core task/exploration/finding/traffic/settings/report route; `tasks` family |
| [`server/server.go` · `tokens`](#provider-server-tokens) | `server/server.go` | 2 | core task/exploration/finding/traffic/settings/report route; `tokens` family |
| [`server/server.go` · `traffic`](#provider-server-traffic) | `server/server.go` | 7 | core task/exploration/finding/traffic/settings/report route; `traffic` family |
| [`server/server_mgmt.go` · `agents`](#provider-server-mgmt-agents) | `server/server_mgmt.go` | 17 | LLM·agent·tool·MCP·skill 관리 route; `agents` family |
| [`server/server_mgmt.go` · `llm`](#provider-server-mgmt-llm) | `server/server_mgmt.go` | 9 | LLM·agent·tool·MCP·skill 관리 route; `llm` family |
| [`server/server_mgmt.go` · `mcp`](#provider-server-mgmt-mcp) | `server/server_mgmt.go` | 5 | LLM·agent·tool·MCP·skill 관리 route; `mcp` family |
| [`server/server_mgmt.go` · `skills`](#provider-server-mgmt-skills) | `server/server_mgmt.go` | 12 | LLM·agent·tool·MCP·skill 관리 route; `skills` family |
| [`server/server_mgmt.go` · `tasks`](#provider-server-mgmt-tasks) | `server/server_mgmt.go` | 1 | LLM·agent·tool·MCP·skill 관리 route; `tasks` family |
| [`server/server_mgmt.go` · `tools`](#provider-server-mgmt-tools) | `server/server_mgmt.go` | 3 | LLM·agent·tool·MCP·skill 관리 route; `tools` family |
| [`server/server_mgmt.go` · `visibility`](#provider-server-mgmt-visibility) | `server/server_mgmt.go` | 4 | LLM·agent·tool·MCP·skill 관리 route; `visibility` family |
| [`server/side_questions.go` · `conversations`](#provider-side-questions-conversations) | `server/side_questions.go` | 3 | conversation/task/intent side-question lifecycle와 SSE; `conversations` family |
| [`server/side_questions.go` · `side-questions`](#provider-side-questions-side-questions) | `server/side_questions.go` | 2 | conversation/task/intent side-question lifecycle와 SSE; `side-questions` family |
| [`server/side_questions.go` · `tasks`](#provider-side-questions-tasks) | `server/side_questions.go` | 6 | conversation/task/intent side-question lifecycle와 SSE; `tasks` family |
| [`server/sync_scopesentry.go` · `sync`](#provider-sync-scopesentry-sync) | `server/sync_scopesentry.go` | 5 | ScopeSentry 상태·project/task import; `sync` family |
| [`server/task_archives.go` · `task-archives`](#provider-task-archives-task-archives) | `server/task_archives.go` | 6 | task archive/restore/delete job; `task-archives` family |
| [`server/task_archives.go` · `tasks`](#provider-task-archives-tasks) | `server/task_archives.go` | 2 | task archive/restore/delete job; `tasks` family |
| [`server/task_assets.go` · `tasks`](#provider-task-assets-tasks) | `server/task_assets.go` | 3 | task asset attach/detach/reference; `tasks` family |
| [`server/task_categories.go` · `task-categories`](#provider-task-categories-task-categories) | `server/task_categories.go` | 4 | task category CRUD·batch; `task-categories` family |
| [`server/task_categories.go` · `tasks`](#provider-task-categories-tasks) | `server/task_categories.go` | 2 | task category CRUD·batch; `tasks` family |
| [`server/task_control.go` · `tasks`](#provider-task-control-tasks) | `server/task_control.go` | 1 | task pause/resume; `tasks` family |
| [`server/task_intercept.go` · `tasks`](#provider-task-intercept-tasks) | `server/task_intercept.go` | 5 | task별 intercept rule CRUD; `tasks` family |
| [`server/task_metadata.go` · `tasks`](#provider-task-metadata-tasks) | `server/task_metadata.go` | 1 | task 표시 metadata 변경; `tasks` family |
| [`server/task_resolution.go` · `tasks`](#provider-task-resolution-tasks) | `server/task_resolution.go` | 1 | task LLM resolution 조회; `tasks` family |
| [`server/task_templates.go` · `task-templates`](#provider-task-templates-task-templates) | `server/task_templates.go` | 4 | task template CRUD; `task-templates` family |
| [`server/triggers.go` · `agents`](#provider-triggers-agents) | `server/triggers.go` | 2 | agent trigger CRUD; `agents` family |
| [`server/triggers.go` · `triggers`](#provider-triggers-triggers) | `server/triggers.go` | 2 | agent trigger CRUD; `triggers` family |
| [`server/update.go` · `update`](#provider-update-update) | `server/update.go` | 4 | release check/apply/rollback/SSE; `update` family |
| [`server/workspace.go` · `workspace`](#provider-workspace-workspace) | `server/workspace.go` | 7 | task workspace file API; `workspace` family |

<a id="provider-asset-intercept-asset-intercept"></a>
## `server/asset_intercept.go` · `asset-intercept` family

asset 수집 전 block/allow rule 관리 중 `/api/asset-intercept` family의 5개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/asset-intercept/rules`](../contracts/api/system-operations.md#op-get-api-asset-intercept-rules) | `assetInterceptListRules` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-asset-intercept-rules) |
| [`POST /api/asset-intercept/rules`](../contracts/api/system-operations.md#op-post-api-asset-intercept-rules) | `assetInterceptCreateRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-asset-intercept-rules) |
| [`PUT /api/asset-intercept/rules/{id}`](../contracts/api/system-operations.md#op-put-api-asset-intercept-rules-id) | `assetInterceptUpdateRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-asset-intercept-rules-id) |
| [`DELETE /api/asset-intercept/rules/{id}`](../contracts/api/system-operations.md#op-delete-api-asset-intercept-rules-id) | `assetInterceptDeleteRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-asset-intercept-rules-id) |
| [`POST /api/asset-intercept/rules/{id}/toggle`](../contracts/api/system-operations.md#op-post-api-asset-intercept-rules-id-toggle) | `assetInterceptToggleRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-asset-intercept-rules-id-toggle) |

근거는 `server/asset_intercept.go`의 `5`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-assets-assets"></a>
## `server/assets.go` · `assets` family

자산 query·mutation과 company/scope 집계 중 `/api/assets` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/assets`](../contracts/api/findings-traffic.md#op-get-api-assets) | `listAssets` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-assets) |
| [`GET /api/assets/counts`](../contracts/api/findings-traffic.md#op-get-api-assets-counts) | `assetCounts` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-assets-counts) |
| [`POST /api/assets`](../contracts/api/findings-traffic.md#op-post-api-assets) | `insertAssets` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-assets) |
| [`DELETE /api/assets`](../contracts/api/findings-traffic.md#op-delete-api-assets) | `deleteAssets` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-assets) |

근거는 `server/assets.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-assets-companies"></a>
## `server/assets.go` · `companies` family

자산 query·mutation과 company/scope 집계 중 `/api/companies` family의 6개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/companies`](../contracts/api/findings-traffic.md#op-get-api-companies) | `listCompanies` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-companies) |
| [`POST /api/companies`](../contracts/api/findings-traffic.md#op-post-api-companies) | `createCompany` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-companies) |
| [`GET /api/companies/{id}`](../contracts/api/findings-traffic.md#op-get-api-companies-id) | `getCompany` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-companies-id) |
| [`DELETE /api/companies/{id}`](../contracts/api/findings-traffic.md#op-delete-api-companies-id) | `deleteCompany` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-companies-id) |
| [`POST /api/companies/{id}/scope`](../contracts/api/findings-traffic.md#op-post-api-companies-id-scope) | `addCompanyScope` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-companies-id-scope) |
| [`POST /api/companies/reattribute`](../contracts/api/findings-traffic.md#op-post-api-companies-reattribute) | `reattribute` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-companies-reattribute) |

근거는 `server/assets.go`의 `6`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-auth-auth"></a>
## `server/auth.go` · `auth` family

초기 암호·login·암호 변경과 JWT 중 `/api/auth` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/auth/status`](../contracts/api/system-operations.md#op-get-api-auth-status) | `authStatus` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-auth-status) |
| [`POST /api/auth/init`](../contracts/api/system-operations.md#op-post-api-auth-init) | `authInit` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-auth-init) |
| [`POST /api/auth/login`](../contracts/api/system-operations.md#op-post-api-auth-login) | `authLogin` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-auth-login) |
| [`POST /api/auth/change-password`](../contracts/api/system-operations.md#op-post-api-auth-change-password) | `authChangePassword` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-auth-change-password) |

근거는 `server/auth.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-chat-mentions-chat"></a>
## `server/chat_mentions.go` · `chat` family

chat mention 검색 중 `/api/chat` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/chat/mentions`](../contracts/api/agents-tools.md#op-get-api-chat-mentions) | `searchChatMentions` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-chat-mentions) |

근거는 `server/chat_mentions.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-chatupload-chat"></a>
## `server/chatupload.go` · `chat` family

chat attachment upload 중 `/api/chat` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/chat/upload`](../contracts/api/agents-tools.md#op-post-api-chat-upload) | `chatUpload` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-chat-upload) |

근거는 `server/chatupload.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-commands-commands"></a>
## `server/commands.go` · `commands` family

tool execution history와 통계 중 `/api/commands` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/commands`](../contracts/api/system-operations.md#op-get-api-commands) | `pgListCommands` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-commands) |
| [`GET /api/commands/stats`](../contracts/api/system-operations.md#op-get-api-commands-stats) | `pgToolStats` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-commands-stats) |

근거는 `server/commands.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-commands-llm"></a>
## `server/commands.go` · `llm` family

tool execution history와 통계 중 `/api/llm` family의 5개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/llm/records`](../contracts/api/agents-tools.md#op-get-api-llm-records) | `pgListLLMRecords` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-records) |
| [`DELETE /api/llm/records`](../contracts/api/agents-tools.md#op-delete-api-llm-records) | `pgDeleteLLMRecords` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-llm-records) |
| [`GET /api/llm/records/tasks`](../contracts/api/agents-tools.md#op-get-api-llm-records-tasks) | `pgLLMTasks` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-records-tasks) |
| [`GET /api/llm/records/by-model`](../contracts/api/agents-tools.md#op-get-api-llm-records-by-model) | `pgTokenByModel` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-records-by-model) |
| [`GET /api/llm/records/{id}`](../contracts/api/agents-tools.md#op-get-api-llm-records-id) | `pgGetLLMRecord` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-records-id) |

근거는 `server/commands.go`의 `5`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-commands-tokens"></a>
## `server/commands.go` · `tokens` family

tool execution history와 통계 중 `/api/tokens` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tokens/usage`](../contracts/api/system-operations.md#op-get-api-tokens-usage) | `pgUsageStats` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tokens-usage) |

근거는 `server/commands.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-constraints-api-tasks"></a>
## `server/constraints_api.go` · `tasks` family

task constraint CRUD 중 `/api/tasks` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tasks/{id}/constraints`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-constraints) | `listConstraints` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-constraints) |
| [`POST /api/tasks/{id}/constraints`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-constraints) | `addConstraint` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-constraints) |
| [`PATCH /api/tasks/{id}/constraints/{cid}`](../contracts/api/tasks-exploration.md#op-patch-api-tasks-id-constraints-cid) | `editConstraint` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-tasks-id-constraints-cid) |
| [`DELETE /api/tasks/{id}/constraints/{cid}`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-constraints-cid) | `deleteConstraint` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-constraints-cid) |

근거는 `server/constraints_api.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-conversations-conversations"></a>
## `server/conversations.go` · `conversations` family

standalone conversation lifecycle·message 중 `/api/conversations` family의 10개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/conversations`](../contracts/api/agents-tools.md#op-get-api-conversations) | `pgListConversations` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-conversations) |
| [`POST /api/conversations`](../contracts/api/agents-tools.md#op-post-api-conversations) | `pgCreateConversation` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-conversations) |
| [`POST /api/conversations/delete/batch`](../contracts/api/agents-tools.md#op-post-api-conversations-delete-batch) | `pgDeleteConversationsBatch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-conversations-delete-batch) |
| [`PATCH /api/conversations/{id}`](../contracts/api/agents-tools.md#op-patch-api-conversations-id) | `pgRenameConversation` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-conversations-id) |
| [`PATCH /api/conversations/{id}/profile`](../contracts/api/agents-tools.md#op-patch-api-conversations-id-profile) | `pgUpdateConversation` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-conversations-id-profile) |
| [`DELETE /api/conversations/{id}`](../contracts/api/agents-tools.md#op-delete-api-conversations-id) | `pgDeleteConversation` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-conversations-id) |
| [`GET /api/conversations/{id}/messages`](../contracts/api/agents-tools.md#op-get-api-conversations-id-messages) | `pgConversationMessages` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-conversations-id-messages) |
| [`POST /api/conversations/{id}/messages`](../contracts/api/agents-tools.md#op-post-api-conversations-id-messages) | `pgSendConversationMessage` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-conversations-id-messages) |
| [`POST /api/conversations/{id}/stop`](../contracts/api/agents-tools.md#op-post-api-conversations-id-stop) | `pgStopConversation` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-conversations-id-stop) |
| [`GET /api/conversations/{id}/messages/{seq}`](../contracts/api/agents-tools.md#op-get-api-conversations-id-messages-seq) | `pgConversationMsgDetail` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-conversations-id-messages-seq) |

근거는 `server/conversations.go`의 `10`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-customtool-tools"></a>
## `server/customtool.go` · `tools` family

custom tool CRUD·test 중 `/api/tools` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/tools/custom`](../contracts/api/agents-tools.md#op-post-api-tools-custom) | `pgCreateCustomTool` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tools-custom) |
| [`POST /api/tools/custom/test`](../contracts/api/agents-tools.md#op-post-api-tools-custom-test) | `pgTestCustomTool` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tools-custom-test) |
| [`PUT /api/tools/custom/{key}`](../contracts/api/agents-tools.md#op-put-api-tools-custom-key) | `pgUpdateCustomTool` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-tools-custom-key) |
| [`DELETE /api/tools/custom/{key}`](../contracts/api/agents-tools.md#op-delete-api-tools-custom-key) | `pgDeleteCustomTool` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tools-custom-key) |

근거는 `server/customtool.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-finding-retests-exploration"></a>
## `server/finding_retests.go` · `exploration` family

finding retest lifecycle 중 `/api/exploration` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/exploration/findings/{id}/retests`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-id-retests) | `listFindingRetests` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-id-retests) |
| [`GET /api/exploration/findings/retests/active`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-retests-active) | `listActiveFindingRetests` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-retests-active) |
| [`POST /api/exploration/findings/{id}/retests`](../contracts/api/findings-traffic.md#op-post-api-exploration-findings-id-retests) | `startFindingRetest` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-exploration-findings-id-retests) |

근거는 `server/finding_retests.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-finding-traffic-exploration"></a>
## `server/finding_traffic.go` · `exploration` family

finding↔traffic snapshot binding과 body 조회 중 `/api/exploration` family의 7개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/exploration/findings/{id}/traffic`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-id-traffic) | `getFindingTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-id-traffic) |
| [`POST /api/exploration/findings/{id}/traffic`](../contracts/api/findings-traffic.md#op-post-api-exploration-findings-id-traffic) | `bindFindingTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-exploration-findings-id-traffic) |
| [`PATCH /api/exploration/findings/{id}/traffic/{binding_id}`](../contracts/api/findings-traffic.md#op-patch-api-exploration-findings-id-traffic-binding-id) | `editFindingTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-exploration-findings-id-traffic-binding-id) |
| [`DELETE /api/exploration/findings/{id}/traffic/{binding_id}`](../contracts/api/findings-traffic.md#op-delete-api-exploration-findings-id-traffic-binding-id) | `editFindingTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-exploration-findings-id-traffic-binding-id) |
| [`PUT /api/exploration/findings/{id}/traffic/order`](../contracts/api/findings-traffic.md#op-put-api-exploration-findings-id-traffic-order) | `editFindingTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-exploration-findings-id-traffic-order) |
| [`GET /api/exploration/findings/{id}/traffic/{binding_id}`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-id-traffic-binding-id) | `getFindingTrafficDetail` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-id-traffic-binding-id) |
| [`GET /api/exploration/findings/{id}/traffic/{binding_id}/body`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-id-traffic-binding-id-body) | `getFindingTrafficBody` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-id-traffic-binding-id-body) |

근거는 `server/finding_traffic.go`의 `7`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-findings-groups-exploration"></a>
## `server/findings_groups.go` · `exploration` family

finding group/stats/asset tree projection 중 `/api/exploration` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/exploration/findings/groups`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-groups) | `findingGroups` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-groups) |
| [`GET /api/exploration/findings/asset-tree`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-asset-tree) | `findingAssetTree` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-asset-tree) |
| [`POST /api/exploration/findings/{id}/deepen`](../contracts/api/findings-traffic.md#op-post-api-exploration-findings-id-deepen) | `deepenFinding` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-exploration-findings-id-deepen) |

근거는 `server/findings_groups.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-goals-api-tasks"></a>
## `server/goals_api.go` · `tasks` family

task goal CRUD 중 `/api/tasks` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tasks/{id}/goals`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-goals) | `listGoals` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-goals) |
| [`POST /api/tasks/{id}/goals`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-goals) | `addGoal` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-goals) |
| [`PATCH /api/tasks/{id}/goals/{gid}`](../contracts/api/tasks-exploration.md#op-patch-api-tasks-id-goals-gid) | `editGoal` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-tasks-id-goals-gid) |
| [`DELETE /api/tasks/{id}/goals/{gid}`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-goals-gid) | `deleteGoal` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-goals-gid) |

근거는 `server/goals_api.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-intent-intervention-tasks"></a>
## `server/intent_intervention.go` · `tasks` family

worker intent로 사람 message 전달 중 `/api/tasks` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/tasks/{id}/intents/{iid}/messages`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intents-iid-messages) | `sendWorkerMessage` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intents-iid-messages) |

근거는 `server/intent_intervention.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-intercept-intercept"></a>
## `server/intercept.go` · `intercept` family

tool intercept rule·pending·history·judge 중 `/api/intercept` family의 17개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/intercept/rules`](../contracts/api/system-operations.md#op-get-api-intercept-rules) | `interceptListRules` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-rules) |
| [`POST /api/intercept/rules`](../contracts/api/system-operations.md#op-post-api-intercept-rules) | `interceptCreateRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-intercept-rules) |
| [`PUT /api/intercept/rules/{id}`](../contracts/api/system-operations.md#op-put-api-intercept-rules-id) | `interceptUpdateRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-intercept-rules-id) |
| [`DELETE /api/intercept/rules/{id}`](../contracts/api/system-operations.md#op-delete-api-intercept-rules-id) | `interceptDeleteRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-intercept-rules-id) |
| [`POST /api/intercept/rules/{id}/toggle`](../contracts/api/system-operations.md#op-post-api-intercept-rules-id-toggle) | `interceptToggleRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-intercept-rules-id-toggle) |
| [`GET /api/intercept/pending`](../contracts/api/system-operations.md#op-get-api-intercept-pending) | `interceptListPending` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-pending) |
| [`GET /api/intercept/pending/{id}`](../contracts/api/system-operations.md#op-get-api-intercept-pending-id) | `interceptGetOne` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-pending-id) |
| [`POST /api/intercept/pending/{id}/decide`](../contracts/api/system-operations.md#op-post-api-intercept-pending-id-decide) | `interceptDecide` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-intercept-pending-id-decide) |
| [`GET /api/intercept/history`](../contracts/api/system-operations.md#op-get-api-intercept-history) | `interceptHistory` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-history) |
| [`GET /api/intercept/history/{id}`](../contracts/api/system-operations.md#op-get-api-intercept-history-id) | `interceptDetail` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-history-id) |
| [`GET /api/intercept/history/{id}/execution`](../contracts/api/system-operations.md#op-get-api-intercept-history-id-execution) | `interceptExecution` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-history-id-execution) |
| [`GET /api/intercept/task/{taskID}`](../contracts/api/system-operations.md#op-get-api-intercept-task-taskid) | `interceptListTaskItems` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-task-taskid) |
| [`GET /api/intercept/tool-config`](../contracts/api/system-operations.md#op-get-api-intercept-tool-config) | `interceptGetToolConfig` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-tool-config) |
| [`PUT /api/intercept/tool-config`](../contracts/api/system-operations.md#op-put-api-intercept-tool-config) | `interceptSetToolConfig` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-intercept-tool-config) |
| [`GET /api/intercept/judge`](../contracts/api/system-operations.md#op-get-api-intercept-judge) | `interceptGetJudgeConfig` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-judge) |
| [`PUT /api/intercept/judge`](../contracts/api/system-operations.md#op-put-api-intercept-judge) | `interceptSetJudgeConfig` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-intercept-judge) |
| [`GET /api/intercept/judge/usage`](../contracts/api/system-operations.md#op-get-api-intercept-judge-usage) | `interceptJudgeUsage` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-intercept-judge-usage) |

근거는 `server/intercept.go`의 `17`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-notify-api-notify"></a>
## `server/notify_api.go` · `notify` family

notification channel·delivery 관리 중 `/api/notify` family의 8개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/notify/meta`](../contracts/api/system-operations.md#op-get-api-notify-meta) | `notifyMeta` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-notify-meta) |
| [`GET /api/notify/channels`](../contracts/api/system-operations.md#op-get-api-notify-channels) | `notifyListChannels` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-notify-channels) |
| [`POST /api/notify/channels`](../contracts/api/system-operations.md#op-post-api-notify-channels) | `notifyCreateChannel` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-notify-channels) |
| [`PATCH /api/notify/channels/{id}`](../contracts/api/system-operations.md#op-patch-api-notify-channels-id) | `notifyUpdateChannel` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-notify-channels-id) |
| [`DELETE /api/notify/channels/{id}`](../contracts/api/system-operations.md#op-delete-api-notify-channels-id) | `notifyDeleteChannel` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-notify-channels-id) |
| [`POST /api/notify/channels/{id}/test`](../contracts/api/system-operations.md#op-post-api-notify-channels-id-test) | `notifyTestChannel` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-notify-channels-id-test) |
| [`GET /api/notify/deliveries`](../contracts/api/system-operations.md#op-get-api-notify-deliveries) | `notifyListDeliveries` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-notify-deliveries) |
| [`POST /api/notify/deliveries/{id}/retry`](../contracts/api/system-operations.md#op-post-api-notify-deliveries-id-retry) | `notifyRetryDelivery` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-notify-deliveries-id-retry) |

근거는 `server/notify_api.go`의 `8`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-active"></a>
## `server/server.go` · `active` family

core task/exploration/finding/traffic/settings/report route 중 `/api/active` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/active`](../contracts/api/tasks-exploration.md#op-post-api-active) | `setActive` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-active) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-audit"></a>
## `server/server.go` · `audit` family

core task/exploration/finding/traffic/settings/report route 중 `/api/audit` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/audit`](../contracts/api/system-operations.md#op-get-api-audit) | `getAudit` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-audit) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-chat"></a>
## `server/server.go` · `chat` family

core task/exploration/finding/traffic/settings/report route 중 `/api/chat` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/chat`](../contracts/api/agents-tools.md#op-post-api-chat) | `chat` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-chat) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-exploration"></a>
## `server/server.go` · `exploration` family

core task/exploration/finding/traffic/settings/report route 중 `/api/exploration` family의 18개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/exploration/frontier`](../contracts/api/findings-traffic.md#op-get-api-exploration-frontier) | `frontier` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-frontier) |
| [`GET /api/exploration/findings`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings) | `findings` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings) |
| [`GET /api/exploration/findings/stats`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-stats) | `findingStats` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-stats) |
| [`GET /api/exploration/findings/export`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-export) | `findingsExport` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-export) |
| [`GET /api/exploration/findings/{id}`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-id) | `getFinding` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-id) |
| [`GET /api/exploration/findings/{id}/lineage`](../contracts/api/findings-traffic.md#op-get-api-exploration-findings-id-lineage) | `findingLineage` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-findings-id-lineage) |
| [`PATCH /api/exploration/findings/{id}`](../contracts/api/findings-traffic.md#op-patch-api-exploration-findings-id) | `patchFinding` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-exploration-findings-id) |
| [`DELETE /api/exploration/findings/{id}`](../contracts/api/findings-traffic.md#op-delete-api-exploration-findings-id) | `deleteFinding` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-exploration-findings-id) |
| [`GET /api/exploration/intents`](../contracts/api/findings-traffic.md#op-get-api-exploration-intents) | `intents` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-intents) |
| [`GET /api/exploration/graph`](../contracts/api/findings-traffic.md#op-get-api-exploration-graph) | `explorationGraph` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-graph) |
| [`GET /api/exploration/nodes`](../contracts/api/findings-traffic.md#op-get-api-exploration-nodes) | `explorationNodes` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-nodes) |
| [`GET /api/exploration/activity`](../contracts/api/findings-traffic.md#op-get-api-exploration-activity) | `activity` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-activity) |
| [`GET /api/exploration/activity/history`](../contracts/api/findings-traffic.md#op-get-api-exploration-activity-history) | `activityHistory` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-activity-history) |
| [`GET /api/exploration/main-sessions`](../contracts/api/findings-traffic.md#op-get-api-exploration-main-sessions) | `mainSessions` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-main-sessions) |
| [`POST /api/exploration/main-session/new`](../contracts/api/findings-traffic.md#op-post-api-exploration-main-session-new) | `newMainSession` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-exploration-main-session-new) |
| [`GET /api/exploration/activity/stream`](../contracts/api/findings-traffic.md#op-get-api-exploration-activity-stream) | `streamActivity` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-activity-stream) |
| [`GET /api/exploration/activity/{seq}`](../contracts/api/findings-traffic.md#op-get-api-exploration-activity-seq) | `activityDetail` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-activity-seq) |
| [`GET /api/exploration/tokens`](../contracts/api/findings-traffic.md#op-get-api-exploration-tokens) | `tokenStats` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-exploration-tokens) |

근거는 `server/server.go`의 `18`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-gc"></a>
## `server/server.go` · `gc` family

core task/exploration/finding/traffic/settings/report route 중 `/api/gc` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/gc`](../contracts/api/system-operations.md#op-post-api-gc) | `gc` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-gc) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-health"></a>
## `server/server.go` · `health` family

core task/exploration/finding/traffic/settings/report route 중 `/api/health` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/health`](../contracts/api/system-operations.md#op-get-api-health) | `health` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-health) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-llm"></a>
## `server/server.go` · `llm` family

core task/exploration/finding/traffic/settings/report route 중 `/api/llm` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/llm`](../contracts/api/agents-tools.md#op-get-api-llm) | `getLLM` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm) |
| [`POST /api/llm`](../contracts/api/agents-tools.md#op-post-api-llm) | `setLLM` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm) |
| [`POST /api/llm/test`](../contracts/api/agents-tools.md#op-post-api-llm-test) | `testLLM` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm-test) |

근거는 `server/server.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-logs"></a>
## `server/server.go` · `logs` family

core task/exploration/finding/traffic/settings/report route 중 `/api/logs` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/logs`](../contracts/api/system-operations.md#op-get-api-logs) | `getLogs` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-logs) |
| [`GET /api/logs/history`](../contracts/api/system-operations.md#op-get-api-logs-history) | `getLogsHistory` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-logs-history) |
| [`GET /api/logs/stream`](../contracts/api/system-operations.md#op-get-api-logs-stream) | `streamLogs` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-logs-stream) |

근거는 `server/server.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-report"></a>
## `server/server.go` · `report` family

core task/exploration/finding/traffic/settings/report route 중 `/api/report` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/report`](../contracts/api/findings-traffic.md#op-get-api-report) | `getReport` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-report) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-settings"></a>
## `server/server.go` · `settings` family

core task/exploration/finding/traffic/settings/report route 중 `/api/settings` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/settings`](../contracts/api/system-operations.md#op-get-api-settings) | `getSettings` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-settings) |
| [`PUT /api/settings`](../contracts/api/system-operations.md#op-put-api-settings) | `putSettings` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-settings) |
| [`POST /api/settings/web-search/test`](../contracts/api/system-operations.md#op-post-api-settings-web-search-test) | `testWebSearch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-settings-web-search-test) |
| [`POST /api/settings/python/detect`](../contracts/api/system-operations.md#op-post-api-settings-python-detect) | `pgDetectPython` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-settings-python-detect) |

근거는 `server/server.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-stats"></a>
## `server/server.go` · `stats` family

core task/exploration/finding/traffic/settings/report route 중 `/api/stats` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/stats`](../contracts/api/system-operations.md#op-get-api-stats) | `stats` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-stats) |

근거는 `server/server.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-tasks"></a>
## `server/server.go` · `tasks` family

core task/exploration/finding/traffic/settings/report route 중 `/api/tasks` family의 16개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tasks`](../contracts/api/tasks-exploration.md#op-get-api-tasks) | `listTasks` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks) |
| [`POST /api/tasks`](../contracts/api/tasks-exploration.md#op-post-api-tasks) | `createTask` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks) |
| [`GET /api/tasks/{id}`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id) | `getTask` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id) |
| [`GET /api/tasks/{id}/coverage`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-coverage) | `taskCoverage` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-coverage) |
| [`GET /api/tasks/{id}/coverage-graph`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-coverage-graph) | `taskCoverageGraph` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-coverage-graph) |
| [`GET /api/tasks/{id}/asset-refs`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-asset-refs) | `taskAssetRefs` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-asset-refs) |
| [`GET /api/tasks/{id}/scope`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-scope) | `taskScopeList` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-scope) |
| [`POST /api/tasks/{id}/scope`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-scope) | `taskScopeAdd` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-scope) |
| [`DELETE /api/tasks/{id}/scope/{sid}`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-scope-sid) | `taskScopeDelete` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-scope-sid) |
| [`POST /api/tasks/{id}/control`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-control) | `control` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-control) |
| [`PUT /api/tasks/{id}/llm`](../contracts/api/tasks-exploration.md#op-put-api-tasks-id-llm) | `updateTaskLLMProfiles` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-tasks-id-llm) |
| [`POST /api/tasks/{id}/intents/{iid}/control`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intents-iid-control) | `controlIntent` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intents-iid-control) |
| [`POST /api/tasks/{id}/intents/{iid}/rerun`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intents-iid-rerun) | `rerunIntent` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intents-iid-rerun) |
| [`POST /api/tasks/{id}/intents/rerun-blocked`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intents-rerun-blocked) | `rerunBlocked` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intents-rerun-blocked) |
| [`GET /api/tasks/{id}/chat/status`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-chat-status) | `taskChatStatus` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-chat-status) |
| [`POST /api/tasks/{id}/chat/stop`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-chat-stop) | `stopChat` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-chat-stop) |

근거는 `server/server.go`의 `16`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-tokens"></a>
## `server/server.go` · `tokens` family

core task/exploration/finding/traffic/settings/report route 중 `/api/tokens` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tokens/daily`](../contracts/api/system-operations.md#op-get-api-tokens-daily) | `tokenDailyStats` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tokens-daily) |
| [`GET /api/tokens/conversations`](../contracts/api/system-operations.md#op-get-api-tokens-conversations) | `conversationTokens` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tokens-conversations) |

근거는 `server/server.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-traffic"></a>
## `server/server.go` · `traffic` family

core task/exploration/finding/traffic/settings/report route 중 `/api/traffic` family의 7개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/traffic`](../contracts/api/findings-traffic.md#op-get-api-traffic) | `getTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-traffic) |
| [`GET /api/traffic/hosts`](../contracts/api/findings-traffic.md#op-get-api-traffic-hosts) | `getTrafficHosts` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-traffic-hosts) |
| [`DELETE /api/traffic`](../contracts/api/findings-traffic.md#op-delete-api-traffic) | `deleteTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-traffic) |
| [`DELETE /api/traffic/hosts`](../contracts/api/findings-traffic.md#op-delete-api-traffic-hosts) | `deleteTrafficHosts` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-traffic-hosts) |
| [`DELETE /api/traffic/all`](../contracts/api/findings-traffic.md#op-delete-api-traffic-all) | `deleteAllTraffic` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-traffic-all) |
| [`GET /api/traffic/exchange`](../contracts/api/findings-traffic.md#op-get-api-traffic-exchange) | `getTrafficExchange` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-traffic-exchange) |
| [`GET /api/traffic/blob`](../contracts/api/findings-traffic.md#op-get-api-traffic-blob) | `getTrafficBlob` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-traffic-blob) |

근거는 `server/server.go`의 `7`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-agents"></a>
## `server/server_mgmt.go` · `agents` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/agents` family의 17개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/agents`](../contracts/api/agents-tools.md#op-get-api-agents) | `pgListAgents` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-agents) |
| [`POST /api/agents`](../contracts/api/agents-tools.md#op-post-api-agents) | `pgCreateAgent` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-agents) |
| [`GET /api/agents/{key}`](../contracts/api/agents-tools.md#op-get-api-agents-key) | `pgGetAgent` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-agents-key) |
| [`PATCH /api/agents/{key}`](../contracts/api/agents-tools.md#op-patch-api-agents-key) | `pgUpdateAgent` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-agents-key) |
| [`DELETE /api/agents/{key}`](../contracts/api/agents-tools.md#op-delete-api-agents-key) | `pgDeleteAgent` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-agents-key) |
| [`PUT /api/agents/{key}/config`](../contracts/api/agents-tools.md#op-put-api-agents-key-config) | `pgSaveAgentConfig` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-agents-key-config) |
| [`PUT /api/agents/{key}/prompt`](../contracts/api/agents-tools.md#op-put-api-agents-key-prompt) | `pgSavePrompt` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-agents-key-prompt) |
| [`POST /api/agents/{key}/prompt/reset`](../contracts/api/agents-tools.md#op-post-api-agents-key-prompt-reset) | `pgResetPrompt` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-agents-key-prompt-reset) |
| [`PUT /api/agents/{key}/wrapup`](../contracts/api/agents-tools.md#op-put-api-agents-key-wrapup) | `pgSaveWrapup` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-agents-key-wrapup) |
| [`POST /api/agents/{key}/wrapup/reset`](../contracts/api/agents-tools.md#op-post-api-agents-key-wrapup-reset) | `pgResetWrapup` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-agents-key-wrapup-reset) |
| [`PUT /api/agents/{key}/wrapup/task-timeout`](../contracts/api/agents-tools.md#op-put-api-agents-key-wrapup-task-timeout) | `pgSaveTaskTimeoutWrapup` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-agents-key-wrapup-task-timeout) |
| [`POST /api/agents/{key}/wrapup/task-timeout/reset`](../contracts/api/agents-tools.md#op-post-api-agents-key-wrapup-task-timeout-reset) | `pgResetTaskTimeoutWrapup` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-agents-key-wrapup-task-timeout-reset) |
| [`GET /api/agents/{key}/prompts`](../contracts/api/agents-tools.md#op-get-api-agents-key-prompts) | `pgListPromptVersions` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-agents-key-prompts) |
| [`GET /api/agents/{key}/variables`](../contracts/api/agents-tools.md#op-get-api-agents-key-variables) | `pgPromptVars` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-agents-key-variables) |
| [`POST /api/agents/{key}/prompt/preview`](../contracts/api/agents-tools.md#op-post-api-agents-key-prompt-preview) | `pgPreviewPrompt` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-agents-key-prompt-preview) |
| [`GET /api/agents/{key}/visibility`](../contracts/api/agents-tools.md#op-get-api-agents-key-visibility) | `pgGetAgentVisibility` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-agents-key-visibility) |
| [`PUT /api/agents/{key}/visibility`](../contracts/api/agents-tools.md#op-put-api-agents-key-visibility) | `pgSetAgentVisibility` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-agents-key-visibility) |

근거는 `server/server_mgmt.go`의 `17`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-llm"></a>
## `server/server_mgmt.go` · `llm` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/llm` family의 9개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/llm/profiles`](../contracts/api/agents-tools.md#op-get-api-llm-profiles) | `pgListProfiles` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-profiles) |
| [`POST /api/llm/profiles`](../contracts/api/agents-tools.md#op-post-api-llm-profiles) | `pgSaveProfile` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm-profiles) |
| [`DELETE /api/llm/profiles/{id}`](../contracts/api/agents-tools.md#op-delete-api-llm-profiles-id) | `pgDeleteProfile` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-llm-profiles-id) |
| [`POST /api/llm/profiles/active`](../contracts/api/agents-tools.md#op-post-api-llm-profiles-active) | `pgActivateProfile` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm-profiles-active) |
| [`GET /api/llm/retry-policy`](../contracts/api/agents-tools.md#op-get-api-llm-retry-policy) | `pgGetLLMRetryPolicy` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-retry-policy) |
| [`POST /api/llm/retry-policy`](../contracts/api/agents-tools.md#op-post-api-llm-retry-policy) | `pgSaveLLMRetryPolicy` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm-retry-policy) |
| [`GET /api/llm/pool`](../contracts/api/agents-tools.md#op-get-api-llm-pool) | `pgLLMPoolStatus` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-llm-pool) |
| [`POST /api/llm/pool/reset`](../contracts/api/agents-tools.md#op-post-api-llm-pool-reset) | `pgLLMPoolReset` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm-pool-reset) |
| [`POST /api/llm/models`](../contracts/api/agents-tools.md#op-post-api-llm-models) | `pgListModels` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-llm-models) |

근거는 `server/server_mgmt.go`의 `9`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-mcp"></a>
## `server/server_mgmt.go` · `mcp` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/mcp` family의 5개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/mcp`](../contracts/api/agents-tools.md#op-get-api-mcp) | `pgListMCP` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-mcp) |
| [`POST /api/mcp`](../contracts/api/agents-tools.md#op-post-api-mcp) | `pgSaveMCP` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-mcp) |
| [`DELETE /api/mcp/{id}`](../contracts/api/agents-tools.md#op-delete-api-mcp-id) | `pgDeleteMCP` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-mcp-id) |
| [`GET /api/mcp/{id}/tools`](../contracts/api/agents-tools.md#op-get-api-mcp-id-tools) | `pgMCPTools` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-mcp-id-tools) |
| [`POST /api/mcp/{id}/refresh`](../contracts/api/agents-tools.md#op-post-api-mcp-id-refresh) | `pgRefreshMCP` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-mcp-id-refresh) |

근거는 `server/server_mgmt.go`의 `5`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-skills"></a>
## `server/server_mgmt.go` · `skills` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/skills` family의 12개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/skills`](../contracts/api/agents-tools.md#op-get-api-skills) | `fsListSkills` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-skills) |
| [`POST /api/skills`](../contracts/api/agents-tools.md#op-post-api-skills) | `fsCreateSkill` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-skills) |
| [`POST /api/skills/upload`](../contracts/api/agents-tools.md#op-post-api-skills-upload) | `fsUploadSkill` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-skills-upload) |
| [`DELETE /api/skills/{name}`](../contracts/api/agents-tools.md#op-delete-api-skills-name) | `fsDeleteSkill` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-skills-name) |
| [`GET /api/skills/missing`](../contracts/api/agents-tools.md#op-get-api-skills-missing) | `fsMissingSkills` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-skills-missing) |
| [`GET /api/skills/{name}/usage`](../contracts/api/agents-tools.md#op-get-api-skills-name-usage) | `fsSkillUsage` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-skills-name-usage) |
| [`PUT /api/skills/{name}/meta`](../contracts/api/agents-tools.md#op-put-api-skills-name-meta) | `fsUpdateSkillMeta` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-skills-name-meta) |
| [`POST /api/skills/{name}/dirs`](../contracts/api/agents-tools.md#op-post-api-skills-name-dirs) | `fsCreateDir` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-skills-name-dirs) |
| [`GET /api/skills/{name}/files`](../contracts/api/agents-tools.md#op-get-api-skills-name-files) | `fsListFiles` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-skills-name-files) |
| [`GET /api/skills/{name}/files/{file...}`](../contracts/api/agents-tools.md#op-get-api-skills-name-files-file) | `fsReadFile` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-skills-name-files-file) |
| [`PUT /api/skills/{name}/files/{file...}`](../contracts/api/agents-tools.md#op-put-api-skills-name-files-file) | `fsWriteFile` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-skills-name-files-file) |
| [`DELETE /api/skills/{name}/files/{file...}`](../contracts/api/agents-tools.md#op-delete-api-skills-name-files-file) | `fsDeletePath` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-skills-name-files-file) |

근거는 `server/server_mgmt.go`의 `12`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-tasks"></a>
## `server/server_mgmt.go` · `tasks` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/tasks` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`DELETE /api/tasks/{id}`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id) | `pgDeleteTask` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id) |

근거는 `server/server_mgmt.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-tools"></a>
## `server/server_mgmt.go` · `tools` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/tools` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tools`](../contracts/api/agents-tools.md#op-get-api-tools) | `pgListTools` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tools) |
| [`PUT /api/tools/{key}`](../contracts/api/agents-tools.md#op-put-api-tools-key) | `pgUpdateTool` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-tools-key) |
| [`POST /api/tools/{key}/reset`](../contracts/api/agents-tools.md#op-post-api-tools-key-reset) | `pgResetTool` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tools-key-reset) |

근거는 `server/server_mgmt.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-server-mgmt-visibility"></a>
## `server/server_mgmt.go` · `visibility` family

LLM·agent·tool·MCP·skill 관리 route 중 `/api/visibility` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/visibility/{kind}/{id}`](../contracts/api/agents-tools.md#op-get-api-visibility-kind-id) | `pgResourceVisibility` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-visibility-kind-id) |
| [`POST /api/visibility/toggle`](../contracts/api/agents-tools.md#op-post-api-visibility-toggle) | `pgToggleVisibility` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-visibility-toggle) |
| [`GET /api/visibility/skill/{name}`](../contracts/api/agents-tools.md#op-get-api-visibility-skill-name) | `pgSkillVisibility` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-visibility-skill-name) |
| [`POST /api/visibility/skill/toggle`](../contracts/api/agents-tools.md#op-post-api-visibility-skill-toggle) | `pgToggleSkillVisibility` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-visibility-skill-toggle) |

근거는 `server/server_mgmt.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-side-questions-conversations"></a>
## `server/side_questions.go` · `conversations` family

conversation/task/intent side-question lifecycle와 SSE 중 `/api/conversations` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/conversations/{id}/side-questions`](../contracts/api/agents-tools.md#op-get-api-conversations-id-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-conversations-id-side-questions) |
| [`POST /api/conversations/{id}/side-questions`](../contracts/api/agents-tools.md#op-post-api-conversations-id-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-conversations-id-side-questions) |
| [`DELETE /api/conversations/{id}/side-questions`](../contracts/api/agents-tools.md#op-delete-api-conversations-id-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-conversations-id-side-questions) |

근거는 `server/side_questions.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-side-questions-side-questions"></a>
## `server/side_questions.go` · `side-questions` family

conversation/task/intent side-question lifecycle와 SSE 중 `/api/side-questions` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/side-questions/{requestID}/events`](../contracts/api/agents-tools.md#op-get-api-side-questions-requestid-events) | `sideEvents` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-side-questions-requestid-events) |
| [`POST /api/side-questions/{requestID}/cancel`](../contracts/api/agents-tools.md#op-post-api-side-questions-requestid-cancel) | `cancelSideRequest` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-side-questions-requestid-cancel) |

근거는 `server/side_questions.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-side-questions-tasks"></a>
## `server/side_questions.go` · `tasks` family

conversation/task/intent side-question lifecycle와 SSE 중 `/api/tasks` family의 6개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tasks/{id}/chat/side-questions`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-chat-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-chat-side-questions) |
| [`POST /api/tasks/{id}/chat/side-questions`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-chat-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-chat-side-questions) |
| [`DELETE /api/tasks/{id}/chat/side-questions`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-chat-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-chat-side-questions) |
| [`GET /api/tasks/{id}/intents/{iid}/side-questions`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-intents-iid-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-intents-iid-side-questions) |
| [`POST /api/tasks/{id}/intents/{iid}/side-questions`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intents-iid-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intents-iid-side-questions) |
| [`DELETE /api/tasks/{id}/intents/{iid}/side-questions`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-intents-iid-side-questions) | `handleSideQuestions` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-intents-iid-side-questions) |

근거는 `server/side_questions.go`의 `6`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-sync-scopesentry-sync"></a>
## `server/sync_scopesentry.go` · `sync` family

ScopeSentry 상태·project/task import 중 `/api/sync` family의 5개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/sync/scopesentry/status`](../contracts/api/system-operations.md#op-get-api-sync-scopesentry-status) | `syncSSStatus` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-sync-scopesentry-status) |
| [`POST /api/sync/scopesentry/datasource`](../contracts/api/system-operations.md#op-post-api-sync-scopesentry-datasource) | `syncSSDatasource` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-sync-scopesentry-datasource) |
| [`GET /api/sync/scopesentry/projects`](../contracts/api/system-operations.md#op-get-api-sync-scopesentry-projects) | `syncSSProjects` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-sync-scopesentry-projects) |
| [`GET /api/sync/scopesentry/tasks`](../contracts/api/system-operations.md#op-get-api-sync-scopesentry-tasks) | `syncSSTasks` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-sync-scopesentry-tasks) |
| [`POST /api/sync/scopesentry/sync`](../contracts/api/system-operations.md#op-post-api-sync-scopesentry-sync) | `syncSSRun` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-sync-scopesentry-sync) |

근거는 `server/sync_scopesentry.go`의 `5`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-archives-task-archives"></a>
## `server/task_archives.go` · `task-archives` family

task archive/restore/delete job 중 `/api/task-archives` family의 6개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/task-archives`](../contracts/api/tasks-exploration.md#op-get-api-task-archives) | `listTaskArchives` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-task-archives) |
| [`GET /api/task-archives/{id}`](../contracts/api/tasks-exploration.md#op-get-api-task-archives-id) | `getTaskArchive` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-task-archives-id) |
| [`POST /api/task-archives/{id}/restore`](../contracts/api/tasks-exploration.md#op-post-api-task-archives-id-restore) | `queueTaskArchiveRestore` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-task-archives-id-restore) |
| [`POST /api/task-archives/restore/batch`](../contracts/api/tasks-exploration.md#op-post-api-task-archives-restore-batch) | `restoreTaskArchivesBatch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-task-archives-restore-batch) |
| [`DELETE /api/task-archives/{id}`](../contracts/api/tasks-exploration.md#op-delete-api-task-archives-id) | `queueTaskArchiveDelete` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-task-archives-id) |
| [`POST /api/task-archives/delete/batch`](../contracts/api/tasks-exploration.md#op-post-api-task-archives-delete-batch) | `deleteTaskArchivesBatch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-task-archives-delete-batch) |

근거는 `server/task_archives.go`의 `6`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-archives-tasks"></a>
## `server/task_archives.go` · `tasks` family

task archive/restore/delete job 중 `/api/tasks` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/tasks/{id}/archive`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-archive) | `queueTaskArchive` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-archive) |
| [`POST /api/tasks/archive/batch`](../contracts/api/tasks-exploration.md#op-post-api-tasks-archive-batch) | `queueTaskArchivesBatch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-archive-batch) |

근거는 `server/task_archives.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-assets-tasks"></a>
## `server/task_assets.go` · `tasks` family

task asset attach/detach/reference 중 `/api/tasks` family의 3개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/tasks/{id}/assets`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-assets) | `attachTaskAssets` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-assets) |
| [`DELETE /api/tasks/{id}/assets/{assetID}`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-assets-assetid) | `detachTaskAsset` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-assets-assetid) |
| [`GET /api/tasks/{id}/intent-assets`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-intent-assets) | `taskIntentAssets` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-intent-assets) |

근거는 `server/task_assets.go`의 `3`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-categories-task-categories"></a>
## `server/task_categories.go` · `task-categories` family

task category CRUD·batch 중 `/api/task-categories` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/task-categories`](../contracts/api/tasks-exploration.md#op-get-api-task-categories) | `pgListTaskCategories` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-task-categories) |
| [`POST /api/task-categories`](../contracts/api/tasks-exploration.md#op-post-api-task-categories) | `pgCreateTaskCategory` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-task-categories) |
| [`PATCH /api/task-categories/{id}`](../contracts/api/tasks-exploration.md#op-patch-api-task-categories-id) | `pgRenameTaskCategory` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-task-categories-id) |
| [`DELETE /api/task-categories/{id}`](../contracts/api/tasks-exploration.md#op-delete-api-task-categories-id) | `pgDeleteTaskCategory` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-task-categories-id) |

근거는 `server/task_categories.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-categories-tasks"></a>
## `server/task_categories.go` · `tasks` family

task category CRUD·batch 중 `/api/tasks` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/tasks/category/batch`](../contracts/api/tasks-exploration.md#op-post-api-tasks-category-batch) | `updateTasksCategoryBatch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-category-batch) |
| [`PATCH /api/tasks/{id}/category`](../contracts/api/tasks-exploration.md#op-patch-api-tasks-id-category) | `updateTaskCategory` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-tasks-id-category) |

근거는 `server/task_categories.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-control-tasks"></a>
## `server/task_control.go` · `tasks` family

task pause/resume 중 `/api/tasks` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`POST /api/tasks/control/batch`](../contracts/api/tasks-exploration.md#op-post-api-tasks-control-batch) | `controlTasksBatch` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-control-batch) |

근거는 `server/task_control.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-intercept-tasks"></a>
## `server/task_intercept.go` · `tasks` family

task별 intercept rule CRUD 중 `/api/tasks` family의 5개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tasks/{id}/intercept-rules`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-intercept-rules) | `taskInterceptListRules` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-intercept-rules) |
| [`POST /api/tasks/{id}/intercept-rules`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intercept-rules) | `taskInterceptCreateRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intercept-rules) |
| [`PUT /api/tasks/{id}/intercept-rules/{rid}`](../contracts/api/tasks-exploration.md#op-put-api-tasks-id-intercept-rules-rid) | `taskInterceptUpdateRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-put-api-tasks-id-intercept-rules-rid) |
| [`DELETE /api/tasks/{id}/intercept-rules/{rid}`](../contracts/api/tasks-exploration.md#op-delete-api-tasks-id-intercept-rules-rid) | `taskInterceptDeleteRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-tasks-id-intercept-rules-rid) |
| [`POST /api/tasks/{id}/intercept-rules/{rid}/toggle`](../contracts/api/tasks-exploration.md#op-post-api-tasks-id-intercept-rules-rid-toggle) | `taskInterceptToggleRule` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-tasks-id-intercept-rules-rid-toggle) |

근거는 `server/task_intercept.go`의 `5`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-metadata-tasks"></a>
## `server/task_metadata.go` · `tasks` family

task 표시 metadata 변경 중 `/api/tasks` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`PATCH /api/tasks/{id}`](../contracts/api/tasks-exploration.md#op-patch-api-tasks-id) | `updateTaskMetadata` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-tasks-id) |

근거는 `server/task_metadata.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-resolution-tasks"></a>
## `server/task_resolution.go` · `tasks` family

task LLM resolution 조회 중 `/api/tasks` family의 1개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/tasks/{id}/llm/resolution`](../contracts/api/tasks-exploration.md#op-get-api-tasks-id-llm-resolution) | `taskLLMResolutionHandler` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-tasks-id-llm-resolution) |

근거는 `server/task_resolution.go`의 `1`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-task-templates-task-templates"></a>
## `server/task_templates.go` · `task-templates` family

task template CRUD 중 `/api/task-templates` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/task-templates`](../contracts/api/tasks-exploration.md#op-get-api-task-templates) | `pgListTaskTemplates` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-task-templates) |
| [`POST /api/task-templates`](../contracts/api/tasks-exploration.md#op-post-api-task-templates) | `pgCreateTaskTemplate` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-task-templates) |
| [`PATCH /api/task-templates/{id}`](../contracts/api/tasks-exploration.md#op-patch-api-task-templates-id) | `pgUpdateTaskTemplate` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-task-templates-id) |
| [`DELETE /api/task-templates/{id}`](../contracts/api/tasks-exploration.md#op-delete-api-task-templates-id) | `pgDeleteTaskTemplate` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-task-templates-id) |

근거는 `server/task_templates.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-triggers-agents"></a>
## `server/triggers.go` · `agents` family

agent trigger CRUD 중 `/api/agents` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/agents/{key}/triggers`](../contracts/api/agents-tools.md#op-get-api-agents-key-triggers) | `pgListTriggers` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-agents-key-triggers) |
| [`POST /api/agents/{key}/triggers`](../contracts/api/agents-tools.md#op-post-api-agents-key-triggers) | `pgCreateTrigger` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-agents-key-triggers) |

근거는 `server/triggers.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-triggers-triggers"></a>
## `server/triggers.go` · `triggers` family

agent trigger CRUD 중 `/api/triggers` family의 2개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`PATCH /api/triggers/{id}`](../contracts/api/system-operations.md#op-patch-api-triggers-id) | `pgUpdateTrigger` | [request/response/completion](../contracts/api/schema-reference.md#schema-patch-api-triggers-id) |
| [`DELETE /api/triggers/{id}`](../contracts/api/system-operations.md#op-delete-api-triggers-id) | `pgDeleteTrigger` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-triggers-id) |

근거는 `server/triggers.go`의 `2`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-update-update"></a>
## `server/update.go` · `update` family

release check/apply/rollback/SSE 중 `/api/update` family의 4개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/update/check`](../contracts/api/system-operations.md#op-get-api-update-check) | `updateCheck` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-update-check) |
| [`POST /api/update/apply`](../contracts/api/system-operations.md#op-post-api-update-apply) | `updateApply` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-update-apply) |
| [`POST /api/update/rollback`](../contracts/api/system-operations.md#op-post-api-update-rollback) | `updateRollback` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-update-rollback) |
| [`GET /api/update/stream`](../contracts/api/system-operations.md#op-get-api-update-stream) | `updateStream` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-update-stream) |

근거는 `server/update.go`의 `4`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.


<a id="provider-workspace-workspace"></a>
## `server/workspace.go` · `workspace` family

task workspace file API 중 `/api/workspace` family의 7개 등록 handler를 제공한다. 같은 file의 다른 family는 별도 provider 절로 분리했다.

| operation | handler | 의미 계약 |
|---|---|---|
| [`GET /api/workspace/list`](../contracts/api/system-operations.md#op-get-api-workspace-list) | `wsList` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-workspace-list) |
| [`GET /api/workspace/read`](../contracts/api/system-operations.md#op-get-api-workspace-read) | `wsRead` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-workspace-read) |
| [`POST /api/workspace/write`](../contracts/api/system-operations.md#op-post-api-workspace-write) | `wsWrite` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-workspace-write) |
| [`POST /api/workspace/mkdir`](../contracts/api/system-operations.md#op-post-api-workspace-mkdir) | `wsMkdir` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-workspace-mkdir) |
| [`DELETE /api/workspace/delete`](../contracts/api/system-operations.md#op-delete-api-workspace-delete) | `wsDelete` | [request/response/completion](../contracts/api/schema-reference.md#schema-delete-api-workspace-delete) |
| [`GET /api/workspace/download`](../contracts/api/system-operations.md#op-get-api-workspace-download) | `wsDownload` | [request/response/completion](../contracts/api/schema-reference.md#schema-get-api-workspace-download) |
| [`POST /api/workspace/upload`](../contracts/api/system-operations.md#op-post-api-workspace-upload) | `wsUpload` | [request/response/completion](../contracts/api/schema-reference.md#schema-post-api-workspace-upload) |

근거는 `server/workspace.go`의 `7`개 handler와 `server/server.go` registration을 함께 본다. 외부 service, DB transaction, helper 내부 background 작업은 operation별 C/P/U를 따른다.

## 확인 범위

- provider 58개가 operation 261/261개를 중복 없이 소유한다(C).
- 같은 handler symbol을 여러 method/path에 등록한 경우 operation identity는 method+path로 분리한다.
- source file/provider 소속은 정적 등록 기준이다. middleware 실행, 실제 request와 helper 내부 call reachability는 server 실행 전 A/U다.

