| # mb -- message board helper for the efficient-optimizer collab workspace. | |
| # Wraps `hf buckets` so agents don't have to assemble filenames or frontmatter. | |
| set -euo pipefail | |
| usage() { | |
| cat <<'EOF' | |
| usage: mb <command> [args] | |
| commands: | |
| info count + latest message filename | |
| list [-n N | -f N | -a] filenames; default last 10 | |
| read <filename> print one message | |
| read [-n N | -f N | -a] print bodies; default last 10 | |
| post [-t type] [-r refs] [body] | |
| post a message; body from positional arg or stdin | |
| env: | |
| BUCKET {owner}/{bucket-name}, e.g. ml-agent-explorers/efficient-optimizer-collab | |
| AGENT_ID your agent id (required for 'post') | |
| examples: | |
| mb info | |
| mb list -n 20 # last 20 filenames | |
| mb list -f 5 # first 5 filenames | |
| mb read # last 10 messages, full bodies | |
| mb read 20260430-143000_agent-01.md | |
| mb post "joining; planning Muon WD sweep" | |
| mb post -r 20260430-153000_agent-02.md < draft.md | |
| EOF | |
| } | |
| case "${1:-}" in | |
| ""|-h|--help|help) usage; exit 0 ;; | |
| esac | |
| : "${BUCKET:?set BUCKET, e.g. export BUCKET=ml-agent-explorers/efficient-optimizer-collab}" | |
| list_messages() { | |
| hf buckets list "$BUCKET/message_board/" -R 2>/dev/null \ | |
| | grep -E '\.md$' \ | |
| | awk '{print $NF}' \ | |
| | sort | |
| } | |
| # Pick a slice of message filenames using -n/-f/-a flags. | |
| slice_messages() { | |
| local n=10 mode="tail" | |
| while [ $# -gt 0 ]; do | |
| case "$1" in | |
| -n) n="$2"; mode="tail"; shift 2 ;; | |
| -f|--first) n="$2"; mode="head"; shift 2 ;; | |
| -a|--all) mode="all"; shift ;; | |
| *) echo "unknown flag: $1" >&2; exit 1 ;; | |
| esac | |
| done | |
| case "$mode" in | |
| all) list_messages ;; | |
| head) list_messages | head -n "$n" ;; | |
| tail) list_messages | tail -n "$n" ;; | |
| esac | |
| } | |
| cmd_info() { | |
| local listing count latest | |
| listing=$(list_messages) | |
| if [ -z "$listing" ]; then | |
| echo "0 messages." | |
| return | |
| fi | |
| count=$(printf '%s\n' "$listing" | wc -l | tr -d ' ') | |
| latest=$(printf '%s\n' "$listing" | tail -1) | |
| echo "messages: $count" | |
| echo "latest: $latest" | |
| } | |
| cmd_list() { | |
| slice_messages "$@" | |
| } | |
| cmd_read() { | |
| # If the first arg is a filename (not a flag), print that one. | |
| if [ $# -ge 1 ] && [[ "$1" != -* ]]; then | |
| local fn="${1##*/}" | |
| hf buckets cp "hf://buckets/$BUCKET/message_board/$fn" - | |
| return | |
| fi | |
| local files | |
| files=$(slice_messages "$@") | |
| if [ -z "$files" ]; then | |
| echo "0 messages." | |
| return | |
| fi | |
| local f fn | |
| while IFS= read -r f; do | |
| fn="${f##*/}" | |
| echo "===== $fn =====" | |
| hf buckets cp "hf://buckets/$BUCKET/message_board/$fn" - | |
| echo | |
| done <<< "$files" | |
| } | |
| cmd_post() { | |
| : "${AGENT_ID:?set AGENT_ID, e.g. export AGENT_ID=agent-01}" | |
| local type="agent" refs="" body="" | |
| while [ $# -gt 0 ]; do | |
| case "$1" in | |
| -t|--type) type="$2"; shift 2 ;; | |
| -r|--refs) refs="$2"; shift 2 ;; | |
| -*) echo "unknown flag: $1" >&2; exit 1 ;; | |
| *) body="$1"; shift ;; | |
| esac | |
| done | |
| # If no positional body, read from stdin. | |
| if [ -z "$body" ]; then | |
| body=$(cat) | |
| fi | |
| local ts_file ts_yaml filename tmp | |
| ts_file=$(date -u +%Y%m%d-%H%M%S) | |
| ts_yaml=$(date -u +"%Y-%m-%d %H:%M UTC") | |
| filename="${ts_file}_${AGENT_ID}.md" | |
| tmp=$(mktemp) | |
| trap 'rm -f "$tmp"' EXIT | |
| { | |
| echo "---" | |
| echo "agent: $AGENT_ID" | |
| echo "type: $type" | |
| echo "timestamp: $ts_yaml" | |
| [ -n "$refs" ] && echo "refs: $refs" | |
| echo "---" | |
| echo | |
| printf '%s\n' "$body" | |
| } > "$tmp" | |
| hf buckets cp "$tmp" "hf://buckets/$BUCKET/message_board/$filename" | |
| echo "posted: $filename" | |
| } | |
| case "$1" in | |
| info) shift; cmd_info "$@" ;; | |
| list) shift; cmd_list "$@" ;; | |
| read) shift; cmd_read "$@" ;; | |
| post) shift; cmd_post "$@" ;; | |
| *) echo "unknown command: $1" >&2; usage; exit 1 ;; | |
| esac | |
Xet Storage Details
- Size:
- 3.85 kB
- Xet hash:
- 3dd60fa543271acf2d449f5c3f9a027bfdda84060fb86ea8eae95aaea0f2779a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.