Skip to content

Fix/monday patches#7

Merged
senamakel merged 13 commits intodevelopfrom
fix/monday-patches
Mar 25, 2026
Merged

Fix/monday patches#7
senamakel merged 13 commits intodevelopfrom
fix/monday-patches

Conversation

@senamakel
Copy link
Copy Markdown
Member

No description provided.

- Added OAuthProviderButton to the Welcome component for Google authentication.
- Updated the branding from AlphaHuman to OpenHuman in the FeaturesStep component.
- Removed unnecessary Lottie animation from the Onboarding page for a cleaner layout.
- Changed the backend URL to point to the new API endpoint for TinyHumans.
- Commented out the Mnemonic route and related logic in AppRoutes for future consideration.
- Updated MiniSidebar to comment out the Invite Friends section.
- Removed unused navigation logic and upgrade call-to-action from the Home page.
- Adjusted Onboarding navigation to redirect to Home instead of Mnemonic.
- Introduced new binaries: `alphahuman-core` and `alphahuman-cli` for core process management and command-line interaction.
- Implemented `CoreProcessHandle` for managing the lifecycle of the core process.
- Added `core_rpc` module for handling RPC requests and responses.
- Created `core_server` module to manage core server logic and routing.
- Updated `alphahuman` commands to utilize the new RPC structure for health checks, security policies, and configuration management.
- Refactored existing code to streamline interactions with the core process and improve overall architecture.
- Added `clap` for command-line argument parsing in the `alphahuman-cli`.
- Updated `Cargo.lock` and `Cargo.toml` to include `clap` and its features.
- Refactored `alphahuman-cli` to utilize structured command handling with subcommands.
- Improved core process management and logging in `core_process.rs`.
- Enhanced routing and error handling in `core_server.rs` with new root and not found handlers.
- Updated various commands in `alphahuman.rs` to ensure core process is running before executing RPC calls.
- Added new functions for daemon program arguments and command line construction in the service module.
- Updated macOS and Linux installation functions to dynamically generate program arguments and command lines.
- Introduced a new `Reinstall` command in the CLI for easier service management.
- Refactored service command handling to utilize local service functions for improved clarity and maintainability.
- Updated terminology from "Daemon" to "Agent" in MiniSidebar, DaemonHealthPanel, and TauriCommandsPanel for consistency.
- Modified useDaemonHealth hook to probe agent status and handle agent lifecycle management.
- Introduced new agent server status interface and function in Tauri commands for improved status checking.
- Adjusted related comments and error handling to reflect the changes in terminology.
- Updated Home component to navigate to in-app conversations instead of opening a Telegram bot link.
- Improved macOS service management by implementing modern lifecycle commands and adding compatibility fallbacks for service control.
- Introduced new utility functions for handling macOS GUI domain and service targets.
- Removed SkillsGrid component and replaced it with a button that navigates to the Skills page.
- Improved layout with additional margin for better spacing in the Home component.
- Removed Gmail and Notion state synchronization functions from SkillProvider to streamline the component.
- Introduced a new memory bridge in the QuickJS library for skills to send memory payloads to the backend.
- Updated SkillContext to include an app handle for better integration with memory operations.
- Enhanced state management in the Rust backend to support memory insertion from skills.
- Added support for additional parameters in the `store_skill_sync` method, including `source_type`, `metadata`, `priority`, `created_at`, `updated_at`, and `document_id`.
- Refactored the `memory_insert` operation to accept a structured input, improving validation and error handling for title and content.
- Updated the JavaScript memory bridge to simplify the insertion process by removing the provider parameter and directly using metadata.
- Enhanced logging for successful memory insertions to improve traceability.
@github-actions
Copy link
Copy Markdown
Contributor

PR Protection Rule Violation

This PR targets the main branch, which is protected.

Only automated PRs from the create-develop-to-main-pr.yml workflow are allowed to target main.

Failed validation checks:

  • ❌ Author must be github-actions[bot] (found: senamakel)
  • ❌ Head branch must be develop (found: fix/monday-patches)
  • ❌ Title must match pattern: chore: merge develop into main or chore: merge develop into main (vX.Y.Z) (found: Fix/monday patches)
  • ❌ Body must contain: "This PR automatically merges changes from develop into main"
  • ❌ PR title must follow conventional commit format: <type>: <description>
    Allowed types: feat, fix, chore, refactor, docs, test, style, perf, revert
    Example: feat: add new authentication endpoint

To merge changes into main:

  1. Create your PR targeting the develop branch instead
  2. Once merged to develop, the automated workflow will create a PR from develop to main

Please update this PR to target develop instead, or close it and create a new PR targeting develop.

@senamakel senamakel changed the base branch from main to develop March 25, 2026 05:58
- Introduced a new `skillsSyncUi.ts` module to manage synchronization UI state for skills.
- Updated `Skills.tsx` to utilize the new synchronization state, providing visual feedback during sync operations.
- Refactored sync handling in `SkillCard` to improve user experience with progress indicators and messages.
- Added unit tests for the synchronization UI state logic to ensure correct behavior across various scenarios.
@senamakel senamakel merged commit aacfd45 into develop Mar 25, 2026
1 of 5 checks passed
@senamakel senamakel deleted the fix/monday-patches branch March 26, 2026 21:28
sanil-23 added a commit to sanil-23/openhuman that referenced this pull request Apr 2, 2026
Fixes from CodeRabbit review on PR tinyhumansai#268:

- tinyhumansai#8 Two engine instances: Add global.rs singleton shared between
  HeartbeatEngine::run() and RPC handlers. Both use get_or_init_engine()
  so decision log, counters, and last_tick_at are always in sync.

- tinyhumansai#3 Dedup disabled: tick() now extracts actual document IDs from
  memory via build_situation_report_with_doc_ids() and passes them
  to decision_log.record(). filter_unsurfaced() actually filters now.

- tinyhumansai#5 Decision log not loaded on trigger: tick() loads persisted log
  from KV on first execution (total_ticks == 0), not only from run().

- tinyhumansai#4 Inconsistent action schema: handle_escalation() normalizes agent
  response into RecommendedAction[] via normalize_escalation_response().
  Both act and escalate paths store the same schema.

- tinyhumansai#7 Key collision: store_actions() uses millisecond timestamp + random
  suffix instead of second-precision truncation.

- tinyhumansai#10 No-changes unreachable: tick() checks has_new_data (unsurfaced
  doc IDs) OR has_memory_changes (report text) instead of naive string
  matching on environment section.
graycyrus pushed a commit that referenced this pull request Apr 2, 2026
…eat (#268)

* feat: subconscious loop — local-model background awareness via heartbeat

Add a subconscious inference layer to the heartbeat engine. On each
tick, the engine reads HEARTBEAT.md tasks, builds a delta-based
situation report (memory docs, graph relations, skills health,
environment), and evaluates them with the local Ollama model.

Architecture:
- HeartbeatEngine (scheduler) delegates to SubconsciousEngine (brain)
- HeartbeatConfig extended with inference_enabled, context_budget_tokens
- No separate SubconsciousConfig — all config lives under [heartbeat]
- Default HEARTBEAT.md ships with 3 active tasks (email, deadlines, skills)

Subconscious module (src/openhuman/subconscious/):
- engine.rs: tick logic, local model inference, escalation to cloud model
- situation_report.rs: delta assembler (memory, graph, skills, env, tasks)
- prompt.rs: task-driven system prompt for local model
- decision_log.rs: dedup tracking with 24h TTL and acknowledgment
- types.rs: Decision (noop/act/escalate), TickOutput, RecommendedAction
- schemas.rs: RPC controllers (subconscious_status, subconscious_trigger)
- integration_test.rs: two-tick lifecycle test with fixtures

Decision flow:
- noop: no changes, skip — no LLM call wasted
- act: local model recommends actions → stored in memory KV
- escalate: calls cloud model to resolve → concrete actions stored

Verified with real Ollama inference (gemma3:4b):
- Tick 1: ingested gmail+notion → "act: deadline needs attention" (high)
- Tick 2: ingested state changes → "act: deadline moved" (high)
- Skills health section populated from live skill registry

Closes #145

* feat: add subconscious_actions RPC endpoint

New endpoint openhuman.subconscious_actions returns stored action
entries from the subconscious KV namespace, sorted by most recent
first, with configurable limit (default 20).

Response format:
{
  "entries": [
    { "tick_at": 1775117975.58, "actions": [...] }
  ],
  "count": 1
}

The upcoming subconscious page will call this to display
notifications and recommended actions to the user.

* fix: budget underflow and UTF-8 panic in situation report truncation

- Use saturating_add for newline byte to prevent underflow when
  section exactly fills the remaining budget
- Truncate at valid UTF-8 char boundary using char_indices instead
  of raw byte slicing, which panicked on multibyte characters
- Add tests for exact-fit and multibyte truncation

* fix: address CodeRabbit review — shared engine, dedup, consistent schema

Fixes from CodeRabbit review on PR #268:

- #8 Two engine instances: Add global.rs singleton shared between
  HeartbeatEngine::run() and RPC handlers. Both use get_or_init_engine()
  so decision log, counters, and last_tick_at are always in sync.

- #3 Dedup disabled: tick() now extracts actual document IDs from
  memory via build_situation_report_with_doc_ids() and passes them
  to decision_log.record(). filter_unsurfaced() actually filters now.

- #5 Decision log not loaded on trigger: tick() loads persisted log
  from KV on first execution (total_ticks == 0), not only from run().

- #4 Inconsistent action schema: handle_escalation() normalizes agent
  response into RecommendedAction[] via normalize_escalation_response().
  Both act and escalate paths store the same schema.

- #7 Key collision: store_actions() uses millisecond timestamp + random
  suffix instead of second-precision truncation.

- #10 No-changes unreachable: tick() checks has_new_data (unsurfaced
  doc IDs) OR has_memory_changes (report text) instead of naive string
  matching on environment section.

* fix: include document content in situation report, not just titles

The local model needs actual content to evaluate HEARTBEAT.md tasks
meaningfully. Previously it only saw titles like "Deadline reminder"
with no way to know if it's urgent.

Now recalls content per namespace (up to 500 chars each, max 10
namespaces) via client.recall_namespace(). The model sees actual
email text and page content alongside the task checklist.

* fix: timestamp parsing, byte-boundary slicing, and truncation overshoot

- schemas.rs: split on first ':' after 'actions:' prefix before parsing
  timestamp, so keys like 'actions:123456:xyz' parse correctly
- situation_report.rs: use truncate_at_char_boundary() for error strings
  instead of raw byte slice which panics on multibyte characters
- situation_report.rs: fix append_section and truncate_at_char_boundary
  to use char END offset (i + len_utf8) in take_while condition, so
  multibyte chars that start before but end after the budget are excluded
sanil-23 added a commit to sanil-23/openhuman that referenced this pull request Apr 28, 2026
…ems)

tinyhumansai#4  gmail unknown bucket — orphan:{id} fallback instead of collapsing
    all no-address messages into one "unknown" source tree; messages with
    neither address nor id are dropped with a warn (skip sentinel).

tinyhumansai#5  PII in gmail/ingest.rs — participants, source_id, and owner wrapped
    with redact() before logging; no email addresses in log output.

tinyhumansai#7  PII in chunker.rs — source_id in debug logs replaced with
    redact(source_id) hash.

tinyhumansai#8  Parent dir fsync after rename in atomic.rs — on Unix, open the parent
    directory and call sync_all() after a successful rename so the dirent
    is durable across a crash; best-effort warn on failure, non-fatal.

tinyhumansai#9  Body verify on re-stage in atomic.rs — when the path already exists,
    read and hash the on-disk body; if sha differs from the new body,
    remove the stale file and re-write atomically so SQLite content_sha256
    always matches the on-disk bytes. New unit test covers the re-write path.

tinyhumansai#10 PII in paths.rs — malformed source_id fallback log now emits
    redact(source_id) instead of the raw string.

tinyhumansai#11 PII in read.rs — sha256 mismatch warn logs now emit
    redact(abs_path) instead of abs_path.display().

tinyhumansai#13 Same-tx enqueue in handle_extract — append_buffer and topic_route
    jobs are built before the transaction opens and enqueued via
    enqueue_tx() inside the same tx that commits the lifecycle update,
    eliminating the crash window where lifecycle commits but jobs are lost.

tinyhumansai#16 PII in score/extract/mod.rs — LLM extractor info! log demoted to
    debug! and endpoint wrapped with redact_endpoint() to strip
    path/query/credentials from the URL.

tinyhumansai#17 Non-email scope slug in bucket_seal.rs — only the gmail: prefix is
    stripped before slugify; all other source kinds (slack:, discord:,
    document:, …) slugify the full scope string so slack:#eng and
    discord:#eng no longer produce the same "eng" slug and collide in
    summaries/source/.

tinyhumansai#18 Don't commit summary on stage_summary failure — bucket_seal.rs,
    global_tree/digest.rs, and global_tree/seal.rs now propagate
    stage_summary errors via .context()?  instead of falling back to a
    NULL content_path row; the seal is retried via the normal job-retry
    path. insert_summary_tx callers in those three paths now always pass
    Some(&staged) instead of Option.

tinyhumansai#20 PII in topic_tree/backfill.rs — all entity_id occurrences in log
    lines (info/debug/warn) replaced with redact(entity_id).

New shared helper: src/openhuman/memory/tree/util/redact.rs
  - redact(s)          → stable 8-hex-char SHA-256 prefix for PII fields
  - redact_endpoint(u) → host:port only (strips scheme, creds, path, query)
  - Full unit-test coverage for both helpers

Items tinyhumansai#14 (lease tokens) and tinyhumansai#19 (preview-vs-disk reader audit)
intentionally deferred to follow-up commits — both have larger blast
radius and need separate review.

Items tinyhumansai#1, tinyhumansai#12, tinyhumansai#15 pushed back on PR thread (verified false positive or
covered by upstream contract).

Items #2, tinyhumansai#3 deferred (pre-existing in slack_backfill.rs, not introduced
by this PR).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
oxoxDev added a commit to oxoxDev/openhuman that referenced this pull request May 1, 2026
…humansai#1074)

Update SLACK-PARITY.md after tinyhumansai#1074 Phase 0 CDP probe revealed the real
root cause of the huddle popup blank:

- Row 5 (Huddles): The original "popup.location = url lost" hypothesis
  was invalidated. CDP trace shows no Page.frameNavigated ever fires on
  the popup target — URL stays at about:blank for the full window
  lifetime. Slack uses popup.document.write(html) to inject the huddle
  UI into the same about:blank document. The bug is CEF's paint /
  compositor lifecycle on same-document popups, tracked separately in
  tinyhumansai#1079.

- Out-of-scope "Huddle popup blank" entry rewritten with the corrected
  root cause and pointer to tinyhumansai#1079.

- Fixes shipped table extended with Bug C (slack:// deep-link
  workspace-isolation leak suppression) and Bug E (Slack Huddles
  audioCapture/videoCapture/displayCapture grant) — both surfaced
  during tinyhumansai#1074 instrumentation.

- Sign-off updated: huddle popup deferred to tinyhumansai#1079 with refined root
  cause; Bug C/E listed alongside the originally-shipped tinyhumansai#6/tinyhumansai#7/D fixes.

This commit is documentation only — no code change.
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.

1 participant