@easysociable/cli 0.1.15 → 0.1.16

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.
@@ -31818,11 +31818,13 @@ var init_src4 = __esm({
31818
31818
  {
31819
31819
  name: "get_gradient",
31820
31820
  title: "Get gradient",
31821
- description: "Get full gradient CSS recipe for Authoring decoration materialization after user confirmation",
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.",
31822
31822
  effect: "read-only",
31823
31823
  inputSchema: {
31824
31824
  type: "object",
31825
- properties: { gradientId: { type: "string" } },
31825
+ properties: {
31826
+ gradientId: { type: "string", description: "The unique identifier of the gradient preset (e.g. grad_warm_sunset)." }
31827
+ },
31826
31828
  required: ["gradientId"],
31827
31829
  additionalProperties: false
31828
31830
  },
@@ -31836,10 +31838,10 @@ var init_src4 = __esm({
31836
31838
  inputSchema: {
31837
31839
  type: "object",
31838
31840
  properties: {
31839
- query: { type: "string" },
31840
- collection: { type: "string" },
31841
- style: { type: "string", description: "outline | solid | any" },
31842
- limit: { type: "number" }
31841
+ query: { type: "string", description: "Search term for icon meaning or keyword (e.g. arrow, checkmark, star)." },
31842
+ collection: { type: "string", description: "Optional icon collection filter (e.g. lucide, tabler)." },
31843
+ style: { type: "string", description: "Icon rendering style: outline | solid | any" },
31844
+ limit: { type: "number", description: "Max number of candidates to return (default 8; prefer small limits for token budget)." }
31843
31845
  },
31844
31846
  required: ["query"],
31845
31847
  additionalProperties: false
@@ -31854,8 +31856,8 @@ var init_src4 = __esm({
31854
31856
  inputSchema: {
31855
31857
  type: "object",
31856
31858
  properties: {
31857
- iconId: { type: "string", description: "e.g. lucide:arrow-right" },
31858
- idempotencyKey: { type: "string" }
31859
+ iconId: { type: "string", description: "Canonical icon identifier confirmed from search_icons (e.g. lucide:arrow-right)." },
31860
+ idempotencyKey: { type: "string", description: "Unique idempotency key to prevent duplicate icon asset creation." }
31859
31861
  },
31860
31862
  required: ["iconId", "idempotencyKey"],
31861
31863
  additionalProperties: false
@@ -31872,7 +31874,7 @@ var init_src4 = __esm({
31872
31874
  {
31873
31875
  name: "list_drafts",
31874
31876
  title: "List authoring drafts",
31875
- description: "List template authoring drafts for the current owner.",
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.",
31876
31878
  effect: "read-only",
31877
31879
  inputSchema: {
31878
31880
  type: "object",
@@ -31884,16 +31886,16 @@ var init_src4 = __esm({
31884
31886
  {
31885
31887
  name: "create_draft",
31886
31888
  title: "Create authoring draft",
31887
- description: "Create a template authoring draft via Gateway; returns authoringStudioUrl for Studio preview/edit.",
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.",
31888
31890
  effect: "local-write-job",
31889
31891
  inputSchema: {
31890
31892
  type: "object",
31891
31893
  properties: {
31892
- name: { type: "string" },
31893
- source: { type: "object", additionalProperties: true },
31894
- authoringSource: { type: "object", additionalProperties: true },
31895
- selectionMetadata: { type: "object", additionalProperties: true },
31896
- theme: { type: "object", additionalProperties: true }
31894
+ name: { type: "string", description: "Human-readable title for the template draft." },
31895
+ source: { type: "object", additionalProperties: true, description: "Optional initial canvas source tree." },
31896
+ authoringSource: { type: "object", additionalProperties: true, description: "Template AST structure including layer hierarchy and visual slots." },
31897
+ selectionMetadata: { type: "object", additionalProperties: true, description: "Aspect ratio and categorization metadata (platforms, layout family, intent)." },
31898
+ theme: { type: "object", additionalProperties: true, description: "Default theme overrides (palette, typography tokens)." }
31897
31899
  },
31898
31900
  required: ["name"],
31899
31901
  additionalProperties: false
@@ -31903,11 +31905,13 @@ var init_src4 = __esm({
31903
31905
  {
31904
31906
  name: "get_draft",
31905
31907
  title: "Get authoring draft",
31906
- description: "Fetch an authoring draft by id (Gateway-only).",
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.",
31907
31909
  effect: "read-only",
31908
31910
  inputSchema: {
31909
31911
  type: "object",
31910
- properties: { draftId: { type: "string" } },
31912
+ properties: {
31913
+ draftId: { type: "string", description: "The unique draft identifier to retrieve." }
31914
+ },
31911
31915
  required: ["draftId"],
31912
31916
  additionalProperties: false
31913
31917
  },
@@ -31916,16 +31920,16 @@ var init_src4 = __esm({
31916
31920
  {
31917
31921
  name: "update_draft",
31918
31922
  title: "Update authoring draft",
31919
- description: "Update authoring draft fields (name, authoringSource, selectionMetadata, theme).",
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.",
31920
31924
  effect: "local-write-job",
31921
31925
  inputSchema: {
31922
31926
  type: "object",
31923
31927
  properties: {
31924
- draftId: { type: "string" },
31925
- name: { type: "string" },
31926
- authoringSource: { type: "object", additionalProperties: true },
31927
- selectionMetadata: { type: "object", additionalProperties: true },
31928
- theme: { type: "object", additionalProperties: true }
31928
+ draftId: { type: "string", description: "The unique draft identifier to update." },
31929
+ name: { type: "string", description: "Updated template title." },
31930
+ authoringSource: { type: "object", additionalProperties: true, description: "Updated template AST layout structure." },
31931
+ selectionMetadata: { type: "object", additionalProperties: true, description: "Updated platform and family metadata." },
31932
+ theme: { type: "object", additionalProperties: true, description: "Updated theme tokens." }
31929
31933
  },
31930
31934
  required: ["draftId"],
31931
31935
  additionalProperties: false
@@ -31935,11 +31939,13 @@ var init_src4 = __esm({
31935
31939
  {
31936
31940
  name: "delete_draft",
31937
31941
  title: "Delete authoring draft",
31938
- description: "Permanently delete an authoring draft by draftId.",
31942
+ description: "Permanently discard and delete a template authoring draft. Destructive operation requiring confirmation: draft canvas data and unpublished changes cannot be recovered.",
31939
31943
  effect: "explicit-approval",
31940
31944
  inputSchema: {
31941
31945
  type: "object",
31942
- properties: { draftId: { type: "string" } },
31946
+ properties: {
31947
+ draftId: { type: "string", description: "The unique draft identifier to permanently delete." }
31948
+ },
31943
31949
  required: ["draftId"],
31944
31950
  additionalProperties: false
31945
31951
  },
@@ -31948,11 +31954,13 @@ var init_src4 = __esm({
31948
31954
  {
31949
31955
  name: "publish_draft",
31950
31956
  title: "Publish authoring draft",
31951
- description: "Publish a validated authoring draft to the public catalog via Gateway.",
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.",
31952
31958
  effect: "local-write-job",
31953
31959
  inputSchema: {
31954
31960
  type: "object",
31955
- properties: { draftId: { type: "string" } },
31961
+ properties: {
31962
+ draftId: { type: "string", description: "The unique draft identifier to validate and publish." }
31963
+ },
31956
31964
  required: ["draftId"],
31957
31965
  additionalProperties: false
31958
31966
  },
@@ -31961,11 +31969,13 @@ var init_src4 = __esm({
31961
31969
  {
31962
31970
  name: "create_preview_job",
31963
31971
  title: "Create preview job",
31964
- description: "Optional headless hosted preview job. Primary authoring path is authoringStudioUrl from create_draft.",
31972
+ description: "Request an asynchronous server-side render preview image of a template draft for thumbnail generation. For interactive real-time visual authoring, prefer opening the authoringStudioUrl in browser.",
31965
31973
  effect: "local-write-job",
31966
31974
  inputSchema: {
31967
31975
  type: "object",
31968
- properties: { draftId: { type: "string" } },
31976
+ properties: {
31977
+ draftId: { type: "string", description: "The unique draft identifier to generate a render preview for." }
31978
+ },
31969
31979
  required: ["draftId"],
31970
31980
  additionalProperties: false
31971
31981
  },
@@ -32171,14 +32181,161 @@ var init_src5 = __esm({
32171
32181
  init_src2();
32172
32182
  objectSchema = { type: "object", properties: {}, additionalProperties: true };
32173
32183
  slideshowToolRegistry = [
32174
- { name: "list_runs", title: "List slideshow runs", description: "List owner-scoped Slideshow Runs with optional filters.", effect: "read-only", inputSchema: { ...objectSchema, properties: { q: { type: "string" }, platform: { type: "string" }, profileId: { type: "string" }, brandProfileId: { type: "string" }, contentSlug: { type: "string" }, status: { type: "string" } } }, outputSchema: objectSchema },
32175
- { name: "recommend_templates", title: "Recommend slideshow page templates", 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.", effect: "read-only", inputSchema: { ...objectSchema, properties: { platform: { type: "string" }, canvasPreset: { type: "string" }, pages: { type: "array", items: { type: "object", properties: { role: { type: "string" }, density: { type: "string" }, slotSummary: { type: "object" }, requiresImage: { type: "boolean" } }, required: ["role"] } }, k: { type: "integer", minimum: 2, maximum: 5 }, seed: { type: "string" } }, required: ["platform", "pages"] }, outputSchema: objectSchema },
32176
- { name: "create_run", title: "Create slideshow run", description: "Create an ADR-0026 Slideshow Run from a ContentPack.", effect: "local-write-job", inputSchema: { ...objectSchema, properties: { pack: { type: "object" }, brandId: { type: "string" }, brandProfileId: { type: "string" }, contentSlug: { type: "string" } }, required: ["pack"] }, outputSchema: objectSchema },
32177
- { name: "get_run", title: "Get slideshow run", description: "Get an owner-scoped Slideshow Run.", effect: "read-only", inputSchema: { ...objectSchema, properties: { runId: { type: "string" } }, required: ["runId"] }, outputSchema: objectSchema },
32178
- { name: "update_run", title: "Update slideshow run", description: "Edit page-instance slots/layout/style/decorations or presentation preference with optimistic revision.", effect: "local-write-job", inputSchema: { ...objectSchema, properties: { runId: { type: "string" }, pack: { type: "object" }, brandId: { type: "string" }, brandProfileId: { type: "string" }, contentSlug: { type: "string" }, baseRevision: { type: "integer", minimum: 1 }, pageIndex: { type: "integer", minimum: 0 }, slots: { type: "object" }, layout: { type: "object" }, style: { type: "object" }, decorations: { type: "array" } }, required: ["runId"] }, outputSchema: objectSchema },
32179
- { name: "archive_run", title: "Archive slideshow run", description: "Hide a Run from default lists without deleting it.", effect: "local-write-job", inputSchema: { ...objectSchema, properties: { runId: { type: "string" } }, required: ["runId"] }, outputSchema: objectSchema },
32180
- { name: "restore_run", title: "Restore slideshow run", description: "Restore an archived or trashed Run.", effect: "local-write-job", inputSchema: { ...objectSchema, properties: { runId: { type: "string" } }, required: ["runId"] }, outputSchema: objectSchema },
32181
- { name: "delete_run", title: "Delete slideshow run", description: "Permanently delete a Slideshow Run.", effect: "explicit-approval", inputSchema: { ...objectSchema, properties: { runId: { type: "string" } }, required: ["runId"] }, outputSchema: objectSchema }
32184
+ {
32185
+ name: "list_runs",
32186
+ 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.",
32188
+ effect: "read-only",
32189
+ inputSchema: {
32190
+ type: "object",
32191
+ properties: {
32192
+ q: { type: "string", description: "Search term matching run title, topic, or content text." },
32193
+ platform: { type: "string", description: "Target platform filter: tiktok | linkedin | instagram | threads | xiaohongshu" },
32194
+ profileId: { type: "string", description: "Optional profile filter." },
32195
+ brandProfileId: { type: "string", description: "Optional legacy brand profile filter." },
32196
+ brandId: { type: "string", description: "Filter runs styled with a specific Brand ID." },
32197
+ contentSlug: { type: "string", description: "Filter runs generated from a specific content topic slug." },
32198
+ status: { type: "string", description: "Lifecycle status filter: draft | active | archived | trash" }
32199
+ },
32200
+ additionalProperties: true
32201
+ },
32202
+ outputSchema: objectSchema
32203
+ },
32204
+ {
32205
+ name: "recommend_templates",
32206
+ 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.",
32208
+ effect: "read-only",
32209
+ inputSchema: {
32210
+ type: "object",
32211
+ properties: {
32212
+ platform: { type: "string", description: "Target platform: tiktok | linkedin | instagram | threads | xiaohongshu" },
32213
+ canvasPreset: { type: "string", description: "Target aspect ratio preset (e.g. 9:16, 4:5, 1:1, 3:4)." },
32214
+ pages: {
32215
+ type: "array",
32216
+ description: "Ordered list of page contracts describing narrative role and slot requirements.",
32217
+ items: {
32218
+ type: "object",
32219
+ properties: {
32220
+ role: { type: "string", description: "Narrative role: hook | value | rehook | cta" },
32221
+ density: { type: "string", description: "Content density: sparse | normal | dense" },
32222
+ slotSummary: { type: "object", description: "Slot keys expected on this page." },
32223
+ requiresImage: { type: "boolean", description: "Whether this page must have an image slot." }
32224
+ },
32225
+ required: ["role"]
32226
+ }
32227
+ },
32228
+ k: { type: "integer", minimum: 2, maximum: 5, description: "Number of template recommendations to return per page (2 to 5)." },
32229
+ seed: { type: "string", description: "Optional deterministic randomization seed for layout family rotation." }
32230
+ },
32231
+ required: ["platform", "pages"],
32232
+ additionalProperties: true
32233
+ },
32234
+ outputSchema: objectSchema
32235
+ },
32236
+ {
32237
+ name: "create_run",
32238
+ 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.",
32240
+ effect: "local-write-job",
32241
+ inputSchema: {
32242
+ type: "object",
32243
+ properties: {
32244
+ pack: { type: "object", description: "content-pack.v1 payload containing schemaVersion, platform, and pages array with bound templateId and slots content." },
32245
+ brandId: { type: "string", description: "Optional Brand ID to apply brand kit typography, colors, and logo to all slides." },
32246
+ brandProfileId: { type: "string", description: "Optional legacy brand profile ID." },
32247
+ contentSlug: { type: "string", description: "Optional content topic identifier for tracking in Content Engine." }
32248
+ },
32249
+ required: ["pack"],
32250
+ additionalProperties: true
32251
+ },
32252
+ outputSchema: objectSchema
32253
+ },
32254
+ {
32255
+ name: "get_run",
32256
+ 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.",
32258
+ effect: "read-only",
32259
+ inputSchema: {
32260
+ type: "object",
32261
+ properties: {
32262
+ runId: { type: "string", description: "The unique Slideshow Run identifier to retrieve." }
32263
+ },
32264
+ required: ["runId"],
32265
+ additionalProperties: true
32266
+ },
32267
+ outputSchema: objectSchema
32268
+ },
32269
+ {
32270
+ name: "update_run",
32271
+ 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.",
32273
+ effect: "local-write-job",
32274
+ inputSchema: {
32275
+ type: "object",
32276
+ properties: {
32277
+ 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." },
32281
+ brandProfileId: { type: "string", description: "Optional legacy brand profile ID." },
32282
+ 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." },
32285
+ layout: { type: "object", description: "Layout adjustments for the specified pageIndex." },
32286
+ style: { type: "object", description: "Style token adjustments for the specified pageIndex." },
32287
+ decorations: { type: "array", description: "Visual decorations list for the specified pageIndex." }
32288
+ },
32289
+ required: ["runId"],
32290
+ additionalProperties: true
32291
+ },
32292
+ outputSchema: objectSchema
32293
+ },
32294
+ {
32295
+ name: "archive_run",
32296
+ 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.",
32298
+ effect: "local-write-job",
32299
+ inputSchema: {
32300
+ type: "object",
32301
+ properties: {
32302
+ runId: { type: "string", description: "The unique Slideshow Run identifier to archive." }
32303
+ },
32304
+ required: ["runId"],
32305
+ additionalProperties: true
32306
+ },
32307
+ outputSchema: objectSchema
32308
+ },
32309
+ {
32310
+ name: "restore_run",
32311
+ 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.",
32313
+ effect: "local-write-job",
32314
+ inputSchema: {
32315
+ type: "object",
32316
+ properties: {
32317
+ runId: { type: "string", description: "The unique Slideshow Run identifier to restore." }
32318
+ },
32319
+ required: ["runId"],
32320
+ additionalProperties: true
32321
+ },
32322
+ outputSchema: objectSchema
32323
+ },
32324
+ {
32325
+ name: "delete_run",
32326
+ 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.",
32328
+ effect: "explicit-approval",
32329
+ inputSchema: {
32330
+ type: "object",
32331
+ properties: {
32332
+ runId: { type: "string", description: "The unique Slideshow Run identifier to permanently delete." }
32333
+ },
32334
+ required: ["runId"],
32335
+ additionalProperties: true
32336
+ },
32337
+ outputSchema: objectSchema
32338
+ }
32182
32339
  ];
32183
32340
  slideshowResourceTemplates = [
32184
32341
  { uriTemplate: "slideshow://runs/{runId}", name: "Slideshow Run", description: "Owner-scoped Run JSON snapshot", mimeType: "application/json" }
@@ -32281,26 +32438,246 @@ var init_src6 = __esm({
32281
32438
  delete_run: "delete_slideshow_run"
32282
32439
  };
32283
32440
  brandTools = [
32284
- { name: "list_brands", title: "List brands", description: "List owner-scoped Brands (identity + fonts + colors + logo).", effect: "read-only", inputSchema: { type: "object", properties: {}, additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32285
- { name: "get_brand", title: "Get brand", description: "Get one Brand by id.", effect: "read-only", inputSchema: { type: "object", properties: { brandId: { type: "string" } }, required: ["brandId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32286
- { name: "create_brand", title: "Create brand", description: "Create a Brand with optional fonts, colors and logoAssetId.", effect: "local-write-job", inputSchema: { type: "object", properties: { name: { type: "string" }, displayName: { type: "string" }, handle: { type: "string" }, typography: { type: "object" }, colors: { type: "object" }, logoAssetId: { type: "string" } }, required: ["name"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32287
- { name: "update_brand", title: "Update brand", description: "Patch Brand appearance with optimistic baseRevision.", effect: "local-write-job", inputSchema: { type: "object", properties: { brandId: { type: "string" }, baseRevision: { type: "integer", minimum: 1 }, name: { type: "string" }, displayName: { type: "string" }, handle: { type: "string" }, typography: { type: "object" }, colors: { type: "object" }, logoAssetId: { type: "string" } }, required: ["brandId", "baseRevision"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32288
- { name: "archive_brand", title: "Archive brand", description: "Archive a Brand.", effect: "local-write-job", inputSchema: { type: "object", properties: { brandId: { type: "string" } }, required: ["brandId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32289
- { name: "restore_brand", title: "Restore brand", description: "Restore an archived Brand.", effect: "local-write-job", inputSchema: { type: "object", properties: { brandId: { type: "string" } }, required: ["brandId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32290
- { name: "delete_brand", title: "Delete brand", description: "Move a Brand to trash.", effect: "explicit-approval", inputSchema: { type: "object", properties: { brandId: { type: "string" } }, required: ["brandId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } }
32441
+ {
32442
+ name: "list_brands",
32443
+ 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.",
32445
+ effect: "read-only",
32446
+ inputSchema: { type: "object", properties: {}, additionalProperties: false },
32447
+ outputSchema: { type: "object", properties: {} }
32448
+ },
32449
+ {
32450
+ name: "get_brand",
32451
+ 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.",
32453
+ effect: "read-only",
32454
+ inputSchema: {
32455
+ type: "object",
32456
+ properties: {
32457
+ brandId: { type: "string", description: "The unique identifier of the brand to retrieve." }
32458
+ },
32459
+ required: ["brandId"],
32460
+ additionalProperties: false
32461
+ },
32462
+ outputSchema: { type: "object", properties: {} }
32463
+ },
32464
+ {
32465
+ name: "create_brand",
32466
+ 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.",
32468
+ effect: "local-write-job",
32469
+ inputSchema: {
32470
+ type: "object",
32471
+ properties: {
32472
+ name: { type: "string", description: "Canonical brand name (e.g. Acme Corp)." },
32473
+ displayName: { type: "string", description: "User-facing display name." },
32474
+ handle: { type: "string", description: "Social media handle (e.g. @acme)." },
32475
+ typography: { type: "object", description: "Typography settings (headingFont, bodyFont)." },
32476
+ colors: { type: "object", description: "Color palette tokens (primary, secondary, accent, surface, text)." },
32477
+ logoAssetId: { type: "string", description: "Optional image asset ID for brand logo." }
32478
+ },
32479
+ required: ["name"],
32480
+ additionalProperties: false
32481
+ },
32482
+ outputSchema: { type: "object", properties: {} }
32483
+ },
32484
+ {
32485
+ name: "update_brand",
32486
+ 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.",
32488
+ effect: "local-write-job",
32489
+ inputSchema: {
32490
+ type: "object",
32491
+ properties: {
32492
+ 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." },
32494
+ name: { type: "string", description: "Updated brand name." },
32495
+ displayName: { type: "string", description: "Updated display name." },
32496
+ handle: { type: "string", description: "Updated social handle." },
32497
+ typography: { type: "object", description: "Updated typography configuration." },
32498
+ colors: { type: "object", description: "Updated color palette tokens." },
32499
+ logoAssetId: { type: "string", description: "Updated logo asset ID." }
32500
+ },
32501
+ required: ["brandId", "baseRevision"],
32502
+ additionalProperties: false
32503
+ },
32504
+ outputSchema: { type: "object", properties: {} }
32505
+ },
32506
+ {
32507
+ name: "archive_brand",
32508
+ 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.",
32510
+ effect: "local-write-job",
32511
+ inputSchema: {
32512
+ type: "object",
32513
+ properties: {
32514
+ brandId: { type: "string", description: "The unique identifier of the brand to archive." }
32515
+ },
32516
+ required: ["brandId"],
32517
+ additionalProperties: false
32518
+ },
32519
+ outputSchema: { type: "object", properties: {} }
32520
+ },
32521
+ {
32522
+ name: "restore_brand",
32523
+ 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.",
32525
+ effect: "local-write-job",
32526
+ inputSchema: {
32527
+ type: "object",
32528
+ properties: {
32529
+ brandId: { type: "string", description: "The unique identifier of the brand to restore." }
32530
+ },
32531
+ required: ["brandId"],
32532
+ additionalProperties: false
32533
+ },
32534
+ outputSchema: { type: "object", properties: {} }
32535
+ },
32536
+ {
32537
+ name: "delete_brand",
32538
+ 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.",
32540
+ effect: "explicit-approval",
32541
+ inputSchema: {
32542
+ type: "object",
32543
+ properties: {
32544
+ brandId: { type: "string", description: "The unique identifier of the brand to move to trash." }
32545
+ },
32546
+ required: ["brandId"],
32547
+ additionalProperties: false
32548
+ },
32549
+ outputSchema: { type: "object", properties: {} }
32550
+ }
32291
32551
  ];
32292
32552
  rename = (tool, names) => ({ ...tool, name: names[tool.name] ?? tool.name });
32293
32553
  templateTools = templateToolRegistry.map((tool) => rename(tool, templateNames));
32294
32554
  slideshowTools = slideshowToolRegistry.filter((tool) => !removedTools.has(tool.name)).map((tool) => rename(tool, slideshowNames));
32295
32555
  imageTools = [
32296
- { name: "list_images", title: "List images", description: "List owner-scoped image assets.", effect: "read-only", inputSchema: { type: "object", properties: { q: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32297
- { name: "get_image", title: "Get image", description: "Get an owner-scoped image asset.", effect: "read-only", inputSchema: { type: "object", properties: { imageId: { type: "string" } }, required: ["imageId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32298
- { name: "import_image", title: "Import image", description: "Upload an image through Gateway/R2 and persist Directus metadata.", effect: "local-write-job", inputSchema: { type: "object", properties: { file: { type: "string" }, sourceUrl: { type: "string" }, filename: { type: "string" }, name: { type: "string" }, rightsStatus: { type: "string" } }, additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32299
- { name: "update_image", title: "Update image", description: "Update metadata for an image asset.", effect: "local-write-job", inputSchema: { type: "object", properties: { imageId: { type: "string" }, name: { type: "string" }, rightsStatus: { type: "string" } }, required: ["imageId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32300
- { name: "attest_image", title: "Attest image rights", description: "Record an owner rights attestation.", effect: "local-write-job", inputSchema: { type: "object", properties: { imageId: { type: "string" }, statementVersion: { type: "string" } }, required: ["imageId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32301
- { name: "archive_image", title: "Archive image", description: "Archive an image asset.", effect: "local-write-job", inputSchema: { type: "object", properties: { imageId: { type: "string" } }, required: ["imageId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32302
- { name: "restore_image", title: "Restore image", description: "Restore an image asset.", effect: "local-write-job", inputSchema: { type: "object", properties: { imageId: { type: "string" } }, required: ["imageId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } },
32303
- { name: "delete_image", title: "Delete image", description: "Move an image asset to trash.", effect: "explicit-approval", inputSchema: { type: "object", properties: { imageId: { type: "string" } }, required: ["imageId"], additionalProperties: false }, outputSchema: { type: "object", properties: {} } }
32556
+ {
32557
+ name: "list_images",
32558
+ 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.",
32560
+ effect: "read-only",
32561
+ inputSchema: {
32562
+ type: "object",
32563
+ properties: {
32564
+ q: { type: "string", description: "Search term matching image name or provenance source." }
32565
+ },
32566
+ additionalProperties: false
32567
+ },
32568
+ outputSchema: { type: "object", properties: {} }
32569
+ },
32570
+ {
32571
+ name: "get_image",
32572
+ 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.",
32574
+ effect: "read-only",
32575
+ inputSchema: {
32576
+ type: "object",
32577
+ properties: {
32578
+ imageId: { type: "string", description: "The unique image asset identifier to retrieve." }
32579
+ },
32580
+ required: ["imageId"],
32581
+ additionalProperties: false
32582
+ },
32583
+ outputSchema: { type: "object", properties: {} }
32584
+ },
32585
+ {
32586
+ name: "import_image",
32587
+ 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.",
32589
+ effect: "local-write-job",
32590
+ inputSchema: {
32591
+ type: "object",
32592
+ properties: {
32593
+ file: { type: "string", description: "Base64-encoded image data or local file path." },
32594
+ sourceUrl: { type: "string", description: "Original source URL if importing from web/unsplash/pinterest." },
32595
+ filename: { type: "string", description: "Original filename with extension (e.g. header.png)." },
32596
+ name: { type: "string", description: "Human-readable asset title in media library." },
32597
+ rightsStatus: { type: "string", description: "Rights ownership status: licensed_for_publish | user_owned | generated | rights_unknown" }
32598
+ },
32599
+ additionalProperties: false
32600
+ },
32601
+ outputSchema: { type: "object", properties: {} }
32602
+ },
32603
+ {
32604
+ name: "update_image",
32605
+ 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.",
32607
+ effect: "local-write-job",
32608
+ inputSchema: {
32609
+ type: "object",
32610
+ properties: {
32611
+ imageId: { type: "string", description: "The unique image asset identifier to update." },
32612
+ name: { type: "string", description: "Updated human-readable asset title." },
32613
+ rightsStatus: { type: "string", description: "Updated rights status: licensed_for_publish | user_owned | generated" }
32614
+ },
32615
+ required: ["imageId"],
32616
+ additionalProperties: false
32617
+ },
32618
+ outputSchema: { type: "object", properties: {} }
32619
+ },
32620
+ {
32621
+ name: "attest_image",
32622
+ 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.",
32624
+ effect: "local-write-job",
32625
+ inputSchema: {
32626
+ type: "object",
32627
+ properties: {
32628
+ imageId: { type: "string", description: "The unique image asset identifier to attest." },
32629
+ statementVersion: { type: "string", description: "Legal attestation terms version accepted (e.g. v1)." }
32630
+ },
32631
+ required: ["imageId"],
32632
+ additionalProperties: false
32633
+ },
32634
+ outputSchema: { type: "object", properties: {} }
32635
+ },
32636
+ {
32637
+ name: "archive_image",
32638
+ 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.",
32640
+ effect: "local-write-job",
32641
+ inputSchema: {
32642
+ type: "object",
32643
+ properties: {
32644
+ imageId: { type: "string", description: "The unique image asset identifier to archive." }
32645
+ },
32646
+ required: ["imageId"],
32647
+ additionalProperties: false
32648
+ },
32649
+ outputSchema: { type: "object", properties: {} }
32650
+ },
32651
+ {
32652
+ name: "restore_image",
32653
+ 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.",
32655
+ effect: "local-write-job",
32656
+ inputSchema: {
32657
+ type: "object",
32658
+ properties: {
32659
+ imageId: { type: "string", description: "The unique image asset identifier to restore." }
32660
+ },
32661
+ required: ["imageId"],
32662
+ additionalProperties: false
32663
+ },
32664
+ outputSchema: { type: "object", properties: {} }
32665
+ },
32666
+ {
32667
+ name: "delete_image",
32668
+ 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.",
32670
+ effect: "explicit-approval",
32671
+ inputSchema: {
32672
+ type: "object",
32673
+ properties: {
32674
+ imageId: { type: "string", description: "The unique image asset identifier to move to trash." }
32675
+ },
32676
+ required: ["imageId"],
32677
+ additionalProperties: false
32678
+ },
32679
+ outputSchema: { type: "object", properties: {} }
32680
+ }
32304
32681
  ];
32305
32682
  unifiedToolRegistry = [...templateTools, ...slideshowTools, ...brandTools, ...imageTools];
32306
32683
  unifiedResourceTemplates = slideshowResourceTemplates;