@clipform/mcp-server 2.16.0 → 2.16.1
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.
- package/dist/{chunk-V7ASONAL.js → chunk-25LEEQMI.js} +2 -2
- package/dist/{chunk-JJZ66MGO.js → chunk-IXRZG3GB.js} +2 -2
- package/dist/{chunk-M3XVFSUP.js → chunk-TJFD7DVF.js} +5 -5
- package/dist/{chunk-M3XVFSUP.js.map → chunk-TJFD7DVF.js.map} +1 -1
- package/dist/{chunk-ZHXMQ2PV.js → chunk-Z4ZGF6OV.js} +110 -14
- package/dist/chunk-Z4ZGF6OV.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/prompts.js +2 -2
- package/dist/resources.js +2 -2
- package/dist/server.js +4 -4
- package/package.json +3 -3
- package/dist/chunk-ZHXMQ2PV.js.map +0 -1
- /package/dist/{chunk-V7ASONAL.js.map → chunk-25LEEQMI.js.map} +0 -0
- /package/dist/{chunk-JJZ66MGO.js.map → chunk-IXRZG3GB.js.map} +0 -0
|
@@ -48,6 +48,19 @@ var FEATURES = {
|
|
|
48
48
|
status: "live",
|
|
49
49
|
category: "builder"
|
|
50
50
|
},
|
|
51
|
+
// Backfilled (#4338): apps/viewer/components/FormViewer.tsx renders exactly
|
|
52
|
+
// one node at a time (`currentNode = nodes[currentIndex]`, single
|
|
53
|
+
// `AnimatePresence` block gating on `currentNode`) and transitions to the
|
|
54
|
+
// next on answer - never a scrollable list of every question. No
|
|
55
|
+
// enabled/status change (this has always been the viewer's shape), so no
|
|
56
|
+
// wentLiveAt.
|
|
57
|
+
one_question_at_a_time: {
|
|
58
|
+
name: "One question at a time",
|
|
59
|
+
description: "The viewer shows a single question and transitions to the next, never a scrollable list of every question",
|
|
60
|
+
enabled: true,
|
|
61
|
+
status: "live",
|
|
62
|
+
category: "builder"
|
|
63
|
+
},
|
|
51
64
|
branching: {
|
|
52
65
|
name: "Conditional branching",
|
|
53
66
|
description: "Choice nodes route to different destinations based on which option is picked",
|
|
@@ -140,7 +153,12 @@ var FEATURES = {
|
|
|
140
153
|
},
|
|
141
154
|
node_details: {
|
|
142
155
|
name: "Details",
|
|
143
|
-
|
|
156
|
+
// Widened (#4338): the checkbox items are typed 'consent' (required,
|
|
157
|
+
// blocks submission until checked) or 'opt_in' (optional) - see
|
|
158
|
+
// CONSENT_TYPES in node-types.js and the viewer's Contact.tsx. Both are
|
|
159
|
+
// plain text checkboxes available to every creator with no gate; only
|
|
160
|
+
// attaching a PDF agreement document is gated (consent_documents, beta).
|
|
161
|
+
description: "Structured fields (name, email, phone, company) with consent and opt-in checkboxes",
|
|
144
162
|
enabled: true,
|
|
145
163
|
status: "live",
|
|
146
164
|
category: "node-types"
|
|
@@ -201,18 +219,20 @@ var FEATURES = {
|
|
|
201
219
|
},
|
|
202
220
|
node_camera: {
|
|
203
221
|
name: "Camera",
|
|
204
|
-
description
|
|
205
|
-
//
|
|
206
|
-
|
|
207
|
-
//
|
|
208
|
-
//
|
|
222
|
+
// Description mirrors NODE_TYPES.camera.description (the node SSOT) - the
|
|
223
|
+
// node captures photo OR video (allowed_capture, #2759), not photo only.
|
|
224
|
+
description: "Capture a photo or video from the device camera",
|
|
225
|
+
// Dogfooding in live via NODE_COMPANY_ALLOWLIST.node_camera below. The DB
|
|
226
|
+
// node_type_check constraint already accepts 'camera' in prod (migration
|
|
227
|
+
// #2103 merged + applied 2026-07-17), so GA is now a pure app-config flip:
|
|
228
|
+
// set enabled true + status 'live' and follow feature-lifecycle.
|
|
209
229
|
enabled: false,
|
|
210
230
|
status: "planned",
|
|
211
231
|
category: "node-types"
|
|
212
232
|
},
|
|
213
233
|
node_conditional: {
|
|
214
|
-
name: "
|
|
215
|
-
description: "Route the flow to different branches based on
|
|
234
|
+
name: "If / then",
|
|
235
|
+
description: "Route the flow to different branches based on a score, max score, or category variable.",
|
|
216
236
|
// Scaffolded disabled (#4105, phase 1 of the #4104 variables engine): code
|
|
217
237
|
// lands ready, but node.type's DB check constraint doesn't accept
|
|
218
238
|
// 'conditional' yet - that's a separate parked holds-migration PR. Flip
|
|
@@ -288,10 +308,26 @@ var FEATURES = {
|
|
|
288
308
|
status: "live",
|
|
289
309
|
category: "responses"
|
|
290
310
|
},
|
|
311
|
+
// Backfilled (#4338): the respondent-facing recorder (packages/media-recorder)
|
|
312
|
+
// already device-detects and adapts - mobile-first cover framing by default,
|
|
313
|
+
// front/back camera flip control shown only on mobile, iOS Safari getUserMedia
|
|
314
|
+
// quirks handled (browser-detection.ts) - so recording on a phone has always
|
|
315
|
+
// worked and been tuned for it. No enabled/status change, so no wentLiveAt.
|
|
316
|
+
mobile_recording: {
|
|
317
|
+
name: "Mobile-optimized recording",
|
|
318
|
+
description: "Respondents recording audio/video/photo on a phone get a mobile-first layout and a front/back camera flip control",
|
|
319
|
+
enabled: true,
|
|
320
|
+
status: "live",
|
|
321
|
+
category: "responses"
|
|
322
|
+
},
|
|
291
323
|
// -- Analytics --
|
|
292
324
|
analytics_overview: {
|
|
293
325
|
name: "Analytics dashboard",
|
|
294
|
-
|
|
326
|
+
// Widened #4338: views/starts/completions update live (useInsightRealtime,
|
|
327
|
+
// apps/dashboard's analytics page) and NodeResultCard computes a per-node
|
|
328
|
+
// drop-off count (`total_views - answeredCount`, "N people dropped off"),
|
|
329
|
+
// not just an aggregate form-level funnel.
|
|
330
|
+
description: "Real-time views, starts, and completions with daily time series, plus per-question drop-off",
|
|
295
331
|
enabled: true,
|
|
296
332
|
status: "live",
|
|
297
333
|
category: "analytics"
|
|
@@ -318,6 +354,35 @@ var FEATURES = {
|
|
|
318
354
|
wentLiveAt: "2026-06-07",
|
|
319
355
|
category: "analytics"
|
|
320
356
|
},
|
|
357
|
+
// Backfilled (#4338): the Responses table's search box (DataSpreadsheet's
|
|
358
|
+
// globalFilter, TanStack default `includesString` across every visible
|
|
359
|
+
// column) already searches every node-response column's displayed value -
|
|
360
|
+
// for audio/video answers that value falls back to the transcription text
|
|
361
|
+
// (list_form_submissions / get_latest_responses_for_session's
|
|
362
|
+
// response_data->'transcription'->>'text', supabase/migrations
|
|
363
|
+
// 20260920190000_submission_grain_per_completion.sql) before the generic
|
|
364
|
+
// "Video/Audio response" label. So a transcribed response is genuinely
|
|
365
|
+
// full-text searchable today - this key just gives that existing behaviour
|
|
366
|
+
// a name marketing can cite. No enabled/status change (search has always
|
|
367
|
+
// been on), so deliberately no wentLiveAt.
|
|
368
|
+
//
|
|
369
|
+
// Scoped honestly (review follow-up, #4338): this is ONE form's Responses
|
|
370
|
+
// table, filtered client-side (TanStack's globalFilter over the rows
|
|
371
|
+
// already loaded for that form) - never cross-form, and a video/audio
|
|
372
|
+
// answer's transcript only becomes searchable once transcription finishes
|
|
373
|
+
// (checked: no write path ever sets response_data.display or .text on a
|
|
374
|
+
// media answer at submit time - only the async transcription pipeline
|
|
375
|
+
// adds `transcription.text` later, so nothing hides the transcript once it
|
|
376
|
+
// lands; transcription itself is not plan-gated, it runs on every
|
|
377
|
+
// audio/video response regardless of plan). It also never jumps playback
|
|
378
|
+
// to the matched moment in the recording - it only surfaces the row.
|
|
379
|
+
response_search: {
|
|
380
|
+
name: "Response search",
|
|
381
|
+
description: "Filter one form's responses table by keyword, including transcript text once transcription finishes - not cross-form, and does not jump to a moment in the recording",
|
|
382
|
+
enabled: true,
|
|
383
|
+
status: "live",
|
|
384
|
+
category: "analytics"
|
|
385
|
+
},
|
|
321
386
|
tracked_links: {
|
|
322
387
|
name: "Tracked links",
|
|
323
388
|
description: "URL tracking and click-through analytics for shared form links",
|
|
@@ -406,10 +471,37 @@ var FEATURES = {
|
|
|
406
471
|
status: "live",
|
|
407
472
|
category: "sharing"
|
|
408
473
|
},
|
|
474
|
+
// Backfilled (#4338): the public /templates gallery (apps/marketing/src/app/templates,
|
|
475
|
+
// apps/marketing/src/components/template-gallery) lets anyone browse and start
|
|
476
|
+
// from a real, live Clipform template - a curated core set, plus the rest
|
|
477
|
+
// (project_template_gallery_curated_core6). No enabled/status change, no wentLiveAt.
|
|
478
|
+
templates_gallery: {
|
|
479
|
+
name: "Template gallery",
|
|
480
|
+
description: "Browse and start a form from a real, prebuilt template",
|
|
481
|
+
enabled: true,
|
|
482
|
+
status: "live",
|
|
483
|
+
category: "sharing"
|
|
484
|
+
},
|
|
409
485
|
// -- AI --
|
|
410
486
|
ai_form_generation: {
|
|
411
487
|
name: "AI form generation",
|
|
412
|
-
|
|
488
|
+
// Corrected twice (#4338): not MCP-only (round 4 found the public
|
|
489
|
+
// web AI builder). In practice this mostly means the ChatGPT/Claude
|
|
490
|
+
// connector (chat_connectors) - leading with that per the user.
|
|
491
|
+
description: "Generate complete forms from a text prompt, primarily via the ChatGPT and Claude connectors (see chat_connectors); also the public web AI builder on marketing pages; no in-dashboard entry point",
|
|
492
|
+
enabled: true,
|
|
493
|
+
status: "live",
|
|
494
|
+
category: "ai"
|
|
495
|
+
},
|
|
496
|
+
// Confirmed live by the user 2026-09-27: both the ChatGPT App Directory and
|
|
497
|
+
// Claude Connectors Directory listings are live. Implementation is
|
|
498
|
+
// packages/mcp-server (the same MCP server surfaced as a connector in both
|
|
499
|
+
// directories - see #797 /
|
|
500
|
+
// #3681). No enabled/status change
|
|
501
|
+
// pending, so no wentLiveAt.
|
|
502
|
+
chat_connectors: {
|
|
503
|
+
name: "ChatGPT and Claude connectors",
|
|
504
|
+
description: "Build and edit forms from ChatGPT and Claude via the Clipform connector, listed in both the ChatGPT App Directory and the Claude Connectors Directory",
|
|
413
505
|
enabled: true,
|
|
414
506
|
status: "live",
|
|
415
507
|
category: "ai"
|
|
@@ -548,7 +640,7 @@ var FEATURES = {
|
|
|
548
640
|
name: "Google Sheets",
|
|
549
641
|
description: "Sync form responses to a Google Sheet, one row per submission",
|
|
550
642
|
enabled: false,
|
|
551
|
-
status: "
|
|
643
|
+
status: "beta",
|
|
552
644
|
category: "integrations"
|
|
553
645
|
},
|
|
554
646
|
notifications: {
|
|
@@ -1603,11 +1695,11 @@ var NODE_TYPES = {
|
|
|
1603
1695
|
// branch is a node_options row (has_options:true); the branch edge is a
|
|
1604
1696
|
// `jump` action anchored by the option's id (LogicAction.option_id).
|
|
1605
1697
|
conditional: {
|
|
1606
|
-
label: "
|
|
1698
|
+
label: "If / then",
|
|
1607
1699
|
shorthand: "If",
|
|
1608
1700
|
icon: "Split",
|
|
1609
1701
|
color: "#E0E7FF",
|
|
1610
|
-
description: "Route the flow based on
|
|
1702
|
+
description: "Route the flow to different branches based on a score, max score, or category variable.",
|
|
1611
1703
|
category: "logic",
|
|
1612
1704
|
sort_order: 6.7,
|
|
1613
1705
|
has_options: true,
|
|
@@ -1621,6 +1713,10 @@ var NODE_TYPES = {
|
|
|
1621
1713
|
supports_media: false,
|
|
1622
1714
|
is_system: false,
|
|
1623
1715
|
show_in_results: false,
|
|
1716
|
+
// Logic/routing node - no respondent answer to render in a channel
|
|
1717
|
+
// notification, same as the other control nodes (redirect, link_list,
|
|
1718
|
+
// end_screen). Required by the #4154 notify_inline invariant.
|
|
1719
|
+
notify_inline: false,
|
|
1624
1720
|
default_config: {
|
|
1625
1721
|
options: [
|
|
1626
1722
|
{ content: "Branch 1" },
|
|
@@ -3388,4 +3484,4 @@ export {
|
|
|
3388
3484
|
getSessionContextWithAuth,
|
|
3389
3485
|
getSessionContext
|
|
3390
3486
|
};
|
|
3391
|
-
//# sourceMappingURL=chunk-
|
|
3487
|
+
//# sourceMappingURL=chunk-Z4ZGF6OV.js.map
|