@clipform/mcp-server 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  FULL_CAPS,
3
3
  getSessionContextWithAuth
4
- } from "./chunk-S6RYUVDM.js";
4
+ } from "./chunk-PDI6VJYQ.js";
5
5
  import {
6
6
  WORKFLOW_TYPES,
7
7
  getDiscoveryParams
8
- } from "./chunk-JRASOR5T.js";
8
+ } from "./chunk-4IAURGG7.js";
9
9
  import {
10
10
  __export
11
11
  } from "./chunk-PZ5AY32C.js";
@@ -14526,14 +14526,43 @@ config(en_default());
14526
14526
 
14527
14527
  // src/prompts.ts
14528
14528
  var WORKFLOW_TYPES2 = WORKFLOW_TYPES;
14529
- var MEDIA_STYLE_ENUM = ["text", "images", "video"];
14529
+ var MAX_PROMPT_QUESTIONS = 20;
14530
+ var clean = (v) => typeof v === "string" ? v.trim().toLowerCase() : "";
14531
+ function normalizeMediaStyle(v) {
14532
+ const t = clean(v);
14533
+ if (/\b(video|slide\w*|narrat\w*|motion)\b/.test(t)) return "video";
14534
+ if (/\b(text|plain|none)\b/.test(t)) return "text";
14535
+ if (/\b(image\w*|photo\w*|still\w*|picture\w*)\b/.test(t)) return "images";
14536
+ return "video";
14537
+ }
14538
+ function normalizeResponseFormat(v) {
14539
+ const t = clean(v);
14540
+ if (!t) return void 0;
14541
+ if (/(all|any|every|both)/.test(t)) return "all";
14542
+ const mentioned = ["video", "audio", "text"].filter((f) => t.includes(f));
14543
+ return mentioned.length === 1 ? mentioned[0] : "all";
14544
+ }
14545
+ function normalizeQuestionCount(v) {
14546
+ const n = parseInt(clean(v), 10);
14547
+ if (Number.isNaN(n) || n < 1) return void 0;
14548
+ return Math.min(n, MAX_PROMPT_QUESTIONS);
14549
+ }
14550
+ function normalizeBool(v) {
14551
+ const t = clean(v);
14552
+ if (["true", "yes", "y", "1", "on"].includes(t)) return true;
14553
+ if (["false", "no", "n", "0", "off"].includes(t)) return false;
14554
+ return void 0;
14555
+ }
14530
14556
  function coercePromptArgs(args) {
14557
+ const { media_style, response_format, question_count, needs_consent, anonymous, needs_contact, ...rest } = args;
14531
14558
  return {
14532
- ...args,
14533
- question_count: args.question_count ? parseInt(args.question_count, 10) : void 0,
14534
- needs_consent: args.needs_consent != null ? args.needs_consent === "true" : void 0,
14535
- anonymous: args.anonymous != null ? args.anonymous === "true" : void 0,
14536
- needs_contact: args.needs_contact != null ? args.needs_contact === "true" : void 0
14559
+ ...rest,
14560
+ media_style: media_style !== void 0 && clean(media_style) !== "" ? normalizeMediaStyle(media_style) : void 0,
14561
+ response_format: normalizeResponseFormat(response_format),
14562
+ question_count: normalizeQuestionCount(question_count),
14563
+ needs_consent: normalizeBool(needs_consent),
14564
+ anonymous: normalizeBool(anonymous),
14565
+ needs_contact: normalizeBool(needs_contact)
14537
14566
  };
14538
14567
  }
14539
14568
  function buildDiscovery(params, args, authMode = "authenticated") {
@@ -14561,16 +14590,17 @@ ${rows}
14561
14590
 
14562
14591
  `;
14563
14592
  }
14564
- function resourceLink(name, uri, title) {
14593
+ function promptMessage(request, guides, workflow) {
14594
+ const parts = [];
14595
+ if (request) parts.push(request);
14596
+ if (guides.length > 0) {
14597
+ const refs = guides.map((g) => `${g.title}: \`${g.uri}\``).join("; ");
14598
+ parts.push(`Read the guide first (${refs}) - or call clipform_get_guide.`);
14599
+ }
14600
+ parts.push(workflow);
14565
14601
  return {
14566
- role: "assistant",
14567
- content: {
14568
- type: "resource_link",
14569
- uri,
14570
- name,
14571
- title,
14572
- mimeType: "text/markdown"
14573
- }
14602
+ role: "user",
14603
+ content: { type: "text", text: parts.join("\n\n") }
14574
14604
  };
14575
14605
  }
14576
14606
  var BUILD_ONCE_STEP = "**Build the whole form in ONE clipform_create_form call** - pass nodes, settings, and tags together; do NOT create an empty form and add nodes one by one:";
@@ -14658,37 +14688,37 @@ var comprehensionQuizWorkflow = (args, sessionContext, authMode, caps) => {
14658
14688
  const audienceLabel = args.audience ? ` (${args.audience})` : "";
14659
14689
  const discovery = buildDiscovery(getDiscoveryParams("quiz", "comprehension", authMode === "anonymous" ? "demo" : "full"), args, authMode);
14660
14690
  const steps = numbered([
14661
- `**Get the video content** - ask the user to paste the video's transcript, closed captions, or a detailed summary of its key points (this workflow does not extract YouTube captions itself). Use the YouTube URL, if given, only as a reference/source link${caps.research ? " for the audit log" : ""}, not as something to fetch.`,
14691
+ `**Get the source material** - ask the user to paste the transcript, document text, or notes (or a detailed summary of the key points) the quiz should test. Use any link they give only as a reference${caps.research ? " for the audit log" : ""}, not as something to fetch.`,
14662
14692
  `**Analyse the content** - identify:
14663
- - Key claims, facts, or arguments made in the video
14664
- - Specific details a casual viewer might miss
14665
- - The video's main thesis or conclusion
14693
+ - Key claims, facts, or arguments made in the source
14694
+ - Specific details a casual reader or viewer might miss
14695
+ - The source's main thesis or conclusion
14666
14696
  - Any surprising or counterintuitive points`,
14667
- `**Write comprehension questions** - these test whether someone WATCHED the video, not general knowledge:
14668
- - "According to the video, what is the main reason...?"
14669
- - "What example does the video use to illustrate...?"
14670
- - Include 1-2 inference questions: "Based on the video, why does the presenter believe...?"
14671
- - Avoid questions answerable without watching (e.g., common knowledge about the topic)`,
14697
+ `**Write comprehension questions** - these test whether someone engaged with the source, not general knowledge:
14698
+ - "According to the source, what is the main reason...?"
14699
+ - "What example does the source use to illustrate...?"
14700
+ - Include 1-2 inference questions: "Based on the source, why does the author believe...?"
14701
+ - Avoid questions answerable without the source (e.g., common knowledge about the topic)`,
14672
14702
  `**Adapt to the audience**${audienceLabel} - simplify language for younger audiences, focus on concrete/visual details rather than abstract arguments`,
14673
14703
  `${BUILD_ONCE_STEP}
14674
14704
  - Settings: show_step_counter: true, disable_back_navigation: true
14675
- - One choice node per question: config { choice: { show_answer_feedback: true }, randomise_options: true }, options with score: 1 on the correct answer and score: 0 on 3-4 plausible wrong ones - make distractors things someone might guess without watching. The viewer shuffles options at render time, so list them in any order. Scored options enable correct-answer marking automatically.
14705
+ - One choice node per question: config { choice: { show_answer_feedback: true }, randomise_options: true }, options with score: 1 on the correct answer and score: 0 on 3-4 plausible wrong ones - make distractors things someone might guess without the source. The viewer shuffles options at render time, so list them in any order. Scored options enable correct-answer marking automatically.
14676
14706
  - Final end_screen node:
14677
14707
  - show_score: true, icon: "trophy"
14678
14708
  - show_share_button: true
14679
- - cta_type: "restart", cta_text: "Rewatch and try again?"
14680
- - title and message that reference the video. Example: title: "How well do you know this video?", message: "Share your score and see if your friends were really paying attention."
14709
+ - cta_type: "restart", cta_text: "Try again?"
14710
+ - title and message that reference the source. Example: title: "How well do you know this?", message: "Share your score and see if your friends were really paying attention."
14681
14711
  - NOTE: Personalised messages per score tier (score_ranges) are coming soon. For now, write one great end screen message.
14682
- - tags: ["quiz", "comprehension", "youtube"] + 2-3 topic words from the video`,
14683
- caps.media && `**Generate narration** with clipform_generate_tts - batch ALL questions in a single call. Reference the video naturally: "If you watched closely, you'll know this one..." Keep each narration 5-10 seconds.`,
14712
+ - tags: ["quiz", "comprehension"] + 2-3 topic words from the source`,
14713
+ caps.media && `**Generate narration** with clipform_generate_tts - batch ALL questions in a single call. Reference the source naturally: "If you were paying attention, you'll know this one..." Keep each narration 5-10 seconds.`,
14684
14714
  caps.media && `**Build video** for each question:
14685
14715
  - clipform_search_media (kind: "image") - 3 images per question, batch all queries in one call
14686
14716
  - clipform_render_video_template (template: "slideshow", controls.items + controls.audio_url) with wait: false per question - fires all renders in parallel - then collect URLs with clipform_check_render`,
14687
14717
  caps.media && ATTACH_MEDIA_STEP,
14688
14718
  REPUBLISH_STEP,
14689
- caps.research && `${LOG_STEP} - include the YouTube URL and video title/channel as sources, using whatever of those the user provided`
14719
+ caps.research && `${LOG_STEP} - include the source title and link as sources, using whatever of those the user provided`
14690
14720
  ]);
14691
- return `${intro(sessionContext, discovery)}Here's how to build a ${count}-question comprehension quiz from a YouTube video. Read the attached quiz and comprehension guides for craft knowledge on question design and distractor techniques.
14721
+ return `${intro(sessionContext, discovery)}Here's how to build a ${count}-question comprehension quiz from source material. Read the attached quiz and comprehension guides for craft knowledge on question design and distractor techniques.
14692
14722
 
14693
14723
  ## Comprehension Quiz Workflow
14694
14724
 
@@ -14959,7 +14989,7 @@ function blankAsOmitted(schema) {
14959
14989
  function registerPrompts(server, caps = FULL_CAPS) {
14960
14990
  const _registerPrompt = server.registerPrompt.bind(server);
14961
14991
  const registerPrompt = ((name, config2, cb) => _registerPrompt(name, config2?.argsSchema ? { ...config2, argsSchema: blankAsOmitted(config2.argsSchema) } : config2, cb));
14962
- const mediaStyleArg = caps.media ? { media_style: external_exports.enum(MEDIA_STYLE_ENUM).optional().default("video").describe("Media style: text only, still images, or slideshow video with narration (default: video)") } : {};
14992
+ const mediaStyleArg = caps.media ? { media_style: external_exports.string().optional().describe("Media style: text, images, or video (default: video)") } : {};
14963
14993
  const styleNote = (args) => caps.media ? `, ${args.media_style ?? "video"} style` : "";
14964
14994
  registerPrompt(
14965
14995
  "create-quiz",
@@ -14968,7 +14998,7 @@ function registerPrompts(server, caps = FULL_CAPS) {
14968
14998
  description: "Build a scored knowledge quiz with narrated video questions",
14969
14999
  argsSchema: external_exports.object({
14970
15000
  topic: external_exports.string().optional().describe("Quiz topic (e.g. 'Space exploration', 'Premier League')"),
14971
- question_count: external_exports.string().optional().default("8").describe("Number of questions (default: 8)"),
15001
+ question_count: external_exports.string().optional().describe("Number of questions (default: 8)"),
14972
15002
  ...mediaStyleArg
14973
15003
  })
14974
15004
  },
@@ -14976,21 +15006,7 @@ function registerPrompts(server, caps = FULL_CAPS) {
14976
15006
  const args = coercePromptArgs(rawArgs);
14977
15007
  return {
14978
15008
  messages: [
14979
- {
14980
- role: "user",
14981
- content: {
14982
- type: "text",
14983
- text: `I want to create a quiz${args.topic ? ` about "${args.topic}"` : ""}. ${args.question_count ?? 8} questions${styleNote(args)}.`
14984
- }
14985
- },
14986
- resourceLink("guide-quiz", "clipform://guides/quiz", "Quiz Writing Guide"),
14987
- {
14988
- role: "assistant",
14989
- content: {
14990
- type: "text",
14991
- text: await getWorkflowText("quiz", args, void 0, caps)
14992
- }
14993
- }
15009
+ promptMessage(`I want to create a quiz${args.topic ? ` about "${args.topic}"` : ""}. ${args.question_count ?? 8} questions${styleNote(args)}.`, [{ title: "Quiz Writing Guide", uri: "clipform://guides/quiz" }], await getWorkflowText("quiz", args, void 0, caps))
14994
15010
  ]
14995
15011
  };
14996
15012
  }
@@ -15003,7 +15019,7 @@ function registerPrompts(server, caps = FULL_CAPS) {
15003
15019
  argsSchema: external_exports.object({
15004
15020
  topic: external_exports.string().optional().describe("Quiz theme (e.g. 'Which city are you?', 'What's your work style?')"),
15005
15021
  categories: external_exports.string().optional().describe("Comma-separated outcome categories (e.g. 'Creative, Analytical, Leader, Collaborator')"),
15006
- question_count: external_exports.string().optional().default("8").describe("Number of questions (default: 8)"),
15022
+ question_count: external_exports.string().optional().describe("Number of questions (default: 8)"),
15007
15023
  ...mediaStyleArg
15008
15024
  })
15009
15025
  },
@@ -15014,22 +15030,7 @@ function registerPrompts(server, caps = FULL_CAPS) {
15014
15030
  Outcome categories: ${args.categories}` : "";
15015
15031
  return {
15016
15032
  messages: [
15017
- {
15018
- role: "user",
15019
- content: {
15020
- type: "text",
15021
- text: `I want to create a personality quiz${args.topic ? ` - "${args.topic}"` : ""}. ${args.question_count ?? 8} questions${styleNote(args)}.${categoriesNote}`
15022
- }
15023
- },
15024
- resourceLink("guide-quiz", "clipform://guides/quiz", "Quiz Writing Guide"),
15025
- resourceLink("guide-quiz-personality", "clipform://guides/quiz/personality", "Personality Quiz Addendum"),
15026
- {
15027
- role: "assistant",
15028
- content: {
15029
- type: "text",
15030
- text: await getWorkflowText("quiz", args, "personality", caps)
15031
- }
15032
- }
15033
+ promptMessage(`I want to create a personality quiz${args.topic ? ` - "${args.topic}"` : ""}. ${args.question_count ?? 8} questions${styleNote(args)}.${categoriesNote}`, [{ title: "Quiz Writing Guide", uri: "clipform://guides/quiz" }, { title: "Personality Quiz Addendum", uri: "clipform://guides/quiz/personality" }], await getWorkflowText("quiz", args, "personality", caps))
15033
15034
  ]
15034
15035
  };
15035
15036
  }
@@ -15041,29 +15042,15 @@ Outcome categories: ${args.categories}` : "";
15041
15042
  description: "Build a form to collect case studies, async video interviews, expert input, or journalist responses",
15042
15043
  argsSchema: external_exports.object({
15043
15044
  purpose: external_exports.string().optional().describe("What you're collecting (e.g. 'case study', 'expert input', 'journalist responses')"),
15044
- response_format: external_exports.enum(["video", "audio", "text", "all"]).optional().default("all").describe("How respondents reply (default: all - video, audio, and text)"),
15045
- needs_consent: external_exports.string().optional().default("true").describe("Include a consent statement (default: true)")
15045
+ response_format: external_exports.string().optional().describe("How respondents reply: video, audio, text, or all (default: all)"),
15046
+ needs_consent: external_exports.string().optional().describe("Include a consent statement: yes or no (default: yes)")
15046
15047
  })
15047
15048
  },
15048
15049
  async (rawArgs) => {
15049
15050
  const args = coercePromptArgs(rawArgs);
15050
15051
  return {
15051
15052
  messages: [
15052
- {
15053
- role: "user",
15054
- content: {
15055
- type: "text",
15056
- text: `I want to collect ${args.purpose ?? "responses"} from people. Responses via ${args.response_format ?? "all"}.${args.needs_consent ?? true ? " Include consent." : ""}`
15057
- }
15058
- },
15059
- resourceLink("guide-interview", "clipform://guides/interview", "Interview Guide"),
15060
- {
15061
- role: "assistant",
15062
- content: {
15063
- type: "text",
15064
- text: await getWorkflowText("interview", args, void 0, caps)
15065
- }
15066
- }
15053
+ promptMessage(`I want to collect ${args.purpose ?? "responses"} from people. Responses via ${args.response_format ?? "all"}.${args.needs_consent ?? true ? " Include consent." : ""}`, [{ title: "Interview Guide", uri: "clipform://guides/interview" }], await getWorkflowText("interview", args, void 0, caps))
15067
15054
  ]
15068
15055
  };
15069
15056
  }
@@ -15075,66 +15062,14 @@ Outcome categories: ${args.categories}` : "";
15075
15062
  description: "Build a feedback survey, NPS form, or research questionnaire",
15076
15063
  argsSchema: external_exports.object({
15077
15064
  topic: external_exports.string().optional().describe("What feedback you're collecting (e.g. 'NPS', 'event feedback', 'product satisfaction')"),
15078
- anonymous: external_exports.string().optional().default("true").describe("Whether the survey is anonymous (default: true)")
15065
+ anonymous: external_exports.string().optional().describe("Whether the survey is anonymous: yes or no (default: yes)")
15079
15066
  })
15080
15067
  },
15081
15068
  async (rawArgs) => {
15082
15069
  const args = coercePromptArgs(rawArgs);
15083
15070
  return {
15084
15071
  messages: [
15085
- {
15086
- role: "user",
15087
- content: {
15088
- type: "text",
15089
- text: `I want to create a survey${args.topic ? ` for ${args.topic}` : ""}. ${args.anonymous ?? true ? "Anonymous" : "Identified"} respondents.`
15090
- }
15091
- },
15092
- resourceLink("guide-survey", "clipform://guides/survey", "Survey & Feedback Guide"),
15093
- {
15094
- role: "assistant",
15095
- content: {
15096
- type: "text",
15097
- text: await getWorkflowText("survey", args, void 0, caps)
15098
- }
15099
- }
15100
- ]
15101
- };
15102
- }
15103
- );
15104
- registerPrompt(
15105
- "create-comprehension-quiz",
15106
- {
15107
- title: "Create a YouTube Comprehension Quiz",
15108
- description: "Build a comprehension quiz from a YouTube video - tests whether the viewer actually watched and understood the content",
15109
- argsSchema: external_exports.object({
15110
- youtube_url: external_exports.string().optional().describe("YouTube video URL to create the quiz from"),
15111
- question_count: external_exports.string().optional().default("8").describe("Number of questions (default: 8)"),
15112
- audience: external_exports.string().optional().describe("Target audience (e.g. 'children aged 5-8', 'university students', 'general')"),
15113
- ...mediaStyleArg
15114
- })
15115
- },
15116
- async (rawArgs) => {
15117
- const args = coercePromptArgs(rawArgs);
15118
- const urlNote = args.youtube_url ? ` The video is: ${args.youtube_url}` : "";
15119
- const audienceNote = args.audience ? ` Target audience: ${args.audience}.` : "";
15120
- return {
15121
- messages: [
15122
- {
15123
- role: "user",
15124
- content: {
15125
- type: "text",
15126
- text: `I want to create a comprehension quiz based on a YouTube video. ${args.question_count ?? 8} questions${styleNote(args)}.${urlNote}${audienceNote}`
15127
- }
15128
- },
15129
- resourceLink("guide-quiz", "clipform://guides/quiz", "Quiz Writing Guide"),
15130
- resourceLink("guide-quiz-comprehension", "clipform://guides/quiz/comprehension", "Comprehension Quiz Addendum"),
15131
- {
15132
- role: "assistant",
15133
- content: {
15134
- type: "text",
15135
- text: await getWorkflowText("quiz", args, "comprehension", caps)
15136
- }
15137
- }
15072
+ promptMessage(`I want to create a survey${args.topic ? ` for ${args.topic}` : ""}. ${args.anonymous ?? true ? "Anonymous" : "Identified"} respondents.`, [{ title: "Survey & Feedback Guide", uri: "clipform://guides/survey" }], await getWorkflowText("survey", args, void 0, caps))
15138
15073
  ]
15139
15074
  };
15140
15075
  }
@@ -15146,29 +15081,14 @@ Outcome categories: ${args.categories}` : "";
15146
15081
  description: "Build a guess-and-reveal quiz from rendered compositions - flag sweeps, Rebus puzzles, blur reveals, odd-one-out grids - instead of stock-image slideshows",
15147
15082
  argsSchema: external_exports.object({
15148
15083
  topic: external_exports.string().optional().describe("Quiz topic (e.g. 'world flags', 'movie emoji', '90s music')"),
15149
- question_count: external_exports.string().optional().default("5").describe("Number of questions (default: 5 - one scored choice node per question)")
15084
+ question_count: external_exports.string().optional().describe("Number of questions (default: 5 - one scored choice node per question)")
15150
15085
  })
15151
15086
  },
15152
15087
  async (rawArgs) => {
15153
15088
  const args = coercePromptArgs(rawArgs);
15154
15089
  return {
15155
15090
  messages: [
15156
- {
15157
- role: "user",
15158
- content: {
15159
- type: "text",
15160
- text: `I want to create a composition quiz${args.topic ? ` about "${args.topic}"` : ""}. ${args.question_count ?? 5} questions, guess-and-reveal style.`
15161
- }
15162
- },
15163
- resourceLink("guide-quiz", "clipform://guides/quiz", "Quiz Writing Guide"),
15164
- resourceLink("guide-quiz-composition", "clipform://guides/quiz/composition", "Composition Quiz Addendum"),
15165
- {
15166
- role: "assistant",
15167
- content: {
15168
- type: "text",
15169
- text: await getWorkflowText("quiz", args, "composition", caps)
15170
- }
15171
- }
15091
+ promptMessage(`I want to create a composition quiz${args.topic ? ` about "${args.topic}"` : ""}. ${args.question_count ?? 5} questions, guess-and-reveal style.`, [{ title: "Quiz Writing Guide", uri: "clipform://guides/quiz" }, { title: "Composition Quiz Addendum", uri: "clipform://guides/quiz/composition" }], await getWorkflowText("quiz", args, "composition", caps))
15172
15092
  ]
15173
15093
  };
15174
15094
  }
@@ -15182,13 +15102,7 @@ Outcome categories: ${args.categories}` : "";
15182
15102
  },
15183
15103
  async () => ({
15184
15104
  messages: [
15185
- {
15186
- role: "assistant",
15187
- content: {
15188
- type: "text",
15189
- text: await getWorkflowText("funnel")
15190
- }
15191
- }
15105
+ promptMessage(null, [], await getWorkflowText("funnel"))
15192
15106
  ]
15193
15107
  })
15194
15108
  );
@@ -15204,21 +15118,7 @@ Outcome categories: ${args.categories}` : "";
15204
15118
  },
15205
15119
  async (args) => ({
15206
15120
  messages: [
15207
- {
15208
- role: "user",
15209
- content: {
15210
- type: "text",
15211
- text: `I want to collect ${args.use_case ?? "testimonials"} from people on video.`
15212
- }
15213
- },
15214
- resourceLink("guide-testimonial", "clipform://guides/testimonial", "Testimonial & Story Collection Guide"),
15215
- {
15216
- role: "assistant",
15217
- content: {
15218
- type: "text",
15219
- text: await getWorkflowText("testimonial", args, void 0, caps)
15220
- }
15221
- }
15121
+ promptMessage(`I want to collect ${args.use_case ?? "testimonials"} from people on video.`, [{ title: "Testimonial & Story Collection Guide", uri: "clipform://guides/testimonial" }], await getWorkflowText("testimonial", coercePromptArgs(args), void 0, caps))
15222
15122
  ]
15223
15123
  })
15224
15124
  );
@@ -15233,21 +15133,7 @@ Outcome categories: ${args.categories}` : "";
15233
15133
  },
15234
15134
  async (args) => ({
15235
15135
  messages: [
15236
- {
15237
- role: "user",
15238
- content: {
15239
- type: "text",
15240
- text: `I want to create an application form${args.role ? ` for ${args.role}` : ""}.`
15241
- }
15242
- },
15243
- resourceLink("guide-application", "clipform://guides/application", "Application & Evaluation Guide"),
15244
- {
15245
- role: "assistant",
15246
- content: {
15247
- type: "text",
15248
- text: await getWorkflowText("application", args, void 0, caps)
15249
- }
15250
- }
15136
+ promptMessage(`I want to create an application form${args.role ? ` for ${args.role}` : ""}.`, [{ title: "Application & Evaluation Guide", uri: "clipform://guides/application" }], await getWorkflowText("application", coercePromptArgs(args), void 0, caps))
15251
15137
  ]
15252
15138
  })
15253
15139
  );
@@ -15263,21 +15149,7 @@ Outcome categories: ${args.categories}` : "";
15263
15149
  },
15264
15150
  async (args) => ({
15265
15151
  messages: [
15266
- {
15267
- role: "user",
15268
- content: {
15269
- type: "text",
15270
- text: `I want to create a registration form for ${args.event_name ?? "an event"}.${args.event_type ? ` Type: ${args.event_type}.` : ""}`
15271
- }
15272
- },
15273
- resourceLink("guide-booking", "clipform://guides/booking", "Booking & Registration Guide"),
15274
- {
15275
- role: "assistant",
15276
- content: {
15277
- type: "text",
15278
- text: await getWorkflowText("booking", args, void 0, caps)
15279
- }
15280
- }
15152
+ promptMessage(`I want to create a registration form for ${args.event_name ?? "an event"}.${args.event_type ? ` Type: ${args.event_type}.` : ""}`, [{ title: "Booking & Registration Guide", uri: "clipform://guides/booking" }], await getWorkflowText("booking", coercePromptArgs(args), void 0, caps))
15281
15153
  ]
15282
15154
  })
15283
15155
  );
@@ -15288,26 +15160,12 @@ Outcome categories: ${args.categories}` : "";
15288
15160
  description: "Build a warm client intake or onboarding form - capture contact details and what the client needs",
15289
15161
  argsSchema: external_exports.object({
15290
15162
  use_case: external_exports.string().optional().describe("What kind of business or service (e.g. 'massage', 'coaching', 'personal training', 'agency')"),
15291
- response_format: external_exports.enum(["video", "audio", "text", "all"]).optional().describe("How people answer the open question (default: all)")
15163
+ response_format: external_exports.string().optional().describe("How people answer the open question: video, audio, text, or all (default: all)")
15292
15164
  })
15293
15165
  },
15294
15166
  async (args) => ({
15295
15167
  messages: [
15296
- {
15297
- role: "user",
15298
- content: {
15299
- type: "text",
15300
- text: `I want to create a client intake form${args.use_case ? ` for a ${args.use_case} business` : ""}.`
15301
- }
15302
- },
15303
- resourceLink("guide-intake", "clipform://guides/intake", "Client Intake & Onboarding Guide"),
15304
- {
15305
- role: "assistant",
15306
- content: {
15307
- type: "text",
15308
- text: await getWorkflowText("intake", args, void 0, caps)
15309
- }
15310
- }
15168
+ promptMessage(`I want to create a client intake form${args.use_case ? ` for a ${args.use_case} business` : ""}.`, [{ title: "Client Intake & Onboarding Guide", uri: "clipform://guides/intake" }], await getWorkflowText("intake", coercePromptArgs(args), void 0, caps))
15311
15169
  ]
15312
15170
  })
15313
15171
  );
@@ -15322,21 +15180,7 @@ Outcome categories: ${args.categories}` : "";
15322
15180
  },
15323
15181
  async (args) => ({
15324
15182
  messages: [
15325
- {
15326
- role: "user",
15327
- content: {
15328
- type: "text",
15329
- text: `I want to create a lead capture form${args.use_case ? ` for ${args.use_case}` : ""}.`
15330
- }
15331
- },
15332
- resourceLink("guide-lead-capture", "clipform://guides/lead-capture", "Lead Capture Guide"),
15333
- {
15334
- role: "assistant",
15335
- content: {
15336
- type: "text",
15337
- text: await getWorkflowText("lead-capture", args, void 0, caps)
15338
- }
15339
- }
15183
+ promptMessage(`I want to create a lead capture form${args.use_case ? ` for ${args.use_case}` : ""}.`, [{ title: "Lead Capture Guide", uri: "clipform://guides/lead-capture" }], await getWorkflowText("lead-capture", coercePromptArgs(args), void 0, caps))
15340
15184
  ]
15341
15185
  })
15342
15186
  );
@@ -15371,8 +15215,13 @@ export {
15371
15215
  coerce_exports,
15372
15216
  external_exports,
15373
15217
  WORKFLOW_TYPES2 as WORKFLOW_TYPES,
15218
+ normalizeMediaStyle,
15219
+ normalizeResponseFormat,
15220
+ normalizeQuestionCount,
15221
+ normalizeBool,
15222
+ coercePromptArgs,
15374
15223
  buildDiscovery,
15375
15224
  getWorkflowText,
15376
15225
  registerPrompts
15377
15226
  };
15378
- //# sourceMappingURL=chunk-54RZGUSA.js.map
15227
+ //# sourceMappingURL=chunk-5RUWQOYD.js.map