openpencil/server/api/mcp/selection.post.ts
Kayshen Xu 3b60bdc1fa V0.3.2 (#28)
* feat(electron): update electron-builder.yml to specify artifact naming convention for Windows builds. This change enhances clarity and consistency in the build output.

* feat(electron): implement a file logger for the main process

- Added a new logger module that writes logs to `{userData}/logs/main.log` with daily rotation and retains logs for the last 7 days.
- Integrated logging functionality into the main process, replacing console error messages with log entries for better error tracking and debugging.
- Introduced IPC handlers to retrieve the log directory path for user access.
- Updated the preload and main files to utilize the new logging system, enhancing overall application reliability and maintainability.

* feat(mcp): introduce layered design workflow and selection management

- Added a new layered design workflow with tools: `design_skeleton`, `design_content`, and `design_refine` for improved multi-section design generation.
- Implemented segmented prompt retrieval in `get_design_prompt` to allow focused access to design knowledge.
- Created new API endpoints for managing canvas selection state with `selection.get` and `selection.post`, enabling real-time updates and synchronization.
- Enhanced document management with live selection fetching and improved node operations for better design content handling.
- Updated README and CLAUDE.md to reflect new features and usage guidelines for the layered design process.
2026-03-10 21:55:47 +08:00

22 lines
755 B
TypeScript

import { defineEventHandler, readBody, setResponseHeaders } from 'h3'
import { setSyncSelection } from '../../utils/mcp-sync-state'
interface PostBody {
selectedIds: string[]
activePageId?: string | null
}
/** POST /api/mcp/selection — Receives selection update from renderer. */
export default defineEventHandler(async (event) => {
setResponseHeaders(event, { 'Content-Type': 'application/json' })
const body = await readBody<PostBody>(event)
if (!body || !Array.isArray(body.selectedIds)) {
return new Response(JSON.stringify({ error: 'Missing selectedIds array' }), {
status: 400,
headers: { 'Content-Type': 'application/json' },
})
}
setSyncSelection(body.selectedIds, body.activePageId)
return { ok: true }
})