feat: complete Dirigent rename + all TASKLIST items

- Task 1: Identity prompt now includes Discord userId
- Task 2: Added configurable schedulingIdentifier (default: ➡️)
- Task 3: Moderator handoff uses <@userId>+identifier instead of semantic messages
- Task 4: All prompts/comments/help text converted to English
- Task 5: Full project rename WhisperGate → Dirigent across all files

Breaking: config key changed from plugins.entries.whispergate to plugins.entries.dirigent
Breaking: channel policies file renamed to dirigent-channel-policies.json
Breaking: tool name changed from whispergate_tools to dirigent_tools
This commit is contained in:
zhi
2026-03-03 10:10:27 +00:00
parent 2afb982c04
commit af33d747d9
32 changed files with 291 additions and 1434 deletions

View File

@@ -1,11 +1,11 @@
{
"name": "whispergate-no-reply-api",
"name": "dirigent-no-reply-api",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "whispergate-no-reply-api",
"name": "dirigent-no-reply-api",
"version": "0.1.0"
}
}

View File

@@ -1,5 +1,5 @@
{
"name": "whispergate-no-reply-api",
"name": "dirigent-no-reply-api",
"version": "0.1.0",
"private": true,
"type": "module",

View File

@@ -1,7 +1,7 @@
import http from "node:http";
const port = Number(process.env.PORT || 8787);
const modelName = process.env.NO_REPLY_MODEL || "whispergate-no-reply-v1";
const modelName = process.env.NO_REPLY_MODEL || "dirigent-no-reply-v1";
const authToken = process.env.AUTH_TOKEN || "";
function sendJson(res, status, payload) {
@@ -17,7 +17,7 @@ function isAuthorized(req) {
function noReplyChatCompletion(reqBody) {
return {
id: `chatcmpl_whispergate_${Date.now()}`,
id: `chatcmpl_dirigent_${Date.now()}`,
object: "chat.completion",
created: Math.floor(Date.now() / 1000),
model: reqBody?.model || modelName,
@@ -34,7 +34,7 @@ function noReplyChatCompletion(reqBody) {
function noReplyResponses(reqBody) {
return {
id: `resp_whispergate_${Date.now()}`,
id: `resp_dirigent_${Date.now()}`,
object: "response",
created_at: Math.floor(Date.now() / 1000),
model: reqBody?.model || modelName,
@@ -57,7 +57,7 @@ function listModels() {
id: modelName,
object: "model",
created: Math.floor(Date.now() / 1000),
owned_by: "whispergate"
owned_by: "dirigent"
}
]
};
@@ -65,7 +65,7 @@ function listModels() {
const server = http.createServer((req, res) => {
if (req.method === "GET" && req.url === "/health") {
return sendJson(res, 200, { ok: true, service: "whispergate-no-reply-api", model: modelName });
return sendJson(res, 200, { ok: true, service: "dirigent-no-reply-api", model: modelName });
}
if (req.method === "GET" && req.url === "/v1/models") {
@@ -108,5 +108,5 @@ const server = http.createServer((req, res) => {
});
server.listen(port, () => {
console.log(`[whispergate-no-reply-api] listening on :${port}`);
console.log(`[dirigent-no-reply-api] listening on :${port}`);
});