0xkobold 0.7.3 → 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 (248) 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 +8 -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 +5 -5
  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 +8 -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/compaction-safeguard.js +0 -223
  155. package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
  156. package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
  157. package/dist/src/llm/router.js +0 -145
  158. package/dist/src/llm/router.js.map +0 -1
  159. package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
  160. package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
  161. package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
  162. package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
  163. package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
  164. package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
  165. package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  166. package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
  167. package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
  168. package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
  169. package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
  170. package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
  171. package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
  172. package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
  173. package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
  174. package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
  175. package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
  176. package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
  177. package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
  178. package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
  179. package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
  180. package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
  181. package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
  182. package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
  183. package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
  184. package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
  185. package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
  186. package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
  187. package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
  188. package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
  189. package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
  190. package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
  191. package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
  192. package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
  193. package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
  194. package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
  195. package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
  196. package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
  197. package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
  198. package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
  199. package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
  200. package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
  201. package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
  202. package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
  203. package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
  204. package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
  205. package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
  206. package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
  207. package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
  208. package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
  209. package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
  210. package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
  211. package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
  212. package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
  213. package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
  214. package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
  215. package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
  216. package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
  217. package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
  218. package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
  219. package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
  220. package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
  221. package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
  222. package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
  223. package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
  224. package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
  225. package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
  226. package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
  227. package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
  228. package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
  229. package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
  230. package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
  231. package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
  232. package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
  233. package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
  234. package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
  235. package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
  236. package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
  237. package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
  238. package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
  239. package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
  240. package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
  241. package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
  242. package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
  243. package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
  244. package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
  245. package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
  246. package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
  247. package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
  248. 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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"}