Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/opencode.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: opencode

on:
issue_comment:
types: [created]

jobs:
opencode:
if: |
contains(github.event.comment.body, ' /oc') ||
startsWith(github.event.comment.body, '/oc') ||
contains(github.event.comment.body, ' /opencode') ||
startsWith(github.event.comment.body, '/opencode')
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Run opencode
uses: sst/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
File renamed without changes.
208 changes: 104 additions & 104 deletions .opencode/plugin/telegram-notify.ts
Original file line number Diff line number Diff line change
@@ -1,125 +1,125 @@
import type { Plugin } from "@opencode-ai/plugin"
import { SimpleTelegramBot } from "../lib/telegram-bot"
// import type { Plugin } from "@opencode-ai/plugin"
// import { SimpleTelegramBot } from "../lib/telegram-bot"

export const TelegramNotify: Plugin = async ({ $ }) => {
// Initialize Telegram bot
const bot = new SimpleTelegramBot()
let lastMessage = ""
// export const TelegramNotify: Plugin = async ({ $ }) => {
// // Initialize Telegram bot
// const bot = new SimpleTelegramBot()
// let lastMessage = ""

return {
async event(input) {
if (input.event.type === "session.idle") {
// Send the last message content along with idle notification
const message = lastMessage
? `🟡 Session idle! Here's your last message:\n\n${lastMessage}`
: "🟡 Hey! Your OpenCode session is idle - time to check your work!"
bot.sendMessage(message)
}
// return {
// async event(input) {
// if (input.event.type === "session.idle") {
// // Send the last message content along with idle notification
// const message = lastMessage
// ? `🟡 Session idle! Here's your last message:\n\n${lastMessage}`
// : "🟡 Hey! Your OpenCode session is idle - time to check your work!"
// bot.sendMessage(message)
// }

if (input.event.type === "message.updated") {
// Reset idle timer when user sends messages
bot.resetActivity()
// if (input.event.type === "message.updated") {
// // Reset idle timer when user sends messages
// bot.resetActivity()

const messageContent = (input.event as any).message?.content ||
(input.event as any).content || ""
// const messageContent = (input.event as any).message?.content ||
// (input.event as any).content || ""

// Check if it's a command to send last message
if (messageContent.includes("/send-last") || messageContent.includes("/last")) {
if (lastMessage) {
bot.sendMessage(`📱 Here's your last message:\n\n${lastMessage}`)
} else {
bot.sendMessage("📱 No previous message found.")
}
return
}
// // Check if it's a command to send last message
// if (messageContent.includes("/send-last") || messageContent.includes("/last")) {
// if (lastMessage) {
// bot.sendMessage(`📱 Here's your last message:\n\n${lastMessage}`)
// } else {
// bot.sendMessage("📱 No previous message found.")
// }
// return
// }

// Check if it's a command to send to phone
if (messageContent.includes("/send-to-phone") || messageContent.includes("/phone")) {
if (lastMessage) {
bot.sendMessage(`📱 Sending to your phone:\n\n${lastMessage}`)
} else {
bot.sendMessage("📱 No message to send to phone.")
}
return
}
// // Check if it's a command to send to phone
// if (messageContent.includes("/send-to-phone") || messageContent.includes("/phone")) {
// if (lastMessage) {
// bot.sendMessage(`📱 Sending to your phone:\n\n${lastMessage}`)
// } else {
// bot.sendMessage("📱 No message to send to phone.")
// }
// return
// }

// Try to capture message content from the event
try {
// Access message content if available
const messageContent = (input.event as any).message?.content ||
(input.event as any).content ||
"Message updated"
// // Try to capture message content from the event
// try {
// // Access message content if available
// const messageContent = (input.event as any).message?.content ||
// (input.event as any).content ||
// "Message updated"

if (messageContent && messageContent !== "Message updated") {
lastMessage = messageContent
// if (messageContent && messageContent !== "Message updated") {
// lastMessage = messageContent

// Send a preview of the message to Telegram
const preview = lastMessage.length > 200
? lastMessage.substring(0, 200) + "..."
: lastMessage
// // Send a preview of the message to Telegram
// const preview = lastMessage.length > 200
// ? lastMessage.substring(0, 200) + "..."
// : lastMessage

bot.sendMessage(`📱 Last message preview:\n\n${preview}`)
}
} catch (error) {
// If we can't access the message content, just log it
console.log("Message updated but couldn't capture content")
}
}
// bot.sendMessage(`📱 Last message preview:\n\n${preview}`)
// }
// } catch (error) {
// // If we can't access the message content, just log it
// console.log("Message updated but couldn't capture content")
// }
// }

if (input.event.type === "file.edited") {
// Reset idle timer when user edits files
bot.resetActivity()
}
// if (input.event.type === "file.edited") {
// // Reset idle timer when user edits files
// bot.resetActivity()
// }

if (input.event.type === "message.updated") {
// Reset idle timer when user sends messages
bot.resetActivity()
// if (input.event.type === "message.updated") {
// // Reset idle timer when user sends messages
// bot.resetActivity()

// Try to capture message content from the event
try {
// Access message content if available
const messageContent = (input.event as any).message?.content ||
(input.event as any).content ||
"Message updated"
// // Try to capture message content from the event
// try {
// // Access message content if available
// const messageContent = (input.event as any).message?.content ||
// (input.event as any).content ||
// "Message updated"

if (messageContent && messageContent !== "Message updated") {
lastMessage = messageContent
// if (messageContent && messageContent !== "Message updated") {
// lastMessage = messageContent

// Send a preview of the message to Telegram
const preview = lastMessage.length > 200
? lastMessage.substring(0, 200) + "..."
: lastMessage
// // Send a preview of the message to Telegram
// const preview = lastMessage.length > 200
// ? lastMessage.substring(0, 200) + "..."
// : lastMessage

bot.sendMessage(`📱 Last message preview:\n\n${preview}`)
}
} catch (error) {
// If we can't access the message content, just log it
console.log("Message updated but couldn't capture content")
}
}
// bot.sendMessage(`📱 Last message preview:\n\n${preview}`)
// }
// } catch (error) {
// // If we can't access the message content, just log it
// console.log("Message updated but couldn't capture content")
// }
// }

// Also listen for message parts being updated
if (input.event.type === "message.part.updated") {
bot.resetActivity()
// // Also listen for message parts being updated
// if (input.event.type === "message.part.updated") {
// bot.resetActivity()

try {
const partContent = (input.event as any).part?.content ||
(input.event as any).content ||
"Message part updated"
// try {
// const partContent = (input.event as any).part?.content ||
// (input.event as any).content ||
// "Message part updated"

if (partContent && partContent !== "Message part updated") {
lastMessage = partContent
// if (partContent && partContent !== "Message part updated") {
// lastMessage = partContent

const preview = lastMessage.length > 200
? lastMessage.substring(0, 200) + "..."
: lastMessage
// const preview = lastMessage.length > 200
// ? lastMessage.substring(0, 200) + "..."
// : lastMessage

bot.sendMessage(`📱 Message part preview:\n\n${preview}`)
}
} catch (error) {
console.log("Message part updated but couldn't capture content")
}
}
}
}
}
// bot.sendMessage(`📱 Message part preview:\n\n${preview}`)
// }
// } catch (error) {
// console.log("Message part updated but couldn't capture content")
// }
// }
// }
// }
// }
Loading