Skip to content

Add extrasheet package to monorepo#6

Closed
sripathikrishnan wants to merge 1 commit into
mainfrom
claude/create-extrasheet-package-Jxswe
Closed

Add extrasheet package to monorepo#6
sripathikrishnan wants to merge 1 commit into
mainfrom
claude/create-extrasheet-package-Jxswe

Conversation

@sripathikrishnan
Copy link
Copy Markdown
Contributor

Extrasheet transforms Google Sheets into a file-based representation
optimized for LLM agents. Key features:

  • Separates data, formulas, formatting, and features into distinct files
    for token-efficient loading
  • Provides comprehensive specification for fly-blind editing via
    batchUpdate requests
  • Auto-generates TypedDict classes from Google Sheets API discovery doc
  • Includes 43 passing tests covering utils and transformation logic

File format:

  • data.tsv: Cell values (formulas show computed values)
  • formula.json: Sparse mapping of cell coordinates to formulas
  • format.json: Cell formatting and conditional rules
  • feature.json: Charts, pivot tables, filters, slicers, etc.
  • dimension.json: Row/column sizing and groups
  • protection.json: Protected ranges

This is a one-direction transformation (Google Sheets -> files).
The push direction will be added in future work.

Extrasheet transforms Google Sheets into a file-based representation
optimized for LLM agents. Key features:

- Separates data, formulas, formatting, and features into distinct files
  for token-efficient loading
- Provides comprehensive specification for fly-blind editing via
  batchUpdate requests
- Auto-generates TypedDict classes from Google Sheets API discovery doc
- Includes 43 passing tests covering utils and transformation logic

File format:
- data.tsv: Cell values (formulas show computed values)
- formula.json: Sparse mapping of cell coordinates to formulas
- format.json: Cell formatting and conditional rules
- feature.json: Charts, pivot tables, filters, slicers, etc.
- dimension.json: Row/column sizing and groups
- protection.json: Protected ranges

This is a one-direction transformation (Google Sheets -> files).
The push direction will be added in future work.
@sripathikrishnan
Copy link
Copy Markdown
Contributor Author

This is a stale PR. Extrasheet was merged previously.

sripathikrishnan added a commit that referenced this pull request Feb 27, 2026
Security:
- Move session_token from POST body to Authorization: Bearer header to prevent
  proxy/access log exposure (#1)
- Atomic ownership check in revoke_session_token via expected_email param,
  eliminating TOCTOU race (#2)
- Redact full session_hash from list_sessions when admin views another user's
  sessions; self-service callers retain it (#3)
- Fix X-Forwarded-For to use rightmost (infra-injected) IP instead of
  first (spoofable) entry (#7)

Correctness:
- Ensure service account is provisioned at session establishment time
  (exchange_auth_code_for_session), enforcing the invariant that SA always
  exists for any v2 session; remove downstream or-"" fallbacks and 500 guard (#6)
- Validate _server_base_url before opening browser to avoid post-auth failure
  when server URL is not configured (#4)
- Raise ValueError instead of silently dropping extra scopes in v2
  get_oauth_token (#5)
- Apply SA_TOKEN_CACHE_SECONDS cap client-side for SA tokens (#8)

UX:
- Prompt for confirmation before revoking an existing valid session in
  auth login; skip prompt when stdin is not a tty (#9)
- Use timezone.utc in all datetime.fromtimestamp calls in CLI output (#10)

Fakes / tests:
- Fix FakeDatabase.retrieve_auth_code to check flow_type and expiry before
  popping, preventing silent code destruction on type mismatch (#11)
- Update FakeDatabase.revoke_session_token to accept expected_email (#2)

Docs:
- Fix stale pseudo_scope field name in database.py docstring (#12)
- Document _explicit_auth_urls v2 activation edge case (#13)
- Add type safety / None discipline principle to CLAUDE.md files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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