fix(build): corrigir erros de importação no build de produção

- PatternDetector e SkillEmergence: corrigir alias @/db → caminho relativo correto (../../../db)
- PatternDetector e SkillEmergence: corrigir @/shared/schema → ../../../shared/schema
- server/openclaw: substituir arcadiaSkills (inexistente) por skills do schema
- SkillEmergence: substituir axios (não instalado) por fetch nativo (Node 20)
- server/skills/routes.ts: adicionar export registerSkillRoutes() esperado por routes.ts

O build estava quebrado desde a Fase 4 (OpenClaw). Esses erros impediam
o Coolify de gerar o container com o Design Studio na sidebar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jonas Pacheco 2026-03-27 16:18:52 -03:00
parent e4bc9fa24b
commit 0a357a4617
5 changed files with 33 additions and 27 deletions

View File

@ -8,8 +8,8 @@
* Fase 4: OpenClaw Embutido
*/
import { db } from "@/db";
import { detectedPatterns, skillSuggestions } from "@/shared/schema";
import { db } from "../../../db";
import { detectedPatterns, skillSuggestions } from "../../../shared/schema";
import { eq, and, gte } from "drizzle-orm";
import { EventEmitter } from "events";

View File

@ -7,9 +7,8 @@
* Fase 4: OpenClaw Embutido
*/
import { db } from "@/db";
import { skills } from "@/shared/schema";
import axios, { AxiosError } from "axios";
import { db } from "../../../db";
import { skills } from "../../../shared/schema";
interface SkillSuggestion {
id: string;
@ -155,45 +154,48 @@ Código:
*/
private async callBlackboard(prompt: string, suggestion: SkillSuggestion): Promise<BlackboardResponse> {
try {
const response = await axios.post(
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 30000);
const response = await fetch(
`${this.blackboardUrl}/generate-skill`,
{
prompt,
skill_name: suggestion.suggested_skill_name,
context: {
pattern_type: suggestion.pattern.action_type,
confidence: suggestion.confidence,
metadata: suggestion.pattern.metadata,
},
},
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": this.apiKey,
},
timeout: 30000, // 30 segundos timeout
body: JSON.stringify({
prompt,
skill_name: suggestion.suggested_skill_name,
context: {
pattern_type: suggestion.pattern.action_type,
confidence: suggestion.confidence,
metadata: suggestion.pattern.metadata,
},
}),
signal: controller.signal,
}
);
clearTimeout(timeout);
const data = await response.json() as any;
console.log("[SkillEmergence] Resposta do Blackboard recebida");
return {
success: true,
code: response.data.code,
language: response.data.language || "typescript",
code: data.code,
language: data.language || "typescript",
};
} catch (error) {
const axiosError = error as AxiosError<any>;
const err = error as Error;
console.error("[SkillEmergence] Erro ao chamar Blackboard:", {
status: axiosError.response?.status,
data: axiosError.response?.data,
message: axiosError.message,
});
console.error("[SkillEmergence] Erro ao chamar Blackboard:", err.message);
return {
success: false,
error: axiosError.message,
error: err.message,
};
}
}

View File

@ -11,7 +11,7 @@ import crypto from "crypto";
import OpenAI from "openai";
import { db } from "../../db/index";
import {
arcadiaSkills,
skills as arcadiaSkills,
skillExecutions,
detectedPatterns,
skillSuggestions,

View File

@ -9,7 +9,7 @@
import type { Express, Request, Response } from "express";
import { db } from "../../db/index";
import { arcadiaSkills, detectedPatterns, skillSuggestions } from "@shared/schema";
import { skills as arcadiaSkills, detectedPatterns, skillSuggestions } from "@shared/schema";
import { eq, and, desc } from "drizzle-orm";
export function registerOpenClawRoutes(app: Express): void {

View File

@ -111,3 +111,7 @@ router.get("/:id/executions", async (req, res) => {
});
export default router;
export function registerSkillRoutes(app: any): void {
app.use("/api/skills", router);
}