| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- from __future__ import annotations
- from datetime import datetime, timezone
- from typing import Any
- from .sanitizer import sanitize
- _MAX_PROMPT_CHARS = 60_000
- def project_prompt(payload: dict[str, Any]) -> dict[str, Any]:
- """Build a truthful, lazy prompt view.
- Runtime events preserve the exact delegated task, but the application does
- not persist a system-prompt snapshot for each invocation. The current
- prompt is therefore deliberately labelled as current configuration.
- """
- task = _text(payload.get("task"))
- prompt = _text(payload.get("promptContent"))
- truncated = bool(prompt and len(prompt) > _MAX_PROMPT_CHARS)
- if truncated:
- prompt = prompt[:_MAX_PROMPT_CHARS].rstrip() + "\n\n…(当前规则过长,已截断)"
- result: dict[str, Any] = {
- "promptRef": str(payload.get("promptRef") or ""),
- "actor": payload.get("actor") or {"role": "main", "label": "主 Agent"},
- "notices": [
- {
- "code": "PROMPT_NOT_SNAPSHOTTED",
- "message": "系统没有保存这次运行所用提示词的历史快照;下方展示当前提示词。",
- }
- ],
- }
- if mode_notice := _text(payload.get("modeNotice")):
- result["notices"].append(
- {"code": "CURRENT_MODE_CONTEXT", "message": mode_notice}
- )
- if task:
- result["exactTask"] = {
- "content": sanitize(task, max_text=_MAX_PROMPT_CHARS),
- "accuracy": "run-exact",
- }
- if prompt:
- result["systemPrompt"] = {
- "content": sanitize(prompt, max_text=_MAX_PROMPT_CHARS + 200),
- "source": payload.get("promptSource") or "current-file",
- "version": payload.get("promptVersion"),
- "accuracy": "current-not-run-snapshot",
- "capturedAt": datetime.now(timezone.utc).isoformat(),
- "truncated": truncated,
- }
- else:
- result["notices"].append(
- {
- "code": "PROMPT_UNAVAILABLE",
- "message": "当前提示词暂时不可读取。",
- }
- )
- if truncated:
- result["notices"].append(
- {"code": "PROMPT_TRUNCATED", "message": "当前提示词已按安全长度截断。"}
- )
- return sanitize(result, max_text=_MAX_PROMPT_CHARS + 400)
- def _text(value: Any) -> str | None:
- if not isinstance(value, str):
- return None
- value = value.strip()
- return value or None
|