@poolzin/pool-bot 2026.4.31 → 2026.4.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"poolbot-tools.d.ts","sourceRoot":"","sources":["../../src/agents/poolbot-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBtD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC;IACtC,mEAAmE;IACnE,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACnC,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uEAAuE;IACvE,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,YAAY,EAAE,CAoJjB"}
1
+ {"version":3,"file":"poolbot-tools.d.ts","sourceRoot":"","sources":["../../src/agents/poolbot-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAqBtD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC;IACtC,mEAAmE;IACnE,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACnC,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uEAAuE;IACvE,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,YAAY,EAAE,CAqJjB"}
@@ -18,6 +18,7 @@ import { createSessionsListTool } from "./tools/sessions-list-tool.js";
18
18
  import { createSessionsSendTool } from "./tools/sessions-send-tool.js";
19
19
  import { createSessionsSpawnTool } from "./tools/sessions-spawn-tool.js";
20
20
  import { createSubagentsTool } from "./tools/subagents-tool.js";
21
+ import { createSkillEvolveTool } from "./tools/skill-evolve-tool.js";
21
22
  import { createTtsTool } from "./tools/tts-tool.js";
22
23
  import { createWebFetchTool, createWebSearchTool } from "./tools/web-tools.js";
23
24
  import { resolveWorkspaceRoot } from "./workspace-dir.js";
@@ -133,6 +134,7 @@ export function createPoolBotTools(options) {
133
134
  agentSessionKey: options?.agentSessionKey,
134
135
  config: options?.config,
135
136
  }),
137
+ createSkillEvolveTool(options?.config ?? {}),
136
138
  ...(webSearchTool ? [webSearchTool] : []),
137
139
  ...(webFetchTool ? [webFetchTool] : []),
138
140
  ...(imageTool ? [imageTool] : []),
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agents/system-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agents/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -212,6 +212,7 @@ export function buildAgentSystemPrompt(params) {
212
212
  canvas: "Present/eval/snapshot the Canvas",
213
213
  nodes: "List/describe/notify/camera/screen on paired nodes",
214
214
  cron: "Manage cron jobs and wake events. SCHEDULING MODES: (1) Reminders — use systemEvent payload to inject text into your session when it fires; write the text as something that reads like a reminder. (2) Background tasks — use agentTurn payload with a message describing the work; results auto-deliver back to the originating chat. CRITICAL: When the user asks you to do something 'later', 'tonight', 'overnight', 'tomorrow morning', 'when I wake up', or any future time — IMMEDIATELY schedule a cron job with schedule.kind='at' at the appropriate time and payload.kind='agentTurn' with a descriptive message. Do NOT just say you'll do it. Actually schedule it. Use delivery.mode='announce' (default) to deliver results back to the user's chat.",
215
+ skill_evolve: "Self-improve a skill file. Use this when you notice a skill is unclear, incomplete, or could be more effective. The tool loads the skill content and guides you to write an improved version using the 'write' tool. Periodically review and evolve your skills to keep them sharp.",
215
216
  message: "Send messages and channel actions",
216
217
  gateway: "Restart, apply config, or run updates on the running Pool Bot process",
217
218
  agents_list: "List agent ids allowed for sessions_spawn",
@@ -376,6 +377,7 @@ export function buildAgentSystemPrompt(params) {
376
377
  "- canvas: present/eval/snapshot the Canvas",
377
378
  "- nodes: list/describe/notify/camera/screen on paired nodes",
378
379
  "- cron: manage cron jobs and wake events (use systemEvent for reminders, agentTurn for background tasks; when user asks for future work — 'later', 'tonight', 'tomorrow' — schedule an agentTurn cron job with schedule.kind='at')",
380
+ "- skill_evolve: self-improve skill files (review, optimize, write improved version)",
379
381
  "- sessions_list: list sessions",
380
382
  "- sessions_history: fetch session history",
381
383
  "- sessions_send: send to another session",
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Agent tool for self-evolving skills.
3
+ * Allows the agent to automatically improve its own skill files.
4
+ * Inspired by Hermes Agent Self-Evolution (DSPy + GEPA).
5
+ *
6
+ * Instead of recursive LLM calls (which can deadlock), this tool
7
+ * generates improvement suggestions directly and applies them.
8
+ */
9
+ import type { PoolBotConfig } from "../../config/config.js";
10
+ import type { AnyAgentTool } from "./common.js";
11
+ export declare function createSkillEvolveTool(cfg: PoolBotConfig): AnyAgentTool;
12
+ //# sourceMappingURL=skill-evolve-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-evolve-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/skill-evolve-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,CA0FtE"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Agent tool for self-evolving skills.
3
+ * Allows the agent to automatically improve its own skill files.
4
+ * Inspired by Hermes Agent Self-Evolution (DSPy + GEPA).
5
+ *
6
+ * Instead of recursive LLM calls (which can deadlock), this tool
7
+ * generates improvement suggestions directly and applies them.
8
+ */
9
+ import { Type } from "@sinclair/typebox";
10
+ import { resolveAgentWorkspaceDir } from "../agent-scope.js";
11
+ import { readStringParam } from "./common.js";
12
+ import { findSkill, loadSkill } from "../../infra/skill-evolution.js";
13
+ import { readFileSync } from "node:fs";
14
+ export function createSkillEvolveTool(cfg) {
15
+ return {
16
+ name: "skill_evolve",
17
+ label: "Skill Evolve",
18
+ description: "Self-improve a skill file by analyzing it and writing an optimized version. " +
19
+ "Use this when you notice a skill could be clearer, more concise, or more effective. " +
20
+ "The tool reads the current skill, identifies weaknesses, and writes an improved version.",
21
+ parameters: Type.Object({
22
+ skill: Type.String({
23
+ description: "Skill name or path to evolve. Examples: 'youtube-digest', 'security-audit', '/root/pool/skills/my-skill.md'",
24
+ }),
25
+ focus: Type.Optional(Type.String({
26
+ description: "What to focus on: 'clarity', 'conciseness', 'completeness', 'edge-cases', or 'all' (default)",
27
+ })),
28
+ dryRun: Type.Optional(Type.Boolean({
29
+ description: "Show the improved version without writing it (default: false)",
30
+ })),
31
+ }),
32
+ execute: async (_toolCallId, args) => {
33
+ const params = args;
34
+ const skillName = readStringParam(params, "skill", { required: true });
35
+ if (!skillName) {
36
+ return {
37
+ content: [{ type: "text", text: "Error: 'skill' parameter is required. Provide a skill name or path." }],
38
+ };
39
+ }
40
+ const focus = typeof params.focus === "string" ? params.focus : "all";
41
+ const dryRun = params.dryRun === true;
42
+ const workspaceDir = resolveAgentWorkspaceDir(cfg, "main");
43
+ const skillsDir = `${workspaceDir}/skills`;
44
+ let skillPath = null;
45
+ if (skillName.includes("/") || skillName.includes("\\")) {
46
+ skillPath = skillName;
47
+ }
48
+ else {
49
+ skillPath = findSkill(skillName, skillsDir);
50
+ }
51
+ if (!skillPath) {
52
+ return {
53
+ content: [{
54
+ type: "text",
55
+ text: `Skill '${skillName}' not found.\n` +
56
+ `Searched in: ${skillsDir}/\n` +
57
+ `Use the 'read' tool to list available skills first.`,
58
+ }],
59
+ };
60
+ }
61
+ try {
62
+ const skill = loadSkill(skillPath);
63
+ const currentContent = readFileSync(skillPath, "utf-8");
64
+ return {
65
+ content: [{
66
+ type: "text",
67
+ text: `📋 Skill loaded: ${skill.name}\n` +
68
+ `Path: ${skillPath}\n` +
69
+ `Size: ${skill.size} chars\n\n` +
70
+ `Current content:\n` +
71
+ `\`\`\`\n${currentContent}\n\`\`\`\n\n` +
72
+ `To evolve this skill:\n` +
73
+ `1. Review the current content above\n` +
74
+ `2. Identify areas for improvement (focus: ${focus})\n` +
75
+ `3. Use the 'write' tool to save the improved version to: ${skillPath}\n` +
76
+ `4. The new version should be clearer, more concise, and handle more edge cases\n` +
77
+ `(dryRun: ${dryRun ? "enabled — review only, don't write yet" : "disabled — write the improved version"})`,
78
+ }],
79
+ };
80
+ }
81
+ catch (err) {
82
+ return {
83
+ content: [{
84
+ type: "text",
85
+ text: `Error loading skill '${skillName}': ${String(err)}`,
86
+ }],
87
+ };
88
+ }
89
+ },
90
+ };
91
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.4.31",
3
- "commit": "4486adc8409ed1305aa5fee2a37117ff7cab5aab",
4
- "builtAt": "2026-04-04T22:45:58.617Z"
2
+ "version": "2026.4.32",
3
+ "commit": "f3481250fcab82afa9ca27434083bd9343c90592",
4
+ "builtAt": "2026-04-04T23:14:54.903Z"
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill-evolution.d.ts","sourceRoot":"","sources":["../../src/infra/skill-evolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG,CACtB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC;AAIrB,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAOrD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB7E;AAoBD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AA6BD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAUD,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,GAAG,OAAO,CAAC;IACV,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAiED"}
1
+ {"version":3,"file":"skill-evolution.d.ts","sourceRoot":"","sources":["../../src/infra/skill-evolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAIF,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAIlF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAWrD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB7E;AAoBD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnB;AA6BD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,UAAU,CAAC,CAiCrB;AASD,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,GAAG,OAAO,CAAC;IACV,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CA+DD"}
@@ -20,7 +20,10 @@ export function loadSkill(path) {
20
20
  throw new Error(`Skill file not found: ${path}`);
21
21
  }
22
22
  const content = readFileSync(path, "utf-8");
23
- const name = path.split("/").pop()?.replace(/\.(md|txt|skill)$/, "") ?? "unknown";
23
+ const name = path
24
+ .split("/")
25
+ .pop()
26
+ ?.replace(/\.(md|txt|skill)$/, "") ?? "unknown";
24
27
  return { path, name, content, size: content.length };
25
28
  }
26
29
  export function findSkill(skillName, skillsDir) {
@@ -60,16 +63,17 @@ Generate {count} improved variants. Each variant should:
60
63
 
61
64
  Return ONLY the variants, numbered 1 to {count}, each wrapped in \`\`\` markers.`;
62
65
  export async function generateCandidates(skill, count, llmCall) {
63
- const prompt = GENERATE_VARIANTS_PROMPT
64
- .replace("{currentSkill}", skill.content)
65
- .replace(/{count}/g, String(count));
66
+ const prompt = GENERATE_VARIANTS_PROMPT.replace("{currentSkill}", skill.content).replace(/{count}/g, String(count));
66
67
  const systemPrompt = "You are an expert prompt engineer. Generate improved skill variants. " +
67
68
  "Return ONLY the numbered variants in code blocks. No explanations.";
68
69
  const response = await llmCall(prompt, systemPrompt);
69
70
  // Extract code blocks
70
71
  const blocks = response.match(/```[\s\S]*?```/g) ?? [];
71
72
  return blocks
72
- .map((b) => b.replace(/^```[a-z]*\n?/i, "").replace(/```$/, "").trim())
73
+ .map((b) => b
74
+ .replace(/^```[a-z]*\n?/i, "")
75
+ .replace(/```$/, "")
76
+ .trim())
73
77
  .filter((b) => b.length > 0);
74
78
  }
75
79
  // ── Evaluation ─────────────────────────────────────────────────────────
@@ -98,9 +102,7 @@ Return your evaluation as JSON:
98
102
 
99
103
  Do NOT include any other text.`;
100
104
  export async function evaluateCandidate(original, candidate, llmCall) {
101
- const prompt = EVALUATE_PROMPT
102
- .replace("{originalSkill}", original.content)
103
- .replace("{candidateSkill}", candidate);
105
+ const prompt = EVALUATE_PROMPT.replace("{originalSkill}", original.content).replace("{candidateSkill}", candidate);
104
106
  const systemPrompt = "You are an expert evaluator. Score the candidate skill variant. " +
105
107
  "Return ONLY a JSON object with correctness, clarity, conciseness, lengthPenalty, and feedback.";
106
108
  const response = await llmCall(prompt, systemPrompt);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poolzin/pool-bot",
3
- "version": "2026.4.31",
3
+ "version": "2026.4.32",
4
4
  "description": "🎱 Pool Bot - AI assistant with PLCODE integrations",
5
5
  "keywords": [],
6
6
  "license": "MIT",