> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quinnsambal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Agents

<style>
  {`
    [class*="max-w-none"][class*="table"] {
      display: block !important;
      overflow-x: auto !important;
      max-width: 100% !important;
      width: 100% !important;
      flex-grow: 0 !important;
    }
    [class*="max-w-none"][class*="table"] > table {
      width: 100% !important;
      max-width: 100% !important;
      table-layout: fixed !important;
    }
    .mermaid {
      max-width: 100% !important;
      overflow-x: auto !important;
    }
    article svg[role="img"] {
      max-width: 100% !important;
      height: auto !important;
    }
    article img, .prose img {
      max-width: 100% !important;
      height: auto !important;
    }
    img[src*="LOGO"], img[src*="logo"] {
      max-width: 120px !important;
      max-height: 40px !important;
      width: auto !important;
      height: auto !important;
      object-fit: contain !important;
    }
    `}
</style>

***

title: "AI Agents"
description: "Agent Hub SNISHOP ERP — galeri agen template dan custom dengan Cmd+K search, category filter, dan scheduled execution."
-------------------------------------------------------------------------------------------------------------------------------------

# AI Agents

<img src="https://mintcdn.com/quinnofspicy/e4f_upKhVWcjsUmM/docs/mintlify/screenshots/ai/ai-agent.png?fit=max&auto=format&n=e4f_upKhVWcjsUmM&q=85&s=0b4251d387bb268cb1c9490161fc37bd" alt="AI Agents" width="1920" height="1080" data-path="docs/mintlify/screenshots/ai/ai-agent.png" />

Halaman AI Agents menampilkan **Agent Hub** — galeri lengkap semua agen AI yang tersedia di sistem, baik agen template (bawaan) maupun agen custom yang dibuat oleh perusahaan. Dari sini, user bisa menjelajahi agen berdasarkan kategori, menjalankan agen terjadwal, dan mengakses detail setiap agen.

## Arsitektur Agent Hub

```mermaid theme={null}
graph TD
    A[Agent Hub<br/>AIAgent.jsx — 541 baris] --> B[Load Template Agents<br/>AIAgentTemplate.filter]
    A --> C[Load Custom Agents<br/>AIAgent.list]
    A --> D[Load Agent Settings<br/>AIAgentSettings.filter]
    A --> E[runDueAgentSchedules<br/>— trigger agen jatuh tempo]
    
    B --> F[Grid AgentCard]
    C --> F
    
    F --> G{Klik Agent}
    G --> H[/AIAgentDetail?key={agent_key}]
    
    F --> I{Cmd/Ctrl+K}
    I --> J[Search Bar]
    J --> K[Filter by Name]
    
    F --> L{Category Tab}
    L --> M[Filter by Category]
```

## Data Loading Sequence

```mermaid theme={null}
sequenceDiagram
    participant Page as AIAgent.jsx
    participant API as Base44 API
    participant DB as Database

    Page->>Page: useEffect onLoad
    
    par Parallel loads
        Page->>API: AIAgentTemplate.filter({})
        API->>DB: SELECT from templates
        DB-->>API: Template agents
        API-->>Page: templates[]
    and
        Page->>API: AIAgent.list({})
        API->>DB: SELECT from custom agents
        DB-->>API: Custom agents
        API-->>Page: agents[]
    and
        Page->>API: AIAgentSettings.filter({})
        API->>DB: SELECT user settings
        DB-->>API: Settings
        API-->>Page: settings[]
    and
        Page->>API: runDueAgentSchedules()
        API->>DB: Check schedules
        API-->>Page: {ran: N}
    end
    
    Page->>Page: Merge templates + custom
    Page->>Page: Render AgentCard grid
```

## Dua Jenis Agen

### Template Agents (Bawaan Sistem)

Agen yang sudah dikonfigurasi oleh sistem dengan definisi tetap:

| Field | Tipe | Detail |
| - | - | - |
| `agent_key` | string | Unique key (contoh: `business_analysis`) |
| `name` | string | Nama agen |
| `tagline` | string | Deskripsi singkat satu baris |
| `description` | string | Deskripsi lengkap (max 2.000) |
| `category` | enum | `business`, `content`, `writing`, `social`, `other` |
| `icon` | string | Nama ikon Lucide (default: `Sparkles`) |
| `color` | string | Warna hex (default: `#3b82f6`) |
| `price_per_run` | number | Biaya per eksekusi dalam Rupiah (default: 5.000) |
| `credit_cost` | number | Kredit per eksekusi (default: 1) |
| `features` | array\[string] | Daftar fitur utama |
| `use_cases` | array\[string] | Daftar kasus penggunaan |
| `input_fields` | array\[object] | Form input: `{key, label, type, placeholder, required}` |
| `system_prompt` | string | Prompt sistem (max 4.000) |
| `model` | string | Model default (default: `automatic`) |
| `use_internet` | boolean | Gunakan internet search (default: false) |
| `status` | enum | `active`, `coming_soon`, `inactive` |
| `order` | number | Urutan tampilan |

### Custom Agents (Buatan Perusahaan)

Agen yang dibuat oleh user/admin perusahaan melalui chat atau form:

| Field | Tipe | Detail |
| - | - | - |
| `agent_key` | string | Unique key |
| `name` | string | Nama agen |
| `company_id` | string | ID perusahaan pemilik |
| `system_prompt` | string | Prompt sistem custom |
| `is_active` | boolean | Status aktif/nonaktif |
| `status` | string | Status agen |
| `category` | string | Kategori |
| `description` | string | Deskripsi |
| `tagline` | string | Tagline |

### Template vs Custom Comparison

```mermaid theme={null}
flowchart LR
    subgraph "Template Agents"
        T1[Pre-configured prompts]
        T2[Fixed input fields]
        T3[System-managed]
        T4[Available to all companies]
    end

    subgraph "Custom Agents"
        C1[User-defined prompts]
        C2[Flexible configuration]
        C3[Company-managed]
        C4[Private to company]
    end

    T1 & C1 --> D[Both execute via InvokeLLM]
    T2 & C2 --> D
    T3 & C3 --> D
    T4 & C4 --> D
```

## Kategori Agen

| Kategori | Ikon | Deskripsi |
| - | - | - |
| **All** | Grid | Tampilkan semua agen |
| **Business** | Briefcase | Analisis bisnis, laporan keuangan, KPI |
| **Writing** | PenTool | Penulisan konten, copywriting, editing |
| **Content** | FileText | Generate konten produk, deskripsi |
| **Social** | Share2 | Konten media sosial, hashtag |
| **Other** | Sparkles | Kegunaan umum |

## Fitur Utama

### Cmd/Ctrl+K Search

Shortcut keyboard untuk pencarian cepat agen berdasarkan nama. Search bar muncul di bagian atas grid dan memfilter hasil secara real-time.

### Search Architecture

```mermaid theme={null}
flowchart TD
    A[User presses Cmd/Ctrl+K] --> B[Open search modal]
    B --> C[User types query]
    C --> D[Filter agents array]
    D --> E{Match found?}
    E -->|Yes| F[Show filtered results]
    E -->|No| G[Show 'No results' message]
    F --> H[User selects agent]
    H --> I[Navigate to /AIAgentDetail]
```

### Scheduled Execution

```mermaid theme={null}
sequenceDiagram
    participant Page as AIAgent.jsx
    participant Backend as runDueAgentSchedules
    participant Schedule as AIAgentSchedule
    participant LLM as InvokeLLM
    participant Run as AIAgentRun

    Page->>Page: onLoad()
    Page->>Backend: invoke runDueAgentSchedules
    Backend->>Schedule: Filter schedule_daily
    Backend->>Backend: Check last_triggered_at vs today
    
    loop Setiap agent yang jatuh tempo
        Backend->>LLM: InvokeLLM + add_context_from_internet
        LLM-->>Backend: Output
        Backend->>Run: Create AIAgentRun record
        Backend->>Schedule: Update last_triggered_at
    end
    
    Backend-->>Page: {ran: number}
```

### Trigger Types

| Trigger | Tipe | Deskripsi |
| - | - | - |
| Harian | `schedule_daily` | Setiap hari |
| Mingguan | `schedule_weekly` | Setiap minggu |
| Bulanan | `schedule_monthly` | Setiap bulan |
| Stok Rendah | `event_low_stock` | Saat stok di bawah minimum |
| Invoice Overdue | `event_invoice_overdue` | Saat invoice jatuh tempo |
| Transaksi Baru | `event_new_transaction` | Saat ada transaksi baru |
| Tugas Jatuh Tempo | `event_task_due` | Saat tugas mendekati deadline |
| Custom | `custom` | Trigger kustom |

### Notifikasi

| Channel | Deskripsi |
| - | - |
| `in_app` | Notifikasi dalam aplikasi |
| `whatsapp` | Kirim via WhatsApp |
| `email` | Kirim via email |
| `all` | Semua channel |

## Entity: AIAgentRun

Setiap eksekusi agen dicatat sebagai `AIAgentRun`:

| Field | Tipe | Detail |
| - | - | - |
| `user_id` | string | ID user yang menjalankan |
| `user_email` | string | Email user |
| `company_id` | string | ID perusahaan aktif |
| `agent_key` | string | Key agen yang dijalankan |
| `agent_name` | string | Nama agen |
| `input_data` | object | Input yang diberikan |
| `output` | string | Hasil output (max 100.000) |
| `cost_amount` | number | Biaya Rupiah (default: 0) |
| `cost_credit` | number | Kredit terpakai (default: 0) |
| `payment_method` | enum | `balance`, `credit`, `free` |
| `status` | enum | `success`, `failed` |
| `created_at` | timestamp | Waktu eksekusi |
| `model` | string | Model yang digunakan |

## Model Selection

Harga per eksekusi dihitung berdasarkan model yang dipilih:

```mermaid theme={null}
graph LR
    A[base_price_per_run<br/>Rp 1.000] --> B{Model Tier}
    B --> |Standard| C[× 1.0<br/>Rp 1.000]
    B --> |Advanced| D[× 1.5<br/>Rp 1.500]
    B --> |Premium| E[× 3.0<br/>Rp 3.000]
    
    C --> F[credit_cost<br/>= harga / credit_to_rupiah_rate]
    D --> F
    E --> F
```

### Model Tier Comparison

| Tier | Models | Best For | Cost | Quality |
| - | - | - | - | - |
| **Standard** | hermes-3-llama-3 | Simple tasks, quick answers | Low | Good |
| **Advanced** | claude-3-5-sonnet, gpt-4o | Analysis, recommendations | Medium | Better |
| **Premium** | gemini-1-5-pro | Complex reasoning, multi-step | High | Best |

## Cara Akses

Dari sidebar, klik menu **AI & Analitik** > **AI Agents**.

## Flow Penggunaan

```mermaid theme={null}
flowchart TD
    A[Buka Agent Hub] --> B[Jelajahi agen]
    B --> C{Cara menemukan agen?}
    C -->|Search| D[Cmd/Ctrl+K]
    C -->|Browse| E[Filter by category]
    D --> F[Klik agen]
    E --> F
    F --> G[Isi form input]
    G --> H[Pilih model]
    H --> I[Klik Jalankan]
    I --> J[Review output]
    J --> K{Export?}
    K -->|Ya| L[Pilih format]
    K -->|Tidak| M[Selesai]
    L --> M
```

## Tips

* Mulai dari agen template untuk tugas umum — sudah teruji dan optimal
* Buat agen custom untuk tugas repetitif spesifik bisnis Anda
* Gunakan scheduled agents untuk monitoring otomatis
* Monitor biaya melalui Agent History untuk mengoptimalkan penggunaan
* Pilih model Standard untuk tugas sederhana, Premium untuk analisis kompleks

***

**Related Documentation**:

* [AI Agent Detail](/docs/ai/ai-agent-detail)
* [Agent Dashboard](/docs/ai/agent-dashboard)
* [AI Agent History](/docs/ai/ai-agent-history)
* [AI Overview](/docs/ai/overview)

***

## Entity Relationship Diagram

```mermaid theme={null}
erDiagram
    AIAgentTemplate {
        string agent_key PK "Kunci unik template"
        string name "Nama AI Agent"
        string tagline "Deskripsi singkat"
        string description "Penjelasan lengkap (max 2000)"
        enum category "business|content|writing|social|other"
        string icon "Icon lucide-react"
        string color "Warna hex"
        number price_per_run "Biaya per run (Rupiah)"
        number credit_cost "Biaya per run (kredit)"
        array features "Daftar fitur"
        array use_cases "Daftar kasus penggunaan"
        array input_fields "Field input dinamis"
        string system_prompt "Instruksi LLM (max 4000)"
        string model "Model LLM default"
        boolean use_internet "Gunakan internet"
        enum status "active|coming_soon|inactive"
        number order "Urutan tampil"
    }

    AIAgent {
        string agent_key PK "Kunci unik agent"
        string company_id FK "ID perusahaan pemilik"
        string created_by "Email pembuat"
        string name "Nama agent"
        string tagline "Deskripsi singkat"
        string description "Penjelasan lengkap (max 2000)"
        enum category "business|content|writing|social|other"
        string icon "Icon lucide-react"
        string color "Warna hex"
        string system_prompt "Instruksi LLM (max 4000)"
        array input_fields "Field input dinamis"
        string model "Model LLM default"
        boolean use_internet "Gunakan internet"
        enum status "active|paused|inactive"
        string source_template_key FK "Template asal (nullable)"
        number run_count "Total eksekusi"
        number total_cost_amount "Total biaya Rupiah"
        number total_cost_credit "Total kredit terpakai"
        datetime created_date "Waktu dibuat"
        datetime updated_date "Waktu diperbarui"
    }

    AIAgentRun {
        string user_id "ID user eksekutor"
        string user_email "Email user"
        string company_id FK "ID perusahaan"
        string company_name "Nama perusahaan"
        string agent_key FK "Kunci agent"
        string agent_name "Nama agent saat run"
        string model_used "Model yang dipakai"
        string model_name "Nama tampilan model"
        object input_data "Input user"
        string output "Hasil AI (max 100000)"
        number cost_amount "Biaya Rupiah"
        number cost_credit "Kredit terpakai"
        enum payment_method "balance|credit|free"
        enum status "success|failed"
    }

    AIAgentModel {
        string model_key PK "Kunci model InvokeLLM"
        string name "Nama tampilan model"
        string description "Penjelasan kualitas (max 500)"
        number price_multiplier "Pengali biaya"
        enum tier "standard|advanced|premium"
        boolean supports_internet "Dukungan internet"
        boolean is_active "Status aktif"
        number order "Urutan tampil"
    }

    AIAgentSettings {
        string setting_key PK "Kunci pengaturan (global)"
        string description "Catatan pengaturan (max 1000)"
        number credit_to_rupiah_rate "Nilai 1 kredit dlm Rupiah"
        number base_price_per_run "Harga dasar per run"
        boolean allow_credit_payment "Izinkan bayar kredit"
        boolean allow_balance_payment "Izinkan bayar saldo"
    }

    AIAgentSchedule {
        string agent_id FK "Referensi agent_key"
        string company_id FK "ID perusahaan"
        enum trigger_type "Jenis trigger"
        object trigger_config "Konfigurasi trigger"
        boolean is_active "Status aktif"
        datetime last_triggered_at "Terakhir fired"
        number trigger_count "Total kali fired"
        enum notification_channel "Channel notifikasi"
        string created_by "Email pembuat"
        datetime created_date "Waktu dibuat"
    }

    AIAgentTemplate ||--o{ AIAgent : "source_template_key"
    AIAgent ||--o{ AIAgentRun : "agent_key"
    AIAgent ||--o{ AIAgentSchedule : "agent_id"
    AIAgentModel }o--|| AIAgentSettings : "pricing config"
```

## Tabel Schema Lengkap

### AIAgent — Custom Agent Perusahaan

Entitas agen AI yang dibuat oleh perusahaan. Setiap agen memiliki scope per-company dan bisa dibuat dari template atau sepenuhnya custom.

| Field | Tipe | Required | Default | Deskripsi |
| - | - | - | - | - |
| `agent_key` | string | **Ya** | — | Kunci unik agent (auto-generated slug dari nama) |
| `company_id` | string | **Ya** | — | ID perusahaan pemilik (scope company-level) |
| `created_by` | string | **Ya** | — | Email user yang membuat agent |
| `name` | string | **Ya** | — | Nama AI Agent |
| `system_prompt` | string | **Ya** | — | Instruksi sistem utama untuk LLM (max 4.000 karakter) |
| `tagline` | string | Tidak | — | Deskripsi singkat satu baris |
| `description` | string | Tidak | — | Penjelasan lengkap fungsi agent (max 2.000 karakter) |
| `category` | enum | Tidak | `other` | Kategori: `business`, `content`, `writing`, `social`, `other` |
| `icon` | string | Tidak | `Sparkles` | Nama icon lucide-react |
| `color` | string | Tidak | `#4F46E5` | Warna hex untuk tampilan card |
| `input_fields` | array\[object] | Tidak | — | Field input dinamis: `{key, label, type, placeholder, required}` |
| `model` | string | Tidak | `automatic` | Model LLM default |
| `use_internet` | boolean | Tidak | `false` | Gunakan konteks internet saat eksekusi |
| `status` | enum | Tidak | `active` | `active` = jalan otomatis, `paused` = tidak otomatis tapi bisa manual, `inactive` = nonaktif |
| `source_template_key` | string | Tidak | `null` | Link ke AIAgentTemplate asal jika dibuat dari template (nullable) |
| `run_count` | number | Tidak | `0` | Total eksekusi agent |
| `total_cost_amount` | number | Tidak | `0` | Total biaya Rupiah semua run |
| `total_cost_credit` | number | Tidak | `0` | Total kredit yang dipakai semua run |
| `created_date` | datetime | Tidak | — | Waktu agent dibuat |
| `updated_date` | datetime | Tidak | — | Waktu agent terakhir diperbarui |

### AIAgentTemplate — Template Agent Bawaan Sistem

Definisi agen AI bawaan yang tersedia untuk semua perusahaan. Template ini di-seed oleh sistem dan menjadi blueprint untuk custom agent.

| Field | Tipe | Required | Default | Deskripsi |
| - | - | - | - | - |
| `agent_key` | string | **Ya** | — | Kunci unik template (contoh: `business_analysis`) |
| `name` | string | **Ya** | — | Nama AI Agent |
| `tagline` | string | Tidak | — | Deskripsi singkat satu baris |
| `description` | string | Tidak | — | Penjelasan lengkap fungsi agent (max 2.000 karakter) |
| `category` | enum | Tidak | `other` | Kategori: `business`, `content`, `writing`, `social`, `other` |
| `icon` | string | Tidak | `Sparkles` | Nama icon lucide-react |
| `color` | string | Tidak | `#3b82f6` | Warna hex untuk tampilan card |
| `price_per_run` | number | Tidak | `5000` | Biaya per penggunaan dalam Rupiah |
| `credit_cost` | number | Tidak | `1` | Biaya alternatif dalam kredit AI |
| `features` | array\[string] | Tidak | — | Daftar fitur utama agen |
| `use_cases` | array\[string] | Tidak | — | Daftar kasus penggunaan |
| `input_fields` | array\[object] | Tidak | — | Field input yang diminta dari user: `{key, label, type, placeholder, required}` |
| `system_prompt` | string | Tidak | — | Instruksi sistem untuk LLM (max 4.000 karakter) |
| `model` | string | Tidak | `automatic` | Model LLM default |
| `use_internet` | boolean | Tidak | `false` | Gunakan konteks internet |
| `status` | enum | Tidak | `active` | Status: `active`, `coming_soon`, `inactive` |
| `order` | number | Tidak | `0` | Urutan tampilan di grid |

### AIAgentRun — Riwayat Eksekusi Agent

Setiap kali agen dijalankan (manual atau scheduled), satu record `AIAgentRun` dibuat untuk audit trail dan billing.

| Field | Tipe | Required | Default | Deskripsi |
| - | - | - | - | - |
| `user_id` | string | **Ya** | — | ID user yang menjalankan |
| `agent_key` | string | **Ya** | — | Kunci agen yang dijalankan |
| `user_email` | string | Tidak | — | Email user eksekutor |
| `company_id` | string | Tidak | — | ID perusahaan aktif (null untuk personal) |
| `company_name` | string | Tidak | — | Nama perusahaan saat agent dijalankan |
| `agent_name` | string | Tidak | — | Nama agen saat run (snapshot) |
| `model_used` | string | Tidak | — | Model AI yang dipakai pada run ini |
| `model_name` | string | Tidak | — | Nama tampilan model |
| `input_data` | object | Tidak | — | Input yang diberikan user |
| `output` | string | Tidak | — | Hasil dari AI Agent (max 100.000 karakter) |
| `cost_amount` | number | Tidak | `0` | Biaya Rupiah yang dipotong |
| `cost_credit` | number | Tidak | `0` | Kredit yang dipotong |
| `payment_method` | enum | Tidak | `balance` | Metode bayar: `balance`, `credit`, `free` |
| `status` | enum | Tidak | `success` | Status eksekusi: `success`, `failed` |

### AIAgentModel — Katalog Model LLM

Daftar model AI yang tersedia untuk digunakan oleh agen. Setiap model memiliki multiplier harga dan tier kualitas.

| Field | Tipe | Required | Default | Deskripsi |
| - | - | - | - | - |
| `model_key` | string | **Ya** | — | Kunci model untuk InvokeLLM (contoh: `automatic`, `gpt_5_mini`, `claude_sonnet_4_6`) |
| `name` | string | **Ya** | — | Nama tampilan model (contoh: `Standar (Cepat & Hemat)`) |
| `description` | string | Tidak | — | Penjelasan singkat kualitas/kecepatan (max 500 karakter) |
| `price_multiplier` | number | Tidak | `1` | Pengali biaya — biaya akhir = harga dasar agent × multiplier |
| `tier` | enum | Tidak | `standard` | Tingkatan kualitas: `standard`, `advanced`, `premium` |
| `supports_internet` | boolean | Tidak | `false` | Model mendukung konteks internet |
| `is_active` | boolean | Tidak | `true` | Status aktif model |
| `order` | number | Tidak | `0` | Urutan tampil di dropdown |

### AIAgentSettings — Pengaturan Global AI Agent

Konfigurasi global untuk sistem billing dan pembayaran AI Agent. Hanya ada satu record dengan `setting_key = 'global'`.

| Field | Tipe | Required | Default | Deskripsi |
| - | - | - | - | - |
| `setting_key` | string | **Ya** | `global` | Kunci pengaturan (selalu `global` untuk pengaturan utama) |
| `description` | string | Tidak | — | Catatan pengaturan (max 1.000 karakter) |
| `credit_to_rupiah_rate` | number | Tidak | `10` | Nilai 1 kredit dalam Rupiah (1 kredit = Rp10) |
| `base_price_per_run` | number | Tidak | `1000` | Harga dasar default per run (Rupiah) bila agent tidak set harga sendiri |
| `allow_credit_payment` | boolean | Tidak | `true` | Izinkan user membayar dengan kredit |
| `allow_balance_payment` | boolean | Tidak | `true` | Izinkan user membayar dengan saldo Rupiah |

### AIAgentSchedule — Jadwal & Trigger Agent

Konfigurasi eksekusi otomatis agen berdasarkan jadwal (cron) atau event bisnis.

| Field | Tipe | Required | Default | Deskripsi |
| - | - | - | - | - |
| `agent_id` | string | **Ya** | — | Referensi ke AIAgent (agent\_key) |
| `company_id` | string | **Ya** | — | ID perusahaan |
| `trigger_type` | enum | **Ya** | — | Jenis trigger: `schedule_daily`, `schedule_weekly`, `schedule_monthly`, `event_low_stock`, `event_invoice_overdue`, `event_new_transaction`, `event_task_due`, `event_custom` |
| `created_by` | string | **Ya** | — | Email user yang membuat schedule |
| `trigger_config` | object | Tidak | — | Konfigurasi trigger — Schedule: `{hour, minute, day_of_week?, day_of_month?}` / Event: `{threshold?, product_category?, days_before?}` |
| `is_active` | boolean | Tidak | `true` | Apakah schedule/trigger aktif |
| `last_triggered_at` | datetime | Tidak | — | Waktu terakhir trigger fired |
| `trigger_count` | number | Tidak | `0` | Berapa kali trigger sudah fired |
| `notification_channel` | enum | Tidak | `in_app` | Channel notifikasi: `in_app`, `whatsapp`, `email`, `all` |
| `created_date` | datetime | Tidak | — | Waktu schedule dibuat |

## State Machine — Agent Template Lifecycle

```mermaid theme={null}
stateDiagram-v2
    [*] --> coming_soon: Template di-seed oleh sistem

    coming_soon --> active: Admin mengaktifkan template
    coming_soon --> inactive: Admin menonaktifkan sebelum rilis

    active --> coming_soon: Admin menunda rilis
    active --> inactive: Admin menonaktifkan template
    active --> active: Update prompt / model / price

    inactive --> active: Admin mengaktifkan kembali
    inactive --> coming_soon: Admin menyiapkan ulang
    inactive --> [*]: Template dihapus permanen

    note right of active
        Template aktif muncul di Agent Hub
        dan bisa di-clone oleh perusahaan
    end note

    note right of coming_soon
        Template terlihat di Hub dengan badge
        "Segera Hadir" — user tidak bisa menjalankan
    end note

    note right of inactive
        Template tersembunyi dari Hub
        Agent custom yang sudah dibuat tetap jalan
    end note
```

## Sequence Diagram — Template Instantiation & Agent Cloning

### Instantiation: Template ke Custom Agent

```mermaid theme={null}
sequenceDiagram
    participant User as User / Admin
    participant UI as AIAgentDetail.jsx
    participant API as Base44 API
    participant DB as Database

    User->>UI: Klik "Gunakan Template"
    UI->>API: AIAgentTemplate.filter({agent_key})
    API->>DB: SELECT template by key
    DB-->>API: Template data
    API-->>UI: Template object

    UI->>UI: Pre-fill form dari template
    Note over UI: name, system_prompt, input_fields,<br/>category, icon, color, model

    User->>UI: Edit nama & prompt (opsional)
    User->>UI: Klik "Buat Agent"

    UI->>API: AIAgent.create({<br/>  agent_key: slug(name),<br/>  company_id: active_company,<br/>  created_by: user_email,<br/>  name, system_prompt,<br/>  source_template_key: template.agent_key,<br/>  ...fields dari template<br/>})
    API->>DB: INSERT into ai_agents
    DB-->>API: New AIAgent record
    API-->>UI: Created agent

    UI->>UI: Navigate ke /AIAgentDetail?key={new_key}
    UI-->>User: Tampilkan agent custom baru
```

### Cloning: Duplikasi Agent dalam Perusahaan

```mermaid theme={null}
sequenceDiagram
    participant User as User / Admin
    participant UI as AIAgentDetail.jsx
    participant API as Base44 API
    participant DB as Database

    User->>UI: Klik "Clone Agent"
    UI->>API: AIAgent.filter({agent_key})
    API->>DB: SELECT source agent
    DB-->>API: Source agent data
    API-->>UI: Agent object

    UI->>UI: Pre-fill form dengan data source
    Note over UI: Copy: name (+ " (Copy)"),<br/>system_prompt, input_fields,<br/>category, icon, model

    User->>UI: Konfirmasi / edit
    User->>UI: Klik "Buat Clone"

    UI->>API: AIAgent.create({<br/>  agent_key: new_slug(name),<br/>  company_id: same_company,<br/>  created_by: user_email,<br/>  source_template_key: same_as_source,<br/>  ...copied fields<br/>})
    API->>DB: INSERT new agent
    DB-->>API: Cloned AIAgent record
    API-->>UI: Cloned agent

    Note over UI,DB: run_count, total_cost direset ke 0<br/>— clone mulai dari nol
```

## Enum Tables

### template\_category — Kategori Template Agent

| Nilai Enum | Label | Deskripsi |
| - | - | - |
| `business` | Bisnis | Analisis bisnis, laporan keuangan, KPI, strategi |
| `content` | Konten | Generate konten produk, deskripsi, katalog |
| `writing` | Penulisan | Copywriting, editing, proofreading, blog |
| `social` | Media Sosial | Konten sosial media, hashtag, caption |
| `other` | Lainnya | Kegunaan umum, custom purpose |

### agent\_status\_template — Status Template Agent

| Nilai Enum | Label | Deskripsi |
| - | - | - |
| `active` | Aktif | Template muncul di Hub dan bisa dijalankan/di-clone |
| `coming_soon` | Segera Hadir | Template terlihat dengan badge "Segera Hadir", belum bisa dijalankan |
| `inactive` | Nonaktif | Template tersembunyi dari Hub |

### agent\_status\_custom — Status Custom Agent

| Nilai Enum | Label | Deskripsi |
| - | - | - |
| `active` | Aktif | Agent berjalan otomatis dan bisa dijalankan manual |
| `paused` | Dijeda | Tidak berjalan otomatis (scheduled off), tapi masih bisa dijalankan manual |
| `inactive` | Nonaktif | Agent nonaktif sepenuhnya, tidak bisa dijalankan |

### agent\_capability — Kapabilitas Agent

| Nilai | Deskripsi |
| - | - |
| `text_generation` | Generate teks, artikel, deskripsi produk |
| `data_analysis` | Analisis data keuangan, KPI, tren |
| `internet_search` | Pencarian konteks internet (memerlukan `use_internet = true`) |
| `scheduled_execution` | Mendukung eksekusi terjadwal via AIAgentSchedule |
| `multi_input` | Menerima multiple input fields dari user |
| `export_output` | Output bisa di-export ke format file |

### model\_tier — Tingkatan Model LLM

| Nilai Enum | Label | Multiplier | Best For |
| - | - | - | - |
| `standard` | Standar | ×1.0 | Tugas sederhana, jawaban cepat |
| `advanced` | Lanjutan | ×1.5 | Analisis, rekomendasi, konten panjang |
| `premium` | Premium | ×3.0 | Complex reasoning, multi-step task |

### trigger\_type — Jenis Trigger Schedule

| Nilai Enum | Kategori | Deskripsi |
| - | - | - |
| `schedule_daily` | Jadwal | Setiap hari pada waktu yang ditentukan |
| `schedule_weekly` | Jadwal | Setiap minggu pada hari dan waktu tertentu |
| `schedule_monthly` | Jadwal | Setiap bulan pada tanggal dan waktu tertentu |
| `event_low_stock` | Event | Dipicu saat stok produk di bawah threshold |
| `event_invoice_overdue` | Event | Dipicu saat invoice melewati jatuh tempo |
| `event_new_transaction` | Event | Dipicu saat ada transaksi baru masuk |
| `event_task_due` | Event | Dipicu saat tugas mendekati deadline |
| `event_custom` | Event | Trigger kustom yang dikonfigurasi user |

### payment\_method — Metode Pembayaran Run

| Nilai Enum | Deskripsi |
| - | - |
| `balance` | Dibayar dari saldo Rupiah perusahaan |
| `credit` | Dibayar dari kredit AI |
| `free` | Gratis (tidak ada biaya) |

### notification\_channel — Channel Notifikasi

| Nilai Enum | Deskripsi |
| - | - |
| `in_app` | Notifikasi dalam aplikasi |
| `whatsapp` | Kirim via WhatsApp |
| `email` | Kirim via email |
| `all` | Semua channel aktif |

## RBAC — Hak Akses AI Agents

| Role | Lihat Hub | Buat Custom Agent | Jalankan Agent | Lihat Run History | Kelola Schedule | Kelola Template | Kelola Model & Settings |
| - | - | - | - | - | - | - | - |
| **Super Admin** | Ya | Ya | Ya | Ya (semua company) | Ya | Ya | Ya |
| **Admin Perusahaan** | Ya | Ya | Ya | Ya (per company) | Ya | Tidak | Tidak |
| **Manajer** | Ya | Ya | Ya | Ya (per company) | Ya | Tidak | Tidak |
| **Staff** | Ya | Tidak | Ya | Ya (milik sendiri) | Tidak | Tidak | Tidak |
| **Viewer** | Ya | Tidak | Tidak | Ya (milik sendiri) | Tidak | Tidak | Tidak |

### RLS Policy Ringkasan

| Entitas | Create | Read | Update | Delete |
| - | - | - | - | - |
| `AIAgentTemplate` | Admin sistem | Publik (semua role) | Admin sistem | Admin sistem |
| `AIAgent` | Admin, Manajer | Member company | Admin, Manajer (owner) | Admin (owner) |
| `AIAgentRun` | System (auto) | Member (milik sendiri + admin) | — | — |
| `AIAgentModel` | Admin sistem | Publik (semua role) | Admin sistem | Admin sistem |
| `AIAgentSettings` | Admin sistem | Admin | Admin sistem | — |
| `AIAgentSchedule` | Admin, Manajer | Member company | Admin, Manajer | Admin |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.