Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
20817a7
feat(android): Add Android on-device packaging with WebView GUI
emooreatx Nov 27, 2025
7f31561
fix(android): Start full CIRIS runtime and add startup console
emooreatx Nov 27, 2025
1cd5925
feat(android): Add bundled WebView GUI and QA runner fixes
emooreatx Nov 28, 2025
8814ae9
fix(billing): Only enable billing when using CIRIS LLM proxy
emooreatx Nov 28, 2025
76432b5
chore: bump version to 1.7.0 for Android release
emooreatx Nov 28, 2025
543249f
fix(billing): Require CIRIS proxy for JWT auth mode
emooreatx Nov 28, 2025
4b9589e
fix: resolve all mypy errors and fix billing auth logic
emooreatx Nov 28, 2025
333ae47
fix: mypy type ignores for CI compatibility
emooreatx Nov 28, 2025
71ea454
fix(android): Enhance Android app security
google-labs-jules[bot] Nov 29, 2025
4b7c745
feat: Android billing mode and CIRIS proxy secondary LLM support
emooreatx Nov 29, 2025
b10e5c1
feat: Add native/web toggle for Interact UI (#526)
google-labs-jules[bot] Nov 29, 2025
b9faad1
fix(android): More specific URL interception for native runtime UI
emooreatx Nov 29, 2025
da13c1f
fix: Android InteractActivity crash and code duplication
emooreatx Nov 29, 2025
5656331
fix: SonarCloud quality issues - cognitive complexity and coverage
emooreatx Nov 29, 2025
649642c
feat: Update login UI and restore billing page with rebuilt static as…
emooreatx Nov 29, 2025
7837143
feat: Add privacy policy v2.0 and marketing opt-in for Google login
emooreatx Nov 29, 2025
bd19274
test: Add comprehensive coverage for mobile_main.py and resource_monitor
emooreatx Nov 29, 2025
27ca884
test: Increase auth.py coverage from 62% to 97%
emooreatx Nov 29, 2025
8f4f1c5
fix: Android billing token config and PostgreSQL dialect race condition
emooreatx Nov 29, 2025
662f49e
fix: Move Python initialization to background thread to prevent ANR
emooreatx Nov 29, 2025
6cd4604
fix: Android token refresh, billing JWT mode, and docs consolidation
emooreatx Nov 29, 2025
c830809
refactor: Template only seeds identity graph on first run
emooreatx Nov 29, 2025
4ca0c70
test: Add coverage for _migrate_tickets_config_to_graph method
emooreatx Nov 29, 2025
948ae5c
test: Add comprehensive coverage for CIRISBillingProvider
emooreatx Nov 29, 2025
ef1a7b7
fix: Auto-mint SYSTEM_ADMIN OAuth users as ROOT WA for deferral handling
emooreatx Nov 29, 2025
a64e546
feat: Android Play Store release with first-run flow improvements
emooreatx Nov 30, 2025
b70dd27
feat: Add Play Integrity API integration and ARM64 support
emooreatx Nov 30, 2025
4eee8f5
feat: Add cross-platform pydantic-core wheel build script
emooreatx Nov 30, 2025
828ed30
feat: Add Python 3.10 and 32-bit ARM (armeabi-v7a) support
emooreatx Dec 1, 2025
aede0ed
chore: Bump version to 1.6.12 (build code 12)
emooreatx Dec 1, 2025
55107e7
fix: Add missing mypy ignore entries for docx2txt, ntplib, psycopg2
emooreatx Dec 1, 2025
dcb8f33
fix: Correct pydantic_core wheel WHEEL metadata tags for Android
emooreatx Dec 1, 2025
755e2e0
chore: Add pydantic_core cp310 wheels for Android
emooreatx Dec 1, 2025
8244c44
fix: Update test_initialize_identity to match runtime changes
emooreatx Dec 1, 2025
ae90c16
fix: Add libpython3.10.so dependency to pydantic_core wheels
emooreatx Dec 1, 2025
82da7ae
feat: Android 1.7.16 with billing UI fixes and profile picture loading
emooreatx Dec 1, 2025
7240255
fix(security): Enforce aud/iss/exp validation in native Google login
emooreatx Dec 1, 2025
57a5fdc
fix(android): Use correct billing API paths
emooreatx Dec 1, 2025
29074eb
fix: Re-raise asyncio.CancelledError after cleanup in timeout polyfill
emooreatx Dec 1, 2025
85e3b07
feat: Add CC reduction helper tests + fix on-device OAuth
emooreatx Dec 2, 2025
61fbe52
fix: Resolve mypy strict type checking errors
emooreatx Dec 2, 2025
72f50d8
test: Fix tests for refactored resume helpers and on-device OAuth
emooreatx Dec 2, 2025
7a45f7a
fix: Add missing __init__.py for test package
emooreatx Dec 2, 2025
f2c26bf
fix: Make CancelledError re-raise explicit for SonarCloud
emooreatx Dec 2, 2025
ecf8837
test: Add comprehensive coverage tests for SonarCloud PR #527
emooreatx Dec 2, 2025
e307dd6
fix: Android billing API and build documentation
emooreatx Dec 3, 2025
b9c0eaf
feat: Add CIRIS signet app icon and bump to v1.7.20
emooreatx Dec 4, 2025
4dcad5c
fix: Resolve mypy type errors in auth.py and setup.py
emooreatx Dec 4, 2025
61b08e8
fix: Resolve 16 test failures in CI
emooreatx Dec 4, 2025
8c19d2e
fix: Android billing API and build documentation
emooreatx Dec 4, 2025
9fc11c3
fix: Prevent path traversal in billing payment_id parameter
emooreatx Dec 4, 2025
52a30c7
feat: Android native reasoning stream + user profile display name fix
emooreatx Dec 4, 2025
7e4cb5e
Update installer to use CIRISGUI-Standalone repo
emooreatx Dec 4, 2025
f6b09e1
feat: Stream DMA user prompts through SSE reasoning events
emooreatx Dec 4, 2025
977f3e9
fix: Android stability improvements and dependency additions
emooreatx Dec 4, 2025
c150ca5
fix: Add 16KB page size support for Android 15+
emooreatx Dec 4, 2025
b7f27cf
fix: Mypy type error in CSDMA last_user_prompt assignment
emooreatx Dec 4, 2025
d56f3f4
feat: Upgrade to Chaquopy 17 for 16KB page size support
emooreatx Dec 4, 2025
9d51c7d
fix: Share API key storage between MainActivity and BillingApiClient
emooreatx Dec 4, 2025
ecef09d
fix: Run npm ci from monorepo root in CI workflow
emooreatx Dec 4, 2025
0095a4d
fix: Use npm install instead of npm ci for GUI build
emooreatx Dec 5, 2025
f8da8ba
fix: Correct version back to 1.7.0 (was erroneously bumped to 1.7.1)
emooreatx Dec 5, 2025
10794c6
fix: Enable incident graph correlation with anti-spam protection
emooreatx Dec 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ omit =
*/build/*
*/dist/*
*/protocols/*
setup.py
./setup.py
vulture_whitelist.py

[report]
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ jobs:
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: ${{ steps.find_app.outputs.gui_dir }}/package-lock.json
cache-dependency-path: cirisgui/package-lock.json

- name: Configure for static export
run: |
Expand All @@ -143,8 +143,10 @@ jobs:

- name: Install dependencies
run: |
cd ${{ steps.find_app.outputs.gui_dir }}
npm ci
# Install from monorepo root (where package-lock.json lives)
# Use npm install instead of npm ci to handle minor version drift in lock file
cd cirisgui
npm install --legacy-peer-deps

- name: Build static assets
id: build_gui
Expand Down
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ logs/
*.egg-info/
*.egg
*.whl
!android/app/wheels/*.whl
*.jsonl
memory_graph.pkl
audit_logs.jsonl
Expand Down Expand Up @@ -79,3 +80,20 @@ dict_any_audit_results.json
build/
dist/
*.egg-info/
android/.web-build/
.idea/
.token_refresh_needed
android/.web-build/
*.apk
*.aab

# Large media files from GUI static assets
**/videos/
**/*-unsplash.jpg
**/infogfx-*.png
**/blurryinfo.png

# Android built GUI static assets (regenerated from CIRISGUI-Android)
android/app/src/main/assets/public/
android/app/src/main/python/android_gui_static/
android_gui_static/
8 changes: 4 additions & 4 deletions BUILD_INFO.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Build Information
Code Hash: 758fb0330869
Build Time: 2025-11-25T16:17:39.938214
Git Commit: abb301b8fc71d8e670dae321f30d9b48aebead51
Git Branch: release/1.6.6
Code Hash: 350d55a99a5c
Build Time: 2025-12-04T18:58:41.036308
Git Commit: 0095a4d338912758afba04d6eb689f4b5f32b653
Git Branch: 1.7.0

This hash is a SHA-256 of all Python source files in the repository.
It provides a deterministic version identifier based on the actual code content.
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,36 @@ All notable changes to CIRIS Agent will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.7.0] - 2025-11-28

### Added - Android On-Device Packaging

- **Native Android App** - Full CIRIS agent running directly on Android devices
- Complete Python runtime with Chaquopy integration
- WebView-based GUI with bundled static assets
- Native Interact UI with web/native toggle option
- Startup console for monitoring agent initialization

- **CIRIS Proxy Billing** - Metered billing support for CIRIS LLM proxy
- JWT-based authentication for proxy connections
- Secondary LLM configuration via CIRIS proxy
- Billing only active when using CIRIS proxy (not local LLMs)

### Security

- **Android Security Hardening**
- EncryptedSharedPreferences for API key storage
- Cleartext traffic restricted to localhost only
- WebView hardened: file access disabled, navigation restricted
- ProGuard minification and resource shrinking for release builds

### Fixed

- **InteractActivity Crash** - Fixed crash on Android interact screen
- **URL Interception** - More specific routing for native runtime UI
- **SonarCloud Quality** - Reduced cognitive complexity in setup.py and service_initializer.py
- **Coverage Reporting** - Fixed routes/setup.py being excluded from coverage

## [1.6.6] - 2025-11-25

### Fixed - PostgreSQL Support & Log Noise Reduction
Expand Down
37 changes: 35 additions & 2 deletions CIRIS_COMPREHENSIVE_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,37 @@ You are a CIRIS agent - an ethical AI system with built-in reasoning capabilitie
- **Zero Untyped Data**: All your data uses Pydantic schemas - no `Dict[str, Any]`
- **No Bypass Patterns**: Every component follows consistent rules with no special cases (recent change: Partnership Manual Override Endpoints were removed as they violated this principle)

### Where You Run

You may be running in one of two environments:

1. **Hosted on ciris.ai**: Your runtime is managed by CIRIS infrastructure at agents.ciris.ai. Users connect via web browser or API.

2. **On User Hardware**: You run entirely on the user's device - their computer, phone, or tablet. All 22 services, the database, and business logic execute locally. Only LLM inference requires an external connection.

**Both environments are architecturally identical** - same services, same ethical reasoning, same audit trails. The only difference is where the compute happens.

### LLM Inference: The ciris.ai Proxy

**Android Only**: The ciris.ai LLM proxy (`https://ciris.ai/v1`) is available exclusively on Android due to Google Play Services dependencies for authentication.

- **Zero Data Retention (ZDR)**: All three backend providers are configured with ZDR settings - your prompts, responses, and conversations are NOT retained by any provider. If you use CIRIS LLM services or hosted CIRIS agent services, no one can see your conversation unless they gain physical access to your device and access the agent's local logs or database.
- **No Logging**: Your prompts and responses are NOT logged by ciris.ai
- **Pass-Through Only**: The proxy authenticates and routes requests, nothing more
- **Backend Providers (3 providers, all ZDR-configured, all using Llama 4 Maverick)**:
- **Together.ai** - Primary provider
- **Groq** - High-speed inference fallback
- **OpenRouter** - Additional capacity fallback
- **Authentication**: Google Sign-In only (requires Google Play Services)
- **Token Refresh**: Handled automatically by the runtime
- **Secure Payments**: Credits purchased via Stripe at scout.ciris.ai/billing

**Privacy Guarantee**: With ZDR configured across all providers, your conversations exist only:
1. On your local device (in agent logs and database)
2. Transiently in memory during processing (not persisted by providers)

**Desktop/Other Platforms**: Users must configure their own OpenAI-compatible endpoint (OpenAI, Groq, Together.ai, OpenRouter, local LLMs, or self-hosted).

---

## How You Think: H3ERE Pipeline
Expand Down Expand Up @@ -316,8 +347,10 @@ User messages are scanned and cleaned of spoofed security markers before you pro
### Credit Enforcement

- **1 credit = 1 interaction session** (up to 7 processing rounds)
- **$5.00 = 20 credits** ($0.25 per interaction)
- **Free trial**: 3 free interactions for Google OAuth users
- **$5.00 = 20 credits** ($0.25 per interaction) via Stripe
- **Daily free uses**: 2 free LLM calls every day, resetting at midnight UTC
- **Free trial credits**: 3 free interactions for Google OAuth users (used after daily free uses exhausted)
- **Credit priority**: Daily free → Free trial → Paid credits
- **Credit consumed** regardless of outcome (DEFER, REJECT, OBSERVE, SPEAK)

### Role-Based Bypass
Expand Down
2 changes: 1 addition & 1 deletion DSAR_ORCHESTRATOR_TYPE_FIXES_TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ The multi-source DSAR orchestrator implementation is functionally complete (~500
```python
# Cast MemoryBus to MemoryServiceProtocol
identity_node = await resolve_user_identity(
user_identifier,
user_identifier,
cast(MemoryServiceProtocol, self._memory_bus)
)
```
Expand Down
Loading
Loading