commit
c249783683
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"id": "claude-gm",
|
||||||
|
"title": "Claude GM",
|
||||||
|
"description": "Routes chat messages to a Claude Code relay server for AI Game Master responses.",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "12",
|
||||||
|
"verified": "13"
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Matt Huntington"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"esmodules": [
|
||||||
|
"scripts/claude-gm.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
function formatResponse(text) {
|
||||||
|
return text
|
||||||
|
// Escape HTML entities first
|
||||||
|
.replace(/&/g, "&")
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
// Bold: **text**
|
||||||
|
.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>")
|
||||||
|
// Italic: *text*
|
||||||
|
.replace(/\*(.+?)\*/g, "<em>$1</em>")
|
||||||
|
// Dice notation: 🎲 lines get highlighted
|
||||||
|
.replace(/^(🎲.*)$/gm, '<span style="color: #c9a33e; font-weight: bold;">$1</span>')
|
||||||
|
// Line breaks
|
||||||
|
.replace(/\n\n/g, "</p><p>")
|
||||||
|
.replace(/\n/g, "<br>")
|
||||||
|
// Wrap in paragraph
|
||||||
|
.replace(/^(.*)$/, "<p>$1</p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
Hooks.on("chatMessage", async (chatLog, message, chatData) => {
|
||||||
|
console.log(chatData);
|
||||||
|
console.log(message);
|
||||||
|
const response = await fetch('http://192.168.1.183:3000/prompt', {
|
||||||
|
//const response = await fetch('http://debianmacbookair:3000/prompt', {
|
||||||
|
method: "POST",
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
body: JSON.stringify({ message })
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
console.log(data);
|
||||||
|
await ChatMessage.create({
|
||||||
|
content: formatResponse(data.result),
|
||||||
|
speaker: { alias: 'AI DM'},
|
||||||
|
style: CONST.CHAT_MESSAGE_STYLES.IC
|
||||||
|
});
|
||||||
|
})
|
||||||
|
Hooks.once("ready", () => {
|
||||||
|
console.log('Claude listening...');
|
||||||
|
});
|
||||||
Loading…
Reference in new issue