feat: prepare 2.2.0 with UI and execution fixes

Add dark theme, richer Markdown and readable plugin results.
Improve Android input evidence, response integrity and diagnostics.
Unify lifecycle, guidance receipts and evidence sources across clients.
Keep direct action dispatch without an added AI quota approval layer.
Align version metadata at 2.2.0 and bundle Helper 1.2.2.

Validation: 3063 backend tests before the version bump; 44 after.
Frontend: 317 tests and production build passed.
This commit is contained in:
chenmingxuan committed 2026-10-26 00:44:13 +08:00
1 parent 83bcfd54d5
commit fac4ccb760
146 files changed
+5689 -2033

No files matched your search

+57
View File
@@ -271,6 +271,63 @@ async def test_receipt_disk_failure_preserves_successful_write_result(monkeypatc
assert outcome.side_effect != "none"
@pytest.mark.asyncio
async def test_write_popup_source_updates_cached_observation_target():
runtime = PluginRuntime.__new__(PluginRuntime)
runtime.ctx = None
runtime.bindings = {
"write": ("visual-test", Tool(name="write", inputSchema={"type": "object"}))
}
runtime.packages = {
"visual-test": (
manifest(
capabilities={
"kind": "visual",
"tools": {
"observe": {
"effect": "read",
"observation": True,
"target_argument": "window_id",
},
"write": {"effect": "write", "target_argument": "window_id"},
},
}
),
SimpleNamespace(argument_constraints={}, secrets={}),
None,
)
}
runtime.sessions = {
"visual-test": SimpleNamespace(
call=AsyncMock(
return_value=CallToolResult(
content=[ImageContent(type="image", mimeType="image/png", data="aW1hZ2U=")],
structuredContent={
"artemis": {
"version": 1,
"execution": "completed",
"source": {"kind": "computer", "target_id": "123"},
}
},
)
),
stop_uncertain=False,
)
}
runtime.ensure_resources_ready = lambda: None
runtime._image_targets = {}
runtime.last_images = {}
runtime._observation_calls = {"visual-test": ("observe", {"pid": 7, "window_id": 10})}
runtime._recordings = None
first = await runtime.call("write", {"pid": 7, "window_id": 10})
assert first.status == "success"
assert first.pre_image_valid is False
assert runtime._image_targets["visual-test"][0] == "123"
assert runtime._observation_calls["visual-test"] == ("observe", {"pid": 7, "window_id": 123})
second = await runtime.call("write", {"pid": 7, "window_id": 123})
assert second.pre_image_valid is True
@pytest.mark.asyncio
async def test_v2_observation_without_task_context_never_starts_recording(monkeypatch):
runtime = PluginRuntime.__new__(PluginRuntime)