freebeat-mcp 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +42 -15
  3. package/dist/capabilities/agents/tools/generate-agent-videos.js +15 -10
  4. package/dist/capabilities/agents/tools/generate-agent-videos.js.map +1 -1
  5. package/dist/capabilities/assets/tools/upload-audio.js +3 -3
  6. package/dist/capabilities/assets/tools/upload-audio.js.map +1 -1
  7. package/dist/capabilities/assets/tools/upload-image.js +3 -3
  8. package/dist/capabilities/assets/tools/upload-image.js.map +1 -1
  9. package/dist/capabilities/assets/tools/upload-video.js +3 -3
  10. package/dist/capabilities/assets/tools/upload-video.js.map +1 -1
  11. package/dist/capabilities/credits/register.js +7 -6
  12. package/dist/capabilities/credits/register.js.map +1 -1
  13. package/dist/capabilities/effects/tools/generate-effect.js +8 -6
  14. package/dist/capabilities/effects/tools/generate-effect.js.map +1 -1
  15. package/dist/capabilities/effects/tools/list-effects.js +3 -3
  16. package/dist/capabilities/effects/tools/list-effects.js.map +1 -1
  17. package/dist/capabilities/media/tools/edit-image.js +7 -5
  18. package/dist/capabilities/media/tools/edit-image.js.map +1 -1
  19. package/dist/capabilities/media/tools/generate-image.js +7 -5
  20. package/dist/capabilities/media/tools/generate-image.js.map +1 -1
  21. package/dist/capabilities/media/tools/generate-text.js +8 -6
  22. package/dist/capabilities/media/tools/generate-text.js.map +1 -1
  23. package/dist/capabilities/media/tools/generate-video.js +7 -5
  24. package/dist/capabilities/media/tools/generate-video.js.map +1 -1
  25. package/dist/capabilities/media/tools/get-model-help.js +14 -9
  26. package/dist/capabilities/media/tools/get-model-help.js.map +1 -1
  27. package/dist/capabilities/media/tools/list-models.js +5 -4
  28. package/dist/capabilities/media/tools/list-models.js.map +1 -1
  29. package/dist/capabilities/media/tools/shared.d.ts +11 -11
  30. package/dist/capabilities/media/tools/shared.js +8 -7
  31. package/dist/capabilities/media/tools/shared.js.map +1 -1
  32. package/dist/capabilities/music/tools/generate-music.js +8 -6
  33. package/dist/capabilities/music/tools/generate-music.js.map +1 -1
  34. package/dist/capabilities/music/tools/list-music-models.js +6 -5
  35. package/dist/capabilities/music/tools/list-music-models.js.map +1 -1
  36. package/dist/capabilities/performance/tools/generate-lip-sync-video.js +8 -6
  37. package/dist/capabilities/performance/tools/generate-lip-sync-video.js.map +1 -1
  38. package/dist/capabilities/performance/tools/generate-singing-video.js +8 -6
  39. package/dist/capabilities/performance/tools/generate-singing-video.js.map +1 -1
  40. package/dist/capabilities/tasks/tools/get-task-result.js +28 -34
  41. package/dist/capabilities/tasks/tools/get-task-result.js.map +1 -1
  42. package/dist/capabilities/tasks/tools/get-task-status.js +36 -25
  43. package/dist/capabilities/tasks/tools/get-task-status.js.map +1 -1
  44. package/dist/core/credit-approval.d.ts +5 -3
  45. package/dist/core/credit-approval.js +13 -4
  46. package/dist/core/credit-approval.js.map +1 -1
  47. package/dist/core/model-output.d.ts +571 -0
  48. package/dist/core/model-output.js +62 -0
  49. package/dist/core/model-output.js.map +1 -0
  50. package/dist/core/paid-tools.d.ts +1 -0
  51. package/dist/core/response.d.ts +12 -5
  52. package/dist/core/response.js +23 -11
  53. package/dist/core/response.js.map +1 -1
  54. package/dist/core/task-outcome.d.ts +47 -0
  55. package/dist/core/task-outcome.js +97 -0
  56. package/dist/core/task-outcome.js.map +1 -0
  57. package/dist/core/task-result.d.ts +35 -0
  58. package/dist/core/task-result.js +19 -0
  59. package/dist/core/task-result.js.map +1 -0
  60. package/dist/core/task-status.d.ts +4 -0
  61. package/dist/core/task-status.js +16 -0
  62. package/dist/core/task-status.js.map +1 -0
  63. package/dist/core/task-types.d.ts +2 -0
  64. package/dist/core/task-types.js +7 -1
  65. package/dist/core/task-types.js.map +1 -1
  66. package/dist/services/freebeat-api.d.ts +20 -6
  67. package/dist/services/freebeat-api.js +148 -62
  68. package/dist/services/freebeat-api.js.map +1 -1
  69. package/dist/services/pricing.js +19 -2
  70. package/dist/services/pricing.js.map +1 -1
  71. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,27 @@ The format is based on Keep a Changelog, and this project follows Semantic Versi
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.1] - 2026-10-27
10
+
11
+ ### Fixed
12
+ - All 22 tools use one registration boundary: successful results are parsed with their declared output schema before either MCP text or structured content is returned. Unknown object properties are stripped recursively.
13
+ - Model help and music parameters use defined parameter/value-domain/condition contracts; text usage returns numeric token counts and defined count breakdowns. Pricing preserves evaluator fields, with combination tables under `prices.map`.
14
+ - Missing-price hints name only recognized request inputs; unknown task types become `unknown`; agent startup transport errors return owned guidance and the created session link without Axios codes.
15
+ - Completed task results share one schema projection across all task types: only documented media URLs and metadata are returned; extra upstream fields cannot enter MCP text or structured results.
16
+ - Task and Open RPC statuses are normalized to defined states; unrecognized values use owned unknown-state guidance, including result-tool errors. Unmapped upstream task and Open RPC codes are omitted or null instead of relayed.
17
+ - Agent task billing comes only from the authoritative task record; final-asset charges and refunds cannot fill unknown task totals.
18
+ - Structured upstream failure facts take precedence over credit notices and chat; fallback facts only fill missing values.
19
+ - Failure text is trusted by source: agent assistant messages, website-facing credit notices, and Singing task display messages are relayed unchanged, including timecodes and Unicode punctuation. Raw error reasons, provider diagnostics and exception details are never relayed or classified by regex; missing user-facing reasons use a plain stage-based failure sentence.
20
+ - Failed and paused task tools retain user-facing messages alongside structured failure and billing facts, with a session link or library link when no session is available.
21
+ - Paid tools require explicit consent: a numeric `max_credits` for a known quote, or `accept_unknown_cost: true` for an unknown total. Missing or conflicting consent is refused; agents charge per stage and do not enforce a whole-run ceiling.
22
+ - Generated-song video handoff waits briefly for audio readiness, then returns `preparing` with the numeric `music_id` if needed. Continuations reuse that asset without registering it again; no paid video starts before readiness.
23
+ - An agent final assembly without a playable URL reports a structured export pause instead of generic failure or an older video.
24
+ - Task status and results preserve structured failure stage, safe reason, retryability, and actual charged/refunded/net/refund state. Failed and paused results retain accounting; missing values remain unknown and raw diagnostics stay out of user messages.
25
+ - Singing requests carry the configured Freebeat account backend to the performance service so account authentication and billing use the intended environment.
26
+
27
+ ### Changed
28
+ - Tool descriptions, submission fixtures, and skills explain both consent modes, preparation continuation, and realistic agent costs without promising a fixed total.
29
+
9
30
  ## [0.4.0] - 2026-10-26
10
31
 
11
32
  ### Added
package/README.md CHANGED
@@ -83,7 +83,7 @@ This package depends on Freebeat online services. Available source platforms, ef
83
83
 
84
84
  ## Tools
85
85
 
86
- 22 tools are available with full scopes.
86
+ 22 tools are available with full scopes. Every successful response is projected through its declared output schema before both MCP text and structured content are built; undeclared object properties are excluded.
87
87
 
88
88
  ### `get_credit_balance` and `quote_generation`
89
89
 
@@ -95,11 +95,30 @@ account discounts or allowances and never charge credits. Missing or unsupported
95
95
  rules are not treated as free. Text, effects, singing, and multi-stage agents do not
96
96
  currently expose a complete upfront quote through their service contracts.
97
97
 
98
- Set `max_credits` on every paid tool to the numeric quote or ceiling the user approved. If the current price is higher or unavailable, the tool does not submit and returns `quote` and a reason. Never remove or raise an approved ceiling to bypass this refusal. Without a ceiling, existing submission behavior remains and the result includes the current `quote`; a quote is not an actual charge.
98
+ Every paid call needs one explicit user consent:
99
99
 
100
- Finished tasks expose `used_credits` when Freebeat reports an actual charge. Otherwise
101
- they explicitly state that the charge was not reported; token usage, estimates,
102
- and a next-step credit requirement are not actual charges.
100
+ | Current quote | Consent to send | What is checked |
101
+ | --- | --- | --- |
102
+ | `quoted` | `max_credits` with the user-approved numeric ceiling | The current quote must not exceed it. |
103
+ | `unavailable` | `accept_unknown_cost: true`, without `max_credits` | The user explicitly accepts an unknown total. No total cap is enforced. |
104
+
105
+ Missing consent or both consent modes are refused. Never remove or raise a ceiling,
106
+ or switch to unknown-cost consent, without new user approval. Agent videos charge
107
+ per stage; a submission-time check cannot cap the whole run.
108
+
109
+ A production diagnosis on 2026-10-27 observed 855 credits for the video step alone
110
+ of a 15-second 720p dance, with planning and images extra: on the order of 1,000
111
+ credits. This is a historical configuration example, not a current quote or ceiling.
112
+ The agent's actual default model is resolved inside its backend and is not exposed
113
+ by the pricing contract, so this adapter does not invent a live minimum from a model list.
114
+
115
+ All task types expose `billing: { charged, refunded, net, refund_state }`.
116
+ Missing amounts or state are `null`; estimates and next-step requirements are not
117
+ charges. `net` is computed only when both charged and refunded are reported.
118
+ `used_credits` continues to expose the reported charge. Failed and paused tasks also
119
+ expose `failure: { stage, reason, retryable }`, with unknown stage or retryability
120
+ as `null`. A pending refund is not money already returned. Raw stacks and internal
121
+ identifiers are excluded from failure text.
103
122
 
104
123
  ### `upload_audio`
105
124
 
@@ -159,7 +178,11 @@ Generate original audio from a `model_id` and `prompt`, with optional lyrics, in
159
178
  Pass the completed `result.music_id` (a reference such as `music:123`) straight into
160
179
  `generate_music_video`, `generate_dance_video`, or `generate_lyric_video`. The video
161
180
  call resolves and prepares your generated song automatically. If audio analysis is
162
- still running, retry after it finishes; no download or manual re-upload is required.
181
+ still running after a short bounded wait, the tool returns `status: preparing`, a numeric
182
+ `music_id`, and `retry_after_seconds`, without a `task_id`. Wait, then call the same
183
+ tool with the same approved inputs and the returned numeric `music_id`; do not send
184
+ the original `music:<task>` again. No paid video starts until ready. No download or
185
+ manual re-upload is required.
163
186
  Music submissions require a current price rule; stale catalog credit amounts are
164
187
  never sent as the price.
165
188
 
@@ -202,7 +225,7 @@ Recommended flow:
202
225
  - optional `upload_image` if you want to replace the effect's default image
203
226
  - `generate_effect`
204
227
  - `get_task_status`
205
- - `get_task_result` only after status is `completed`
228
+ - `get_task_result` after status is `completed`, `failed`, or `action_required`
206
229
 
207
230
  Parameters:
208
231
 
@@ -250,7 +273,7 @@ List the models Freebeat publishes right now. `type` is `image` (for `generate_i
250
273
 
251
274
  ### `get_model_help`
252
275
 
253
- Show what one image, image edit, or video model accepts and what it costs, read live from Freebeat. Parameters: `type` and `model_id`. The response has the model description, per-generation-type options (aspect ratios, resolutions, durations, and credits when Freebeat publishes them), and pricing rules: `keys` name the parameters that change the price and `prices` lists the allowed combinations.
276
+ Show what one image, image edit, or video model accepts and what it costs, read live from Freebeat. Parameters: `type` and `model_id`. The response has the model description, per-generation-type options (aspect ratios, resolutions, durations, and credits when Freebeat publishes them), and pricing rules: `keys` name the parameters that change the price and `prices` contains the rule body, with combination tables in `prices.map`. Numeric prices, formula/branch fields, variables, count multipliers, and duration settings follow the pricing protocol. Parameter definitions preserve code, component, data type, default, label, required flag, value domains, and conditions; dynamic parameter names and values are retained.
254
277
 
255
278
  ### `generate_image`
256
279
 
@@ -277,13 +300,13 @@ Freebeat validates the options per model; check `get_model_help` first and read
277
300
 
278
301
  ### `generate_text`
279
302
 
280
- Ask any text model from `list_models(type=text)` and get its reply. Parameters: `model`, `messages` (`role` and `content`, oldest first), optional `max_tokens` and `temperature`. Usage is billed to the user's Freebeat credits through the user's own gateway token.
303
+ Ask any text model from `list_models(type=text)` and get its reply. Parameters: `model`, `messages` (`role` and `content`, oldest first), optional `max_tokens` and `temperature`. Usage is billed to the user's Freebeat credits through the user's own gateway token. The response preserves numeric prompt/completion/total token counts and their defined numeric breakdowns, not arbitrary provider usage metadata.
281
304
 
282
305
  ### `get_task_status`
283
306
 
284
- Poll a Freebeat async task or Open RPC batch until it reaches a terminal status. Current MCP endpoints return lowercase status values such as `pending`, `completed`, and `failed`; older backends may still return uppercase variants.
307
+ Poll a Freebeat async task or Open RPC batch until it reaches a terminal status. Task types are mapped to the MCP task categories, with `unknown` for unrecognized types. Status values are normalized to the MCP status set, including lowercase `pending`, `completed`, and `failed`; unrecognized upstream values become `unknown`.
285
308
 
286
- For agent videos, effects, music, singing, and lip-sync tasks, continue polling while the status is still in progress. Agent videos may also report `action_required` with their own last message, any structured credit notice, and a `session_url` for reviewing and continuing. Only call `get_task_result` after the status is `completed`. If a task response cannot be read, `get_task_status` reports `unknown` and a viewing link; this is not a generation failure and must not trigger another paid submission.
309
+ For agent videos, effects, music, singing, and lip-sync tasks, continue polling while the status is still in progress. Agent videos may also report `action_required` with their own last message, any structured credit notice, and a `session_url` for reviewing and continuing. Call `get_task_result` after `completed`, `failed`, or `action_required`. If a task response cannot be read, `get_task_status` reports `unknown` and a viewing link; this is not a generation failure and must not trigger another paid submission.
287
310
 
288
311
  For Open RPC image/video batches, pass the returned `batch_id` as `task_id`. You can also pass `serial_no` to query a single batch item. Completed batch items include result URLs directly in `get_task_status`, so `get_task_result` is not used for Open RPC batches.
289
312
 
@@ -293,17 +316,16 @@ Returns a stable task envelope including:
293
316
  - `task_type`
294
317
  - `status`
295
318
  - `error_message` optional, present when backend reports a failed task
296
- - `error_code` optional, present when backend reports a failed task
297
319
  - `message` optional, present when status is `completed` or `failed`
298
320
  - `items` optional, present for Open RPC batches and containing `image_url`, `video_url`, or `edit_images` when available
299
321
 
300
322
  ### `get_task_result`
301
323
 
302
- Retrieve the output for a completed task. Only call this after `get_task_status` returns `completed`. The response uses a stable envelope with `task_id`, `task_type`, `status`, and `result`.
324
+ Retrieve the output for a completed task. Call after `get_task_status` returns `completed`, `failed`, or `action_required`. The response uses a stable envelope with `task_id`, `task_type`, `status`, and `billing`; completed tasks also include `result`.
303
325
 
304
- If the task is not completed yet, this tool returns error code `TASK_NOT_COMPLETED`.
326
+ If the task is pending or running, this tool returns error code `TASK_NOT_COMPLETED`.
305
327
 
306
- If the task has failed, this tool surfaces the backend failure as an error.
328
+ If the task failed or paused, this tool returns the same `failure` and `billing` contract as status, without requiring media output.
307
329
 
308
330
  For completed agent videos, `result` is an object containing:
309
331
 
@@ -314,3 +336,8 @@ Completed effect generation results use the same `result` object fields:
314
336
 
315
337
  - `video_url`
316
338
  - `cover_url`
339
+
340
+ Completed results return only the fields defined by the output schema: `video_url`,
341
+ `audio_url`, `cover_url`, `title`, `lyrics`, `duration_ms`, and `music_id`. Extra
342
+ upstream fields are excluded. Unmapped upstream error codes are not relayed; Open
343
+ RPC item code fields are `null`.
@@ -1,7 +1,7 @@
1
- import { maxCreditsSchema, creditQuoteSchema } from "../../../core/credit-approval.js";
1
+ import { acceptUnknownCostSchema, CREDIT_APPROVAL_DESCRIPTION, maxCreditsSchema, creditQuoteSchema } from "../../../core/credit-approval.js";
2
2
  import { z } from "zod";
3
3
  import { AGENT_PRODUCTS } from "../../../core/agent-products.js";
4
- import { formatToolError, jsonContent } from "../../../core/response.js";
4
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
5
5
  import { CREATE_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
6
6
  const AGENT_VIDEO_TOOLS = {
7
7
  music_video: {
@@ -12,7 +12,7 @@ const AGENT_VIDEO_TOOLS = {
12
12
  dance: {
13
13
  name: "generate_dance_video",
14
14
  title: "Generate dance video",
15
- description: "Use this for dance video generation: the user wants dancers performing to a song. Freebeat's dance video agent plans and generates a dance video timed to the song; people in optional photos become the dancers. Supports vertical 9:16 and 3:4 formats. Requires music_id from upload_audio or a completed generate_music result; optional photos via upload_image. Starts a generation job that uses the user's existing Freebeat credits and usually takes 15–60 minutes; by default it uses the first 15 seconds of the song, or up to the song's end if shorter. Returns task_id and session_url; poll get_task_status every few minutes, call get_task_result after completed; on action_required relay the message and session_url. Do not use for story-based music videos, lyric videos, short singing-photo clips, lip-sync of an existing clip, standalone video clips without a song, or generating audio.",
15
+ description: "Use this for dance video generation: the user wants dancers performing to a song. Freebeat's dance video agent plans and generates a dance video timed to the song; people in optional photos become the dancers. Supports vertical 9:16 and 3:4 formats. A 2026-10-27 production diagnosis found 855 credits for the video step alone of a 15-second 720p dance, with planning and images extra: budget on the order of 1,000 credits, not a fixed quote or cap. Requires music_id from upload_audio or a completed generate_music result; optional photos via upload_image. Starts a generation job that uses the user's existing Freebeat credits and usually takes 15–60 minutes; by default it uses the first 15 seconds of the song, or up to the song's end if shorter. Returns task_id and session_url; poll get_task_status every few minutes, call get_task_result after completed; on action_required relay the message and session_url. Do not use for story-based music videos, lyric videos, short singing-photo clips, lip-sync of an existing clip, standalone video clips without a song, or generating audio.",
16
16
  },
17
17
  lyric_video: {
18
18
  name: "generate_lyric_video",
@@ -23,13 +23,14 @@ const AGENT_VIDEO_TOOLS = {
23
23
  export function registerGenerateAgentVideoTools(server, client) {
24
24
  for (const product of Object.keys(AGENT_VIDEO_TOOLS)) {
25
25
  const tool = AGENT_VIDEO_TOOLS[product];
26
- server.registerTool(tool.name, {
27
- description: `Before spending credits, call quote_generation with this tool and its planned parameters, then tell the user the price or that it is unavailable. Set max_credits to the user-approved quote or ceiling. A higher or unknown price stops submission; never remove or raise the ceiling without approval. ${tool.description}`,
26
+ registerTool(server, tool.name, {
27
+ description: CREDIT_APPROVAL_DESCRIPTION + `Generated songs may return preparing with a numeric music_id and retry_after_seconds instead of a task_id. Retry with that music_id and unchanged approved parameters; no paid video starts before readiness. ${tool.description}`,
28
28
  annotations: { title: tool.title, ...CREATE_TOOL_ANNOTATIONS },
29
29
  inputSchema: {
30
30
  max_credits: maxCreditsSchema,
31
+ accept_unknown_cost: acceptUnknownCostSchema,
31
32
  music_id: z.union([z.number().int().positive(), z.string().regex(/^music:.+/)])
32
- .describe("An analyzed music_id from upload_audio, or result.music_id from a completed generate_music task. Generated songs are prepared automatically; no manual upload is needed."),
33
+ .describe("An analyzed music_id from upload_audio, or result.music_id from a completed generate_music task. Generated songs are prepared automatically. On preparing, reuse the returned numeric music_id in the same tool after retry_after_seconds; no paid video has started."),
33
34
  prompt: z
34
35
  .string()
35
36
  .trim()
@@ -71,20 +72,24 @@ export function registerGenerateAgentVideoTools(server, client) {
71
72
  outputSchema: {
72
73
  quote: creditQuoteSchema.optional(),
73
74
  success: z.literal(true),
75
+ music_id: z.number().optional().describe("Prepared audio asset to reuse on a preparing response."),
76
+ retry_after_seconds: z.number().optional(),
74
77
  task_id: z
75
- .string()
78
+ .string().optional()
76
79
  .describe("The scoped task ID for get_task_status and get_task_result."),
77
- task_type: z.string().describe("The task category."),
80
+ task_type: z.string().optional().describe("The task category."),
78
81
  status: z.string().describe("The initial task status, typically pending."),
79
82
  session_url: z
80
- .string()
83
+ .string().optional()
81
84
  .describe("The freebeat.ai page where the user can watch, review, or continue this session."),
82
85
  message: z.string().describe("What to do next."),
83
86
  },
84
87
  }, async (params) => {
85
88
  try {
86
89
  const result = await client.createAgentVideo({ ...params, product });
87
- return jsonContent({
90
+ if ("music_id" in result)
91
+ return toolResult({ success: true, ...result });
92
+ return toolResult({
88
93
  success: true,
89
94
  quote: result.quote,
90
95
  task_id: result.task_id,
@@ -1 +1 @@
1
- {"version":3,"file":"generate-agent-videos.js","sourceRoot":"","sources":["../../../../src/capabilities/agents/tools/generate-agent-videos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-agent-videos.js","sourceRoot":"","sources":["../../../../src/capabilities/agents/tools/generate-agent-videos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE7I,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAqB,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG5E,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE;QACX,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,q2BAAq2B;KACx2B;IACD,KAAK,EAAE;QACL,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,ikCAAikC;KACpkC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,szBAAszB;KACzzB;CACO,CAAC;AAEX,MAAM,UAAU,+BAA+B,CAC7C,MAAiB,EACjB,MAAmD;IAEnD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAmB,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACxC,YAAY,CAAC,MAAM,EACjB,IAAI,CAAC,IAAI,EACT;YACE,WAAW,EAAE,2BAA2B,GAAG,iNAAiN,IAAI,CAAC,WAAW,EAAE;YAC9Q,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,uBAAuB,EAAE;YAC9D,WAAW,EAAE;gBACX,WAAW,EAAE,gBAAgB;gBAC7B,mBAAmB,EAAE,uBAAuB;gBAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC5E,QAAQ,CAAC,uQAAuQ,CAAC;gBACpR,MAAM,EAAE,CAAC;qBACN,MAAM,EAAE;qBACR,IAAI,EAAE;qBACN,GAAG,CAAC,IAAI,CAAC;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,wFAAwF,CAAC;gBACrG,QAAQ,EAAE,CAAC;qBACR,MAAM,EAAE;qBACR,GAAG,EAAE;qBACL,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,EAAE;qBACV,QAAQ,CAAC,0DAA0D,CAAC;gBACvE,MAAM,EAAE,CAAC;qBACN,MAAM,EAAE;qBACR,GAAG,EAAE;qBACL,QAAQ,EAAE;qBACV,QAAQ,EAAE;qBACV,QAAQ,CACP,6JAA6J,CAC9J;gBACH,YAAY,EAAE,CAAC;qBACZ,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;qBAC3C,OAAO,CAAC,MAAM,CAAC;qBACf,QAAQ,CAAC,sBAAsB,CAAC;gBACnC,UAAU,EAAE,CAAC;qBACV,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC;qBACzC,QAAQ,EAAE;qBACV,QAAQ,CACP,kCAAkC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAC5E;gBACH,UAAU,EAAE,CAAC;qBACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;qBACvB,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,EAAE;qBACV,QAAQ,CAAC,OAAO,KAAK,OAAO;oBAC3B,CAAC,CAAC,kEAAkE;oBACpE,CAAC,CAAC,kDAAkD,CAAC;gBACzD,gBAAgB,EAAE,CAAC;qBAChB,OAAO,EAAE;qBACT,OAAO,CAAC,KAAK,CAAC;qBACd,QAAQ,CAAC,yDAAyD,CAAC;aACvE;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;gBAClG,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC1C,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE,CAAC,QAAQ,EAAE;qBACnB,QAAQ,CAAC,6DAA6D,CAAC;gBAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;gBAC1E,WAAW,EAAE,CAAC;qBACX,MAAM,EAAE,CAAC,QAAQ,EAAE;qBACnB,QAAQ,CAAC,kFAAkF,CAAC;gBAC/F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aACjD;SACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrE,IAAI,UAAU,IAAI,MAAM;oBAAE,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;gBAC1E,OAAO,UAAU,CAAC;oBAChB,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EACL,mKAAmK;iBACtK,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;AAEH,CAAC"}
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import { AppError } from "../../../core/errors.js";
3
3
  import { validateSupportedMusicSourceUrl } from "../../../core/music-source-url.js";
4
4
  import { openAiFileSchema } from "../../../core/openai-file.js";
5
- import { formatToolError, jsonContent } from "../../../core/response.js";
5
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
6
6
  import { CREATE_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
7
7
  import { downloadRemoteMedia, removeRemoteMedia, } from "../../../services/remote-media.js";
8
8
  import { UploadService } from "../../../services/upload-service.js";
@@ -20,7 +20,7 @@ const REMOTE_AUDIO_TYPES = {
20
20
  const MAX_AUDIO_BYTES = 50 * 1024 * 1024;
21
21
  export function registerUploadAudioTool(server, client, allowLocalFiles = true) {
22
22
  const uploadService = new UploadService(client);
23
- server.registerTool("upload_audio", {
23
+ registerTool(server, "upload_audio", {
24
24
  description: "Use this when the user needs to upload an attached audio file, upload a local audio file in stdio mode, or import from a supported music URL. Supported platforms: SoundCloud, YouTube, Suno, Udio, TikTok, Stable Audio, and Riffusion. Provide exactly one of file, file_path, or url. Returns music_id for generate_music_video, generate_dance_video, generate_lyric_video and other audio workflows. Does not generate audio or video.",
25
25
  annotations: { title: "Upload audio", ...CREATE_TOOL_ANNOTATIONS },
26
26
  _meta: { "openai/fileParams": ["file"] },
@@ -84,7 +84,7 @@ export function registerUploadAudioTool(server, client, allowLocalFiles = true)
84
84
  validateSupportedMusicSourceUrl(url);
85
85
  musicId = await client.saveMusicSource(url);
86
86
  }
87
- return jsonContent({
87
+ return toolResult({
88
88
  success: true,
89
89
  music_id: musicId,
90
90
  message: `Audio source ready. Use music_id=${musicId} with ` +
@@ -1 +1 @@
1
- {"version":3,"file":"upload-audio.js","sourceRoot":"","sources":["../../../../src/capabilities/assets/tools/upload-audio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-audio.js","sourceRoot":"","sources":["../../../../src/capabilities/assets/tools/upload-audio.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { AppError } from "../../../core/errors.js";
3
3
  import { openAiFileSchema } from "../../../core/openai-file.js";
4
- import { formatToolError, jsonContent } from "../../../core/response.js";
4
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
5
5
  import { CREATE_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
6
6
  import { downloadRemoteMedia, removeRemoteMedia, } from "../../../services/remote-media.js";
7
7
  import { UploadService } from "../../../services/upload-service.js";
@@ -13,7 +13,7 @@ const REMOTE_IMAGE_TYPES = {
13
13
  const MAX_IMAGE_BYTES = 10 * 1024 * 1024;
14
14
  export function registerUploadImageTool(server, client, allowLocalFiles = true) {
15
15
  const uploadService = new UploadService(client);
16
- server.registerTool("upload_image", {
16
+ registerTool(server, "upload_image", {
17
17
  description: "Use this when the user needs to upload one or two image files (PNG/JPG/JPEG, max 10MB each) for Freebeat workflows. Use returned image_urls with generate_music_video, generate_dance_video, or generate_lyric_video for song-driven videos, or pass a single uploaded image URL to generate_effect.reference_image_urls to replace the default list_effects.image_url. Does not generate or edit images.",
18
18
  annotations: { title: "Upload images", ...CREATE_TOOL_ANNOTATIONS },
19
19
  _meta: { "openai/fileParams": ["files"] },
@@ -93,7 +93,7 @@ export function registerUploadImageTool(server, client, allowLocalFiles = true)
93
93
  throw error;
94
94
  }
95
95
  }
96
- return jsonContent({
96
+ return toolResult({
97
97
  success: true,
98
98
  image_urls: imageUrls,
99
99
  message: `Uploaded ${imageUrls.length} image(s). Use image_urls with ` +
@@ -1 +1 @@
1
- {"version":3,"file":"upload-image.js","sourceRoot":"","sources":["../../../../src/capabilities/assets/tools/upload-image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-image.js","sourceRoot":"","sources":["../../../../src/capabilities/assets/tools/upload-image.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { AppError } from "../../../core/errors.js";
3
3
  import { openAiFileSchema } from "../../../core/openai-file.js";
4
- import { formatToolError, jsonContent } from "../../../core/response.js";
4
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
5
5
  import { CREATE_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
6
6
  import { downloadRemoteMedia, removeRemoteMedia, } from "../../../services/remote-media.js";
7
7
  import { UploadService } from "../../../services/upload-service.js";
@@ -14,7 +14,7 @@ const REMOTE_VIDEO_TYPES = {
14
14
  const MAX_VIDEO_BYTES = 100 * 1024 * 1024;
15
15
  export function registerUploadVideoTool(server, client, allowLocalFiles = true) {
16
16
  const uploadService = new UploadService(client);
17
- server.registerTool("upload_video", {
17
+ registerTool(server, "upload_video", {
18
18
  description: allowLocalFiles
19
19
  ? "Use this when the user needs to upload an MP4, MOV, or WebM video for a Freebeat lip-sync workflow from an attachment, local file path, or public HTTPS url. Provide exactly one of file, file_path, or url. Returns a video_url for generate_lip_sync_video. Does not generate a new clip. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video."
20
20
  : "Use this when the user needs to upload an MP4, MOV, or WebM video for a Freebeat lip-sync workflow from an attachment or public HTTPS url. Returns a video_url for generate_lip_sync_video. Does not generate a new clip. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video.",
@@ -61,7 +61,7 @@ export function registerUploadVideoTool(server, client, allowLocalFiles = true)
61
61
  keyPrefix: "agent/video",
62
62
  contentType: detectVideoMimeType(localPath),
63
63
  });
64
- return jsonContent({
64
+ return toolResult({
65
65
  success: true,
66
66
  video_url: videoUrl,
67
67
  message: "Video uploaded. Pass video_url and the clip duration to generate_lip_sync_video.",
@@ -1 +1 @@
1
- {"version":3,"file":"upload-video.js","sourceRoot":"","sources":["../../../../src/capabilities/assets/tools/upload-video.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-video.js","sourceRoot":"","sources":["../../../../src/capabilities/assets/tools/upload-video.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,24 @@
1
+ import { CREDIT_APPROVAL_DESCRIPTION } from "../../core/credit-approval.js";
1
2
  import { z } from "zod";
2
3
  import { PAID_TOOLS } from "../../core/paid-tools.js";
3
- import { formatToolError, jsonContent } from "../../core/response.js";
4
+ import { formatToolError, toolResult, registerTool } from "../../core/response.js";
4
5
  import { READ_ONLY_TOOL_ANNOTATIONS } from "../../core/tool-annotations.js";
5
6
  export function registerCreditTools(server, client) {
6
- server.registerTool("get_credit_balance", {
7
+ registerTool(server, "get_credit_balance", {
7
8
  description: "Read the signed-in Freebeat account's available credit balance. Does not charge credits or start generation.",
8
9
  annotations: { title: "Get credit balance", ...READ_ONLY_TOOL_ANNOTATIONS },
9
10
  inputSchema: {},
10
11
  outputSchema: { credits: z.number().describe("Available Freebeat credits.") },
11
12
  }, async () => {
12
13
  try {
13
- return jsonContent(await client.getCreditBalance());
14
+ return toolResult(await client.getCreditBalance());
14
15
  }
15
16
  catch (error) {
16
17
  return formatToolError(error);
17
18
  }
18
19
  });
19
- server.registerTool("quote_generation", {
20
- description: "Call before any paid generation and tell the user the returned price or that it is unavailable. After user approval, pass the quoted credits as max_credits on the paid tool. If a ceiling was set, never omit or raise it to bypass a refusal. Supply the intended tool and its planned input parameters. Reads current Freebeat pricing rules, without starting or charging for generation. Quoted credits are list price before account discounts or allowances. Unavailable means unknown, never free; agent totals depend on stages and retries. For music, check list_music_models for length control before quoting.",
20
+ registerTool(server, "quote_generation", {
21
+ description: CREDIT_APPROVAL_DESCRIPTION + "Supply the intended tool and its planned input parameters. Reads current Freebeat pricing rules, without starting or charging for generation. Quoted credits are list price before account discounts or allowances. Unavailable means unknown, never free; agent totals depend on stages and retries. For music, check list_music_models for length control before quoting.",
21
22
  annotations: { title: "Quote generation", ...READ_ONLY_TOOL_ANNOTATIONS },
22
23
  inputSchema: {
23
24
  tool: z.enum(PAID_TOOLS).describe("The paid tool to quote."),
@@ -31,7 +32,7 @@ export function registerCreditTools(server, client) {
31
32
  },
32
33
  }, async ({ tool, parameters }) => {
33
34
  try {
34
- return jsonContent(await client.quoteGeneration(tool, parameters));
35
+ return toolResult(await client.quoteGeneration(tool, parameters));
35
36
  }
36
37
  catch (error) {
37
38
  return formatToolError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/capabilities/credits/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAuE;IAC5H,MAAM,CAAC,YAAY,CAAC,oBAAoB,EAAE;QACxC,WAAW,EAAE,8GAA8G;QAC3H,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,0BAA0B,EAAE;QAC3E,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE;KAC9E,EAAE,KAAK,IAAI,EAAE;QACZ,IAAI,CAAC;YAAC,OAAO,WAAW,CAAC,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAAC,CAAC;QAC5D,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;QACtC,WAAW,EAAE,6lBAA6lB;QAC1mB,WAAW,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,0BAA0B,EAAE;QACzE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,+HAA+H,CAAC;SAC5K;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB;KACF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YAAC,OAAO,WAAW,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAAC,CAAC;QAC3E,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/capabilities/credits/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAuE;IAC5H,YAAY,CAAC,MAAM,EAAC,oBAAoB,EAAE;QACxC,WAAW,EAAE,8GAA8G;QAC3H,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,0BAA0B,EAAE;QAC3E,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE;KAC9E,EAAE,KAAK,IAAI,EAAE;QACZ,IAAI,CAAC;YAAC,OAAO,UAAU,CAAC,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAAC,CAAC;QAC3D,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,MAAM,EAAC,kBAAkB,EAAE;QACtC,WAAW,EAAE,2BAA2B,GAAG,6WAA6W;QACxZ,WAAW,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,0BAA0B,EAAE;QACzE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,+HAA+H,CAAC;SAC5K;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB;KACF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YAAC,OAAO,UAAU,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAAC,CAAC;QAC1E,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,12 +1,12 @@
1
- import { maxCreditsSchema, creditQuoteSchema } from "../../../core/credit-approval.js";
1
+ import { acceptUnknownCostSchema, CREDIT_APPROVAL_DESCRIPTION, maxCreditsSchema, creditQuoteSchema } from "../../../core/credit-approval.js";
2
2
  import { z } from "zod";
3
3
  import { AppError } from "../../../core/errors.js";
4
4
  import { normalizeGenerationPrompt } from "../../../core/prompt.js";
5
- import { formatToolError, jsonContent } from "../../../core/response.js";
5
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
6
6
  import { CREATE_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
7
7
  export function registerGenerateEffectTool(server, client) {
8
- server.registerTool("generate_effect", {
9
- description: "Before spending credits, call quote_generation with this tool and its planned parameters, then tell the user the price or that it is unavailable. Set max_credits to the user-approved quote or ceiling. A higher or unknown price stops submission; never remove or raise the ceiling without approval. Use this when the user wants an effect-template video from a music_id and exactly one reference image URL. Flow: list_effects -> optional upload_audio -> optional upload_image -> generate_effect -> get_task_status -> get_task_result. By default, use list_effects.image_url. You can also use a single uploaded image URL from upload_image. Only call get_task_result after get_task_status returns completed. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video.",
8
+ registerTool(server, "generate_effect", {
9
+ description: CREDIT_APPROVAL_DESCRIPTION + "Use this when the user wants an effect-template video from a music_id and exactly one reference image URL. Flow: list_effects -> optional upload_audio -> optional upload_image -> generate_effect -> get_task_status -> get_task_result. By default, use list_effects.image_url. You can also use a single uploaded image URL from upload_image. Call get_task_result after get_task_status returns completed, failed, or action_required; failure and billing remain available without final media. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video.",
10
10
  annotations: { title: "Generate effect", ...CREATE_TOOL_ANNOTATIONS },
11
11
  outputSchema: {
12
12
  quote: creditQuoteSchema.optional(),
@@ -28,6 +28,7 @@ export function registerGenerateEffectTool(server, client) {
28
28
  },
29
29
  inputSchema: {
30
30
  max_credits: maxCreditsSchema,
31
+ accept_unknown_cost: acceptUnknownCostSchema,
31
32
  effect_id: z.number().int().describe("Effect ID returned by list_effects."),
32
33
  music_id: z
33
34
  .number()
@@ -51,7 +52,7 @@ export function registerGenerateEffectTool(server, client) {
51
52
  .length(1, "reference_image_urls must contain exactly one image URL")
52
53
  .describe("Exactly one image URL. Recommended: use list_effects.image_url. You may also use a single uploaded image URL from upload_image."),
53
54
  },
54
- }, async ({ max_credits, effect_id, music_id, prompt, watermark, reference_image_urls, }) => {
55
+ }, async ({ accept_unknown_cost, max_credits, effect_id, music_id, prompt, watermark, reference_image_urls, }) => {
55
56
  try {
56
57
  const normalizedPrompt = normalizeGenerationPrompt(prompt);
57
58
  if (!Number.isInteger(effect_id)) {
@@ -64,6 +65,7 @@ export function registerGenerateEffectTool(server, client) {
64
65
  return formatToolError(new AppError("reference_image_urls must contain exactly one image URL", "INVALID_PARAMS"));
65
66
  }
66
67
  const result = await client.generateEffect({
68
+ accept_unknown_cost,
67
69
  max_credits,
68
70
  effect_id,
69
71
  music_id,
@@ -71,7 +73,7 @@ export function registerGenerateEffectTool(server, client) {
71
73
  watermark: watermark ?? false,
72
74
  reference_image_urls,
73
75
  });
74
- return jsonContent({
76
+ return toolResult({
75
77
  success: true,
76
78
  quote: result.quote,
77
79
  task_id: result.task_id,
@@ -1 +1 @@
1
- {"version":3,"file":"generate-effect.js","sourceRoot":"","sources":["../../../../src/capabilities/effects/tools/generate-effect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-effect.js","sourceRoot":"","sources":["../../../../src/capabilities/effects/tools/generate-effect.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { formatToolError, jsonContent } from "../../../core/response.js";
2
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
3
3
  import { READ_ONLY_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
4
4
  function normalizeEffect(effect) {
5
5
  return {
@@ -13,7 +13,7 @@ function normalizeEffect(effect) {
13
13
  };
14
14
  }
15
15
  export function registerListEffectsTool(server, client) {
16
- server.registerTool("list_effects", {
16
+ registerTool(server, "list_effects", {
17
17
  description: "Use this when the user wants effect templates and the metadata needed to select an effect and create an effect task. Each effect includes a default image_url and default_music_id you can use directly. This lists templates rather than generating a video. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video.",
18
18
  annotations: { title: "List effects", ...READ_ONLY_TOOL_ANNOTATIONS },
19
19
  outputSchema: {
@@ -43,7 +43,7 @@ export function registerListEffectsTool(server, client) {
43
43
  }, async () => {
44
44
  try {
45
45
  const effects = await client.listEffects();
46
- return jsonContent({
46
+ return toolResult({
47
47
  success: true,
48
48
  effects: effects.map(normalizeEffect),
49
49
  message: `Retrieved ${effects.length} effect(s).`,
@@ -1 +1 @@
1
- {"version":3,"file":"list-effects.js","sourceRoot":"","sources":["../../../../src/capabilities/effects/tools/list-effects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,aAAa;QAC/B,YAAY,EAAE,MAAM,CAAC,kBAAkB;QACvC,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,iBAAiB,EAAE,MAAM,CAAC,QAAQ;QAClC,gBAAgB,EAAE,MAAM,CAAC,OAAO;QAChC,kBAAkB,EAAE,MAAM,CAAC,SAAS;QACpC,YAAY,EAAE,MAAM,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,MAA8C;IAE9C,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,uXAAuX;QACzX,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,0BAA0B,EAAE;QACrE,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC;iBACP,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,sDAAsD,CAAC;YACnE,OAAO,EAAE,CAAC;iBACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;gBAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAChE,SAAS,EAAE,CAAC;qBACT,MAAM,EAAE;qBACR,QAAQ,CAAC,kJAAkJ,CAAC;gBAC/J,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;gBAC3E,gBAAgB,EAAE,CAAC;qBAChB,MAAM,EAAE;qBACR,QAAQ,CAAC,uDAAuD,CAAC;gBACpE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBACtE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;aAC3D,CAAC,CACH;iBACA,QAAQ,CAAC,sEAAsE,CAAC;YACnF,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CAAC,oDAAoD,CAAC;SAClE;QACD,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAE3C,OAAO,WAAW,CAAC;gBACjB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBACrC,OAAO,EAAE,aAAa,OAAO,CAAC,MAAM,aAAa;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list-effects.js","sourceRoot":"","sources":["../../../../src/capabilities/effects/tools/list-effects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,aAAa;QAC/B,YAAY,EAAE,MAAM,CAAC,kBAAkB;QACvC,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,iBAAiB,EAAE,MAAM,CAAC,QAAQ;QAClC,gBAAgB,EAAE,MAAM,CAAC,OAAO;QAChC,kBAAkB,EAAE,MAAM,CAAC,SAAS;QACpC,YAAY,EAAE,MAAM,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,MAA8C;IAE9C,YAAY,CAAC,MAAM,EACjB,cAAc,EACd;QACE,WAAW,EACT,uXAAuX;QACzX,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,0BAA0B,EAAE;QACrE,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC;iBACP,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,sDAAsD,CAAC;YACnE,OAAO,EAAE,CAAC;iBACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;gBAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAChE,SAAS,EAAE,CAAC;qBACT,MAAM,EAAE;qBACR,QAAQ,CAAC,kJAAkJ,CAAC;gBAC/J,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;gBAC3E,gBAAgB,EAAE,CAAC;qBAChB,MAAM,EAAE;qBACR,QAAQ,CAAC,uDAAuD,CAAC;gBACpE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBACtE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;aAC3D,CAAC,CACH;iBACA,QAAQ,CAAC,sEAAsE,CAAC;YACnF,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CAAC,oDAAoD,CAAC;SAClE;QACD,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAE3C,OAAO,UAAU,CAAC;gBAChB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBACrC,OAAO,EAAE,aAAa,OAAO,CAAC,MAAM,aAAa;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,17 +1,18 @@
1
- import { maxCreditsSchema } from "../../../core/credit-approval.js";
1
+ import { acceptUnknownCostSchema, CREDIT_APPROVAL_DESCRIPTION, maxCreditsSchema } from "../../../core/credit-approval.js";
2
2
  import { z } from "zod";
3
3
  import { buildImageRequest } from "../../../services/generation-requests.js";
4
- import { formatToolError, jsonContent } from "../../../core/response.js";
4
+ import { formatToolError, toolResult, registerTool } from "../../../core/response.js";
5
5
  import { CREATE_TOOL_ANNOTATIONS } from "../../../core/tool-annotations.js";
6
6
  import { imageOptionsSchema } from "./generate-image.js";
7
7
  import { batchCreateOutputSchema, normalizeBatchCreate } from "./shared.js";
8
8
  export function registerEditImageTool(server, client) {
9
- server.registerTool("edit_image", {
10
- description: "Before spending credits, call quote_generation with this tool and its planned parameters, then tell the user the price or that it is unavailable. Set max_credits to the user-approved quote or ceiling. A higher or unknown price stops submission; never remove or raise the ceiling without approval. Use this when the user wants to edit one existing image with a text instruction. Upload the image with upload_image first. Flow: list_models(type=image_edit) -> get_model_help -> edit_image -> get_task_status with the returned batch_id. For a new image without a source, use generate_image. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video.",
9
+ registerTool(server, "edit_image", {
10
+ description: CREDIT_APPROVAL_DESCRIPTION + "Use this when the user wants to edit one existing image with a text instruction. Upload the image with upload_image first. Flow: list_models(type=image_edit) -> get_model_help -> edit_image -> get_task_status with the returned batch_id. For a new image without a source, use generate_image. For song-driven music, dance, or lyric videos, use generate_music_video, generate_dance_video, or generate_lyric_video.",
11
11
  annotations: { title: "Edit image", ...CREATE_TOOL_ANNOTATIONS },
12
12
  outputSchema: batchCreateOutputSchema,
13
13
  inputSchema: {
14
14
  max_credits: maxCreditsSchema,
15
+ accept_unknown_cost: acceptUnknownCostSchema,
15
16
  model_id: z.number().int().positive().describe("model_id from list_models(type=image_edit)."),
16
17
  image: z.string().url().describe("Image URL to edit, usually from upload_image."),
17
18
  prompt: z
@@ -26,9 +27,10 @@ export function registerEditImageTool(server, client) {
26
27
  try {
27
28
  const response = await client.createImageBatch({
28
29
  max_credits: params.max_credits,
30
+ accept_unknown_cost: params.accept_unknown_cost,
29
31
  items: [buildImageRequest(params, true)],
30
32
  });
31
- return jsonContent(normalizeBatchCreate(response, "Image edit"));
33
+ return toolResult(normalizeBatchCreate(response, "Image edit"));
32
34
  }
33
35
  catch (error) {
34
36
  return formatToolError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"edit-image.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/edit-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,MAAmD;IAEnD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EACT,qsBAAqsB;QACvsB,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,uBAAuB,EAAE;QAChE,YAAY,EAAE,uBAAuB;QACrC,WAAW,EAAE;YACX,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAC7F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YACjF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,EAAE,6CAA6C,CAAC;iBACrD,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC;iBAClE,QAAQ,CAAC,oBAAoB,CAAC;YACjC,GAAG,kBAAkB;SACtB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;gBAC7C,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aACzC,CAAC,CAAC;YAEH,OAAO,WAAW,CAAC,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"edit-image.js","sourceRoot":"","sources":["../../../../src/capabilities/media/tools/edit-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAE1H,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,MAAmD;IAEnD,YAAY,CAAC,MAAM,EACjB,YAAY,EACZ;QACE,WAAW,EACT,2BAA2B,GAAG,4ZAA4Z;QAC5b,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,uBAAuB,EAAE;QAChE,YAAY,EAAE,uBAAuB;QACrC,WAAW,EAAE;YACX,WAAW,EAAE,gBAAgB;YAC7B,mBAAmB,EAAE,uBAAuB;YAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAC7F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YACjF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,EAAE,6CAA6C,CAAC;iBACrD,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC;iBAClE,QAAQ,CAAC,oBAAoB,CAAC;YACjC,GAAG,kBAAkB;SACtB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;gBAC7C,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,KAAK,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aACzC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}