mirror of
https://github.com/kellymichels/zscripts-token-savers
synced 2026-10-07 07:18:18 +00:00
Adds z_track_start/z_track_stop + z_record to zhelpers.sh and wires z_track_start into every command script. Each run now captures its own output volume (FIFO+tee, ANSI stripped), prints the '--- N lines / N chars / ~N tokens est. (Claude Code) ---' footer, and appends one JSONL row per top-level run in the same shape as the PowerShell tokens.jsonl. A nested-run guard keeps zrestart from double-counting its zkill/zstart children. Data dir precedence: $ZTOKENS_DATA, config ztokens.dataDir, sibling ../../ztokens/data, else ~/.ztokens/data. Docs + example config updated. Verified on WSL (isolated data dir): single run records correctly; nested zrestart produces one combined record, not three; est = round(chars/3.5).
67 lines
2.0 KiB
Bash
67 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
# Evomedia.net Token Savers — https://github.com/kellymichels/zscripts-token-savers
|
|
# Created by Kelly Michels · dev@evomedia.net
|
|
# Licensed under the MIT License. See LICENSE.
|
|
#
|
|
# zstart_docker — bring up a local docker compose stack from <scriptsRoot>/docker/.
|
|
#
|
|
# Usage:
|
|
# zstart_docker [--build] [--attached] [--solo]
|
|
#
|
|
# --build rebuild images before starting
|
|
# --attached stream logs in the foreground (default is detached)
|
|
# --solo use docker-compose.solo.yml (app only, no proxy)
|
|
|
|
set -uo pipefail
|
|
_HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$_HERE/zhelpers.sh"
|
|
z_track_start "$@"
|
|
z_require docker
|
|
|
|
build=0; attached=0; solo=0
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--build) build=1; shift ;;
|
|
--attached) attached=1; shift ;;
|
|
--solo) solo=1; shift ;;
|
|
*) err "Unknown option: $1"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
info "=== zstart_docker ==="
|
|
|
|
compose_file="docker-compose.yml"
|
|
[ "$solo" -eq 1 ] && compose_file="docker-compose.solo.yml"
|
|
|
|
if ! docker info >/dev/null 2>&1; then
|
|
printf '\n'
|
|
err "ERROR: Docker Engine is not running or this shell cannot reach it."
|
|
printf '\n'
|
|
info "Try:"
|
|
dim " 1. Start the Docker daemon (systemctl start docker / open Docker Desktop)."
|
|
dim " 2. Check your user is in the docker group: groups | grep docker"
|
|
printf '\n'
|
|
exit 1
|
|
fi
|
|
|
|
compose_path="$_HERE/docker/$compose_file"
|
|
if [ ! -f "$compose_path" ]; then
|
|
err "ERROR: Missing $compose_path"
|
|
exit 1
|
|
fi
|
|
|
|
[ -f "$_HERE/.env" ] || warn "WARNING: .env not found at $_HERE/.env - compose may still start if env vars are set elsewhere."
|
|
|
|
dc_args=(compose -f "$compose_file" up)
|
|
[ "$attached" -eq 0 ] && dc_args+=(-d)
|
|
[ "$build" -eq 1 ] && dc_args+=(--build)
|
|
|
|
dim "Running: docker ${dc_args[*]}"
|
|
(cd "$_HERE/docker" && docker "${dc_args[@]}") || exit $?
|
|
|
|
printf '\n'; ok "Stack: http://localhost/"
|
|
if [ "$attached" -eq 0 ]; then
|
|
dim 'Logs: docker compose -f docker/docker-compose.yml logs -f'
|
|
dim 'Stop: docker compose -f docker/docker-compose.yml down'
|
|
fi
|