ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
@@ -0,0 +1,7 @@
{"step": 1, "timestamp_utc": "2026-08-03T15:29:27.512482+00:00", "note": "Open LibreOffice Options with its keyboard shortcut.", "action": "import pyautogui, time\npyautogui.hotkey('alt','f12')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-001.png"}
{"step": 2, "timestamp_utc": "2026-08-03T15:29:48.301346+00:00", "note": "Expand the Load/Save settings category.", "action": "import pyautogui, time\npyautogui.click(575,580)\ntime.sleep(2)", "reward": 0, "done": false, "info": {}, "screenshot": "step-002.png"}
{"step": 3, "timestamp_utc": "2026-08-03T15:30:16.116263+00:00", "note": "Open the Load/Save subtree using its disclosure arrow.", "action": "import pyautogui, time\npyautogui.click(519,579)\ntime.sleep(2)", "reward": 0, "done": false, "info": {}, "screenshot": "step-003.png"}
{"step": 4, "timestamp_utc": "2026-08-03T15:30:39.750396+00:00", "note": "Open Load/Save > General, where recovery auto-save is configured.", "action": "import pyautogui, time\npyautogui.click(578,602)\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-004.png"}
{"step": 5, "timestamp_utc": "2026-08-03T15:31:09.739262+00:00", "note": "Enable AutoRecovery saving and change its interval from 10 minutes to 3 minutes.", "action": "import pyautogui, time\npyautogui.click(827,398)\ntime.sleep(1)\npyautogui.click(1121,398)\npyautogui.hotkey('ctrl','a')\npyautogui.write('3')\ntime.sleep(2)", "reward": 0, "done": false, "info": {}, "screenshot": "step-005.png"}
{"step": 6, "timestamp_utc": "2026-08-03T15:31:41.122618+00:00", "note": "Commit the settings, then reopen Options to verify the persisted value before freezing.", "action": "import pyautogui, time\npyautogui.click(1437,859)\ntime.sleep(3)\npyautogui.hotkey('alt','f12')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-006.png"}
{"step": 7, "timestamp_utc": "2026-08-03T15:32:12.478588+00:00", "note": "Close the verified Options dialog without altering the persisted setting.", "action": "import pyautogui, time\npyautogui.click(1421,858)\ntime.sleep(2)", "reward": 0, "done": false, "info": {}, "screenshot": "step-007.png"}
@@ -0,0 +1,13 @@
{"step": 1, "timestamp_utc": "2026-08-03T15:36:07.393867+00:00", "note": "Open the Impress View menu to switch from the slide canvas to presenter Notes view.", "action": "import pyautogui, time\npyautogui.click(175,75)\ntime.sleep(2)", "reward": 0, "done": false, "info": {}, "screenshot": "step-001.png"}
{"step": 2, "timestamp_utc": "2026-08-03T15:36:37.723337+00:00", "note": "Switch the selected slide into Notes view.", "action": "import pyautogui, time\npyautogui.click(207,151)\ntime.sleep(4)", "reward": 0, "done": false, "info": {}, "screenshot": "step-002.png"}
{"step": 3, "timestamp_utc": "2026-08-03T15:37:15.236852+00:00", "note": "Advance to slide 2 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-003.png"}
{"step": 4, "timestamp_utc": "2026-08-03T15:37:50.524210+00:00", "note": "Advance to slide 3 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-004.png"}
{"step": 5, "timestamp_utc": "2026-08-03T15:38:14.951726+00:00", "note": "Advance to slide 4 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-005.png"}
{"step": 6, "timestamp_utc": "2026-08-03T15:38:50.832395+00:00", "note": "Advance to slide 5 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-006.png"}
{"step": 7, "timestamp_utc": "2026-08-03T15:39:15.292584+00:00", "note": "Advance to slide 6 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-007.png"}
{"step": 8, "timestamp_utc": "2026-08-03T15:39:40.966594+00:00", "note": "Advance to slide 7 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-008.png"}
{"step": 9, "timestamp_utc": "2026-08-03T15:40:08.165115+00:00", "note": "Advance to slide 8 in Notes view to check whether it has a presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-009.png"}
{"step": 10, "timestamp_utc": "2026-08-03T15:41:46.354993+00:00", "note": "Advance to slide 9 in Notes view to read its presenter note.", "action": "import pyautogui, time\npyautogui.press('pagedown')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-010.png"}
{"step": 11, "timestamp_utc": "2026-08-03T15:42:11.114457+00:00", "note": "Open LibreOffice Writer from the visible launcher to create the requested unformatted document.", "action": "import pyautogui, time\npyautogui.click(35, 336)\ntime.sleep(6)", "reward": 0, "done": false, "info": {}, "screenshot": "step-011.png"}
{"step": 12, "timestamp_utc": "2026-08-03T15:42:33.891841+00:00", "note": "Enter only the eight actual presenter-note texts in slide order as plain paragraphs, then open Save As.", "action": "import pyautogui, time\ntext = 'This is opening slide.\\nCover slide option #1\\nCover slide option #3\\nThis is a graph.\\nThis is a table.\\nThis is item lists.\\nThis is an inserted image.\\nBlank ending slide'\npyautogui.write(text, interval=0.01)\ntime.sleep(3)\npyautogui.hotkey('ctrl', 'shift', 's')\ntime.sleep(4)", "reward": 0, "done": false, "info": {}, "screenshot": "step-012.png"}
{"step": 13, "timestamp_utc": "2026-08-03T15:43:14.315037+00:00", "note": "Choose the Desktop, name the file notes.docx, and save in Word 2007-365 format.", "action": "import pyautogui, time\npyautogui.click(457, 247)\ntime.sleep(2)\npyautogui.click(1000, 164)\npyautogui.hotkey('ctrl', 'a')\npyautogui.write('notes.docx', interval=0.08)\ntime.sleep(1)\npyautogui.click(1551, 164)\ntime.sleep(5)", "reward": 0, "done": false, "info": {}, "screenshot": "step-013.png"}
@@ -0,0 +1,3 @@
{"step": 1, "timestamp_utc": "2026-08-03T15:33:47.310918+00:00", "note": "Enter a VLOOKUP in F2, mapping the headoffice in E2 to the fixed branch/officer table A2:B7.", "action": "import pyautogui, time\n# Go directly to the first output cell.\npyautogui.click(145,185)\npyautogui.hotkey('ctrl','a')\npyautogui.write('F2')\npyautogui.press('enter')\n# Enter a VLOOKUP against the fixed branch/officer table.\npyautogui.write('=VLOOKUP(E2;$A$2:$B$7;2;0)', interval=0.03)\npyautogui.press('enter')\ntime.sleep(3)", "reward": 0, "done": false, "info": {}, "screenshot": "step-001.png"}
{"step": 2, "timestamp_utc": "2026-08-03T15:34:13.454292+00:00", "note": "Select F2:F12 and fill the VLOOKUP formula down so each row uses its own headoffice reference.", "action": "import pyautogui, time\npyautogui.click(145,185)\npyautogui.hotkey('ctrl','a')\npyautogui.write('F2:F12')\npyautogui.press('enter')\npyautogui.hotkey('ctrl','d')\ntime.sleep(4)", "reward": 0, "done": false, "info": {}, "screenshot": "step-002.png"}
{"step": 3, "timestamp_utc": "2026-08-03T15:34:37.759069+00:00", "note": "Save the completed workbook in place.", "action": "import pyautogui, time\npyautogui.hotkey('ctrl','s')\ntime.sleep(5)", "reward": 0, "done": false, "info": {}, "screenshot": "step-003.png"}
@@ -0,0 +1,75 @@
{
"benchmark": "OSWorld-Verified",
"operator": "Codex acting as the human operator",
"source_commit": "8365edc975efd0477a0d62444a5beed562ab5a7b",
"environment": "Upstream Docker/KVM Ubuntu VM with Ubuntu.qcow2; all computer interaction used visible pyautogui actions through the benchmark environment.",
"artifact_policy": "Full-resolution step screenshots remain outside Git. The adjacent easy-, medium-, and hard-trajectory.jsonl files preserve every exact pyautogui action submitted before evaluation; this file preserves the readable trajectory and first official result.",
"cases": [
{
"tier": "easy",
"task_id": "2cd43775-7085-45d8-89fa-9e35c0a915cf",
"about": "Enable LibreOffice AutoRecovery and set its interval to three minutes.",
"trajectory": [
{"step": 1, "note": "Open LibreOffice Options with its keyboard shortcut.", "action": "pyautogui.hotkey('alt','f12')"},
{"step": 2, "note": "Select the Load/Save settings category.", "action": "pyautogui.click(575,580)"},
{"step": 3, "note": "Expand the Load/Save subtree.", "action": "pyautogui.click(519,579)"},
{"step": 4, "note": "Open Load/Save > General.", "action": "pyautogui.click(578,602)"},
{"step": 5, "note": "Enable AutoRecovery and replace 10 with 3 minutes.", "action": "pyautogui.click(827,398); pyautogui.click(1121,398); pyautogui.hotkey('ctrl','a'); pyautogui.write('3')"},
{"step": 6, "note": "Commit the settings and reopen Options to verify persistence.", "action": "pyautogui.click(1437,859); pyautogui.hotkey('alt','f12')"},
{"step": 7, "note": "Close the verified dialog without changing it.", "action": "pyautogui.click(1421,858)"}
],
"frozen_before_evaluation": true,
"official_result": 1,
"result": "passed",
"evaluation_explanation": "The official LibreOffice configuration evaluator found AutoRecovery enabled with a three-minute interval."
},
{
"tier": "medium",
"task_id": "7e429b8d-a3f0-4ed0-9b58-08957d00b127",
"about": "Use a branch/officer lookup table in Calc to fill officer names for every row in a second table.",
"trajectory": [
{"step": 1, "note": "Enter a VLOOKUP in F2 against the fixed A2:B7 lookup table.", "action": "Select F2; enter =VLOOKUP(E2;$A$2:$B$7;2;0); press Enter"},
{"step": 2, "note": "Fill the formula through all destination rows.", "action": "Select F2:F12; press Ctrl+D"},
{"step": 3, "note": "Save the completed workbook in place.", "action": "pyautogui.hotkey('ctrl','s')"}
],
"frozen_before_evaluation": true,
"official_result": 1.0,
"result": "passed",
"evaluation_explanation": "The official spreadsheet evaluator found the correct officer for every branch row. The absolute lookup range remained fixed while E2 changed by row."
},
{
"tier": "hard",
"task_id": "51f5801c-18b3-4f25-b0c3-02f85507a078",
"about": "Extract all real presenter notes from an Impress presentation into an unformatted Word document named notes.docx on the Desktop.",
"trajectory": [
{"step": 1, "note": "Open Impress's View menu.", "action": "pyautogui.click(175,75)"},
{"step": 2, "note": "Switch to Notes view.", "action": "pyautogui.click(207,151)"},
{"step": 3, "note": "Advance to slide 2 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 4, "note": "Advance to slide 3 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 5, "note": "Advance to slide 4 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 6, "note": "Advance to slide 5 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 7, "note": "Advance to slide 6 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 8, "note": "Advance to slide 7; observe only the empty Click to add Notes placeholder.", "action": "pyautogui.press('pagedown')"},
{"step": 9, "note": "Advance to slide 8 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 10, "note": "Advance to slide 9 and read its note.", "action": "pyautogui.press('pagedown')"},
{"step": 11, "note": "Open LibreOffice Writer from the visible launcher.", "action": "pyautogui.click(35,336)"},
{"step": 12, "note": "Type only the eight real note texts in slide order and open Save As.", "action": "Type eight plain paragraphs; press Ctrl+Shift+S"},
{"step": 13, "note": "Choose Desktop, name the file notes.docx, and save as Word 2007-365.", "action": "Select Desktop; type notes.docx; click Save"}
],
"extracted_text": [
"This is opening slide.",
"Cover slide option #1",
"Cover slide option #3",
"This is a graph.",
"This is a table.",
"This is item lists.",
"This is an inserted image.",
"Blank ending slide"
],
"frozen_before_evaluation": true,
"official_result": 1,
"result": "passed",
"evaluation_explanation": "The official artifact evaluator accepted Desktop/notes.docx. It contained the eight actual presenter notes in order, omitted slide 7's empty placeholder, and added no slide numbers or formatting."
}
]
}