Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ Need specific knowledge? Load on demand:
- Updater, analytics, Sentry, env vars, CI → `knowledge-base/production-infra.md`
- Supabase auth, Google SSO, Keychain → `knowledge-base/auth.md`
- Translating UI strings, namespaces, ui/ labels prop pattern, `t()` rules → `knowledge-base/i18n.md`
- Provider-agnostic integrations layer (Composio + Merge behind one trait) → `knowledge-base/integrations-providers.md`

Design work? Skills: `/critique` before, `/polish` after. Else `/clarify` (copy), `/distill` (overloaded screen), `/animate` (micro-interactions), `/audit` (a11y).

Expand Down
81 changes: 81 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ members = [
"engine/houston-agents-conversations",
"engine/houston-file-watcher",
"engine/houston-composio",
"engine/houston-integrations",
"engine/houston-merge",
"engine/houston-cli-bundle",
"engine/houston-claude-installer",
"engine/houston-engine-core",
Expand Down Expand Up @@ -46,6 +48,8 @@ houston-ui-events = { version = "0.4.12", path = "engine/houston-ui-events" }
houston-agents-conversations = { version = "0.4.12", path = "engine/houston-agents-conversations" }
houston-file-watcher = { version = "0.4.12", path = "engine/houston-file-watcher" }
houston-composio = { version = "0.4.12", path = "engine/houston-composio" }
houston-integrations = { version = "0.4.12", path = "engine/houston-integrations" }
houston-merge = { version = "0.4.12", path = "engine/houston-merge" }
houston-cli-bundle = { version = "0.4.12", path = "engine/houston-cli-bundle" }
houston-claude-installer = { version = "0.4.12", path = "engine/houston-claude-installer" }
houston-engine-core = { version = "0.4.12", path = "engine/houston-engine-core" }
Expand Down
16 changes: 12 additions & 4 deletions app/src-tauri/src/houston_prompt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,32 @@
//! These strings are the product layer. The engine is prompt-agnostic: it
//! assembles per-agent context from disk, while this module defines how the
//! Houston desktop agent behaves and speaks.
//!
//! Integrations-provider guidance (Composio CLI usage / Merge MCP usage)
//! no longer lives here — it moved into the engine alongside each provider
//! crate (`houston_composio::COMPOSIO_GUIDANCE`, `houston_merge::MERGE_GUIDANCE`).
//! The engine appends the active provider's guidance at session-spawn time so
//! the agent sees the right instructions for whichever provider the user is
//! currently using, without restarting the engine on a runtime picker switch.

mod base;
mod integrations;
mod onboarding;
mod routines;
mod skills_memory;

pub use base::HOUSTON_SYSTEM_PROMPT;
pub use integrations::COMPOSIO_GUIDANCE;
pub use onboarding::ONBOARDING_GUIDANCE;
pub use routines::ROUTINES_GUIDANCE;
pub use skills_memory::SELF_IMPROVEMENT_GUIDANCE;

/// Build the composite system prompt the engine uses as its fallback.
/// Order: base identity, skills/memory guidance, routines guidance, Composio guidance.
/// Order: base identity, skills/memory guidance, routines guidance.
/// The active integrations provider's operational guidance is appended by
/// the engine at session-spawn time (see
/// `houston_engine_server::compose_app_system_prompt`).
pub fn system_prompt() -> String {
format!(
"{HOUSTON_SYSTEM_PROMPT}\n\n---\n\n{SELF_IMPROVEMENT_GUIDANCE}\n\n---\n\n{ROUTINES_GUIDANCE}{COMPOSIO_GUIDANCE}"
"{HOUSTON_SYSTEM_PROMPT}\n\n---\n\n{SELF_IMPROVEMENT_GUIDANCE}\n\n---\n\n{ROUTINES_GUIDANCE}"
)
}

Expand Down
23 changes: 18 additions & 5 deletions app/src/components/composio-auth-dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,31 @@ import {
Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription,
} from "@houston-ai/core";
import { Loader2, ExternalLink } from "lucide-react";
import type { ComposioAuthState } from "../hooks/use-composio-auth";

/**
* Structural shape shared by every provider's sign-in hook
* (`useComposioAuth`, `useIntegrationsAuth`). Lets one dialog component
* render the in-progress UI regardless of which provider is active.
*/
interface AuthStateShape {
open: boolean;
phase: "idle" | "waiting" | "error";
loginUrl: string | null;
error: string | null;
}

interface ComposioAuthDialogProps {
state: ComposioAuthState;
state: AuthStateShape;
onClose: () => void;
onReopenBrowser: () => void;
}

/**
* Sign-in dialog for Composio. Always shows the login URL as a
* clickable button as soon as `state.loginUrl` is set, so the user
* can always manually open it even if the auto-open failed.
* Sign-in dialog used for both Composio and Merge flows — the shape is
* identical so one component renders the in-progress UI regardless of
* which provider is active. Always shows the login URL as a clickable
* button as soon as `state.loginUrl` is set, so the user can always
* manually open it even if the auto-open failed.
*/
export function ComposioAuthDialog({
state,
Expand Down
Loading