@houtini/lm 1.0.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 (260) hide show
  1. package/CHANGELOG.md +273 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -0
  4. package/dist/cache/analysis-cache.d.ts +33 -0
  5. package/dist/cache/analysis-cache.d.ts.map +1 -0
  6. package/dist/cache/analysis-cache.js +56 -0
  7. package/dist/cache/analysis-cache.js.map +1 -0
  8. package/dist/cache/cache-manager.d.ts +29 -0
  9. package/dist/cache/cache-manager.d.ts.map +1 -0
  10. package/dist/cache/cache-manager.js +85 -0
  11. package/dist/cache/cache-manager.js.map +1 -0
  12. package/dist/cache/index.d.ts +16 -0
  13. package/dist/cache/index.d.ts.map +1 -0
  14. package/dist/cache/index.js +17 -0
  15. package/dist/cache/index.js.map +1 -0
  16. package/dist/cache/prompt-cache.d.ts +33 -0
  17. package/dist/cache/prompt-cache.d.ts.map +1 -0
  18. package/dist/cache/prompt-cache.js +61 -0
  19. package/dist/cache/prompt-cache.js.map +1 -0
  20. package/dist/config.d.ts +43 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +70 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/core/ThreeStagePromptManager.d.ts +39 -0
  25. package/dist/core/ThreeStagePromptManager.d.ts.map +1 -0
  26. package/dist/core/ThreeStagePromptManager.js +176 -0
  27. package/dist/core/ThreeStagePromptManager.js.map +1 -0
  28. package/dist/index.d.ts +6 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +230 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/plugins/base-plugin.d.ts +47 -0
  33. package/dist/plugins/base-plugin.d.ts.map +1 -0
  34. package/dist/plugins/base-plugin.js +90 -0
  35. package/dist/plugins/base-plugin.js.map +1 -0
  36. package/dist/plugins/index.d.ts +58 -0
  37. package/dist/plugins/index.d.ts.map +1 -0
  38. package/dist/plugins/index.js +161 -0
  39. package/dist/plugins/index.js.map +1 -0
  40. package/dist/plugins/types.d.ts +5 -0
  41. package/dist/plugins/types.d.ts.map +1 -0
  42. package/dist/plugins/types.js +5 -0
  43. package/dist/plugins/types.js.map +1 -0
  44. package/dist/prompts/analyze/code-quality.d.ts +116 -0
  45. package/dist/prompts/analyze/code-quality.d.ts.map +1 -0
  46. package/dist/prompts/analyze/code-quality.js +433 -0
  47. package/dist/prompts/analyze/code-quality.js.map +1 -0
  48. package/dist/prompts/analyze/compare-integration.d.ts +130 -0
  49. package/dist/prompts/analyze/compare-integration.d.ts.map +1 -0
  50. package/dist/prompts/analyze/compare-integration.js +543 -0
  51. package/dist/prompts/analyze/compare-integration.js.map +1 -0
  52. package/dist/prompts/analyze/count-files.d.ts +109 -0
  53. package/dist/prompts/analyze/count-files.d.ts.map +1 -0
  54. package/dist/prompts/analyze/count-files.js +399 -0
  55. package/dist/prompts/analyze/count-files.js.map +1 -0
  56. package/dist/prompts/analyze/database-queries.d.ts +156 -0
  57. package/dist/prompts/analyze/database-queries.d.ts.map +1 -0
  58. package/dist/prompts/analyze/database-queries.js +759 -0
  59. package/dist/prompts/analyze/database-queries.js.map +1 -0
  60. package/dist/prompts/analyze/dependencies.d.ts +97 -0
  61. package/dist/prompts/analyze/dependencies.d.ts.map +1 -0
  62. package/dist/prompts/analyze/dependencies.js +333 -0
  63. package/dist/prompts/analyze/dependencies.js.map +1 -0
  64. package/dist/prompts/analyze/diff-signatures.d.ts +139 -0
  65. package/dist/prompts/analyze/diff-signatures.d.ts.map +1 -0
  66. package/dist/prompts/analyze/diff-signatures.js +702 -0
  67. package/dist/prompts/analyze/diff-signatures.js.map +1 -0
  68. package/dist/prompts/analyze/find-patterns.d.ts +128 -0
  69. package/dist/prompts/analyze/find-patterns.d.ts.map +1 -0
  70. package/dist/prompts/analyze/find-patterns.js +520 -0
  71. package/dist/prompts/analyze/find-patterns.js.map +1 -0
  72. package/dist/prompts/analyze/find-unused-css.d.ts +151 -0
  73. package/dist/prompts/analyze/find-unused-css.d.ts.map +1 -0
  74. package/dist/prompts/analyze/find-unused-css.js +754 -0
  75. package/dist/prompts/analyze/find-unused-css.js.map +1 -0
  76. package/dist/prompts/analyze/n8n-workflow.d.ts +137 -0
  77. package/dist/prompts/analyze/n8n-workflow.d.ts.map +1 -0
  78. package/dist/prompts/analyze/n8n-workflow.js +529 -0
  79. package/dist/prompts/analyze/n8n-workflow.js.map +1 -0
  80. package/dist/prompts/analyze/project-structure.d.ts +126 -0
  81. package/dist/prompts/analyze/project-structure.d.ts.map +1 -0
  82. package/dist/prompts/analyze/project-structure.js +569 -0
  83. package/dist/prompts/analyze/project-structure.js.map +1 -0
  84. package/dist/prompts/analyze/security-audit.d.ts +142 -0
  85. package/dist/prompts/analyze/security-audit.d.ts.map +1 -0
  86. package/dist/prompts/analyze/security-audit.js +637 -0
  87. package/dist/prompts/analyze/security-audit.js.map +1 -0
  88. package/dist/prompts/analyze/single-file.d.ts +162 -0
  89. package/dist/prompts/analyze/single-file.d.ts.map +1 -0
  90. package/dist/prompts/analyze/single-file.js +665 -0
  91. package/dist/prompts/analyze/single-file.js.map +1 -0
  92. package/dist/prompts/analyze/trace-execution.d.ts +126 -0
  93. package/dist/prompts/analyze/trace-execution.d.ts.map +1 -0
  94. package/dist/prompts/analyze/trace-execution.js +609 -0
  95. package/dist/prompts/analyze/trace-execution.js.map +1 -0
  96. package/dist/prompts/analyze/wordpress-plugin-audit.d.ts +116 -0
  97. package/dist/prompts/analyze/wordpress-plugin-audit.d.ts.map +1 -0
  98. package/dist/prompts/analyze/wordpress-plugin-audit.js +454 -0
  99. package/dist/prompts/analyze/wordpress-plugin-audit.js.map +1 -0
  100. package/dist/prompts/analyze/wordpress-security.d.ts +146 -0
  101. package/dist/prompts/analyze/wordpress-security.d.ts.map +1 -0
  102. package/dist/prompts/analyze/wordpress-security.js +698 -0
  103. package/dist/prompts/analyze/wordpress-security.js.map +1 -0
  104. package/dist/prompts/analyze/wordpress-theme-audit.d.ts +114 -0
  105. package/dist/prompts/analyze/wordpress-theme-audit.d.ts.map +1 -0
  106. package/dist/prompts/analyze/wordpress-theme-audit.js +538 -0
  107. package/dist/prompts/analyze/wordpress-theme-audit.js.map +1 -0
  108. package/dist/prompts/custom/custom-prompt.d.ts +135 -0
  109. package/dist/prompts/custom/custom-prompt.d.ts.map +1 -0
  110. package/dist/prompts/custom/custom-prompt.js +419 -0
  111. package/dist/prompts/custom/custom-prompt.js.map +1 -0
  112. package/dist/prompts/fun/arcade-game.d.ts +152 -0
  113. package/dist/prompts/fun/arcade-game.d.ts.map +1 -0
  114. package/dist/prompts/fun/arcade-game.js +653 -0
  115. package/dist/prompts/fun/arcade-game.js.map +1 -0
  116. package/dist/prompts/fun/create_text_adventure.d.ts +100 -0
  117. package/dist/prompts/fun/create_text_adventure.d.ts.map +1 -0
  118. package/dist/prompts/fun/create_text_adventure.js +397 -0
  119. package/dist/prompts/fun/create_text_adventure.js.map +1 -0
  120. package/dist/prompts/fun/css-art-generator.d.ts +168 -0
  121. package/dist/prompts/fun/css-art-generator.d.ts.map +1 -0
  122. package/dist/prompts/fun/css-art-generator.js +827 -0
  123. package/dist/prompts/fun/css-art-generator.js.map +1 -0
  124. package/dist/prompts/generate/project-documentation.d.ts +137 -0
  125. package/dist/prompts/generate/project-documentation.d.ts.map +1 -0
  126. package/dist/prompts/generate/project-documentation.js +666 -0
  127. package/dist/prompts/generate/project-documentation.js.map +1 -0
  128. package/dist/prompts/generate/refactoring.d.ts +164 -0
  129. package/dist/prompts/generate/refactoring.d.ts.map +1 -0
  130. package/dist/prompts/generate/refactoring.js +621 -0
  131. package/dist/prompts/generate/refactoring.js.map +1 -0
  132. package/dist/prompts/generate/responsive-component.d.ts +147 -0
  133. package/dist/prompts/generate/responsive-component.d.ts.map +1 -0
  134. package/dist/prompts/generate/responsive-component.js +955 -0
  135. package/dist/prompts/generate/responsive-component.js.map +1 -0
  136. package/dist/prompts/generate/typescript-conversion.d.ts +144 -0
  137. package/dist/prompts/generate/typescript-conversion.d.ts.map +1 -0
  138. package/dist/prompts/generate/typescript-conversion.js +527 -0
  139. package/dist/prompts/generate/typescript-conversion.js.map +1 -0
  140. package/dist/prompts/generate/unit-tests.d.ts +139 -0
  141. package/dist/prompts/generate/unit-tests.d.ts.map +1 -0
  142. package/dist/prompts/generate/unit-tests.js +578 -0
  143. package/dist/prompts/generate/unit-tests.js.map +1 -0
  144. package/dist/prompts/generate/wordpress-plugin.d.ts +179 -0
  145. package/dist/prompts/generate/wordpress-plugin.d.ts.map +1 -0
  146. package/dist/prompts/generate/wordpress-plugin.js +763 -0
  147. package/dist/prompts/generate/wordpress-plugin.js.map +1 -0
  148. package/dist/prompts/generate/wordpress-theme-from-static.d.ts +177 -0
  149. package/dist/prompts/generate/wordpress-theme-from-static.d.ts.map +1 -0
  150. package/dist/prompts/generate/wordpress-theme-from-static.js +695 -0
  151. package/dist/prompts/generate/wordpress-theme-from-static.js.map +1 -0
  152. package/dist/prompts/shared/cache-manager.d.ts +45 -0
  153. package/dist/prompts/shared/cache-manager.d.ts.map +1 -0
  154. package/dist/prompts/shared/cache-manager.js +129 -0
  155. package/dist/prompts/shared/cache-manager.js.map +1 -0
  156. package/dist/prompts/shared/helpers.d.ts +39 -0
  157. package/dist/prompts/shared/helpers.d.ts.map +1 -0
  158. package/dist/prompts/shared/helpers.js +151 -0
  159. package/dist/prompts/shared/helpers.js.map +1 -0
  160. package/dist/prompts/shared/templates.d.ts +35 -0
  161. package/dist/prompts/shared/templates.d.ts.map +1 -0
  162. package/dist/prompts/shared/templates.js +77 -0
  163. package/dist/prompts/shared/templates.js.map +1 -0
  164. package/dist/prompts/shared/types.d.ts +112 -0
  165. package/dist/prompts/shared/types.d.ts.map +1 -0
  166. package/dist/prompts/shared/types.js +5 -0
  167. package/dist/prompts/shared/types.js.map +1 -0
  168. package/dist/prompts/system/find-unused-files.d.ts +106 -0
  169. package/dist/prompts/system/find-unused-files.d.ts.map +1 -0
  170. package/dist/prompts/system/find-unused-files.js +353 -0
  171. package/dist/prompts/system/find-unused-files.js.map +1 -0
  172. package/dist/security/index.d.ts +39 -0
  173. package/dist/security/index.d.ts.map +1 -0
  174. package/dist/security/index.js +46 -0
  175. package/dist/security/index.js.map +1 -0
  176. package/dist/security/integration-helpers.d.ts +121 -0
  177. package/dist/security/integration-helpers.d.ts.map +1 -0
  178. package/dist/security/integration-helpers.js +190 -0
  179. package/dist/security/integration-helpers.js.map +1 -0
  180. package/dist/security/output-encoder.d.ts +94 -0
  181. package/dist/security/output-encoder.d.ts.map +1 -0
  182. package/dist/security/output-encoder.js +295 -0
  183. package/dist/security/output-encoder.js.map +1 -0
  184. package/dist/security/prompt-injection-guard.d.ts +59 -0
  185. package/dist/security/prompt-injection-guard.d.ts.map +1 -0
  186. package/dist/security/prompt-injection-guard.js +249 -0
  187. package/dist/security/prompt-injection-guard.js.map +1 -0
  188. package/dist/security/sanitisation.d.ts +67 -0
  189. package/dist/security/sanitisation.d.ts.map +1 -0
  190. package/dist/security/sanitisation.js +398 -0
  191. package/dist/security/sanitisation.js.map +1 -0
  192. package/dist/security/security-service.d.ts +103 -0
  193. package/dist/security/security-service.d.ts.map +1 -0
  194. package/dist/security/security-service.js +303 -0
  195. package/dist/security/security-service.js.map +1 -0
  196. package/dist/security-config.d.ts +45 -0
  197. package/dist/security-config.d.ts.map +1 -0
  198. package/dist/security-config.js +63 -0
  199. package/dist/security-config.js.map +1 -0
  200. package/dist/system/function-list.d.ts +61 -0
  201. package/dist/system/function-list.d.ts.map +1 -0
  202. package/dist/system/function-list.js +111 -0
  203. package/dist/system/function-list.js.map +1 -0
  204. package/dist/system/function-registry.d.ts +23 -0
  205. package/dist/system/function-registry.d.ts.map +1 -0
  206. package/dist/system/function-registry.js +136 -0
  207. package/dist/system/function-registry.js.map +1 -0
  208. package/dist/system/health-check.d.ts +33 -0
  209. package/dist/system/health-check.d.ts.map +1 -0
  210. package/dist/system/health-check.js +98 -0
  211. package/dist/system/health-check.js.map +1 -0
  212. package/dist/system/path-resolver.d.ts +55 -0
  213. package/dist/system/path-resolver.d.ts.map +1 -0
  214. package/dist/system/path-resolver.js +90 -0
  215. package/dist/system/path-resolver.js.map +1 -0
  216. package/dist/templates/plugin-template.d.ts +121 -0
  217. package/dist/templates/plugin-template.d.ts.map +1 -0
  218. package/dist/templates/plugin-template.js +450 -0
  219. package/dist/templates/plugin-template.js.map +1 -0
  220. package/dist/types/chunking-types.d.ts +88 -0
  221. package/dist/types/chunking-types.d.ts.map +1 -0
  222. package/dist/types/chunking-types.js +18 -0
  223. package/dist/types/chunking-types.js.map +1 -0
  224. package/dist/types/prompt-stages.d.ts +42 -0
  225. package/dist/types/prompt-stages.d.ts.map +1 -0
  226. package/dist/types/prompt-stages.js +6 -0
  227. package/dist/types/prompt-stages.js.map +1 -0
  228. package/dist/types.d.ts +46 -0
  229. package/dist/types.d.ts.map +1 -0
  230. package/dist/types.js +6 -0
  231. package/dist/types.js.map +1 -0
  232. package/dist/utils/css-parser.d.ts +26 -0
  233. package/dist/utils/css-parser.d.ts.map +1 -0
  234. package/dist/utils/css-parser.js +117 -0
  235. package/dist/utils/css-parser.js.map +1 -0
  236. package/dist/utils/path-resolver.d.ts +13 -0
  237. package/dist/utils/path-resolver.d.ts.map +1 -0
  238. package/dist/utils/path-resolver.js +78 -0
  239. package/dist/utils/path-resolver.js.map +1 -0
  240. package/dist/utils/plugin-utilities.d.ts +171 -0
  241. package/dist/utils/plugin-utilities.d.ts.map +1 -0
  242. package/dist/utils/plugin-utilities.js +221 -0
  243. package/dist/utils/plugin-utilities.js.map +1 -0
  244. package/dist/utils/streamHandler.d.ts +3 -0
  245. package/dist/utils/streamHandler.d.ts.map +1 -0
  246. package/dist/utils/streamHandler.js +137 -0
  247. package/dist/utils/streamHandler.js.map +1 -0
  248. package/dist/validation/output-validator.d.ts +136 -0
  249. package/dist/validation/output-validator.d.ts.map +1 -0
  250. package/dist/validation/output-validator.js +262 -0
  251. package/dist/validation/output-validator.js.map +1 -0
  252. package/dist/validation/response-factory.d.ts +44 -0
  253. package/dist/validation/response-factory.d.ts.map +1 -0
  254. package/dist/validation/response-factory.js +202 -0
  255. package/dist/validation/response-factory.js.map +1 -0
  256. package/dist/validation/schemas.d.ts +519 -0
  257. package/dist/validation/schemas.d.ts.map +1 -0
  258. package/dist/validation/schemas.js +6 -0
  259. package/dist/validation/schemas.js.map +1 -0
  260. package/package.json +72 -0
@@ -0,0 +1,136 @@
1
+ import { readdirSync, readFileSync } from 'fs';
2
+ import { join, basename, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ // ES module equivalent of __dirname
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ /**
8
+ * Discover all available Houtini LM functions by scanning prompt directories
9
+ */
10
+ export async function discoverAvailableFunctions() {
11
+ const functions = [];
12
+ const promptsDir = join(__dirname, '../prompts');
13
+ // Known prompt categories
14
+ const categories = ['analyze', 'generate', 'system', 'custom', 'fun'];
15
+ for (const category of categories) {
16
+ const categoryPath = join(promptsDir, category);
17
+ try {
18
+ const files = readdirSync(categoryPath);
19
+ for (const file of files) {
20
+ if (file.endsWith('.js') && !file.includes('legacy') && !file.includes('.d.ts')) {
21
+ try {
22
+ const functionInfo = await extractFunctionInfo(categoryPath, file, category);
23
+ if (functionInfo) {
24
+ functions.push(functionInfo);
25
+ }
26
+ }
27
+ catch (error) {
28
+ // Skip files that can't be analyzed
29
+ console.warn(`Could not analyze ${file}:`, error.message);
30
+ }
31
+ }
32
+ }
33
+ }
34
+ catch (error) {
35
+ // Category directory doesn't exist or can't be read, skip
36
+ console.warn(`Could not read category ${category}:`, error.message);
37
+ }
38
+ }
39
+ return functions.sort((a, b) => a.name.localeCompare(b.name));
40
+ }
41
+ /**
42
+ * Extract function information from a compiled plugin file
43
+ */
44
+ async function extractFunctionInfo(categoryPath, file, category) {
45
+ const filePath = join(categoryPath, file);
46
+ try {
47
+ const content = readFileSync(filePath, 'utf8');
48
+ // Extract function name (look for name = 'function_name' pattern)
49
+ const nameMatch = content.match(/name\s*=\s*['"']([^'"]+)['"']/);
50
+ const functionName = nameMatch ? nameMatch[1] : basename(file, '.js').replace(/-/g, '_');
51
+ // Extract description (look for description = 'text' pattern)
52
+ const descMatch = content.match(/description\s*=\s*['"']([^'"]+)['"']/);
53
+ const description = descMatch ? descMatch[1] : `${category} function`;
54
+ // Detect supported modes by looking for mode detection logic
55
+ const supportedModes = detectSupportedModes(content);
56
+ const primaryMode = determinePrimaryMode(content, category);
57
+ // Generate example usage
58
+ const exampleUsage = generateExampleUsage(functionName, supportedModes);
59
+ return {
60
+ name: functionName,
61
+ category,
62
+ file,
63
+ description,
64
+ supportedModes,
65
+ primaryMode,
66
+ exampleUsage
67
+ };
68
+ }
69
+ catch (error) {
70
+ console.warn(`Error reading ${file}:`, error.message);
71
+ return null;
72
+ }
73
+ }
74
+ /**
75
+ * Detect which modes a function supports by analyzing its code
76
+ */
77
+ function detectSupportedModes(content) {
78
+ const modes = [];
79
+ // Check for single-file support
80
+ if (content.includes('getSingleFile') || content.includes("'single-file'") || content.includes('params.code') || content.includes('params.filePath')) {
81
+ modes.push('single-file');
82
+ }
83
+ // Check for multi-file support
84
+ if (content.includes('getMultiFile') || content.includes("'multi-file'") || content.includes('params.projectPath') || content.includes('params.files')) {
85
+ modes.push('multi-file');
86
+ }
87
+ // Default if we can't detect
88
+ if (modes.length === 0) {
89
+ modes.push('single-file'); // Conservative default
90
+ }
91
+ return modes;
92
+ }
93
+ /**
94
+ * Determine the primary mode based on function purpose and defaults
95
+ */
96
+ function determinePrimaryMode(content, category) {
97
+ // Look for explicit default return in detectAnalysisMode
98
+ const defaultMatch = content.match(/return\s+['"'](single-file|multi-file)['"'];?\s*$/m);
99
+ if (defaultMatch) {
100
+ return defaultMatch[1];
101
+ }
102
+ // Category-based heuristics
103
+ if (category === 'system') {
104
+ return 'multi-file'; // System functions typically work on projects
105
+ }
106
+ if (category === 'generate') {
107
+ return 'single-file'; // Generation typically creates single items
108
+ }
109
+ // Default fallback
110
+ return 'single-file';
111
+ }
112
+ /**
113
+ * Generate helpful example usage for different modes
114
+ */
115
+ function generateExampleUsage(functionName, supportedModes) {
116
+ const examples = {};
117
+ if (supportedModes.includes('single-file')) {
118
+ examples.singleFile = `houtini-lm:${functionName} filePath="C:/project/src/file.ts"`;
119
+ }
120
+ if (supportedModes.includes('multi-file')) {
121
+ examples.multiFile = `houtini-lm:${functionName} projectPath="C:/project/src"`;
122
+ }
123
+ return examples;
124
+ }
125
+ /**
126
+ * Get function categories with counts
127
+ */
128
+ export async function getFunctionCategories() {
129
+ const functions = await discoverAvailableFunctions();
130
+ const categories = {};
131
+ functions.forEach(func => {
132
+ categories[func.category] = (categories[func.category] || 0) + 1;
133
+ });
134
+ return categories;
135
+ }
136
+ //# sourceMappingURL=function-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-registry.js","sourceRoot":"","sources":["../../src/system/function-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Health Check Plugin - Modern v4.2 Pattern
3
+ * Checks if LM Studio is running and responding
4
+ */
5
+ import { BasePlugin } from '../plugins/base-plugin.js';
6
+ import { IPromptPlugin } from '../prompts/shared/types.js';
7
+ import { PromptStages } from '../types/prompt-stages.js';
8
+ export declare class HealthCheckPlugin extends BasePlugin implements IPromptPlugin {
9
+ name: string;
10
+ category: "system";
11
+ description: string;
12
+ parameters: {
13
+ detailed: {
14
+ type: "boolean";
15
+ description: string;
16
+ default: boolean;
17
+ required: boolean;
18
+ };
19
+ };
20
+ execute(params: any, llmClient: any): Promise<import("../validation/schemas.js").HealthCheckResponse>;
21
+ /**
22
+ * MODERN v4.2: 3-stage prompt architecture
23
+ * Note: Health check is a system utility that doesn't use prompts
24
+ */
25
+ getPromptStages(params: any): PromptStages;
26
+ /**
27
+ * LEGACY: Backwards compatibility
28
+ * DEPRECATED: Will be removed in v5.0
29
+ */
30
+ getPrompt(params: any): string;
31
+ }
32
+ export default HealthCheckPlugin;
33
+ //# sourceMappingURL=health-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/system/health-check.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,qBAAa,iBAAkB,SAAQ,UAAW,YAAW,aAAa;IACxE,IAAI,SAAkB;IACtB,QAAQ,EAAG,QAAQ,CAAU;IAC7B,WAAW,SAAkD;IAE7D,UAAU;;;;;;;MAOR;IAEI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG;IAkEzC;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY;IAQ1C;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM;CAI/B;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Health Check Plugin - Modern v4.2 Pattern
3
+ * Checks if LM Studio is running and responding
4
+ */
5
+ import { BasePlugin } from '../plugins/base-plugin.js';
6
+ import { ResponseFactory } from '../validation/response-factory.js';
7
+ import { withSecurity } from '../security/integration-helpers.js';
8
+ import { LMStudioClient } from '@lmstudio/sdk';
9
+ import { config } from '../config.js';
10
+ export class HealthCheckPlugin extends BasePlugin {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.name = 'health_check';
14
+ this.category = 'system';
15
+ this.description = 'Check if LM Studio is running and responding';
16
+ this.parameters = {
17
+ detailed: {
18
+ type: 'boolean',
19
+ description: 'Include detailed information about the loaded model and server status',
20
+ default: false,
21
+ required: false
22
+ }
23
+ };
24
+ }
25
+ async execute(params, llmClient) {
26
+ return await withSecurity(this, params, llmClient, async (secureParams) => {
27
+ try {
28
+ const client = new LMStudioClient({
29
+ baseUrl: config.lmStudioUrl || 'ws://localhost:1234',
30
+ });
31
+ // Try to connect and get basic info
32
+ const models = await client.llm.listLoaded();
33
+ // Get context length from the active model if available
34
+ let contextLength = undefined;
35
+ if (models.length > 0) {
36
+ try {
37
+ const activeModel = models[0];
38
+ // Try to get context length using LM Studio SDK
39
+ contextLength = await activeModel.getContextLength();
40
+ }
41
+ catch (error) {
42
+ // If getContextLength fails, try alternative method or leave undefined
43
+ console.warn('Could not retrieve context length from model:', error);
44
+ }
45
+ }
46
+ // Use ResponseFactory for consistent, spec-compliant output
47
+ ResponseFactory.setStartTime();
48
+ return ResponseFactory.createHealthCheckResponse('healthy', 'established', config.lmStudioUrl || 'ws://localhost:1234', undefined, undefined, secureParams.detailed ? {
49
+ loadedModels: models.map(model => ({
50
+ path: model.path,
51
+ identifier: model.identifier,
52
+ architecture: model.architecture || 'unknown',
53
+ contextLength: contextLength // Will be the same for all models since we only check the first one
54
+ })),
55
+ modelCount: models.length,
56
+ hasActiveModel: models.length > 0,
57
+ contextLength: contextLength, // Add context length to response
58
+ serverInfo: {
59
+ url: config.lmStudioUrl,
60
+ protocol: 'websocket'
61
+ },
62
+ activeModel: models.length > 0 ? {
63
+ path: models[0].path,
64
+ identifier: models[0].identifier,
65
+ architecture: models[0].architecture || 'unknown',
66
+ contextLength: contextLength // Add context length to active model
67
+ } : undefined
68
+ } : undefined, // Don't provide details in non-detailed mode
69
+ contextLength // Pass contextLength as separate parameter
70
+ );
71
+ }
72
+ catch (error) {
73
+ return ResponseFactory.createHealthCheckResponse('unhealthy', 'failed', config.lmStudioUrl || 'ws://localhost:1234', error.message || 'Failed to connect to LM Studio', 'Please ensure LM Studio is running and a model is loaded');
74
+ }
75
+ });
76
+ }
77
+ /**
78
+ * MODERN v4.2: 3-stage prompt architecture
79
+ * Note: Health check is a system utility that doesn't use prompts
80
+ */
81
+ getPromptStages(params) {
82
+ return {
83
+ systemAndContext: 'Health check system utility - no prompt required',
84
+ dataPayload: 'Checking LM Studio connection and model status',
85
+ outputInstructions: 'Return connection status and model information'
86
+ };
87
+ }
88
+ /**
89
+ * LEGACY: Backwards compatibility
90
+ * DEPRECATED: Will be removed in v5.0
91
+ */
92
+ getPrompt(params) {
93
+ // Health check is a utility function, no prompt needed
94
+ return 'Health check - no prompt required for system utilities';
95
+ }
96
+ }
97
+ export default HealthCheckPlugin;
98
+ //# sourceMappingURL=health-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/system/health-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Path Resolution Plugin - Smart path analysis for MCP usage
3
+ * Helps users understand file vs directory paths and suggests correct parameters
4
+ */
5
+ import { BasePlugin } from '../plugins/base-plugin.js';
6
+ import { IPromptPlugin } from '../prompts/shared/types.js';
7
+ export declare class PathResolverPlugin extends BasePlugin implements IPromptPlugin {
8
+ name: string;
9
+ category: "system";
10
+ description: string;
11
+ parameters: {
12
+ path: {
13
+ type: "string";
14
+ description: string;
15
+ required: boolean;
16
+ };
17
+ suggestions: {
18
+ type: "boolean";
19
+ description: string;
20
+ default: boolean;
21
+ required: boolean;
22
+ };
23
+ };
24
+ execute(params: any, llmClient: any): Promise<{
25
+ success: boolean;
26
+ timestamp: string;
27
+ modelUsed: string;
28
+ executionTimeMs: number;
29
+ data: {
30
+ content: any;
31
+ metadata: {
32
+ functionName: string;
33
+ parsedAt: string;
34
+ responseLength: number;
35
+ };
36
+ };
37
+ error?: undefined;
38
+ } | {
39
+ success: boolean;
40
+ timestamp: string;
41
+ modelUsed: string;
42
+ executionTimeMs: number;
43
+ error: {
44
+ code: string;
45
+ message: any;
46
+ details: {
47
+ originalError: any;
48
+ };
49
+ };
50
+ data?: undefined;
51
+ }>;
52
+ getPromptStages(params: any): any;
53
+ }
54
+ export default PathResolverPlugin;
55
+ //# sourceMappingURL=path-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-resolver.d.ts","sourceRoot":"","sources":["../../src/system/path-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D,qBAAa,kBAAmB,SAAQ,UAAW,YAAW,aAAa;IACzE,IAAI,SAAkB;IACtB,QAAQ,EAAG,QAAQ,CAAU;IAC7B,WAAW,SAAmE;IAE9E,UAAU;;;;;;;;;;;;MAYR;IAEI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwDzC,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG;CAOlC;AAGD,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Path Resolution Plugin - Smart path analysis for MCP usage
3
+ * Helps users understand file vs directory paths and suggests correct parameters
4
+ */
5
+ import { BasePlugin } from '../plugins/base-plugin.js';
6
+ import { withSecurity } from '../security/integration-helpers.js';
7
+ import { analyzePathForMCP } from '../utils/path-resolver.js';
8
+ export class PathResolverPlugin extends BasePlugin {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.name = 'resolve_path';
12
+ this.category = 'system';
13
+ this.description = 'Analyze a file system path and suggest correct MCP parameters';
14
+ this.parameters = {
15
+ path: {
16
+ type: 'string',
17
+ description: 'File system path to analyze (file or directory)',
18
+ required: true
19
+ },
20
+ suggestions: {
21
+ type: 'boolean',
22
+ description: 'Include parameter suggestions and usage examples',
23
+ default: true,
24
+ required: false
25
+ }
26
+ };
27
+ }
28
+ async execute(params, llmClient) {
29
+ return await withSecurity(this, params, llmClient, async (secureParams) => {
30
+ try {
31
+ const pathAnalysis = await analyzePathForMCP(secureParams.path);
32
+ const result = {
33
+ path: secureParams.path,
34
+ analysis: pathAnalysis,
35
+ timestamp: new Date().toISOString()
36
+ };
37
+ // Add usage suggestions if requested
38
+ if (secureParams.suggestions !== false) {
39
+ result.suggestions = {
40
+ recommendedParameter: pathAnalysis.suggestedParameter,
41
+ exampleUsage: pathAnalysis.type === 'directory'
42
+ ? `houtini-lm:count_files projectPath="${secureParams.path}"`
43
+ : `houtini-lm:analyze_single_file filePath="${secureParams.path}"`,
44
+ alternativeUsage: pathAnalysis.type === 'directory'
45
+ ? `houtini-lm:security_audit projectPath="${secureParams.path}"`
46
+ : `houtini-lm:generate_unit_tests filePath="${secureParams.path}"`
47
+ };
48
+ }
49
+ return {
50
+ success: true,
51
+ timestamp: new Date().toISOString(),
52
+ modelUsed: 'system-utility',
53
+ executionTimeMs: 0,
54
+ data: {
55
+ content: result,
56
+ metadata: {
57
+ functionName: 'resolve_path',
58
+ parsedAt: new Date().toISOString(),
59
+ responseLength: JSON.stringify(result).length
60
+ }
61
+ }
62
+ };
63
+ }
64
+ catch (error) {
65
+ return {
66
+ success: false,
67
+ timestamp: new Date().toISOString(),
68
+ modelUsed: 'system-utility',
69
+ executionTimeMs: 0,
70
+ error: {
71
+ code: 'PATH_RESOLUTION_ERROR',
72
+ message: error.message || 'Failed to analyze path',
73
+ details: { originalError: error.message }
74
+ }
75
+ };
76
+ }
77
+ });
78
+ }
79
+ // Not used for system functions, but required by interface
80
+ getPromptStages(params) {
81
+ return {
82
+ systemAndContext: 'Path resolution system function',
83
+ dataPayload: `Path: ${params.path}`,
84
+ outputInstructions: 'Return path analysis and suggestions'
85
+ };
86
+ }
87
+ }
88
+ // Export as default for plugin loader
89
+ export default PathResolverPlugin;
90
+ //# sourceMappingURL=path-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-resolver.js","sourceRoot":"","sources":["../../src/system/path-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Plugin Template - Modern v4.2 (Single Source of Truth)
3
+ *
4
+ * Universal template that intelligently handles both single-file and multi-file analysis
5
+ * Automatically detects analysis type based on provided parameters
6
+ *
7
+ * Copy this template for creating any new plugin - it adapts to your needs
8
+ *
9
+ * ⚠️ CRITICAL: OUTPUT INSTRUCTIONS MUST USE NATURAL LANGUAGE, NOT JSON SCHEMAS! ⚠️
10
+ *
11
+ * The ResponseFactory automatically handles all JSON formatting. If you put JSON schemas
12
+ * in outputInstructions, you'll get double-processing and escaped content. Always use
13
+ * natural language instructions that describe WHAT you want, not HOW to format it.
14
+ *
15
+ * ✅ GOOD: "Provide a comprehensive analysis including structure, quality metrics..."
16
+ * ❌ BAD: '{ "summary": "...", "structure": {...} }' (causes escaping issues)
17
+ */
18
+ import { BasePlugin } from '../plugins/base-plugin.js';
19
+ import { IPromptPlugin } from '../prompts/shared/types.js';
20
+ import { PromptStages } from '../types/prompt-stages.js';
21
+ export declare class TEMPLATE_UniversalPlugin extends BasePlugin implements IPromptPlugin {
22
+ name: string;
23
+ category: "analyze";
24
+ description: string;
25
+ parameters: {
26
+ code: {
27
+ type: "string";
28
+ description: string;
29
+ required: boolean;
30
+ };
31
+ filePath: {
32
+ type: "string";
33
+ description: string;
34
+ required: boolean;
35
+ };
36
+ projectPath: {
37
+ type: "string";
38
+ description: string;
39
+ required: boolean;
40
+ };
41
+ files: {
42
+ type: "array";
43
+ description: string;
44
+ required: boolean;
45
+ items: {
46
+ type: "string";
47
+ };
48
+ };
49
+ maxDepth: {
50
+ type: "number";
51
+ description: string;
52
+ required: boolean;
53
+ default: number;
54
+ };
55
+ language: {
56
+ type: "string";
57
+ description: string;
58
+ required: boolean;
59
+ default: string;
60
+ };
61
+ analysisDepth: {
62
+ type: "string";
63
+ description: string;
64
+ enum: string[];
65
+ default: string;
66
+ required: boolean;
67
+ };
68
+ analysisType: {
69
+ type: "string";
70
+ description: string;
71
+ enum: string[];
72
+ default: string;
73
+ required: boolean;
74
+ };
75
+ };
76
+ private analysisCache;
77
+ private multiFileAnalysis;
78
+ constructor();
79
+ execute(params: any, llmClient: any): Promise<any>;
80
+ /**
81
+ * Auto-detect whether this is single-file or multi-file analysis
82
+ *
83
+ * DETECTION GUIDE:
84
+ * Single-file: code, filePath provided → analyze individual file
85
+ * Multi-file: projectPath, files, maxDepth provided → analyze project/multiple files
86
+ * Default: Choose based on your plugin's primary use case
87
+ */
88
+ private detectAnalysisMode;
89
+ /**
90
+ * Validate parameters based on detected analysis mode
91
+ */
92
+ private validateParameters;
93
+ /**
94
+ * Execute single-file analysis
95
+ */
96
+ private executeSingleFileAnalysis;
97
+ /**
98
+ * Execute multi-file analysis
99
+ */
100
+ private executeMultiFileAnalysis;
101
+ /**
102
+ * TEMPLATE: Implement your single-file prompt stages
103
+ */
104
+ private getSingleFilePromptStages;
105
+ /**
106
+ * TEMPLATE: Implement your multi-file prompt stages
107
+ */
108
+ private getMultiFilePromptStages;
109
+ /**
110
+ * TEMPLATE: Implement for backwards compatibility
111
+ * The system still expects this method, so we intelligently route to the appropriate stages
112
+ */
113
+ getPromptStages(params: any): PromptStages;
114
+ private discoverRelevantFiles;
115
+ private performMultiFileAnalysis;
116
+ private analyzeIndividualFile;
117
+ private getFileExtensions;
118
+ private generateCacheKey;
119
+ }
120
+ export default TEMPLATE_UniversalPlugin;
121
+ //# sourceMappingURL=plugin-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-template.d.ts","sourceRoot":"","sources":["../../src/templates/plugin-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAgBzD,qBAAa,wBAAyB,SAAQ,UAAW,YAAW,aAAa;IAC/E,IAAI,SAA4B;IAChC,QAAQ,EAAG,SAAS,CAAU;IAC9B,WAAW,SAAmF;IAG9F,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqDR;IAEF,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAA2B;;IAO9C,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG;IAyBzC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;YACW,yBAAyB;IA0CvC;;OAEG;YACW,wBAAwB;IA0CtC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyDjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwDhC;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY;YAW5B,qBAAqB;YASrB,wBAAwB;YAyCxB,qBAAqB;IAenC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,gBAAgB;CAKzB;AAED,eAAe,wBAAwB,CAAC"}