Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
06564d8
edge code
AnkushMalaker Mar 15, 2026
891134e
tiny fixes
AnkushMalaker Mar 15, 2026
259007a
tiny fix again
AnkushMalaker Mar 15, 2026
9f23f62
minor fix
AnkushMalaker Mar 15, 2026
338fd88
auto discover
AnkushMalaker Mar 15, 2026
c7060eb
reworked
AnkushMalaker Mar 15, 2026
8c26529
fix
AnkushMalaker Mar 15, 2026
ed66c78
missing file
AnkushMalaker Mar 15, 2026
8667388
major fix
AnkushMalaker Mar 16, 2026
0b19d5c
input fix
AnkushMalaker Mar 16, 2026
12246e3
fix
AnkushMalaker Mar 16, 2026
3149339
fix docker
AnkushMalaker Mar 16, 2026
3377e76
fix
AnkushMalaker Mar 16, 2026
3d8b43b
ui tweak
AnkushMalaker Mar 16, 2026
fca6fcf
Add support for optional static ESPHome device IP configuration
AnkushMalaker Mar 16, 2026
5765f45
Merge branch 'dev' into feat/tailscale-discovery
AnkushMalaker Mar 20, 2026
19a8c5d
Refactor audio streaming and authentication handling
AnkushMalaker Mar 28, 2026
2eb1cd3
app reconnect update
AnkushMalaker Mar 28, 2026
65bd261
add app updates
AnkushMalaker Mar 28, 2026
16d2413
update package
AnkushMalaker Mar 28, 2026
3df406b
app: disable expo-updates and add file-based crash logging
AnkushMalaker Apr 21, 2026
f614f2e
deps: upgrade Expo SDK 53 -> 55 and bump Xcode 26 image
AnkushMalaker Apr 21, 2026
ef9443a
deps: bump react/react-dom to 19.2.5 so npm ci works on EAS
AnkushMalaker Apr 21, 2026
8f657f0
metro: remove disableHierarchicalLookup (SDK 55 needs it)
AnkushMalaker Apr 21, 2026
cdf4966
fix: crash loop in index.tsx + logger now writes to disk on SDK 55
AnkushMalaker Apr 21, 2026
f038808
refactor: replace Neo4j with FalkorDB in configuration and codebase
AnkushMalaker Apr 21, 2026
b319b2b
feat: add View Logs menu item to wearable and relay menu bar apps
AnkushMalaker May 25, 2026
df2f77d
fix: scrollable log dialog via NSScrollView+NSTextView
AnkushMalaker May 25, 2026
d59becd
chore: drop havpe-relay/relay.sh, keep start.sh as single entrypoint
AnkushMalaker May 25, 2026
5ca3627
refactor: remove qdrant-test log commands from CI workflows
AnkushMalaker Jun 3, 2026
1eea3ed
feat(vault-sync): macOS menu bar app to sync Chronicle vault via Sync…
AnkushMalaker Jun 3, 2026
50c2a2c
fix(vault-sync): drop removed --no-default-folder flag for Syncthing v2
AnkushMalaker Jun 3, 2026
4bfbfde
feat(discovery): loud backend URL resolution across menu bar apps
AnkushMalaker Jun 3, 2026
fd3adaf
docs(vault-sync): document macOS BACKEND_URL gotcha and verified serv…
AnkushMalaker Jun 3, 2026
474beaa
feat(vault-sync): server-side Syncthing service + pairing broker
AnkushMalaker Jun 3, 2026
c701b78
holy commit
AnkushMalaker Jun 3, 2026
19a827f
asr providers
AnkushMalaker Jun 3, 2026
f26f67e
feat(vault-sync): ignore .obsidian dir in Syncthing folders
AnkushMalaker Jun 3, 2026
4b5363c
feat(havpe): play notification tones on device via backend downlink
AnkushMalaker Jun 4, 2026
df33bcb
feat(havpe): relay serves backend TTS audio on the LAN (play-audio au…
AnkushMalaker Jun 4, 2026
81f3e61
gemma misc files asr
AnkushMalaker Jun 4, 2026
00d60ef
hermes
AnkushMalaker Jun 4, 2026
a61ab03
wakeword plumbing
AnkushMalaker Jun 4, 2026
1211dd2
app update
AnkushMalaker Jun 5, 2026
3208cdd
fix(app): bump expo-audio to ~55.0.14 for Expo SDK 55 compatibility
AnkushMalaker Jun 5, 2026
12bb323
update
AnkushMalaker Jun 5, 2026
b7be32d
fix(app): pin expo-asset to SDK 55 (~55.0.17), was pulled to 56.0.15
AnkushMalaker Jun 5, 2026
9d12bc5
fix(vault-sync): detach stale same-path folders on pair + surface fol…
AnkushMalaker Jun 6, 2026
0c3add9
Merge branch 'fix/optimizations-2' of github.com:SimpleOpenSoftware/c…
AnkushMalaker Jun 6, 2026
5b980cf
fix(vault-sync): surface Syncthing errors in logs; prevent case-colli…
AnkushMalaker Jun 6, 2026
849b7d7
feat(tones): single-source wake-word tones via inline play-audio
AnkushMalaker Jun 8, 2026
e4bd7c4
mega commit cuz im a terrible developer
AnkushMalaker Jun 13, 2026
2260393
feat(vault-graph-vr): WebXR 3D vault graph viewer for Quest
AnkushMalaker Jun 15, 2026
c246a28
feat(vault-graph-vr): node grab/anchor, reader panel, passthrough, 36…
AnkushMalaker Jun 15, 2026
3d797c0
feat(wearable-client): macOS screen + accessibility capture (stage 1)
AnkushMalaker Jun 16, 2026
87075df
feat(wearable-client): capture every active display (one JPEG per scr…
AnkushMalaker Jun 16, 2026
f4e6aad
feat(wearable-client): ScreenCaptureKit capture + .app bundle (stage 2)
AnkushMalaker Jun 16, 2026
6983af0
fix(wearable-client): build .app from isolated bundle/ dir (py2app)
AnkushMalaker Jun 17, 2026
e7b6496
feat(wearable-client): run capture under launchd agent, drop py2app b…
AnkushMalaker Jun 17, 2026
6e175a4
feat(wearable-client): metadata sidecar (events.jsonl) + OCR + analytics
AnkushMalaker Jun 17, 2026
f82f516
feat(wearable-client): bound capture storage (dedup + idle-skip + ret…
AnkushMalaker Jun 17, 2026
270d8f1
feat(wearable-client): skip capture while screen locked; refine stora…
AnkushMalaker Jun 17, 2026
f7671ba
feat(wearable-client): half-res frames + thumbnail dedup hash + setti…
AnkushMalaker Jun 17, 2026
7541a36
feat(wearable-client): show running version (git hash + date) in menu
AnkushMalaker Jun 17, 2026
55dd743
kitchen sink commit. Kokoro TTS support and enhance backend configur…
AnkushMalaker Jun 19, 2026
e29edc6
edge deployment
AnkushMalaker Jun 19, 2026
a949375
defaults
AnkushMalaker Jun 19, 2026
7edf14d
fix(wizard): guard Tailscale prereq in join-cluster flow
AnkushMalaker Jun 19, 2026
86fbbc9
updates
AnkushMalaker Jun 19, 2026
f40b4ec
feat(boot): autostart container stack on boot via chronicle-stack sys…
AnkushMalaker Jun 19, 2026
028e050
fix(speaker): serve web-ui over plain HTTP behind Caddy, drop basic-ssl
AnkushMalaker Jun 19, 2026
7a6b74a
update config manager and llm services
AnkushMalaker Jun 19, 2026
0a95070
update system page
AnkushMalaker Jun 19, 2026
8914d21
update .gitignore
AnkushMalaker Jun 19, 2026
0026d3f
update wizard flow
AnkushMalaker Jun 19, 2026
aafd85d
update wizard flow
AnkushMalaker Jun 19, 2026
5461257
update wizard flow
AnkushMalaker Jun 19, 2026
6ddc8e2
updates
AnkushMalaker Jun 19, 2026
59aed8a
more updates
AnkushMalaker Jun 21, 2026
53f419a
Merge branch 'fix/optimizations-2' of github.com:SimpleOpenSoftware/c…
AnkushMalaker Jun 21, 2026
6668b4c
Connection resilience + auth/network UX
AnkushMalaker Jun 21, 2026
cab0120
app updates
AnkushMalaker Jun 21, 2026
e4c08cd
clean up memory systems
AnkushMalaker Jun 21, 2026
e0b3961
updates to docs
AnkushMalaker Jun 21, 2026
25d2c67
update yee
AnkushMalaker Jun 22, 2026
5d0ec1a
Add device_audio module for Opus streaming to ESP32 devices
AnkushMalaker Jun 22, 2026
f7731a5
Elato: newest-wins device playback (cancel superseded Opus clip)
AnkushMalaker Jun 22, 2026
80b9ee9
Remove CAPTURE.md from version control
AnkushMalaker Jun 22, 2026
634626e
websocket connection
AnkushMalaker Jun 23, 2026
5c4cf9b
web view updates
AnkushMalaker Jun 23, 2026
300b177
default plugins
AnkushMalaker Jun 23, 2026
2000ecd
Bump app version to 1.0.7
AnkushMalaker Jun 23, 2026
0547c6b
Move backend setup/account into Settings gear; inline reconnect indic…
AnkushMalaker Jun 23, 2026
185ea49
feat(speaker): robust diarization via cluster-then-identify + forced …
AnkushMalaker Jun 24, 2026
ddcb22b
feat(speaker): wire reconciliation/identify knobs to diarization config
AnkushMalaker Jun 24, 2026
9369ea4
fix(speaker): guard chunk reconciliation against NaN centroids
AnkushMalaker Jun 24, 2026
ec7f7e8
Recognize Elato devices in BLE discovery filters
AnkushMalaker Jun 25, 2026
7482057
Forward backend Opus downlink to Elato BLE speaker
AnkushMalaker Jun 25, 2026
326056f
big chungus commit
AnkushMalaker Jun 29, 2026
04a9a86
Enhance conversation controller to compute unique speakers and segmen…
AnkushMalaker Jun 29, 2026
4657c9f
cleaner
AnkushMalaker Jun 29, 2026
49be1a7
refactor: hoist function-level imports to module top
AnkushMalaker Jul 13, 2026
ce3e57c
feat: plugin degraded state + background recovery loop
AnkushMalaker Jul 13, 2026
963f6a5
feat: fallback LLM with one-shot retry on transport failures
AnkushMalaker Jul 13, 2026
a250dbb
feat: segment deletion annotations + curated speaker enrollment
AnkushMalaker Jul 13, 2026
9191186
chore: satisfy pre-push formatting hooks (black, isort, eof-newline)
AnkushMalaker Jul 13, 2026
62caaea
fix: three latent bugs found during import sweep
AnkushMalaker Jul 13, 2026
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
  •  
  •  
  •  
73 changes: 73 additions & 0 deletions .easignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# .easignore at repo root — used by EAS because this is a monorepo and
# the git root is the upload root. Must cover both the monorepo top-level
# and the app/ subdir (EAS ignores .gitignore when this file exists).

# --- Sibling projects not needed for the Expo build ---
backends/
extras/
tests/
Docs/
sdk/
untracked/

# --- Root-level junk / non-code artifacts ---
*.log
*.env*
asc-api-key.p8
**/asc-api-key.p8
*.m4a
*.wav
plan.md
sample-voice-response.json
deepgram_response.json
init-feedback
*.ipa
*.apk
*.aab
connection-logging-*.md
memory-service-settings.md
docs-consolidation-analysis.md
BLE_OPTIMIZATION.md
.github/
.cursor/
.claude/

# --- Inside app/ (the EAS project) ---
# Dependencies — reinstalled on EAS build server
app/node_modules/
# Expo / Metro
app/.expo/
app/dist/
app/web-build/
app/.metro-health-check*
# Native build outputs — regenerated on EAS
app/android/.gradle/
app/android/build/
app/android/app/build/
app/android/app/.cxx/
app/ios/build/
app/ios/Pods/
app/ios/DerivedData/
app/ios/*.xcworkspace/xcuserdata/
app/ios/*.xcodeproj/xcuserdata/
app/ios/*.xcodeproj/project.xcworkspace/xcuserdata/
# Local artifacts
app/*.ipa
app/*.apk
app/*.aab
app/build-*.ipa
# Credentials (EAS uses server-side credentials)
app/*.jks
app/*.p8
app/*.p12
app/*.key
app/*.mobileprovision
app/*.pem
# Logs
app/npm-debug.*
app/yarn-debug.*
app/yarn-error.*

# --- OS / editor ---
.DS_Store
**/.DS_Store
20 changes: 2 additions & 18 deletions .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ BACKEND_PORT=8000
WEBUI_PORT=5173
SPEAKER_PORT=8085
MONGODB_PORT=27017
QDRANT_PORT=6333
NGROK_PORT=4040

# Kubernetes node ports (for LoadBalancer services)
Expand Down Expand Up @@ -64,7 +63,7 @@ ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=secure-admin-password

# CORS origins (auto-generated based on DOMAIN and ports)
CORS_ORIGINS=http://${DOMAIN}:${WEBUI_PORT},http://${DOMAIN}:3000,http://localhost:${WEBUI_PORT},http://localhost:3000
CORS_ORIGINS=http://${DOMAIN}:${WEBUI_PORT},http://localhost:${WEBUI_PORT}

# ========================================
# LLM CONFIGURATION
Expand Down Expand Up @@ -107,28 +106,13 @@ PARAKEET_ASR_URL=http://host.docker.internal:8767
MONGODB_URI=mongodb://mongo:${MONGODB_PORT}
MONGODB_K8S_URI=mongodb://mongodb.${INFRASTRUCTURE_NAMESPACE}.svc.cluster.local:27017/chronicle

# Qdrant configuration
QDRANT_BASE_URL=qdrant
QDRANT_K8S_URL=qdrant.${INFRASTRUCTURE_NAMESPACE}.svc.cluster.local

# Neo4j configuration (optional)
NEO4J_HOST=neo4j-mem0
NEO4J_USER=neo4j
NEO4J_PASSWORD=neo4j-password

# ========================================
# MEMORY PROVIDER CONFIGURATION
# ========================================

# Memory Provider: chronicle or openmemory_mcp
# Memory Provider: chronicle (agentic Markdown vault) — the only provider
MEMORY_PROVIDER=chronicle

# OpenMemory MCP configuration (when MEMORY_PROVIDER=openmemory_mcp)
OPENMEMORY_MCP_URL=http://host.docker.internal:8765
OPENMEMORY_CLIENT_NAME=chronicle
OPENMEMORY_USER_ID=openmemory
OPENMEMORY_TIMEOUT=30

# ========================================
# SPEAKER RECOGNITION CONFIGURATION
# ========================================
Expand Down
14 changes: 6 additions & 8 deletions .github/workflows/advanced-docker-compose-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,14 @@ jobs:
OWNER_LC=$(echo "$OWNER" | tr '[:upper:]' '[:lower:]')

# CUDA variants from pyproject.toml
CUDA_VARIANTS=("cpu" "cu121" "cu126" "cu128")
CUDA_VARIANTS=("cpu" "cu126" "cu128")

# Base services (no CUDA variants, no profiles)
# Image names must match what docker-compose.yml expects (chronicle-backend, chronicle-webui)
# Image names must match what docker-compose.yml expects (chronicle-backend).
# The webui is dev-server only (webui-dev, built locally from Dockerfile.dev),
# so there is no prebuilt webui image to distribute.
base_service_specs=(
"chronicle-backend|chronicle-backend|docker-compose.yml|."
"webui|chronicle-webui|docker-compose.yml|."
)

# Build and push base services
Expand Down Expand Up @@ -193,10 +194,10 @@ jobs:
docker system prune -af || true
done

# Build and push parakeet-asr with CUDA variants (cu121, cu126, cu128)
# Build and push parakeet-asr with CUDA variants (cu126, cu128)
echo "::group::Building and pushing parakeet-asr CUDA variants"
cd ../../extras/asr-services
for cuda_variant in cu121 cu126 cu128; do
for cuda_variant in cu126 cu128; do
echo "Building parakeet-asr-${cuda_variant}"
export PYTORCH_CUDA_VERSION="${cuda_variant}"
docker compose build parakeet-asr
Expand Down Expand Up @@ -289,20 +290,17 @@ jobs:
### Core Services
\`\`\`bash
docker pull ghcr.io/${OWNER_LC}/chronicle-backend:${VERSION}
docker pull ghcr.io/${OWNER_LC}/chronicle-webui:${VERSION}
\`\`\`

### Parakeet ASR (pick your CUDA version)
\`\`\`bash
docker pull ghcr.io/${OWNER_LC}/chronicle-asr-nemo-cu121:${VERSION}
docker pull ghcr.io/${OWNER_LC}/chronicle-asr-nemo-cu126:${VERSION}
docker pull ghcr.io/${OWNER_LC}/chronicle-asr-nemo-cu128:${VERSION}
\`\`\`

### Speaker Recognition (pick your variant)
\`\`\`bash
docker pull ghcr.io/${OWNER_LC}/chronicle-speaker-cpu:${VERSION}
docker pull ghcr.io/${OWNER_LC}/chronicle-speaker-cu121:${VERSION}
docker pull ghcr.io/${OWNER_LC}/chronicle-speaker-cu126:${VERSION}
docker pull ghcr.io/${OWNER_LC}/chronicle-speaker-cu128:${VERSION}
\`\`\`
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/full-tests-with-api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ jobs:
docker compose -f docker-compose-test.yml logs workers-test > logs/workers.log 2>&1 || true
docker compose -f docker-compose-test.yml logs mongo-test > logs/mongo.log 2>&1 || true
docker compose -f docker-compose-test.yml logs redis-test > logs/redis.log 2>&1 || true
docker compose -f docker-compose-test.yml logs qdrant-test > logs/qdrant.log 2>&1 || true
docker compose -f docker-compose-test.yml logs speaker-service-test > logs/speaker.log 2>&1 || true
echo "✓ Logs saved to backends/advanced/logs/"
ls -lh logs/
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/ios-testflight.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: iOS TestFlight Deploy

permissions:
contents: read

on:
push:
branches: [main]
paths: ['app/**']
workflow_dispatch:

jobs:
build-and-submit:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./app

steps:
- name: Setup repo
uses: actions/checkout@v4

- name: Setup node
uses: actions/setup-node@v4.0.2
with:
node-version: 20.x
cache: 'npm'
cache-dependency-path: ./app/package-lock.json

- name: Setup Expo
uses: expo/expo-github-action@v8
with:
expo-version: latest
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}

- name: Install dependencies
run: npm ci

- name: Write ASC API Key
run: echo "${{ secrets.ASC_API_KEY_P8 }}" > asc-api-key.p8

- name: Build and submit to TestFlight
run: eas build --platform ios --profile testflight --auto-submit --non-interactive
1 change: 0 additions & 1 deletion .github/workflows/pr-tests-with-api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ jobs:
docker compose -f docker-compose-test.yml logs workers-test > logs/workers.log 2>&1 || true
docker compose -f docker-compose-test.yml logs mongo-test > logs/mongo.log 2>&1 || true
docker compose -f docker-compose-test.yml logs redis-test > logs/redis.log 2>&1 || true
docker compose -f docker-compose-test.yml logs qdrant-test > logs/qdrant.log 2>&1 || true
docker compose -f docker-compose-test.yml logs speaker-service-test > logs/speaker.log 2>&1 || true
echo "✓ Logs saved to backends/advanced/logs/"
ls -lh logs/
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/robot-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ jobs:
docker compose -f docker-compose-test.yml logs workers-test > logs/workers.log 2>&1 || true
docker compose -f docker-compose-test.yml logs mongo-test > logs/mongo.log 2>&1 || true
docker compose -f docker-compose-test.yml logs redis-test > logs/redis.log 2>&1 || true
docker compose -f docker-compose-test.yml logs qdrant-test > logs/qdrant.log 2>&1 || true
docker compose -f docker-compose-test.yml logs speaker-service-test > logs/speaker.log 2>&1 || true
echo "✓ Logs saved to backends/advanced/logs/"
ls -lh logs/
Expand Down
18 changes: 16 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
**/__pycache__
*.wav
# Wake-word notification tones are bundled assets, not user audio — keep them tracked
# so they're baked into the wakeword-service image (and served to all clients).
!extras/wakeword-service/tones/*.wav
**/*.env
!**/.env.template
**/memory_config.yaml
Expand All @@ -15,6 +18,10 @@ config/config.yml
config/plugins.yml
!config/plugins.yml.template

# Advertised services — per-machine runtime state, regenerated by the node agent on
# every start (services.py / edge/service_manager.py). No defaults, so no template.
config/advertised-services.json

# Individual plugin configs (may contain user-specific settings)
backends/advanced/src/advanced_omi_backend/plugins/*/config.yml
!backends/advanced/src/advanced_omi_backend/plugins/*/config.yml.template
Expand All @@ -27,7 +34,6 @@ plugins/*/config.yml.backup
example/*
**/node_modules/*
**/ollama-data/*
**/qdrant_data/*
**/model_cache/*
.vscode/*
**/audio_chunks/*
Expand All @@ -54,6 +60,7 @@ untracked/*
backends/advanced/data/*
backends/advanced/diarization_config.json
extras/local-wearable-client/devices.yml
extras/llm-services/cache/**
!extras/local-wearable-client/devices.yml.template
extras/havpe-relay/firmware/secrets.yaml
extras/test-audios/*
Expand All @@ -65,6 +72,9 @@ extras/test-audios/*
extras/speaker-omni-experimental/data/*
extras/speaker-omni-experimental/cache/*

# Discovery agent PID file
edge/.discovery-agent.pid

# AI Stuff
.claude

Expand All @@ -81,14 +91,18 @@ backends/advanced/ssl/*
extras/speaker-recognition/nginx.conf
extras/speaker-recognition/Caddyfile

# Generated compose overrides (e.g. Tailscale socket mount for Caddy-managed certs)
backends/advanced/docker-compose.override.yml
extras/speaker-recognition/docker-compose.override.yml

# Cache
extras/speaker-recognition/cache/*
extras/speaker-recognition/outputs/*
**/model_cache_strix_test/*

# my backup
backends/advanced/src/_webui_original/*
backends/advanced-backend/data/neo4j_data/*
backends/advanced-backend/data/falkordb_data/*
backends/advanced-backend/data/speaker_model_cache/

*.bin
Expand Down
Loading
Loading