@easysociable/cli 0.1.16 → 0.1.17

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.
@@ -14621,9 +14621,9 @@ function convertBaseSchema(schema, ctx) {
14621
14621
  zodSchema = z.record(keySchema, valueSchema);
14622
14622
  break;
14623
14623
  }
14624
- const objectSchema3 = z.object(shape).passthrough();
14624
+ const objectSchema2 = z.object(shape).passthrough();
14625
14625
  const recordSchema = z.looseRecord(keySchema, valueSchema);
14626
- zodSchema = z.intersection(objectSchema3, recordSchema);
14626
+ zodSchema = z.intersection(objectSchema2, recordSchema);
14627
14627
  break;
14628
14628
  }
14629
14629
  if (schema.patternProperties) {
@@ -14653,13 +14653,13 @@ function convertBaseSchema(schema, ctx) {
14653
14653
  }
14654
14654
  break;
14655
14655
  }
14656
- const objectSchema2 = z.object(shape);
14656
+ const objectSchema = z.object(shape);
14657
14657
  if (schema.additionalProperties === false) {
14658
- zodSchema = objectSchema2.strict();
14658
+ zodSchema = objectSchema.strict();
14659
14659
  } else if (typeof schema.additionalProperties === "object") {
14660
- zodSchema = objectSchema2.catchall(convertSchema(schema.additionalProperties, ctx));
14660
+ zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));
14661
14661
  } else {
14662
- zodSchema = objectSchema2.passthrough();
14662
+ zodSchema = objectSchema.passthrough();
14663
14663
  }
14664
14664
  break;
14665
14665
  }
@@ -31439,6 +31439,19 @@ var init_validate_tool_input = __esm({
31439
31439
  });
31440
31440
 
31441
31441
  // ../../packages/mcp-common/src/server.ts
31442
+ function mapAnnotations(tool) {
31443
+ const isReadOnly = tool.effect === "read-only" || tool.effect === "explicit-owned-account-read";
31444
+ const isDestructive = tool.effect === "explicit-approval" || tool.name.startsWith("delete_") || tool.name.startsWith("trash_");
31445
+ const isIdempotent = isReadOnly || tool.name.startsWith("archive_") || tool.name.startsWith("restore_") || tool.name.startsWith("attest_");
31446
+ return {
31447
+ title: tool.title,
31448
+ readOnlyHint: isReadOnly,
31449
+ destructiveHint: isDestructive,
31450
+ idempotentHint: isIdempotent,
31451
+ openWorldHint: false,
31452
+ effect: tool.effect
31453
+ };
31454
+ }
31442
31455
  function createMcpServer(options) {
31443
31456
  const server = new Server(
31444
31457
  { name: options.name, version: options.version },
@@ -31450,7 +31463,8 @@ function createMcpServer(options) {
31450
31463
  title: tool.title,
31451
31464
  description: tool.description,
31452
31465
  inputSchema: tool.inputSchema,
31453
- annotations: { effect: tool.effect }
31466
+ outputSchema: tool.outputSchema,
31467
+ annotations: mapAnnotations(tool)
31454
31468
  }))
31455
31469
  }));
31456
31470
  server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({
@@ -31758,67 +31772,67 @@ var init_src4 = __esm({
31758
31772
  {
31759
31773
  name: "list_templates",
31760
31774
  title: "List templates",
31761
- description: "List public template catalog summaries from Gateway (filterable; no AST). Paged: follow nextCursor, or pass all=true with platforms to get the whole platform catalog before choosing. For Slideshow page choice prefer recommend_slideshow_templates.",
31775
+ description: "List public template catalog summaries from Gateway (filterable by platform, role, density, canvasPreset). For Slideshow page template selection, prefer recommend_slideshow_templates. Alternatives: Use get_template to inspect specific slot requirements. Read-only catalog query.",
31762
31776
  effect: "read-only",
31763
31777
  inputSchema: {
31764
31778
  type: "object",
31765
31779
  properties: {
31766
- platforms: { type: "array", items: { type: "string" } },
31767
- roles: { type: "array", items: { type: "string" } },
31768
- contentFamily: { type: "string" },
31769
- contentArchetypes: { type: "array", items: { type: "string" } },
31770
- density: { type: "string" },
31771
- canvasPreset: { type: "string" },
31772
- requiresImage: { type: "boolean" },
31773
- locale: { type: "string" },
31774
- q: { type: "string" },
31775
- limit: { type: "number" },
31776
- cursor: { type: "string" },
31777
- all: { type: "boolean" }
31780
+ platforms: { type: "array", items: { type: "string" }, description: "Platform filter: tiktok | linkedin | instagram | threads | xiaohongshu" },
31781
+ roles: { type: "array", items: { type: "string" }, description: "Narrative role filter: hook | value | rehook | cta" },
31782
+ contentFamily: { type: "string", description: "Content family filter." },
31783
+ contentArchetypes: { type: "array", items: { type: "string" }, description: "Content archetypes list." },
31784
+ density: { type: "string", description: "Density filter: sparse | normal | dense" },
31785
+ canvasPreset: { type: "string", description: "Aspect ratio preset (e.g. 9:16, 4:5, 1:1, 3:4)." },
31786
+ requiresImage: { type: "boolean", description: "Filter templates that require an image slot." },
31787
+ locale: { type: "string", description: "Language/locale code (e.g. en, zh-CN)." },
31788
+ q: { type: "string", description: "Search term matching template name or description." },
31789
+ limit: { type: "number", description: "Max items per page." },
31790
+ cursor: { type: "string", description: "Pagination cursor from previous nextCursor." },
31791
+ all: { type: "boolean", description: "Fetch all matching templates across pages." }
31778
31792
  },
31779
31793
  additionalProperties: false
31780
31794
  },
31781
- outputSchema: { type: "object", properties: { templates: { type: "array" }, nextCursor: { type: ["string", "null"] } } }
31795
+ outputSchema: { type: "object", properties: { templates: { type: "array", description: "Template summaries." }, nextCursor: { type: ["string", "null"], description: "Cursor for next page." } } }
31782
31796
  },
31783
31797
  {
31784
31798
  name: "get_template",
31785
31799
  title: "Get template",
31786
- description: "Get one published template detail including the public slots[] table (key/type/required/constraints). Use slots to fill create_render_job. Never returns AST or bindingMap.",
31800
+ description: "Get one published template detail including the public slots[] table (key, type, required, constraints). Use slots to bind slide copy in create_slideshow_run or inspect template constraints. Alternatives: Use list_templates to browse catalog. Read-only catalog query.",
31787
31801
  effect: "read-only",
31788
31802
  inputSchema: {
31789
31803
  type: "object",
31790
- properties: { templateId: { type: "string" } },
31804
+ properties: { templateId: { type: "string", description: "The unique published template identifier to retrieve." } },
31791
31805
  required: ["templateId"],
31792
31806
  additionalProperties: false
31793
31807
  },
31794
31808
  outputSchema: {
31795
31809
  type: "object",
31796
31810
  properties: {
31797
- id: { type: "string" },
31798
- slots: { type: "array" }
31811
+ id: { type: "string", description: "Published template ID." },
31812
+ slots: { type: "array", description: "Public slots table." }
31799
31813
  }
31800
31814
  }
31801
31815
  },
31802
31816
  {
31803
31817
  name: "list_gradients",
31804
31818
  title: "List gradients",
31805
- description: "List or search platform gradient recipe summaries by keyword query or tag (Gateway catalog only). Prefer small limit for Agent token budget.",
31819
+ description: "List or search platform gradient recipe summaries by keyword query or tag. Call to discover gradient presets before styling cards. Alternatives: Use get_gradient to retrieve full CSS declaration for a specific gradientId. Read-only platform catalog query.",
31806
31820
  effect: "read-only",
31807
31821
  inputSchema: {
31808
31822
  type: "object",
31809
31823
  properties: {
31810
- tag: { type: "string" },
31811
- q: { type: "string" },
31812
- limit: { type: "number" }
31824
+ tag: { type: "string", description: "Style tag filter (e.g. vibrant, subtle, dark, pastel)." },
31825
+ q: { type: "string", description: "Search term matching gradient name or tone." },
31826
+ limit: { type: "number", description: "Max items to return (prefer small limit for token budget)." }
31813
31827
  },
31814
31828
  additionalProperties: false
31815
31829
  },
31816
- outputSchema: { type: "object", properties: { gradients: { type: "array" } } }
31830
+ outputSchema: { type: "object", properties: { gradients: { type: "array", description: "Array of gradient summaries." } } }
31817
31831
  },
31818
31832
  {
31819
31833
  name: "get_gradient",
31820
31834
  title: "Get gradient",
31821
- description: "Retrieve the full gradient CSS recipe (color stops, linear angle, and semantic tokens) for a specific gradient by gradientId. Use this after selecting a gradient from list_gradients to apply background styling or surface decoration to cards.",
31835
+ description: "Retrieve the full gradient CSS recipe (linear angle, color stops, and semantic token values) for a specific gradient by gradientId. Call after list_gradients to materialize background styles or decorative surfaces on cards. Alternatives: Use list_gradients to search available recipes. Read-only platform catalog lookup. Returns full gradient recipe object.",
31822
31836
  effect: "read-only",
31823
31837
  inputSchema: {
31824
31838
  type: "object",
@@ -31828,12 +31842,12 @@ var init_src4 = __esm({
31828
31842
  required: ["gradientId"],
31829
31843
  additionalProperties: false
31830
31844
  },
31831
- outputSchema: { type: "object", properties: {} }
31845
+ outputSchema: { type: "object", properties: { id: { type: "string", description: "Gradient preset identifier." }, css: { type: "string", description: "Full CSS linear-gradient declaration." } } }
31832
31846
  },
31833
31847
  {
31834
31848
  name: "search_icons",
31835
31849
  title: "Search icons",
31836
- description: "Search the internal Template Icon Catalog (Gateway-only; allowlisted Iconify collections). Read-only \u2014 does not materialize assets. Prefer \u22648 candidates and wait for user confirmation before get_icon.",
31850
+ description: "Search the internal safe Template Icon Catalog (curated Iconify collections) by keyword, collection, or visual style. Use when designing templates or adding icon decorations. Select \u22648 candidates and confirm choice before materializing. Alternatives: Call get_icon once an iconId is selected to generate the immutable asset. Read-only catalog search; does not consume quota.",
31837
31851
  effect: "read-only",
31838
31852
  inputSchema: {
31839
31853
  type: "object",
@@ -31846,12 +31860,12 @@ var init_src4 = __esm({
31846
31860
  required: ["query"],
31847
31861
  additionalProperties: false
31848
31862
  },
31849
- outputSchema: { type: "object", properties: { icons: { type: "array" } } }
31863
+ outputSchema: { type: "object", properties: { icons: { type: "array", description: "Candidate icons array with id, name, and previewSvg." } } }
31850
31864
  },
31851
31865
  {
31852
31866
  name: "get_icon",
31853
31867
  title: "Get / materialize icon",
31854
- description: "After the user confirms one search_icons candidate, materialize an immutable TemplateIconAsset via Gateway. Requires idempotencyKey. Returns canonicalSvg + iconAssetId. Never call Iconify or Better Icons from the client.",
31868
+ description: "Materialize an immutable TemplateIconAsset via Gateway from a confirmed iconId. Call after confirming a candidate from search_icons. Requires idempotencyKey to prevent duplicate creation. Idempotent: repeated calls with identical keys return the existing asset without consuming extra quota. Returns canonical SVG string, iconAssetId, and contentHash.",
31855
31869
  effect: "local-write-job",
31856
31870
  inputSchema: {
31857
31871
  type: "object",
@@ -31865,28 +31879,28 @@ var init_src4 = __esm({
31865
31879
  outputSchema: {
31866
31880
  type: "object",
31867
31881
  properties: {
31868
- iconAssetId: { type: "string" },
31869
- canonicalSvg: { type: "string" },
31870
- contentHash: { type: "string" }
31882
+ iconAssetId: { type: "string", description: "Permanent immutable icon asset ID." },
31883
+ canonicalSvg: { type: "string", description: "Optimized sanitized SVG code." },
31884
+ contentHash: { type: "string", description: "SHA-256 hash of the SVG content." }
31871
31885
  }
31872
31886
  }
31873
31887
  },
31874
31888
  {
31875
31889
  name: "list_drafts",
31876
31890
  title: "List authoring drafts",
31877
- description: "List all template authoring drafts for the current account owner. Returns draft summaries with validation status, name, and timestamps. Use to resume an authoring session or find draft IDs before updating or publishing.",
31891
+ description: "List all template authoring drafts for the current account owner. Returns draft summaries with validation status, name, and timestamps. Use to resume an authoring session or discover draft IDs before updating or publishing. Alternatives: Use get_template_draft when you have a draftId to inspect full layer AST. Read-only query scoped to account owner.",
31878
31892
  effect: "read-only",
31879
31893
  inputSchema: {
31880
31894
  type: "object",
31881
31895
  properties: {},
31882
31896
  additionalProperties: false
31883
31897
  },
31884
- outputSchema: { type: "object", properties: { drafts: { type: "array" } } }
31898
+ outputSchema: { type: "object", properties: { drafts: { type: "array", description: "Array of draft summary objects." } } }
31885
31899
  },
31886
31900
  {
31887
31901
  name: "create_draft",
31888
31902
  title: "Create authoring draft",
31889
- description: "Initialize a new Page Template draft for authoring. Returns draftId and an interactive authoringStudioUrl for real-time visual canvas editing before publishing. Call this to create custom template layouts.",
31903
+ description: "Initialize a new Page Template draft for authoring with custom layout, layers, and slot contracts. Use when authoring a new slide template from scratch. Do NOT use to edit an existing draft (use update_template_draft) or browse public templates (use list_templates). Requires workspace owner authorization. Returns created TemplateDraft record with draftId and interactive authoringStudioUrl for real-time visual canvas editing.",
31890
31904
  effect: "local-write-job",
31891
31905
  inputSchema: {
31892
31906
  type: "object",
@@ -31900,12 +31914,12 @@ var init_src4 = __esm({
31900
31914
  required: ["name"],
31901
31915
  additionalProperties: false
31902
31916
  },
31903
- outputSchema: { type: "object", properties: { id: { type: "string" }, authoringStudioUrl: { type: "string" } } }
31917
+ outputSchema: { type: "object", properties: { id: { type: "string", description: "Unique draft ID." }, authoringStudioUrl: { type: "string", description: "Direct browser link to Studio visual canvas editor." } } }
31904
31918
  },
31905
31919
  {
31906
31920
  name: "get_draft",
31907
31921
  title: "Get authoring draft",
31908
- description: "Fetch full authoring draft detail by draftId including layer canvas tree, slot contracts, theme bindings, and validation errors. Call this to inspect or validate a draft prior to updating or publishing.",
31922
+ description: "Fetch complete authoring draft details by draftId, including full layer AST, slot contract definitions, theme bindings, and validation error logs. Call before update_template_draft or publish_template_draft to inspect draft structure and check validation status. Alternatives: Use list_template_drafts to discover draftIds. Read-only query scoped to draft owner. Returns full TemplateDraft AST entity.",
31909
31923
  effect: "read-only",
31910
31924
  inputSchema: {
31911
31925
  type: "object",
@@ -31915,31 +31929,31 @@ var init_src4 = __esm({
31915
31929
  required: ["draftId"],
31916
31930
  additionalProperties: false
31917
31931
  },
31918
- outputSchema: { type: "object", properties: { id: { type: "string" } } }
31932
+ outputSchema: { type: "object", properties: { id: { type: "string", description: "Draft ID." }, name: { type: "string", description: "Draft name." }, authoringSource: { type: "object", description: "Layer AST and slots." } } }
31919
31933
  },
31920
31934
  {
31921
31935
  name: "update_draft",
31922
31936
  title: "Update authoring draft",
31923
- description: "Update properties of an existing authoring draft. Modifies layer nodes, slot definitions, selection metadata, or theme tokens. Re-validates layout rules upon save. Call this to iteratively refine draft designs.",
31937
+ description: "Update layer AST, slot definitions, selection metadata, or theme tokens of an existing template authoring draft by draftId. Call iteratively to refine draft layout and slot contracts during authoring. Do NOT use to create new drafts (use create_template_draft), view draft AST (use get_template_draft), or release to public catalog (use publish_template_draft). Requires draft owner authorization. Performs safe partial patch: unmentioned properties remain untouched. Automatically triggers layout rule validation on save; returns validation warnings if constraints are breached. Returns updated TemplateDraft record with latest validation status and AST snapshot.",
31924
31938
  effect: "local-write-job",
31925
31939
  inputSchema: {
31926
31940
  type: "object",
31927
31941
  properties: {
31928
31942
  draftId: { type: "string", description: "The unique draft identifier to update." },
31929
31943
  name: { type: "string", description: "Updated template title." },
31930
- authoringSource: { type: "object", additionalProperties: true, description: "Updated template AST layout structure." },
31944
+ authoringSource: { type: "object", additionalProperties: true, description: "Updated template AST layout structure and slot bindings." },
31931
31945
  selectionMetadata: { type: "object", additionalProperties: true, description: "Updated platform and family metadata." },
31932
31946
  theme: { type: "object", additionalProperties: true, description: "Updated theme tokens." }
31933
31947
  },
31934
31948
  required: ["draftId"],
31935
31949
  additionalProperties: false
31936
31950
  },
31937
- outputSchema: { type: "object", properties: { id: { type: "string" } } }
31951
+ outputSchema: { type: "object", properties: { id: { type: "string", description: "Draft ID." }, validationStatus: { type: "string", description: "Validation status: valid | warnings | errors" } } }
31938
31952
  },
31939
31953
  {
31940
31954
  name: "delete_draft",
31941
31955
  title: "Delete authoring draft",
31942
- description: "Permanently discard and delete a template authoring draft. Destructive operation requiring confirmation: draft canvas data and unpublished changes cannot be recovered.",
31956
+ description: "Permanently delete a template authoring draft by draftId. Call only when abandoning a draft that should be permanently destroyed. If the draft is complete and ready for production, call publish_template_draft instead. Destructive operation requiring explicit user confirmation: draft canvas data, layer AST, and unpublished revisions cannot be recovered. Returns deletion confirmation record.",
31943
31957
  effect: "explicit-approval",
31944
31958
  inputSchema: {
31945
31959
  type: "object",
@@ -31949,12 +31963,12 @@ var init_src4 = __esm({
31949
31963
  required: ["draftId"],
31950
31964
  additionalProperties: false
31951
31965
  },
31952
- outputSchema: { type: "object", properties: {} }
31966
+ outputSchema: { type: "object", properties: { draftId: { type: "string", description: "Deleted draft ID." }, deleted: { type: "boolean", description: "True if deletion confirmed." } } }
31953
31967
  },
31954
31968
  {
31955
31969
  name: "publish_draft",
31956
31970
  title: "Publish authoring draft",
31957
- description: "Validate and publish an authoring draft into the immutable public or workspace template catalog. Once published, the template becomes immutable and can be instantiated into multi-page slideshow runs.",
31971
+ description: "Validate and publish an authoring draft into the public or workspace template catalog. Call when draft design and slot contracts are finalized and ready for instantiation in slideshow runs. If still editing or fixing layout rules, use update_template_draft. To inspect validation before publishing, use get_template_draft. Promotes draft to an immutable published template. Validates AST against layout rules; fails if required slots or constraints are violated. Returns published Template entity with public templateId, slots table, and catalog status.",
31958
31972
  effect: "local-write-job",
31959
31973
  inputSchema: {
31960
31974
  type: "object",
@@ -31964,7 +31978,7 @@ var init_src4 = __esm({
31964
31978
  required: ["draftId"],
31965
31979
  additionalProperties: false
31966
31980
  },
31967
- outputSchema: { type: "object", properties: { id: { type: "string" }, status: { type: "string" } } }
31981
+ outputSchema: { type: "object", properties: { id: { type: "string", description: "Published template ID." }, status: { type: "string", description: "Catalog status (published)." }, slots: { type: "array", description: "Public slots table." } } }
31968
31982
  },
31969
31983
  {
31970
31984
  name: "create_preview_job",
@@ -31984,29 +31998,29 @@ var init_src4 = __esm({
31984
31998
  {
31985
31999
  name: "import_template_image",
31986
32000
  title: "Import template image",
31987
- description: "Upload an image asset specifically attached to a template draft canvas (for general brand/media library assets, use import_image).",
32001
+ description: "Upload and attach a transient image asset specifically to a template draft canvas. Call while authoring a template draft in canvas studio to place background or sample imagery. Do NOT use for general workspace media library assets, logos, and photos (use import_image instead). Requires draft owner authorization and idempotencyKey. Idempotent: duplicate uploads with identical idempotencyKey return the existing asset. Returns created template image asset with imageId, dimensions, and public CDN preview URL.",
31988
32002
  effect: "local-write-job",
31989
32003
  inputSchema: {
31990
32004
  type: "object",
31991
32005
  properties: {
31992
- draftId: { type: "string" },
31993
- fileName: { type: "string" },
31994
- mimeType: { type: "string", description: "image/jpeg | image/png | image/webp" },
31995
- dataBase64: { type: "string" },
31996
- provider: { type: "string", description: "pinterest | unsplash | pexels | user_upload | generated" },
31997
- rightsStatus: { type: "string", description: "rights_unknown | licensed_for_publish | user_owned | generated" },
31998
- idempotencyKey: { type: "string" },
31999
- sourceUrl: { type: "string" },
32000
- externalId: { type: "string" },
32001
- creator: { type: "string" },
32002
- license: { type: "string" },
32003
- attribution: { type: "string" },
32004
- searchQuery: { type: "string" }
32006
+ draftId: { type: "string", description: "The unique template draft ID this image is attached to." },
32007
+ fileName: { type: "string", description: "Original image filename (e.g. background.jpg)." },
32008
+ mimeType: { type: "string", description: "MIME type: image/jpeg | image/png | image/webp" },
32009
+ dataBase64: { type: "string", description: "Base64-encoded image binary string." },
32010
+ provider: { type: "string", description: "Asset origin provider: pinterest | unsplash | pexels | user_upload | generated" },
32011
+ rightsStatus: { type: "string", description: "Rights ownership status: rights_unknown | licensed_for_publish | user_owned | generated" },
32012
+ idempotencyKey: { type: "string", description: "Unique idempotency key to prevent duplicate image creation." },
32013
+ sourceUrl: { type: "string", description: "Optional source URL if fetched from web." },
32014
+ externalId: { type: "string", description: "Optional external asset ID from provider." },
32015
+ creator: { type: "string", description: "Optional author or photographer attribution name." },
32016
+ license: { type: "string", description: "Optional license type identifier." },
32017
+ attribution: { type: "string", description: "Optional human-readable attribution string." },
32018
+ searchQuery: { type: "string", description: "Optional search keyword that discovered this image." }
32005
32019
  },
32006
32020
  required: ["draftId", "fileName", "mimeType", "dataBase64", "provider", "rightsStatus", "idempotencyKey"],
32007
32021
  additionalProperties: false
32008
32022
  },
32009
- outputSchema: { type: "object", properties: { imageId: { type: "string" }, url: { type: "string" } } }
32023
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Created template image ID." }, url: { type: "string", description: "Public delivery URL." } } }
32010
32024
  }
32011
32025
  ];
32012
32026
  TemplateGatewayMcpBackend = class {
@@ -32173,18 +32187,17 @@ var init_src4 = __esm({
32173
32187
  function meta3() {
32174
32188
  return { requestId: `mcp_${Date.now().toString(36)}`, runtimeVersion: "0.0.0", schemaVersion: 1, toolContractVersion: "2026-08-12" };
32175
32189
  }
32176
- var objectSchema, slideshowToolRegistry, slideshowResourceTemplates, SlideshowMcpBackend;
32190
+ var slideshowToolRegistry, slideshowResourceTemplates, SlideshowMcpBackend;
32177
32191
  var init_src5 = __esm({
32178
32192
  "../../packages/slideshow-mcp-adapter/src/index.ts"() {
32179
32193
  "use strict";
32180
32194
  init_src3();
32181
32195
  init_src2();
32182
- objectSchema = { type: "object", properties: {}, additionalProperties: true };
32183
32196
  slideshowToolRegistry = [
32184
32197
  {
32185
32198
  name: "list_runs",
32186
32199
  title: "List slideshow runs",
32187
- description: "List owner-scoped Slideshow Runs with optional platform, status, or search query filters. Returns run metadata, platform, page counts, and timestamps. Follow pagination to inspect existing carousel projects and draft runs.",
32200
+ description: "List owner-scoped Slideshow Runs with optional platform, lifecycle status, or search query filters. Returns run metadata, platform target, page counts, revision numbers, and timestamps. Call to browse existing carousels or find a runId before inspection, updating, or archiving. Alternatives: Use get_slideshow_run when you already have a specific runId to fetch full slide content. Behavior: Read-only query scoped to current authenticated workspace owner.",
32188
32201
  effect: "read-only",
32189
32202
  inputSchema: {
32190
32203
  type: "object",
@@ -32199,12 +32212,12 @@ var init_src5 = __esm({
32199
32212
  },
32200
32213
  additionalProperties: true
32201
32214
  },
32202
- outputSchema: objectSchema
32215
+ outputSchema: { type: "object", properties: { runs: { type: "array", description: "Array of slideshow run summary items." }, total: { type: "number", description: "Total count of matching runs." } } }
32203
32216
  },
32204
32217
  {
32205
32218
  name: "recommend_templates",
32206
32219
  title: "Recommend slideshow page templates",
32207
- description: "Before create_run: send the Page Contracts (role, density, slotSummary per page) and get a shortlist per page with reasons. Recently used Layout Families are demoted and one unused family is always kept. Pick one templateId per page yourself; gaps list pages needing more templates.",
32220
+ description: "Recommend curated template options for each slide in a slideshow before run creation based on narrative page contracts (role, density, image requirement). Demotes recently used layout families to prevent visual monotony and guarantees diversity across slides. Call immediately before create_slideshow_run to select templateId per slide. Alternatives: Use list_templates to browse raw catalog. Behavior: Read-only stateless layout intelligence query.",
32208
32221
  effect: "read-only",
32209
32222
  inputSchema: {
32210
32223
  type: "object",
@@ -32231,12 +32244,12 @@ var init_src5 = __esm({
32231
32244
  required: ["platform", "pages"],
32232
32245
  additionalProperties: true
32233
32246
  },
32234
- outputSchema: objectSchema
32247
+ outputSchema: { type: "object", properties: { recommendations: { type: "array", description: "Ranked template recommendations per page." }, gaps: { type: "array", description: "Pages requiring more templates." } } }
32235
32248
  },
32236
32249
  {
32237
32250
  name: "create_run",
32238
32251
  title: "Create slideshow run",
32239
- description: "Create a durable multi-page Slideshow Run from a structured content-pack.v1 (pages with role, templateId, and filled slot copy). Returns runId and interactive Studio review URL for browser preview and PNG pack download.",
32252
+ description: "Create a durable multi-page Slideshow Run from a structured ContentPack (specifying platform, pages array with bound templateId and slot text values). Call recommend_slideshow_templates first to select templates. Do NOT use to edit an existing run (use update_slideshow_run instead). Requires workspace owner write authorization. Returns created SlideshowRun record with generated runId, initial revision (1), and authoringStudioUrl for interactive browser review and PNG download.",
32240
32253
  effect: "local-write-job",
32241
32254
  inputSchema: {
32242
32255
  type: "object",
@@ -32249,12 +32262,12 @@ var init_src5 = __esm({
32249
32262
  required: ["pack"],
32250
32263
  additionalProperties: true
32251
32264
  },
32252
- outputSchema: objectSchema
32265
+ outputSchema: { type: "object", properties: { runId: { type: "string", description: "Unique identifier of the created run." }, revision: { type: "number", description: "Initial revision number (1)." }, studioUrl: { type: "string", description: "Studio preview and download URL." } } }
32253
32266
  },
32254
32267
  {
32255
32268
  name: "get_run",
32256
32269
  title: "Get slideshow run",
32257
- description: "Retrieve full details of a Slideshow Run by runId, including page list, bound template IDs, filled slot content, theme snapshot, and studio edit URL.",
32270
+ description: "Retrieve full details of an existing Slideshow Run by runId, including complete slide pages, bound template IDs, slot contents, brand theme snapshot, current revision number, and studio review URL. Call before update_slideshow_run to inspect current slide contents and capture baseRevision for concurrency locking. Alternatives: Use list_slideshow_runs to discover runIds. Read-only query scoped to authenticated workspace owner.",
32258
32271
  effect: "read-only",
32259
32272
  inputSchema: {
32260
32273
  type: "object",
@@ -32264,24 +32277,24 @@ var init_src5 = __esm({
32264
32277
  required: ["runId"],
32265
32278
  additionalProperties: true
32266
32279
  },
32267
- outputSchema: objectSchema
32280
+ outputSchema: { type: "object", properties: { runId: { type: "string", description: "Unique run identifier." }, revision: { type: "number", description: "Current revision number." }, pages: { type: "array", description: "Slide pages array." }, studioUrl: { type: "string", description: "Studio review URL." } } }
32268
32281
  },
32269
32282
  {
32270
32283
  name: "update_run",
32271
32284
  title: "Update slideshow run",
32272
- description: "Update slide copy, slot bindings, theme overrides, or presentation preferences of an existing Slideshow Run. Uses optimistic concurrency revision lock to prevent overwrite conflicts.",
32285
+ description: "Partially update slide copy, slot bindings, layout, styling, or brand settings of an existing Slideshow Run by runId. Call get_slideshow_run first to obtain current revision and slide data. Do NOT use to create new runs (use create_slideshow_run) or delete runs (use delete_slideshow_run). Safe partial patch: unspecified fields are preserved. Requires baseRevision for optimistic concurrency locking; on revision mismatch returns 409 Conflict (no auto-merge), requiring a fresh get_slideshow_run. To patch a single slide, provide pageIndex (0-indexed) with slots, layout, or style. To update entire deck, provide pack. Returns updated SlideshowRun with incremented revision number.",
32273
32286
  effect: "local-write-job",
32274
32287
  inputSchema: {
32275
32288
  type: "object",
32276
32289
  properties: {
32277
32290
  runId: { type: "string", description: "The unique Slideshow Run identifier to update." },
32278
- baseRevision: { type: "integer", minimum: 1, description: "Current revision number for optimistic concurrency locking to prevent overwrite races." },
32279
- pack: { type: "object", description: "Updated complete content-pack.v1 structure." },
32280
- brandId: { type: "string", description: "Updated Brand ID styling reference." },
32291
+ baseRevision: { type: "integer", minimum: 1, description: "Current revision number for optimistic concurrency locking to prevent overwrite races. Must match latest revision from get_slideshow_run." },
32292
+ pack: { type: "object", description: "Updated complete content-pack.v1 structure. Overrides entire slide deck when provided." },
32293
+ brandId: { type: "string", description: "Updated Brand ID styling reference applied across slides." },
32281
32294
  brandProfileId: { type: "string", description: "Optional legacy brand profile ID." },
32282
32295
  contentSlug: { type: "string", description: "Updated content topic slug." },
32283
- pageIndex: { type: "integer", minimum: 0, description: "Index of a single slide page to patch (0-indexed)." },
32284
- slots: { type: "object", description: "Key-value map of slot overrides for the specified pageIndex." },
32296
+ pageIndex: { type: "integer", minimum: 0, description: "Index of a single slide page to patch (0-indexed). Must be paired with slots, layout, style, or decorations." },
32297
+ slots: { type: "object", description: "Key-value map of slot text/image overrides for the specified pageIndex." },
32285
32298
  layout: { type: "object", description: "Layout adjustments for the specified pageIndex." },
32286
32299
  style: { type: "object", description: "Style token adjustments for the specified pageIndex." },
32287
32300
  decorations: { type: "array", description: "Visual decorations list for the specified pageIndex." }
@@ -32289,12 +32302,12 @@ var init_src5 = __esm({
32289
32302
  required: ["runId"],
32290
32303
  additionalProperties: true
32291
32304
  },
32292
- outputSchema: objectSchema
32305
+ outputSchema: { type: "object", properties: { runId: { type: "string", description: "Run identifier." }, revision: { type: "number", description: "Incremented revision number." }, studioUrl: { type: "string", description: "Studio review URL." } } }
32293
32306
  },
32294
32307
  {
32295
32308
  name: "archive_run",
32296
32309
  title: "Archive slideshow run",
32297
- description: "Archive a Slideshow Run to declutter the workspace and hide it from default project lists while keeping all generated slides and review URLs intact. Reversible via restore_slideshow_run.",
32310
+ description: "Soft-hide an active Slideshow Run from default workspace lists and pickers without deleting slide data or review URLs. Use to declutter the workspace after campaign completion. Do NOT use for permanent destruction; use delete_slideshow_run instead. Idempotent state change, fully reversible via restore_slideshow_run. Preserves all slide records, rendered assets, and external links. Returns updated SlideshowRun with status set to archived.",
32298
32311
  effect: "local-write-job",
32299
32312
  inputSchema: {
32300
32313
  type: "object",
@@ -32304,12 +32317,12 @@ var init_src5 = __esm({
32304
32317
  required: ["runId"],
32305
32318
  additionalProperties: true
32306
32319
  },
32307
- outputSchema: objectSchema
32320
+ outputSchema: { type: "object", properties: { runId: { type: "string", description: "Run identifier." }, status: { type: "string", description: "Updated status (archived)." } } }
32308
32321
  },
32309
32322
  {
32310
32323
  name: "restore_run",
32311
32324
  title: "Restore slideshow run",
32312
- description: "Restore a previously archived or trashed Slideshow Run back to active workspace status, restoring it to the default projects view.",
32325
+ description: "Restore a previously archived or trashed Slideshow Run back to active workspace status, restoring it to the default projects view. Use to reactivate an archived or trashed carousel project. Alternatives: Use get_slideshow_run to inspect run contents before restoring. Idempotent state change. Returns restored SlideshowRun record visible in default workspace listings.",
32313
32326
  effect: "local-write-job",
32314
32327
  inputSchema: {
32315
32328
  type: "object",
@@ -32319,12 +32332,12 @@ var init_src5 = __esm({
32319
32332
  required: ["runId"],
32320
32333
  additionalProperties: true
32321
32334
  },
32322
- outputSchema: objectSchema
32335
+ outputSchema: { type: "object", properties: { runId: { type: "string", description: "Run identifier." }, status: { type: "string", description: "Restored status (active)." } } }
32323
32336
  },
32324
32337
  {
32325
32338
  name: "delete_run",
32326
32339
  title: "Delete slideshow run",
32327
- description: "Permanently delete a Slideshow Run and its associated slide page records. Destructive operation requiring explicit user confirmation; studio review link will become invalid.",
32340
+ description: "Move a Slideshow Run to trash or permanently remove it from the workspace along with its slide page records. Use only when a run is obsolete and permanently discarded. Alternatives: If you only want to hide the run from active lists while preserving review links and data, use archive_slideshow_run instead. Destructive operation requiring explicit user confirmation. Invalidates studio review URLs. Returns deletion confirmation record.",
32328
32341
  effect: "explicit-approval",
32329
32342
  inputSchema: {
32330
32343
  type: "object",
@@ -32334,7 +32347,7 @@ var init_src5 = __esm({
32334
32347
  required: ["runId"],
32335
32348
  additionalProperties: true
32336
32349
  },
32337
- outputSchema: objectSchema
32350
+ outputSchema: { type: "object", properties: { runId: { type: "string", description: "Deleted run identifier." }, deleted: { type: "boolean", description: "True if deletion confirmed." } } }
32338
32351
  }
32339
32352
  ];
32340
32353
  slideshowResourceTemplates = [
@@ -32441,15 +32454,15 @@ var init_src6 = __esm({
32441
32454
  {
32442
32455
  name: "list_brands",
32443
32456
  title: "List brands",
32444
- description: "List owner-scoped Brands with typography tokens, color palettes, and logos. Use to discover available brand identities before creating or styling slideshow runs.",
32457
+ description: "List owner-scoped Brands with typography tokens, color palettes, and logos. Call to discover available brand identities before creating or styling slideshow runs. Alternatives: Use get_brand when you have a specific brandId to inspect full tokens. Read-only query scoped to current workspace owner. Returns array of Brand summaries.",
32445
32458
  effect: "read-only",
32446
32459
  inputSchema: { type: "object", properties: {}, additionalProperties: false },
32447
- outputSchema: { type: "object", properties: {} }
32460
+ outputSchema: { type: "object", properties: { brands: { type: "array", description: "Array of brand kit summaries." } } }
32448
32461
  },
32449
32462
  {
32450
32463
  name: "get_brand",
32451
32464
  title: "Get brand",
32452
- description: "Fetch a complete Brand profile by brandId, including typography tokens, 4-color palette (primary, secondary, accent, surface), logoAssetId, and baseRevision. Call this before generating branded slides to inject brand styles.",
32465
+ description: "Fetch a complete Brand profile by brandId, including typography tokens, 4-color palette (primary, secondary, accent, surface), logoAssetId, and baseRevision. Call before generating or updating branded slides to inject brand styles and capture baseRevision. Alternatives: Use list_brands to discover brandIds. Read-only query scoped to workspace owner. Returns full Brand entity.",
32453
32466
  effect: "read-only",
32454
32467
  inputSchema: {
32455
32468
  type: "object",
@@ -32459,12 +32472,12 @@ var init_src6 = __esm({
32459
32472
  required: ["brandId"],
32460
32473
  additionalProperties: false
32461
32474
  },
32462
- outputSchema: { type: "object", properties: {} }
32475
+ outputSchema: { type: "object", properties: { brandId: { type: "string", description: "Brand ID." }, revision: { type: "number", description: "Current revision number." }, typography: { type: "object", description: "Typography settings." }, colors: { type: "object", description: "Color palette." } } }
32463
32476
  },
32464
32477
  {
32465
32478
  name: "create_brand",
32466
32479
  title: "Create brand",
32467
- description: "Create a new owner-scoped Brand kit defining typography, color palette, handle, and optional logo asset. Returns the created Brand entity with revision 1. Best invoked before creating slideshow runs to establish consistent visual identity.",
32480
+ description: "Create a new owner-scoped Brand kit defining typography, color palette, handle, and optional logo asset. Call before creating slideshow runs to establish consistent visual identity. Do NOT use to edit an existing brand; use update_brand instead. Requires workspace owner authorization. Persists initial brand record with revision 1. Returns created Brand entity with brandId and initial revision.",
32468
32481
  effect: "local-write-job",
32469
32482
  inputSchema: {
32470
32483
  type: "object",
@@ -32479,18 +32492,18 @@ var init_src6 = __esm({
32479
32492
  required: ["name"],
32480
32493
  additionalProperties: false
32481
32494
  },
32482
- outputSchema: { type: "object", properties: {} }
32495
+ outputSchema: { type: "object", properties: { brandId: { type: "string", description: "Created brand ID." }, revision: { type: "number", description: "Initial revision (1)." } } }
32483
32496
  },
32484
32497
  {
32485
32498
  name: "update_brand",
32486
32499
  title: "Update brand",
32487
- description: "Patch visual styles or metadata of an existing Brand. Requires baseRevision for optimistic concurrency locking to prevent overwrite races. Returns updated Brand with incremented revision.",
32500
+ description: "Patch visual styles, typography, or metadata of an existing Brand by brandId. Call after get_brand to modify palette or fonts. Do NOT use to create new brands (use create_brand) or to delete (use delete_brand). Requires baseRevision for optimistic concurrency locking to prevent overwrite races; on revision mismatch returns 409 Conflict. Safe partial patch: unspecified styling tokens are preserved. Returns updated Brand with incremented revision.",
32488
32501
  effect: "local-write-job",
32489
32502
  inputSchema: {
32490
32503
  type: "object",
32491
32504
  properties: {
32492
32505
  brandId: { type: "string", description: "The unique identifier of the brand to update." },
32493
- baseRevision: { type: "integer", minimum: 1, description: "Current revision number for optimistic concurrency lock." },
32506
+ baseRevision: { type: "integer", minimum: 1, description: "Current revision number for optimistic concurrency lock. Must match latest revision from get_brand." },
32494
32507
  name: { type: "string", description: "Updated brand name." },
32495
32508
  displayName: { type: "string", description: "Updated display name." },
32496
32509
  handle: { type: "string", description: "Updated social handle." },
@@ -32501,12 +32514,12 @@ var init_src6 = __esm({
32501
32514
  required: ["brandId", "baseRevision"],
32502
32515
  additionalProperties: false
32503
32516
  },
32504
- outputSchema: { type: "object", properties: {} }
32517
+ outputSchema: { type: "object", properties: { brandId: { type: "string", description: "Brand ID." }, revision: { type: "number", description: "Incremented revision number." } } }
32505
32518
  },
32506
32519
  {
32507
32520
  name: "archive_brand",
32508
32521
  title: "Archive brand",
32509
- description: "Archive an active Brand to soft-hide it from default pickers and list queries without losing styling tokens. Reversible via restore_brand. Existing slideshow runs referencing this brand continue to display correctly.",
32522
+ description: "Archive an active Brand to soft-hide it from default pickers and list queries without losing styling tokens. Call to declutter workspace brands. Do NOT use for permanent deletion; use delete_brand instead. Idempotent state transition, fully reversible via restore_brand. Existing slideshow runs referencing this brand continue to display correctly. Returns updated Brand with status set to archived.",
32510
32523
  effect: "local-write-job",
32511
32524
  inputSchema: {
32512
32525
  type: "object",
@@ -32516,12 +32529,12 @@ var init_src6 = __esm({
32516
32529
  required: ["brandId"],
32517
32530
  additionalProperties: false
32518
32531
  },
32519
- outputSchema: { type: "object", properties: {} }
32532
+ outputSchema: { type: "object", properties: { brandId: { type: "string", description: "Brand ID." }, status: { type: "string", description: "Updated status (archived)." } } }
32520
32533
  },
32521
32534
  {
32522
32535
  name: "restore_brand",
32523
32536
  title: "Restore brand",
32524
- description: "Restore a previously archived or trashed Brand back to active status, making it immediately selectable in brand selectors and default list queries.",
32537
+ description: "Restore a previously archived or trashed Brand back to active status. Call to unhide a brand and make it immediately selectable in brand selectors and default list queries. Alternatives: Use get_brand to inspect tokens before restoring. Idempotent state transition. Returns restored Brand with status set to active.",
32525
32538
  effect: "local-write-job",
32526
32539
  inputSchema: {
32527
32540
  type: "object",
@@ -32531,12 +32544,12 @@ var init_src6 = __esm({
32531
32544
  required: ["brandId"],
32532
32545
  additionalProperties: false
32533
32546
  },
32534
- outputSchema: { type: "object", properties: {} }
32547
+ outputSchema: { type: "object", properties: { brandId: { type: "string", description: "Brand ID." }, status: { type: "string", description: "Restored status (active)." } } }
32535
32548
  },
32536
32549
  {
32537
32550
  name: "delete_brand",
32538
32551
  title: "Delete brand",
32539
- description: "Move a Brand to trash/pending deletion. Requires confirmation because dependent design workflows may lose default brand styling. Can be recovered with restore_brand.",
32552
+ description: "Move a Brand to trash for deletion. Call only when a brand kit is obsolete and permanently discarded. Alternatives: If existing runs still use this brand theme, prefer archive_brand to preserve styling safely. Destructive operation requiring explicit confirmation. Dependent design workflows may lose default brand styling. Returns deletion confirmation record.",
32540
32553
  effect: "explicit-approval",
32541
32554
  inputSchema: {
32542
32555
  type: "object",
@@ -32546,7 +32559,7 @@ var init_src6 = __esm({
32546
32559
  required: ["brandId"],
32547
32560
  additionalProperties: false
32548
32561
  },
32549
- outputSchema: { type: "object", properties: {} }
32562
+ outputSchema: { type: "object", properties: { brandId: { type: "string", description: "Deleted brand ID." }, deleted: { type: "boolean", description: "True if deletion confirmed." } } }
32550
32563
  }
32551
32564
  ];
32552
32565
  rename = (tool, names) => ({ ...tool, name: names[tool.name] ?? tool.name });
@@ -32556,7 +32569,7 @@ var init_src6 = __esm({
32556
32569
  {
32557
32570
  name: "list_images",
32558
32571
  title: "List images",
32559
- description: "List owner-scoped image assets in the media library with optional search query q. Returns image IDs, CDN URLs, mime types, and rights status for slot assignment.",
32572
+ description: "List owner-scoped image assets in the media library with optional search query q. Returns image IDs, CDN URLs, dimensions, and rights status for slot assignment. Call to browse media assets or discover imageId before slot binding. Alternatives: Use get_image to fetch full metadata for a specific imageId. Read-only query scoped to workspace owner.",
32560
32573
  effect: "read-only",
32561
32574
  inputSchema: {
32562
32575
  type: "object",
@@ -32565,12 +32578,12 @@ var init_src6 = __esm({
32565
32578
  },
32566
32579
  additionalProperties: false
32567
32580
  },
32568
- outputSchema: { type: "object", properties: {} }
32581
+ outputSchema: { type: "object", properties: { images: { type: "array", description: "Array of image asset records." } } }
32569
32582
  },
32570
32583
  {
32571
32584
  name: "get_image",
32572
32585
  title: "Get image",
32573
- description: "Fetch metadata and public R2/CDN delivery URL for a specific image asset by imageId. Use to inspect dimensions and rightsStatus before binding to slide slots.",
32586
+ description: "Fetch metadata and public R2/CDN delivery URL for a specific image asset by imageId. Call to inspect dimensions, content hash, and rightsStatus before binding to slide slots. Alternatives: Use list_images to search assets across media library. Read-only query scoped to workspace owner. Returns full Image entity.",
32574
32587
  effect: "read-only",
32575
32588
  inputSchema: {
32576
32589
  type: "object",
@@ -32580,12 +32593,12 @@ var init_src6 = __esm({
32580
32593
  required: ["imageId"],
32581
32594
  additionalProperties: false
32582
32595
  },
32583
- outputSchema: { type: "object", properties: {} }
32596
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Image asset ID." }, url: { type: "string", description: "Public delivery URL." }, rightsStatus: { type: "string", description: "Rights status." } } }
32584
32597
  },
32585
32598
  {
32586
32599
  name: "import_image",
32587
32600
  title: "Import image",
32588
- description: "Upload and register an image into the permanent account media library (persisted to R2 + Directus metadata). For transient draft canvas images only, use import_template_image instead.",
32601
+ description: "Upload a new image file into the permanent workspace media library, storing the binary asset on Cloudflare R2 and registering metadata in Directus. Call to add reusable media assets (logos, photos, graphics) for use across slideshow runs and brands. Do NOT use for transient template draft canvas images (use import_template_image instead). Requires workspace write permissions. Returns created Image record with generated imageId and public delivery URL.",
32589
32602
  effect: "local-write-job",
32590
32603
  inputSchema: {
32591
32604
  type: "object",
@@ -32598,12 +32611,12 @@ var init_src6 = __esm({
32598
32611
  },
32599
32612
  additionalProperties: false
32600
32613
  },
32601
- outputSchema: { type: "object", properties: {} }
32614
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Created image ID." }, url: { type: "string", description: "Public delivery URL." } } }
32602
32615
  },
32603
32616
  {
32604
32617
  name: "update_image",
32605
32618
  title: "Update image",
32606
- description: "Update metadata for an existing media library asset by imageId (e.g. rename asset or update rightsStatus). Does not re-upload binary content.",
32619
+ description: "Update metadata fields (such as human-readable name or rightsStatus) for an existing image asset by imageId. Call to rename images or change categorization tags. Do NOT use to record legal commercial compliance attestations (use attest_image instead) or to replace image binary pixels (use import_image to upload a new asset). Requires workspace owner authorization. Safe partial update: only provided fields are modified. Returns updated Image asset record.",
32607
32620
  effect: "local-write-job",
32608
32621
  inputSchema: {
32609
32622
  type: "object",
@@ -32615,28 +32628,28 @@ var init_src6 = __esm({
32615
32628
  required: ["imageId"],
32616
32629
  additionalProperties: false
32617
32630
  },
32618
- outputSchema: { type: "object", properties: {} }
32631
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Image asset ID." }, name: { type: "string", description: "Updated title." }, rightsStatus: { type: "string", description: "Updated rights status." } } }
32619
32632
  },
32620
32633
  {
32621
32634
  name: "attest_image",
32622
32635
  title: "Attest image rights",
32623
- description: "Record legal ownership or commercial rights attestation for an image asset (statementVersion). Recommended before multi-platform export to ensure commercial compliance.",
32636
+ description: "Record an immutable legal copyright or commercial rights ownership attestation for an image asset. Call before multi-platform export to satisfy commercial compliance requirements. Do NOT use to edit metadata like title or tags (use update_image instead) or upload images (use import_image). Not required for personal or draft-only runs. Requires workspace owner authorization. Writes a permanent audit log record bound to imageId. Re-attesting with a new statementVersion creates a new timestamped attestation record without revoking prior history. Returns attestation confirmation object.",
32624
32637
  effect: "local-write-job",
32625
32638
  inputSchema: {
32626
32639
  type: "object",
32627
32640
  properties: {
32628
32641
  imageId: { type: "string", description: "The unique image asset identifier to attest." },
32629
- statementVersion: { type: "string", description: "Legal attestation terms version accepted (e.g. v1)." }
32642
+ statementVersion: { type: "string", description: "Legal attestation terms version accepted (e.g. v1). Returns 400 if invalid or empty." }
32630
32643
  },
32631
32644
  required: ["imageId"],
32632
32645
  additionalProperties: false
32633
32646
  },
32634
- outputSchema: { type: "object", properties: {} }
32647
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Image asset ID." }, statementVersion: { type: "string", description: "Recorded statement version." }, attestedAt: { type: "string", description: "ISO timestamp of attestation." } } }
32635
32648
  },
32636
32649
  {
32637
32650
  name: "archive_image",
32638
32651
  title: "Archive image",
32639
- description: "Archive an image asset to soft-hide it from active media pickers without deleting binary storage. Reversible via restore_image. Slides referencing this image remain intact.",
32652
+ description: "Archive an image asset to soft-hide it from active media pickers without deleting binary files from storage. Call to declutter media library when an image is retired from active use. For permanent deletion, use delete_image instead. Idempotent state transition, fully reversible via restore_image. Slides and carousels currently referencing this image continue to display and render without disruption. Returns updated Image record with status set to archived.",
32640
32653
  effect: "local-write-job",
32641
32654
  inputSchema: {
32642
32655
  type: "object",
@@ -32646,12 +32659,12 @@ var init_src6 = __esm({
32646
32659
  required: ["imageId"],
32647
32660
  additionalProperties: false
32648
32661
  },
32649
- outputSchema: { type: "object", properties: {} }
32662
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Image asset ID." }, status: { type: "string", description: "Updated status (archived)." } } }
32650
32663
  },
32651
32664
  {
32652
32665
  name: "restore_image",
32653
32666
  title: "Restore image",
32654
- description: "Restore an archived image asset back to active status in the media library, making it selectable in slot editors and list queries.",
32667
+ description: "Restore a previously archived or trashed image asset back to active status in the workspace media library. Call to unhide a retired asset and make it selectable again in slide slot editors. Alternatives: Use get_image to inspect asset details before restoring. Idempotent state transition. Returns restored Image record visible in default media queries.",
32655
32668
  effect: "local-write-job",
32656
32669
  inputSchema: {
32657
32670
  type: "object",
@@ -32661,12 +32674,12 @@ var init_src6 = __esm({
32661
32674
  required: ["imageId"],
32662
32675
  additionalProperties: false
32663
32676
  },
32664
- outputSchema: { type: "object", properties: {} }
32677
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Image asset ID." }, status: { type: "string", description: "Restored status (active)." } } }
32665
32678
  },
32666
32679
  {
32667
32680
  name: "delete_image",
32668
32681
  title: "Delete image",
32669
- description: "Move an image asset to trash for deletion. Requires confirmation because slides referencing this image asset may fail to render properly.",
32682
+ description: "Move an image asset to trash for permanent removal. Call only when an image is obsolete, copyrighted without license, or marked for permanent deletion. If existing slides still use this image, prefer archive_image to hide it safely without breaking slide renders. Destructive operation requiring explicit user confirmation. May cause slide render failures if imageId is bound to active slides. Returns deletion confirmation record.",
32670
32683
  effect: "explicit-approval",
32671
32684
  inputSchema: {
32672
32685
  type: "object",
@@ -32676,7 +32689,7 @@ var init_src6 = __esm({
32676
32689
  required: ["imageId"],
32677
32690
  additionalProperties: false
32678
32691
  },
32679
- outputSchema: { type: "object", properties: {} }
32692
+ outputSchema: { type: "object", properties: { imageId: { type: "string", description: "Deleted image asset ID." }, deleted: { type: "boolean", description: "True if deletion confirmed." } } }
32680
32693
  }
32681
32694
  ];
32682
32695
  unifiedToolRegistry = [...templateTools, ...slideshowTools, ...brandTools, ...imageTools];