diff --git a/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/PUBLIC_ACCEPTANCE.json b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/PUBLIC_ACCEPTANCE.json new file mode 100644 index 0000000..f2bbe30 --- /dev/null +++ b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/PUBLIC_ACCEPTANCE.json @@ -0,0 +1,170 @@ +{ + "schema": "windows_gui_runtime_public_acceptance.v1", + "artifact": { + "id": "io.github.desolate-jix.gui-runtime", + "extension_version": "0.0.4", + "wheel": { + "file": "amadeus_agent_gui_runtime-0.0.4-py3-none-any.whl", + "bytes": 13822, + "sha256": "9acc7f5d1d667d1d44e3750cdf0f351abefeb5e5136b7fad91d50d77a6d29b31" + }, + "source_zip": { + "file": "extension-source-0.0.4.zip", + "bytes": 16069, + "sha256": "4b6ef25b280cdfd4b8e3567ef8321e9a9137019cfd9738add3453dfb2c9ddd8d" + }, + "runtime_version": "0.1.6", + "runtime_candidate": "05", + "runtime_installer_sha256": "90c506f5666345379924faf1e335d6c5dd626f215fcebe2a92ddb2b01deb2042" + }, + "snapshot_timing": "Immutable wheel/source archive pending text is the build-time snapshot. This report records later installed technical acceptance without altering those artifacts or catalog review status.", + "bare_runtime": { + "technical_result": "passed_with_evidence_limits", + "route": "Original Main caller -> public authenticated HTTP MCP -> installed Runtime", + "workflow": [ + "Catalog", + "2026", + "October", + "Up to 2026", + "Up to Catalog" + ], + "original_steps_completed": 5, + "TEST_primary_refusals": 1, + "TEST_ordinary_refusals": 1, + "actual_bound_before_png_review": true, + "separate_review_and_continue": true, + "same_original_job_and_candidate": true, + "first_action_pre_review_dispatches": 0, + "first_action_after_continue_dispatches": 1, + "logical_actions": 5, + "physical_clicks": 8, + "marker_unchanged": true, + "owned_window_closed": true, + "runtime_cleanup_verified": true, + "original_sdk_DELETE_200_observed": true + }, + "native_pi": { + "technical_result": "passed_with_evidence_limits", + "route": "Actual ExtensionInstaller -> shipping Work -> original native Pi 1.2.0 -> authenticated HTTP MCP -> installed Runtime", + "workflow": [ + "Documents", + "Reports", + "Up to Documents", + "Receipts" + ], + "original_steps_completed": 4, + "TEST_primary_refusals": 1, + "TEST_ordinary_refusals": 1, + "actual_bound_before_frame_review": true, + "separate_review_and_continue": true, + "same_original_job_and_candidate": true, + "markers_unchanged": true, + "image": { + "same_bound_source_frame": true, + "source_dimensions_px": [ + 2560, + 1377 + ], + "model_image_dimensions_px": [ + 2000, + 1076 + ], + "native_transform": "Photon Lanczos3 full-frame resize", + "dimension_mapping_note": 1.28, + "replayed_decoded_pixel_bytes_match": true, + "original_source_PNG_bytes_delivered_to_model": false, + "native_replayed_derived_PNG_bytes_match": true + }, + "cleanup": { + "owned_window_closed": true, + "runtime_cleanup_verified": true, + "fresh_native_initialize_status_DELETE_probe_passed": true, + "old_session_DELETE_status_not_inferred_from_fresh_probe": true, + "actual_extension_remove_deleteData_passed": true + }, + "original_trial_business_status": "success", + "original_first_job_attempts": 1, + "logical_actions": 4, + "physical_clicks": 7, + "work_terminal": { + "state": "review_ready", + "execution": "succeeded", + "completion": "partial" + } + }, + "integrity_and_cleanup": { + "candidate04_installed_payload_files_verified": 674, + "candidate05_installed_payload_files_verified": 674, + "both_installed_payloads_unchanged_after_live_test": true, + "model_and_threshold_sources_unchanged_count": 6, + "daily_configurations_unchanged_count": 2, + "owned_ports_without_listener_count": 5, + "tested_installation_roots_uninstalled_and_absent_count": 2, + "owned_services_stopped_after_runtime_cleanup": true, + "forced_service_exit_is_not_claimed_graceful": true + }, + "retained_first_failures": [ + { + "candidate": "04", + "workflow": "Notepad edit/menu/save", + "business_passed": false, + "reason": "Clipboard preservation rejected unsupported_format:not_started; no typing/save success claimed." + }, + { + "candidate": "04", + "workflow": "Assets/Images/Up/Notes", + "business_passed": false, + "reason": "pre_action_review_no_longer_active without recorded fine subcause; no retrospective exact-cause assertion." + } + ], + "separate_lock_contention_fix": { + "independent_offline_result": "closed_offline", + "scope": "Exact transient CommandQueueBusy propagation/revalidation and original job continuation; not proof of old live subcause." + }, + "technical_audits": { + "bare_runtime": { + "result": "passed_with_evidence_limits", + "report_sha256": "0540845421f9621cf7448796447e7b3d91363780c51d42d3e03814853a48d8f1" + }, + "native_pi": { + "result": "passed_with_evidence_limits", + "minimum_checks_passed": 11, + "report_sha256": "779cef0e701a2524669e8be67fc7d359caa46240ad863b87cb4b2b9a35d3648e" + }, + "scope": "Independent technical evidence review by agents; not independent catalog human/runtime approval." + }, + "limits": [ + "Controlled TEST double refusals, with original model receipts preserved; not natural-refusal accuracy.", + "Read-only navigation; no typing/save-to-disk qualification or unattended/general-success benchmark.", + "Main/operator-mediated actions and permissions are not current human-user UI clicks or measured human wait.", + "Freshness/hard gates and thresholds remain in force; Main review is not unconditional dispatch permission.", + "Pi saw a native full-frame resize of the bound source, not original PNG bytes or unscaled coordinates.", + "Exact freshness-deadline timing is not invented from missing live timestamps; code/offline checks are separate.", + "Native installer/remove confirmations used explicit Main-authorized synthetic callbacks; no native install-dialog UI qualification.", + "Work completion=partial is separate from the verified original four-step business completion.", + "No token, cost, latency or speed optimization is claimed; no mixed provider/cache usage is summed into cost." + ], + "catalog": { + "human_runtime_review": "not_reviewed", + "reviewer": null, + "approval": null, + "public_wheel_url": "https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/amadeus_agent_gui_runtime-0.0.4-py3-none-any.whl", + "public_source_url": "https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/extension-source-0.0.4.zip", + "uploaded": false, + "submitted": false, + "published": false + }, + "privacy": { + "public_inventory_only": true, + "raw_images_logs_sessions_private_configs_tokens_keys_or_local_absolute_paths_included": false + }, + "distribution": { + "release_tag": "instant-v0.1.6", + "runtime_version": "0.1.6", + "extension_version": "0.0.4", + "runtime_installer_url": "https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/AgentGUIRuntimeExecution-Setup.exe", + "wheel_url": "https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/amadeus_agent_gui_runtime-0.0.4-py3-none-any.whl", + "source_url": "https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/extension-source-0.0.4.zip", + "delivery_status": "Prepared locally; publisher must upload and verify served bytes before submitting the PR." + } +} diff --git a/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/README.md b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/README.md new file mode 100644 index 0000000..4d4fe8f --- /dev/null +++ b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/README.md @@ -0,0 +1,10 @@ +# Author evidence — not reviewed: Windows GUI Runtime 0.0.4 + +- **Versioned wheel URL and attached preflight.json:** [0.0.4 wheel](https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/amadeus_agent_gui_runtime-0.0.4-py3-none-any.whl), SHA-256 `9acc7f5d1d667d1d44e3750cdf0f351abefeb5e5136b7fad91d50d77a6d29b31` (13,822 bytes). [preflight.json](https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/preflight.json) is unchanged: fixed Windows/Python 3.12.10/Host `1840c8e` format, Host and curated-policy checks passed; `review_status=not_reviewed` and human/runtime review pending. +- **Source/build and usage/test evidence:** [Exact source ZIP](https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/extension-source-0.0.4.zip) (SHA-256 `4b6ef25b280cdfd4b8e3567ef8321e9a9137019cfd9738add3453dfb2c9ddd8d`, 16,069 bytes), [usage](https://github.com/Desolate-Jix/agent-gui-runtime/blob/instant-v0.1.6/integrations/amadeus/agent-review-instant/README.md), [inventory](https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/wheel-inventory.json) and [bounded installed acceptance](https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/PUBLIC_ACCEPTANCE.json). Runtime 0.1.6 is [installed separately](https://github.com/Desolate-Jix/agent-gui-runtime/releases/download/instant-v0.1.6/AgentGUIRuntimeExecution-Setup.exe). Bare MCP five-step and native installed Pi four-step read-only workflows completed after one explicit TEST double refusal, actual original Main before-frame review and separate same-job continuation. Retained failures, Pi full-frame resizing, cleanup and evidence limits are recorded; this is not an autonomous accuracy/speed benchmark. +- **First submission: ownership and code/asset rights links:** Proposed namespace `io.github.desolate-jix.gui-runtime`; [source repository](https://github.com/Desolate-Jix/agent-gui-runtime), [release history](https://github.com/Desolate-Jix/agent-gui-runtime/releases), [extension ISC license](https://github.com/Desolate-Jix/agent-gui-runtime/blob/instant-v0.1.6/integrations/amadeus/agent-review-instant/LICENSE). These are control/rights evidence for independent verification, not author-issued approval. No Runtime binary, artwork, model weights or credentials are bundled in the wheel; external Runtime/dependency licenses are separate. +- **Update: changes and any access/configuration/data migration:** First catalog submission. Compared with the earlier 0.0.2 launcher, 0.0.4 contains only native HTTP MCP plus Skill resources, with no external executable selector or dependencies. Configure a trusted loopback `runtime_url` and secret `connection_token`; provider keys/profiles/input authorization stay in Runtime. Bind MCP and Skill to Pi, enable, restart backend and open a new Work. Pre-action review uses the bound before frame, field review uses after; exact review and separate continue recipes retain the original job and hard gates. Extension removal does not stop Runtime. + +Independent catalog review/approval and maintainer publication remain outstanding. This PR supplies evidence only; it does not add catalog entries or an invented reviewer. Please revise this same submission PR. + +中文:本目录是首次入驻证据,不是 catalog 条目或批准。固定静态检查与两条受控实机流程分开记录;原失败和图像派生限制保留。独立维护者负责所有权、权利及运行审核,随后再准备 catalog 输入和独立 publication PR。 diff --git a/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/preflight.json b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/preflight.json new file mode 100644 index 0000000..68d9fba --- /dev/null +++ b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/preflight.json @@ -0,0 +1,514 @@ +{ + "checked": [ + "manifest", + "package_resources", + "skill_metadata", + "wheel_metadata" + ], + "checks": { + "catalog_policy": "passed", + "human_and_runtime_review": "pending", + "package_format": "passed", + "target_host": "passed" + }, + "environment": { + "platform": "win32", + "python": "3.12.10" + }, + "host_commit": "1840c8e4f646992ddaebea3139c8895f29743a8f", + "identity": { + "id": "io.github.desolate-jix.gui-runtime", + "sha256": "9acc7f5d1d667d1d44e3750cdf0f351abefeb5e5136b7fad91d50d77a6d29b31", + "version": "0.0.4" + }, + "inventory": [ + { + "after": "1de728cbfe2171d28fee0ce64cb68393388d136491f5c5be1387ae9ac68e1dcc", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui/__init__.py", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,3 @@", + "+\"\"\"Amadeus resource extension: native HTTP MCP declaration and execution Skill.\"\"\"", + "+", + "+__version__ = \"0.0.4\"" + ] + }, + { + "after": "a0c4e77a5a08431ed93ebb9a2be07156bf7e7830f9bf642739d4bb6cbc869409", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui/amadeus-extension.json", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,70 @@", + "+{", + "+ \"schema\": \"amadeus.extension/v0\",", + "+ \"id\": \"io.github.desolate-jix.gui-runtime\",", + "+ \"version\": \"0.0.4\",", + "+ \"display_name\": {", + "+ \"en\": \"Windows GUI Runtime\",", + "+ \"zh-CN\": \"Windows GUI \u6267\u884c\u8fd0\u884c\u65f6\"", + "+ },", + "+ \"description\": {", + "+ \"en\": \"Connect Pi to an operator-started, authenticated local Runtime over native HTTP MCP; includes an execution lifecycle Skill.\",", + "+ \"zh-CN\": \"\u901a\u8fc7\u539f\u751f HTTP MCP \u5c06 Pi \u8fde\u63a5\u5230\u64cd\u4f5c\u5458\u72ec\u7acb\u542f\u52a8\u3001\u5e26\u9274\u6743\u7684\u672c\u673a Runtime\uff0c\u5e76\u63d0\u4f9b\u6267\u884c\u6536\u5c3e Skill\u3002\"", + "+ },", + "+ \"author\": {", + "+ \"name\": \"Desolate-Jix\"", + "+ },", + "+ \"license\": \"ISC\",", + "+ \"engines\": {", + "+ \"amadeus_host_api\": \">=0.1,<0.2\",", + "+ \"platforms\": [", + "+ \"win32\"", + "+ ]", + "+ },", + "+ \"runtime\": {", + "+ \"kind\": \"none\"", + "+ },", + "+ \"config\": {", + "+ \"runtime_url\": {", + "+ \"type\": \"string\",", + "+ \"title\": \"Trusted loopback MCP URL / \u53ef\u4fe1\u672c\u673a MCP \u5730\u5740\",", + "+ \"required\": true,", + "+ \"default\": \"http://127.0.0.1:17665/mcp\"", + "+ },", + "+ \"connection_token\": {", + "+ \"type\": \"string\",", + "+ \"title\": \"Local MCP connection token (not a model API key) / \u672c\u673a\u8fde\u63a5\u5bc6\u94a5\uff08\u4e0d\u662f\u6a21\u578b API key\uff09\",", + "+ \"required\": true,", + "+ \"secret\": true", + "+ }", + "+ },", + "+ \"contributes\": {", + "+ \"mcp_server\": [", + "+ {", + "+ \"id\": \"execution\",", + "+ \"contract\": \"amadeus.mcp-server/v0\",", + "+ \"transport\": \"http\",", + "+ \"url\": \"${config.runtime_url}\",", + "+ \"bearer_token\": \"${config.connection_token}\"", + "+ }", + "+ ],", + "+ \"skill\": [", + "+ {", + "+ \"id\": \"gui-execution\",", + "+ \"contract\": \"amadeus.skill/v0\",", + "+ \"path\": \"skills/gui-execution\",", + "+ \"title\": {", + "+ \"en\": \"GUI execution\",", + "+ \"zh-CN\": \"GUI \u6267\u884c\"", + "+ }", + "+ }", + "+ ]", + "+ },", + "+ \"permissions\": {", + "+ \"host\": [],", + "+ \"os\": {", + "+ \"network\": [", + "+ \"*\"", + "+ ]", + "+ }", + "+ }", + "+}" + ] + }, + { + "after": "721dbd8a8a87cf7fff453d7640b8653d93a0edde227ee97773e2b2946083e817", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui/skills/gui-execution/SKILL.md", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,14 @@", + "+---", + "+name: gui-execution", + "+description: Execute an explicitly authorized Windows GUI task through the connected AgentGUI Runtime MCP, preserve original request and evidence identities, handle review without replaying input, and close owned windows and the Runtime session.", + "+---", + "+", + "+Read `references/runtime.md` before using the connected Runtime. Discover its actual tools and current schemas; Pi tool names may be namespaced or hashed, so never invent a tool name. This Skill supplies no tools, authority, executor, learning mode or shell route.", + "+", + "+Keep one Runtime MCP connection throughout the complete authorized Work task. The operator starts the authenticated loopback HTTP MCP daemon independently; this extension never launches Python, chooses executable paths, supplies model API keys or changes profiles. Confirm the operator's task scope and Runtime local-input setting; one input owner at a time. Start the execution host once, wait for ready, launch/select the intended window, use current bound observations, submit the actual task, and settle original receipts. A successful launch or asynchronous acknowledgement is not task success.", + "+", + "+For pending, unknown, timeout, interrupted input or unavailable images, keep the original request/run/command IDs and inspect their state. Never use a new ID to replay possibly executed input. Discover the running Runtime's actual tools and reported version; HTTP and pre-action Main review are not provided by the frozen 0.1.5 installer. At a real `pre_action_review_packet.v1` or `field_review_packet.v1`, request `agent_command_status` with `command_id=packet.execution_request_id` under a new outer request ID, then retrieve that status request's bound image with `instant_image`; the original execution is still pending. Use `view=before` for a pre-action candidate and `view=after` for a field result. Compare the original task target with the marked candidate/point for pre-action review; compare the already-entered text for field review. Inspect the exact bound evidence, copy `caller_controls.review.request` and add only the actual verdict/reason, then separately use the returned continue recipe. Review alone performs no input. Pre-action continuation keeps the original job/candidate and must pass fresh target-region and existing hard gates before one dispatch; field continuation does not retype and any submit suffix still uses normal gates and verification. If the service supplies no resumable ticket or the current candidate becomes stale, stop and report it. A handoff or version number is not a ticket. Do not manufacture hashes, wait IDs, success or a restart/replay.", + "+", + "+Close only windows launched by this task using the returned launch handle/process identity. Resolve owned save dialogs only when that specific choice is authorized. Verify `window_closed` before `instant_stop`, then poll `instant_status` until the host is down, pending IDs are empty and cleanup is verified. Only then release the native HTTP MCP session so a new Work can acquire ownership. A network disconnect does not cancel input or prove cleanup. Do not repeatedly reconnect, restart the daemon or steal an active owner to hide an uncertain result. Report task outcome separately from cleanup. Disabling the extension does not stop the independently started service.", + "+", + "+\u4e2d\u6587\u8981\u70b9\uff1a\u4ec5\u6267\u884c\u5f53\u524d\u660e\u786e\u6388\u6743\u7684\u4efb\u52a1\uff1b\u4fdd\u6301\u540c\u4e00\u8fde\u63a5\u548c\u539f\u59cb ID\uff1b\u672a\u77e5\u8f93\u5165\u7edd\u4e0d\u91cd\u653e\u3002\u524d\u7f6e\u5019\u9009\u5ba1\u6838\u770b before \u539f\u56fe\u4e0e\u539f\u5019\u9009\uff0c\u6587\u5b57\u7ed3\u679c\u5ba1\u6838\u770b after \u539f\u56fe\uff1b\u5747\u4f7f\u7528\u771f\u5b9e review\u2192\u5355\u72ec continue\uff0c\u5ba1\u6838\u672c\u8eab\u4e0d\u8f93\u5165\u3002\u524d\u7f6e\u7ee7\u7eed\u4ecd\u987b\u65b0\u9c9c\u5ea6\u548c\u8f93\u5165\u95e8\u7981\u901a\u8fc7\uff0c\u4e0d\u80fd\u5f3a\u884c\u6cbf\u7528\u53d8\u5316\u7684\u76ee\u6807\uff1b\u65e0\u7968\u636e\u5c31\u505c\u62a5\u3002\u53ea\u5173\u95ed\u672c\u8f6e\u81ea\u6709\u7a97\u53e3\u5e76\u9a8c\u8bc1\uff0c\u518d\u505c\u6b62\u4e0e\u786e\u8ba4\u5bbf\u4e3b\u6e05\u7406\u3002\u4e0d\u8981\u4f7f\u7528\u5b66\u4e60\u3001shell \u7ed5\u884c\u6216\u5220\u9664\u6d4f\u89c8\u5668\u8d44\u6599\u3002" + ] + }, + { + "after": "7e063de466aa83f7028d3ce82ebe9d0555a2eb2078d66742e6a176ab087e001d", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui/skills/gui-execution/references/runtime.md", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,107 @@", + "+# Runtime session and receipt contract / \u4f1a\u8bdd\u4e0e\u56de\u6267\u5408\u540c", + "+", + "+This resource extension connects to an operator-started, authenticated loopback HTTP MCP Runtime; it never launches external code. The connection token is distinct from provider API keys. Use the tools actually discovered on this connection. The logical tool names below are Runtime names, not predictions of Pi's namespaced model tool names. Use the active schema if the candidate reports a newer contract. Do not change profiles, thresholds or prompts to bypass a refusal.", + "+", + "+## Start and select / \u542f\u52a8\u4e0e\u9009\u62e9", + "+", + "+Call the discovered `instant_start` once, then `instant_status` until ready. Vision and Decision profiles are preconfigured; do not call `prepare_models` or any `learning_*` command. A selected target is session state.", + "+", + "+For an explicitly approved new application or shortcut, one `instant_run` argument example is:", + "+", + "+```json", + "+{\"request_id\":\"launch-001\",\"command\":{\"kind\":\"launch\",\"path\":\"C:\\\\approved-test\\\\application.lnk\",\"prefer_existing\":false},\"wait_ms\":10000,\"images\":\"none\"}", + "+```", + "+", + "+Read the actual returned launch/window ownership and exact handle/process_id. Never substitute a guessed handle. If selecting an already observed window, use the discovered identities in a command shaped `{\"kind\":\"select\",\"handle\":123,\"process_id\":456}`; a pre-existing user window does not become owned by this task.", + "+", + "+Capture the selected target with **only** `kind` in the command:", + "+", + "+```json", + "+{\"request_id\":\"capture-001\",\"command\":{\"kind\":\"capture\"},\"wait_ms\":10000,\"images\":\"after\"}", + "+```", + "+", + "+Do not put handle/process_id inside `capture`. Use the original images returned by `instant_run`/`instant_result`; the discovered `instant_image` can retrieve an available image by the original request_id. A new capture is a new observation, not replacement evidence for an older action. Never mix coordinates from old images with current window geometry.", + "+", + "+## Submit, wait and inspect / \u63d0\u4ea4\u3001\u7b49\u5f85\u4e0e\u6838\u5bf9", + "+", + "+Prefer the provided complete `task_plan` when the task calls for one; do not manually split it to evade checks. Use its actual active schema, explicit actions/verification and original run identity. There is no adapter step cap; Runtime budgets, evidence binding and admission still apply. `instant_run` accepts `request_id`, `command`, `wait_ms`, `detail` and `images`; choose a wait below the MCP client timeout. `instant_submit` is also asynchronous. A start receipt with status running is not plan completion.", + "+", + "+When pending, follow the returned `next` and call the discovered `instant_result` with the **same** outer request_id:", + "+", + "+```json", + "+{\"request_id\":\"launch-001\",\"detail\":\"full\",\"images\":\"both\"}", + "+```", + "+", + "+For an asynchronous `agent_command.v1`, preserve its command_id. Query it with a new outer request ID (a read-only status command, not a replay):", + "+", + "+```json", + "+{\"request_id\":\"status-001\",\"command\":{\"kind\":\"agent_command_status\",\"request\":{\"command_id\":\"original-command-id\"}},\"wait_ms\":10000,\"images\":\"after\"}", + "+```", + "+", + "+For task plans, inspect `instant_status.task_plan_run` and the original start/result receipts until a terminal outcome or explicit wait. Report actual completed steps, pending/review/failure and evidence, not merely whether a tool call returned. `result_unknown`, timeout, `action_executed=true`, interrupted typing, or missing after images never prove input did not happen. Do not resubmit with a new ID, start a competing plan, or use another input route to hide uncertainty.", + "+", + "+## Review / \u539f Agent \u5ba1\u6838", + "+", + "+Use the packet actually returned by the active service. A pre-action candidate", + "+and an already-entered field value are different review scopes. Neither a tool", + "+handoff nor a version marker authorizes guessing a ticket or bypassing a check.", + "+", + "+### Candidate before input / \u8f93\u5165\u524d\u7684\u5019\u9009", + "+", + "+When the Runtime returns a real `pre_action_review_packet.v1`, its original job", + "+is parked after authenticated Decision and ordinary-model nonpasses, with no", + "+native input claimed. Read `packet.execution_request_id` through", + "+`agent_command_status` using a new outer request ID and `images=none`, as in the", + "+status example below. Retrieve that status request's bound original **before**", + "+PNG with the discovered `instant_image`, for example:", + "+", + "+```json", + "+{\"request_id\":\"candidate-status-001\",\"view\":\"before\"}", + "+```", + "+", + "+`candidate-status-001` must be the actual successful status request ID, not the", + "+unfinished execution ID. Inspect the original task target, candidate point/box", + "+and bound original image. Do not replace it with a new capture or assume the", + "+locator's description proves the target correct. Only if the candidate satisfies", + "+the actual task, copy the returned `caller_controls.review.request` and add the", + "+actual `verdict=success` and a specific visual reason. Otherwise record failure", + "+with the genuine reason or cancel; do not repeatedly ask models to obtain a pass.", + "+", + "+Submit review through `task_plan`; it records Main's judgment and performs no", + "+click. Then submit the **separately returned**", + "+`caller_controls.continue.request`, retaining the original run/wait. This resumes", + "+the original job/candidate with a fresh target-region check and all ordinary", + "+input/identity/geometry/visibility/cancellation gates. A changed or expired", + "+candidate stops; do not restart, replan or synthesize a new approval to repeat", + "+it. The two original model refusals remain refusals, separate from Main's", + "+one-use approval. No new threshold or model prompt is selected by this Skill.", + "+", + "+### Entered field value / \u5df2\u8f93\u5165\u6587\u5b57", + "+", + "+The Runtime's Main review contract can park the original live input thread at `field_review_packet.v1` after an authenticated dual-model rejection. This contract shipped in Runtime 0.1.5; the HTTP entry point is a separate new capability. Use the running service's actual returned recipe and existing public MCP actions. At this wait, the original execution is not terminal: read `packet.execution_request_id`, issue `agent_command_status` with that command_id using a new outer request ID, and wait for that read-only status receipt:", + "+", + "+```json", + "+{\"request_id\":\"field-status-001\",\"command\":{\"kind\":\"agent_command_status\",\"request\":{\"command_id\":\"original-execution-request-id\"}},\"wait_ms\":10000,\"images\":\"none\"}", + "+```", + "+", + "+Then call the discovered `instant_image` with `{\"request_id\":\"field-status-001\",\"view\":\"after\"}`. Use the actual returned status request ID. Do not request image directly on the unfinished original execution, replace the bound after image with a new capture, or replay the input. The example command_id is a placeholder for the real packet identity.", + "+", + "+Inspect the exact original evidence bound to `caller_controls.review.request`. Copy that returned request and add only the actual `verdict` and `reason`; do not invent a review packet/hash or add wait_id to review. Submit through the existing task_plan command. A successful review only records the original Agent's judgment. Use the separately returned `caller_controls.continue.request` for explicit continue on the **original** run/wait; only then can that live thread resume without retyping. These projections are parameter recipes, not action authorization.", + "+", + "+This review only confirms already-entered text. If the original request has a submit suffix, its fresh target/candidate, input gates and result verification still apply; the review does not prove submit/search success or bypass a final-submit restriction. Released 0.1.4 is a separate baseline: some `field_review` failures have no resumable ticket. If the active host supplies no actual review/continue recipe, keep the first failure and stop/report; do not fabricate a ticket, restart/replay, relabel success or construct a successor to repeat input. The version marker alone does not prove the new capability. This package does not implement the Runtime repair or claim its real installed acceptance.", + "+", + "+\u4e2d\u6587\uff1a\u6587\u5b57\u7ed3\u679c Main \u5ba1\u6838\u5df2\u5728 0.1.5 \u53d1\u5e03\uff1bHTTP \u548c\u524d\u7f6e\u5019\u9009\u5ba1\u6838\u662f\u53e6\u5916\u7684\u80fd\u529b\u3002\u5148\u901a\u8fc7\u65b0\u5916\u5c42 agent_command_status \u67e5 packet.execution_request_id\uff0c\u518d\u5bf9\u8be5 status request \u53d6\u7ed1\u5b9a\u539f\u56fe\uff1a\u524d\u7f6e\u5019\u9009\u770b before\uff0c\u5df2\u8f93\u5165\u6587\u5b57\u770b after\u3002\u53ea\u6309\u5b9e\u9645 caller_controls.review\u2192\u5355\u72ec continue \u7eed\u539f run\uff1b\u524d\u7f6e\u5ba1\u6838\u4e0d\u8df3\u8fc7\u65b0\u9c9c\u5ea6\u53ca\u8f93\u5165\u95e8\u7981\uff0c\u6587\u5b57\u5ba1\u6838\u4e0d\u91cd\u8f93\uff0c\u4e5f\u4e0d\u4ee3\u8868 submit \u6210\u529f\u3002\u65e0\u771f\u5b9e\u7968\u636e\u3001\u5019\u9009\u53d8\u5316\u6216\u8fc7\u671f\u5c31\u505c\u62a5\uff0c\u4e0d\u4f2a\u9020 Main \u901a\u8fc7\u3002", + "+", + "+## Owned-window and host cleanup / \u81ea\u6709\u7a97\u53e3\u4e0e\u5bbf\u4e3b\u6536\u5c3e", + "+", + "+Once input has settled, close only a task-launched window. Substitute the exact handle/process_id read from its launch receipt into this shape:", + "+", + "+```json", + "+{\"request_id\":\"close-001\",\"command\":{\"kind\":\"close_launched_window\",\"handle\":123,\"process_id\":456},\"wait_ms\":10000,\"images\":\"after\"}", + "+```", + "+", + "+No `request.ownership` field is required. Keep and check the original launch identity; example integers are placeholders, not real targets. If `window_close_pending` exposes an owned modal, inspect the returned current dialog using select/capture. A close receipt does not authorize Save/Discard/Confirm; act only if the exact choice is separately in scope. Missing after evidence can mean the window has closed: inspect the original action receipt and verify disappearance instead of repeating the click. Confirm `window_closed` for each owned window.", + "+", + "+Then call `instant_stop`, poll `instant_status`, and require `host_alive=false`, `pending_ids=[]`, `cleanup_verified=true` and no unresolved cleanup error before disconnecting. Stop acknowledgement/cleanup_pending is not terminal cleanup. Host cleanup does not substitute for checking application-window closure. Do not close unrelated windows, uninstall the external Runtime, delete the extension's retained data, or reset/delete browser profiles, cookies, history or sessions.", + "+", + "+Report task success/failure/unknown, original request/run IDs and bound evidence, any assistance/recovery, owned-window closure, and host cleanup separately. HTTP disconnection is a transport boundary; it is not evidence of a successful task, cancellation or a fully settled Runtime. Release the HTTP MCP owner only after the explicit cleanup conditions above; a new Work can then initialize its own connection. Keep this lifecycle within one Work run. Reopening a Pi conversation is not resuming a live MCP connection. The independently started daemon has a separate lifetime and data directory; extension removal does not stop it or delete its data." + ] + }, + { + "after": "a7b328e973314256f26e53889e6cfd5bf95968859439cdc195424c0a3c778526", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/METADATA", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,132 @@", + "+Metadata-Version: 2.4", + "+Name: amadeus-agent-gui-runtime", + "+Version: 0.0.4", + "+Summary: Declarative HTTP MCP connection and Skill for an authenticated local Windows GUI Runtime", + "+License-Expression: ISC", + "+Requires-Python: <3.13,>=3.12", + "+Description-Content-Type: text/markdown", + "+License-File: LICENSE", + "+Dynamic: license-file", + "+", + "+# Amadeus Windows GUI Runtime extension 0.0.4 \u2014 HTTP candidate", + "+", + "+[\u7b80\u4f53\u4e2d\u6587](README.zh-CN.md)", + "+", + "+Connect Pi to an operator-started Windows GUI Runtime using **native Streamable", + "+HTTP MCP** and a packaged execution Skill. This is a preparation candidate for", + "+the curated plugin store, not an approved catalog entry or a published release.", + "+The previously published 0.0.2 wheel remains a separate stdio-launcher release.", + "+", + "+## What runs where", + "+", + "+| Component | Responsibility |", + "+| --- | --- |", + "+| Amadeus / Pi | Plans work, owns its approval UI, and uses the native HTTP MCP client. |", + "+| Extension 0.0.4 | Resource-only HTTP connection declaration and Skill; no launcher, executable selector, model weights or dependencies. |", + "+| Local Runtime | Owns the authenticated loopback MCP service, vision/Decision configuration, input authorization, receipts and cleanup. |", + "+", + "+The Host uses Python 3.12. The candidate API Runtime supports a separate Python", + "+3.12 environment while retaining Python 3.11; optional local-model setup remains", + "+on its existing Python 3.11 contract. A shared Python minor version does **not**", + "+mean sharing a virtual environment. Each component retains its locked dependencies.", + "+The frozen 0.1.5 installer has no HTTP MCP entry point: use a build containing the", + "+new maintained entry point and record its version/source identity.", + "+", + "+## Start the local Runtime", + "+", + "+Prepare the API environment from that Runtime build's documented setup. New API", + "+environments default to Python 3.12; existing supported 3.11 environments can be", + "+retained. Configure vision, Decision and ordinary review in the Runtime profiles.", + "+Set their key environment variables in the Runtime process environment.", + "+", + "+Create a strong random **local connection token** of at least 32 characters and", + "+store it privately. This is distinct from every model-provider API key. Prompt", + "+for it without echoing it, then start the service in a dedicated console:", + "+", + "+```powershell", + "+$RuntimeRoot = 'C:\\Path\\To\\Runtime'", + "+$RuntimeData = 'C:\\Path\\To\\GuiRuntimeData'", + "+$VisionProfile = 'C:\\Path\\To\\Config\\vision-api.json'", + "+$DecisionProfile = 'C:\\Path\\To\\Config\\decision.json'", + "+$env:AGENT_GUI_MCP_TOKEN = [System.Net.NetworkCredential]::new('', (Read-Host 'Local MCP connection token' -AsSecureString)).Password", + "+Set-Location -LiteralPath $RuntimeRoot", + "+& '.\\scripts\\setup_instant.ps1' -RecognitionSource external_api -ApiProfile $VisionProfile -DataDirectory $RuntimeData", + "+& '.\\.venv-agent\\Scripts\\python.exe' -I -B -X utf8 scripts/start_instant_mcp_http.py `", + "+ --data-dir $RuntimeData --port 17665 --recognition-source external_api `", + "+ --api-profile $VisionProfile --decision-profile $DecisionProfile", + "+```", + "+", + "+Run setup once; it may download the locked dependencies. Its generated standalone", + "+stdio MCP configuration is not needed for this extension. Omit `-PythonVersion`", + "+to retain an existing supported API environment; an explicit different minor", + "+version requires a separate environment rather than an in-place replacement.", + "+", + "+Input is disabled by default. Add the existing `--allow-local-input` option only", + "+for an explicitly authorized desktop task; its existing meaning includes turning", + "+automatic risk interception off. A token authenticates the connection; it does", + "+not authorize arbitrary clicks, submissions, payments or unrelated file changes.", + "+The service binds only `127.0.0.1` and checks Host/Origin before MCP processing.", + "+Do not expose it through a public bind, tunnel or reverse proxy.", + "+", + "+## Install and connect", + "+", + "+1. Use a qualified Amadeus build with native HTTP MCP and Skill contributions.", + "+ Current development checks target upstream `9547f39` / `0.17.1-alpha.1`.", + "+2. Install the **actual candidate wheel** in Settings \u2192 Extensions. Inspect the", + "+ package identity and disclosure; installation starts disabled.", + "+3. Set `runtime_url` to `http://127.0.0.1:17665/mcp` (or the port you selected).", + "+ Use only the trusted local Runtime endpoint. Set secret `connection_token` to", + "+ the token supplied to the Runtime console.", + "+4. Bind both MCP and Skill to Pi, explicitly enable, apply the backend restart,", + "+ and open a new Work session. Saved configuration is not proof it is loaded.", + "+5. Discover tools and inspect `instant_status` before requesting input. Check the", + "+ reported Runtime version and original receipts; do not assume a service has", + "+ loaded the source you most recently edited.", + "+", + "+The extension cannot start, install or upgrade the external Runtime. It does not", + "+receive provider API keys. The `network: [\"*\"]` declaration discloses configurable", + "+HTTP access; it is not an OS sandbox or permission to operate the desktop.", + "+", + "+## Task and connection lifecycle", + "+", + "+Use the packaged [Skill](src/amadeus_agent_gui/skills/gui-execution/SKILL.md) and", + "+[reference](src/amadeus_agent_gui/skills/gui-execution/references/runtime.md).", + "+Keep one MCP connection and one input owner throughout a task. Pending/unknown", + "+input retains its original request/run IDs; never replay it under a new ID.", + "+", + "+The 0.0.4 Skill describes both field-result review and the new pre-action Main", + "+review contract. At a genuine `pre_action_review_packet.v1`, read the original", + "+job under a new status request, view its bound **before** image, then use the", + "+returned review and separate continue recipes. Review alone does not click.", + "+Continuation retains the original job and candidate, with a fresh target-region", + "+and input-gate check before one native dispatch. The older", + "+`field_review_packet.v1` reviews already-entered text using its **after** image.", + "+These are different scopes; never substitute a field ticket for a candidate.", + "+The new pre-action implementation and installed acceptance are in progress; a", + "+version number alone does not establish the active service's capability.", + "+", + "+Close only task-owned windows, then call `instant_stop` and poll until", + "+`host_alive=false`, `pending_ids=[]`, and `cleanup_verified=true`. A transport", + "+disconnect is not cancellation or cleanup. A new Work may connect only after", + "+the previous owner has completed the service's explicit release conditions.", + "+Disabling/removing the extension does not shut down the independently started", + "+Runtime daemon or delete its data; stop the service deliberately after cleanup.", + "+", + "+## Migration and store review", + "+", + "+0.0.3 changes configuration: `runtime_root`, `runtime_python`, profiles,", + "+`api_key`, and `allow_local_input` no longer belong to the extension. Configure", + "+these at the Runtime service; enter the two new connection settings explicitly.", + "+Do not reinterpret an old provider API key as a connection token. Historical", + "+0.0.2 bytes and acceptance evidence are not replaced by this candidate.", + "+", + "+Curated admission excludes configuration selecting executables/modules. HTTP", + "+uses the existing native contract rather than bypassing review through another", + "+launcher. Candidate wheel checks, pinned author preflight, native protocol calls,", + "+desktop execution and independent catalog review are separate results. Check", + "+the preparation report for what actually ran; unrun layers remain unqualified.", + "+No author-written approval or fictional reviewer is included.", + "+", + "+The package code is ISC. Runtime licensing and third-party components remain", + "+separate. No user data, real profiles, tokens, model weights or Runtime payload", + "+are embedded in this wheel." + ] + }, + { + "after": "6df5052defa280b94264bd2d69909309f56edfb33f80edbb6d77fcc5f1083ec6", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/RECORD", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,10 @@", + "+amadeus_agent_gui/__init__.py,sha256=Hecoy_4hcdKP7gzmTLaDkziNE2SR9cW-E4eumsaOHcw,106", + "+amadeus_agent_gui/amadeus-extension.json,sha256=oMTneloIQx7ZPruaK-BxVr9-eDD5v2QnOdS7bLyGlAk,1733", + "+amadeus_agent_gui/skills/gui-execution/SKILL.md,sha256=ch29ioqHz3__RT12QLhlPZOg7d4iful3c-KylGCD6Bc,3817", + "+amadeus_agent_gui/skills/gui-execution/references/runtime.md,sha256=fgY95Gaqg_cCjTzoLr6dBVWi6yB41mdC5qF2qwh-AB0,10371", + "+amadeus_agent_gui_runtime-0.0.4.dist-info/licenses/LICENSE,sha256=D46FyxeCem6YcHT-E1Iaxi1zYmTtYqsjMRIjBfuWNgg,743", + "+amadeus_agent_gui_runtime-0.0.4.dist-info/METADATA,sha256=p7Mo6XMxQlbyblOInmz9W_lZaIWUOc3BlUJMCjx3hSY,7631", + "+amadeus_agent_gui_runtime-0.0.4.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91", + "+amadeus_agent_gui_runtime-0.0.4.dist-info/entry_points.txt,sha256=AoPrHX1g4Fr6euOYFtxQgXRitWcqVEjmUO_rN1Ku0iY,76", + "+amadeus_agent_gui_runtime-0.0.4.dist-info/top_level.txt,sha256=Fu0mO6PcbIoTnnSfnIlofyDV2Eno7leeQF08mVojxYo,18", + "+amadeus_agent_gui_runtime-0.0.4.dist-info/RECORD,," + ] + }, + { + "after": "2b6eb4118ce7cd7b09601406aa623c553c4476265836f0d9c16f5c061f7efcc0", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/WHEEL", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,5 @@", + "+Wheel-Version: 1.0", + "+Generator: setuptools (83.0.0)", + "+Root-Is-Purelib: true", + "+Tag: py3-none-any", + "+" + ] + }, + { + "after": "0283eb1d7d60e05afa7ae39816dc50817462b5672a5448e650efeb3752aed226", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/entry_points.txt", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,2 @@", + "+[amadeus.extensions]", + "+io.github.desolate-jix.gui-runtime = amadeus_agent_gui" + ] + }, + { + "after": "0f8e85cb17827a6e987074fe13521ac62d736264ed62ab2331122305fb963608", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/licenses/LICENSE", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1,15 @@", + "+ISC License", + "+", + "+Copyright (c) 2026 Desolate-Jix", + "+", + "+Permission to use, copy, modify, and/or distribute this software for any", + "+purpose with or without fee is hereby granted, provided that the above", + "+copyright notice and this permission notice appear in all copies.", + "+", + "+THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES", + "+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF", + "+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR", + "+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES", + "+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN", + "+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF", + "+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." + ] + }, + { + "after": "16ed263ba3dc6c8a139e749f9c89687f20d5d849e8ee579e405d3c995a23c58a", + "before": null, + "diff_truncated": false, + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/top_level.txt", + "status": "added", + "text_diff": [ + "--- ", + "+++ ", + "@@ -0,0 +1 @@", + "+amadeus_agent_gui" + ] + } + ], + "next_step": "Attach this report to the submission PR; ownership, rights, runtime and independent review remain required.", + "not_checked": [ + "runtime", + "native_theme", + "remote_services", + "catalog_review" + ], + "ok": true, + "review_status": "not_reviewed" +} diff --git a/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/wheel-inventory.json b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/wheel-inventory.json new file mode 100644 index 0000000..9abb8bc --- /dev/null +++ b/catalog/review-candidates/io.github.desolate-jix.gui-runtime/0.0.4/wheel-inventory.json @@ -0,0 +1,52 @@ +[ + { + "path": "amadeus_agent_gui/__init__.py", + "bytes": 106, + "sha256": "1de728cbfe2171d28fee0ce64cb68393388d136491f5c5be1387ae9ac68e1dcc" + }, + { + "path": "amadeus_agent_gui/amadeus-extension.json", + "bytes": 1733, + "sha256": "a0c4e77a5a08431ed93ebb9a2be07156bf7e7830f9bf642739d4bb6cbc869409" + }, + { + "path": "amadeus_agent_gui/skills/gui-execution/SKILL.md", + "bytes": 3817, + "sha256": "721dbd8a8a87cf7fff453d7640b8653d93a0edde227ee97773e2b2946083e817" + }, + { + "path": "amadeus_agent_gui/skills/gui-execution/references/runtime.md", + "bytes": 10371, + "sha256": "7e063de466aa83f7028d3ce82ebe9d0555a2eb2078d66742e6a176ab087e001d" + }, + { + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/licenses/LICENSE", + "bytes": 743, + "sha256": "0f8e85cb17827a6e987074fe13521ac62d736264ed62ab2331122305fb963608" + }, + { + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/METADATA", + "bytes": 7631, + "sha256": "a7b328e973314256f26e53889e6cfd5bf95968859439cdc195424c0a3c778526" + }, + { + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/WHEEL", + "bytes": 91, + "sha256": "2b6eb4118ce7cd7b09601406aa623c553c4476265836f0d9c16f5c061f7efcc0" + }, + { + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/entry_points.txt", + "bytes": 76, + "sha256": "0283eb1d7d60e05afa7ae39816dc50817462b5672a5448e650efeb3752aed226" + }, + { + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/top_level.txt", + "bytes": 18, + "sha256": "16ed263ba3dc6c8a139e749f9c89687f20d5d849e8ee579e405d3c995a23c58a" + }, + { + "path": "amadeus_agent_gui_runtime-0.0.4.dist-info/RECORD", + "bytes": 1001, + "sha256": "6df5052defa280b94264bd2d69909309f56edfb33f80edbb6d77fcc5f1083ec6" + } +]