Files
chenmingxuan e1ea099592 feat: add official Codex skill and harden task execution
Install and update artemis-use with task diagnostics and plugin guidance. Preserve cross-device file receipts, review canonical reports, guard stage transitions and reduce small history summaries. Improve exploration lifecycle, request recovery and browser live connections.
2026-10-18 14:18:37 +08:00

63 lines
2.4 KiB
Python

"""Model-facing runtime receipts, outside the truncatable plugin observation."""
import json
from artemis.plugins.prompt_budget import bounded_result_text
def attachment_fields(attachments: list) -> list[dict]:
return [
{
key: value[:1000] if isinstance(value, str) else value
for key in ("path", "name", "bytes", "sha256", "media_type")
if isinstance(value := item.get(key), (str, int))
}
for item in attachments[:8]
if isinstance(item, dict)
]
def step_attachment_receipts(step: dict) -> str:
"""Keep actual exported paths through every history compaction level."""
result = step.get("last_execution_result")
actions = result.get("execution") if isinstance(result, dict) else None
if not isinstance(actions, list):
actions = step.get("action_taken")
actions = actions if isinstance(actions, list) else [actions]
rows = []
for action in actions:
if not isinstance(action, dict) or not action.get("plugin_id"):
continue
attachments = action.get("attachments")
if isinstance(attachments, list) and attachments:
rows.append(
{
"plugin": action["plugin_id"],
"attachments": attachment_fields(attachments),
**({"omitted": len(attachments) - 8} if len(attachments) > 8 else {}),
}
)
return json.dumps(rows, ensure_ascii=False) if rows else ""
def result_blocks(text: str, *, call_id: str = "", attachments=None) -> list[dict]:
blocks = []
if isinstance(attachments, list) and attachments:
# Only callers holding runtime-validated metadata may supply these.
# Never extract alleged receipts from plugin prose/structured_content.
receipts = attachment_fields(attachments)
receipt = {"attachments": receipts}
if len(attachments) > 8:
receipt["omitted"] = len(attachments) - 8
blocks.append(
{
"type": "text",
"text": (
"ARTEMIS verified file receipts (task trace paths; content correctness is not verified):\n"
+ json.dumps(receipt, ensure_ascii=False)
),
}
)
blocks.append({"type": "text", "text": bounded_result_text(text, call_id=call_id)})
return blocks