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.
This commit is contained in:
1 parent
2328a4df0c
commit
e1ea099592
128 files changed
+4944
-700
No files matched your search
+30
-1
@@ -249,6 +249,12 @@ async def exit_settlement_node(state: State, ctx: ArtemisContext):
|
||||
|
||||
if needs_exploration_turn(ctx):
|
||||
return {"exit_settlement_route": "continue"}
|
||||
if (
|
||||
getattr(ctx, "exploration_id", None)
|
||||
and not getattr(ctx, "assert_halt", False)
|
||||
and not _execution_report(state)
|
||||
):
|
||||
return {"exit_settlement_route": "continue"}
|
||||
stop_capture = getattr(ctx, "on_execution_review", None)
|
||||
if stop_capture:
|
||||
await stop_capture()
|
||||
@@ -296,6 +302,17 @@ async def _exit_settlement_node(state: State, ctx: ArtemisContext):
|
||||
logger.error(f"Failed to read task plan at settlement: {e}")
|
||||
snapshot = parse_plan(plan_text)
|
||||
|
||||
execution_report = _execution_report(state)
|
||||
report_delivery = None
|
||||
if execution_report and getattr(ctx, "exploration_id", None):
|
||||
from artemis.exploration.report import save_execution_report
|
||||
|
||||
# Delivery is a real, persisted event. The reviewer can inspect the
|
||||
# complete answer without treating its business claims as evidence.
|
||||
report_delivery = save_execution_report(ctx, execution_report)
|
||||
if needs_exploration_turn(ctx):
|
||||
return {"exit_settlement_route": "continue"}
|
||||
|
||||
setup = ctx.execution_setup
|
||||
user_stopped = bool(getattr(state, "user_stop_requested", False))
|
||||
halted = bool(getattr(ctx, "assert_halt", False))
|
||||
@@ -336,6 +353,8 @@ async def _exit_settlement_node(state: State, ctx: ArtemisContext):
|
||||
ledger=ledger,
|
||||
check_items=list(snapshot.all_check_items),
|
||||
attempt_id=final_attempt_id,
|
||||
execution_report=execution_report,
|
||||
report_delivery=report_delivery,
|
||||
),
|
||||
timeout=checkpoint_timeout,
|
||||
)
|
||||
@@ -951,6 +970,11 @@ def wrap_update_note_tool(ctx: ArtemisContext, original_tool):
|
||||
)
|
||||
|
||||
|
||||
def _execution_report(state: State) -> str | None:
|
||||
report = getattr(state, "execution_report", None)
|
||||
return report if isinstance(report, str) and report.strip() else None
|
||||
|
||||
|
||||
def convergence_gate(
|
||||
state: State, ctx: ArtemisContext
|
||||
) -> Literal["continue", "exit_settlement", "end"]:
|
||||
@@ -973,10 +997,15 @@ def convergence_gate(
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
def _terminal_route() -> Literal["exit_settlement", "end"]:
|
||||
def _terminal_route() -> Literal["continue", "exit_settlement", "end"]:
|
||||
"""Settlement and final review are decoupled from each other but share
|
||||
the entry: any check item, in-flight/queued attempt, ledger record, or
|
||||
an enabled final review forces the settlement node."""
|
||||
if getattr(ctx, "exploration_id", None) and not getattr(ctx, "assert_halt", False):
|
||||
if not _execution_report(state):
|
||||
return "continue"
|
||||
# Even with verification disabled, persist and deliver the report.
|
||||
return "exit_settlement"
|
||||
plan_snapshot = parse_plan(_read_plan())
|
||||
needs_settlement = (
|
||||
bool(plan_snapshot.all_check_items)
|
||||
|
||||
Reference in new issue
Block a user