3c7c6695f2
Adds two STM components and a transparent cache hook in the agent loop so
read-only tools don't re-do work the agent already did in this session.
New STM components:
- ToolResultsCache — {tool_name: {key: result}}, session-scoped.
to_dict() exposes only the key inventory (not payloads) to keep the
prompt cheap.
- ReleaseFocus — current_release_path + working_set list, updated
automatically when a path-keyed inspector runs.
YAML spec layer:
- New optional 'cache: { key: <param_name> }' block in ToolSpec.
- Validated at load time: cache.key must be a declared parameter.
- Surfaced on Tool dataclass as cache_key: str | None.
Agent._execute_tool_call:
- Pre-exec cache lookup; hit short-circuits and adds _from_cache=true.
- Post-exec: stores successful results, updates release_focus for
path-keyed tools, refreshes episodic.last_search_results when
find_torrent's hit served the response (so get_torrent_by_index
keeps pointing at the right list).
Cacheable tools (5): analyze_release, probe_media, list_folder,
find_media_imdb_id, find_torrent.
57 lines
2.0 KiB
YAML
57 lines
2.0 KiB
YAML
name: probe_media
|
|
|
|
summary: >
|
|
Run ffprobe on a single video file and return its technical details.
|
|
|
|
description: |
|
|
Inspects a specific video file with ffprobe and returns codec,
|
|
resolution, duration, bitrate, the list of audio tracks (with
|
|
language and channel layout), and the list of embedded subtitle
|
|
tracks. Independent of any release-name parsing — works on any file
|
|
you can point at.
|
|
|
|
when_to_use: |
|
|
- To inspect a file's audio/subtitle tracks before deciding what to
|
|
do (e.g. choose a default audio language).
|
|
- To verify a video's resolution / codec when the release name is
|
|
unreliable.
|
|
- As a building block when analyze_release is overkill.
|
|
|
|
when_not_to_use: |
|
|
- For full release routing — analyze_release does parsing + media
|
|
type detection + probe in one call.
|
|
- On non-video files — ffprobe will return probe_failed.
|
|
|
|
next_steps: |
|
|
- The returned info typically feeds a user-facing decision (e.g.
|
|
"this is 7.1 DTS, want to keep it?"); rarely chained directly to
|
|
another tool.
|
|
|
|
cache:
|
|
key: source_path
|
|
|
|
parameters:
|
|
source_path:
|
|
description: Absolute path to the video file to probe.
|
|
why_needed: |
|
|
ffprobe needs the exact file (not a folder). For releases use
|
|
analyze_release; for a known file path, pass it here.
|
|
example: /downloads/Inception.2010.1080p.BluRay.x265-GROUP/movie.mkv
|
|
|
|
returns:
|
|
ok:
|
|
description: Probe succeeded.
|
|
fields:
|
|
status: "'ok'"
|
|
video: "Dict with codec, resolution, width, height, duration_seconds, bitrate_kbps."
|
|
audio_tracks: "List of {index, codec, channels, channel_layout, language, is_default}."
|
|
subtitle_tracks: "List of {index, codec, language, is_default, is_forced}."
|
|
audio_languages: List of language codes present in audio tracks.
|
|
is_multi_audio: True when more than one audio language is present.
|
|
|
|
error:
|
|
description: Probe failed.
|
|
fields:
|
|
error: Short error code (not_found, probe_failed).
|
|
message: Human-readable explanation.
|