|
# retoor <retoor@molodetz.nl>
|
|
|
|
from __future__ import annotations
|
|
|
|
from .spec import Action, Param
|
|
|
|
FETCH_ACTIONS: tuple[Action, ...] = (
|
|
Action(
|
|
name="fetch_url",
|
|
method="LOCAL",
|
|
path="",
|
|
summary="Fetch a web page and return its readable text content",
|
|
description=(
|
|
"Retrieves any http(s) URL as a real browser would (stealth headers) and returns "
|
|
"the page title and readable text with links preserved, safely truncated to fit "
|
|
"the context window. Use it to read external pages, then summarize or create posts, "
|
|
"gists, or articles from the content. Private and loopback addresses are refused."
|
|
),
|
|
handler="fetch",
|
|
requires_auth=False,
|
|
read_only=True,
|
|
params=(
|
|
Param(
|
|
name="url",
|
|
location="body",
|
|
description="The page URL to fetch (https is assumed if no scheme is given).",
|
|
required=True,
|
|
),
|
|
Param(
|
|
name="max_chars",
|
|
location="body",
|
|
description="Optional cap on returned characters; clamped to a context-safe maximum.",
|
|
type="integer",
|
|
),
|
|
),
|
|
),
|
|
Action(
|
|
name="http_request",
|
|
method="LOCAL",
|
|
path="",
|
|
summary="Make an arbitrary HTTP request (GET/POST/PUT/PATCH/DELETE) to any external API",
|
|
description=(
|
|
"The general HTTP client for external services and REST/JSON APIs. Send any method with "
|
|
"custom headers and a request body, and read the full response (status, headers, content). "
|
|
"Use the 'json' argument to send a JSON body (Content-Type is set automatically), 'form' to "
|
|
"send url-encoded form fields, or 'body' to send a raw string. The response body is returned "
|
|
"verbatim for JSON, or as readable text for HTML, capped to fit the context window; non-2xx "
|
|
"responses are returned (not raised) so you can inspect API errors. Private and loopback "
|
|
"addresses are refused. Call this DIRECTLY to talk to an API; never wrap it in a user-defined "
|
|
"tool or eval that calls itself. Prefer fetch_url for simply reading a web page."
|
|
),
|
|
handler="fetch",
|
|
requires_auth=True,
|
|
params=(
|
|
Param(
|
|
name="url",
|
|
location="body",
|
|
description="The request URL (https is assumed if no scheme is given).",
|
|
required=True,
|
|
),
|
|
Param(
|
|
name="method",
|
|
location="body",
|
|
description="HTTP method: GET, POST, PUT, PATCH, DELETE, HEAD, or OPTIONS. Defaults to GET.",
|
|
),
|
|
Param(
|
|
name="headers",
|
|
location="body",
|
|
description="Optional request headers as a JSON object of string key/value pairs.",
|
|
type="object",
|
|
),
|
|
Param(
|
|
name="json",
|
|
location="body",
|
|
description="Optional JSON request body as an object or array; sets Content-Type to application/json.",
|
|
type="object",
|
|
),
|
|
Param(
|
|
name="form",
|
|
location="body",
|
|
description="Optional url-encoded form body as a JSON object of string key/value pairs.",
|
|
type="object",
|
|
),
|
|
Param(
|
|
name="body",
|
|
location="body",
|
|
description="Optional raw string request body; set a matching Content-Type header yourself.",
|
|
),
|
|
Param(
|
|
name="max_chars",
|
|
location="body",
|
|
description="Optional cap on returned response characters; clamped to a context-safe maximum.",
|
|
type="integer",
|
|
),
|
|
),
|
|
),
|
|
)
|