4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from core.agent_harness.prompts import (
|
|
PromptBlock,
|
|
PromptEnvelope,
|
|
build_action_system_prompt,
|
|
build_action_system_prompt_envelope,
|
|
)
|
|
from core.agent_harness.turns.turn_snapshot import TurnSnapshot
|
|
|
|
|
|
def _ctx() -> TurnSnapshot:
|
|
return TurnSnapshot(
|
|
text="show connected integrations",
|
|
conversation_messages=(("user", "hello"),),
|
|
configured_integrations=("github",),
|
|
configured_integrations_known=True,
|
|
last_state=None,
|
|
last_synthetic_observation_path=None,
|
|
reasoning_effort=None,
|
|
)
|
|
|
|
|
|
def test_prompt_envelope_renders_existing_string_prompt_without_changes() -> None:
|
|
envelope = PromptEnvelope.from_text("line one\n\nline two")
|
|
|
|
assert envelope.render() == "line one\n\nline two"
|
|
assert envelope.require_block("prompt").content == "line one\n\nline two"
|
|
|
|
|
|
def test_prompt_envelope_renders_ordered_blocks_with_optional_titles() -> None:
|
|
envelope = PromptEnvelope.from_blocks(
|
|
(
|
|
PromptBlock(id="rules", kind="rule", content="Follow the rules."),
|
|
PromptBlock(
|
|
id="cli-reference",
|
|
kind="context",
|
|
title="CLI reference",
|
|
content="opensre --help",
|
|
include_title=True,
|
|
),
|
|
),
|
|
separator="\n\n",
|
|
)
|
|
|
|
assert envelope.render() == "Follow the rules.\n\n--- CLI reference ---\nopensre --help"
|
|
assert envelope.block("cli-reference") is not None
|
|
with pytest.raises(KeyError, match="missing"):
|
|
envelope.require_block("missing")
|
|
|
|
|
|
def test_action_system_prompt_envelope_matches_legacy_rendering() -> None:
|
|
ctx = _ctx()
|
|
envelope = build_action_system_prompt_envelope(ctx)
|
|
|
|
assert [block.id for block in envelope.blocks] == [
|
|
"action-agent-system-base",
|
|
"action-agent-skills",
|
|
"connected-integrations",
|
|
"recent-conversation",
|
|
]
|
|
assert envelope.require_block("action-agent-skills").kind == "rule"
|
|
assert envelope.require_block("connected-integrations").kind == "context"
|
|
assert envelope.require_block("recent-conversation").kind == "conversation"
|
|
assert envelope.render() == build_action_system_prompt(ctx)
|