context-attachment-manager
Codex and Claude Code plugin (works in Claude Desktop): choose which past images go to the model with your next message. Unchecked images become placeholders, the conversation goes on, and requests st
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Add-in Transport Management System: daftar kendaraan + peta, rute dari checkpoint (rekomendasi peta / rute sendiri), lebar koridor per rute, alert keluar rute, laporan FMS per rentang waktu, dan penugasan rute harian / terjadwal. UI dua bahasa (Indonesia / English).
| # | Kebutuhan MVP | Di mana |
|---|---|---|
| 1 | List kendaraan | Armada (status moving/idle/offline/keluar rute, filter, cari) |
| 2 | Peta posisi kendaraan | Armada (Leaflet, refresh otomatis, jejak hari ini, overlay rute) |
| 3 | Rute dari beberapa checkpoint | Rute (klik peta, cari alamat, atau ambil dari Zone Geotab; radius per checkpoint) |
| 4 | Rute rekomendasi atau rute sendiri | Rute → "Jalur rute": hitung via OSRM/ORS (+ alternatif), atau gambar sendiri (+ "Tempel ke jalan") |
| 5 | Lebar jalan per rute | Rute → slider "Lebar koridor" (buffer polyline, tampil di peta) |
| 6 | Alert keluar rute | Monitor (bunyi, notifikasi browser, feed) + opsi Zone/Rule Geotab untuk 24/7 |
| 7 | Report FMS per rentang waktu | Laporan: ringkasan armada, trip, exception, kepatuhan rute; ekspor CSV |
| 8 | Assign rute harian / terjadwal | Penugasan: kalender mingguan, sekali / berulang, shift malam, kendaraan + driver, deteksi bentrok |
Fitur tambahan MVP yang disepakati: toleransi + debounce alert (anti GPS drift), status checkpoint (tiba, durasi berhenti, selisih ETA, terlewat), laporan kepatuhan rute, replay rencana vs aktual, status penugasan (terjadwal / berjalan / selesai / terlewat / menyimpang).
Riwayat lengkap ada di CHANGELOG.md dan di add-in (Pengaturan > Riwayat versi). Sumber tunggalnya src/changelog.js;
setelah mengubahnya jalankan npm run changelog. Setiap rilis menaikkan versi di package.json dan public/config.json
(config.json di dist diisi otomatis saat build).
Fitur sejak v1.1: fase tugas (titik awal / selesai / terlambat), engine hour + fuel used + fuel economy (Monitor, Laporan), benchmark per rute dan per sopir, kolom Idle %, salin / duplikat penugasan. Engine hour dan fuel dibaca dari StatusData Geotab (ID diagnostik bisa diubah di Pengaturan; gunakan Cek sensor untuk melihat kendaraan mana yang punya data).
LogRecord baru tiap N detik (default 15), menjalankan mesin
deteksi per penugasan hari ini, lalu menampilkan alert, bunyi, dan notifikasi browser. Deteksi memakai debounce:
keluar koridor ≥ 30 detik atau ≥ 150 m, toleransi GPS 10 m, pulih setelah kembali ≥ 15 detik, masa tenggang awal jadwal 15 menit
(semua bisa diubah di Pengaturan atau per rute).TMS • <nama rute>. Di MyGeotab buat Rule dengan kondisi Zones → Exiting zone untuk zone itu, lalu atur notifikasinya.
Catatan: Rule Geotab tidak tahu jadwal penugasan harian; rule berlaku setiap kendaraan di dalam cakupan rule keluar zone.src/core/*) sengaja
tanpa dependensi UI sehingga bisa langsung dipakai di Node.Prasyarat: Node 18+ dan hosting statis HTTPS (Nginx di VPS, S3, GitHub Pages, dsb.).
npm install
npm test # 27 unit test (engine, jadwal, penyimpanan)
node scripts/gen-addin-id.mjs # opsional: buat addInId milikmu sendiri
ADDIN_ID=<id> HOST_URL=https://host.kamu.com/tms npm run build
Hasil di dist/: tms.js, addin.html, config.json, icon.svg. Upload seluruh isi dist/ ke
https://host.kamu.com/tms/ (semua file satu folder).
Deploy via Vercel (dipakai di repo ini): vercel.json sudah mengatur build (npm ci + npm run build), folder output
dist, dan header CORS. Host: https://fms-geotab.vercel.app (root domain, tanpa subfolder), jadi URL add-in adalah
https://fms-geotab.vercel.app/addin.html. Setiap push ke main men-deploy ulang. Jika domain Vercel berubah, ubah
HOST_URL di vercel.json dan URL di public/config.json.
Pasang di MyGeotab: Administration → System → System Settings → Add-Ins → New Add-In → tab Configuration, tempel
isi config.json (URL sudah diganti oleh HOST_URL), simpan, lalu muat ulang MyGeotab. Menu TMS Rute muncul di
bagian Activity. Setelah tempel, buka halaman TMS → Pengaturan untuk memilih routing.
addInId harus unik per add-in dan jangan diganti setelah dipakai, karena semua data (rute, penugasan, setting)
disimpan di AddInData dengan ID itu.
npm run dev # buka http://localhost:5173
Memakai API Geotab tiruan: 6 kendaraan, 1 rute Jakarta–Karawang, 4 penugasan; TRK-002 sengaja keluar rute, TRK-005 telat,
TRK-006 belum berangkat. Data demo di-reset tiap muat ulang (tambahkan ?keep=1 untuk mempertahankan).
src/core/ mesin murni: geometry, polyline, tracking (deviasi/checkpoint), schedule, corridor, csv
src/services/ geotab (API wrapper), store (AddInData), routing (OSRM/ORS/geocode), monitor, mock (demo)
src/pages/ Fleet, Routes, Assignments, Monitor, Reports, Settings
src/components InstanceDetail (replay), mapkit (Leaflet), ui
tests/ engine + store
scripts/ postbuild, gen-addin-id, check-i18n
initialize/focus/blur). Uji dulu di database demo sebelum rollout.Trip, ExceptionEvent, dan LogRecord per kendaraan; rentang > 31 hari meminta konfirmasi.Fitur Order memakai Vercel Functions (api/) dan Postgres. Setup sekali:
POSTGRES_URL (atau DATABASE_URL) terisi otomatis.ALLOWED_DATABASES = nama database MyGeotab (pisahkan koma bila lebih dari satu).https://fms-geotab.vercel.app/api/health untuk memastikan database dan autentikasi ok.Skema database dibuat/dimigrasi otomatis saat API pertama dipanggil. API memverifikasi sesi MyGeotab pengguna (header Authorization: Geotab ...).
Tambahkan di Vercel > Environment Variables lalu Redeploy: BREVO_API_KEY (Secret), BREVO_SENDER (default [email protected], harus sudah diverifikasi sebagai sender di Brevo), PORTAL_BASE_URL (default https://fms-geotab.vercel.app). Tanpa BREVO_API_KEY, penawaran tetap tercatat tetapi email tidak dikirim.
Bukti serah terima disimpan di Postgres (foto ≤ ~100–400 KB, tanda tangan PNG). Foto & tanda tangan dihapus setelah POD_RETENTION_DAYS hari (default 30); metadata + hash tetap. Verifikasi publik: /portal.html#/v/<kode>.
Exception dideteksi otomatis saat admin membuka menu Exception (tanpa cron, aman untuk Vercel Hobby). Variabel opsional: EXC_LATE_GRACE_MIN (15), EXC_STALE_MIN (120), EXC_START_GRACE_MIN (30). Endpoint: GET /api/insights (daftar exception / ?r=report), POST /api/insights (ack / unack / resolve).
Variabel Vercel (semua Secret/Sensitive): BREVO_API_KEY (email), FONNTE_TOKEN (WhatsApp via Fonnte) atau WA_WEBHOOK_URL + opsional WA_WEBHOOK_TOKEN (gateway lain; menerima POST {to, message}), CRON_SECRET.
Penerima & tingkat minimum diatur di add-in (Exception › Notifikasi).
Pinger: buat job di cron-job.org tiap 5 menit ke https://<host>/api/cron?key=<CRON_SECRET>.
Menu Integrasi TMS: konektor penarik DO dari API TMS customer (pemetaan field lewat UI). Variabel Vercel tambahan: ENCRYPTION_KEY (teks acak min. 16 karakter, untuk mengenkripsi kunci API konektor; jangan diganti setelah dipakai atau kunci tersimpan tidak terbaca). Penarikan otomatis berjalan di /api/cron (pinger 5 menit). DO eksternal bersumber source = 'external' dan tidak muncul di menu Order.