feat(api,config): add ESLint rules, update OpenAPI schema with fork API and project stats
This commit is contained in:
parent
12eaa83b87
commit
8731c01908
@ -19,5 +19,12 @@ export default defineConfig([
|
|||||||
ecmaVersion: 2020,
|
ecmaVersion: 2020,
|
||||||
globals: globals.browser,
|
globals: globals.browser,
|
||||||
},
|
},
|
||||||
|
rules: {
|
||||||
|
'react-refresh/only-export-components': [
|
||||||
|
'warn',
|
||||||
|
{ allowExportNames: ['useThemeCustomization', 'useThemePreset', 'useRoom', 'useOptionalRoom', 'resetAllThemeVars', 'loadThemeVars', 'applyThemePreset'] },
|
||||||
|
],
|
||||||
|
'react-hooks/exhaustive-deps': 'warn',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|||||||
390
openapi.json
390
openapi.json
@ -1371,6 +1371,15 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uuid"
|
"format": "uuid"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "q",
|
||||||
|
"in": "query",
|
||||||
|
"description": "Search query (title)",
|
||||||
|
"required": false,
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@ -1693,12 +1702,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/ai/conversations/{conversation_id}/messages/{message_id}/fork/{target_message_id}": {
|
"/api/ai/conversations/{conversation_id}/messages/{message_id}/fork": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": [
|
"tags": [
|
||||||
"AI Chat"
|
"AI Chat"
|
||||||
],
|
],
|
||||||
"operationId": "ai_message_fork",
|
"summary": "Fork a conversation from a specific message, creating a new conversation\nwith all messages up to and including the source message.",
|
||||||
|
"operationId": "ai_conversation_fork",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"name": "conversation_id",
|
"name": "conversation_id",
|
||||||
@ -1713,17 +1723,7 @@
|
|||||||
{
|
{
|
||||||
"name": "message_id",
|
"name": "message_id",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"description": "Source message ID",
|
"description": "Source message ID to fork from",
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uuid"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "target_message_id",
|
|
||||||
"in": "path",
|
|
||||||
"description": "Target/fork message ID to create",
|
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -1733,11 +1733,11 @@
|
|||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Fork created",
|
"description": "Conversation forked",
|
||||||
"content": {
|
"content": {
|
||||||
"application/json": {
|
"application/json": {
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/components/schemas/ApiResponse_ForkResponse"
|
"$ref": "#/components/schemas/ApiResponse_ForkConversationResponse"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7942,6 +7942,45 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/projects/{project_name}/stats": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"Project"
|
||||||
|
],
|
||||||
|
"operationId": "project_stats",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "project_name",
|
||||||
|
"in": "path",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Get project statistics",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/ApiResponse_ProjectStatsResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "Unauthorized"
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "Forbidden — no access to this project"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Project not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/projects/{project_name}/watch": {
|
"/api/projects/{project_name}/watch": {
|
||||||
"get": {
|
"get": {
|
||||||
"tags": [
|
"tags": [
|
||||||
@ -22342,6 +22381,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ActivityBreakdownItem": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"event_type",
|
||||||
|
"count"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"event_type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ActivityLogListResponse": {
|
"ActivityLogListResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
@ -25331,7 +25386,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ApiResponse_ForkResponse": {
|
"ApiResponse_ForkConversationResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"code",
|
"code",
|
||||||
@ -25349,8 +25404,7 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"id",
|
"id",
|
||||||
"source_message_id",
|
"model",
|
||||||
"fork_message_id",
|
|
||||||
"created_at"
|
"created_at"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -25358,20 +25412,14 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uuid"
|
"format": "uuid"
|
||||||
},
|
},
|
||||||
"conversation_id": {
|
"title": {
|
||||||
"type": [
|
"type": [
|
||||||
"string",
|
"string",
|
||||||
"null"
|
"null"
|
||||||
],
|
]
|
||||||
"format": "uuid"
|
|
||||||
},
|
},
|
||||||
"source_message_id": {
|
"model": {
|
||||||
"type": "string",
|
"type": "string"
|
||||||
"format": "uuid"
|
|
||||||
},
|
|
||||||
"fork_message_id": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uuid"
|
|
||||||
},
|
},
|
||||||
"created_at": {
|
"created_at": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -27495,6 +27543,130 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ApiResponse_ProjectStatsResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"code",
|
||||||
|
"message"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int32"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Aggregated project statistics for dashboard display.",
|
||||||
|
"required": [
|
||||||
|
"project_id",
|
||||||
|
"project_name",
|
||||||
|
"member_count",
|
||||||
|
"repo_count",
|
||||||
|
"issue_total",
|
||||||
|
"issue_open",
|
||||||
|
"issue_closed",
|
||||||
|
"pr_total",
|
||||||
|
"pr_open",
|
||||||
|
"pr_merged",
|
||||||
|
"pr_closed",
|
||||||
|
"room_count",
|
||||||
|
"ai_call_count",
|
||||||
|
"ai_input_tokens",
|
||||||
|
"ai_output_tokens",
|
||||||
|
"activity_last_30d",
|
||||||
|
"recent_activities"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"project_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
"project_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"member_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"my_role": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"repo_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"issue_total": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"issue_open": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"issue_closed": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_total": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_open": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_merged": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_closed": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"room_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_call_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_input_tokens": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_output_tokens": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_cost_usd": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"activity_last_30d": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/components/schemas/ActivityBreakdownItem"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recent_activities": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/components/schemas/ProjectStatsActivityItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ApiResponse_PullRequestListResponse": {
|
"ApiResponse_PullRequestListResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
@ -35838,12 +36010,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ForkResponse": {
|
"ForkConversationResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"id",
|
"id",
|
||||||
"source_message_id",
|
"model",
|
||||||
"fork_message_id",
|
|
||||||
"created_at"
|
"created_at"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -35851,20 +36022,14 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uuid"
|
"format": "uuid"
|
||||||
},
|
},
|
||||||
"conversation_id": {
|
"title": {
|
||||||
"type": [
|
"type": [
|
||||||
"string",
|
"string",
|
||||||
"null"
|
"null"
|
||||||
],
|
]
|
||||||
"format": "uuid"
|
|
||||||
},
|
},
|
||||||
"source_message_id": {
|
"model": {
|
||||||
"type": "string",
|
"type": "string"
|
||||||
"format": "uuid"
|
|
||||||
},
|
|
||||||
"fork_message_id": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uuid"
|
|
||||||
},
|
},
|
||||||
"created_at": {
|
"created_at": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -39354,6 +39519,149 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ProjectStatsActivityItem": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"event_type",
|
||||||
|
"title",
|
||||||
|
"actor_name",
|
||||||
|
"created_at"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"event_type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"actor_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"actor_avatar": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ProjectStatsResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Aggregated project statistics for dashboard display.",
|
||||||
|
"required": [
|
||||||
|
"project_id",
|
||||||
|
"project_name",
|
||||||
|
"member_count",
|
||||||
|
"repo_count",
|
||||||
|
"issue_total",
|
||||||
|
"issue_open",
|
||||||
|
"issue_closed",
|
||||||
|
"pr_total",
|
||||||
|
"pr_open",
|
||||||
|
"pr_merged",
|
||||||
|
"pr_closed",
|
||||||
|
"room_count",
|
||||||
|
"ai_call_count",
|
||||||
|
"ai_input_tokens",
|
||||||
|
"ai_output_tokens",
|
||||||
|
"activity_last_30d",
|
||||||
|
"recent_activities"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"project_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
"project_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"member_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"my_role": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"repo_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"issue_total": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"issue_open": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"issue_closed": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_total": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_open": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_merged": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"pr_closed": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"room_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_call_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_input_tokens": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_output_tokens": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"ai_cost_usd": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"activity_last_30d": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/components/schemas/ActivityBreakdownItem"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recent_activities": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/components/schemas/ProjectStatsActivityItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ProviderResponse": {
|
"ProviderResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user