{
  "file": "F33-sdk-remote-client.md",
  "bullet": "Secrets for the agent (`F33.conversation-secrets`).",
  "ids": [
    "F33.conversation-secrets"
  ],
  "line": 1488,
  "script": "QA_F33_TOKEN=\"qa-f33-$(date +%s%N)\"\nexport QA_F33_TOKEN\ncontrol-agent-server exec --env PYTHONPATH=\"$F33\" --save F33.conversation-secrets/probe -- .venv/bin/python - <<'PY'\nimport os\nimport f33\nfrom openhands.sdk import Conversation\nfrom openhands.sdk.event import ObservationEvent\n\nvalue = os.environ[\"QA_F33_TOKEN\"]\nseen = []\nws = f33.workspace(\"secret\")\nconv = Conversation(agent=f33.agent(), workspace=ws, visualizer=None, delete_on_close=False,\n                    callbacks=[lambda e: isinstance(e, ObservationEvent) and seen.append(e.model_dump_json())])\nconv.update_secrets({\"QA_F33_TOKEN\": value, **ws.get_secrets(names=[\"QA_F33_LOOKUP\"])})\nconv.send_message('Run this exact shell command, which stores only hash prefixes, then stop: '\n                  'for v in \"$QA_F33_TOKEN\" \"$QA_F33_LOOKUP\"; do printf %s \"$v\" | sha256sum | cut -c1-16; done > qa-f33-secret.sha')\nconv.run(timeout=300)\nassert seen and not any(value in o or \"qa-f33-lookup-value\" in o for o in seen), seen\nf33.emit(\"secret\", cid=str(conv.id), observations=len(seen))\nconv.close()\nPY\nSEC=$(jq -r .cid \"$F33/secret.json\")\n{ printf %s \"$QA_F33_TOKEN\" | sha256sum | cut -c1-16; printf %s qa-f33-lookup-value | sha256sum | cut -c1-16; } > \"$F33/qa-f33-expected.sha\"\ncmp \"$F33/qa-f33-expected.sha\" \"$F33/secret/qa-f33-secret.sha\"\ncontrol-agent-server conversation events \"$SEC\" --kinds ObservationEvent --expect-min 1 --save F33.conversation-secrets/observations\nprintf %s \"$QA_F33_TOKEN\" > \"$F33/qa-f33-grep-control.txt\"\ncontrol-agent-server state grep --env-value QA_F33_TOKEN --glob 'fixtures/qa-f33/*'\ncontrol-agent-server state grep --env-value QA_F33_TOKEN --glob 'server/workspace/conversations/**/*' --expect-none\nenv QA_F33_SESSION_KEY=\"$(cat \"$AGENT_SERVER_VERIFY_RUN/private/session_api_key\")\" \\\n  control-agent-server state grep --env-value QA_F33_SESSION_KEY --glob 'server/workspace/conversations/**/*' --expect-none\ncontrol-agent-server api DELETE /api/settings/secrets/QA_F33_LOOKUP --expect 200\n",
  "exit_code": 0,
  "elapsed_ms": 20639,
  "failed_line": null,
  "failed_command": null,
  "stdout": "{\n  \"ok\": true,\n  \"exit_code\": 0,\n  \"elapsed_ms\": 17902,\n  \"stdout_tail\": \"{\\\"cid\\\": \\\"6dda3451-cce3-4fdf-bafb-4c169dd7e643\\\", \\\"observations\\\": 1}\\n\",\n  \"stderr_tail\": \"[10/13/26 03:54:15] INFO     run() triggered         remote_conversation.py:1335\\n                             successfully: <Response                            \\n                             [200 OK]>                                          \\n[10/13/26 03:54:19] INFO     Run completed via       remote_conversation.py:1408\\n                             post-run WebSocket                                 \\n                             state update (status:                              \\n                             finished, elapsed:                                 \\n                             4.1s)                                              \\n\",\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-034709-4e02-map-f33/evidence/F33.conversation-secrets/probe.json\"\n}\n{\n  \"ok\": true,\n  \"id\": \"6dda3451-cce3-4fdf-bafb-4c169dd7e643\",\n  \"total\": 11,\n  \"kinds\": {\n    \"SystemPromptEvent\": 1,\n    \"MessageEvent\": 2,\n    \"ConversationStateUpdateEvent\": 6,\n    \"ActionEvent\": 1,\n    \"ObservationEvent\": 1\n  },\n  \"matching\": 1,\n  \"events\": [\n    {\n      \"id\": \"72bc9e8c-793c-48e7-b80c-5f99dfc98e9f\",\n      \"kind\": \"ObservationEvent\",\n      \"source\": \"environment\",\n      \"timestamp\": \"2026-10-13T03:54:17.713839\",\n      \"tool_name\": \"terminal\",\n      \"observation\": \"{\\\"content\\\": [{\\\"cache_prompt\\\": false, \\\"type\\\": \\\"text\\\", \\\"text\\\": \\\"\\\"}], \\\"is_error\\\": false, \\\"command\\\": \\\"for v in \\\\\\\"$QA_F33_TOKEN\\\\\\\" \\\\\\\"$QA_F33_LOOKUP\\\\\\\"; do printf %s \\\\\\\"$v\\\\\\\" | sha256sum | cut -c1-16; done > qa-f33-secret.sha\\\", \\\"exit_code\\\": 0, \\\"timeout\\\": false, \\\"metadata\\\": {\\\"exit_code\\\": 0, \\\"pid\\\": -1, \\\"usernam\\u2026\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-034709-4e02-map-f33/evidence/F33.conversation-secrets/observations.json\"\n}\n{\n  \"ok\": true,\n  \"glob\": \"fixtures/qa-f33/*\",\n  \"files_with_match\": [\n    \"fixtures/qa-f33/qa-f33-grep-control.txt\"\n  ],\n  \"matches\": 1\n}\n{\n  \"ok\": true,\n  \"glob\": \"server/workspace/conversations/**/*\",\n  \"files_with_match\": [],\n  \"matches\": 0\n}\n{\n  \"ok\": true,\n  \"glob\": \"server/workspace/conversations/**/*\",\n  \"files_with_match\": [],\n  \"matches\": 0\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"DELETE\",\n    \"path\": \"/api/settings/secrets/QA_F33_LOOKUP\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"16\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"deleted\": true\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 72\n}\n",
  "stderr": ""
}
