karjimut 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- karjimut-2.0.0.dist-info/METADATA +186 -0
- karjimut-2.0.0.dist-info/RECORD +37 -0
- karjimut-2.0.0.dist-info/WHEEL +5 -0
- karjimut-2.0.0.dist-info/entry_points.txt +3 -0
- karjimut-2.0.0.dist-info/licenses/LICENSE +21 -0
- karjimut-2.0.0.dist-info/top_level.txt +1 -0
- src/__init__.py +5 -0
- src/archive_manager.py +605 -0
- src/assets/karjimut.ico +0 -0
- src/assets/karjimut_banner.png +0 -0
- src/assets/karjimut_logo.png +0 -0
- src/config.py +192 -0
- src/consolidator.py +415 -0
- src/data/gui_language.json +3 -0
- src/db.py +418 -0
- src/embedding.py +231 -0
- src/fts_search.py +632 -0
- src/gui/__init__.py +3 -0
- src/gui/app_gui.py +554 -0
- src/gui/i18n.py +308 -0
- src/gui/key_detector.py +467 -0
- src/gui/onboarding_dialog.py +413 -0
- src/gui/project_dialogs.py +178 -0
- src/gui/shell_layout.py +653 -0
- src/gui/tab_antrean.py +433 -0
- src/gui/tab_ktp.py +370 -0
- src/gui/tab_settings.py +649 -0
- src/gui/tab_solusi.py +580 -0
- src/gui/theme.py +32 -0
- src/idle_watcher.py +222 -0
- src/ktp_manager.py +415 -0
- src/llm_distiller.py +265 -0
- src/log_parser.py +496 -0
- src/mcp_server.py +522 -0
- src/run.py +346 -0
- src/services.py +378 -0
- src/tokenizer_utils.py +245 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: karjimut
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Karjimut — Arsitektur Memori Dua Lapis Berbasis Model Context Protocol (MCP) dengan Konsolidasi Fase Idle
|
|
5
|
+
Author: Naufal Arhab Fadhil Muhammad
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: mcp<2.0.0,>=1.2.0
|
|
11
|
+
Requires-Dist: tiktoken>=0.7.0
|
|
12
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
13
|
+
Requires-Dist: httpx>=0.27.0
|
|
14
|
+
Requires-Dist: pytest>=8.0.0
|
|
15
|
+
Requires-Dist: customtkinter>=5.2.0
|
|
16
|
+
Requires-Dist: sqlite-vec>=0.1.6
|
|
17
|
+
Requires-Dist: fastembed>=0.9.0
|
|
18
|
+
Requires-Dist: numpy>=1.21.0
|
|
19
|
+
Dynamic: license-file
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<img src="assets/karjimut_banner.png" alt="Karjimut Logo" width="640" style="border-radius: 16px;" />
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<h1 align="center">Karjimut: Arsitektur Memori Dua Lapis Berbasis Model Context Protocol dengan Konsolidasi Fase Idle</h1>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" alt="Python 3.10+"></a>
|
|
29
|
+
<a href="https://modelcontextprotocol.io/"><img src="https://img.shields.io/badge/MCP-1.2.0+-green.svg" alt="MCP Spec"></a>
|
|
30
|
+
<a href="https://sqlite.org/wal.html"><img src="https://img.shields.io/badge/SQLite-WAL%20Mode-orange.svg" alt="SQLite WAL"></a>
|
|
31
|
+
<a href="../LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<p align="center">
|
|
35
|
+
Dikembangkan oleh <strong>Naufal Arhab Fadhil Muhammad</strong>
|
|
36
|
+
</p>
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 1. Ikhtisar Arsitektur
|
|
41
|
+
|
|
42
|
+
**Karjimut** memecahkan masalah pembengkakan *context window*, polusi log sampah, dan amnesia lintas sesi pada Autonomous AI Agent (Cursor, Antigravity, Claude Code, Cline) dengan memisahkan memori ke dalam dua lapisan:
|
|
43
|
+
|
|
44
|
+
| Lapisan Memori | Kapasitas Token | Karakteristik Isi | Primitif MCP |
|
|
45
|
+
| :--- | :--- | :--- | :--- |
|
|
46
|
+
| **Lapis 1: KTP Proyek** (*Elastic Core Project Identity*) | **Elastic Core** (Fleksibel mengikuti skala proyek via `KTP_MAX_TOKENS=0`; opsional batas keras $\le 150$ token) | Identitas dasar, *tech stack*, struktur direktori inti, dan aturan wajib proyek (dilengkapi tautan *1-Hop Causal Graph* `[Solusi #ID]`). | MCP Tool `baca_ktp_proyek(kode_proyek)` & Resource `karjimut://{kode_proyek}/ktp` |
|
|
47
|
+
| **Lapis 2: Laci Arsip Solusi** (*On-Demand Solution Vault*) | **0 Token di awal sesi** (Dipanggil saat dibutuhkan) | Intisari solusi konkret atas error teknis / bug dengan multi-tag gejala, *confidence score*, & *self-cleaning superseding* (`supersedes_id`). | MCP Tool `cari_laci_solusi(kode_proyek, kata_kunci)` (Hybrid BM25 + Vector RRF) |
|
|
48
|
+
|
|
49
|
+
Pencatatan aktivitas kerja selama sesi dilakukan secara asinkron dan instan via MCP Tool `titip_catatan_kerja(kode_proyek, ringkasan_aksi)` ke tabel `antrean_mentah`. Saat pengguna tidak aktif ($\ge 5$ menit), **Idle Watcher** secara otomatis memicu **7-Step Sleep Cycle** untuk merangkum log mentah, memperbarui KTP Proyek, mendeprekasi solusi usang (*Self-Cleaning*), mengekstrak solusi bug ke Laci Arsip, dan menyinkronkan memori tim ke `.karjimut/team_memory.jsonl`.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 2. Struktur Direktori Proyek
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
sleep-mcp/
|
|
57
|
+
|-- assets/
|
|
58
|
+
| |-- karjimut_banner.png # Banner utama Karjimut
|
|
59
|
+
| |-- karjimut_logo.png # Logo maskot Karjimut (Sidebar GUI & Onboarding)
|
|
60
|
+
| |-- karjimut.ico # Ikon jendela aplikasi Windows (.ico)
|
|
61
|
+
|-- .env.example # Template konfigurasi environment
|
|
62
|
+
|-- requirements.txt # Dependensi proyek
|
|
63
|
+
|-- README.md # Dokumentasi operasional & arsitektur
|
|
64
|
+
|-- MULAI_DISINI.bat # Peluncur 1-Klik Desktop GUI (Windows)
|
|
65
|
+
|-- run.py # Entrypoint utama (GUI, MCP Server, CLI, Test, Benchmark)
|
|
66
|
+
|-- rules_template/
|
|
67
|
+
| |-- .cursorrules # Template instruksi Tiga Mandat Wajib (Cursor)
|
|
68
|
+
| |-- antigravity_rules.md # Template instruksi Tiga Mandat Wajib (Antigravity IDE)
|
|
69
|
+
|-- src/
|
|
70
|
+
| |-- __init__.py
|
|
71
|
+
| |-- config.py # Pengaturan konfigurasi, batas token, credentials
|
|
72
|
+
| |-- db.py # SQLite WAL mode, 6 tabel relasional + FTS5 + sqlite-vec
|
|
73
|
+
| |-- tokenizer_utils.py # Tiktoken cl100k_base, Elastic Core Mode, & Hard-Limit Guard
|
|
74
|
+
| |-- fts_search.py # Hybrid Search: FTS5 Okapi BM25 + FastEmbed Vector RRF
|
|
75
|
+
| |-- embedding.py # Mesin vektor lokal ONNX CPU (384 dimensi)
|
|
76
|
+
| |-- consolidator.py # Orkestrator 7-Step Sleep Cycle & Atomic Batch Locking
|
|
77
|
+
| |-- log_parser.py # Pemfilteran noise, ekstraksi tag/teknologi, & quality gate
|
|
78
|
+
| |-- ktp_manager.py # Penguraian, perenderan KTP, distiller lokal, & 1-Step Rollback
|
|
79
|
+
| |-- llm_distiller.py # Klien LLM multi-provider (JSON mode) & validasi skema
|
|
80
|
+
| |-- archive_manager.py # Deduplikasi laci_arsip, auto-supersede, decay, & Git Team Sync
|
|
81
|
+
| |-- idle_watcher.py # Daemon pemantau waktu idle (>= 5 menit) & status siklus
|
|
82
|
+
| |-- mcp_server.py # FastMCP Server: 4 Tools utama + Resource karjimut://
|
|
83
|
+
| |-- services.py # Lapisan layanan data GUI (Metrik A/B/C, CRUD Solusi, Manajemen Proyek)
|
|
84
|
+
| |-- gui/
|
|
85
|
+
| |-- __init__.py
|
|
86
|
+
| |-- app_gui.py # Controller utama Aplikasi Desktop Native (CustomTkinter)
|
|
87
|
+
| |-- shell_layout.py # Kerangka Sidebar, Top Header, 4 Kartu KPI, & Status Footer
|
|
88
|
+
| |-- theme.py # Palet warna TeamHub Soft Mint-Teal & Sage Green
|
|
89
|
+
| |-- project_dialogs.py# Dialog tambah, ganti nama/gabung, & hapus proyek
|
|
90
|
+
| |-- tab_ktp.py # Halaman 1: Editor KTP Proyek, Live Token Counter, & Rollback
|
|
91
|
+
| |-- tab_solusi.py # Halaman 2: Bank Solusi BM25/RRF, CRUD, & Feedback Loop
|
|
92
|
+
| |-- tab_antrean.py # Halaman 3: Metrik Keberlanjutan A/B/C, Antrean Log, & Audit
|
|
93
|
+
| |-- tab_settings.py # Halaman 4: Auto-Detect API Key 1 Kolom & Generator Config MCP
|
|
94
|
+
| |-- onboarding_dialog.py # Pop-up First-Run Onboarding Wizard (Auto-Detect API Key)
|
|
95
|
+
| |-- key_detector.py # Detektor otomatis prefix API Key & Self-Healing Model Selector
|
|
96
|
+
| |-- i18n.py # Kamus lokalisasi dwibahasa (Indonesia & Inggris)
|
|
97
|
+
|-- tests/
|
|
98
|
+
|-- __init__.py
|
|
99
|
+
|-- test_unit_core.py # 21 Unit test inti (UT-01 s.d. UT-21)
|
|
100
|
+
|-- test_v2_features.py # 5 Unit test fitur Karjimut v2.0 (UT-22 s.d. UT-26)
|
|
101
|
+
|-- benchmark_skripsi.py # Simulasi 3 Skenario Rencana Pengujian (Bab 3)
|
|
102
|
+
|-- output_benchmark/ # Hasil ekspor simulasi skenario (Markdown, CSV, dan JSON)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 3. Cara Tercepat Menjalankan Sistem (1-Click / 1-Command)
|
|
108
|
+
|
|
109
|
+
Tidak perlu setup manual yang rumit. `run.py` akan **otomatis** menyiapkan `.env`, menginstal dependensi yang belum ada, menyiapkan database SQLite WAL, menyalakan *Idle Watcher* di background, dan membuka **Aplikasi Desktop Native (CustomTkinter)**.
|
|
110
|
+
|
|
111
|
+
### Opsi A: Klik 2x (Khusus Windows — Tanpa Jendela Terminal Hitam)
|
|
112
|
+
Klik dua kali file **`MULAI_DISINI.bat`** untuk langsung meluncurkan aplikasi desktop mandiri via `pythonw`. Saat pertama kali dibuka, pop-up **Setup Awal Karjimut** akan otomatis mendeteksi API Key Anda (`AIzaSy...` Gemini, `gsk_...` Groq, `sk-or-...` OpenRouter, `sk-ant-...` Claude, atau `sk-...` OpenAI) hanya dari satu kolom input.
|
|
113
|
+
|
|
114
|
+
### Opsi B: Satu Perintah di Terminal
|
|
115
|
+
```bash
|
|
116
|
+
cd sleep-mcp
|
|
117
|
+
|
|
118
|
+
# 1. Langsung buka Aplikasi Desktop Native Karjimut (CustomTkinter + Idle Watcher):
|
|
119
|
+
python run.py
|
|
120
|
+
|
|
121
|
+
# 2. Buka Menu Interaktif Terminal (Pilih 1-5):
|
|
122
|
+
python run.py menu
|
|
123
|
+
|
|
124
|
+
# 3. Jalankan 26 Unit & Integration Test:
|
|
125
|
+
python run.py test
|
|
126
|
+
|
|
127
|
+
# 4. Jalankan Simulasi 3 Skenario Rencana Pengujian (Bab 3) & sinkronkan DB:
|
|
128
|
+
python run.py benchmark
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Opsi C: Integrasi ke AI Agent (Antigravity / Cursor / Claude Desktop)
|
|
132
|
+
Jalankan `python run.py setup-ide` untuk menghasilkan file `mcp_config_siap_pakai.json` dengan path absolut perangkat Anda secara otomatis:
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"mcpServers": {
|
|
136
|
+
"karjimut": {
|
|
137
|
+
"command": "python",
|
|
138
|
+
"args": ["path/ke/sleep-mcp/run.py", "mcp"],
|
|
139
|
+
"cwd": "path/ke/sleep-mcp"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
> **Catatan:** *Idle Watcher* sudah otomatis berjalan di dalam proses MCP Server dan Aplikasi Desktop Native (*Embedded Mode*), sehingga Anda **tidak perlu** membuka terminal terpisah untuk menjalankan `idle_watcher.py`.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 4. Tiga Mandat Wajib Workspace Bootstrap Rule
|
|
149
|
+
|
|
150
|
+
Agar agen AI bekerja secara deterministik dalam **Mode Vibecoder 100% Otomatis (Zero-Prompt)**, letakkan file `rules_template/.cursorrules` atau `rules_template/antigravity_rules.md` (`GEMINI.md` / `.agents/rules/sleep-mcp-auto.md`) pada root workspace proyek Anda:
|
|
151
|
+
|
|
152
|
+
1. **Mandat Inisialisasi (Awal Sesi):** AI Agent wajib memanggil `baca_ktp_proyek(kode_proyek, path_workspace)` pada giliran pertama sesi baru sebelum menulis kode.
|
|
153
|
+
2. **Mandat Pencatatan Milestone (Selama Sesi):** AI Agent wajib memanggil `titip_catatan_kerja(kode_proyek, ringkasan_aksi, path_workspace=...)` setiap menyelesaikan satu milestone kerja.
|
|
154
|
+
3. **Mandat Konsultasi Arsip (Saat Error):** AI Agent wajib memanggil `cari_laci_solusi(kode_proyek, kata_kunci, path_workspace=...)` saat menemui error terminal sebelum melakukan trial-and-error.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 5. Rencana & Simulasi Skenario Pengujian (Bab 3)
|
|
159
|
+
|
|
160
|
+
### Menjalankan Seluruh 26 Unit Test (Pytest)
|
|
161
|
+
```bash
|
|
162
|
+
python -m pytest tests/test_unit_core.py tests/test_v2_features.py -v
|
|
163
|
+
```
|
|
164
|
+
Memverifikasi 26 kasus pengujian otomatis (`UT-01` s.d. `UT-26`):
|
|
165
|
+
- `UT-01` s.d. `UT-09`: Inisialisasi SQLite WAL Mode, Trigger FTS5 otomatis, pencarian BM25 dengan simbol `#`/`-`, *Stale Lock Sweeper* ($>3$ menit), *Hard-Limit Enforcement*, *1-Step Rollback* KTP, Deduplikasi Jaccard ($\ge 0,5$), *Offline Rule-Based Distiller*, dan konkurensi *multi-thread* bebas `SQLITE_BUSY`.
|
|
166
|
+
- `UT-10` s.d. `UT-21`: Layanan Desktop GUI (`src/services.py`), resolusi `path_workspace` (`peta_workspace`), *rename/merge* proyek (`alias_proyek`), proteksi anti-IDOR lintas proyek, ekstraksi hashtag otomatis, *Cross-Process File Lock*, *Auto-Detect API Key* 6 provider, *Self-Healing Model Selector*, lokalisasi ID/EN (`src/gui/i18n.py`), dan *Hybrid Search* (BM25 + ONNX Vector RRF).
|
|
167
|
+
- `UT-22`: **Elastic Core Mode** (`KTP_MAX_TOKENS=0`) menjaga keutuhan aturan proyek berskala besar tanpa pemotongan paksa.
|
|
168
|
+
- `UT-23`: **1-Hop Causal Graph Links** menautkan referensi `[Solusi #ID]` pada KTP Proyek ke Laci Arsip.
|
|
169
|
+
- `UT-24`: **Self-Cleaning Memory** (`supersedes_id`) otomatis mendeprekasi solusi lama yang usang.
|
|
170
|
+
- `UT-25`: **Multi-Team Git Sync** mengekspor dan mengimpor `.karjimut/team_memory.jsonl` lintas anggota tim secara idempoten.
|
|
171
|
+
- `UT-26`: **Confidence Score Weighting** memprioritaskan solusi dengan histori keberhasilan tertinggi.
|
|
172
|
+
|
|
173
|
+
### Menjalankan Simulasi 3 Skenario Rencana Pengujian (Bab 3)
|
|
174
|
+
```bash
|
|
175
|
+
python tests/benchmark_skripsi.py
|
|
176
|
+
```
|
|
177
|
+
Menghasilkan data simulasi skenario di `tests/output_benchmark/`:
|
|
178
|
+
- `skenario_1_efisiensi_token.csv` & `.json` (Efisiensi Token 40 Langkah / 5 Sesi)
|
|
179
|
+
- `skenario_2_konsistensi_aturan.csv` & `.json` (Retensi Aturan Arsitektur & Hard-Limit)
|
|
180
|
+
- `skenario_3_kecepatan_solusi.csv` & `.json` (Kecepatan One-Shot Resolution FTS5 BM25)
|
|
181
|
+
- `simulasi_skenario_pengujian.md` (Ringkasan tabel simulasi skenario pengujian)
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 6. Lisensi
|
|
186
|
+
Hak Cipta (c) 2026 Naufal Arhab Fadhil Muhammad. Dilisensikan di bawah lisensi MIT.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
karjimut-2.0.0.dist-info/licenses/LICENSE,sha256=Kq0zEzmocImEK4Z3s-vK3ZuJL1JcFePsX4UOELX7v_A,1085
|
|
2
|
+
src/__init__.py,sha256=oSFEwgLCnKhVuLvLZ9Td_VCHkJs24y_E1JbALqGL3zY,195
|
|
3
|
+
src/archive_manager.py,sha256=cs6Th81vSYQzn39KTn1BUA0IDT_7dZyR_t7AToDwFVE,23763
|
|
4
|
+
src/config.py,sha256=p4XiOrhVysxVyGKbEDtU91PiqfkvECv7IhF0o_Mm99M,7107
|
|
5
|
+
src/consolidator.py,sha256=Ivq-5YbJOLd-eLwUiatMntyKzGYE_77rTO-4gmeY37o,14644
|
|
6
|
+
src/db.py,sha256=pLQMJ8w71PqWsySTzlxUK8PAL5a52W6YQ9Jagx1cklI,16348
|
|
7
|
+
src/embedding.py,sha256=XhHl40DnccXwJ38qCTUYk4mv0MCmcT0KZWKCNQZV7PY,7475
|
|
8
|
+
src/fts_search.py,sha256=Vgj69jU_ZliQyjtQ61NYcbyohXM_6ytduH3qsL2GWIs,25612
|
|
9
|
+
src/idle_watcher.py,sha256=tZKRhnws33EUr6LlP43UdPbsNpLka4uSy3aVjV6tStc,8437
|
|
10
|
+
src/ktp_manager.py,sha256=LkRxSNCWnLNXaG0bgn4rnOxPtMJTttkXjqMgJs87FVI,16570
|
|
11
|
+
src/llm_distiller.py,sha256=e7sRTCBaM5k5ZIyulxXlokcmUme3vf36USrzhxHQv4U,13114
|
|
12
|
+
src/log_parser.py,sha256=7Rd-hAGDFSGXMyzB4IIGzu1UUrwHEnSCTHcU3ChYRLw,20349
|
|
13
|
+
src/mcp_server.py,sha256=pLT8nBBeZmB1SHv8-Ch91qvUx533Ban-tcb1ENFEsmk,21813
|
|
14
|
+
src/run.py,sha256=N5TAmuzDXMIfl4s_OMs1rJBalqZDPBUAb8vCUJDk0F0,13881
|
|
15
|
+
src/services.py,sha256=cBEtJ3N62TXpsC7d0I_soQxxTvCC_SilDxc8Hxjo-ko,16174
|
|
16
|
+
src/tokenizer_utils.py,sha256=i3xZs9hDrb0vP0jBX-XxUS7nVYfxHONI2P43CpkeXHc,8956
|
|
17
|
+
src/assets/karjimut.ico,sha256=iXhXH1OTrfxojQjvvD33CvoY58H0wnz4Oei6LROUpoY,82219
|
|
18
|
+
src/assets/karjimut_banner.png,sha256=rRRRoNd0I0uqoXOst6wNQJYdYZNag2aT8ZEclxWObTY,217087
|
|
19
|
+
src/assets/karjimut_logo.png,sha256=uZXZ0I8ffdR3Zqyx6IOFZZVU6V2GEl4SnU3rkKe7SK4,152957
|
|
20
|
+
src/data/gui_language.json,sha256=xSqpZDRW8dHMz9H3qxobLBX8Iy5ixvMLKY_Qf2WF7gM,24
|
|
21
|
+
src/gui/__init__.py,sha256=_wbC9U60iZ_aEx3jIntfx-fPGCCGzMo8YLVg0YOMVXQ,99
|
|
22
|
+
src/gui/app_gui.py,sha256=f1QgKrU8_u9A8AzdBpSmuzAuGjFuBNgtZyMzwI4exmo,23005
|
|
23
|
+
src/gui/i18n.py,sha256=_oRAYfp_u2Ug7ejlT4WQBzEuKIt6kmrY1E8Dchp9CH8,15768
|
|
24
|
+
src/gui/key_detector.py,sha256=_sfzEBvEahuCn5nlXLxtzmRXbVbq6ef4gUr7QBn0mg4,18080
|
|
25
|
+
src/gui/onboarding_dialog.py,sha256=bvR4IuUfqzsZMpsqJ_nxwkCYo-g-7IkZhNV4lL15yDQ,14484
|
|
26
|
+
src/gui/project_dialogs.py,sha256=3XwCjv2B9AsjzXMgI3eCXk1kSP3fw6YlrW9S8laz5xg,6435
|
|
27
|
+
src/gui/shell_layout.py,sha256=Jv4HPiQPwUvkN57bvS2YjIM9lGjv-hifMZFkf7HXjH8,22673
|
|
28
|
+
src/gui/tab_antrean.py,sha256=qBbxpyQ3NsNFw5ClLfcr4GwCX8CmVnekARTkCkY0tpQ,15098
|
|
29
|
+
src/gui/tab_ktp.py,sha256=CnsmP5IpgdujvoDyC_1QR_8p-lKYUtcB_TxP_gKJnYI,13511
|
|
30
|
+
src/gui/tab_settings.py,sha256=ujADK_N6apTQUh0j1f6WNhCSDIPtIlsy2RlQa_lo50k,24552
|
|
31
|
+
src/gui/tab_solusi.py,sha256=Jan5R7v8e_LNI4jrJRmyosVnSjXfB7gcUF2TI5FJfSs,21416
|
|
32
|
+
src/gui/theme.py,sha256=YaxchjcRw0xmICMxiDy8w5zHKi_suF_jTY4VW0BjBNw,1322
|
|
33
|
+
karjimut-2.0.0.dist-info/METADATA,sha256=6Ty7-ktguDnRcgeJgR_21QRWycPYGTdwqVYS0HUqQpQ,11331
|
|
34
|
+
karjimut-2.0.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
35
|
+
karjimut-2.0.0.dist-info/entry_points.txt,sha256=9JAK4Ar31TmJkqOITrMGMwEtrU5Hjk3EE5uQ3sx74B0,67
|
|
36
|
+
karjimut-2.0.0.dist-info/top_level.txt,sha256=74rtVfumQlgAPzR5_2CgYN24MB0XARCg0t-gzk6gTrM,4
|
|
37
|
+
karjimut-2.0.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Naufal Arhab Fadhil Muhammad
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
src
|