{
  "id": "com.schuettken.sac.datacopilot",
  "version": "2.0.0",
  "name": "Data Copilot",
  "description": "Chat with your data: bindet sich an eine Datenquelle der Story, reagiert auf Navigation und Filter, zeigt Kennzahlen und KI-Zusammenfassungen (Sonnet) und beantwortet Fragen zum sichtbaren Datenausschnitt.",
  "newInstancePrefix": "DataCopilot",
  "vendor": "Schuettken",
  "eula": "",
  "license": "",
  "icon": "https://sac-web.schuettken.net/widgets/data-copilot/icon.png",
  "webcomponents": [
    {
      "kind": "main",
      "tag": "com-schuettken-sac-datacopilot",
      "url": "https://sac-web.schuettken.net/widgets/data-copilot/main.js",
      "integrity": "",
      "ignoreIntegrity": true
    },
    {
      "kind": "builder",
      "tag": "com-schuettken-sac-datacopilot-builder",
      "url": "https://sac-web.schuettken.net/widgets/data-copilot/builder.js",
      "integrity": "",
      "ignoreIntegrity": true
    }
  ],
  "dataBindings": {
    "myDataBinding": {
      "feeds": [
        {
          "id": "dimensions",
          "description": "Dimensionen",
          "type": "dimension"
        },
        {
          "id": "measures",
          "description": "Kennzahlen",
          "type": "mainStructureMember"
        }
      ]
    }
  },
  "properties": {
    "width": { "type": "integer", "default": 560 },
    "height": { "type": "integer", "default": 640 },
    "endpoint": {
      "type": "string",
      "description": "URL des LLM-Proxys",
      "default": "https://sac-web.schuettken.net/api/llm"
    },
    "demoKey": {
      "type": "string",
      "description": "Demo-Key. Bewusst leer - im Builder-Panel der Story eintragen, damit er nicht im oeffentlich lesbaren JS steht.",
      "default": ""
    },
    "quality": {
      "type": "string",
      "description": "fast (Haiku, guenstig) oder good (Sonnet, beste Qualitaet)",
      "default": "good"
    },
    "autoSummary": {
      "type": "boolean",
      "description": "Bei jeder Datenaenderung (Navigation, Filter) automatisch eine neue KI-Zusammenfassung holen",
      "default": true
    },
    "context": {
      "type": "string",
      "description": "Fachlicher Kontext fuer die KI, z.B. 'Umsatz nach Region, Werte in EUR'",
      "default": ""
    },
    "voice": {
      "type": "boolean",
      "description": "Analysen und Antworten vorlesen (Sprachausgabe)",
      "default": false
    },
    "charts": {
      "type": "boolean",
      "description": "KI darf Diagramme vorschlagen (ECharts)",
      "default": true
    }
  },
  "methods": {
    "ask": {
      "description": "Stellt eine Frage zum aktuellen Datenausschnitt. Antwort kommt ueber das Event onAnswer.",
      "parameters": [
        { "name": "question", "type": "string", "description": "Die Frage" }
      ]
    },
    "summarize": {
      "description": "Holt eine frische KI-Zusammenfassung des aktuellen Datenausschnitts"
    },
    "getSummary": {
      "returnType": "string",
      "description": "Liefert die zuletzt erzeugte Zusammenfassung"
    },
    "getLastIntent": {
      "returnType": "string",
      "description": "Liefert den zuletzt vom LLM gelieferten Intent als JSON-String (oder leeren String). SAC-Events tragen keine Payload - deshalb dieser Pull-Getter zum Event onIntent."
    }
  },
  "events": {
    "onAnswer": { "description": "Antwort auf eine Frage ist eingetroffen" },
    "onSummary": { "description": "Neue Zusammenfassung ist eingetroffen" },
    "onError": { "description": "LLM-Aufruf ist fehlgeschlagen" },
    "onIntent": { "description": "Das LLM hat einen Steuerungs-Intent (Filter/Navigation) geliefert - Details per getLastIntent() abholen" }
  }
}
