@click.group(invoke_without_command=True)
@click.argument("source", required=False)
@click.option(
"--list",
"list_sources",
is_flag=True,
help="List connected sources and sync status.",
)
@click.option(
"--sync",
"trigger_sync",
is_flag=True,
help="Trigger incremental sync for all sources.",
)
@click.option(
"--disconnect",
"disconnect_source",
default="",
help="Disconnect a source.",
)
@click.option(
"--path",
default="",
help="Path for filesystem connectors (e.g., Obsidian vault).",
)
@click.pass_context
def connect(
ctx: click.Context,
source: str | None,
list_sources: bool,
trigger_sync: bool,
disconnect_source: str,
path: str,
) -> None:
"""Manage data source connections (Gmail, Obsidian, etc.)."""
# Lazy imports to avoid top-level side effects
import openjarvis.connectors.gmail # noqa: F401
import openjarvis.connectors.obsidian # noqa: F401
from openjarvis.core.registry import ConnectorRegistry
if list_sources:
_list_sources(ConnectorRegistry)
return
if trigger_sync:
click.echo("Sync not yet implemented in CLI")
return
if disconnect_source:
_disconnect_source(ConnectorRegistry, disconnect_source)
return
if source:
_connect_source(ConnectorRegistry, source, path=path)
return
# No arguments — show help
click.echo(ctx.get_help())