Files
javadandCursor b93ecf1691 Initial commit of the Kamidso API.
Keep source, config, and deploy files. Leave runtime data, uploads, and logs out of git.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 13:43:09 +03:30

84 lines
2.5 KiB
Python

from __future__ import annotations
import argparse
import os
from kamidso.settings.paths import DEFAULT_ENGINE_CONFIG
def _add_serve_args(parser: argparse.ArgumentParser) -> None:
parser.add_argument("--host", default=os.environ.get("KAMIDSO_HOST", "127.0.0.1"))
parser.add_argument(
"--port",
type=int,
default=int(os.environ.get("KAMIDSO_PORT", "5670")),
)
parser.add_argument(
"--config",
"-c",
default=os.environ.get("KAMIDSO_ENGINE_CONFIG", DEFAULT_ENGINE_CONFIG),
help=f"Engine TOML config (default: {DEFAULT_ENGINE_CONFIG})",
)
def main() -> None:
from kamidso.bootstrap.env_file import load_app_env
from kamidso.bootstrap.workspace_path import ensure_workspace_packages
ensure_workspace_packages()
load_app_env()
parser = argparse.ArgumentParser(prog="kamidso", description="Kamidso product server")
sub = parser.add_subparsers(dest="command")
serve = sub.add_parser("serve", help="Run Kamidso API server")
_add_serve_args(serve)
serve.add_argument("--reload", action="store_true")
dev = sub.add_parser("dev", help="Alias for kamidso serve with reload")
_add_serve_args(dev)
args = parser.parse_args()
if args.command in {None, "serve", "dev"}:
from kamidso.bootstrap.preflight import format_preflight_error, missing_engine_dependencies
missing = missing_engine_dependencies()
if missing:
raise SystemExit(format_preflight_error(missing))
import logging
import uvicorn
from kamidso.settings.paths import resolve_config_path
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(name)s %(message)s",
)
config_path = resolve_config_path(
getattr(args, "config", None) or DEFAULT_ENGINE_CONFIG
)
os.environ["KAMIDSO_ENGINE_CONFIG"] = config_path
host = getattr(args, "host", os.environ.get("KAMIDSO_HOST", "127.0.0.1"))
port = int(getattr(args, "port", os.environ.get("KAMIDSO_PORT", "5670")))
reload = getattr(args, "reload", False) or args.command == "dev"
uvicorn.run(
"kamidso.api.app:create_fastapi_app",
factory=True,
host=host,
port=port,
reload=reload,
timeout_keep_alive=75,
log_level="info",
access_log=True,
)
else:
parser.error(f"Unknown command: {args.command}")
if __name__ == "__main__":
main()