跳到主要内容

Idea API

/api/idea - AI-driven idea generation and management endpoints

Overview

The Idea API provides AI-driven code improvement suggestion generation and management capabilities. It supports 6 built-in types and user-defined custom types. Generated ideas can be promoted to tasks.

Architecture

+---------------------------------------------------------------+
| CLI / Gateway |
+---------------------------------------------------------------+
| +------------------+ +------------------+ |
| | viben idea * | | /api/idea/* | |
| | (CLI commands) | | (REST routes) | |
| +--------+---------+ +--------+---------+ |
| | | |
| +------------+---------------+ |
| | |
| v |
| +------------------------------------------------------------+
| | packages/core/src/idea/ops |
| | generateIdeas, listIdeas, viewIdea, promoteIdea, etc. |
| +------------------------------------------------------------+
+---------------------------------------------------------------+

Endpoints

MethodPathDescription
POST/api/idea/generateGenerate ideas
GET/api/ideaGet idea list
GET/api/idea/typesGet available type list
GET/api/idea/:idGet single idea details
POST/api/idea/:id/promotePromote idea to task
POST/api/idea/:id/dismissDismiss idea
DELETE/api/idea/:idDelete idea
DELETE/api/ideaBatch delete ideas
GET/api/idea/sessionsGet generation session list
GET/api/idea/sessions/:idGet generation session details

Detailed Description

POST /api/idea/generate

Generate ideas. This is a streaming endpoint that returns generation progress via SSE.

Request Body:

{
"types": ["code_improvements", "security_hardening"],
"workspace_path": "/path/to/project",
"output": ".viben/ideas",
"model": "sonnet",
"max_ideas": 5,
"append": false,
"override": false
}

Field Description:

FieldTypeRequiredDescription
typesstring[]YesList of idea types to generate
workspace_pathstringYesWorkspace path
outputstringNoOutput directory, defaults to .viben/ideas
modelstringNoAI model, defaults to global configuration
max_ideasnumberNoMaximum ideas per type, defaults to 5
appendbooleanNoAppend mode, defaults to false
overridebooleanNoForce regeneration, defaults to false

Response Format: text/event-stream

Event Types:

// Generation start
{"type": "start", "session_id": "03-11-api-improvement", "types": ["code_improvements"]}

// Type start
{"type": "type_start", "idea_type": "code_improvements"}

// Generation progress
{"type": "progress", "idea_type": "code_improvements", "current": 2, "total": 5}

// Single idea generation complete
{"type": "idea_generated", "idea": {...}}

// Type complete
{"type": "type_complete", "idea_type": "code_improvements", "count": 5}

// All complete
{"type": "complete", "session_id": "03-11-api-improvement", "summary": {...}}

// Error
{"type": "error", "message": "Failed to generate ideas", "idea_type": "code_improvements"}

Non-streaming Response (add ?stream=false query parameter):

{
"success": true,
"session_id": "03-11-api-improvement",
"summary": {
"total_ideas": 10,
"by_type": {
"code_improvements": 5,
"security_hardening": 5
}
},
"ideas": [...]
}

GET /api/idea

Get idea list.

Query Parameters:

ParameterTypeDescription
workspace_pathstringRequired Workspace path
typestringFilter by type
effortstringFilter by effort (trivial/small/medium/large/complex)
statusstringFilter by status (draft/promoted/dismissed)
session_idstringFilter by session ID
limitnumberLimit returned count, defaults to 100
offsetnumberPagination offset

Response:

{
"success": true,
"ideas": [
{
"id": "a1b2c3d4",
"type": "code_improvements",
"name": "add-retry-logic",
"title": "Add retry logic to API calls",
"description": "Add automatic retry logic to API calls",
"rationale": "Current code fails directly on network errors",
"estimated_effort": "small",
"status": "draft",
"promoted_to": null,
"created_at": "2026-03-11T14:30:00Z",
"affected_files": ["src/api/client.ts"],
"existing_patterns": ["error handling in src/utils/error.ts"],
"session_id": "03-11-api-improvement"
}
],
"total": 10,
"has_more": false
}

GET /api/idea/types

Get available idea type list.

Query Parameters:

ParameterTypeDescription
workspace_pathstringRequired Workspace path
include_builtinbooleanInclude built-in types, defaults to true
include_custombooleanInclude custom types, defaults to true

Response:

{
"success": true,
"types": [
{
"name": "code_improvements",
"description": "Code improvements - Improvement opportunities based on existing patterns",
"source": "builtin",
"max_ideas": 5
},
{
"name": "api_design",
"description": "API design improvements - RESTful standards, interface consistency",
"source": "custom",
"max_ideas": 5,
"path": "docs/idea-types/api_design.md"
}
]
}

Built-in Types:

TypeDescription
code_improvementsCode improvements
ui_ux_improvementsUI/UX improvements
documentation_gapsDocumentation gaps
security_hardeningSecurity hardening
performance_optimizationsPerformance optimizations
code_qualityCode quality

GET /api/idea/:id

Get single idea details.

Query Parameters:

ParameterTypeDescription
workspace_pathstringRequired Workspace path

Response:

{
"success": true,
"idea": {
"id": "a1b2c3d4",
"type": "code_improvements",
"name": "add-retry-logic",
"title": "Add retry logic to API calls",
"description": "Add automatic retry logic to API calls, handling temporary network failures",
"rationale": "Current code fails directly on network errors without retry mechanism",
"estimated_effort": "small",
"status": "draft",
"promoted_to": null,
"created_at": "2026-03-11T14:30:00Z",
"affected_files": ["src/api/client.ts", "src/api/request.ts"],
"existing_patterns": ["error handling in src/utils/error.ts"],
"implementation_approach": "Use exponential backoff strategy...",
"session_id": "03-11-api-improvement",
"file_path": ".viben/ideas/03-11-api-improvement/idea_code_improvements_add-retry-logic.md"
}
}

Error Response (404):

{
"success": false,
"error": "Idea not found: a1b2c3d4"
}

POST /api/idea/:id/promote

Promote idea to task.

Request Body:

{
"workspace_path": "/path/to/project",
"slug": "add-retry-logic",
"branch": "feature/add-retry-logic",
"assignee": "developer",
"priority": "P2",
"executor": "CLAUDE_CODE",
"model": "opus",
"start": false,
"worktree": false
}

Field Description:

FieldTypeRequiredDescription
workspace_pathstringYesWorkspace path
slugstringNoTask identifier
branchstringNoCustom branch name
assigneestringNoAssignee
prioritystringNoPriority (P0-P3)
executorstringNoExecutor type
modelstringNoModel to use
startbooleanNoAuto-start task
worktreebooleanNoRun in git worktree

Effort to Priority Default Mapping:

EffortPriority
trivialP3
smallP3
mediumP2
largeP1
complexP1

Response:

{
"success": true,
"idea_id": "a1b2c3d4",
"task": {
"id": "task-123",
"name": "add-retry-logic",
"title": "Add retry logic to API calls",
"status": "backlog",
"task_dir": ".viben/tasks/03-11-add-retry-logic"
}
}

POST /api/idea/:id/dismiss

Dismiss an idea.

Request Body:

{
"workspace_path": "/path/to/project",
"reason": "Not applicable to current project"
}

Response:

{
"success": true,
"idea_id": "a1b2c3d4",
"status": "dismissed"
}

DELETE /api/idea/:id

Delete a single idea.

Query Parameters:

ParameterTypeDescription
workspace_pathstringRequired Workspace path

Response:

{
"success": true,
"deleted": "a1b2c3d4"
}

DELETE /api/idea

Batch delete ideas.

Request Body:

{
"workspace_path": "/path/to/project",
"ids": ["a1b2c3d4", "b2c3d4e5"],
"type": "code_improvements",
"all": false
}

Note: ids, type, all - at least one must be specified.

Response:

{
"success": true,
"deleted": 3,
"ids": ["a1b2c3d4", "b2c3d4e5", "c3d4e5f6"]
}

GET /api/idea/sessions

Get generation session list.

Query Parameters:

ParameterTypeDescription
workspace_pathstringRequired Workspace path
limitnumberLimit returned count, defaults to 20
offsetnumberPagination offset

Response:

{
"success": true,
"sessions": [
{
"id": "03-11-api-improvement",
"types": ["code_improvements", "security_hardening"],
"model": "sonnet",
"summary": {
"total_ideas": 10,
"by_type": {"code_improvements": 5, "security_hardening": 5},
"by_status": {"draft": 9, "promoted": 1}
},
"generated_at": "2026-03-11T14:30:00Z",
"updated_at": "2026-03-11T14:35:00Z"
}
],
"total": 5,
"has_more": false
}

GET /api/idea/sessions/:id

Get generation session details.

Query Parameters:

ParameterTypeDescription
workspace_pathstringRequired Workspace path
include_ideasbooleanWhether to include idea list, defaults to true

Response:

{
"success": true,
"session": {
"id": "03-11-api-improvement",
"types": ["code_improvements", "security_hardening"],
"model": "sonnet",
"summary": {...},
"files": [
"idea_code_improvements_add-retry-logic.md",
"idea_security_hardening_input-sanitization.md"
],
"generated_at": "2026-03-11T14:30:00Z",
"updated_at": "2026-03-11T14:35:00Z"
},
"ideas": [...]
}

Data Structures

Idea Object

FieldTypeDescription
idstring8-character short UUID
typestringIdea type
namestringFile-friendly name
titlestringShort title
descriptionstringDetailed description
rationalestringReason for improvement
estimated_effortstringEffort estimate
statusstringStatus (draft/promoted/dismissed)
promoted_tostringAssociated task ID
created_atstringCreation time (ISO 8601)
affected_filesstring[]Affected files
existing_patternsstring[]Existing patterns for reference
implementation_approachstringImplementation approach
session_idstringParent session ID

IdeaType Object

FieldTypeDescription
namestringType identifier
descriptionstringType description
sourcestringSource (builtin or custom)
max_ideasnumberDefault maximum ideas
pathstring | undefinedFile path for custom types

IdeaSession Object

FieldTypeDescription
idstringSession ID (format: MM-DD-slug)
typesstring[]List of generated types
modelstringModel used
summaryobjectStatistical summary
filesstring[]List of generated files
generated_atstringGeneration time
updated_atstringUpdate time

File Persistence

Idea data is stored in the workspace's .viben/ideas/ directory:

.viben/
ideas/
<date>-<slug>/ # One directory per generation
idea.json # Metadata
idea_code_improvements_<name1>.md # Each idea in its own file
idea_code_improvements_<name2>.md
idea_security_hardening_<name1>.md

docs/
idea-types/ # Custom type prompt templates
api_design.md
refactoring.md

WebSocket Event Notifications

Idea generation sends events to the WebSocket (idea channel):

// Generation started
{
"type": "idea_generation_started",
"data": {
"session_id": "03-11-api-improvement",
"types": ["code_improvements", "security_hardening"]
}
}

// Single idea generated
{
"type": "idea_generated",
"data": {
"session_id": "03-11-api-improvement",
"idea": {...}
}
}

// Type completed
{
"type": "idea_type_completed",
"data": {
"session_id": "03-11-api-improvement",
"idea_type": "code_improvements",
"count": 5
}
}

// Generation completed
{
"type": "idea_generation_completed",
"data": {
"session_id": "03-11-api-improvement",
"summary": {...}
}
}

// Idea status changed
{
"type": "idea_status_changed",
"data": {
"idea_id": "a1b2c3d4",
"old_status": "draft",
"new_status": "promoted",
"promoted_to": "task-123"
}
}

// Idea deleted
{
"type": "idea_deleted",
"data": {
"idea_id": "a1b2c3d4"
}
}

Error Codes

HTTP StatusError TypeDescription
400ValidationErrorInvalid request parameters
404NotFoundErrorIdea or session not found
409ConflictErrorIdea already promoted to task
500InternalErrorInternal server error

Error Response Format:

{
"success": false,
"error": "Idea not found: a1b2c3d4",
"code": "NOT_FOUND"
}