You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
description: `Trimmed title from ${oldTitle.length} chars to ${newTitle.length} chars; full description preserved in body`
75158
+
severity: "error",
75159
+
message: `Title is ${oldTitle.length} chars \u2014 looks auto-truncated or is a full description, not a title`,
75160
+
fix: `Rewrite as a crisp 3\u20138 word summary (\u226480 chars, single line, no trailing period). Preserve the current text as a paragraph in the body under the H1 if it isn't there already. Original: "${preview}"`
75187
75161
});
75188
75162
fixedHere = true;
75189
-
changed = true;
75190
75163
}
75191
75164
if (issue3.field === "created" && data.created && !data.created_at) {
message: `Title should be a short one-liner \u2014 ${reason}`,
75423
-
fix: `Replace \`title\` with: "${derived.replace(/"/g, '\\"')}". Move the full description into the intent body as a paragraph under the H1.`
75452
+
fix: "Rewrite `title` as a crisp 3\u20138 word summary (\u226480 chars, single line, no trailing period). Do NOT truncate the current value \u2014 write a deliberate human-readable summary. Preserve the original text as a paragraph in the body under the H1 if it isn't there already."
75424
75453
});
75425
75454
}
75426
75455
if (!repairData.studio) {
@@ -105197,9 +105226,35 @@ ${errorStack}
105197
105226
}
105198
105227
if (name === "haiku_intent_create") {
105199
105228
const description = args2.description;
105229
+
const titleInput = args2.title;
105200
105230
let slug = args2.slug;
105231
+
if (!titleInput || typeof titleInput !== "string") {
105232
+
return text(
105233
+
JSON.stringify({
105234
+
error: "missing_title",
105235
+
message: 'haiku_intent_create requires a `title` parameter \u2014 a crisp 3\u20138 word summary (\u226480 chars, single line, no trailing period). Write it deliberately; do NOT pass a truncated description. Example: title: "Add archivable intents".'
105236
+
})
105237
+
);
105238
+
}
105239
+
if (/[\r\n]/.test(titleInput)) {
105240
+
return text(
105241
+
JSON.stringify({
105242
+
error: "invalid_title",
105243
+
message: "`title` must be a single line \u2014 got newlines. Rewrite as a crisp 3\u20138 word summary (\u226480 chars) and call again."
105244
+
})
105245
+
);
105246
+
}
105247
+
const title = titleInput.trim().replace(/\s+/g, " ");
105248
+
if (intentTitleNeedsRepair(title)) {
105249
+
return text(
105250
+
JSON.stringify({
105251
+
error: "invalid_title",
105252
+
message: `\`title\` must be non-empty and \u226480 chars after trimming. Got ${title.length} chars. Rewrite as a 3\u20138 word summary and call again.`
message: `Intent '${slug}' has been reset. Call haiku_intent_create { description: "${description.replace(/"/g, '\\"')}", slug: "${slug}"${conversationContext ? ', context: "<preserved context>"' : ""} } to recreate it.`
105648
+
message: `Intent '${slug}' has been reset. Call haiku_intent_create { title: "${title.replace(/"/g, '\\"')}", description: "${description.replace(/"/g, '\\"').replace(/\n/g, "\\n")}", slug: "${slug}"${conversationContext ? ', context: "<preserved context>"' : ""} } to recreate it.`
105595
105649
},
105596
105650
null,
105597
105651
2
@@ -105636,17 +105690,21 @@ var init_orchestrator = __esm({
105636
105690
// haiku_gate_approve removed — gates are handled by the FSM (review UI + elicitation fallback)
105637
105691
{
105638
105692
name: "haiku_intent_create",
105639
-
description: "Create a new H\xB7AI\xB7K\xB7U intent. Studio selection happens separately via haiku_select_studio.",
105693
+
description: 'Create a new H\xB7AI\xB7K\xB7U intent. Studio selection happens separately via haiku_select_studio. You must provide BOTH a crisp `title` (3\u20138 words, \u226480 chars, single line, no trailing punctuation \u2014 e.g. "Add archivable intents") AND a richer `description` (2\u20135 sentences covering scope, motivation, and constraints). The title is NOT derived from the description \u2014 write it deliberately as a human-readable summary.',
105640
105694
inputSchema: {
105641
105695
type: "object",
105642
105696
properties: {
105697
+
title: {
105698
+
type: "string",
105699
+
description: 'Short human-readable title (3\u20138 words, max 80 chars, single line, no trailing period). Must be a deliberate summary \u2014 NOT the first 80 chars of the description. Good: "Add archivable intents". Bad: "Add archivable intents to H\xB7AI\xB7K\xB7U. Users need a way to soft-hide\u2026".'
105700
+
},
105643
105701
description: {
105644
105702
type: "string",
105645
-
description: "What the intent is about"
105703
+
description: "Full description of what the intent is about (2\u20135 sentences covering scope, motivation, and constraints). Stored verbatim in the intent body."
105646
105704
},
105647
105705
slug: {
105648
105706
type: "string",
105649
-
description: "URL-friendly slug for the intent (auto-generated from description if not provided)"
105707
+
description: "URL-friendly slug for the intent (auto-generated from title if not provided)"
105650
105708
},
105651
105709
context: {
105652
105710
type: "string",
@@ -105663,7 +105721,7 @@ var init_orchestrator = __esm({
105663
105721
description: "Explicit stage list \u2014 overrides the studio's default stages. Use to run a subset of stages (e.g. just ['development'] for quick tasks)."
0 commit comments