0xkobold 0.7.2 → 0.8.0

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.
Files changed (252) hide show
  1. package/HEARTBEAT.md +239 -0
  2. package/IDENTITY.md +12 -0
  3. package/README.md +138 -4
  4. package/SOUL.md +21 -0
  5. package/dist/package.json +10 -5
  6. package/dist/src/agent/bootstrap-loader.js +295 -66
  7. package/dist/src/agent/bootstrap-loader.js.map +1 -1
  8. package/dist/src/agent/context-pruning.js +10 -5
  9. package/dist/src/agent/context-pruning.js.map +1 -1
  10. package/dist/src/agent/embedded-runner.js +29 -15
  11. package/dist/src/agent/embedded-runner.js.map +1 -1
  12. package/dist/src/agent/index.js +5 -2
  13. package/dist/src/agent/index.js.map +1 -1
  14. package/dist/src/agent/system-prompt.js +167 -20
  15. package/dist/src/agent/system-prompt.js.map +1 -1
  16. package/dist/src/agent/tools/spawn-agent.js +72 -5
  17. package/dist/src/agent/tools/spawn-agent.js.map +1 -1
  18. package/dist/src/channels/slack/webhook.js +2 -2
  19. package/dist/src/channels/slack/webhook.js.map +1 -1
  20. package/dist/src/channels/telegram/bot.js +4 -4
  21. package/dist/src/channels/telegram/bot.js.map +1 -1
  22. package/dist/src/channels/whatsapp/integration.js +4 -4
  23. package/dist/src/channels/whatsapp/integration.js.map +1 -1
  24. package/dist/src/cli/commands/gateway.js +9 -10
  25. package/dist/src/cli/commands/gateway.js.map +1 -1
  26. package/dist/src/cli/commands/init.js +90 -0
  27. package/dist/src/cli/commands/init.js.map +1 -1
  28. package/dist/src/cli/commands/setup.js +53 -0
  29. package/dist/src/cli/commands/setup.js.map +1 -1
  30. package/dist/src/cli/index.js +0 -0
  31. package/dist/src/config/unified-config.js +5 -0
  32. package/dist/src/config/unified-config.js.map +1 -1
  33. package/dist/src/cron/index.js +2 -0
  34. package/dist/src/cron/index.js.map +1 -1
  35. package/dist/src/cron/nl-parser.js +522 -0
  36. package/dist/src/cron/nl-parser.js.map +1 -0
  37. package/dist/src/cron/runner.js +6 -31
  38. package/dist/src/cron/runner.js.map +1 -1
  39. package/dist/src/event-bus/index.js.map +1 -1
  40. package/dist/src/extensions/core/agent-orchestrator-extension.js +200 -148
  41. package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -1
  42. package/dist/src/extensions/core/diagnostics-extension.js +93 -56
  43. package/dist/src/extensions/core/diagnostics-extension.js.map +1 -1
  44. package/dist/src/extensions/core/draconic-safety-extension.js +256 -3
  45. package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -1
  46. package/dist/src/extensions/core/heartbeat-extension.js +416 -150
  47. package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
  48. package/dist/src/extensions/core/{generative-agents-extension.js → learning-extension.js} +90 -128
  49. package/dist/src/extensions/core/learning-extension.js.map +1 -0
  50. package/dist/src/extensions/core/perennial-memory-extension.js +884 -87
  51. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
  52. package/dist/src/extensions/core/routed-ollama-extension.js +345 -0
  53. package/dist/src/extensions/core/routed-ollama-extension.js.map +1 -0
  54. package/dist/src/extensions/core/task-manager-extension.js +25 -2
  55. package/dist/src/extensions/core/task-manager-extension.js.map +1 -1
  56. package/dist/src/extensions/core/websearch-enhanced-extension.js +81 -23
  57. package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -1
  58. package/dist/src/extensions/core/workspace-footer-extension.js +40 -63
  59. package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
  60. package/dist/src/extensions/loader.js +5 -1
  61. package/dist/src/extensions/loader.js.map +1 -1
  62. package/dist/src/gateway/gateway-server.js +74 -3
  63. package/dist/src/gateway/gateway-server.js.map +1 -1
  64. package/dist/src/gateway/index.js +2 -2
  65. package/dist/src/gateway/index.js.map +1 -1
  66. package/dist/src/gateway/methods/agent.js +1 -1
  67. package/dist/src/gateway/methods/agent.js.map +1 -1
  68. package/dist/src/gateway/methods/index.js +4 -0
  69. package/dist/src/gateway/methods/index.js.map +1 -1
  70. package/dist/src/gateway/methods/node.js +261 -0
  71. package/dist/src/gateway/methods/node.js.map +1 -0
  72. package/dist/src/gateway/queue-modes.js +356 -0
  73. package/dist/src/gateway/queue-modes.js.map +1 -0
  74. package/dist/src/index.js +47 -6
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/llm/community-analytics.js +569 -0
  77. package/dist/src/llm/community-analytics.js.map +1 -0
  78. package/dist/src/llm/index.js +28 -4
  79. package/dist/src/llm/index.js.map +1 -1
  80. package/dist/src/llm/model-discovery.js +335 -0
  81. package/dist/src/llm/model-discovery.js.map +1 -0
  82. package/dist/src/llm/model-popularity.js +566 -0
  83. package/dist/src/llm/model-popularity.js.map +1 -0
  84. package/dist/src/llm/model-scoring-db.js +553 -0
  85. package/dist/src/llm/model-scoring-db.js.map +1 -0
  86. package/dist/src/llm/multi-provider.js +258 -0
  87. package/dist/src/llm/multi-provider.js.map +1 -0
  88. package/dist/src/llm/ollama.js +133 -187
  89. package/dist/src/llm/ollama.js.map +1 -1
  90. package/dist/src/llm/router-commands.js +773 -0
  91. package/dist/src/llm/router-commands.js.map +1 -0
  92. package/dist/src/llm/router-core.js +600 -0
  93. package/dist/src/llm/router-core.js.map +1 -0
  94. package/dist/src/memory/checkpoint-manager.js +278 -0
  95. package/dist/src/memory/checkpoint-manager.js.map +1 -0
  96. package/dist/src/memory/conflict-detector.js +279 -0
  97. package/dist/src/memory/conflict-detector.js.map +1 -0
  98. package/dist/src/memory/context-graph.js +360 -0
  99. package/dist/src/memory/context-graph.js.map +1 -0
  100. package/dist/src/memory/dialectic/benchmark-cli.js +200 -0
  101. package/dist/src/memory/dialectic/benchmark-cli.js.map +1 -0
  102. package/dist/src/memory/dialectic/debug-reasoning.js +37 -0
  103. package/dist/src/memory/dialectic/debug-reasoning.js.map +1 -0
  104. package/dist/src/memory/dialectic/index.js +135 -0
  105. package/dist/src/memory/dialectic/index.js.map +1 -0
  106. package/dist/src/memory/dialectic/nudges.js +380 -0
  107. package/dist/src/memory/dialectic/nudges.js.map +1 -0
  108. package/dist/src/memory/dialectic/reasoning-engine.js +607 -0
  109. package/dist/src/memory/dialectic/reasoning-engine.js.map +1 -0
  110. package/dist/src/memory/dialectic/reasoning.js +390 -0
  111. package/dist/src/memory/dialectic/reasoning.js.map +1 -0
  112. package/dist/src/memory/dialectic/skill-creation.js +481 -0
  113. package/dist/src/memory/dialectic/skill-creation.js.map +1 -0
  114. package/dist/src/memory/dialectic/store.js +663 -0
  115. package/dist/src/memory/dialectic/store.js.map +1 -0
  116. package/dist/src/memory/dialectic/types.js +11 -0
  117. package/dist/src/memory/dialectic/types.js.map +1 -0
  118. package/dist/src/memory/index.js +24 -2
  119. package/dist/src/memory/index.js.map +1 -1
  120. package/dist/src/memory/memory-decay.js +350 -0
  121. package/dist/src/memory/memory-decay.js.map +1 -0
  122. package/dist/src/memory/memory-integration.js +5 -5
  123. package/dist/src/memory/memory-integration.js.map +1 -1
  124. package/dist/src/memory/migrate-memory-stream.js +97 -0
  125. package/dist/src/memory/migrate-memory-stream.js.map +1 -0
  126. package/dist/src/memory/session-memory-bridge.js +49 -5
  127. package/dist/src/memory/session-memory-bridge.js.map +1 -1
  128. package/dist/src/memory/session-store.js +123 -0
  129. package/dist/src/memory/session-store.js.map +1 -1
  130. package/dist/src/memory/smart-write-rules.js +164 -0
  131. package/dist/src/memory/smart-write-rules.js.map +1 -0
  132. package/dist/src/memory/tiered-memory.js +436 -0
  133. package/dist/src/memory/tiered-memory.js.map +1 -0
  134. package/dist/src/memory/types.js +6 -0
  135. package/dist/src/memory/types.js.map +1 -0
  136. package/dist/src/memory/verify-migration.js +99 -0
  137. package/dist/src/memory/verify-migration.js.map +1 -0
  138. package/dist/src/pi-config.js +11 -9
  139. package/dist/src/pi-config.js.map +1 -1
  140. package/dist/src/skills/conditional-skills.js +464 -0
  141. package/dist/src/skills/conditional-skills.js.map +1 -0
  142. package/dist/src/skills/index.js +5 -0
  143. package/dist/src/skills/index.js.map +1 -1
  144. package/dist/src/skills/loader.js +56 -0
  145. package/dist/src/skills/loader.js.map +1 -1
  146. package/dist/src/skills/skill-manage.js +417 -0
  147. package/dist/src/skills/skill-manage.js.map +1 -0
  148. package/dist/src/tui/commands/orchestration-commands.js +62 -0
  149. package/dist/src/tui/commands/orchestration-commands.js.map +1 -1
  150. package/package.json +10 -5
  151. package/skills/model-router-test.ts +65 -0
  152. package/dist/src/extensions/core/auto-security-scan-extension.js +0 -41
  153. package/dist/src/extensions/core/auto-security-scan-extension.js.map +0 -1
  154. package/dist/src/extensions/core/cloudflare-browser-extension.js +0 -389
  155. package/dist/src/extensions/core/cloudflare-browser-extension.js.map +0 -1
  156. package/dist/src/extensions/core/compaction-safeguard.js +0 -223
  157. package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
  158. package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
  159. package/dist/src/extensions/core/obsidian-bridge-extension.js +0 -488
  160. package/dist/src/extensions/core/obsidian-bridge-extension.js.map +0 -1
  161. package/dist/src/llm/router.js +0 -145
  162. package/dist/src/llm/router.js.map +0 -1
  163. package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
  164. package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
  165. package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
  166. package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
  167. package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
  168. package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
  169. package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  170. package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
  171. package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
  172. package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
  173. package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
  174. package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
  175. package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
  176. package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
  177. package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
  178. package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
  179. package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
  180. package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
  181. package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
  182. package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
  183. package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
  184. package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
  185. package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
  186. package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
  187. package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
  188. package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
  189. package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
  190. package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
  191. package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
  192. package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
  193. package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
  194. package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
  195. package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
  196. package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
  197. package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
  198. package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
  199. package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
  200. package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
  201. package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
  202. package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
  203. package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
  204. package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
  205. package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
  206. package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
  207. package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
  208. package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
  209. package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
  210. package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
  211. package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
  212. package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
  213. package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
  214. package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
  215. package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
  216. package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
  217. package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
  218. package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
  219. package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
  220. package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
  221. package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
  222. package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
  223. package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
  224. package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
  225. package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
  226. package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
  227. package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
  228. package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
  229. package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
  230. package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
  231. package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
  232. package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
  233. package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
  234. package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
  235. package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
  236. package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
  237. package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
  238. package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
  239. package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
  240. package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
  241. package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
  242. package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
  243. package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
  244. package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
  245. package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
  246. package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
  247. package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
  248. package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
  249. package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
  250. package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
  251. package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
  252. package/skills/kobold-scan-skill/node_modules/wrappy/wrappy.js +0 -33
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Autonomous Skill Creation
3
+ *
4
+ * Detects patterns in observations and tool usage, then generates
5
+ * skills to automate recurring tasks.
6
+ *
7
+ * Phase 3 of Dialectic Memory Implementation.
8
+ */
9
+ import * as fs from "node:fs/promises";
10
+ import * as path from "node:path";
11
+ import { homedir } from "node:os";
12
+ // ═════════════════════════════════════════════════════════════════
13
+ // PATTERN DETECTION
14
+ // ═════════════════════════════════════════════════════════════════
15
+ /**
16
+ * Detect patterns from observations and tool usage.
17
+ */
18
+ export async function detectPatterns(store, peerId, ollamaUrl = process.env.OLLAMA_URL || "http://localhost:11434") {
19
+ const observations = store.getObservations(peerId, 500);
20
+ if (observations.length < 10) {
21
+ return []; // Not enough data
22
+ }
23
+ // Group observations by type
24
+ const toolCalls = observations.filter(o => o.sourceType === "tool_call");
25
+ const commands = observations.filter(o => o.category === "behavior");
26
+ const workflows = observations.filter(o => o.category === "success" || o.category === "error");
27
+ const patterns = [];
28
+ // Pattern 1: Repeated tool sequences
29
+ const toolPatterns = detectToolSequences(toolCalls);
30
+ patterns.push(...toolPatterns);
31
+ // Pattern 2: Repeated commands
32
+ const commandPatterns = detectRepeatedCommands(commands);
33
+ patterns.push(...commandPatterns);
34
+ // Pattern 3: Workflow patterns (success/error sequences)
35
+ const workflowPatterns = detectWorkflowPatterns(workflows);
36
+ patterns.push(...workflowPatterns);
37
+ // Use LLM to suggest skill names/descriptions for high-confidence patterns
38
+ for (const pattern of patterns) {
39
+ if (pattern.confidence >= 0.7 && pattern.occurrences >= 3) {
40
+ const suggestion = await suggestSkillForPattern(pattern, ollamaUrl);
41
+ pattern.suggestedSkill = suggestion;
42
+ }
43
+ }
44
+ return patterns;
45
+ }
46
+ /**
47
+ * Detect repeated tool call sequences.
48
+ */
49
+ function detectToolSequences(observations) {
50
+ const patterns = [];
51
+ const sequences = new Map();
52
+ // Look for 2-4 tool call sequences
53
+ for (let i = 0; i < observations.length - 1; i++) {
54
+ for (let len = 2; len <= 4 && i + len <= observations.length; len++) {
55
+ const sequence = observations.slice(i, i + len)
56
+ .map(o => o.content)
57
+ .join(" → ");
58
+ // Normalize common variations
59
+ const normalized = sequence
60
+ .replace(/\b\w+Id\b/g, "{id}") // Replace IDs
61
+ .replace(/\b\d+\b/g, "{num}") // Replace numbers
62
+ .replace(/\/[\w\/-]+/g, "{path}"); // Replace paths
63
+ if (!sequences.has(normalized)) {
64
+ sequences.set(normalized, { count: 0, examples: [] });
65
+ }
66
+ const entry = sequences.get(normalized);
67
+ entry.count++;
68
+ if (entry.examples.length < 3) {
69
+ entry.examples.push(sequence);
70
+ }
71
+ }
72
+ }
73
+ // Convert to patterns
74
+ for (const [sequence, data] of sequences) {
75
+ if (data.count >= 3) {
76
+ patterns.push({
77
+ id: `pattern_tool_${patterns.length}`,
78
+ type: "tool_sequence",
79
+ description: `Repeated tool sequence: ${sequence.substring(0, 100)}...`,
80
+ occurrences: data.count,
81
+ lastSeen: new Date(),
82
+ examples: data.examples,
83
+ confidence: Math.min(0.9, data.count / 10),
84
+ });
85
+ }
86
+ }
87
+ return patterns;
88
+ }
89
+ /**
90
+ * Detect repeated command patterns.
91
+ */
92
+ function detectRepeatedCommands(observations) {
93
+ const patterns = [];
94
+ const commands = new Map();
95
+ for (const obs of observations) {
96
+ // Extract command-like patterns
97
+ const content = obs.content.toLowerCase();
98
+ // Look for command patterns (e.g., "run tests", "check status")
99
+ const commandMatch = content.match(/(?:run|check|execute|start|stop|build|deploy|test)\s+\w+/g);
100
+ if (commandMatch) {
101
+ for (const cmd of commandMatch) {
102
+ const normalized = cmd.replace(/\b\w+Id\b/g, "{id}");
103
+ if (!commands.has(normalized)) {
104
+ commands.set(normalized, { count: 0, examples: [] });
105
+ }
106
+ const entry = commands.get(normalized);
107
+ entry.count++;
108
+ if (entry.examples.length < 3) {
109
+ entry.examples.push(obs.content);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ // Convert to patterns
115
+ for (const [cmd, data] of commands) {
116
+ if (data.count >= 3) {
117
+ patterns.push({
118
+ id: `pattern_cmd_${patterns.length}`,
119
+ type: "command_repeat",
120
+ description: `Repeated command: "${cmd}"`,
121
+ occurrences: data.count,
122
+ lastSeen: new Date(),
123
+ examples: data.examples,
124
+ confidence: Math.min(0.8, data.count / 8),
125
+ });
126
+ }
127
+ }
128
+ return patterns;
129
+ }
130
+ /**
131
+ * Detect workflow patterns (task → success/error).
132
+ */
133
+ function detectWorkflowPatterns(observations) {
134
+ const patterns = [];
135
+ const workflows = new Map();
136
+ // Group by session
137
+ const bySession = new Map();
138
+ for (const obs of observations) {
139
+ if (obs.sessionId) {
140
+ if (!bySession.has(obs.sessionId)) {
141
+ bySession.set(obs.sessionId, []);
142
+ }
143
+ bySession.get(obs.sessionId).push(obs);
144
+ }
145
+ }
146
+ // Analyze session workflows
147
+ for (const [sessionId, sessionObs] of bySession) {
148
+ for (let i = 0; i < sessionObs.length - 1; i++) {
149
+ const current = sessionObs[i];
150
+ const next = sessionObs[i + 1];
151
+ if (current.category === "behavior" &&
152
+ (next.category === "success" || next.category === "error")) {
153
+ const workflow = `${current.content.substring(0, 50)} → ${next.category}`;
154
+ const normalized = workflow.replace(/\b\w+Id\b/g, "{id}");
155
+ if (!workflows.has(normalized)) {
156
+ workflows.set(normalized, { success: 0, error: 0, examples: [] });
157
+ }
158
+ const entry = workflows.get(normalized);
159
+ if (next.category === "success")
160
+ entry.success++;
161
+ else
162
+ entry.error++;
163
+ if (entry.examples.length < 3) {
164
+ entry.examples.push(workflow);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ // Convert to patterns
170
+ for (const [workflow, data] of workflows) {
171
+ const total = data.success + data.error;
172
+ if (total >= 2) {
173
+ patterns.push({
174
+ id: `pattern_workflow_${patterns.length}`,
175
+ type: "workflow",
176
+ description: `Workflow pattern: ${workflow.substring(0, 100)}...`,
177
+ occurrences: total,
178
+ lastSeen: new Date(),
179
+ examples: data.examples,
180
+ confidence: data.success / total, // Higher confidence for successful workflows
181
+ });
182
+ }
183
+ }
184
+ return patterns;
185
+ }
186
+ // ═════════════════════════════════════════════════════════════════
187
+ // SKILL SUGGESTION (LLM)
188
+ // ═════════════════════════════════════════════════════════════════
189
+ /**
190
+ * Use LLM to suggest a skill name for a pattern.
191
+ */
192
+ async function suggestSkillForPattern(pattern, ollamaUrl) {
193
+ const prompt = `Given this recurring pattern, suggest a concise skill name (lowercase, hyphen-separated, max 40 chars):
194
+
195
+ Pattern type: ${pattern.type}
196
+ Description: ${pattern.description}
197
+ Occurrences: ${pattern.occurrences}
198
+ Examples:
199
+ ${pattern.examples.map(e => ` - ${e}`).join("\n")}
200
+
201
+ Respond with only the skill name, no explanation.`;
202
+ try {
203
+ const response = await fetch(`${ollamaUrl}/api/generate`, {
204
+ method: "POST",
205
+ headers: { "Content-Type": "application/json" },
206
+ body: JSON.stringify({
207
+ model: "llama3.2",
208
+ prompt,
209
+ stream: false,
210
+ }),
211
+ });
212
+ if (!response.ok) {
213
+ return undefined;
214
+ }
215
+ const data = await response.json();
216
+ const suggestion = data.response.trim().toLowerCase().replace(/[^a-z0-9-]/g, "-").substring(0, 40);
217
+ return suggestion || undefined;
218
+ }
219
+ catch {
220
+ return undefined;
221
+ }
222
+ }
223
+ // ═════════════════════════════════════════════════════════════════
224
+ // SKILL GENERATION
225
+ // ═════════════════════════════════════════════════════════════════
226
+ const SKILL_GENERATION_PROMPT = `You are a skill generator for an AI assistant. Generate a TypeScript skill for the following pattern.
227
+
228
+ Pattern Details:
229
+ - Type: {{type}}
230
+ - Description: {{description}}
231
+ - Occurrences: {{occurrences}}
232
+ - Examples:
233
+ {{examples}}
234
+
235
+ Generate a skill that:
236
+ 1. Automates this recurring pattern
237
+ 2. Has a clear, descriptive name (lowercase, hyphen-separated)
238
+ 3. Has appropriate risk level (safe/medium/high)
239
+ 4. Has clear parameters with descriptions
240
+ 5. Returns useful results
241
+
242
+ Output ONLY valid JSON with this structure:
243
+ {
244
+ "name": "skill-name",
245
+ "description": "Clear description of what this skill does",
246
+ "risk": "safe|medium|high",
247
+ "parameters": {
248
+ "param1": { "type": "string", "description": "What this param does" },
249
+ "param2": { "type": "number", "description": "What this param does" }
250
+ },
251
+ "requiredParams": ["param1"],
252
+ "executeCode": "// TypeScript code that implements the skill\\n// Use: async (args) => { ... }\\n// Available imports: fs, path, child_process, fetch, console"
253
+ }
254
+
255
+ Do not include any explanation, only the JSON.`;
256
+ /**
257
+ * Generate a skill from a pattern using LLM.
258
+ */
259
+ export async function generateSkill(pattern, ollamaUrl = process.env.OLLAMA_URL || "http://localhost:11434") {
260
+ const prompt = SKILL_GENERATION_PROMPT
261
+ .replace("{{type}}", pattern.type)
262
+ .replace("{{description}}", pattern.description)
263
+ .replace("{{occurrences}}", String(pattern.occurrences))
264
+ .replace("{{examples}}", pattern.examples.map(e => ` - ${e}`).join("\n"));
265
+ try {
266
+ const response = await fetch(`${ollamaUrl}/api/generate`, {
267
+ method: "POST",
268
+ headers: { "Content-Type": "application/json" },
269
+ body: JSON.stringify({
270
+ model: "llama3.2",
271
+ prompt,
272
+ stream: false,
273
+ format: "json",
274
+ }),
275
+ });
276
+ if (!response.ok) {
277
+ console.error(`[SkillCreation] LLM error: ${response.status}`);
278
+ return null;
279
+ }
280
+ const data = await response.json();
281
+ const parsed = JSON.parse(data.response);
282
+ // Validate required fields
283
+ if (!parsed.name || !parsed.description || !parsed.executeCode) {
284
+ console.error("[SkillCreation] Invalid skill response: missing fields");
285
+ return null;
286
+ }
287
+ const suggestion = {
288
+ name: String(parsed.name).toLowerCase().replace(/[^a-z0-9-]/g, "-").substring(0, 40),
289
+ description: String(parsed.description),
290
+ risk: ["safe", "medium", "high"].includes(parsed.risk) ? parsed.risk : "medium",
291
+ toolDefinition: {
292
+ type: "function",
293
+ function: {
294
+ name: parsed.name,
295
+ description: parsed.description,
296
+ parameters: {
297
+ type: "object",
298
+ properties: parsed.parameters || {},
299
+ required: parsed.requiredParams || [],
300
+ },
301
+ },
302
+ },
303
+ executeCode: String(parsed.executeCode),
304
+ pattern,
305
+ reasoning: `Generated from pattern seen ${pattern.occurrences} times with ${Math.round(pattern.confidence * 100)}% confidence.`,
306
+ };
307
+ return suggestion;
308
+ }
309
+ catch (err) {
310
+ console.error("[SkillCreation] Failed to generate skill:", err);
311
+ return null;
312
+ }
313
+ }
314
+ // ═════════════════════════════════════════════════════════════════
315
+ // SKILL WRITING
316
+ // ═════════════════════════════════════════════════════════════════
317
+ const SKILL_TEMPLATE = `/**
318
+ * {{name}}
319
+ *
320
+ * {{description}}
321
+ *
322
+ * Auto-generated from pattern: {{patternType}}
323
+ * Occurrences: {{occurrences}}
324
+ * Confidence: {{confidence}}%
325
+ */
326
+
327
+ import type { Skill } from '../src/skills/types';
328
+
329
+ export const {{camelName}}Skill: Skill = {
330
+ name: '{{name}}',
331
+ description: '{{description}}',
332
+ risk: '{{risk}}',
333
+
334
+ toolDefinition: {{toolDefinition}},
335
+
336
+ async execute(args: Record<string, unknown>) {
337
+ {{executeCode}}
338
+ },
339
+ };
340
+
341
+ export default {{camelName}}Skill;
342
+ `;
343
+ /**
344
+ * Write a generated skill to the skills directory.
345
+ */
346
+ export async function writeSkill(suggestion, skillsDir) {
347
+ // Determine skills directory
348
+ const dir = skillsDir || path.join(homedir(), ".0xkobold", "skills");
349
+ // Ensure directory exists
350
+ await fs.mkdir(dir, { recursive: true });
351
+ // Generate skill file
352
+ const camelName = suggestion.name
353
+ .split("-")
354
+ .map((part, i) => i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1))
355
+ .join("");
356
+ const skillPath = path.join(dir, `${suggestion.name}.ts`);
357
+ // Check if skill already exists
358
+ try {
359
+ await fs.access(skillPath);
360
+ console.log(`[SkillCreation] Skill ${suggestion.name} already exists, skipping`);
361
+ return null;
362
+ }
363
+ catch {
364
+ // File doesn't exist, proceed
365
+ }
366
+ // Format tool definition
367
+ const toolDefStr = JSON.stringify(suggestion.toolDefinition, null, 2);
368
+ // Format execute code (indent)
369
+ const executeLines = suggestion.executeCode.split("\n");
370
+ const indentedExecute = executeLines.map(line => line ? ` ${line}` : line).join("\n");
371
+ // Generate file content
372
+ const content = SKILL_TEMPLATE
373
+ .replace(/\{\{name\}\}/g, suggestion.name)
374
+ .replace(/\{\{camelName\}\}/g, camelName)
375
+ .replace(/\{\{description\}\}/g, suggestion.description)
376
+ .replace(/\{\{risk\}\}/g, suggestion.risk)
377
+ .replace(/\{\{patternType\}\}/g, suggestion.pattern.type)
378
+ .replace(/\{\{occurrences\}\}/g, String(suggestion.pattern.occurrences))
379
+ .replace(/\{\{confidence\}\}/g, String(Math.round(suggestion.pattern.confidence * 100)))
380
+ .replace(/\{\{toolDefinition\}\}/g, toolDefStr)
381
+ .replace(/\{\{executeCode\}\}/g, indentedExecute);
382
+ try {
383
+ await fs.writeFile(skillPath, content, "utf-8");
384
+ console.log(`[SkillCreation] Created skill: ${skillPath}`);
385
+ return skillPath;
386
+ }
387
+ catch (err) {
388
+ console.error(`[SkillCreation] Failed to write skill:`, err);
389
+ return null;
390
+ }
391
+ }
392
+ // ═════════════════════════════════════════════════════════════════
393
+ // SKILL VALIDATION
394
+ // ═════════════════════════════════════════════════════════════════
395
+ /**
396
+ * Validate a generated skill by attempting to parse it.
397
+ */
398
+ export async function validateSkill(skillPath) {
399
+ try {
400
+ // Try to import the skill
401
+ const skillModule = await import(skillPath);
402
+ if (!skillModule.default && !skillModule.skill) {
403
+ return { valid: false, error: "No skill export found" };
404
+ }
405
+ const skill = skillModule.default || skillModule.skill;
406
+ // Validate required fields
407
+ if (!skill.name || typeof skill.name !== "string") {
408
+ return { valid: false, error: "Invalid or missing skill name" };
409
+ }
410
+ if (!skill.description || typeof skill.description !== "string") {
411
+ return { valid: false, error: "Invalid or missing skill description" };
412
+ }
413
+ if (!["safe", "medium", "high"].includes(skill.risk)) {
414
+ return { valid: false, error: "Invalid risk level" };
415
+ }
416
+ if (typeof skill.execute !== "function") {
417
+ return { valid: false, error: "Missing execute function" };
418
+ }
419
+ return { valid: true };
420
+ }
421
+ catch (err) {
422
+ return { valid: false, error: err.message };
423
+ }
424
+ }
425
+ // ═════════════════════════════════════════════════════════════════
426
+ // CONVENIENCE API
427
+ // ═════════════════════════════════════════════════════════════════
428
+ /**
429
+ * Auto-create skills from detected patterns.
430
+ * This is the main entry point for autonomous skill creation.
431
+ */
432
+ export async function autoCreateSkills(store, peerId, options) {
433
+ const { minOccurrences = 3, minConfidence = 0.7, skillsDir, ollamaUrl = process.env.OLLAMA_URL || "http://localhost:11434", dryRun = false, } = options || {};
434
+ const result = {
435
+ patterns: [],
436
+ suggestions: [],
437
+ created: [],
438
+ errors: [],
439
+ };
440
+ // Step 1: Detect patterns
441
+ console.log("[SkillCreation] Detecting patterns...");
442
+ const patterns = await detectPatterns(store, peerId, ollamaUrl);
443
+ result.patterns = patterns;
444
+ // Step 2: Filter patterns
445
+ const eligiblePatterns = patterns.filter(p => p.occurrences >= minOccurrences && p.confidence >= minConfidence);
446
+ console.log(`[SkillCreation] Found ${patterns.length} patterns, ${eligiblePatterns.length} eligible`);
447
+ // Step 3: Generate skills for eligible patterns
448
+ for (const pattern of eligiblePatterns) {
449
+ const suggestion = await generateSkill(pattern, ollamaUrl);
450
+ if (suggestion) {
451
+ result.suggestions.push(suggestion);
452
+ // Step 4: Write skill (unless dry run)
453
+ if (!dryRun) {
454
+ const skillPath = await writeSkill(suggestion, skillsDir);
455
+ if (skillPath) {
456
+ // Step 5: Validate
457
+ const validation = await validateSkill(skillPath);
458
+ if (validation.valid) {
459
+ result.created.push(skillPath);
460
+ }
461
+ else {
462
+ result.errors.push(`${suggestion.name}: ${validation.error}`);
463
+ // Remove invalid skill
464
+ await fs.unlink(skillPath).catch(() => { });
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ console.log(`[SkillCreation] Created ${result.created.length} skills, ${result.errors.length} errors`);
471
+ return result;
472
+ }
473
+ // Singleton for default store
474
+ let skillCreationStore = null;
475
+ export function setSkillCreationStore(store) {
476
+ skillCreationStore = store;
477
+ }
478
+ export function getSkillCreationStore() {
479
+ return skillCreationStore;
480
+ }
481
+ //# sourceMappingURL=skill-creation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-creation.js","sourceRoot":"","sources":["../../../../src/memory/dialectic/skill-creation.ts"],"names":[],"mappings":"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"}