@jambonz/schema 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jambonz/schema",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "JSON Schema definitions and validation for jambonz verb applications",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -279,6 +279,13 @@
279
279
  "required": ["url"]
280
280
  },
281
281
  "description": "External MCP servers that provide tools to the LLM. The agent connects at startup via SSE, discovers available tools, and makes them callable by the LLM."
282
+ },
283
+ "toolFiller": {
284
+ "oneOf": [
285
+ { "type": "boolean", "const": false },
286
+ { "$ref": "#/$defs/toolFillerConfig" }
287
+ ],
288
+ "description": "Configuration for playing filler audio while tool calls are in progress. Prevents silence during long-running tool executions."
282
289
  }
283
290
  },
284
291
  "required": [
@@ -297,6 +304,44 @@
297
304
  "content": {}
298
305
  },
299
306
  "additionalProperties": true
307
+ },
308
+ "toolFillerConfig": {
309
+ "type": "object",
310
+ "required": ["type"],
311
+ "properties": {
312
+ "type": {
313
+ "type": "string",
314
+ "enum": ["audio", "backchannel"],
315
+ "description": "Filler mode. 'audio' plays a looping audio file (killed immediately when tool returns). 'backchannel' uses TTS to speak short phrases like 'one moment...' or 'checking that...' (allowed to complete before next action)."
316
+ },
317
+ "startDelaySecs": {
318
+ "type": "number",
319
+ "minimum": 0,
320
+ "description": "Seconds to wait after tool invocation before playing filler. Prevents filler on fast tools. Default: 2",
321
+ "default": 2
322
+ },
323
+ "url": {
324
+ "type": "string",
325
+ "format": "uri",
326
+ "description": "Audio file URL (for type='audio'). Should be loopable. Playback stops immediately when tool returns."
327
+ },
328
+ "style": {
329
+ "type": "string",
330
+ "description": "Free-form style hint for LLM-generated phrases (for type='backchannel'). Examples: 'casual', 'professional', 'friendly and patient'. The LLM interprets this when generating filler phrases at call start."
331
+ },
332
+ "escalationSecs": {
333
+ "type": "number",
334
+ "minimum": 0,
335
+ "description": "Seconds from tool invocation before generating a longer explanatory response (for type='backchannel'). Useful for tools that may take 10+ seconds. Default: 10",
336
+ "default": 10
337
+ }
338
+ },
339
+ "allOf": [
340
+ {
341
+ "if": { "properties": { "type": { "const": "audio" } } },
342
+ "then": { "required": ["url"] }
343
+ }
344
+ ]
300
345
  }
301
346
  },
302
347
  "examples": [