From 75bc7a65fb60f9e514187814f02570ec5d2a8b74 Mon Sep 17 00:00:00 2001 From: bipproduction Date: Tue, 10 Feb 2026 09:51:35 +0800 Subject: [PATCH] chore: migrate telegram hook to typescript and update settings --- .gemini/hooks/telegram-notify.sh | 30 ---------------- .gemini/hooks/telegram-notify.ts | 62 ++++++++++++++++++++++++++++++++ .gemini/settings.json | 6 ++-- CHANGELOG.md | 12 +++++++ 4 files changed, 77 insertions(+), 33 deletions(-) delete mode 100755 .gemini/hooks/telegram-notify.sh create mode 100755 .gemini/hooks/telegram-notify.ts create mode 100644 CHANGELOG.md diff --git a/.gemini/hooks/telegram-notify.sh b/.gemini/hooks/telegram-notify.sh deleted file mode 100755 index 92360b5..0000000 --- a/.gemini/hooks/telegram-notify.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -set -e - -INPUT=$(cat) - -BOT_TOKEN="${BOT_TOKEN:?BOT_TOKEN not set}" -CHAT_ID="${CHAT_ID:?CHAT_ID not set}" - -SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // "unknown"') -FINAL_TEXT=$(echo "$INPUT" | jq -r '.final_response.text // ""' | head -c 3500) - -MESSAGE=$(cat < /dev/null - -# WAJIB: response JSON ke Gemini -echo '{"decision":"allow"}' diff --git a/.gemini/hooks/telegram-notify.ts b/.gemini/hooks/telegram-notify.ts new file mode 100755 index 0000000..fc99ca9 --- /dev/null +++ b/.gemini/hooks/telegram-notify.ts @@ -0,0 +1,62 @@ +#!/usr/bin/env bun +import { readFileSync } from "fs"; + +// Fungsi untuk mencari string terpanjang dalam objek (biasanya balasan AI) +function findLongestString(obj: any): string { + let longest = ""; + const search = (item: any) => { + if (typeof item === "string") { + if (item.length > longest.length) longest = item; + } else if (Array.isArray(item)) { + item.forEach(search); + } else if (item && typeof item === "object") { + Object.values(item).forEach(search); + } + }; + search(obj); + return longest; +} + +async function run() { + try { + const inputRaw = readFileSync(0, "utf-8"); + if (!inputRaw) return; + const input = JSON.parse(inputRaw); + + // DEBUG: Lihat struktur asli di console terminal (stderr) + console.error("DEBUG KEYS:", Object.keys(input)); + + const BOT_TOKEN = process.env.BOT_TOKEN; + const CHAT_ID = process.env.CHAT_ID; + + const sessionId = input.session_id || "unknown"; + + // Cari teks secara otomatis di seluruh objek JSON + let finalText = findLongestString(input.response || input); + + if (!finalText || finalText.length < 5) { + finalText = "Teks masih gagal diekstraksi. Struktur: " + Object.keys(input).join(", "); + } + + const message = `✅ *Gemini Task Selesai*\n\n` + + `🆔 Session: \`${sessionId}\` \n\n` + + `🧠 Output:\n${finalText.substring(0, 3500)}`; + + await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + chat_id: CHAT_ID, + text: message, + parse_mode: "Markdown", + }), + }); + + process.stdout.write(JSON.stringify({ status: "continue" })); + } catch (err) { + console.error("Hook Error:", err); + process.stdout.write(JSON.stringify({ status: "continue" })); + } +} + +run(); \ No newline at end of file diff --git a/.gemini/settings.json b/.gemini/settings.json index 2fbe543..fe2af0f 100644 --- a/.gemini/settings.json +++ b/.gemini/settings.json @@ -7,11 +7,11 @@ { "name": "telegram-notify", "type": "command", - "command": "$GEMINI_PROJECT_DIR/.gemini/hooks/telegram-notify.sh", - "timeout": 8000 + "command": "bun $GEMINI_PROJECT_DIR/.gemini/hooks/telegram-notify.ts", + "timeout": 10000 } ] } ] } -} +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c3bda76 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [Unreleased] + +### Changed +- Migrated Telegram notification hook from shell script (`.sh`) to TypeScript (`.ts`) using Bun for better reliability and maintenance. +- Updated `.gemini/settings.json` to use the new TypeScript hook and increased timeout to 10 seconds. + +### Removed +- Deleted `.gemini/hooks/telegram-notify.sh`.