Make the skill runbook limits a general setting

The longest runbook a skill may save and how much of it load_skill hands
back are now set on Settings > General (skill_body_max_chars,
skill_body_shown_chars), defaulting to AppData.SkillBodyMaxChars and
SkillBodyShownChars. Saving, confirming and proposing a skill check the
install's limit; a skill saved before it was lowered can still be toggled.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-25 09:43:00 +01:00
co-authored by Claude Opus 5.5
parent 2408185a65
commit 373210c2a5
22 changed files with 421 additions and 28 deletions
@@ -2,6 +2,7 @@ import { z } from "zod";
import { AppData } from "@/src/data/app-data";
import createExtensionProposal from "@/src/functions/backend/db/extension-proposals/create-extension-proposal";
import grabExtensionProposalView from "@/src/functions/backend/db/extension-proposals/grab-extension-proposal-view";
import assertSkillBodyFits from "@/src/functions/backend/db/extensions/assert-skill-body-fits";
import grabSkill from "@/src/functions/backend/db/extensions/grab-skill";
import { SaveSkillRequestSchema } from "@/src/schemas/extension-schema";
import parseWithSchema from "@/src/utils/parse-with-schema";
@@ -51,7 +52,7 @@ export default function proposeSkillTool({ user_id, bot_id, session_id, workspac
name: z.string().trim().max(80).optional(),
slug: z.string().trim().max(80).optional(),
description: z.string().trim().max(AppData.SkillDescriptionMaxChars).optional(),
body: z.string().max(AppData.SkillBodyMaxChars).optional().describe("The runbook, markdown"),
body: z.string().max(AppData.SkillBodyLimitMax).optional().describe("The runbook, markdown"),
enabled: z.boolean().optional(),
all_bots: z.boolean().optional(),
...SkillReviewFields,
@@ -73,6 +74,8 @@ export default function proposeSkillTool({ user_id, bot_id, session_id, workspac
},
});
if (data.body != current?.body) await assertSkillBodyFits({ body: data.body });
const id = await createExtensionProposal({
user_id,
bot_id,