Skip to content

feat(contrib): add web Pro Drive toolkit - #2

Merged
Nagi-ovo merged 6 commits into
voyager-crew:mainfrom
TanChuping:contrib/web-pro-kit
Oct 20, 2026
Merged

Nagi-ovo merged 6 commits into
voyager-crew:mainfrom
TanChuping:contrib/web-pro-kit

Conversation

@TanChuping

Copy link
Copy Markdown
Contributor

Why

A Python toolkit for agents that hand ChatGPT web Pro several tasks over the same repository through Google Drive: a persistent repository mirror on Drive, a request file for changing a running task without sending another message, and a delivery marker the local agent can wait on. Offered as a self-contained contrib/ directory, not wired into the CLI.

How it relates to the CLI

  • It builds on --timebox, --approve-apps and --drive rather than reimplementing them; the suggested task header is submitted with voyager ask --timebox 70.
  • --drive uploads specified files per question with rclone; the mirror keeps one committed snapshot of a repository at a stable Drive location across questions (text layer with file/symbol index and redaction, optional binary volumes, MIRROR.json with commit and hashes).
  • Suggested merge: keep it as is under contrib/, outside the npm package. If something moves into the CLI later, the mirror and the versioned request file are the candidates; the sandbox reminder hooks and prompt examples fit better as optional recipes. contrib/web-pro-kit/README.md says the same for an agent reading it cold.

Outline

contrib/web-pro-kit/
├── README.md            what it is, how to merge, platform note
├── RUNBOOK.md           setup, what a project shares, publish, steer, collect, adapt
├── config.example.json  workspace path and redaction terms (~/.voyager/web-pro-kit.json)
├── scripts/             drive_mirror, code_index, secret_patterns, kit_config, drive_request, drive_wait
├── request-channel/     channel.py (sandbox reminder), README.txt, VERSION, PROMPT-BLOCK.md
└── templates/           suggested task header, blank project header

Verification

  • End to end on Windows 11 + Google Drive for desktop + Python 3.12, through voyager ask --model extra-high --timebox 25 with a paired extension: the mirror was fetched and its commit and hashes verified; the task wrote test.txt first; channel.py passed its selftest and installed in the ChatGPT sandbox; a second request appended mid-task was picked up within three minutes and applied; the ZIP, NOTES.md and DONE.txt landed on Drive in that order and drive_wait.py returned on the marker. The approval card was answered by hand.
  • That run surfaced one bug, fixed here: an unpaired BEGIN … PRIVATE KEY line made the redactor drop the rest of the file. A selftest now mirrors the kit itself, extracts it and runs every script's selftest from the copy.
  • All seven selftests pass on the Windows host and from an extracted mirror. In the ChatGPT Linux sandbox five passed and two failed on the bug above; the fix has not been re-run there. oxfmt --check passes on the new directory; Python is checked by the selftests.
  • macOS hosts and Pro subagent runs were not tested.

🤖 Generated with Claude Code

TanChuping and others added 6 commits October 20, 2026 20:47
…mirror

Redaction now catches unquoted dotenv/YAML values, quoted values with
spaces and short values for sensitive keys, and only exempts whole-value
placeholders and strictly parsed variable references. A file is kept
back, and listed in MIRROR.json excluded_files and the terminal summary,
when it has an unclosed private key, a non-UTF-8 encoding with a private
term or credential pattern, or a path that contains a private term.
UTF-16 text is redacted like UTF-8. --name must be one portable folder
name. Archives and MIRROR.json are swapped in after a read-back check,
reuse compares SHA-256, and --force rewrites binary volumes.

drive_mirror.py is split into redaction, mirror_build, mirror_manifest
and safe_files so each file stays under the size limit.

Co-Authored-By: Claude <noreply@anthropic.com>
drive_request reads REQUEST.md and --file with utf-8-sig, so a BOM no
longer resets Version to 1, and writes through a .request- temp file
that is retried while Drive or an editor holds REQUEST.md, removed
afterwards, and reported as not published when the replace keeps
failing. kit_config also accepts a JSON config saved with a BOM.

Co-Authored-By: Claude <noreply@anthropic.com>
drive_wait exits 0 only after DONE.txt has non-empty content and keeps
polling while it is empty or not yet readable. The quiet-output fallback
ignores .DS_Store, AppleDouble ._ files, desktop.ini, Thumbs.db, Office
lock files, the request writer's temp file and Drive/sync temp files.

Co-Authored-By: Claude <noreply@anthropic.com>
The runbook says which files the mirror keeps back and where they are
reported, the short-identity and symlink limits, python3 versus py -3.12,
a POSIX submit snippet, the rclone write cache Linux needs, and that the
result ZIP may hold case-only twins that collide on Windows and macOS.

Co-Authored-By: Claude <noreply@anthropic.com>
mkstemp creates 0600 files, so archives and MIRROR.json swapped in from
a temp file lost the umask-based mode that shutil.copyfile gave them.

Co-Authored-By: Claude <noreply@anthropic.com>
@Nagi-ovo
Nagi-ovo merged commit 9267063 into voyager-crew:main Oct 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants