Skip to content

Update README for Supabase service role key instructions#836

Merged
Wirasm merged 1 commit intocoleam00:mainfrom
steinybot:patch-1
Nov 24, 2025
Merged

Update README for Supabase service role key instructions#836
Wirasm merged 1 commit intocoleam00:mainfrom
steinybot:patch-1

Conversation

@steinybot
Copy link
Copy Markdown

@steinybot steinybot commented Nov 4, 2025

Pull Request

Summary

Provides instructions on how do get the SUPABASE_SERVICE_KEY for a local Supabase install.

Changes Made

  • Add instructions on how do get the SUPABASE_SERVICE_KEY for a local Supabase install.
  • Changed to proper sentense case.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Performance improvement
  • Code refactoring

Affected Services

  • Frontend (React UI)
  • Server (FastAPI backend)
  • MCP Server (Model Context Protocol)
  • Agents (PydanticAI service)
  • Database (migrations/schema)
  • Docker/Infrastructure
  • Documentation site

Testing

  • All existing tests pass
  • Added new tests for new functionality
  • Manually tested affected user flows
  • Docker builds succeed for all services

Test Evidence

# Example: python -m pytest tests/
# Example: cd archon-ui-main && npm run test

Checklist

  • My code follows the service architecture patterns
  • If using an AI coding assistant, I used the CLAUDE.md rules
  • I have added tests that prove my fix/feature works
  • All new and existing tests pass locally
  • My changes generate no new warnings
  • I have updated relevant documentation
  • I have verified no regressions in existing features

Breaking Changes

Additional Notes

Summary by CodeRabbit

  • Documentation
    • Improved Supabase setup documentation with clearer instructions and guidance for obtaining the SUPABASE_SERVICE_KEY.
    • Enhanced formatting and phrasing for better readability.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Nov 4, 2025

Walkthrough

Documentation updates to README.md addressing Supabase configuration guidance. Changes include text corrections for clarity, addition of command to retrieve SUPABASE_SERVICE_KEY, inline code formatting for SUPABASE_URL example, and improved instructions for local Supabase setup.

Changes

Cohort / File(s) Change Summary
Documentation Updates
README.md
Text case and phrasing corrected for cloud Supabase note; added guidance command supabase status -o env to obtain SUPABASE_SERVICE_KEY; formatted SUPABASE_URL example with inline code styling; enhanced local Supabase usage instructions for clarity

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

  • Changes are limited to documentation/README updates
  • No logic, control flow, or code modifications
  • Formatting and instructional clarity improvements only

Poem

📚✨ A README refresh so fine,
With Supabase keys now well-aligned,
Code blocks dance in proper dress,
Instructions clearer, nothing less!
hops happily 🐰

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: adding Supabase service role key instructions to the README.
Description check ✅ Passed The description follows the template structure with all key sections completed: Summary, Changes Made, Type of Change (marked), Affected Services (marked), and relevant Checklist items checked.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6baa669 and e980be8.

📒 Files selected for processing (1)
  • README.md (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: coleam00/Archon PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-09-19T10:32:55.580Z
Learning: Applies to .env : Require SUPABASE_URL and SUPABASE_SERVICE_KEY in .env
📚 Learning: 2025-09-19T10:32:55.580Z
Learnt from: CR
Repo: coleam00/Archon PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-09-19T10:32:55.580Z
Learning: Applies to .env : Require SUPABASE_URL and SUPABASE_SERVICE_KEY in .env

Applied to files:

  • README.md
🪛 markdownlint-cli2 (0.18.1)
README.md

89-89: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (1)
README.md (1)

87-89: Wrap bare URL in backticks to comply with Markdown linting.

The URL on line 89 is flagged by the Markdown linter (MD034) as a bare URL. Wrap it in backticks for consistency with inline code formatting.

The documentation improvements are clear and helpful—the addition of the supabase status -o env command is a valuable guide for local Supabase users.

- - For local Supabase: Set `SUPABASE_URL` to http://host.docker.internal:8000 (unless you have an IP address set up). To get `SUPABASE_SERVICE_KEY` run `supabase status -o env`.
+ - For local Supabase: Set `SUPABASE_URL` to `http://host.docker.internal:8000` (unless you have an IP address set up). To get `SUPABASE_SERVICE_KEY` run `supabase status -o env`.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Wirasm
Copy link
Copy Markdown
Collaborator

Wirasm commented Nov 24, 2025

Thanks for this fix, merging this in

@Wirasm Wirasm merged commit 9bb1683 into coleam00:main Nov 24, 2025
8 checks passed
coleam00 pushed a commit that referenced this pull request Apr 7, 2026
…1) (#836)

* refactor(api): migrate remaining routes to @hono/zod-openapi (step 1.1)

- Create conversation.schemas.ts with 9 Zod schemas for conversation/message routes
- Create codebase.schemas.ts with 5 Zod schemas for codebase routes
- Add 14 workflowRun schemas to workflow.schemas.ts
- Migrate 19 plain routes to registerOpenApiRoute(createRoute(...), handler)
- Update 4 test files for Zod validation behavior (validationErrorHook, assertion updates)

All JSON API routes now use the typed openapi() wrapper. OpenAPI spec at
/api/openapi.json covers all JSON endpoints. SSE routes intentionally excluded.

Closes #831

* fix: address MEDIUM review findings from PR #836

- Replace manual c.req.json() re-parses in sendMessageRoute and
  runWorkflowRoute with c.req.valid('json') (Zod already validates
  before handler runs; manual parse was redundant and swallowed errors)
- Add z.string().min(1) to sendMessageBodySchema to enforce non-empty
  message invariant at the schema level instead of ad-hoc in handler
- Move isValidCommandName guard outside try block in runWorkflowRoute
  so invalid names return 400 (not 500 via run_workflow_failed)
- Fix makeApp() return type from Hono to OpenAPIHono in three test files
- Update addCodebaseBodySchema JSDoc to match permissive schema
  (constraint is enforced by handler, not schema)
- Add GET /api/workflows/runs/by-worker/:platformId tests (found/not-found)

* fix: complete Zod migration for all route handlers

- Replace manual c.req.json() in createConversation, updateConversation,
  addCodebase, validateWorkflow, and saveWorkflow handlers with
  getValidatedBody() helper that centralizes the .valid('json') cast
- Add getValidatedBody(c, schema) helper to eliminate repeated unsafe
  casts — keeps the pattern searchable and type-safe
- Migrate sendMessageRoute and runWorkflowRoute to use getValidatedBody()
- Add .strict() to createConversationBodySchema to reject unknown fields
  (e.g. conversationId) at the Zod layer instead of in handler code
- Add .refine() to addCodebaseBodySchema enforcing url/path mutual
  exclusion at schema level — removes redundant handler validation
- Add .min(1) to updateConversationBodySchema.title for consistency with
  sendMessageBodySchema.message
- Normalize all error responses to use apiError() helper instead of raw
  c.json({ error: ... }) for consistent error format
- Remove stale route registration order comment
- Fix missing validationErrorHook in conversationId rejection test
Tyone88 pushed a commit to Tyone88/Archon that referenced this pull request Apr 16, 2026
…1) (coleam00#836)

* refactor(api): migrate remaining routes to @hono/zod-openapi (step 1.1)

- Create conversation.schemas.ts with 9 Zod schemas for conversation/message routes
- Create codebase.schemas.ts with 5 Zod schemas for codebase routes
- Add 14 workflowRun schemas to workflow.schemas.ts
- Migrate 19 plain routes to registerOpenApiRoute(createRoute(...), handler)
- Update 4 test files for Zod validation behavior (validationErrorHook, assertion updates)

All JSON API routes now use the typed openapi() wrapper. OpenAPI spec at
/api/openapi.json covers all JSON endpoints. SSE routes intentionally excluded.

Closes coleam00#831

* fix: address MEDIUM review findings from PR coleam00#836

- Replace manual c.req.json() re-parses in sendMessageRoute and
  runWorkflowRoute with c.req.valid('json') (Zod already validates
  before handler runs; manual parse was redundant and swallowed errors)
- Add z.string().min(1) to sendMessageBodySchema to enforce non-empty
  message invariant at the schema level instead of ad-hoc in handler
- Move isValidCommandName guard outside try block in runWorkflowRoute
  so invalid names return 400 (not 500 via run_workflow_failed)
- Fix makeApp() return type from Hono to OpenAPIHono in three test files
- Update addCodebaseBodySchema JSDoc to match permissive schema
  (constraint is enforced by handler, not schema)
- Add GET /api/workflows/runs/by-worker/:platformId tests (found/not-found)

* fix: complete Zod migration for all route handlers

- Replace manual c.req.json() in createConversation, updateConversation,
  addCodebase, validateWorkflow, and saveWorkflow handlers with
  getValidatedBody() helper that centralizes the .valid('json') cast
- Add getValidatedBody(c, schema) helper to eliminate repeated unsafe
  casts — keeps the pattern searchable and type-safe
- Migrate sendMessageRoute and runWorkflowRoute to use getValidatedBody()
- Add .strict() to createConversationBodySchema to reject unknown fields
  (e.g. conversationId) at the Zod layer instead of in handler code
- Add .refine() to addCodebaseBodySchema enforcing url/path mutual
  exclusion at schema level — removes redundant handler validation
- Add .min(1) to updateConversationBodySchema.title for consistency with
  sendMessageBodySchema.message
- Normalize all error responses to use apiError() helper instead of raw
  c.json({ error: ... }) for consistent error format
- Remove stale route registration order comment
- Fix missing validationErrorHook in conversationId rejection test
POWERFULMOVES added a commit to POWERFULMOVES/PMOVES-Archon that referenced this pull request Apr 19, 2026
…gration (#12)

* Remove Docusaurus documentation system

Remove the standalone Docusaurus documentation website to simplify the project structure and reduce maintenance overhead.

Changes:
- Delete /docs directory (480MB freed) containing all Docusaurus files
- Remove docker-compose.docs.yml (optional docs service)
- Remove ARCHON_DOCS_PORT from .env.example
- Update .github/workflows/release-notes.yml (remove docs section)
- Update .github/test-release-notes.sh (remove docs section)

Preserved:
- Project documents feature (archon-ui-main/src/features/projects/documents/)
- Backend document service (python/src/server/services/projects/document_service.py)
- Project documents API endpoints (/api/projects/{id}/docs)

Benefits:
- Eliminates redundancy (content duplicated in /PRPs/ai_docs/)
- Reduces complexity (removes 480MB dependencies and configuration)
- Simplifies deployment (eliminates optional Docker service on port 3838)
- Lowers maintenance burden (single documentation source)

All validation tests passed:
✓ File system validation
✓ Backend imports verification
✓ Docker Compose integration testing
✓ CI/CD workflow validation
✓ Project documents API still functional

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add OpenRouter embeddings support

Implements OpenRouter as an embedding provider option, enabling access to multiple
embedding models (OpenAI, Google Gemini, Qwen3, Mistral) through a single API key.

Backend changes:
- Add validate_openrouter_api_key() for API key validation (sk-or-v1- format)
- Add OpenRouterErrorAdapter for error sanitization
- Add openrouter to valid providers in llm_provider_service
- Create openrouter_discovery_service with hardcoded model list
- Create /api/openrouter/models endpoint for model discovery
- Register OpenRouter router in FastAPI main app

Frontend changes:
- Create openrouterService.ts for model discovery API client
- Add OpenRouter to RAGSettings.tsx provider options
- Configure default models with provider prefix (openai/text-embedding-3-small)
- Add OpenRouter to embedding-capable providers list

Documentation:
- Update .env.example with OPENROUTER_API_KEY documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add unit tests for OpenRouter model discovery

Tests cover:
- Model list validation (non-empty, valid types)
- Provider prefix validation (all models have provider/)
- Data validation (positive dimensions, non-negative pricing)
- Provider validation (valid provider names)
- Specific provider models (OpenAI, Qwen)
- Model ID validation (requires prefix)

All 11 tests passing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix embedding provider grid to fit all providers in one line

Changed grid-cols-3 to grid-cols-4 for embedding provider selection
so all 4 embedding-capable providers (OpenAI, Google, OpenRouter, Ollama)
fit on one line, matching the chat provider layout.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix credential_service to recognize OpenRouter as embedding provider

Added 'openrouter' to embedding_capable_providers set in credential_service.py
to prevent it from being rejected and falling back to OpenAI.

Fixes: 'Invalid embedding provider openrouter doesn't support embeddings' error

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Address CodeRabbit review: Improve openrouterService robustness

1. Lazy initialization of baseUrl via getBaseUrl() method
   - Allows API URL to be updated at runtime without stale URL issues

2. Runtime validation of API response structure
   - Validates embedding_models array exists before caching
   - Prevents invalid responses from being cached

Addresses CodeRabbit nitpick comments on PR coleam00#852

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Delete PRPs/openrouter-embeddings-support.md

* Add robust cache validation with type guards in openrouterService

Implemented comprehensive validation to prevent crashes from corrupted cache:
- Created isCacheEntry() type guard to validate cache structure
- Parse JSON into unknown type (TypeScript strict mode compliant)
- Validate timestamp is number and data has OpenRouterModelListResponse shape
- Validate each model has all required fields with correct types
- Remove corrupted cache entries to avoid repeated failures
- No 'any' types used, full strict mode compliance

Prevents crashes from malformed cache data while maintaining type safety.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add comprehensive API response validation in discoverModels

Enhanced validation to catch malformed responses early:
- Validate total_count is non-negative number
- Verify total_count matches embedding_models.length
- Validate first model has required fields (id, provider, dimensions)
- Check dimensions are positive numbers
- Validate provider names are from expected set
- Provide specific error messages for each validation failure

Prevents caching invalid data and provides better debugging information.

Addresses CodeRabbit nitpick comment on PR coleam00#852

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update README for Supabase service role key instructions (coleam00#836)

* chore(security): add CODEOWNERS and Dependabot configuration

Adds repository security files:
- CODEOWNERS for PR review routing
- dependabot.yml for automated security updates

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(hardened): Add nested submodule integrations for standalone operation

- Add .gitmodules with 7 nested integrations:
  - PMOVES-Agent-Zero (agent orchestration)
  - PMOVES-BoTZ (MCP tools)
  - PMOVES-HiRAG (knowledge retrieval)
  - PMOVES-Deep-Serch (deep research)
  - docling (document processing)
  - PMOVES-BotZ-gateway (MCP gateway)
  - PMOVES-tensorzero (TensorZero client)

- Fix PydanticAI Agent initialization (remove invalid result_type parameter)

Enables Archon to run standalone with PMOVES.AI service connections.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(pmoves): add Claude Code MCP adapter for PMOVES.AI integration

New module: python/pmoves_mcp/
- claude_code_adapter.py: Async MCP adapter for Claude Code CLI
- __init__.py: Module exports

Features:
- Execute TAC slash commands via Agent Zero's MCP interface
- ClaudeCodeMCPAdapter with async httpx client
- CommandResult dataclass for structured responses
- ARCHON_MCP_TOOLS registration for Archon integration

Available commands through adapter:
- /search:hirag, /search:supaserch, /search:deepresearch
- /health:check-all, /health:metrics
- /agents:status, /agents:mcp-query
- /deploy:smoke-test, /deploy:services, /deploy:up
- /botz:init, /botz:profile, /botz:mcp, /botz:secrets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Restore fail-fast behavior for API key validation in upload

- Remove HTTPException catch that was allowing uploads to proceed with invalid credentials
- Aligns with beta guidelines: authentication failures should halt execution
- Addresses code review feedback from PR #1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore(deps): Update uv.lock with dependency revisions

- Bump revision from 1 to 3
- Add upload-time fields for PyPI packages
- Sync with latest uv dependency resolution

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(observability): add Prometheus metrics endpoint

Add /metrics endpoint for Prometheus scraping with:
- HTTP request counter (by method, endpoint, status)
- HTTP request duration histogram
- Knowledge operations counter
- MCP commands execution counter

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(search): Add Hi-RAG v2 semantic expansion to keyword extraction

- Add optional Hi-RAG v2 integration for knowledge-aware keyword discovery
- Enable semantic keyword expansion via PMOVES knowledge graph
- Add hirag_url parameter to KeywordExtractor for knowledge graph queries
- Improves search relevance with ontology-driven term expansion

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(pmoves-ai): Add PMOVES.AI integration patterns (#3)

* feat(pmoves-ai): Add PMOVES.AI integration patterns

- Add CHIT secrets manifest (chit/secrets_manifest_v2.yaml)
- Add tier-based environment loading (env.shared, env.tier-agent.sh)
- Add health check module (pmoves_health/)
- Add NATS service announcer (pmoves_announcer/)
- Add service registry client (pmoves_registry/)
- Add Docker Compose YAML anchors (docker-compose.pmoves.yml)
- Add integration documentation (PMOVES.AI_INTEGRATION.md)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(integration): Apply Phase 1 critical bug fixes

- Fix deprecated datetime.utcnow() → datetime.now(timezone.utc)
- Fix YAML environment merge (list → map for proper merging)
- Fix health check decorator accumulation bug
- Fix health endpoint status codes (return 503 when unhealthy)
- Remove APP/UI tiers (stick to 6-tier architecture)
- Fix resource leaks in NATS connections (try/finally)

* fix(security): Remove hardcoded credential defaults

- Neo4j: Remove neo4j:neo4j default credentials
- MinIO: Remove minioadmin:minioadmin default credentials
- ClickHouse: Remove tensorzero:tensorzero default credentials
- Fix typo: export_CACHE_TTL → export CACHE_TTL

Empty defaults now require explicit configuration for production use.

* refactor(code-quality): Phase 3 & 4 improvements

Phase 3: Code Quality
- Add pmoves_common shared types module (ServiceTier, HealthStatus)
- Update ServiceTier imports with fallback to shared module
- Remove duplicate ServiceTier enum definitions

Phase 4: Documentation
- Add comprehensive module docstrings to all integration modules
- Create .coderabbit.yaml for automated PR reviews
- Enable reviews on feat/* and fix/* branches
- Set docstring coverage target to 80%

This reduces code duplication and improves type consistency across
the PMOVES.AI ecosystem.

---------

Co-authored-by: POWERFULMOVES <POWERFULMOVES@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

* chore: Add GitHub Actions workflows and update submodule SHAs

- Add CI/CD workflows: ci.yml, claude-fix.yml, claude-review.yml, release-notes.yml
- Update submodule references to latest commits

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(pr): Address CodeRabbit review issues

- Fix dependabot.yml: Point pip to /python, npm to /archon-ui-main
- Add branch = main to docling submodule in .gitmodules
- Add prometheus-client>=0.20.0 to all dependency group

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: Sync main to hardened - MCP adapter, CODEOWNERS, nested submodules, persona service

Syncs 4 commits from main to PMOVES.AI-Edition-Hardened:

- Claude Code MCP adapter for PMOVES.AI integration
- CODEOWNERS configuration (security)
- Nested submodule integrations for standalone operation
- Persona service and API routes for agent creation

Includes CodeRabbit review fixes:
- Fixed route ordering (/thread-types before /{persona_id})
- Added proper error handling and validation
- Removed Git conflict markers
- Fixed .coderabbit.yaml configuration

🤖 Generated with Claude Code

* docs: add PMOVES.AI skill hints context tags

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore(submodules): update nested PMOVES-HiRAG submodule pointer

* security: update PBKDF2 iterations to 600,000

* fix: correct indentation in state_reconciliation.py if-block

* fix(env): strip export syntax and add NATS auth to env.shared defaults

- Remove `export` prefix from all variables (incompatible with Docker env_file)
- Update NATS_URL default to include pmoves credentials
- Update usage comment to reflect Docker Compose env_file pattern

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(claude): add CHIT-aware integration context (#9)

Co-authored-by: Shaela Bello <slbello@uncg.edu>

* fix(auth): align NATS default URLs with credentialed runtime (#10)

Co-authored-by: Shaela Bello <slbello@uncg.edu>

* chore(submodules): sync HiRAG and BotZ gateway pointers (#11)

Co-authored-by: Shaela Bello <slbello@uncg.edu>

* fix(security): add USER directive to archon-ui Dockerfile

Run as non-root user (uid 65532) to satisfy BuildKit audit and
defense-in-depth container hardening requirements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(github): add GitHub App token minting and client

Implements GitHub App integration for agent work orders with:
- Token minting with JWT RS256 signing (10-min lifetime)
- Installation token exchange via GitHub API
- Token caching with 50-minute expiry window
- GitHubClient with App token + gh CLI fallback
- Full test coverage for token minting and PR operations

Environment variables required:
- GH_APP_ID: GitHub App numeric ID
- GH_APP_SEC: PEM private key (handles double-escaped env values)
- GH_APP_INSTALLATION_ID: Installation ID for org access

Key features:
- mint_installation_token(): Creates short-lived JWT + exchanges for token
- get_installation_token(): Cached token retrieval with force_refresh option
- clear_token_cache(): Manual cache invalidation
- GitHubClient.list_pull_requests(): API-first with CLI fallback
- Graceful degradation when credentials unavailable

Security considerations:
- PEM keys stored in env.tier-agent (plaintext - production hardening needed)
- No persistent token storage (in-memory cache only)
- Short-lived tokens (JWT <10min, installation tokens = 1 hour)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(submodules): promote nested submodule pointers (HiRAG, BotZ-gateway)

- external/PMOVES-HiRAG: 89d4abf→e904b12 (CHIT + geometry bus context, PR #4)
- pmoves_multi_agent_pro_pack/PMOVES-BotZ-gateway: 40e1e33→2565022 (log sanitizer, PR #4)

Both commits are merged on their respective origin/main branches.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(submodules): recover nested wipes + promote BoTZ skill pointers

- Recovered 3 wiped nested subs: Deep-Serch (88 files), tensorzero
  (2906 files), docling (839 files) — same wipe pattern as Phase 5
- Recovered 6 wiped sub-sub-subs inside nested BoTZ copy
- Promoted 7 skill repo pointer advances in nested BoTZ copy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: leex279 <thomas@thirty3.de>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: sean-eskerium <sean@eskerium.com>
Co-authored-by: Jason Pickens <jasonpickensnz@gmail.com>
Co-authored-by: POWERFULMOVES <POWERFULMOVES@users.noreply.github.com>
Co-authored-by: PMOVES.AI <claude@pmoves.ai>
Co-authored-by: Shaela Bello <slbello@uncg.edu>
joaobmonteiro pushed a commit to joaobmonteiro/Archon that referenced this pull request Apr 26, 2026
…1) (coleam00#836)

* refactor(api): migrate remaining routes to @hono/zod-openapi (step 1.1)

- Create conversation.schemas.ts with 9 Zod schemas for conversation/message routes
- Create codebase.schemas.ts with 5 Zod schemas for codebase routes
- Add 14 workflowRun schemas to workflow.schemas.ts
- Migrate 19 plain routes to registerOpenApiRoute(createRoute(...), handler)
- Update 4 test files for Zod validation behavior (validationErrorHook, assertion updates)

All JSON API routes now use the typed openapi() wrapper. OpenAPI spec at
/api/openapi.json covers all JSON endpoints. SSE routes intentionally excluded.

Closes coleam00#831

* fix: address MEDIUM review findings from PR coleam00#836

- Replace manual c.req.json() re-parses in sendMessageRoute and
  runWorkflowRoute with c.req.valid('json') (Zod already validates
  before handler runs; manual parse was redundant and swallowed errors)
- Add z.string().min(1) to sendMessageBodySchema to enforce non-empty
  message invariant at the schema level instead of ad-hoc in handler
- Move isValidCommandName guard outside try block in runWorkflowRoute
  so invalid names return 400 (not 500 via run_workflow_failed)
- Fix makeApp() return type from Hono to OpenAPIHono in three test files
- Update addCodebaseBodySchema JSDoc to match permissive schema
  (constraint is enforced by handler, not schema)
- Add GET /api/workflows/runs/by-worker/:platformId tests (found/not-found)

* fix: complete Zod migration for all route handlers

- Replace manual c.req.json() in createConversation, updateConversation,
  addCodebase, validateWorkflow, and saveWorkflow handlers with
  getValidatedBody() helper that centralizes the .valid('json') cast
- Add getValidatedBody(c, schema) helper to eliminate repeated unsafe
  casts — keeps the pattern searchable and type-safe
- Migrate sendMessageRoute and runWorkflowRoute to use getValidatedBody()
- Add .strict() to createConversationBodySchema to reject unknown fields
  (e.g. conversationId) at the Zod layer instead of in handler code
- Add .refine() to addCodebaseBodySchema enforcing url/path mutual
  exclusion at schema level — removes redundant handler validation
- Add .min(1) to updateConversationBodySchema.title for consistency with
  sendMessageBodySchema.message
- Normalize all error responses to use apiError() helper instead of raw
  c.json({ error: ... }) for consistent error format
- Remove stale route registration order comment
- Fix missing validationErrorHook in conversationId rejection test
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