garc-gws-agent-runtime/lib/auth.sh
林 駿甫 (Shunsuke Hayashi) a69b9d9160 feat: initial release — GARC v0.1.0
Permission-first AI agent runtime for Google Workspace.
Ports the LARC/OpenClaw governance model (disclosure chain,
execution gates, queue/ingress) to Gmail, Calendar, Drive,
Sheets, Tasks, and People APIs with Claude Code as the
execution engine.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 08:59:12 +09:00

79 lines
1.9 KiB
Bash

#!/usr/bin/env bash
# GARC auth.sh — OAuth scope inference and authorization
# Mirrors LARC's auth.sh but for Google Workspace OAuth scopes
GARC_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GARC_DIR="$(cd "${GARC_SCRIPT_DIR}/.." && pwd)"
SCOPE_MAP="${GARC_DIR}/config/scope-map.json"
AUTH_HELPER="${GARC_DIR}/scripts/garc-auth-helper.py"
garc_auth() {
local subcommand="${1:-help}"
shift || true
case "${subcommand}" in
suggest) garc_auth_suggest "$@" ;;
check) garc_auth_check "$@" ;;
login) garc_auth_login "$@" ;;
status) garc_auth_status "$@" ;;
*)
echo "Usage: garc auth <suggest|check|login|status>"
return 1
;;
esac
}
# garc auth suggest "<task description>"
# Infers the minimum OAuth scopes required for the task
garc_auth_suggest() {
local task_description="$*"
if [[ -z "${task_description}" ]]; then
echo "Usage: garc auth suggest \"<task description>\""
echo "Example: garc auth suggest \"send expense report to manager\""
return 1
fi
if ! command -v python3 &>/dev/null; then
echo "Error: python3 is required for scope inference" >&2
return 1
fi
python3 "${AUTH_HELPER}" suggest "${task_description}"
}
# garc auth check [--profile <profile>]
# Checks if current token has required scopes
garc_auth_check() {
local profile="backoffice_agent"
while [[ $# -gt 0 ]]; do
case "$1" in
--profile) profile="$2"; shift 2 ;;
*) shift ;;
esac
done
python3 "${AUTH_HELPER}" check --profile "${profile}"
}
# garc auth login [--profile <profile>]
# Launches OAuth2 authorization flow
garc_auth_login() {
local profile="writer"
while [[ $# -gt 0 ]]; do
case "$1" in
--profile) profile="$2"; shift 2 ;;
*) shift ;;
esac
done
python3 "${AUTH_HELPER}" login --profile "${profile}"
}
# garc auth status
# Shows current token scopes
garc_auth_status() {
python3 "${AUTH_HELPER}" status
}