Commit graph

9 commits

Author SHA1 Message Date
林 駿甫 (Shunsuke Hayashi)
ea388bb691 fix: suppress RequestsDependencyWarning; relax Python upper bound to >=3.10
- PYTHONWARNINGS: suppress all warnings from requests module (covers
  RequestsDependencyWarning from urllib3/chardet version mismatch)
- pyproject.toml: remove <3.13 upper bound (tested on 3.14.3)
- garc doctor: display shows "required: >=3.10"
- README: update version badge to v0.2.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 10:00:26 +09:00
林 駿甫 (Shunsuke Hayashi)
63c49cd733 chore: bump version to 0.2.0 and update CHANGELOG
All 17 playbook findings (P0-P3) resolved.
v0.2.0 includes enterprise hardening, workflow expansion,
multi-tenant profiles, Forms pipeline, and systemd support.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:56:35 +09:00
林 駿甫 (Shunsuke Hayashi)
7b5951a1d5 fix: resolve all 17 playbook findings (P0–P3)
P0 fixes:
- agent register: upsert by agent_id (no duplicate rows)
- daemon poll-once: extract _gmail_poll_cycle, run synchronously
- garc_core.py: suppress urllib3/googleapiclient DeprecationWarnings

P1 fixes:
- OAuth: detect RefreshError → delete stale token → re-auth flow
- OAuth: scope coverage check before returning valid creds
- ingress: add stale-reset subcommand (reset in_progress > N min)
- sheets: trim-sheet / clean-all — deleteDimension for empty rows
- approval gate: send Gmail notification to GARC_APPROVAL_EMAIL

P2 additions:
- Google Chat: garc-chat-helper.py + garc send chat subcommands
- Service Account: garc auth service-account verify + DWD support
- Audit log: Sheets audit tab + garc audit list + bin/garc async hook
- garc auth revoke: POST /revoke + delete token file
- kg: pagination fix, shell injection fix, garc-kg-query.py
- docs: _doc_insert_text / append_doc / garc drive append-doc

P3 additions:
- Multi-tenant: lib/profile.sh (list/use/add/show/remove/current)
  bin/garc: auto-load profile config.env and token.json
- Google Forms pipeline: garc-forms-helper.py + lib/forms.sh
  garc forms list/responses/watch
- systemd: _daemon_install_service OS-detect → launchd or systemd units
- Python version gate (>=3.10) in bin/garc + pyproject.toml
- garc doctor command for environment diagnostics

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:55:33 +09:00
林 駿甫 (Shunsuke Hayashi)
680bd433f4 fix: resolve set -euo pipefail silent exits and 3 related bugs
Root cause: bin/garc uses set -euo pipefail. Any command substitution
$(...) that returns exit 1 caused the entire garc process to exit
immediately with no output, making errors look silent.

Fixes:
- ingress.sh: add || true to all _find_queue_file $() assignments
  so set -e does not silently kill the process on missing queue items
- ingress.sh: _ingress_update_status returns 1 silently (callers
  print their own error); _ingress_done/fail print "Queue item not
  found" exactly once
- ingress.sh: _ingress_next result also guarded with || true
- drive.sh: garc drive info with no args now shows GARC workspace
  folder info instead of printing usage and exiting
- garc-core.py: replaced 210-line duplicate with a 3-line re-export
  from garc_core.py to prevent future divergence

Verified: verify/done/fail all print clear error on bad ID (exit 1),
drive info no-arg shows workspace folder, no regressions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:33:57 +09:00
林 駿甫 (Shunsuke Hayashi)
668fe1cd06 fix: ingress done/fail silently succeed on non-existent queue ID
_ingress_update_status returns 1 when queue file not found, but
_ingress_done and _ingress_fail were ignoring the return code and
printing success messages anyway. Now both commands propagate the
error with a clear message: "Queue item not found: <id>"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:30:00 +09:00
林 駿甫 (Shunsuke Hayashi)
10bcf9b17a fix: resolve two bugs found during live testing
- Add garc_core.py (underscore) alongside garc-core.py (hyphen);
  Python cannot import a hyphenated filename as a module, causing
  ModuleNotFoundError on every garc command
- Replace invalid scope people.readonly with directory.readonly
  in garc-core.py and scope-map.json; people.readonly does not
  exist in Google OAuth, causing error 400 invalid_scope on login

Verified working: garc gmail profile, garc calendar today,
garc gmail inbox, garc auth suggest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:25:14 +09:00
林 駿甫 (Shunsuke Hayashi)
4028c7f47a fix: patch 3 bugs found in release review
- ingress.sh: pass status-update note via argv instead of triple-quoted
  heredoc to prevent Python syntax error when note contains quotes
- ingress.sh: warn clearly when AGENT_CONTEXT.md missing (bootstrap
  not run) instead of silent failure in garc ingress context
- daemon.sh: replace export$(xargs) with set -a/source/set +a so
  config.env values containing spaces are loaded correctly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:09:26 +09:00
林 駿甫 (Shunsuke Hayashi)
931384d671 docs: clarify prerequisites, known limitations, and roadmap for v0.1.0
Added explicit prerequisites section to README and quickstart,
known limitations table with planned versions, and v0.2/v0.3/v0.4
roadmap. CHANGELOG restructured with Keep a Changelog format.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:06:30 +09:00
林 駿甫 (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