fix: anchor MEDIA tag parsing
This commit is contained in:
@@ -40,6 +40,7 @@ Docs: https://docs.clawd.bot
|
|||||||
- Tests: skip embedded runner ordering assertion on Windows to avoid CI timeouts.
|
- Tests: skip embedded runner ordering assertion on Windows to avoid CI timeouts.
|
||||||
- Linux: include env-configured user bin roots in systemd PATH and align PATH audits. (#1512) Thanks @robbyczgw-cla.
|
- Linux: include env-configured user bin roots in systemd PATH and align PATH audits. (#1512) Thanks @robbyczgw-cla.
|
||||||
- TUI: render Gateway slash-command replies as system output (for example, `/context`).
|
- TUI: render Gateway slash-command replies as system output (for example, `/context`).
|
||||||
|
- Media: only parse `MEDIA:` tags when they start the line to avoid stripping prose mentions. (#1206)
|
||||||
- Media: preserve PNG alpha when possible; fall back to JPEG when still over size cap. (#1491) Thanks @robbyczgw-cla.
|
- Media: preserve PNG alpha when possible; fall back to JPEG when still over size cap. (#1491) Thanks @robbyczgw-cla.
|
||||||
- Agents: treat plugin-only tool allowlists as opt-ins; keep core tools enabled. (#1467)
|
- Agents: treat plugin-only tool allowlists as opt-ins; keep core tools enabled. (#1467)
|
||||||
- Exec approvals: persist allowlist entry ids to keep macOS allowlist rows stable. (#1521) Thanks @ngutman.
|
- Exec approvals: persist allowlist entry ids to keep macOS allowlist rows stable. (#1521) Thanks @ngutman.
|
||||||
|
|||||||
@@ -34,4 +34,17 @@ describe("splitMediaFromOutput", () => {
|
|||||||
expect(first.audioAsVoice).toBe(true);
|
expect(first.audioAsVoice).toBe(true);
|
||||||
expect(second.audioAsVoice).toBe(true);
|
expect(second.audioAsVoice).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("keeps MEDIA mentions in prose", () => {
|
||||||
|
const input = "The MEDIA: tag fails to deliver";
|
||||||
|
const result = splitMediaFromOutput(input);
|
||||||
|
expect(result.mediaUrls).toBeUndefined();
|
||||||
|
expect(result.text).toBe(input);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("parses MEDIA tags with leading whitespace", () => {
|
||||||
|
const result = splitMediaFromOutput(" MEDIA:/tmp/screenshot.png");
|
||||||
|
expect(result.mediaUrls).toEqual(["/tmp/screenshot.png"]);
|
||||||
|
expect(result.text).toBe("");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -71,6 +71,13 @@ export function splitMediaFromOutput(raw: string): {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const trimmedStart = line.trimStart();
|
||||||
|
if (!trimmedStart.startsWith("MEDIA:")) {
|
||||||
|
keptLines.push(line);
|
||||||
|
lineOffset += line.length + 1; // +1 for newline
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const matches = Array.from(line.matchAll(MEDIA_TOKEN_RE));
|
const matches = Array.from(line.matchAll(MEDIA_TOKEN_RE));
|
||||||
if (matches.length === 0) {
|
if (matches.length === 0) {
|
||||||
keptLines.push(line);
|
keptLines.push(line);
|
||||||
|
|||||||
Reference in New Issue
Block a user