Remove Scenes, group beats by multiple characters; strip comments repo-wide
Drop the Scene entity/grouping in favor of chapters carrying prose directly and beats belonging to many characters. Add markdown editor + character multi-select components to the web client. Remove all XML doc and inline comments across the touched C#/TS/CSS files in favor of self-documenting names, and record that convention in CLAUDE.md. Add .mcp.json (local MCP server config, no secrets) and ignore .idea/.
This commit is contained in:
@@ -9,8 +9,8 @@ public static class BeatTools
|
||||
{
|
||||
[McpServerTool(Name = "get_chapter_outline")]
|
||||
[Description("Read a chapter's outline: its beats in order. Each beat is one row — a short "
|
||||
+ "title, whose beat it is, what happened, and what it sets up. The chapter's "
|
||||
+ "summary paragraph sits on the chapter itself, via get_chapter.")]
|
||||
+ "title, who it belongs to, what happened, and what it sets up. The chapter's "
|
||||
+ "summary paragraph and drafted prose sit on the chapter itself, via get_chapter.")]
|
||||
public static Task<CallToolResult> GetChapterOutline(
|
||||
NovelApiClient api,
|
||||
[Description("The chapter's id.")] Guid chapterId,
|
||||
@@ -26,34 +26,29 @@ public static class BeatTools
|
||||
[Description("Three to five words naming the beat.")] string title,
|
||||
CancellationToken ct,
|
||||
[Description("Position in the chapter. Appended to the end when omitted.")] int? sortOrder = null,
|
||||
[Description("Id of the character whose beat this is.")] Guid? characterId = null,
|
||||
[Description("Ids of the characters whose beat this is.")] Guid[]? characterIds = null,
|
||||
[Description("The event itself.")] string? whatHappened = null,
|
||||
[Description("What it sets in motion — the hook into the next beat.")] string? whatsNext = null,
|
||||
[Description("Id of the scene this beat will be written into, if decided.")] Guid? sceneId = null,
|
||||
[Description("Tags for cross-referencing. Unknown tags are created.")] string[]? tags = null) =>
|
||||
api.PostAsync($"/api/chapters/{chapterId}/beats",
|
||||
new { title, sortOrder, characterId, whatHappened, whatsNext, sceneId, tags }, ct);
|
||||
new { title, sortOrder, characterIds, whatHappened, whatsNext, tags }, ct);
|
||||
|
||||
[McpServerTool(Name = "update_beat")]
|
||||
[Description("Revise a beat. Only the fields you supply change. Supplying a tag list replaces "
|
||||
+ "the beat's tags outright, so include the ones you want to keep. A character or "
|
||||
+ "scene id already set stays put unless you pass clearCharacter/clearScene — "
|
||||
+ "leaving the id null means 'don't touch it', not 'remove it'.")]
|
||||
[Description("Revise a beat. Only the fields you supply change. Supplying a characterIds or "
|
||||
+ "tag list replaces the beat's characters or tags outright — pass an empty list "
|
||||
+ "to clear one, and include everything you want to keep.")]
|
||||
public static Task<CallToolResult> UpdateBeat(
|
||||
NovelApiClient api,
|
||||
[Description("The beat's id.")] Guid beatId,
|
||||
CancellationToken ct,
|
||||
[Description("Three to five words naming the beat.")] string? title = null,
|
||||
[Description("Position in the chapter.")] int? sortOrder = null,
|
||||
[Description("Id of the character whose beat this is.")] Guid? characterId = null,
|
||||
[Description("Ids of the characters whose beat this is. Replaces the existing list.")] Guid[]? characterIds = null,
|
||||
[Description("The event itself.")] string? whatHappened = null,
|
||||
[Description("What it sets in motion.")] string? whatsNext = null,
|
||||
[Description("Id of the scene this beat will be written into.")] Guid? sceneId = null,
|
||||
[Description("Tags for cross-referencing. Replaces the existing tags.")] string[]? tags = null,
|
||||
[Description("Detach this beat's character, leaving it unassigned.")] bool clearCharacter = false,
|
||||
[Description("Detach this beat's scene, leaving it ungrouped.")] bool clearScene = false) =>
|
||||
[Description("Tags for cross-referencing. Replaces the existing tags.")] string[]? tags = null) =>
|
||||
api.PatchAsync($"/api/beats/{beatId}",
|
||||
new { title, sortOrder, characterId, whatHappened, whatsNext, sceneId, tags, clearCharacter, clearScene }, ct);
|
||||
new { title, sortOrder, characterIds, whatHappened, whatsNext, tags }, ct);
|
||||
|
||||
[McpServerTool(Name = "delete_beat")]
|
||||
[Description("Remove a beat from a chapter's outline. Confirm with the writer first.")]
|
||||
|
||||
Reference in New Issue
Block a user