{
  "$schema": "https://github.com/hasna/contracts/schema/hasna.service_contract.v1.json",
  "schema": "hasna.service_contract.v1",
  "name": "sessions",
  "class": "service",
  "contractVersion": "v1",
  "kitVersion": "0.14.0",
  "description": "Search and sync AI coding sessions (Claude, Codex, Codewith, Gemini). Local mode uses SQLite at ~/.hasna/sessions/sessions.db; cloud storage mode (HASNA_SESSIONS_STORAGE_MODE=cloud) is PURE REMOTE per Amendment A1 — sessions-serve reads/writes shared Postgres directly for session metadata, imported messages, and tool calls via /v1 including /v1/sessions/import.",
  "bins": [
    "sessions",
    "sessions-mcp",
    "sessions-serve"
  ],
  "hosting": [
    "user-hosted"
  ],
  "serviceSurfaces": [
    {
      "name": "http-api",
      "kind": "api",
      "status": "supported",
      "bin": "sessions-serve",
      "authMode": "api-key",
      "health": {
        "method": "GET",
        "path": "/health",
        "public": true
      },
      "readiness": {
        "method": "GET",
        "path": "/ready",
        "public": true
      },
      "version": {
        "method": "GET",
        "path": "/version",
        "public": true
      },
      "apiBasePath": "/v1",
      "openApiPath": "/openapi.json"
    },
    {
      "name": "typescript-sdk",
      "kind": "sdk",
      "status": "supported",
      "authMode": "api-key",
      "exportSubpath": "./sdk",
      "clientClassName": "SessionsClient",
      "generatedFrom": "/openapi.json"
    },
    {
      "name": "mcp",
      "kind": "mcp",
      "status": "supported",
      "mcpBin": "sessions-mcp",
      "authMode": "local-only"
    },
    {
      "name": "cli",
      "kind": "cli",
      "status": "supported",
      "bin": "sessions",
      "authMode": "local-only"
    }
  ],
  "storage": {
    "backend": "sqlite",
    "engines": [
      "sqlite",
      "postgresql"
    ],
    "envPrefix": "HASNA_SESSIONS_",
    "aliasEnvPrefix": "SESSIONS_",
    "sqlitePath": "~/.hasna/sessions/sessions.db",
    "pgTestGate": {
      "envVar": "SESSIONS_TEST_DATABASE_URL",
      "command": "bun run test:pg"
    }
  },
  "metadata": {
    "serve": {
      "healthEndpoints": [
        "/health",
        "/ready",
        "/version"
      ],
      "versionedApiPrefix": "/v1",
      "openapi": "/openapi.json",
      "auth": "api-key (@hasna/contracts/auth)"
    },
    "objectStore": {
      "provider": "s3",
      "status": "optional",
      "objectKind": "normalized_content",
      "bucketEnv": "HASNA_SESSIONS_S3_BUCKET",
      "regionEnv": "HASNA_SESSIONS_S3_REGION",
      "endpointEnv": "HASNA_SESSIONS_S3_ENDPOINT",
      "prefixEnv": "HASNA_SESSIONS_S3_PREFIX",
      "accessKeyIdSecretEnv": "HASNA_SESSIONS_S3_ACCESS_KEY_ID",
      "secretAccessKeySecretEnv": "HASNA_SESSIONS_S3_SECRET_ACCESS_KEY"
    },
    "sessionSources": [
      "claude",
      "codex",
      "codewith",
      "gemini"
    ],
    "release": {
      "artifactScan": {
        "script": "scan-artifact"
      }
    }
  }
}
