@nxuss/lemma 1.1.0 → 1.2.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 (142) hide show
  1. package/README.md +148 -9
  2. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  3. package/dist/cjs/cli/lemma-proxy.js +2 -0
  4. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  5. package/dist/cjs/infra/analyzers/DriftDetector.d.ts +4 -0
  6. package/dist/cjs/infra/analyzers/DriftDetector.d.ts.map +1 -0
  7. package/dist/cjs/infra/analyzers/DriftDetector.js +88 -0
  8. package/dist/cjs/infra/analyzers/DriftDetector.js.map +1 -0
  9. package/dist/cjs/infra/analyzers/InfraAnalyzer.d.ts +3 -0
  10. package/dist/cjs/infra/analyzers/InfraAnalyzer.d.ts.map +1 -0
  11. package/dist/cjs/infra/analyzers/InfraAnalyzer.js +73 -0
  12. package/dist/cjs/infra/analyzers/InfraAnalyzer.js.map +1 -0
  13. package/dist/cjs/infra/analyzers/MonolithAnalyzer.d.ts +3 -0
  14. package/dist/cjs/infra/analyzers/MonolithAnalyzer.d.ts.map +1 -0
  15. package/dist/cjs/infra/analyzers/MonolithAnalyzer.js +180 -0
  16. package/dist/cjs/infra/analyzers/MonolithAnalyzer.js.map +1 -0
  17. package/dist/cjs/infra/analyzers/index.d.ts +4 -0
  18. package/dist/cjs/infra/analyzers/index.d.ts.map +1 -0
  19. package/dist/cjs/infra/analyzers/index.js +11 -0
  20. package/dist/cjs/infra/analyzers/index.js.map +1 -0
  21. package/dist/cjs/infra/cli.d.ts +2 -0
  22. package/dist/cjs/infra/cli.d.ts.map +1 -0
  23. package/dist/cjs/infra/cli.js +221 -0
  24. package/dist/cjs/infra/cli.js.map +1 -0
  25. package/dist/cjs/infra/config.d.ts +17 -0
  26. package/dist/cjs/infra/config.d.ts.map +1 -0
  27. package/dist/cjs/infra/config.js +111 -0
  28. package/dist/cjs/infra/config.js.map +1 -0
  29. package/dist/cjs/infra/index.d.ts +8 -0
  30. package/dist/cjs/infra/index.d.ts.map +1 -0
  31. package/dist/cjs/infra/index.js +28 -0
  32. package/dist/cjs/infra/index.js.map +1 -0
  33. package/dist/cjs/infra/mcp-tools.d.ts +16 -0
  34. package/dist/cjs/infra/mcp-tools.d.ts.map +1 -0
  35. package/dist/cjs/infra/mcp-tools.js +456 -0
  36. package/dist/cjs/infra/mcp-tools.js.map +1 -0
  37. package/dist/cjs/infra/providers/InfraProvider.d.ts +9 -0
  38. package/dist/cjs/infra/providers/InfraProvider.d.ts.map +1 -0
  39. package/dist/cjs/infra/providers/InfraProvider.js +3 -0
  40. package/dist/cjs/infra/providers/InfraProvider.js.map +1 -0
  41. package/dist/cjs/infra/providers/JenkinsProvider.d.ts +16 -0
  42. package/dist/cjs/infra/providers/JenkinsProvider.d.ts.map +1 -0
  43. package/dist/cjs/infra/providers/JenkinsProvider.js +188 -0
  44. package/dist/cjs/infra/providers/JenkinsProvider.js.map +1 -0
  45. package/dist/cjs/infra/providers/OKDProvider.d.ts +24 -0
  46. package/dist/cjs/infra/providers/OKDProvider.d.ts.map +1 -0
  47. package/dist/cjs/infra/providers/OKDProvider.js +292 -0
  48. package/dist/cjs/infra/providers/OKDProvider.js.map +1 -0
  49. package/dist/cjs/infra/providers/TerraformProvider.d.ts +17 -0
  50. package/dist/cjs/infra/providers/TerraformProvider.d.ts.map +1 -0
  51. package/dist/cjs/infra/providers/TerraformProvider.js +109 -0
  52. package/dist/cjs/infra/providers/TerraformProvider.js.map +1 -0
  53. package/dist/cjs/infra/providers/index.d.ts +9 -0
  54. package/dist/cjs/infra/providers/index.d.ts.map +1 -0
  55. package/dist/cjs/infra/providers/index.js +34 -0
  56. package/dist/cjs/infra/providers/index.js.map +1 -0
  57. package/dist/cjs/infra/templates/jenkins/index.d.ts +15 -0
  58. package/dist/cjs/infra/templates/jenkins/index.d.ts.map +1 -0
  59. package/dist/cjs/infra/templates/jenkins/index.js +124 -0
  60. package/dist/cjs/infra/templates/jenkins/index.js.map +1 -0
  61. package/dist/cjs/infra/templates/okd/index.d.ts +31 -0
  62. package/dist/cjs/infra/templates/okd/index.d.ts.map +1 -0
  63. package/dist/cjs/infra/templates/okd/index.js +149 -0
  64. package/dist/cjs/infra/templates/okd/index.js.map +1 -0
  65. package/dist/cjs/infra/types.d.ts +128 -0
  66. package/dist/cjs/infra/types.d.ts.map +1 -0
  67. package/dist/cjs/infra/types.js +4 -0
  68. package/dist/cjs/infra/types.js.map +1 -0
  69. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  70. package/dist/cjs/mcp/tools.js +9 -1
  71. package/dist/cjs/mcp/tools.js.map +1 -1
  72. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  73. package/dist/esm/cli/lemma-proxy.js +2 -0
  74. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  75. package/dist/esm/infra/analyzers/DriftDetector.d.ts +4 -0
  76. package/dist/esm/infra/analyzers/DriftDetector.d.ts.map +1 -0
  77. package/dist/esm/infra/analyzers/DriftDetector.js +84 -0
  78. package/dist/esm/infra/analyzers/DriftDetector.js.map +1 -0
  79. package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +3 -0
  80. package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts.map +1 -0
  81. package/dist/esm/infra/analyzers/InfraAnalyzer.js +70 -0
  82. package/dist/esm/infra/analyzers/InfraAnalyzer.js.map +1 -0
  83. package/dist/esm/infra/analyzers/MonolithAnalyzer.d.ts +3 -0
  84. package/dist/esm/infra/analyzers/MonolithAnalyzer.d.ts.map +1 -0
  85. package/dist/esm/infra/analyzers/MonolithAnalyzer.js +174 -0
  86. package/dist/esm/infra/analyzers/MonolithAnalyzer.js.map +1 -0
  87. package/dist/esm/infra/analyzers/index.d.ts +4 -0
  88. package/dist/esm/infra/analyzers/index.d.ts.map +1 -0
  89. package/dist/esm/infra/analyzers/index.js +4 -0
  90. package/dist/esm/infra/analyzers/index.js.map +1 -0
  91. package/dist/esm/infra/cli.d.ts +2 -0
  92. package/dist/esm/infra/cli.d.ts.map +1 -0
  93. package/dist/esm/infra/cli.js +218 -0
  94. package/dist/esm/infra/cli.js.map +1 -0
  95. package/dist/esm/infra/config.d.ts +17 -0
  96. package/dist/esm/infra/config.d.ts.map +1 -0
  97. package/dist/esm/infra/config.js +101 -0
  98. package/dist/esm/infra/config.js.map +1 -0
  99. package/dist/esm/infra/index.d.ts +8 -0
  100. package/dist/esm/infra/index.d.ts.map +1 -0
  101. package/dist/esm/infra/index.js +9 -0
  102. package/dist/esm/infra/index.js.map +1 -0
  103. package/dist/esm/infra/mcp-tools.d.ts +16 -0
  104. package/dist/esm/infra/mcp-tools.d.ts.map +1 -0
  105. package/dist/esm/infra/mcp-tools.js +451 -0
  106. package/dist/esm/infra/mcp-tools.js.map +1 -0
  107. package/dist/esm/infra/providers/InfraProvider.d.ts +9 -0
  108. package/dist/esm/infra/providers/InfraProvider.d.ts.map +1 -0
  109. package/dist/esm/infra/providers/InfraProvider.js +2 -0
  110. package/dist/esm/infra/providers/InfraProvider.js.map +1 -0
  111. package/dist/esm/infra/providers/JenkinsProvider.d.ts +16 -0
  112. package/dist/esm/infra/providers/JenkinsProvider.d.ts.map +1 -0
  113. package/dist/esm/infra/providers/JenkinsProvider.js +181 -0
  114. package/dist/esm/infra/providers/JenkinsProvider.js.map +1 -0
  115. package/dist/esm/infra/providers/OKDProvider.d.ts +24 -0
  116. package/dist/esm/infra/providers/OKDProvider.d.ts.map +1 -0
  117. package/dist/esm/infra/providers/OKDProvider.js +288 -0
  118. package/dist/esm/infra/providers/OKDProvider.js.map +1 -0
  119. package/dist/esm/infra/providers/TerraformProvider.d.ts +17 -0
  120. package/dist/esm/infra/providers/TerraformProvider.d.ts.map +1 -0
  121. package/dist/esm/infra/providers/TerraformProvider.js +105 -0
  122. package/dist/esm/infra/providers/TerraformProvider.js.map +1 -0
  123. package/dist/esm/infra/providers/index.d.ts +9 -0
  124. package/dist/esm/infra/providers/index.d.ts.map +1 -0
  125. package/dist/esm/infra/providers/index.js +27 -0
  126. package/dist/esm/infra/providers/index.js.map +1 -0
  127. package/dist/esm/infra/templates/jenkins/index.d.ts +15 -0
  128. package/dist/esm/infra/templates/jenkins/index.d.ts.map +1 -0
  129. package/dist/esm/infra/templates/jenkins/index.js +120 -0
  130. package/dist/esm/infra/templates/jenkins/index.js.map +1 -0
  131. package/dist/esm/infra/templates/okd/index.d.ts +31 -0
  132. package/dist/esm/infra/templates/okd/index.d.ts.map +1 -0
  133. package/dist/esm/infra/templates/okd/index.js +142 -0
  134. package/dist/esm/infra/templates/okd/index.js.map +1 -0
  135. package/dist/esm/infra/types.d.ts +128 -0
  136. package/dist/esm/infra/types.d.ts.map +1 -0
  137. package/dist/esm/infra/types.js +3 -0
  138. package/dist/esm/infra/types.js.map +1 -0
  139. package/dist/esm/mcp/tools.d.ts.map +1 -1
  140. package/dist/esm/mcp/tools.js +9 -1
  141. package/dist/esm/mcp/tools.js.map +1 -1
  142. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/infra/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAA6C,MAAM,SAAS,CAAC;AAyBtF,wBAAgB,cAAc,IAAI,WAAW,CAiC5C;AAUD,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAIrE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAO/E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAWvG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAK,GAAG,YAAY,EAAE,CAG3D"}
@@ -0,0 +1,101 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ const INFRA_CACHE_DIR = path.join(os.homedir(), '.lemma-cache', 'infra');
5
+ const INFRA_STATE_FILE = path.join(INFRA_CACHE_DIR, 'state.json');
6
+ const LEMMA_CONFIG_PATH = path.join(process.cwd(), 'lemma.config.json');
7
+ // ── Config Loading ────────────────────────────────────────────────────────────
8
+ function ensureCacheDir() {
9
+ if (!fs.existsSync(INFRA_CACHE_DIR)) {
10
+ fs.mkdirSync(INFRA_CACHE_DIR, { recursive: true });
11
+ }
12
+ }
13
+ function readLemmaConfig() {
14
+ try {
15
+ if (fs.existsSync(LEMMA_CONFIG_PATH)) {
16
+ const raw = fs.readFileSync(LEMMA_CONFIG_PATH, 'utf8');
17
+ const parsed = JSON.parse(raw);
18
+ return parsed.infra || {};
19
+ }
20
+ }
21
+ catch { }
22
+ return {};
23
+ }
24
+ export function getInfraConfig() {
25
+ const fileConfig = readLemmaConfig();
26
+ return {
27
+ jenkins: fileConfig.jenkins || {
28
+ url: process.env.JENKINS_URL || '',
29
+ username: process.env.JENKINS_USERNAME || '',
30
+ apiToken: process.env.JENKINS_API_TOKEN || '',
31
+ credentialsId: process.env.JENKINS_CREDENTIALS_ID || '',
32
+ folder: process.env.JENKINS_FOLDER || '',
33
+ },
34
+ okd: fileConfig.okd || {
35
+ server: process.env.OKD_SERVER || '',
36
+ project: process.env.OKD_PROJECT || '',
37
+ imageRegistry: process.env.OKD_IMAGE_REGISTRY || '',
38
+ token: process.env.OKD_TOKEN || '',
39
+ route: process.env.OKD_ROUTE_HOST
40
+ ? { tls: process.env.OKD_ROUTE_TLS !== 'false', hostname: process.env.OKD_ROUTE_HOST }
41
+ : undefined,
42
+ },
43
+ terraform: fileConfig.terraform || {
44
+ backend: process.env.TF_BACKEND || 's3',
45
+ bucket: process.env.TF_BUCKET || '',
46
+ key: process.env.TF_KEY || '',
47
+ region: process.env.TF_REGION || '',
48
+ workDir: process.env.TF_WORK_DIR || process.cwd(),
49
+ },
50
+ deploy: fileConfig.deploy || {
51
+ autoApprove: process.env.INFRA_AUTO_APPROVE === 'true',
52
+ confirmationPrompt: process.env.INFRA_CONFIRM !== 'false',
53
+ notifyOnSuccess: process.env.INFRA_NOTIFY !== 'false',
54
+ },
55
+ };
56
+ }
57
+ function loadState() {
58
+ ensureCacheDir();
59
+ try {
60
+ if (fs.existsSync(INFRA_STATE_FILE)) {
61
+ return JSON.parse(fs.readFileSync(INFRA_STATE_FILE, 'utf8'));
62
+ }
63
+ }
64
+ catch { }
65
+ return { connectedProviders: {}, lastDiscovery: '', deployHistory: [] };
66
+ }
67
+ function saveState(state) {
68
+ ensureCacheDir();
69
+ fs.writeFileSync(INFRA_STATE_FILE, JSON.stringify(state, null, 2), 'utf8');
70
+ }
71
+ export function markProviderConnected(name, config) {
72
+ const state = loadState();
73
+ state.connectedProviders[name] = { connectedAt: new Date().toISOString(), config };
74
+ saveState(state);
75
+ }
76
+ export function getConnectedProviders() {
77
+ const state = loadState();
78
+ const result = {};
79
+ for (const [k, v] of Object.entries(state.connectedProviders)) {
80
+ result[k] = { connectedAt: v.connectedAt };
81
+ }
82
+ return result;
83
+ }
84
+ export function recordDeploy(provider, project, success, summary) {
85
+ const state = loadState();
86
+ state.deployHistory.push({
87
+ provider,
88
+ project,
89
+ timestamp: new Date().toISOString(),
90
+ success,
91
+ summary,
92
+ });
93
+ if (state.deployHistory.length > 100)
94
+ state.deployHistory = state.deployHistory.slice(-100);
95
+ saveState(state);
96
+ }
97
+ export function getDeployHistory(limit = 10) {
98
+ const state = loadState();
99
+ return state.deployHistory.slice(-limit);
100
+ }
101
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/infra/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { getInfraToolDefinitions, getInfraToolHandlers, INFRA_TOOL_NAMES } from './mcp-tools';
2
+ import { registerInfraCommands } from './cli';
3
+ export { getInfraToolDefinitions, getInfraToolHandlers, INFRA_TOOL_NAMES };
4
+ export { registerInfraCommands };
5
+ export { getInfraConfig, markProviderConnected, getConnectedProviders, recordDeploy, getDeployHistory } from './config';
6
+ export { getProvider, listProviders, JenkinsProvider, OKDProvider, TerraformProvider } from './providers';
7
+ export { analyzeInfra, detectTerraformDrift, detectOKDDrift, analyzeMonolith } from './analyzers';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACxH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { getInfraToolDefinitions, getInfraToolHandlers, INFRA_TOOL_NAMES } from './mcp-tools';
2
+ import { registerInfraCommands } from './cli';
3
+ export { getInfraToolDefinitions, getInfraToolHandlers, INFRA_TOOL_NAMES };
4
+ export { registerInfraCommands };
5
+ // Re-export for direct usage
6
+ export { getInfraConfig, markProviderConnected, getConnectedProviders, recordDeploy, getDeployHistory } from './config';
7
+ export { getProvider, listProviders, JenkinsProvider, OKDProvider, TerraformProvider } from './providers';
8
+ export { analyzeInfra, detectTerraformDrift, detectOKDDrift, analyzeMonolith } from './analyzers';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,6BAA6B;AAC7B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACxH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ type ToolHandler = (args: Record<string, any>) => Promise<Record<string, any>>;
2
+ interface ToolDefinition {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: string;
7
+ properties?: Record<string, any>;
8
+ required?: string[];
9
+ };
10
+ }
11
+ export declare const infraToolDefinitions: ToolDefinition[];
12
+ export declare function getInfraToolDefinitions(): ToolDefinition[];
13
+ export declare function getInfraToolHandlers(): Record<string, ToolHandler>;
14
+ export declare const INFRA_TOOL_NAMES: string[];
15
+ export {};
16
+ //# sourceMappingURL=mcp-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../../../src/infra/mcp-tools.ts"],"names":[],"mappings":"AASA,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAE/E,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAID,eAAO,MAAM,oBAAoB,EAAE,cAAc,EA6MhD,CAAC;AAoRF,wBAAgB,uBAAuB,IAAI,cAAc,EAAE,CAE1D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAElE;AAED,eAAO,MAAM,gBAAgB,UAA0C,CAAC"}
@@ -0,0 +1,451 @@
1
+ import { getProvider } from './providers';
2
+ import { getInfraConfig, markProviderConnected, getConnectedProviders, recordDeploy } from './config';
3
+ import { analyzeInfra, analyzeMonolith } from './analyzers';
4
+ import { jenkinsfileTemplate, multibranchTemplate } from './templates/jenkins';
5
+ import { getBrain } from '../subconscious/TheBrainV2';
6
+ // ── Tool Definitions ──────────────────────────────────────────────────────────
7
+ export const infraToolDefinitions = [
8
+ {
9
+ name: 'infra_discover',
10
+ description: 'Auto-detect Jenkins, OKD, and Terraform in the environment. Returns connectivity status and config requirements.',
11
+ inputSchema: { type: 'object', properties: {} },
12
+ },
13
+ {
14
+ name: 'infra_connect',
15
+ description: 'Connect to an infrastructure provider with credentials. Credentials are stored locally in ~/.lemma-cache/infra/.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ provider: { type: 'string', enum: ['jenkins', 'okd', 'terraform'], description: 'Provider to connect' },
20
+ url: { type: 'string', description: 'Provider URL/endpoint' },
21
+ token: { type: 'string', description: 'Auth token or API key' },
22
+ username: { type: 'string', description: 'Username (Jenkins)' },
23
+ project: { type: 'string', description: 'OKD project/namespace' },
24
+ },
25
+ required: ['provider'],
26
+ },
27
+ },
28
+ {
29
+ name: 'infra_status',
30
+ description: 'Get consolidated status of all connected infrastructure providers. Token-optimized: returns only anomalies.',
31
+ inputSchema: { type: 'object', properties: {} },
32
+ },
33
+ {
34
+ name: 'infra_health_check',
35
+ description: 'Detailed health check for all providers. Returns latency, version, and connectivity details.',
36
+ inputSchema: { type: 'object', properties: {} },
37
+ },
38
+ {
39
+ name: 'infra_diagnose',
40
+ description: 'Analyze infrastructure issues and suggest fixes. Caches successful solutions in TheBrain for future sessions.',
41
+ inputSchema: {
42
+ type: 'object',
43
+ properties: {
44
+ provider: { type: 'string', enum: ['jenkins', 'okd', 'terraform'], description: 'Provider to diagnose' },
45
+ },
46
+ },
47
+ },
48
+ {
49
+ name: 'infra_analyze_monolith',
50
+ description: 'Analyze monolith codebase for microservice migration. Identifies modules, coupling, and suggests split points.',
51
+ inputSchema: { type: 'object', properties: {} },
52
+ },
53
+ {
54
+ name: 'infra_suggest_split',
55
+ description: 'Suggest microservice split points based on module coupling analysis.',
56
+ inputSchema: { type: 'object', properties: {} },
57
+ },
58
+ {
59
+ name: 'jenkins_generate_pipeline',
60
+ description: 'Generate a Jenkinsfile for CI/CD pipeline. Supports standard and multibranch patterns.',
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ name: { type: 'string', description: 'Project/app name' },
65
+ branch: { type: 'string', description: 'Branch pattern', default: 'main' },
66
+ dockerImage: { type: 'string', description: 'Docker image name' },
67
+ registry: { type: 'string', description: 'Container registry' },
68
+ namespace: { type: 'string', description: 'OKD namespace' },
69
+ multibranch: { type: 'boolean', description: 'Use multibranch template', default: false },
70
+ repoUrl: { type: 'string', description: 'Git repo URL (for multibranch)' },
71
+ },
72
+ required: ['name'],
73
+ },
74
+ },
75
+ {
76
+ name: 'jenkins_trigger_build',
77
+ description: 'Trigger a Jenkins build. Semi-automated: returns what will be built, requires confirmation.',
78
+ inputSchema: {
79
+ type: 'object',
80
+ properties: {
81
+ jobName: { type: 'string', description: 'Jenkins job name' },
82
+ params: { type: 'object', description: 'Build parameters as key-value pairs' },
83
+ },
84
+ required: ['jobName'],
85
+ },
86
+ },
87
+ {
88
+ name: 'jenkins_build_status',
89
+ description: 'Get status of a Jenkins build. Returns result, duration, and URL.',
90
+ inputSchema: {
91
+ type: 'object',
92
+ properties: {
93
+ jobName: { type: 'string', description: 'Jenkins job name' },
94
+ buildNumber: { type: 'number', description: 'Build number (omit for last build)' },
95
+ },
96
+ required: ['jobName'],
97
+ },
98
+ },
99
+ {
100
+ name: 'jenkins_logs',
101
+ description: 'Get last 80 lines of Jenkins build console output. Token-optimized.',
102
+ inputSchema: {
103
+ type: 'object',
104
+ properties: {
105
+ jobName: { type: 'string', description: 'Jenkins job name' },
106
+ buildNumber: { type: 'number', description: 'Build number' },
107
+ },
108
+ required: ['jobName', 'buildNumber'],
109
+ },
110
+ },
111
+ {
112
+ name: 'okd_generate_manifests',
113
+ description: 'Generate OKD/OpenShift manifests (DeploymentConfig, BuildConfig, ImageStream, Route, Service).',
114
+ inputSchema: {
115
+ type: 'object',
116
+ properties: {
117
+ name: { type: 'string', description: 'Application name' },
118
+ image: { type: 'string', description: 'Container image' },
119
+ port: { type: 'number', description: 'Container port', default: 8080 },
120
+ replicas: { type: 'number', description: 'Number of replicas', default: 2 },
121
+ envVars: { type: 'object', description: 'Environment variables' },
122
+ },
123
+ required: ['name'],
124
+ },
125
+ },
126
+ {
127
+ name: 'okd_apply',
128
+ description: 'Apply OKD manifests. Semi-automated: generates manifests, shows preview, then applies on confirmation.',
129
+ inputSchema: {
130
+ type: 'object',
131
+ properties: {
132
+ name: { type: 'string', description: 'Application name' },
133
+ image: { type: 'string', description: 'Container image' },
134
+ port: { type: 'number', description: 'Container port', default: 8080 },
135
+ replicas: { type: 'number', description: 'Replicas', default: 2 },
136
+ dryRun: { type: 'boolean', description: 'Only generate, do not apply', default: false },
137
+ envVars: { type: 'object', description: 'Environment variables' },
138
+ },
139
+ required: ['name'],
140
+ },
141
+ },
142
+ {
143
+ name: 'okd_status',
144
+ description: 'Get status of pods, builds, and routes in OKD project. Token-optimized: compact summary.',
145
+ inputSchema: { type: 'object', properties: {} },
146
+ },
147
+ {
148
+ name: 'okd_logs',
149
+ description: 'Get logs from an OKD pod. Returns last N lines (default 50).',
150
+ inputSchema: {
151
+ type: 'object',
152
+ properties: {
153
+ podName: { type: 'string', description: 'Pod name' },
154
+ lines: { type: 'number', description: 'Number of lines', default: 50 },
155
+ },
156
+ required: ['podName'],
157
+ },
158
+ },
159
+ {
160
+ name: 'okd_events',
161
+ description: 'Get recent OKD cluster events (sorted by timestamp). Useful for troubleshooting.',
162
+ inputSchema: { type: 'object', properties: {} },
163
+ },
164
+ {
165
+ name: 'okd_describe',
166
+ description: 'Describe an OKD resource (pod, dc, bc, route, etc.) for debugging.',
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ resource: { type: 'string', description: 'Resource type (pod, dc, bc, route, service)' },
171
+ name: { type: 'string', description: 'Resource name' },
172
+ },
173
+ required: ['resource', 'name'],
174
+ },
175
+ },
176
+ {
177
+ name: 'okd_route_url',
178
+ description: 'Get the external URL for an OKD route.',
179
+ inputSchema: {
180
+ type: 'object',
181
+ properties: {
182
+ routeName: { type: 'string', description: 'Route name' },
183
+ },
184
+ required: ['routeName'],
185
+ },
186
+ },
187
+ {
188
+ name: 'terraform_plan',
189
+ description: 'Run terraform plan and return the output. Token-optimized: returns only changes.',
190
+ inputSchema: { type: 'object', properties: {} },
191
+ },
192
+ {
193
+ name: 'terraform_apply',
194
+ description: 'Run terraform apply. Semi-automated: shows plan first, requires confirmation.',
195
+ inputSchema: {
196
+ type: 'object',
197
+ properties: {
198
+ autoApprove: { type: 'boolean', description: 'Skip confirmation prompt', default: false },
199
+ },
200
+ },
201
+ },
202
+ {
203
+ name: 'terraform_state_list',
204
+ description: 'List all resources in Terraform state.',
205
+ inputSchema: { type: 'object', properties: {} },
206
+ },
207
+ {
208
+ name: 'terraform_drift',
209
+ description: 'Detect configuration drift between Terraform state and actual infrastructure.',
210
+ inputSchema: { type: 'object', properties: {} },
211
+ },
212
+ ];
213
+ // ── Handler Implementations ───────────────────────────────────────────────────
214
+ function ok() {
215
+ return (text) => ({ content: [{ type: 'text', text }] });
216
+ }
217
+ const jenkins = () => getProvider('jenkins');
218
+ const okd = () => getProvider('okd');
219
+ const tf = () => getProvider('terraform');
220
+ const handlers = {
221
+ infra_discover: async () => {
222
+ const results = [];
223
+ const connected = getConnectedProviders();
224
+ for (const name of ['jenkins', 'okd', 'terraform']) {
225
+ const status = connected[name] ? `CONNECTED (since ${connected[name].connectedAt})` : 'NOT CONNECTED';
226
+ results.push(`[${name.toUpperCase()}] ${status}`);
227
+ }
228
+ const cfg = getInfraConfig();
229
+ if (cfg.jenkins?.url)
230
+ results.push(`Jenkins URL: ${cfg.jenkins.url}`);
231
+ if (cfg.okd?.server)
232
+ results.push(`OKD Server: ${cfg.okd.server}`);
233
+ if (cfg.terraform?.backend)
234
+ results.push(`Terraform Backend: ${cfg.terraform.backend}`);
235
+ return ok()(results.join('\n'));
236
+ },
237
+ infra_connect: async (args) => {
238
+ const provider = args.provider;
239
+ try {
240
+ const p = getProvider(provider);
241
+ let config = {};
242
+ if (provider === 'jenkins') {
243
+ config = { url: args.url, username: args.username, apiToken: args.token };
244
+ }
245
+ else if (provider === 'okd') {
246
+ config = { server: args.url, token: args.token, project: args.project || '' };
247
+ }
248
+ else if (provider === 'terraform') {
249
+ config = { backend: 's3', workDir: process.cwd() };
250
+ }
251
+ const ok2 = await p.connect(config);
252
+ if (ok2) {
253
+ markProviderConnected(provider, { url: args.url });
254
+ return ok()(`Connected to ${provider} successfully.`);
255
+ }
256
+ return ok()(`Failed to connect to ${provider}. Check credentials and URL.`);
257
+ }
258
+ catch (err) {
259
+ return ok()(`Error connecting to ${provider}: ${err.message}`);
260
+ }
261
+ },
262
+ infra_status: async () => {
263
+ const connected = getConnectedProviders();
264
+ const lines = [];
265
+ for (const name of Object.keys(connected)) {
266
+ try {
267
+ const p = getProvider(name);
268
+ const health = await p.healthCheck();
269
+ const icon = health.status === 'healthy' ? 'OK' : health.status === 'degraded' ? 'WARN' : 'DOWN';
270
+ lines.push(`[${icon}] ${name}: ${health.status} (${health.latency}ms)`);
271
+ }
272
+ catch {
273
+ lines.push(`[DOWN] ${name}: unreachable`);
274
+ }
275
+ }
276
+ if (lines.length === 0) {
277
+ return ok()('No providers connected. Use infra_connect to connect one.');
278
+ }
279
+ return ok()(lines.join('\n'));
280
+ },
281
+ infra_health_check: async () => {
282
+ const connected = getConnectedProviders();
283
+ const results = [];
284
+ for (const name of Object.keys(connected)) {
285
+ try {
286
+ const p = getProvider(name);
287
+ const health = await p.healthCheck();
288
+ results.push({ provider: name, ...health });
289
+ }
290
+ catch (err) {
291
+ results.push({ provider: name, status: 'down', error: err.message });
292
+ }
293
+ }
294
+ return ok()(JSON.stringify(results, null, 2));
295
+ },
296
+ infra_diagnose: async (args) => {
297
+ const provider = args.provider;
298
+ const brain = getBrain();
299
+ const cached = brain.search(`troubleshoot ${provider} infrastructure`, 3);
300
+ if (cached.length > 0 && cached[0].similarity > 0.8) {
301
+ return ok()(`Cached solution found (similarity: ${(cached[0].similarity * 100).toFixed(0)}%):\n${cached[0].response}`);
302
+ }
303
+ try {
304
+ const p = getProvider(provider);
305
+ const status = await p.getStatus();
306
+ const analysis = analyzeInfra(provider, status);
307
+ const response = `Diagnosis for ${provider}:\nScore: ${analysis.score}/100\n\n${analysis.findings.map((f) => `[${f.severity}] ${f.resource}: ${f.message}\n Fix: ${f.suggestion}`).join('\n\n')}`;
308
+ if (analysis.findings.length > 0) {
309
+ brain.store(`${provider} infrastructure diagnosis: ${analysis.findings.map((f) => f.ruleId).join(', ')}`, response, 'infra');
310
+ }
311
+ return ok()(response);
312
+ }
313
+ catch (err) {
314
+ return ok()(`Diagnosis failed for ${provider}: ${err.message}`);
315
+ }
316
+ },
317
+ infra_analyze_monolith: async () => {
318
+ const analysis = analyzeMonolith(process.cwd());
319
+ const response = `Monolith Analysis:\nModules: ${analysis.modules.length}\nCoupling: ${analysis.couplingScore}%\n\n` +
320
+ analysis.modules.map((m) => ` ${m.name}: ${m.files} files, ${m.complexity} LOC, deps: [${m.dependencies.join(', ')}]`).join('\n') +
321
+ `\n\nSuggested Splits:\n${analysis.suggestedSplits.map((s) => ` ${s.name}: ${s.rationale} (effort: ${s.estimatedEffort})`).join('\n')}`;
322
+ return ok()(response);
323
+ },
324
+ infra_suggest_split: async () => {
325
+ const analysis = analyzeMonolith(process.cwd());
326
+ if (analysis.suggestedSplits.length === 0) {
327
+ return ok()('No clear split points found. The codebase may already be well-modularized.');
328
+ }
329
+ return ok()(analysis.suggestedSplits.map((s) => `${s.name}: includes [${s.includes.join(', ')}]\n Rationale: ${s.rationale}\n Effort: ${s.estimatedEffort}`).join('\n\n'));
330
+ },
331
+ jenkins_generate_pipeline: async (args) => {
332
+ const config = getInfraConfig();
333
+ const content = args.multibranch
334
+ ? multibranchTemplate({ name: args.name, repoUrl: args.repoUrl || '' })
335
+ : jenkinsfileTemplate({
336
+ name: args.name,
337
+ dockerImage: args.dockerImage,
338
+ registry: args.registry || config.jenkins?.url ? new URL(config.jenkins.url).hostname : undefined,
339
+ namespace: args.namespace || config.okd?.project,
340
+ });
341
+ return ok()(`Generated Jenkinsfile for ${args.name}:\n\n${content}`);
342
+ },
343
+ jenkins_trigger_build: async (args) => {
344
+ const p = jenkins();
345
+ const result = await p.triggerBuild(args.jobName, args.params);
346
+ return ok()(`Build ${result.success ? 'triggered' : 'failed'} for ${args.jobName}\n${result.logs.join('\n')}`);
347
+ },
348
+ jenkins_build_status: async (args) => {
349
+ const p = jenkins();
350
+ const status = await p.getBuildStatus(args.jobName, args.buildNumber);
351
+ return ok()(`Build #${status.number}: ${status.result || 'BUILDING'} (${status.duration || 0}ms)\nURL: ${status.url}`);
352
+ },
353
+ jenkins_logs: async (args) => {
354
+ const p = jenkins();
355
+ const logs = await p.getBuildLogs(args.jobName, args.buildNumber);
356
+ return ok()(logs);
357
+ },
358
+ okd_generate_manifests: async (args) => {
359
+ const config = getInfraConfig();
360
+ const p = okd();
361
+ const manifests = p.generateManifests({
362
+ name: args.name,
363
+ image: args.image,
364
+ port: args.port || 8080,
365
+ replicas: args.replicas || 2,
366
+ envVars: args.envVars,
367
+ });
368
+ const output = Object.entries(manifests)
369
+ .map(([k, v]) => `--- ${k} ---\n${v}`)
370
+ .join('\n\n');
371
+ return ok()(`Generated OKD manifests for ${args.name}:\n\n${output}`);
372
+ },
373
+ okd_apply: async (args) => {
374
+ const p = okd();
375
+ const manifests = p.generateManifests({
376
+ name: args.name,
377
+ image: args.image,
378
+ port: args.port || 8080,
379
+ replicas: args.replicas || 2,
380
+ envVars: args.envVars,
381
+ });
382
+ const result = await p.apply(manifests, args.dryRun);
383
+ recordDeploy('okd', args.name, result.success, result.logs.join('; '));
384
+ const brain = getBrain();
385
+ if (result.success) {
386
+ brain.store(`OKD deploy ${args.name} succeeded`, `Applied manifests for ${args.name}: ${result.artifacts.join(', ')}`, 'infra');
387
+ }
388
+ return ok()(`${result.success ? 'Applied' : 'Dry-run'} for ${args.name}:\n${result.logs.join('\n')}\n\nNext:\n${result.nextSteps.join('\n')}`);
389
+ },
390
+ okd_status: async () => {
391
+ const p = okd();
392
+ const status = await p.getStatus();
393
+ const pods = (status.podList || []).map((pod) => `${pod.name}: ${pod.status}${pod.ready ? '' : ' (not ready)'}`).join('\n');
394
+ return ok()(`OKD Status: ${status.pods} pods, ${status.builds} builds, ${status.routes} routes\n\n${pods || 'No pods found'}`);
395
+ },
396
+ okd_logs: async (args) => {
397
+ const p = okd();
398
+ const logs = await p.getLogs(args.podName, args.lines || 50);
399
+ return ok()(logs);
400
+ },
401
+ okd_events: async () => {
402
+ const p = okd();
403
+ const events = await p.getEvents();
404
+ return ok()(events);
405
+ },
406
+ okd_describe: async (args) => {
407
+ const p = okd();
408
+ const output = await p.describe(args.resource, args.name);
409
+ return ok()(output);
410
+ },
411
+ okd_route_url: async (args) => {
412
+ const p = okd();
413
+ const url = await p.getRouteURL(args.routeName);
414
+ return ok()(`Route URL: https://${url}`);
415
+ },
416
+ terraform_plan: async () => {
417
+ const p = tf();
418
+ const plan = await p.plan();
419
+ const lines = plan.split('\n');
420
+ const changes = lines.filter((l) => l.startsWith(' ~ ') || l.startsWith(' - ') || l.startsWith(' + '));
421
+ if (changes.length === 0)
422
+ return ok()('No changes detected.');
423
+ return ok()(`Terraform plan changes:\n${changes.join('\n')}`);
424
+ },
425
+ terraform_apply: async (args) => {
426
+ const p = tf();
427
+ const result = await p.apply(args.autoApprove);
428
+ return ok()(`Terraform apply:\n${result}`);
429
+ },
430
+ terraform_state_list: async () => {
431
+ const p = tf();
432
+ const resources = await p.stateList();
433
+ return ok()(`Resources in state (${resources.length}):\n${resources.join('\n')}`);
434
+ },
435
+ terraform_drift: async () => {
436
+ const p = tf();
437
+ const drifts = await p.detectDrift();
438
+ if (drifts.length === 0)
439
+ return ok()('No drift detected.');
440
+ return ok()(`Drift detected (${drifts.length} resources):\n${drifts.map((d) => `[${d.severity}] ${d.resource}: ${d.actual}`).join('\n')}`);
441
+ },
442
+ };
443
+ // ── Exports ───────────────────────────────────────────────────────────────────
444
+ export function getInfraToolDefinitions() {
445
+ return infraToolDefinitions;
446
+ }
447
+ export function getInfraToolHandlers() {
448
+ return handlers;
449
+ }
450
+ export const INFRA_TOOL_NAMES = infraToolDefinitions.map((d) => d.name);
451
+ //# sourceMappingURL=mcp-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../../src/infra/mcp-tools.ts"],"names":[],"mappings":"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"}