Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
4adcf37
docs(spec): life-capture layer design
jwalinsshah Apr 22, 2026
36eb444
docs(spec): cut Slack from life-capture v1, defer to v1.1
jwalinsshah Apr 22, 2026
f166a7b
docs(plans): Track 1 ship pipeline + Life-Capture #1 foundation
jwalinsshah Apr 22, 2026
e5b8c5c
fix(install): resolver function + reachability retry + smoke test
jwalinsshah Apr 22, 2026
e160e58
docs(plans): incorporate Onyx insights — ACL on items, sync_state tab…
jwalinsshah Apr 22, 2026
d7f2284
docs(plans): drop ubuntu from CI matrix in Track 1; preserve resolver…
jwalinsshah Apr 22, 2026
78fb199
docs(plans): add F15-F17 — curated MEMORY.md/USER.md layer
jwalinsshah Apr 22, 2026
0cdf247
feat(life_capture): module skeleton + sqlite-vec dep
jwalinsshah Apr 22, 2026
1d45ffb
feat(life_capture): core types — Item, Source, Person, Query, Hit, In…
jwalinsshah Apr 22, 2026
da09f01
feat(life_capture): PII redaction (email, phone, SSN, CC)
jwalinsshah Apr 22, 2026
a938f90
feat(life_capture): strip quoted replies from email bodies
jwalinsshah Apr 22, 2026
24d8264
feat(life_capture): SQLite schema + migration loader (rusqlite)
jwalinsshah Apr 22, 2026
ae57f28
feat(life_capture): Embedder trait + HostedEmbedder (OpenAI-compatible)
jwalinsshah Apr 22, 2026
f0441b5
fix(life_capture): make country code prefix fully optional in PHONE r…
jwalinsshah Apr 22, 2026
37da5e1
feat(curated_memory): MemoryStore for MEMORY.md + USER.md (atomic wri…
jwalinsshah Apr 22, 2026
5f97a00
feat(life_capture): sqlite-vec extension loading + 1536d item_vectors…
jwalinsshah Apr 22, 2026
be8e6a7
feat(life_capture): IndexWriter — upsert items with (source, external…
jwalinsshah Apr 22, 2026
2b11731
feat(life_capture): IndexReader keyword + vector search
jwalinsshah Apr 22, 2026
a57ff1c
feat(life_capture): hybrid_search combining vector + keyword + recency
jwalinsshah Apr 22, 2026
0f9d9b1
feat(life_capture): controller schemas + RPC handlers (get_stats, sea…
jwalinsshah Apr 22, 2026
35eac19
test(life_capture): end-to-end (redact → quote-strip → embed → upsert…
jwalinsshah Apr 22, 2026
3ae04ff
feat(life_capture): wire PersonalIndex + Embedder into core startup
jwalinsshah Apr 22, 2026
13b3276
feat(curated_memory): snapshot_pair() — frozen capture for prompt inj…
jwalinsshah Apr 22, 2026
89797c0
feat(curated_memory): expose memory_curated.{read,add,replace,remove}…
jwalinsshah Apr 22, 2026
1019693
fix(life_capture, curated_memory): address second-opinion review find…
jwalinsshah Apr 22, 2026
2efab6a
style(life_capture, curated_memory): apply rustfmt + finish curated_m…
jwalinsshah Apr 22, 2026
b10b953
fix(life_capture, curated_memory): address CodeRabbit review findings
jwalinsshah Apr 23, 2026
0d9caa9
feat(curated_memory): wire snapshot_pair() into agent prompt builders
jwalinsshah Apr 23, 2026
b3ba61c
test(life_capture): retrieval eval fixture + runner (top-K containment)
jwalinsshah Apr 23, 2026
65a4e8a
feat(life_capture): r2d2 connection pool for concurrent WAL readers
jwalinsshah Apr 23, 2026
be1112f
feat(life_capture): add ingest controller; wire iMessage scanner to it
jwalinsshah Apr 23, 2026
db85d70
feat(life_capture): composio ingest bridge for Gmail + Calendar (A2)
jwalinsshah Apr 23, 2026
37d6b6b
feat(people): contact resolution + scoring module (A5)
jwalinsshah Apr 23, 2026
87e468a
feat(eventkit): Calendar read + Reminders write bridge (A7)
jwalinsshah Apr 23, 2026
71260be
fix(people): wire address book resolver + migrate to CNContactStore (…
jwalinsshah Apr 23, 2026
b9c4233
chore(shell): add macOS permission usage strings for Contacts, Calend…
jwalinsshah Apr 23, 2026
6582bfc
fix(eventkit): cache EKEventStore + fix block lifetime + dedupe corre…
jwalinsshah Apr 23, 2026
53dd7f6
Merge A2: Composio→life_capture bridge for Gmail + Calendar
jwalinsshah Apr 23, 2026
48df662
Merge A5: people resolver + scorer + CNContactStore
jwalinsshah Apr 23, 2026
9c48626
Merge A7: EventKit Calendar read + Reminders write
jwalinsshah Apr 23, 2026
82b739c
refactor(agent/prompts): extract tests from mod.rs to sibling
jwalinsshah Apr 23, 2026
b946aff
refactor(channels/telegram): extract tests to sibling file
jwalinsshah Apr 23, 2026
0a67c89
fix(test): add missing curated_snapshot field to ParentExecutionConte…
jwalinsshah Apr 23, 2026
2452a1b
style(refactor): apply rustfmt to extracted test siblings
jwalinsshah Apr 23, 2026
0391899
style: cargo fmt --all
jwalinsshah Apr 23, 2026
af8860a
fix(clippy): remove PersonId::to_string shadow + derive Default on we…
jwalinsshah Apr 23, 2026
f969703
Merge remote-tracking branch 'upstream/main' into test/imessage-live-e2e
jwalinsshah Apr 23, 2026
9ec6494
fix(eventkit): redact PII from logs + fail closed on cache errors
jwalinsshah Apr 24, 2026
e6184d1
fix(life_capture): redact external_id from composio ingest logs
jwalinsshah Apr 24, 2026
6b301f2
fix(life_capture): derive embedder dim from model config instead of h…
jwalinsshah Apr 24, 2026
6246f37
fix(life_capture): pre-embed before item upsert to avoid partial-fail…
jwalinsshah Apr 24, 2026
5f3e9b7
fix(life_capture): align metadata schema field type to TypeSchema::Json
jwalinsshah Apr 24, 2026
c00d282
fix(people): resolve_or_create returns (PersonId, was_created) tuple
jwalinsshah Apr 24, 2026
4a98c26
fix(people): use unchecked_transaction + add debug logging in migrations
jwalinsshah Apr 24, 2026
c3b9689
fix(eventkit): serialize runtime tests on env var lock + assert bad-p…
jwalinsshah Apr 24, 2026
d8d9a82
fix(tests): fail fast if life-capture runtime already initialized in …
jwalinsshah Apr 24, 2026
9f9a096
fix(curated_memory): add canonical all_controller_schemas/all_registe…
jwalinsshah Apr 24, 2026
26664ca
test(life_capture): serialize iMessage e2e tests on shared OnceCell r…
jwalinsshah Apr 26, 2026
c03e59a
feat(examples): real iMessage demo — ingest chat.db, FTS5 search
jwalinsshah Apr 26, 2026
1ff30d1
merge upstream/main into test/imessage-live-e2e
jwalinsshah May 4, 2026
ca0faa4
merge upstream/main into test/imessage-live-e2e
jwalinsshah May 4, 2026
86c1b65
fix(agent-prompts): add curated_snapshot to PromptContext and test fi…
jwalinsshah May 4, 2026
c61c415
style(rust): format curated_memory and eventkit modules
jwalinsshah May 4, 2026
c241c9c
ci: retrigger checks after PR checklist update
jwalinsshah May 4, 2026
e7406c5
fix(prompts): borrow curated_snapshot from PromptContext
jwalinsshah May 4, 2026
309a4cb
fix(agent-prompts): decouple curated snapshot type and repair merge d…
jwalinsshah May 4, 2026
a474cae
fix(life-capture): add job_name to CronJobTriggered test event
jwalinsshah May 4, 2026
0b9ef6a
fix(agent): wire curated snapshot into parent contexts
jwalinsshah May 5, 2026
4750108
fix(agent): initialize curated snapshot in test contexts
jwalinsshah May 5, 2026
37ae8da
fix(agent): initialize calendar test curated snapshot
jwalinsshah May 5, 2026
f4c0b01
fix(agent): initialize public harness test curated snapshot
jwalinsshah May 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(life_capture): derive embedder dim from model config instead of h…
…ardcode

HostedEmbedder::dim() was hardcoded to 1536 regardless of which model was
configured. Add dim as a constructor parameter so model and vector width
stay in sync. At the bootstrap site, resolve dim from OPENHUMAN_EMBEDDINGS_DIM
(override), known model names (text-embedding-3-large→3072), or default 1536.

Addresses @coderabbitai on src/openhuman/life_capture/embedder.rs:32
  • Loading branch information
jwalinsshah committed Apr 24, 2026
commit 6b301f2e5d92ad4640ce8159bf569c489b9dea1a
12 changes: 12 additions & 0 deletions src/core/jsonrpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -943,11 +943,23 @@ async fn bootstrap_life_capture(workspace_dir: &std::path::Path) {
.unwrap_or_else(|_| "https://api.openai.com/v1".into());
let model = std::env::var("OPENHUMAN_EMBEDDINGS_MODEL")
.unwrap_or_else(|_| "text-embedding-3-small".into());
// Resolve dim from env so model and dim stay in sync.
// text-embedding-3-small / ada-002 → 1536 (default)
// text-embedding-3-large → 3072
// Custom models: override via OPENHUMAN_EMBEDDINGS_DIM.
let dim: usize = std::env::var("OPENHUMAN_EMBEDDINGS_DIM")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or_else(|| match model.as_str() {
"text-embedding-3-large" => 3072,
_ => 1536,
});
let embedder: Arc<dyn crate::openhuman::life_capture::embedder::Embedder> = Arc::new(
crate::openhuman::life_capture::embedder::HostedEmbedder::new(
base_url,
api_key,
model.clone(),
dim,
),
);
if let Err(e) =
Expand Down
9 changes: 7 additions & 2 deletions src/openhuman/life_capture/embedder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@ pub struct HostedEmbedder {
base_url: String,
api_key: String,
model: String,
/// Dimensionality of vectors produced by `model`. Must match the index
/// schema; if the model returns a different width `embed_batch` will bail.
dim: usize,
http: reqwest::Client,
}

impl HostedEmbedder {
pub fn new(base_url: String, api_key: String, model: String) -> Self {
pub fn new(base_url: String, api_key: String, model: String, dim: usize) -> Self {
let http = reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(30))
.connect_timeout(std::time::Duration::from_secs(10))
Expand All @@ -27,6 +30,7 @@ impl HostedEmbedder {
base_url,
api_key,
model,
dim,
http,
}
}
Expand Down Expand Up @@ -95,7 +99,7 @@ impl Embedder for HostedEmbedder {
}

fn dim(&self) -> usize {
1536
self.dim
}
}

Expand Down Expand Up @@ -128,6 +132,7 @@ mod tests {
format!("{}/v1", server.base_url()),
"test-key".into(),
"text-embedding-3-small".into(),
1536,
);
let out = emb.embed_batch(&["hello", "world"]).await.expect("embed");
assert_eq!(out.len(), 2);
Expand Down