0xkobold 0.0.1

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 (258) hide show
  1. package/.agents/skills/nextjs-best-practices/SKILL.md +208 -0
  2. package/.agents/skills/sql-optimization-patterns/SKILL.md +509 -0
  3. package/HEARTBEAT.md +45 -0
  4. package/README.md +197 -0
  5. package/USAGE.md +191 -0
  6. package/dist/package.json +77 -0
  7. package/dist/src/agent/pi-adapter.js +307 -0
  8. package/dist/src/agent/pi-adapter.js.map +1 -0
  9. package/dist/src/agent/tool-adapter.js +86 -0
  10. package/dist/src/agent/tool-adapter.js.map +1 -0
  11. package/dist/src/approval/queue.js +114 -0
  12. package/dist/src/approval/queue.js.map +1 -0
  13. package/dist/src/ascii-kobold.js +76 -0
  14. package/dist/src/ascii-kobold.js.map +1 -0
  15. package/dist/src/cli/client.js +217 -0
  16. package/dist/src/cli/client.js.map +1 -0
  17. package/dist/src/cli/commands/agent.js +272 -0
  18. package/dist/src/cli/commands/agent.js.map +1 -0
  19. package/dist/src/cli/commands/chat.js +234 -0
  20. package/dist/src/cli/commands/chat.js.map +1 -0
  21. package/dist/src/cli/commands/config.js +202 -0
  22. package/dist/src/cli/commands/config.js.map +1 -0
  23. package/dist/src/cli/commands/daemon.js +203 -0
  24. package/dist/src/cli/commands/daemon.js.map +1 -0
  25. package/dist/src/cli/commands/gateway.js +184 -0
  26. package/dist/src/cli/commands/gateway.js.map +1 -0
  27. package/dist/src/cli/commands/init.js +175 -0
  28. package/dist/src/cli/commands/init.js.map +1 -0
  29. package/dist/src/cli/commands/kobold.js +21 -0
  30. package/dist/src/cli/commands/kobold.js.map +1 -0
  31. package/dist/src/cli/commands/logs.js +27 -0
  32. package/dist/src/cli/commands/logs.js.map +1 -0
  33. package/dist/src/cli/commands/mode.js +121 -0
  34. package/dist/src/cli/commands/mode.js.map +1 -0
  35. package/dist/src/cli/commands/persona.js +261 -0
  36. package/dist/src/cli/commands/persona.js.map +1 -0
  37. package/dist/src/cli/commands/start.js +66 -0
  38. package/dist/src/cli/commands/start.js.map +1 -0
  39. package/dist/src/cli/commands/status.js +117 -0
  40. package/dist/src/cli/commands/status.js.map +1 -0
  41. package/dist/src/cli/commands/stop.js +27 -0
  42. package/dist/src/cli/commands/stop.js.map +1 -0
  43. package/dist/src/cli/commands/system.js +128 -0
  44. package/dist/src/cli/commands/system.js.map +1 -0
  45. package/dist/src/cli/commands/tui.js +103 -0
  46. package/dist/src/cli/commands/tui.js.map +1 -0
  47. package/dist/src/cli/commands/update.js +133 -0
  48. package/dist/src/cli/commands/update.js.map +1 -0
  49. package/dist/src/cli/extensions/discord.js +113 -0
  50. package/dist/src/cli/extensions/discord.js.map +1 -0
  51. package/dist/src/cli/extensions/env.js +91 -0
  52. package/dist/src/cli/extensions/env.js.map +1 -0
  53. package/dist/src/cli/extensions/heartbeat.js +78 -0
  54. package/dist/src/cli/extensions/heartbeat.js.map +1 -0
  55. package/dist/src/cli/index.js +24 -0
  56. package/dist/src/cli/index.js.map +1 -0
  57. package/dist/src/cli/program.js +70 -0
  58. package/dist/src/cli/program.js.map +1 -0
  59. package/dist/src/cli/repl.js +184 -0
  60. package/dist/src/cli/repl.js.map +1 -0
  61. package/dist/src/cli/shared/discord-service.js +102 -0
  62. package/dist/src/cli/shared/discord-service.js.map +1 -0
  63. package/dist/src/config/index.js +10 -0
  64. package/dist/src/config/index.js.map +1 -0
  65. package/dist/src/config/loader.js +401 -0
  66. package/dist/src/config/loader.js.map +1 -0
  67. package/dist/src/config/paths.js +84 -0
  68. package/dist/src/config/paths.js.map +1 -0
  69. package/dist/src/config/types.js +8 -0
  70. package/dist/src/config/types.js.map +1 -0
  71. package/dist/src/context-detector.js +60 -0
  72. package/dist/src/context-detector.js.map +1 -0
  73. package/dist/src/discord/index.js +376 -0
  74. package/dist/src/discord/index.js.map +1 -0
  75. package/dist/src/event-bus/index.js +97 -0
  76. package/dist/src/event-bus/index.js.map +1 -0
  77. package/dist/src/extensions/command-args.js +68 -0
  78. package/dist/src/extensions/command-args.js.map +1 -0
  79. package/dist/src/extensions/core/agent-registry-extension.js +541 -0
  80. package/dist/src/extensions/core/agent-registry-extension.js.map +1 -0
  81. package/dist/src/extensions/core/agent-worker.js +148 -0
  82. package/dist/src/extensions/core/agent-worker.js.map +1 -0
  83. package/dist/src/extensions/core/compaction-safeguard.js +154 -0
  84. package/dist/src/extensions/core/compaction-safeguard.js.map +1 -0
  85. package/dist/src/extensions/core/confirm-destructive.js +43 -0
  86. package/dist/src/extensions/core/confirm-destructive.js.map +1 -0
  87. package/dist/src/extensions/core/context-aware-extension.js +124 -0
  88. package/dist/src/extensions/core/context-aware-extension.js.map +1 -0
  89. package/dist/src/extensions/core/context-pruning/extension.js +124 -0
  90. package/dist/src/extensions/core/context-pruning/extension.js.map +1 -0
  91. package/dist/src/extensions/core/context-pruning/pruner.js +312 -0
  92. package/dist/src/extensions/core/context-pruning/pruner.js.map +1 -0
  93. package/dist/src/extensions/core/context-pruning/runtime.js +48 -0
  94. package/dist/src/extensions/core/context-pruning/runtime.js.map +1 -0
  95. package/dist/src/extensions/core/context-pruning/settings.js +105 -0
  96. package/dist/src/extensions/core/context-pruning/settings.js.map +1 -0
  97. package/dist/src/extensions/core/dirty-repo-guard.js +42 -0
  98. package/dist/src/extensions/core/dirty-repo-guard.js.map +1 -0
  99. package/dist/src/extensions/core/discord-channel-extension.js +205 -0
  100. package/dist/src/extensions/core/discord-channel-extension.js.map +1 -0
  101. package/dist/src/extensions/core/discord-extension.js +142 -0
  102. package/dist/src/extensions/core/discord-extension.js.map +1 -0
  103. package/dist/src/extensions/core/env-loader-extension.js +157 -0
  104. package/dist/src/extensions/core/env-loader-extension.js.map +1 -0
  105. package/dist/src/extensions/core/fileops-extension.js +699 -0
  106. package/dist/src/extensions/core/fileops-extension.js.map +1 -0
  107. package/dist/src/extensions/core/gateway-extension.js +730 -0
  108. package/dist/src/extensions/core/gateway-extension.js.map +1 -0
  109. package/dist/src/extensions/core/git-checkpoint.js +46 -0
  110. package/dist/src/extensions/core/git-checkpoint.js.map +1 -0
  111. package/dist/src/extensions/core/handoff-extension.js +206 -0
  112. package/dist/src/extensions/core/handoff-extension.js.map +1 -0
  113. package/dist/src/extensions/core/heartbeat-extension.js +373 -0
  114. package/dist/src/extensions/core/heartbeat-extension.js.map +1 -0
  115. package/dist/src/extensions/core/mcp-extension.js +413 -0
  116. package/dist/src/extensions/core/mcp-extension.js.map +1 -0
  117. package/dist/src/extensions/core/mode-manager-extension.js +562 -0
  118. package/dist/src/extensions/core/mode-manager-extension.js.map +1 -0
  119. package/dist/src/extensions/core/multi-channel-extension.js +435 -0
  120. package/dist/src/extensions/core/multi-channel-extension.js.map +1 -0
  121. package/dist/src/extensions/core/ollama-provider-extension.js +66 -0
  122. package/dist/src/extensions/core/ollama-provider-extension.js.map +1 -0
  123. package/dist/src/extensions/core/onboarding-extension.js +122 -0
  124. package/dist/src/extensions/core/onboarding-extension.js.map +1 -0
  125. package/dist/src/extensions/core/persona-loader-extension.js +139 -0
  126. package/dist/src/extensions/core/persona-loader-extension.js.map +1 -0
  127. package/dist/src/extensions/core/pi-notify-extension.js +70 -0
  128. package/dist/src/extensions/core/pi-notify-extension.js.map +1 -0
  129. package/dist/src/extensions/core/protected-paths.js +24 -0
  130. package/dist/src/extensions/core/protected-paths.js.map +1 -0
  131. package/dist/src/extensions/core/questionnaire-extension.js +242 -0
  132. package/dist/src/extensions/core/questionnaire-extension.js.map +1 -0
  133. package/dist/src/extensions/core/self-update-extension.js +181 -0
  134. package/dist/src/extensions/core/self-update-extension.js.map +1 -0
  135. package/dist/src/extensions/core/session-bridge-extension.js +78 -0
  136. package/dist/src/extensions/core/session-bridge-extension.js.map +1 -0
  137. package/dist/src/extensions/core/session-manager-extension.js +319 -0
  138. package/dist/src/extensions/core/session-manager-extension.js.map +1 -0
  139. package/dist/src/extensions/core/session-name-extension.js +88 -0
  140. package/dist/src/extensions/core/session-name-extension.js.map +1 -0
  141. package/dist/src/extensions/core/session-pruning-extension.js +480 -0
  142. package/dist/src/extensions/core/session-pruning-extension.js.map +1 -0
  143. package/dist/src/extensions/core/task-manager-extension.js +661 -0
  144. package/dist/src/extensions/core/task-manager-extension.js.map +1 -0
  145. package/dist/src/extensions/core/update-extension.js +438 -0
  146. package/dist/src/extensions/core/update-extension.js.map +1 -0
  147. package/dist/src/extensions/core/websearch-extension.js +463 -0
  148. package/dist/src/extensions/core/websearch-extension.js.map +1 -0
  149. package/dist/src/extensions/index.js +5 -0
  150. package/dist/src/extensions/index.js.map +1 -0
  151. package/dist/src/extensions/loader.js +80 -0
  152. package/dist/src/extensions/loader.js.map +1 -0
  153. package/dist/src/gateway/index.js +353 -0
  154. package/dist/src/gateway/index.js.map +1 -0
  155. package/dist/src/index.js +150 -0
  156. package/dist/src/index.js.map +1 -0
  157. package/dist/src/llm/anthropic.js +86 -0
  158. package/dist/src/llm/anthropic.js.map +1 -0
  159. package/dist/src/llm/index.js +9 -0
  160. package/dist/src/llm/index.js.map +1 -0
  161. package/dist/src/llm/ollama.js +113 -0
  162. package/dist/src/llm/ollama.js.map +1 -0
  163. package/dist/src/llm/router.js +145 -0
  164. package/dist/src/llm/router.js.map +1 -0
  165. package/dist/src/llm/types.js +7 -0
  166. package/dist/src/llm/types.js.map +1 -0
  167. package/dist/src/memory/index.js +5 -0
  168. package/dist/src/memory/index.js.map +1 -0
  169. package/dist/src/memory/store.js +91 -0
  170. package/dist/src/memory/store.js.map +1 -0
  171. package/dist/src/pi-config.js +80 -0
  172. package/dist/src/pi-config.js.map +1 -0
  173. package/dist/src/skills/builtin/file.js +184 -0
  174. package/dist/src/skills/builtin/file.js.map +1 -0
  175. package/dist/src/skills/builtin/shell.js +100 -0
  176. package/dist/src/skills/builtin/shell.js.map +1 -0
  177. package/dist/src/skills/builtin/subagent.js +62 -0
  178. package/dist/src/skills/builtin/subagent.js.map +1 -0
  179. package/dist/src/skills/hello.js +42 -0
  180. package/dist/src/skills/hello.js.map +1 -0
  181. package/dist/src/skills/index.js +11 -0
  182. package/dist/src/skills/index.js.map +1 -0
  183. package/dist/src/skills/loader.js +382 -0
  184. package/dist/src/skills/loader.js.map +1 -0
  185. package/dist/src/skills/types.js +8 -0
  186. package/dist/src/skills/types.js.map +1 -0
  187. package/dist/src/utils/working-dir.js +71 -0
  188. package/dist/src/utils/working-dir.js.map +1 -0
  189. package/package.json +77 -0
  190. package/skills/1password/SKILL.md +70 -0
  191. package/skills/1password/references/cli-examples.md +29 -0
  192. package/skills/1password/references/get-started.md +17 -0
  193. package/skills/apple-notes/SKILL.md +77 -0
  194. package/skills/apple-reminders/SKILL.md +118 -0
  195. package/skills/bear-notes/SKILL.md +107 -0
  196. package/skills/blogwatcher/SKILL.md +69 -0
  197. package/skills/blucli/SKILL.md +47 -0
  198. package/skills/bluebubbles/SKILL.md +131 -0
  199. package/skills/camsnap/SKILL.md +45 -0
  200. package/skills/canvas/SKILL.md +198 -0
  201. package/skills/clawhub/SKILL.md +77 -0
  202. package/skills/coding-agent/SKILL.md +284 -0
  203. package/skills/discord/SKILL.md +197 -0
  204. package/skills/eightctl/SKILL.md +50 -0
  205. package/skills/food-order/SKILL.md +48 -0
  206. package/skills/gemini/SKILL.md +43 -0
  207. package/skills/gh-issues/SKILL.md +865 -0
  208. package/skills/gifgrep/SKILL.md +79 -0
  209. package/skills/github/SKILL.md +163 -0
  210. package/skills/gog/SKILL.md +116 -0
  211. package/skills/goplaces/SKILL.md +52 -0
  212. package/skills/healthcheck/SKILL.md +245 -0
  213. package/skills/himalaya/SKILL.md +257 -0
  214. package/skills/himalaya/references/configuration.md +184 -0
  215. package/skills/himalaya/references/message-composition.md +199 -0
  216. package/skills/imsg/SKILL.md +122 -0
  217. package/skills/mcporter/SKILL.md +61 -0
  218. package/skills/model-usage/SKILL.md +69 -0
  219. package/skills/model-usage/references/codexbar-cli.md +33 -0
  220. package/skills/model-usage/scripts/model_usage.py +310 -0
  221. package/skills/nano-banana-pro/SKILL.md +58 -0
  222. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  223. package/skills/nano-pdf/SKILL.md +38 -0
  224. package/skills/notion/SKILL.md +172 -0
  225. package/skills/obsidian/SKILL.md +81 -0
  226. package/skills/openai-image-gen/SKILL.md +89 -0
  227. package/skills/openai-image-gen/scripts/gen.py +240 -0
  228. package/skills/openai-whisper/SKILL.md +38 -0
  229. package/skills/openai-whisper-api/SKILL.md +52 -0
  230. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  231. package/skills/openhue/SKILL.md +112 -0
  232. package/skills/oracle/SKILL.md +125 -0
  233. package/skills/ordercli/SKILL.md +78 -0
  234. package/skills/peekaboo/SKILL.md +190 -0
  235. package/skills/sag/SKILL.md +87 -0
  236. package/skills/session-logs/SKILL.md +115 -0
  237. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  238. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  239. package/skills/skill-creator/SKILL.md +370 -0
  240. package/skills/skill-creator/license.txt +202 -0
  241. package/skills/skill-creator/scripts/init_skill.py +378 -0
  242. package/skills/skill-creator/scripts/package_skill.py +111 -0
  243. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  244. package/skills/slack/SKILL.md +144 -0
  245. package/skills/songsee/SKILL.md +49 -0
  246. package/skills/sonoscli/SKILL.md +46 -0
  247. package/skills/spotify-player/SKILL.md +64 -0
  248. package/skills/summarize/SKILL.md +87 -0
  249. package/skills/things-mac/SKILL.md +86 -0
  250. package/skills/tmux/SKILL.md +153 -0
  251. package/skills/tmux/scripts/find-sessions.sh +112 -0
  252. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  253. package/skills/trello/SKILL.md +95 -0
  254. package/skills/video-frames/SKILL.md +46 -0
  255. package/skills/video-frames/scripts/frame.sh +81 -0
  256. package/skills/voice-call/SKILL.md +45 -0
  257. package/skills/wacli/SKILL.md +72 -0
  258. package/skills/weather/SKILL.md +112 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Shell Skill
3
+ *
4
+ * Execute shell commands with safety controls.
5
+ */
6
+ import { exec } from 'child_process';
7
+ import { promisify } from 'util';
8
+ const execAsync = promisify(exec);
9
+ // Blocked dangerous commands
10
+ const BLOCKED_PATTERNS = [
11
+ /rm\s+-rf\s+\//,
12
+ /dd\s+if=/,
13
+ />\s*\/dev\/(null|zero|random)/,
14
+ /mkfs/,
15
+ /:\(\)\{\s*:\|\:&&\}\s*;/, // fork bomb
16
+ ];
17
+ // Allowed safe commands (whitelist approach)
18
+ const SAFE_COMMANDS = [
19
+ 'ls', 'cat', 'grep', 'find', 'pwd', 'echo', 'head', 'tail',
20
+ 'wc', 'sort', 'uniq', 'curl', 'wget', 'git', 'npm', 'bun',
21
+ 'mkdir', 'touch', 'cp', 'mv', 'rm', 'cd', 'pwd',
22
+ ];
23
+ export const shellSkill = {
24
+ name: 'shell',
25
+ description: `Execute shell commands safely.
26
+
27
+ Available commands: ls, cat, grep, find, git, npm, bun, curl, mkdir, cp, mv, rm, etc.
28
+
29
+ For destructive operations (rm, mv), you'll be asked for approval.`,
30
+ risk: 'high',
31
+ toolDefinition: {
32
+ type: 'function',
33
+ function: {
34
+ name: 'shell',
35
+ description: 'Execute a shell command',
36
+ parameters: {
37
+ type: 'object',
38
+ properties: {
39
+ command: {
40
+ type: 'string',
41
+ description: 'The shell command to execute',
42
+ },
43
+ timeout: {
44
+ type: 'number',
45
+ description: 'Timeout in seconds (default: 30)',
46
+ },
47
+ cwd: {
48
+ type: 'string',
49
+ description: 'Working directory (default: current)',
50
+ },
51
+ },
52
+ required: ['command'],
53
+ },
54
+ },
55
+ },
56
+ async execute(args) {
57
+ const command = args.command;
58
+ const timeout = args.timeout ?? 30;
59
+ const cwd = args.cwd;
60
+ // Check for blocked patterns
61
+ for (const pattern of BLOCKED_PATTERNS) {
62
+ if (pattern.test(command)) {
63
+ return {
64
+ error: 'Command blocked for safety',
65
+ command,
66
+ reason: 'Dangerous pattern detected',
67
+ };
68
+ }
69
+ }
70
+ // Check if command is in safe list (basic check)
71
+ const baseCmd = command.trim().split(' ')[0];
72
+ if (!SAFE_COMMANDS.includes(baseCmd)) {
73
+ console.log(`[Shell] Warning: Command "${baseCmd}" not in safe list, will require approval`);
74
+ }
75
+ try {
76
+ const { stdout, stderr } = await execAsync(command, {
77
+ timeout: timeout * 1000,
78
+ cwd,
79
+ env: { ...process.env, PATH: process.env.PATH },
80
+ });
81
+ return {
82
+ command,
83
+ stdout: stdout.trim(),
84
+ stderr: stderr.trim(),
85
+ exitCode: 0,
86
+ };
87
+ }
88
+ catch (err) {
89
+ return {
90
+ command,
91
+ stdout: err.stdout?.trim() ?? '',
92
+ stderr: err.stderr?.trim() ?? '',
93
+ exitCode: err.code ?? 1,
94
+ error: err.message,
95
+ };
96
+ }
97
+ },
98
+ };
99
+ export default shellSkill;
100
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../../src/skills/builtin/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Subagent Skill
3
+ *
4
+ * Built-in skill for spawning subagents.
5
+ * This allows agents to delegate work to child agents.
6
+ */
7
+ export const subagentSkill = {
8
+ name: 'spawn_subagent',
9
+ description: `Spawn a subagent to handle a specific task in parallel.
10
+
11
+ Use this when you need to:
12
+ - Delegate work to a specialized agent
13
+ - Run multiple tasks in parallel
14
+ - Isolate a complex subtask
15
+ - Scale work across multiple agents
16
+
17
+ The subagent will have the same capabilities and tools as you,
18
+ but will be isolated in its own session. When the subagent completes,
19
+ you'll receive its result.`,
20
+ risk: 'medium',
21
+ toolDefinition: {
22
+ type: 'function',
23
+ function: {
24
+ name: 'spawn_subagent',
25
+ description: 'Spawn a subagent to handle a specific task',
26
+ parameters: {
27
+ type: 'object',
28
+ properties: {
29
+ task: {
30
+ type: 'string',
31
+ description: 'The task to assign to the subagent. Be specific and clear.',
32
+ },
33
+ model: {
34
+ type: 'string',
35
+ description: 'Optional: Model to use (e.g., "fast" for quick tasks, "smart" for complex reasoning). Defaults to same model.',
36
+ },
37
+ maxIterations: {
38
+ type: 'number',
39
+ description: 'Optional: Maximum iterations for the subagent. Default: 10',
40
+ },
41
+ },
42
+ required: ['task'],
43
+ },
44
+ },
45
+ },
46
+ async execute(args) {
47
+ const task = args.task;
48
+ const model = args.model;
49
+ const maxIterations = args.maxIterations;
50
+ // This will be handled by the agent system
51
+ // The actual implementation is in pi-adapter.ts
52
+ return {
53
+ spawnRequested: true,
54
+ task,
55
+ model,
56
+ maxIterations,
57
+ message: 'Subagent spawn requested. This should be handled by the agent runner.',
58
+ };
59
+ },
60
+ };
61
+ export default subagentSkill;
62
+ //# sourceMappingURL=subagent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../../src/skills/builtin/subagent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;;;;2BAUY;IAEzB,IAAI,EAAE,QAAQ;IAEd,cAAc,EAAE;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,4CAA4C;YACzD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4DAA4D;qBAC1E;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,+GAA+G;qBAC7H;oBACD,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4DAA4D;qBAC1E;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF;KACF;IAED,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAmC,CAAC;QAE/D,2CAA2C;QAC3C,gDAAgD;QAChD,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,IAAI;YACJ,KAAK;YACL,aAAa;YACb,OAAO,EAAE,uEAAuE;SACjF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Example Skill: Hello
3
+ *
4
+ * Demonstrates the hot-reload skill system.
5
+ */
6
+ export const helloSkill = {
7
+ name: 'hello',
8
+ description: 'Say hello to someone. Use this to greet users.',
9
+ risk: 'safe',
10
+ toolDefinition: {
11
+ type: 'function',
12
+ function: {
13
+ name: 'hello',
14
+ description: 'Say hello to someone by name',
15
+ parameters: {
16
+ type: 'object',
17
+ properties: {
18
+ name: {
19
+ type: 'string',
20
+ description: 'The name of the person to greet',
21
+ },
22
+ enthusiasm: {
23
+ type: 'number',
24
+ description: 'Enthusiasm level 1-10 (default: 5)',
25
+ },
26
+ },
27
+ required: ['name'],
28
+ },
29
+ },
30
+ },
31
+ async execute(args) {
32
+ const name = args.name;
33
+ const enthusiasm = args.enthusiasm ?? 5;
34
+ const exclamation = '!'.repeat(Math.min(enthusiasm, 10));
35
+ return {
36
+ greeting: `Hello, ${name}${exclamation}`,
37
+ timestamp: new Date().toISOString(),
38
+ };
39
+ },
40
+ };
41
+ export default helloSkill;
42
+ //# sourceMappingURL=hello.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello.js","sourceRoot":"","sources":["../../../src/skills/hello.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,UAAU,GAAU;IAC/B,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,gDAAgD;IAC7D,IAAI,EAAE,MAAM;IAEZ,cAAc,EAAE;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,8BAA8B;YAC3C,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,iCAAiC;qBAC/C;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oCAAoC;qBAClD;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF;KACF;IAED,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;QACjC,MAAM,UAAU,GAAI,IAAI,CAAC,UAAiC,IAAI,CAAC,CAAC;QAEhE,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAEzD,OAAO;YACL,QAAQ,EAAE,UAAU,IAAI,GAAG,WAAW,EAAE;YACxC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Skills Module
3
+ *
4
+ * Hot-reload skill system with built-in skills.
5
+ */
6
+ export { skillRegistry, getSkillRegistry, initSkills, reloadSkills } from './loader';
7
+ // Built-in skills
8
+ export { subagentSkill } from './builtin/subagent';
9
+ export { shellSkill } from './builtin/shell';
10
+ export { readFileSkill, writeFileSkill, listFilesSkill } from './builtin/file';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAErF,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,382 @@
1
+ /**
2
+ * Skill Loader
3
+ *
4
+ * Hot-reload skill system using Bun's file watcher.
5
+ * Skills are plain .ts/.md files in the skills directories.
6
+ */
7
+ import { watch } from 'fs';
8
+ import { readdir, readFile } from 'fs/promises';
9
+ import { join, basename, extname, dirname } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { existsSync } from 'fs';
12
+ import { homedir } from 'os';
13
+ import { createEventEmitter } from '../event-bus';
14
+ const emit = createEventEmitter('skills');
15
+ // Get __dirname equivalent in ESM
16
+ const getDirname = () => {
17
+ return dirname(fileURLToPath(import.meta.url));
18
+ };
19
+ // Built-in skills path - relative to project root (for dev)
20
+ const PROJECT_ROOT = join(getDirname(), '..', '..');
21
+ const DEV_BUILTIN_SKILLS_DIR = join(PROJECT_ROOT, 'src', 'skills', 'builtin');
22
+ // Production built-in skills path (in dist/)
23
+ const PROD_BUILTIN_SKILLS_DIR = join(PROJECT_ROOT, '..', 'skills', 'builtin');
24
+ // User skills directories
25
+ function getGlobalSkillsDir() {
26
+ // Use ~/.0xkobold/skills instead of .agents/skills for better organization
27
+ return join(homedir(), '.0xkobold', 'skills');
28
+ }
29
+ function getLocalSkillsDir() {
30
+ return join(process.cwd(), 'skills');
31
+ }
32
+ function getAgentSkillsDir() {
33
+ // Support skills installed via 'skills' CLI to .agents/skills
34
+ const agentSkills = join(homedir(), '.agents', 'skills');
35
+ if (existsSync(agentSkills)) {
36
+ return agentSkills;
37
+ }
38
+ return getGlobalSkillsDir();
39
+ }
40
+ /**
41
+ * Get bundled skills directory (shipped with npm package)
42
+ */
43
+ function getBundledSkillsDir() {
44
+ // In dev: use .agents/skills from project root
45
+ // In prod: use .agents/skills from package root (next to dist/)
46
+ const devPath = join(PROJECT_ROOT, '.agents', 'skills');
47
+ const prodPath = join(PROJECT_ROOT, '..', '.agents', 'skills');
48
+ if (existsSync(devPath)) {
49
+ return devPath;
50
+ }
51
+ return prodPath;
52
+ }
53
+ /**
54
+ * Get built-in skills directory (handles both dev and prod)
55
+ */
56
+ function getBuiltInSkillsDir() {
57
+ // Prefer dev path if it exists
58
+ if (existsSync(DEV_BUILTIN_SKILLS_DIR)) {
59
+ return DEV_BUILTIN_SKILLS_DIR;
60
+ }
61
+ // Fall back to production path
62
+ return PROD_BUILTIN_SKILLS_DIR;
63
+ }
64
+ /**
65
+ * Skill Registry
66
+ */
67
+ class SkillRegistry {
68
+ skills = new Map();
69
+ watchers = new Map();
70
+ /**
71
+ * Register a skill
72
+ */
73
+ register(entry) {
74
+ this.skills.set(entry.name, entry);
75
+ // @ts-ignore EventEmitter type
76
+ emit('skill.registered', {
77
+ name: entry.name,
78
+ source: entry.source,
79
+ risk: entry.skill.risk,
80
+ });
81
+ }
82
+ /**
83
+ * Unregister a skill
84
+ */
85
+ unregister(name) {
86
+ const entry = this.skills.get(name);
87
+ if (entry) {
88
+ this.skills.delete(name);
89
+ // @ts-ignore EventEmitter type
90
+ emit('skill.unregistered', { name });
91
+ }
92
+ }
93
+ /**
94
+ * Get a skill by name
95
+ */
96
+ get(name) {
97
+ return this.skills.get(name)?.skill;
98
+ }
99
+ /**
100
+ * Get all skills
101
+ */
102
+ getAll() {
103
+ return Array.from(this.skills.values()).map(e => e.skill);
104
+ }
105
+ /**
106
+ * List all registered skills
107
+ */
108
+ list() {
109
+ return Array.from(this.skills.values());
110
+ }
111
+ /**
112
+ * Check if skill exists
113
+ */
114
+ has(name) {
115
+ return this.skills.has(name);
116
+ }
117
+ /**
118
+ * Clear all skills
119
+ */
120
+ clear() {
121
+ this.skills.clear();
122
+ }
123
+ /**
124
+ * Watch a file for hot-reload
125
+ */
126
+ watchFile(path, loadFn) {
127
+ // Stop existing watcher
128
+ this.stopWatching(path);
129
+ const watcher = watch(path, async (eventType) => {
130
+ if (eventType === 'change') {
131
+ console.log(`[Skills] Hot-reloading: ${basename(path)}`);
132
+ try {
133
+ await loadFn();
134
+ console.log(`[Skills] Reloaded: ${basename(path)}`);
135
+ }
136
+ catch (err) {
137
+ console.error(`[Skills] Failed to reload ${basename(path)}:`, err);
138
+ }
139
+ }
140
+ });
141
+ this.watchers.set(path, watcher);
142
+ }
143
+ /**
144
+ * Stop watching a file
145
+ */
146
+ stopWatching(path) {
147
+ const watcher = this.watchers.get(path);
148
+ if (watcher) {
149
+ watcher.close();
150
+ this.watchers.delete(path);
151
+ }
152
+ }
153
+ /**
154
+ * Stop all watchers
155
+ */
156
+ stopAllWatchers() {
157
+ for (const [path, watcher] of this.watchers) {
158
+ watcher.close();
159
+ }
160
+ this.watchers.clear();
161
+ }
162
+ }
163
+ // Global registry instance
164
+ export const skillRegistry = new SkillRegistry();
165
+ /**
166
+ * Load a skill from a file
167
+ */
168
+ async function loadSkillFile(path) {
169
+ try {
170
+ // Handle .md skills (from skills CLI)
171
+ if (path.endsWith('.md')) {
172
+ const content = await readFile(path, 'utf-8');
173
+ // Parse SKILL.md format - extract frontmatter and create skill
174
+ const skill = parseSkillMarkdown(content, path);
175
+ return skill ? [skill] : [];
176
+ }
177
+ // Handle .ts/.js skills (dynamic import)
178
+ const module = (await import(path));
179
+ // Try to get skill(s) from default export or named export
180
+ let skills = module.default || module.skill;
181
+ if (!skills) {
182
+ // Try to find first Skill-like export
183
+ for (const key of Object.keys(module)) {
184
+ const exported = module[key];
185
+ if (isSkill(exported)) {
186
+ skills = exported;
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ if (!skills) {
192
+ return [];
193
+ }
194
+ // Handle both single skill and array of skills
195
+ return Array.isArray(skills) ? skills : [skills];
196
+ }
197
+ catch (err) {
198
+ console.error(`[Skills] Failed to load ${path}:`, err);
199
+ return [];
200
+ }
201
+ }
202
+ /**
203
+ * Parse SKILL.md format into Skill object
204
+ */
205
+ function parseSkillMarkdown(content, sourcePath) {
206
+ try {
207
+ // Extract frontmatter
208
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
209
+ if (!frontmatterMatch) {
210
+ console.warn(`[Skills] No frontmatter found in ${sourcePath}`);
211
+ return null;
212
+ }
213
+ const [_, frontmatter, body] = frontmatterMatch;
214
+ // Parse YAML-like frontmatter
215
+ const meta = {};
216
+ for (const line of frontmatter.split('\n')) {
217
+ const match = line.match(/^([^:]+):\s*(.*)$/);
218
+ if (match) {
219
+ const [, key, value] = match;
220
+ meta[key.trim()] = value.trim().replace(/^["']|["']$/g, '');
221
+ }
222
+ }
223
+ const name = meta.name || basename(dirname(sourcePath));
224
+ const description = meta.description || `Skill: ${name}`;
225
+ const risk = meta.risk || 'medium';
226
+ // Create a skill that returns the markdown content as context
227
+ return {
228
+ name,
229
+ description,
230
+ risk,
231
+ toolDefinition: {
232
+ type: 'function',
233
+ function: {
234
+ name,
235
+ description,
236
+ parameters: {
237
+ type: 'object',
238
+ properties: {},
239
+ required: [],
240
+ },
241
+ },
242
+ },
243
+ execute: async () => {
244
+ return {
245
+ content: body,
246
+ source: sourcePath,
247
+ meta,
248
+ };
249
+ },
250
+ };
251
+ }
252
+ catch (err) {
253
+ console.error(`[Skills] Failed to parse ${sourcePath}:`, err);
254
+ return null;
255
+ }
256
+ }
257
+ /**
258
+ * Check if object is a valid Skill
259
+ */
260
+ function isSkill(obj) {
261
+ if (!obj || typeof obj !== 'object')
262
+ return false;
263
+ const skill = obj;
264
+ return (typeof skill.name === 'string' &&
265
+ typeof skill.description === 'string' &&
266
+ typeof skill.toolDefinition === 'object' &&
267
+ skill.toolDefinition !== null &&
268
+ typeof skill.toolDefinition.type === 'string' &&
269
+ ['safe', 'medium', 'high'].includes(skill.risk) &&
270
+ typeof skill.execute === 'function');
271
+ }
272
+ /**
273
+ * Load and register a skill from file
274
+ */
275
+ async function registerSkillFile(path, hotReload = true) {
276
+ const fileName = basename(path, extname(path));
277
+ // Unregister existing
278
+ if (skillRegistry.has(fileName)) {
279
+ skillRegistry.unregister(fileName);
280
+ }
281
+ // Load new (can be single skill or array)
282
+ const skills = await loadSkillFile(path);
283
+ if (skills.length === 0) {
284
+ console.warn(`[Skills] No valid skill found in ${path}`);
285
+ return;
286
+ }
287
+ // Register each skill
288
+ for (const skill of skills) {
289
+ // Validate name - warn if doesn't match filename
290
+ if (skill.name !== fileName) {
291
+ console.warn(`[Skills] Skill name "${skill.name}" doesn't match filename "${fileName}"`);
292
+ }
293
+ skillRegistry.register({
294
+ name: skill.name,
295
+ skill,
296
+ source: path,
297
+ loadedAt: new Date(),
298
+ hotReload,
299
+ });
300
+ }
301
+ // Set up hot-reload watcher
302
+ if (hotReload) {
303
+ skillRegistry.watchFile(path, () => registerSkillFile(path, hotReload));
304
+ }
305
+ }
306
+ /**
307
+ * Load all skills from a directory
308
+ */
309
+ async function loadSkillsFromDir(dir, hotReload = true) {
310
+ // Check if directory exists first
311
+ if (!existsSync(dir)) {
312
+ console.log(`[Skills] Directory not found: ${dir}`);
313
+ return 0;
314
+ }
315
+ let count = 0;
316
+ try {
317
+ const entries = await readdir(dir, { withFileTypes: true });
318
+ for (const entry of entries) {
319
+ const path = join(dir, entry.name);
320
+ if (entry.isFile() && (entry.name.endsWith('.ts') || entry.name.endsWith('.js') || entry.name.endsWith('.md'))) {
321
+ await registerSkillFile(path, hotReload);
322
+ count++;
323
+ }
324
+ else if (entry.isDirectory()) {
325
+ // Check for SKILL.md in subdirectory
326
+ const skillMdPath = join(path, 'SKILL.md');
327
+ if (existsSync(skillMdPath)) {
328
+ await registerSkillFile(skillMdPath, hotReload);
329
+ count++;
330
+ }
331
+ }
332
+ }
333
+ console.log(`[Skills] Loaded ${count} skills from ${dir}`);
334
+ return count;
335
+ }
336
+ catch (err) {
337
+ console.error(`[Skills] Error loading skills from ${dir}:`, err);
338
+ return 0;
339
+ }
340
+ }
341
+ /**
342
+ * Initialize the skill system
343
+ */
344
+ export async function initSkills() {
345
+ console.log('[Skills] Initializing...');
346
+ // Load built-in skills (from src/skills/builtin)
347
+ await loadSkillsFromDir(getBuiltInSkillsDir(), false);
348
+ // Load bundled skills (shipped with npm package at .agents/skills)
349
+ const bundledSkillsDir = getBundledSkillsDir();
350
+ if (existsSync(bundledSkillsDir)) {
351
+ await loadSkillsFromDir(bundledSkillsDir, false); // no hot-reload for bundled
352
+ console.log(`[Skills] Loaded bundled skills from ${bundledSkillsDir}`);
353
+ }
354
+ // Load agent-installed skills (from 'skills' CLI at ~/.agents/skills)
355
+ const agentSkillsDir = getAgentSkillsDir();
356
+ await loadSkillsFromDir(agentSkillsDir, true);
357
+ // Load global user skills (at ~/.0xkobold/skills)
358
+ await loadSkillsFromDir(getGlobalSkillsDir(), true);
359
+ // Load local project skills (if they exist at ./skills)
360
+ const localSkillsDir = getLocalSkillsDir();
361
+ if (existsSync(localSkillsDir)) {
362
+ await loadSkillsFromDir(localSkillsDir, true);
363
+ }
364
+ console.log(`[Skills] Total skills loaded: ${skillRegistry.list().length}`);
365
+ }
366
+ /**
367
+ * Reload all skills
368
+ */
369
+ export async function reloadSkills() {
370
+ skillRegistry.clear();
371
+ skillRegistry.stopAllWatchers();
372
+ await initSkills();
373
+ }
374
+ /**
375
+ * Get skill registry
376
+ */
377
+ export function getSkillRegistry() {
378
+ return skillRegistry;
379
+ }
380
+ // Re-export
381
+ export { SkillRegistry };
382
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/skills/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAY,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAE1C,kCAAkC;AAClC,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpD,MAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAE9E,6CAA6C;AAC7C,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAE9E,0BAA0B;AAC1B,SAAS,kBAAkB;IACzB,2EAA2E;IAC3E,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB;IACxB,8DAA8D;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,+CAA+C;IAC/C,gEAAgE;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE/D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB;IAC1B,+BAA+B;IAC/B,IAAI,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACvC,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,+BAA+B;IAC/B,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,aAAa;IACT,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IACvC,QAAQ,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,KAAiB;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,+BAA+B;QAC/B,IAAI,CAAC,kBAAkB,EAAE;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;SACvB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,+BAA+B;YAC/B,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,MAA2B;QACjD,wBAAwB;QACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,MAAM,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED,2BAA2B;AAC3B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;AAEjD;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,sCAAsC;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,+DAA+D;YAC/D,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,CAAC;QAED,yCAAyC;QACzC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAgB,CAAC;QAEnD,0DAA0D;QAC1D,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,sCAAsC;YACtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtB,MAAM,GAAG,QAAQ,CAAC;oBAClB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,+CAA+C;QAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,UAAkB;IAC7D,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC5E,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,gBAAgB,CAAC;QAEhD,8BAA8B;QAC9B,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,UAAU,IAAI,EAAE,CAAC;QACzD,MAAM,IAAI,GAAI,IAAI,CAAC,IAAmC,IAAI,QAAQ,CAAC;QAEnE,8DAA8D;QAC9D,OAAO;YACL,IAAI;YACJ,WAAW;YACX,IAAI;YACJ,cAAc,EAAE;gBACd,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI;oBACJ,WAAW;oBACX,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,EAAE;wBACd,QAAQ,EAAE,EAAE;qBACb;iBACF;aACF;YACD,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,UAAU;oBAClB,IAAI;iBACL,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,GAAY;IAC3B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAElD,MAAM,KAAK,GAAG,GAA8B,CAAC;IAE7C,OAAO,CACL,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QACxC,KAAK,CAAC,cAAc,KAAK,IAAI;QAC7B,OAAQ,KAAK,CAAC,cAA0C,CAAC,IAAI,KAAK,QAAQ;QAC1E,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAc,CAAC;QACzD,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAAS,GAAG,IAAI;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/C,sBAAsB;IACtB,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,0CAA0C;IAC1C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,iDAAiD;QACjD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,IAAI,6BAA6B,QAAQ,GAAG,CAAC,CAAC;QAC3F,CAAC;QAED,aAAa,CAAC,QAAQ,CAAC;YACrB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK;YACL,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,IAAI,SAAS,EAAE,CAAC;QACd,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;IAC5D,kCAAkC;IAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/G,MAAM,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACzC,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,qCAAqC;gBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC3C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5B,MAAM,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;oBAChD,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,iDAAiD;IACjD,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtD,mEAAmE;IACnE,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,MAAM,iBAAiB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;QAC9E,OAAO,CAAC,GAAG,CAAC,uCAAuC,gBAAgB,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,sEAAsE;IACtE,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAE9C,kDAAkD;IAClD,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpD,wDAAwD;IACxD,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,aAAa,CAAC,KAAK,EAAE,CAAC;IACtB,aAAa,CAAC,eAAe,EAAE,CAAC;IAChC,MAAM,UAAU,EAAE,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Skill Types
3
+ *
4
+ * Core skill interface for the hot-reload skill system.
5
+ * Skills are plain .ts files that export a Skill object.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}