"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.newAgentCommand = void 0; exports.handleNewAgent = handleNewAgent; const discord_js_1 = require("discord.js"); const path = __importStar(require("path")); const identity_1 = require("../agent/identity"); // Allowed characters for agent names: lowercase letters, numbers, hyphens const NAME_PATTERN = /^[a-z0-9][a-z0-9-]{0,30}[a-z0-9]$/; exports.newAgentCommand = new discord_js_1.SlashCommandBuilder() .setName("new-agent") .setDescription("Erstellt einen neuen Agenten mit eigenem Kanal und Workspace") .addStringOption((option) => option .setName("name") .setDescription("Eindeutiger Name fuer den Agenten (z.B. frontend-dev)") .setRequired(true)) .addStringOption((option) => option .setName("role") .setDescription("Rolle des Agenten (z.B. Frontend-Entwickler)") .setRequired(true)); async function handleNewAgent(interaction, db, config) { const name = interaction.options.getString("name", true).toLowerCase(); const role = interaction.options.getString("role", true); const guild = interaction.guild; // Validate name format if (!NAME_PATTERN.test(name)) { await interaction.reply({ content: "Ungueltiger Name. Erlaubt sind Kleinbuchstaben, Zahlen und Bindestriche. " + "Mindestens 2 Zeichen, muss mit Buchstabe oder Zahl beginnen und enden.", ephemeral: true, }); return; } // Check uniqueness if (db.getWorkspaceByName(name)) { await interaction.reply({ content: `Ein Agent mit dem Namen **${name}** existiert bereits.`, ephemeral: true, }); return; } await interaction.deferReply(); try { // 1. Create Discord channel const channel = await guild.channels.create({ name, type: discord_js_1.ChannelType.GuildText, topic: `Agent: ${name} | Rolle: ${role}`, }); // 2. Create workspace with full Claude Code environment const workspacePath = path.resolve(config.workspaces_root, name); (0, identity_1.setupAgentWorkspace)(workspacePath, name, role, channel.id); // 3. Save to database db.createWorkspace(channel.id, guild.id, name, workspacePath); // 4. Reply with confirmation await interaction.editReply(`Agent **${name}** erstellt in <#${channel.id}>.\n` + `Rolle: ${role}\n` + `Workspace: \`${workspacePath}\``); // 5. Send welcome message in the new channel await channel.send(`Hallo! Ich bin **${name}** (${role}).\n` + `Schreib mir eine Nachricht und ich antworte dir.`); } catch (error) { const msg = error instanceof Error ? error.message : "Unbekannter Fehler"; await interaction.editReply(`Fehler beim Erstellen des Agenten: ${msg}`); } } //# sourceMappingURL=new-agent.js.map