@talqing/mcp 0.3.1 → 0.3.3
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/SKILL.md +150 -50
- package/package.json +2 -2
- package/tools.json +103 -5
package/SKILL.md
CHANGED
|
@@ -161,6 +161,35 @@ An agent is a single object, `config`, plus what you attach to it:
|
|
|
161
161
|
not this list. As with `tools`, an entry may instead carry `{"mcp": {name,
|
|
162
162
|
url, headers, allowed_tools, tools_namespace}}`, which is created as a
|
|
163
163
|
`custom_mcp` integration and replaced by its id.
|
|
164
|
+
- **`tasks`** — jobs this agent can enter and come back from, each
|
|
165
|
+
`{"name": "collect_shipping_address", "task_id": "...", "description": "...",
|
|
166
|
+
"message": "..."}`. Each becomes one ordinary tool the model can call: the
|
|
167
|
+
task takes over the conversation, speaks with THIS agent's voice and ears,
|
|
168
|
+
and hands its typed `output` back as the tool's result. Use one for a bounded
|
|
169
|
+
job inside a longer call — taking an address, qualifying a lead — and a
|
|
170
|
+
`handoffs` entry when the caller should belong to someone else from then on.
|
|
171
|
+
|
|
172
|
+
`name` is yours, not the task's, so renaming the task never changes the tool
|
|
173
|
+
name a published prompt was written against. The task must be **published**;
|
|
174
|
+
publishing the agent pins the version. An entry may instead carry `{"task":
|
|
175
|
+
{...whole TaskConfig...}}`, which on the agent endpoints is created and
|
|
176
|
+
published as a real task, exactly as an inline tool is.
|
|
177
|
+
|
|
178
|
+
**The task's `vars` are this tool's schema, minus every variable the call can
|
|
179
|
+
answer for itself** — every name the CALLING AGENT declares, plus every name
|
|
180
|
+
the session was started with. Those are filled in automatically and never
|
|
181
|
+
shown to the model, a declared-but-blank one included. So a task declaring
|
|
182
|
+
`customer_id` on an agent declaring `customer_id` shows the model nothing to
|
|
183
|
+
invent. Anything left over becomes a model argument, which is why a task
|
|
184
|
+
should declare only what the caller or the model must supply: a value already
|
|
185
|
+
in `{{userdata.*}}` belongs in the task's prompt, not in its `vars`.
|
|
186
|
+
Publishing warns on the bad shape.
|
|
187
|
+
|
|
188
|
+
A task inherits the call's whole media stack, so one task fits every agent and
|
|
189
|
+
every channel. It cannot contain a `handoff` (publish refuses it), the calling
|
|
190
|
+
agent's own tools are NOT available while it holds the floor, and
|
|
191
|
+
`timeout_seconds` on the task is the only bound on how long it may hold the
|
|
192
|
+
caller.
|
|
164
193
|
- **`handoffs`** — where this agent may pass the conversation next, each
|
|
165
194
|
`{"name": "Billing", "agent_id": "...", "description": "...", "context":
|
|
166
195
|
"transcript" | "summary" | "none", "recent_turns": 2, "summary_prompt": "...",
|
|
@@ -180,6 +209,10 @@ An agent is a single object, `config`, plus what you attach to it:
|
|
|
180
209
|
Leaving it out resolves `name` against the team defined on the call that runs
|
|
181
210
|
the agent, which publishes with a warning rather than an error.
|
|
182
211
|
|
|
212
|
+
One model cannot be handed off from at all: `openai/gpt-live-1` refuses new
|
|
213
|
+
instructions once a call is connected, so an agent with both that realtime
|
|
214
|
+
model and a handoff destination is refused on save. Every other model is fine.
|
|
215
|
+
|
|
183
216
|
**`context` is what the next agent starts from** — the same three words an
|
|
184
217
|
agent's own `conversation.context` uses for what a new *call* starts from.
|
|
185
218
|
|
|
@@ -293,10 +326,11 @@ voice. Read it before choosing; do not assume a model exists.
|
|
|
293
326
|
People can attach a photo to a web chat, a web voice call or a web video call,
|
|
294
327
|
and the agent sees it. **There is no setting for this** — whether an agent can
|
|
295
328
|
read images is decided by the model it runs, and `vision` on that model's catalog
|
|
296
|
-
entry is where it says so.
|
|
297
|
-
`
|
|
298
|
-
sent a photo at all. If a
|
|
299
|
-
|
|
329
|
+
entry is where it says so. Most entries read images; `gemini-3.8-flash`,
|
|
330
|
+
`gemini-3.7-flash`, `openai/gpt-live-1` and the two `grok-voice-*` realtime
|
|
331
|
+
entries do not, and an agent on one of them cannot be sent a photo at all. If a
|
|
332
|
+
user wants image input, check `vision` before picking the model rather than
|
|
333
|
+
changing anything on the agent.
|
|
300
334
|
|
|
301
335
|
A phone call carries no files, so this is web only.
|
|
302
336
|
|
|
@@ -476,7 +510,7 @@ do not promise the user one — change the models or the language instead:
|
|
|
476
510
|
Saaras endpoint on their own schedule and ignore that window entirely, so on
|
|
477
511
|
those two the setting is a floor.
|
|
478
512
|
- **Batch speech-to-text** (`streaming: false` — xAI `xai-stt-batch`, ElevenLabs
|
|
479
|
-
`scribe_v2`, OpenAI `gpt-
|
|
513
|
+
`scribe_v2`, OpenAI `gpt-transcribe`) → it has no endpointer at all, so
|
|
480
514
|
LiveKit's audio end-of-turn model takes over when `config.language` is one of
|
|
481
515
|
the fourteen it was trained on: Arabic, Chinese, Dutch, English, French,
|
|
482
516
|
German, Hindi, Indonesian, Italian, Japanese, Korean, Portuguese, Spanish,
|
|
@@ -520,8 +554,13 @@ A tool is one capability the agent's LLM can call mid-conversation. It has:
|
|
|
520
554
|
to get it out of the conversation, and a bare `{"type": "string"}` is how a
|
|
521
555
|
tool ends up called with the wrong value. Mark the ones the tool cannot run
|
|
522
556
|
without as `required`, and use an `enum` wherever the set of values is closed.
|
|
523
|
-
- **`long_running_task`** — voice and video agents keep talking while it runs
|
|
524
|
-
|
|
557
|
+
- **`long_running_task`** — voice and video agents keep talking while it runs and
|
|
558
|
+
share the result when it lands; a run finishing within a second answers inline
|
|
559
|
+
instead. Text agents wait either way. There is no fixed line — steer it from
|
|
560
|
+
the description, phrased conditionally ("if it is still running, say you are on
|
|
561
|
+
it; if the result is already there, give it"), because an unconditional "say
|
|
562
|
+
you have started it" makes the agent announce work it has already finished.
|
|
563
|
+
Cannot be `silent`, or contain a `transfer` or `handoff`.
|
|
525
564
|
- **`silent`** — no immediate reply after it runs. You rarely need to set it: a
|
|
526
565
|
tool in which no operation can return a response (see below) is silent
|
|
527
566
|
automatically, and so is any run that reaches `end_call`.
|
|
@@ -550,7 +589,8 @@ LLM — use it for noisy intermediate steps.
|
|
|
550
589
|
|
|
551
590
|
**Silence is derived, not defaulted.** If no operation in the tree can return a
|
|
552
591
|
response, the tool is silent whatever `silent` says — including operations inside
|
|
553
|
-
`if` branches
|
|
592
|
+
`if` branches, and including any `background_execution` one, which has no
|
|
593
|
+
response to hide. So a tool that is just `say "Your appointment is confirmed"` says
|
|
554
594
|
that once, rather than saying it and then improvising a second sentence on top.
|
|
555
595
|
If the agent should add a closing line, add a `generate_reply` operation that
|
|
556
596
|
states what to add; do not try to turn the derived silence off.
|
|
@@ -796,17 +836,23 @@ Each hook points at a **published tool id**, or null.
|
|
|
796
836
|
|
|
797
837
|
## Agent tasks
|
|
798
838
|
|
|
799
|
-
An **agent task**
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
839
|
+
An **agent task** takes named inputs, does some work, and returns a **typed
|
|
840
|
+
structured output**. Same prompt, same model, same tools, same MCP servers, same
|
|
841
|
+
knowledge and same lifecycle hooks as an agent — minus everything that belongs
|
|
842
|
+
to a *session*, because a task never owns one.
|
|
843
|
+
|
|
844
|
+
**It runs two ways, and declares nothing that ties it to either.** On its own —
|
|
845
|
+
`POST /v1/tasks/{task_id}/runs`, or an email batch drafting a row — it is an LLM
|
|
846
|
+
with tools and nobody to talk to. Attached to an agent through
|
|
847
|
+
`AgentConfig.tasks`, it takes over that conversation for as long as the job
|
|
848
|
+
takes, on the call's own voice and ears, and hands its result back as a tool
|
|
849
|
+
result.
|
|
804
850
|
|
|
805
851
|
It is its own noun with its own operations (`list_tasks`, `create_task`,
|
|
806
852
|
`get_task`, `update_task`, `delete_task`, `run_task`, `list_task_runs`) — not a
|
|
807
853
|
fourth agent channel. Use one wherever the work has an input and an answer
|
|
808
854
|
rather than a conversation: research a company from a domain, classify a
|
|
809
|
-
message, draft an opening line,
|
|
855
|
+
message, draft an opening line, take a shipping address mid-call.
|
|
810
856
|
|
|
811
857
|
`config` is:
|
|
812
858
|
|
|
@@ -818,10 +864,18 @@ message, draft an opening line, pull a field out of a document.
|
|
|
818
864
|
`.direction` — there is no call.
|
|
819
865
|
- **`llm`** — one model, with the same `fallback`, `reasoning_effort`,
|
|
820
866
|
`priority` and `builtin_tools` an agent's LLM has. A provider tool runs inside
|
|
821
|
-
a step rather than as one, so it costs no steps and real seconds.
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
867
|
+
a step rather than as one, so it costs no steps and real seconds. It is the
|
|
868
|
+
one media slot a task keeps, because an LLM is stateless per request and
|
|
869
|
+
swapping one in rebuilds nothing.
|
|
870
|
+
- **`kb_ids`**, **`on_enter`**, **`on_exit`**, **`on_user_turn_completed`** —
|
|
871
|
+
exactly an agent's. `on_user_turn_completed` only ever fires when an agent
|
|
872
|
+
entered the task; a standalone run has nobody to take a turn.
|
|
873
|
+
- There is no `stt`, `tts`, `realtime`, `language`, `turn_handling`, `channel`,
|
|
874
|
+
`greeting`, `avatar`, `recording`, `analysis`, `conversation` or `handoffs`.
|
|
875
|
+
A task runs on the media of the session that entered it, or on no media at
|
|
876
|
+
all — which is what lets one task serve a voice agent and an email batch.
|
|
877
|
+
`handoffs` is refused with a reason: a task hands control back to whoever
|
|
878
|
+
entered it, so handing the conversation on would strand that return.
|
|
825
879
|
- **`tools`** / **`mcps`** — exactly an agent's, attached by id or defined
|
|
826
880
|
inline, and pinned by publish exactly as an agent's are: republishing a tool
|
|
827
881
|
does not change a published task until that task is published again.
|
|
@@ -832,15 +886,26 @@ message, draft an opening line, pull a field out of a document.
|
|
|
832
886
|
that failure costs nothing. A value for a name the task does not declare is
|
|
833
887
|
refused too, rather than silently dropped — which is the one difference from an
|
|
834
888
|
agent, whose key space is open.
|
|
889
|
+
|
|
890
|
+
**They are also the schema of the tool an agent enters the task with**, minus
|
|
891
|
+
every name that agent declares and every name the session was started with. So
|
|
892
|
+
declare a variable only for what the caller or the model must supply: anything
|
|
893
|
+
the task can read for itself — `{{userdata.order_id}}`, `{{vars.region}}`,
|
|
894
|
+
`{{system_vars.date}}` — belongs in the prompt. Declare it instead and the
|
|
895
|
+
model is asked to invent it, and it will.
|
|
835
896
|
- **`output`** — a flat list of the fields the model must produce, each with a
|
|
836
897
|
`name`, a `type` (`string`, `boolean`, `integer` or `number`) and a
|
|
837
898
|
`description`. At most 25, and at least one **to publish** — a draft may have
|
|
838
899
|
none. No arrays and no nested objects: a task that wants to return five
|
|
839
900
|
talking points returns one string containing them.
|
|
840
901
|
- **`max_steps`** (default 25, max 50) — how many LLM → tools → LLM **rounds**
|
|
841
|
-
|
|
842
|
-
step. This is the runaway-loop guard.
|
|
843
|
-
|
|
902
|
+
a STANDALONE run may take. A round, not a tool call: four tools in one reply
|
|
903
|
+
cost one step. This is the runaway-loop guard. Entered by an agent the task
|
|
904
|
+
runs on the calling session's budget instead — three rounds per reply on
|
|
905
|
+
voice and video, twenty-five on text, refreshed on every user turn.
|
|
906
|
+
- **`timeout_seconds`** (default 300, max 600) — the real time budget, and the
|
|
907
|
+
one setting that applies both ways. Entered by an agent it is the only bound
|
|
908
|
+
on how long the task may hold the caller: keep it short on a voice agent.
|
|
844
909
|
|
|
845
910
|
A name may not appear in both `vars` and `output`: a run's inputs and its output
|
|
846
911
|
are read side by side, so a collision would make one of the two unreachable.
|
|
@@ -872,9 +937,15 @@ yours: it changes what every run and every live email batch does.
|
|
|
872
937
|
|
|
873
938
|
The model does not "return" the output. At compile time the task gains one
|
|
874
939
|
generated tool, **`submit_result`**, whose arguments are exactly the `output`
|
|
875
|
-
fields
|
|
876
|
-
|
|
877
|
-
|
|
940
|
+
fields. Never declare a tool of that name yourself.
|
|
941
|
+
|
|
942
|
+
**Nothing is appended to a task's prompt.** `submit_result_description` is the
|
|
943
|
+
whole of what the model is told about how a run ends, so it has to say that
|
|
944
|
+
calling the tool IS the ending — a written answer produces nothing — and that a
|
|
945
|
+
value the model could not determine goes in as `null`. It is required and
|
|
946
|
+
non-empty, but a new task only carries the one-line stub
|
|
947
|
+
`"Submit the result and finish."`: **replace it.** A task whose finishing is
|
|
948
|
+
described by that stub is a task relying on the model to guess.
|
|
878
949
|
|
|
879
950
|
Every output field is **required and nullable** in that tool. The model must say
|
|
880
951
|
something about every field, including "I could not find it" — an optional field
|
|
@@ -883,6 +954,15 @@ generated yet" then look identical to whoever reads the row. Say so in each
|
|
|
883
954
|
field's `description`: that description is the only instruction the model gets
|
|
884
955
|
about what belongs there.
|
|
885
956
|
|
|
957
|
+
A task an agent enters also gets **`finish_without_result`**, which abandons the
|
|
958
|
+
job and fails the calling agent's tool call.
|
|
959
|
+
`finish_without_result_description` — required and non-empty too, and starting as
|
|
960
|
+
the stub `"Give up and finish without a result."` — is the only thing saying when
|
|
961
|
+
that is allowed: **a task that gives up on work it should have finished is fixed
|
|
962
|
+
there, not in the prompt.** Narrow it to the caller actually changing their mind;
|
|
963
|
+
"I could not work out a value" is a `null`, not a reason to abandon. Publishing
|
|
964
|
+
refuses either description blank.
|
|
965
|
+
|
|
886
966
|
### Reading a run
|
|
887
967
|
|
|
888
968
|
`run_task` **executes for real**: the tools call the tenant's endpoints with
|
|
@@ -1060,8 +1140,8 @@ afterwards will not forgive us:
|
|
|
1060
1140
|
opted in. This runs on *their* Resend account under *their* agreement.
|
|
1061
1141
|
- **Nothing is sent that they have not reviewed and selected.** Creating a batch
|
|
1062
1142
|
only drafts.
|
|
1063
|
-
- **Every row runs the task's CURRENT PUBLISHED version**, re-read
|
|
1064
|
-
publishing mid-batch changes every row drafted after that moment. Which version
|
|
1143
|
+
- **Every row runs the task's CURRENT PUBLISHED version**, re-read as drafting
|
|
1144
|
+
goes, so publishing mid-batch changes every row drafted after that moment. Which version
|
|
1065
1145
|
wrote which rows is on the batch as `drafted_versions`, and
|
|
1066
1146
|
`redraft_email_batch_recipients` with `selection: "stale_version"` is how the
|
|
1067
1147
|
older ones are rewritten.
|
|
@@ -1092,6 +1172,12 @@ collides with an output field name (one of the two would be unreachable); a
|
|
|
1092
1172
|
those rows at draft time with `missing_vars` — one row, not the batch, and with
|
|
1093
1173
|
no tokens spent. Flag blank cells in a required column before creating.
|
|
1094
1174
|
|
|
1175
|
+
**A row that can never be sent is never drafted.** If a mapped column the task
|
|
1176
|
+
does NOT write is blank (or `to` is not an address), the row is `skipped` with
|
|
1177
|
+
`skip_reason: "unfillable"` the moment the batch is created, and costs nothing.
|
|
1178
|
+
`skips.unfillable` counts them. Filling the cell in with
|
|
1179
|
+
`patch_email_batch_recipient` brings the row back to drafting.
|
|
1180
|
+
|
|
1095
1181
|
### Two jobs, and a human between them
|
|
1096
1182
|
|
|
1097
1183
|
**Drafting** starts on `start_at` (or immediately), runs `draft_concurrency` rows
|
|
@@ -1102,21 +1188,29 @@ the last row lands. It has no business-hours window: nobody receives a draft. It
|
|
|
1102
1188
|
to review"*, never "finished": it says nothing about what has been sent.
|
|
1103
1189
|
|
|
1104
1190
|
**Sending** is separate, only ever happens when a person asks, and is its own
|
|
1105
|
-
row. `create_email_send` takes `
|
|
1106
|
-
|
|
1107
|
-
|
|
1191
|
+
row. `create_email_send` takes a `scope` and returns a **send** you can steer:
|
|
1192
|
+
|
|
1193
|
+
- `scope: "selected"` with `recipient_ids` sends exactly those rows.
|
|
1194
|
+
- `scope: "all"` is a standing send: every row of the batch as it finishes
|
|
1195
|
+
drafting, including rows not drafted yet — so **it mails drafts nobody has
|
|
1196
|
+
read**. Say so, and get an explicit yes, before creating one. It waits while
|
|
1197
|
+
drafting runs (`next_send_reason: "drafting"`) and ends once drafting has and
|
|
1198
|
+
every draft has gone. It cannot be live beside any other send of the batch —
|
|
1199
|
+
that is a 409 naming the live send.
|
|
1108
1200
|
- `start_at` schedules it, `window` (on its own `timezone`) holds it to business
|
|
1109
|
-
hours, `send_gap_seconds` is the minimum wait between two emails
|
|
1110
|
-
1 hour) and `send_daily_cap` bounds how many
|
|
1111
|
-
omitted comes from the batch.
|
|
1201
|
+
hours, `send_gap_seconds` is the minimum wait between two emails of the
|
|
1202
|
+
**batch** (1 second to 1 hour) and `send_daily_cap` bounds how many the batch
|
|
1203
|
+
may send per local day. Anything omitted comes from the batch.
|
|
1204
|
+
- A draft a live send covers reads `queued`, and is still a draft: it can be
|
|
1205
|
+
edited, skipped or redrafted until the send takes it.
|
|
1112
1206
|
- `pause_email_send` stops on the next email; `resume_email_send` carries on.
|
|
1113
|
-
- `cancel_email_send`
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1207
|
+
- `cancel_email_send` ends it; its unsent rows are simply drafts again. A send's
|
|
1208
|
+
scope never changes, so cancel and create another to change what it covers.
|
|
1209
|
+
- `get_email_send` carries `next_send_at` and `next_send_reason` (`start`,
|
|
1210
|
+
`window`, `daily_cap`, `retry`, `gap`, `drafting`), which is how "waiting for
|
|
1211
|
+
Monday" is told apart from "stuck". `patch_email_send` reaches a live send
|
|
1212
|
+
within five minutes, so raising a spent cap or removing a window needs no
|
|
1213
|
+
cancel.
|
|
1120
1214
|
|
|
1121
1215
|
**The safeguard here is a RATE, not a row count.** `send_daily_cap` (200 by
|
|
1122
1216
|
default, per batch, `null` for uncapped) is what stands between a 5 000-row list
|
|
@@ -1148,7 +1242,9 @@ action that revives a batch that already finished drafting. Its `selection` is
|
|
|
1148
1242
|
task wrote them), `not_sent`, or `all` — which names every row it refuses.
|
|
1149
1243
|
**Each redrafted row runs the task again and is billed again**, so say the row
|
|
1150
1244
|
count before running `all`. A person's edited cells survive unless
|
|
1151
|
-
`clear_overrides` is set.
|
|
1245
|
+
`clear_overrides` is set. A `queued` row is redrafted too, and its send takes
|
|
1246
|
+
the new draft. Read `draft_failures` before redrafting `failed`: a task that
|
|
1247
|
+
declined a row on purpose will most likely decline it again.
|
|
1152
1248
|
|
|
1153
1249
|
**One address is mailed at most once per batch**, enforced when the row is
|
|
1154
1250
|
claimed for sending: the second row settles `skipped` with
|
|
@@ -1157,16 +1253,20 @@ ours — Resend keeps one and auto-suppresses hard bounces and complaints.
|
|
|
1157
1253
|
|
|
1158
1254
|
### Watching it
|
|
1159
1255
|
|
|
1160
|
-
`get_email_batch` carries live counts, `
|
|
1161
|
-
`
|
|
1162
|
-
|
|
1163
|
-
`
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1256
|
+
`get_email_batch` carries live counts, `skips` (why rows were skipped),
|
|
1257
|
+
`draft_failures` (why drafts failed, most common first), `failure_reason`,
|
|
1258
|
+
`sent_today` (against `send_daily_cap`), `drafted_versions`,
|
|
1259
|
+
`stale_redraftable` / `stale_sent` and the drafting cost so far. Measure
|
|
1260
|
+
progress against what can be reached: `unfillable` rows are never drafted, and
|
|
1261
|
+
skipped, failed or cancelled rows are never sent.
|
|
1262
|
+
|
|
1263
|
+
**Stopping itself comes in two shapes, and they need different advice.** Ten
|
|
1264
|
+
consecutive failures **pause** a batch or a send: everything is where it was and
|
|
1265
|
+
`resume` continues, so say that rather than suggesting the work be rebuilt.
|
|
1266
|
+
`failed` is the deterministic stop — a deleted task, a field map an edit broke, a
|
|
1267
|
+
revoked key, an unverified domain — where trying again cannot help until
|
|
1268
|
+
something outside Talqing changes. A failed SEND returns its untouched rows to
|
|
1269
|
+
the review table as drafts and never takes the batch with it; the drafts are
|
|
1170
1270
|
still there. In the other direction, pausing or cancelling the *batch* stops
|
|
1171
1271
|
drafting and does not touch a send that is already scheduled or going out.
|
|
1172
1272
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talqing/mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "MCP server for building Talqing AI voice, video and text agents from Claude Code, Codex, or any MCP client.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://talqing.com",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"type": "module",
|
|
19
19
|
"bin": {
|
|
20
|
-
"talqing-mcp": "
|
|
20
|
+
"talqing-mcp": "dist/index.js"
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist",
|
package/tools.json
CHANGED
|
@@ -954,6 +954,76 @@
|
|
|
954
954
|
"read_only": false,
|
|
955
955
|
"role": "write"
|
|
956
956
|
},
|
|
957
|
+
{
|
|
958
|
+
"description": "List WebSocket media-stream connections a partner can dial.",
|
|
959
|
+
"method": "GET",
|
|
960
|
+
"name": "list_stream_connections",
|
|
961
|
+
"parameters": {
|
|
962
|
+
"additionalProperties": true,
|
|
963
|
+
"description": "Arguments not inlined: call describe_function('list_stream_connections').",
|
|
964
|
+
"properties": {},
|
|
965
|
+
"type": "object"
|
|
966
|
+
},
|
|
967
|
+
"path": "/v1/streams",
|
|
968
|
+
"read_only": true,
|
|
969
|
+
"role": "read"
|
|
970
|
+
},
|
|
971
|
+
{
|
|
972
|
+
"description": "Create a connection a streaming partner can dial.",
|
|
973
|
+
"method": "POST",
|
|
974
|
+
"name": "create_stream_connection",
|
|
975
|
+
"parameters": {
|
|
976
|
+
"additionalProperties": true,
|
|
977
|
+
"description": "Arguments not inlined: call describe_function('create_stream_connection').",
|
|
978
|
+
"properties": {},
|
|
979
|
+
"type": "object"
|
|
980
|
+
},
|
|
981
|
+
"path": "/v1/streams",
|
|
982
|
+
"read_only": false,
|
|
983
|
+
"role": "write"
|
|
984
|
+
},
|
|
985
|
+
{
|
|
986
|
+
"description": "One stream connection, with the URL to hand the partner.",
|
|
987
|
+
"method": "GET",
|
|
988
|
+
"name": "get_stream_connection",
|
|
989
|
+
"parameters": {
|
|
990
|
+
"additionalProperties": true,
|
|
991
|
+
"description": "Arguments not inlined: call describe_function('get_stream_connection').",
|
|
992
|
+
"properties": {},
|
|
993
|
+
"type": "object"
|
|
994
|
+
},
|
|
995
|
+
"path": "/v1/streams/{connection_id}",
|
|
996
|
+
"read_only": true,
|
|
997
|
+
"role": "read"
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
"description": "Rename a connection, point it at another agent, or disable it.",
|
|
1001
|
+
"method": "PATCH",
|
|
1002
|
+
"name": "patch_stream_connection",
|
|
1003
|
+
"parameters": {
|
|
1004
|
+
"additionalProperties": true,
|
|
1005
|
+
"description": "Arguments not inlined: call describe_function('patch_stream_connection').",
|
|
1006
|
+
"properties": {},
|
|
1007
|
+
"type": "object"
|
|
1008
|
+
},
|
|
1009
|
+
"path": "/v1/streams/{connection_id}",
|
|
1010
|
+
"read_only": false,
|
|
1011
|
+
"role": "write"
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
"description": "Delete a stream connection. Calls it already carried are kept.",
|
|
1015
|
+
"method": "DELETE",
|
|
1016
|
+
"name": "delete_stream_connection",
|
|
1017
|
+
"parameters": {
|
|
1018
|
+
"additionalProperties": true,
|
|
1019
|
+
"description": "Arguments not inlined: call describe_function('delete_stream_connection').",
|
|
1020
|
+
"properties": {},
|
|
1021
|
+
"type": "object"
|
|
1022
|
+
},
|
|
1023
|
+
"path": "/v1/streams/{connection_id}",
|
|
1024
|
+
"read_only": false,
|
|
1025
|
+
"role": "write"
|
|
1026
|
+
},
|
|
957
1027
|
{
|
|
958
1028
|
"description": "Dial a real phone number and have a published agent take the call.",
|
|
959
1029
|
"method": "POST",
|
|
@@ -1235,7 +1305,7 @@
|
|
|
1235
1305
|
"role": "write"
|
|
1236
1306
|
},
|
|
1237
1307
|
{
|
|
1238
|
-
"description": "Take
|
|
1308
|
+
"description": "Take rows out of consideration. Reversible with `restore`.",
|
|
1239
1309
|
"method": "POST",
|
|
1240
1310
|
"name": "skip_email_batch_recipients",
|
|
1241
1311
|
"parameters": {
|
|
@@ -1249,7 +1319,7 @@
|
|
|
1249
1319
|
"role": "write"
|
|
1250
1320
|
},
|
|
1251
1321
|
{
|
|
1252
|
-
"description": "Put skipped rows back. `selection: \"all_eligible\"` means every skipped row.",
|
|
1322
|
+
"description": "Put skipped rows back. `selection: \"all_eligible\"` means every row a person skipped; an `unfillable` row is restored by filling in its cell instead.",
|
|
1253
1323
|
"method": "POST",
|
|
1254
1324
|
"name": "restore_email_batch_recipients",
|
|
1255
1325
|
"parameters": {
|
|
@@ -1277,7 +1347,7 @@
|
|
|
1277
1347
|
"role": "write"
|
|
1278
1348
|
},
|
|
1279
1349
|
{
|
|
1280
|
-
"description": "Send
|
|
1350
|
+
"description": "Send rows. **This mails real people and cannot be undone.**",
|
|
1281
1351
|
"method": "POST",
|
|
1282
1352
|
"name": "create_email_send",
|
|
1283
1353
|
"parameters": {
|
|
@@ -1333,7 +1403,7 @@
|
|
|
1333
1403
|
"role": "write"
|
|
1334
1404
|
},
|
|
1335
1405
|
{
|
|
1336
|
-
"description": "Stop sending. It takes hold on the next email, and nothing is lost \u2014 the rows stay queued
|
|
1406
|
+
"description": "Stop sending. It takes hold on the next email, and nothing is lost \u2014 the rows stay queued, and editable, until you resume.",
|
|
1337
1407
|
"method": "POST",
|
|
1338
1408
|
"name": "pause_email_send",
|
|
1339
1409
|
"parameters": {
|
|
@@ -1361,7 +1431,7 @@
|
|
|
1361
1431
|
"role": "write"
|
|
1362
1432
|
},
|
|
1363
1433
|
{
|
|
1364
|
-
"description": "Stop this send
|
|
1434
|
+
"description": "Stop this send for good. Every row it has not sent stays a draft, exactly as it was, ready for another send \u2014 not a destructive action.",
|
|
1365
1435
|
"method": "POST",
|
|
1366
1436
|
"name": "cancel_email_send",
|
|
1367
1437
|
"parameters": {
|
|
@@ -1752,6 +1822,34 @@
|
|
|
1752
1822
|
"read_only": true,
|
|
1753
1823
|
"role": "read"
|
|
1754
1824
|
},
|
|
1825
|
+
{
|
|
1826
|
+
"description": "Search the models a provider offers too many of to list.",
|
|
1827
|
+
"method": "GET",
|
|
1828
|
+
"name": "search_models",
|
|
1829
|
+
"parameters": {
|
|
1830
|
+
"additionalProperties": true,
|
|
1831
|
+
"description": "Arguments not inlined: call describe_function('search_models').",
|
|
1832
|
+
"properties": {},
|
|
1833
|
+
"type": "object"
|
|
1834
|
+
},
|
|
1835
|
+
"path": "/v1/catalog/models",
|
|
1836
|
+
"read_only": true,
|
|
1837
|
+
"role": "read"
|
|
1838
|
+
},
|
|
1839
|
+
{
|
|
1840
|
+
"description": "The hosts that can serve one OpenRouter language model; fastest first when the workspace has an OpenRouter key. Each `host` is a valid entry for `llm.hosts`.",
|
|
1841
|
+
"method": "GET",
|
|
1842
|
+
"name": "list_model_hosts",
|
|
1843
|
+
"parameters": {
|
|
1844
|
+
"additionalProperties": true,
|
|
1845
|
+
"description": "Arguments not inlined: call describe_function('list_model_hosts').",
|
|
1846
|
+
"properties": {},
|
|
1847
|
+
"type": "object"
|
|
1848
|
+
},
|
|
1849
|
+
"path": "/v1/catalog/models/hosts",
|
|
1850
|
+
"read_only": true,
|
|
1851
|
+
"role": "read"
|
|
1852
|
+
},
|
|
1755
1853
|
{
|
|
1756
1854
|
"description": "The Anam avatar gallery \u2014 the faces a video agent can wear.",
|
|
1757
1855
|
"method": "GET",
|