craftclose 0.1.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 (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/SKILL.md +139 -0
  4. package/craftclose.example.yml +84 -0
  5. package/dist/ai-analyzer.d.ts +96 -0
  6. package/dist/ai-analyzer.d.ts.map +1 -0
  7. package/dist/ai-analyzer.js +275 -0
  8. package/dist/ai-analyzer.js.map +1 -0
  9. package/dist/alerts/discord.d.ts +23 -0
  10. package/dist/alerts/discord.d.ts.map +1 -0
  11. package/dist/alerts/discord.js +95 -0
  12. package/dist/alerts/discord.js.map +1 -0
  13. package/dist/alerts/index.d.ts +5 -0
  14. package/dist/alerts/index.d.ts.map +1 -0
  15. package/dist/alerts/index.js +8 -0
  16. package/dist/alerts/index.js.map +1 -0
  17. package/dist/alerts/telegram.d.ts +25 -0
  18. package/dist/alerts/telegram.d.ts.map +1 -0
  19. package/dist/alerts/telegram.js +72 -0
  20. package/dist/alerts/telegram.js.map +1 -0
  21. package/dist/cli.d.ts +6 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +410 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/config.d.ts +10 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +36 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/connectors/index.d.ts +8 -0
  30. package/dist/connectors/index.d.ts.map +1 -0
  31. package/dist/connectors/index.js +14 -0
  32. package/dist/connectors/index.js.map +1 -0
  33. package/dist/connectors/parsers.d.ts +24 -0
  34. package/dist/connectors/parsers.d.ts.map +1 -0
  35. package/dist/connectors/parsers.js +64 -0
  36. package/dist/connectors/parsers.js.map +1 -0
  37. package/dist/connectors/pterodactyl.d.ts +90 -0
  38. package/dist/connectors/pterodactyl.d.ts.map +1 -0
  39. package/dist/connectors/pterodactyl.js +221 -0
  40. package/dist/connectors/pterodactyl.js.map +1 -0
  41. package/dist/connectors/rcon.d.ts +51 -0
  42. package/dist/connectors/rcon.d.ts.map +1 -0
  43. package/dist/connectors/rcon.js +95 -0
  44. package/dist/connectors/rcon.js.map +1 -0
  45. package/dist/connectors/ssh.d.ts +65 -0
  46. package/dist/connectors/ssh.d.ts.map +1 -0
  47. package/dist/connectors/ssh.js +273 -0
  48. package/dist/connectors/ssh.js.map +1 -0
  49. package/dist/craft-close-skill.d.ts +106 -0
  50. package/dist/craft-close-skill.d.ts.map +1 -0
  51. package/dist/craft-close-skill.js +604 -0
  52. package/dist/craft-close-skill.js.map +1 -0
  53. package/dist/history.d.ts +32 -0
  54. package/dist/history.d.ts.map +1 -0
  55. package/dist/history.js +194 -0
  56. package/dist/history.js.map +1 -0
  57. package/dist/index.d.ts +16 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +28 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/openclaw-entry.d.ts +29 -0
  62. package/dist/openclaw-entry.d.ts.map +1 -0
  63. package/dist/openclaw-entry.js +45 -0
  64. package/dist/openclaw-entry.js.map +1 -0
  65. package/dist/patterns/index.d.ts +32 -0
  66. package/dist/patterns/index.d.ts.map +1 -0
  67. package/dist/patterns/index.js +248 -0
  68. package/dist/patterns/index.js.map +1 -0
  69. package/dist/security/action-allowlist.d.ts +21 -0
  70. package/dist/security/action-allowlist.d.ts.map +1 -0
  71. package/dist/security/action-allowlist.js +54 -0
  72. package/dist/security/action-allowlist.js.map +1 -0
  73. package/dist/security/audit-log.d.ts +22 -0
  74. package/dist/security/audit-log.d.ts.map +1 -0
  75. package/dist/security/audit-log.js +49 -0
  76. package/dist/security/audit-log.js.map +1 -0
  77. package/dist/security/index.d.ts +10 -0
  78. package/dist/security/index.d.ts.map +1 -0
  79. package/dist/security/index.js +20 -0
  80. package/dist/security/index.js.map +1 -0
  81. package/dist/security/input-sanitizer.d.ts +32 -0
  82. package/dist/security/input-sanitizer.d.ts.map +1 -0
  83. package/dist/security/input-sanitizer.js +81 -0
  84. package/dist/security/input-sanitizer.js.map +1 -0
  85. package/dist/security/path-jail.d.ts +25 -0
  86. package/dist/security/path-jail.d.ts.map +1 -0
  87. package/dist/security/path-jail.js +73 -0
  88. package/dist/security/path-jail.js.map +1 -0
  89. package/dist/security/rcon-filter.d.ts +24 -0
  90. package/dist/security/rcon-filter.d.ts.map +1 -0
  91. package/dist/security/rcon-filter.js +76 -0
  92. package/dist/security/rcon-filter.js.map +1 -0
  93. package/dist/types.d.ts +154 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +6 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +74 -0
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Core types for CraftClose skill configuration and data.
3
+ */
4
+ /** SSH connection configuration */
5
+ export interface SshConfig {
6
+ user: string;
7
+ host?: string;
8
+ port?: number;
9
+ key?: string;
10
+ password?: string;
11
+ }
12
+ /** RCON connection configuration */
13
+ export interface RconConfig {
14
+ host?: string;
15
+ port: number;
16
+ password: string;
17
+ }
18
+ /** Pterodactyl panel configuration */
19
+ export interface PterodactylConfig {
20
+ panel_url: string;
21
+ api_key: string;
22
+ server_id: string;
23
+ }
24
+ /** Individual server configuration */
25
+ export interface ServerConfig {
26
+ name: string;
27
+ host: string;
28
+ port?: number;
29
+ type?: "paper" | "spigot" | "folia" | "purpur" | "fabric" | "forge" | "vanilla";
30
+ ssh?: SshConfig;
31
+ rcon?: RconConfig;
32
+ pterodactyl?: PterodactylConfig;
33
+ restart_command?: string;
34
+ log_path?: string;
35
+ }
36
+ /** Alert channel configurations */
37
+ export interface AlertConfig {
38
+ telegram?: {
39
+ bot_token: string;
40
+ chat_id: string;
41
+ };
42
+ discord?: {
43
+ webhook_url: string;
44
+ };
45
+ }
46
+ /** AI configuration (BYOK — user's own Gemini API key) */
47
+ export interface AiConfig {
48
+ /** User's own Gemini API key */
49
+ gemini_key?: string;
50
+ /** Gemini model to use */
51
+ model?: "gemini-2.5-flash" | "gemini-2.5-pro" | "gemini-3.1-flash" | "gemini-3.1-pro";
52
+ /** Max AI calls per hour (default: 10) */
53
+ max_calls_per_hour?: number;
54
+ }
55
+ /** Monitoring configuration */
56
+ export interface MonitoringConfig {
57
+ /** Check interval in seconds (default: 60) */
58
+ interval?: number;
59
+ /** Enable auto-restart on crash (default: true) */
60
+ auto_restart?: boolean;
61
+ /** Max restarts per 10 minutes before circuit break (default: 3) */
62
+ max_restarts?: number;
63
+ /** Enable TPS tracking history (default: true) */
64
+ track_tps?: boolean;
65
+ /** Enable player count tracking (default: true) */
66
+ track_players?: boolean;
67
+ }
68
+ /** Security configuration */
69
+ export interface SecurityConfig {
70
+ /** Require confirmation for destructive actions (default: true) */
71
+ confirm_destructive?: boolean;
72
+ /** Max log lines to read per request (default: 500) */
73
+ max_log_lines?: number;
74
+ /** Max backup size in GB (default: 10) */
75
+ max_backup_size_gb?: number;
76
+ /** Override default config file allowlist */
77
+ allowed_config_files?: string[];
78
+ /** Add extra blocked RCON commands */
79
+ blocked_rcon_commands?: string[];
80
+ }
81
+ /** Root CraftClose configuration */
82
+ export interface CraftCloseConfig {
83
+ servers: ServerConfig[];
84
+ alerts?: AlertConfig;
85
+ ai?: AiConfig;
86
+ monitoring?: MonitoringConfig;
87
+ security?: SecurityConfig;
88
+ }
89
+ /** Health check result for a single server */
90
+ export interface HealthCheckResult {
91
+ server: string;
92
+ timestamp: Date;
93
+ online: boolean;
94
+ cpu?: number;
95
+ ram?: {
96
+ used: number;
97
+ total: number;
98
+ percent: number;
99
+ };
100
+ disk?: {
101
+ used: number;
102
+ total: number;
103
+ percent: number;
104
+ };
105
+ tps?: number;
106
+ players?: {
107
+ online: number;
108
+ max: number;
109
+ list?: string[];
110
+ };
111
+ uptime?: string;
112
+ version?: string;
113
+ error?: string;
114
+ }
115
+ /** Crash detection event */
116
+ export interface CrashEvent {
117
+ server: string;
118
+ timestamp: Date;
119
+ type: "process_dead" | "tps_zero" | "oom" | "log_pattern" | "timeout";
120
+ severity: "critical" | "warning" | "info";
121
+ raw_log?: string;
122
+ pattern_match?: PatternMatch;
123
+ ai_analysis?: AiAnalysis;
124
+ }
125
+ /** Pattern library match result */
126
+ export interface PatternMatch {
127
+ pattern_id: string;
128
+ category: string;
129
+ title: string;
130
+ cause: string;
131
+ fix: string;
132
+ confidence: number;
133
+ }
134
+ /** AI analysis result */
135
+ export interface AiAnalysis {
136
+ root_cause: string;
137
+ severity: "critical" | "warning" | "info";
138
+ fix_suggestion: string;
139
+ confidence: number;
140
+ model: string;
141
+ cached: boolean;
142
+ }
143
+ /** Alert payload sent to Telegram/Discord */
144
+ export interface AlertPayload {
145
+ server: string;
146
+ event: "crash" | "restart" | "recovery" | "warning" | "info";
147
+ title: string;
148
+ description: string;
149
+ severity: "critical" | "warning" | "info" | "recovery";
150
+ timestamp: Date;
151
+ ai_analysis?: AiAnalysis;
152
+ pattern_match?: PatternMatch;
153
+ }
154
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Core types for CraftClose skill configuration and data.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "craftclose",
3
+ "version": "0.1.0",
4
+ "description": "AI-powered Minecraft server monitoring — crash detection, auto-restart, smart alerts",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "craftclose": "dist/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "lint": "eslint src/ --ext .ts",
14
+ "lint:fix": "eslint src/ --ext .ts --fix",
15
+ "format": "prettier --write 'src/**/*.ts'",
16
+ "test": "vitest run",
17
+ "test:watch": "vitest",
18
+ "test:patterns": "vitest run tests/patterns",
19
+ "clean": "rm -rf dist",
20
+ "prepublishOnly": "npm run build && npm test"
21
+ },
22
+ "files": [
23
+ "dist/",
24
+ "craftclose.example.yml",
25
+ "SKILL.md",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "keywords": [
30
+ "openclaw",
31
+ "openclaw-skill",
32
+ "minecraft",
33
+ "server-monitoring",
34
+ "ai",
35
+ "gemini",
36
+ "crash-detection",
37
+ "auto-restart",
38
+ "pterodactyl",
39
+ "devops",
40
+ "gameserver"
41
+ ],
42
+ "author": {
43
+ "name": "LaunchDay Studio",
44
+ "email": "info@launchdaystudio.com",
45
+ "url": "https://launchdaystudio.com"
46
+ },
47
+ "license": "MIT",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/LaunchDay-Studio-Inc/craftclose.git"
51
+ },
52
+ "homepage": "https://craftclose.dev",
53
+ "bugs": {
54
+ "url": "https://github.com/LaunchDay-Studio-Inc/craftclose/issues"
55
+ },
56
+ "engines": {
57
+ "node": ">=20.0.0"
58
+ },
59
+ "dependencies": {
60
+ "better-sqlite3": "^11.8.0",
61
+ "rcon-client": "^4.2.4",
62
+ "ssh2": "^1.16.0",
63
+ "yaml": "^2.7.0"
64
+ },
65
+ "devDependencies": {
66
+ "@types/better-sqlite3": "^7.6.0",
67
+ "@types/node": "^25.5.0",
68
+ "@types/ssh2": "^1.15.0",
69
+ "eslint": "^9.0.0",
70
+ "prettier": "^3.5.0",
71
+ "typescript": "^5.7.0",
72
+ "vitest": "^3.0.0"
73
+ }
74
+ }