@minicor/mcp-server 2.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 (134) hide show
  1. package/README.md +169 -0
  2. package/dist/__tests__/diff.test.d.ts +2 -0
  3. package/dist/__tests__/diff.test.d.ts.map +1 -0
  4. package/dist/__tests__/diff.test.js +23 -0
  5. package/dist/__tests__/diff.test.js.map +1 -0
  6. package/dist/__tests__/helpers.test.d.ts +2 -0
  7. package/dist/__tests__/helpers.test.d.ts.map +1 -0
  8. package/dist/__tests__/helpers.test.js +70 -0
  9. package/dist/__tests__/helpers.test.js.map +1 -0
  10. package/dist/__tests__/inspect-scripts.test.d.ts +2 -0
  11. package/dist/__tests__/inspect-scripts.test.d.ts.map +1 -0
  12. package/dist/__tests__/inspect-scripts.test.js +66 -0
  13. package/dist/__tests__/inspect-scripts.test.js.map +1 -0
  14. package/dist/browser-client.d.ts +42 -0
  15. package/dist/browser-client.d.ts.map +1 -0
  16. package/dist/browser-client.js +66 -0
  17. package/dist/browser-client.js.map +1 -0
  18. package/dist/cli.d.ts +14 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +256 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/config.d.ts +21 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +57 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/diff.d.ts +7 -0
  27. package/dist/diff.d.ts.map +1 -0
  28. package/dist/diff.js +97 -0
  29. package/dist/diff.js.map +1 -0
  30. package/dist/helpers.d.ts +28 -0
  31. package/dist/helpers.d.ts.map +1 -0
  32. package/dist/helpers.js +91 -0
  33. package/dist/helpers.js.map +1 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +193 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/inspect-scripts.d.ts +18 -0
  39. package/dist/inspect-scripts.d.ts.map +1 -0
  40. package/dist/inspect-scripts.js +572 -0
  41. package/dist/inspect-scripts.js.map +1 -0
  42. package/dist/laminar-client.d.ts +160 -0
  43. package/dist/laminar-client.d.ts.map +1 -0
  44. package/dist/laminar-client.js +237 -0
  45. package/dist/laminar-client.js.map +1 -0
  46. package/dist/lds-client.d.ts +107 -0
  47. package/dist/lds-client.d.ts.map +1 -0
  48. package/dist/lds-client.js +81 -0
  49. package/dist/lds-client.js.map +1 -0
  50. package/dist/paths.d.ts +17 -0
  51. package/dist/paths.d.ts.map +1 -0
  52. package/dist/paths.js +46 -0
  53. package/dist/paths.js.map +1 -0
  54. package/dist/prompts/build-browser-rpa.d.ts +3 -0
  55. package/dist/prompts/build-browser-rpa.d.ts.map +1 -0
  56. package/dist/prompts/build-browser-rpa.js +90 -0
  57. package/dist/prompts/build-browser-rpa.js.map +1 -0
  58. package/dist/prompts/build-rpa.d.ts +3 -0
  59. package/dist/prompts/build-rpa.d.ts.map +1 -0
  60. package/dist/prompts/build-rpa.js +168 -0
  61. package/dist/prompts/build-rpa.js.map +1 -0
  62. package/dist/prompts/debug-execution.d.ts +3 -0
  63. package/dist/prompts/debug-execution.d.ts.map +1 -0
  64. package/dist/prompts/debug-execution.js +50 -0
  65. package/dist/prompts/debug-execution.js.map +1 -0
  66. package/dist/prompts/workflow-guide.d.ts +3 -0
  67. package/dist/prompts/workflow-guide.d.ts.map +1 -0
  68. package/dist/prompts/workflow-guide.js +175 -0
  69. package/dist/prompts/workflow-guide.js.map +1 -0
  70. package/dist/services.d.ts +61 -0
  71. package/dist/services.d.ts.map +1 -0
  72. package/dist/services.js +249 -0
  73. package/dist/services.js.map +1 -0
  74. package/dist/setup.d.ts +11 -0
  75. package/dist/setup.d.ts.map +1 -0
  76. package/dist/setup.js +790 -0
  77. package/dist/setup.js.map +1 -0
  78. package/dist/state.d.ts +23 -0
  79. package/dist/state.d.ts.map +1 -0
  80. package/dist/state.js +24 -0
  81. package/dist/state.js.map +1 -0
  82. package/dist/sync.d.ts +86 -0
  83. package/dist/sync.d.ts.map +1 -0
  84. package/dist/sync.js +394 -0
  85. package/dist/sync.js.map +1 -0
  86. package/dist/tools/browser.d.ts +3 -0
  87. package/dist/tools/browser.d.ts.map +1 -0
  88. package/dist/tools/browser.js +254 -0
  89. package/dist/tools/browser.js.map +1 -0
  90. package/dist/tools/config-stores.d.ts +3 -0
  91. package/dist/tools/config-stores.d.ts.map +1 -0
  92. package/dist/tools/config-stores.js +54 -0
  93. package/dist/tools/config-stores.js.map +1 -0
  94. package/dist/tools/core.d.ts +3 -0
  95. package/dist/tools/core.d.ts.map +1 -0
  96. package/dist/tools/core.js +202 -0
  97. package/dist/tools/core.js.map +1 -0
  98. package/dist/tools/cron.d.ts +3 -0
  99. package/dist/tools/cron.d.ts.map +1 -0
  100. package/dist/tools/cron.js +168 -0
  101. package/dist/tools/cron.js.map +1 -0
  102. package/dist/tools/elasticsearch.d.ts +3 -0
  103. package/dist/tools/elasticsearch.d.ts.map +1 -0
  104. package/dist/tools/elasticsearch.js +248 -0
  105. package/dist/tools/elasticsearch.js.map +1 -0
  106. package/dist/tools/issues.d.ts +3 -0
  107. package/dist/tools/issues.d.ts.map +1 -0
  108. package/dist/tools/issues.js +39 -0
  109. package/dist/tools/issues.js.map +1 -0
  110. package/dist/tools/stats.d.ts +3 -0
  111. package/dist/tools/stats.d.ts.map +1 -0
  112. package/dist/tools/stats.js +18 -0
  113. package/dist/tools/stats.js.map +1 -0
  114. package/dist/tools/sync-tools.d.ts +3 -0
  115. package/dist/tools/sync-tools.d.ts.map +1 -0
  116. package/dist/tools/sync-tools.js +121 -0
  117. package/dist/tools/sync-tools.js.map +1 -0
  118. package/dist/tools/vm-rpa.d.ts +3 -0
  119. package/dist/tools/vm-rpa.d.ts.map +1 -0
  120. package/dist/tools/vm-rpa.js +281 -0
  121. package/dist/tools/vm-rpa.js.map +1 -0
  122. package/dist/tools/vm.d.ts +3 -0
  123. package/dist/tools/vm.d.ts.map +1 -0
  124. package/dist/tools/vm.js +280 -0
  125. package/dist/tools/vm.js.map +1 -0
  126. package/dist/tools/workflow-ops.d.ts +3 -0
  127. package/dist/tools/workflow-ops.d.ts.map +1 -0
  128. package/dist/tools/workflow-ops.js +313 -0
  129. package/dist/tools/workflow-ops.js.map +1 -0
  130. package/dist/types.d.ts +14 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +5 -0
  133. package/dist/types.js.map +1 -0
  134. package/package.json +58 -0
package/dist/cli.js ADDED
@@ -0,0 +1,256 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Laminar CLI — manage workflows from the terminal or CI/CD pipelines.
4
+ *
5
+ * Usage:
6
+ * laminar init --workspace <id> [--output <dir>]
7
+ * laminar pull [--all | --workflow <id> --output <dir>]
8
+ * laminar push [--changed | --workflow <dir>]
9
+ * laminar diff [--all | --workflow <dir>]
10
+ *
11
+ * Auth: Set LAMINAR_API_KEY env var, or run `laminar-mcp-setup` first.
12
+ */
13
+ import path from "node:path";
14
+ import fs from "node:fs";
15
+ import os from "node:os";
16
+ import { LaminarClient } from "./laminar-client.js";
17
+ import { initProject, pullWorkflow, pullAll, pushWorkflow, pushChanged, syncStatus, readManifest, } from "./sync.js";
18
+ const TOKEN_PATH = path.join(os.homedir(), ".laminar", "tokens.json");
19
+ const CONFIG_PATH = path.join(os.homedir(), ".laminar", "config.json");
20
+ // ── Auth ─────────────────────────────────────────────────────
21
+ function resolveAuth() {
22
+ const apiKey = process.env.LAMINAR_API_KEY;
23
+ if (apiKey) {
24
+ const base = process.env.LAMINAR_API_BASE || "https://api.laminar.run";
25
+ return { auth: { type: "apiKey", token: apiKey }, baseUrl: base };
26
+ }
27
+ const accessToken = process.env.LAMINAR_ACCESS_TOKEN;
28
+ if (accessToken) {
29
+ const base = process.env.LAMINAR_API_BASE || "https://api.laminar.run";
30
+ return { auth: { type: "bearer", token: accessToken }, baseUrl: base };
31
+ }
32
+ try {
33
+ if (fs.existsSync(TOKEN_PATH)) {
34
+ const tokens = JSON.parse(fs.readFileSync(TOKEN_PATH, "utf-8"));
35
+ return {
36
+ auth: { type: "bearer", token: tokens.access_token },
37
+ baseUrl: tokens.api_base || "https://api.laminar.run",
38
+ };
39
+ }
40
+ }
41
+ catch { }
42
+ console.error("No auth found. Set LAMINAR_API_KEY or run: laminar-mcp-setup");
43
+ process.exit(1);
44
+ }
45
+ // ── Arg parsing ──────────────────────────────────────────────
46
+ function parseArgs(args) {
47
+ const command = args[0] || "help";
48
+ const flags = {};
49
+ for (let i = 1; i < args.length; i++) {
50
+ const arg = args[i];
51
+ if (arg.startsWith("--")) {
52
+ const key = arg.slice(2);
53
+ const next = args[i + 1];
54
+ if (next && !next.startsWith("--")) {
55
+ flags[key] = next;
56
+ i++;
57
+ }
58
+ else {
59
+ flags[key] = true;
60
+ }
61
+ }
62
+ }
63
+ return { command, flags };
64
+ }
65
+ function flag(flags, key) {
66
+ const v = flags[key];
67
+ return typeof v === "string" ? v : undefined;
68
+ }
69
+ function requireFlag(flags, key, desc) {
70
+ const v = flag(flags, key);
71
+ if (!v) {
72
+ console.error(`Missing required flag: --${key} (${desc})`);
73
+ process.exit(1);
74
+ }
75
+ return v;
76
+ }
77
+ // ── Commands ─────────────────────────────────────────────────
78
+ async function cmdInit(client, flags) {
79
+ const workspaceId = parseInt(requireFlag(flags, "workspace", "Workspace ID"));
80
+ const outputDir = path.resolve(flag(flags, "output") || ".");
81
+ console.log(`Initializing project from workspace ${workspaceId}...`);
82
+ const result = await initProject(client, workspaceId, outputDir);
83
+ console.log(`\nPulled ${result.workflowsPulled} workflows to ${result.projectDir}`);
84
+ console.log("\nNext steps:");
85
+ console.log(" git init && git add . && git commit -m 'Initial Laminar workflow sync'");
86
+ console.log(" git remote add origin <your-github-repo-url>");
87
+ console.log(" git push -u origin main");
88
+ console.log(" Add LAMINAR_API_KEY as a GitHub repo secret");
89
+ }
90
+ async function cmdPull(client, flags) {
91
+ if (flags.all) {
92
+ const projectDir = path.resolve(flag(flags, "project") || ".");
93
+ console.log(`Pulling all workflows from manifest...`);
94
+ const result = await pullAll(client, projectDir);
95
+ for (const p of result.pulled) {
96
+ console.log(` ✓ ${p.workflow}: ${p.steps} steps`);
97
+ }
98
+ for (const e of result.errors) {
99
+ console.error(` ✗ ${e.workflow}: ${e.error}`);
100
+ }
101
+ return;
102
+ }
103
+ const workflowId = parseInt(requireFlag(flags, "workflow", "Workflow ID"));
104
+ const outputDir = path.resolve(requireFlag(flags, "output", "Output directory"));
105
+ console.log(`Pulling workflow ${workflowId}...`);
106
+ const result = await pullWorkflow(client, workflowId, outputDir);
107
+ console.log(` ✓ ${result.stepsWritten} steps → ${result.directory}`);
108
+ }
109
+ async function cmdPush(client, flags) {
110
+ if (flags.changed) {
111
+ const projectDir = path.resolve(flag(flags, "project") || ".");
112
+ console.log("Pushing changed workflows...");
113
+ const result = await pushChanged(client, projectDir);
114
+ for (const p of result.pushed) {
115
+ console.log(` ✓ ${p.workflow}: deployed ${p.steps} steps`);
116
+ for (const d of p.details) {
117
+ console.log(` ${d.step} → ${d.action}`);
118
+ }
119
+ }
120
+ for (const u of result.unchanged) {
121
+ console.log(` - ${u}: no changes`);
122
+ }
123
+ for (const e of result.errors) {
124
+ console.error(` ✗ ${e.workflow}: ${e.error}`);
125
+ }
126
+ console.log(`\nDone: ${result.pushed.length} deployed, ${result.unchanged.length} unchanged, ${result.errors.length} errors`);
127
+ return;
128
+ }
129
+ const workflowDir = path.resolve(requireFlag(flags, "workflow", "Workflow directory"));
130
+ console.log(`Pushing workflow from ${workflowDir}...`);
131
+ const result = await pushWorkflow(client, workflowDir);
132
+ console.log(` ✓ ${result.stepsPushed} steps deployed to workflow ${result.workflowId}`);
133
+ }
134
+ async function cmdDiff(client, flags) {
135
+ if (flags.all || flags.json) {
136
+ const projectDir = path.resolve(flag(flags, "project") || ".");
137
+ const manifest = readManifest(projectDir);
138
+ const workflowsDir = path.join(projectDir, "workflows");
139
+ const allDiffs = {};
140
+ for (const [dirName, wf] of Object.entries(manifest.workflows)) {
141
+ const wfDir = path.join(workflowsDir, dirName);
142
+ try {
143
+ const status = await syncStatus(client, wfDir, wf.id);
144
+ allDiffs[`${wf.name} (${wf.id})`] = status.changes;
145
+ }
146
+ catch (e) {
147
+ allDiffs[`${wf.name} (${wf.id})`] = [
148
+ { step: "error", status: "error", diff: e.message },
149
+ ];
150
+ }
151
+ }
152
+ if (flags.json) {
153
+ console.log(JSON.stringify(allDiffs, null, 2));
154
+ return;
155
+ }
156
+ for (const [wfName, changes] of Object.entries(allDiffs)) {
157
+ const modified = changes.filter((c) => c.status !== "unchanged");
158
+ if (modified.length === 0) {
159
+ console.log(`${wfName}: no changes`);
160
+ continue;
161
+ }
162
+ console.log(`\n${wfName}:`);
163
+ for (const c of changes) {
164
+ if (c.status === "unchanged")
165
+ continue;
166
+ console.log(` ${c.status.toUpperCase()} ${c.step}`);
167
+ if (c.diff) {
168
+ for (const line of c.diff.split("\n").slice(0, 20)) {
169
+ console.log(` ${line}`);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ return;
175
+ }
176
+ const workflowDir = path.resolve(requireFlag(flags, "workflow", "Workflow directory"));
177
+ const result = await syncStatus(client, workflowDir);
178
+ for (const c of result.changes) {
179
+ const icon = c.status === "unchanged" ? "-" : c.status === "modified" ? "M" : "+";
180
+ console.log(` ${icon} ${c.step}`);
181
+ if (c.diff) {
182
+ for (const line of c.diff.split("\n").slice(0, 20)) {
183
+ console.log(` ${line}`);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ function showHelp() {
189
+ console.log(`
190
+ Laminar CLI — manage workflows from the terminal
191
+
192
+ Usage:
193
+ laminar <command> [flags]
194
+
195
+ Commands:
196
+ init Scaffold a project from a Laminar workspace
197
+ --workspace <id> Workspace ID (required)
198
+ --output <dir> Output directory (default: .)
199
+
200
+ pull Download workflows from Laminar
201
+ --all Pull all workflows in laminar.json
202
+ --workflow <id> Pull a specific workflow ID
203
+ --output <dir> Output directory (with --workflow)
204
+ --project <dir> Project root (with --all, default: .)
205
+
206
+ push Deploy workflows to Laminar
207
+ --changed Push only modified workflows from laminar.json
208
+ --workflow <dir> Push a specific workflow directory
209
+ --project <dir> Project root (with --changed, default: .)
210
+
211
+ diff Compare local files against deployed
212
+ --all Diff all workflows in laminar.json
213
+ --json Output as JSON (for CI)
214
+ --workflow <dir> Diff a specific workflow directory
215
+ --project <dir> Project root (with --all, default: .)
216
+
217
+ help Show this message
218
+
219
+ Auth:
220
+ Set LAMINAR_API_KEY env var, or run laminar-mcp-setup first.
221
+ `);
222
+ }
223
+ // ── Main ─────────────────────────────────────────────────────
224
+ async function main() {
225
+ const { command, flags } = parseArgs(process.argv.slice(2));
226
+ if (command === "help" || flags.help) {
227
+ showHelp();
228
+ return;
229
+ }
230
+ const { auth, baseUrl } = resolveAuth();
231
+ const client = new LaminarClient(auth, baseUrl);
232
+ switch (command) {
233
+ case "init":
234
+ await cmdInit(client, flags);
235
+ break;
236
+ case "pull":
237
+ await cmdPull(client, flags);
238
+ break;
239
+ case "push":
240
+ await cmdPush(client, flags);
241
+ break;
242
+ case "diff":
243
+ case "status":
244
+ await cmdDiff(client, flags);
245
+ break;
246
+ default:
247
+ console.error(`Unknown command: ${command}`);
248
+ showHelp();
249
+ process.exit(1);
250
+ }
251
+ }
252
+ main().catch((err) => {
253
+ console.error(`Error: ${err.message}`);
254
+ process.exit(1);
255
+ });
256
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AACtE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAEvE,gEAAgE;AAEhE,SAAS,WAAW;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACrD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,OAAO;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE;gBACpD,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,yBAAyB;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,CAAC,KAAK,CACX,8DAA8D,CAC/D,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,gEAAgE;AAEhE,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,MAAM,KAAK,GAAqC,EAAE,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,IAAI,CAAC,KAAuC,EAAE,GAAW;IAChE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,KAAuC,EAAE,GAAW,EAAE,IAAY;IACrF,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,OAAO,CAAC,MAAqB,EAAE,KAAuC;IACnF,MAAM,WAAW,GAAG,QAAQ,CAC1B,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAChD,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,uCAAuC,WAAW,KAAK,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,eAAe,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAqB,EAAE,KAAuC;IACnF,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CACzB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAC9C,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAC5B,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CACjD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,YAAY,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAqB,EAAE,KAAuC;IACnF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,cAAc,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;YAC5D,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,CAAC,GAAG,CACT,WAAW,MAAM,CAAC,MAAM,CAAC,MAAM,cAAc,MAAM,CAAC,SAAS,CAAC,MAAM,eAAe,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS,CACjH,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAC9B,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,oBAAoB,CAAC,CACrD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,KAAK,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,WAAW,+BAA+B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAqB,EAAE,KAAuC;IACnF,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAwB,EAAE,CAAC;QAEzC,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACrD,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG;oBAClC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;iBACpD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAI,OAAiB,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAChC,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,CAAC,CAAC;gBACrC,SAAS;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,OAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;oBAAE,SAAS;gBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBACX,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;wBACnD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAC9B,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,oBAAoB,CAAC,CACrD,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,GACR,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCb,CAAC,CAAC;AACH,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,IAAI,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,QAAQ,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Optional service configuration for Minicor MCP.
3
+ *
4
+ * Priority: env vars > config file (~/.minicor/config.json, falls back to ~/.laminar/config.json)
5
+ */
6
+ export interface ElasticsearchConfig {
7
+ endpoint: string;
8
+ apiKey: string;
9
+ indexName?: string;
10
+ }
11
+ export interface CronConfig {
12
+ apiBase?: string;
13
+ apiKey: string;
14
+ }
15
+ export interface ServiceConfig {
16
+ elasticsearch?: ElasticsearchConfig;
17
+ cron?: CronConfig;
18
+ }
19
+ export declare function loadServiceConfig(): ServiceConfig;
20
+ export declare function saveServiceConfig(update: ServiceConfig): void;
21
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,wBAAgB,iBAAiB,IAAI,aAAa,CAkCjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAiBtD"}
package/dist/config.js ADDED
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Optional service configuration for Minicor MCP.
3
+ *
4
+ * Priority: env vars > config file (~/.minicor/config.json, falls back to ~/.laminar/config.json)
5
+ */
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { getConfigPath, getWriteConfigPath } from "./paths.js";
9
+ export function loadServiceConfig() {
10
+ const config = {};
11
+ if (process.env.ELASTICSEARCH_ENDPOINT && process.env.ELASTICSEARCH_API_KEY) {
12
+ config.elasticsearch = {
13
+ endpoint: process.env.ELASTICSEARCH_ENDPOINT,
14
+ apiKey: process.env.ELASTICSEARCH_API_KEY,
15
+ indexName: process.env.ELASTICSEARCH_INDEX_NAME,
16
+ };
17
+ }
18
+ if (process.env.CRON_API_KEY) {
19
+ config.cron = {
20
+ apiBase: process.env.CRON_API_BASE,
21
+ apiKey: process.env.CRON_API_KEY,
22
+ };
23
+ }
24
+ try {
25
+ const cfgPath = getConfigPath();
26
+ if (fs.existsSync(cfgPath)) {
27
+ const file = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
28
+ if (!config.elasticsearch && file.elasticsearch) {
29
+ config.elasticsearch = file.elasticsearch;
30
+ }
31
+ if (!config.cron && file.cron) {
32
+ config.cron = file.cron;
33
+ }
34
+ }
35
+ }
36
+ catch { }
37
+ return config;
38
+ }
39
+ export function saveServiceConfig(update) {
40
+ const writePath = getWriteConfigPath();
41
+ const dir = path.dirname(writePath);
42
+ if (!fs.existsSync(dir))
43
+ fs.mkdirSync(dir, { recursive: true });
44
+ let existing = {};
45
+ try {
46
+ const readPath = getConfigPath();
47
+ if (fs.existsSync(readPath)) {
48
+ existing = JSON.parse(fs.readFileSync(readPath, "utf-8"));
49
+ }
50
+ }
51
+ catch { }
52
+ const merged = { ...existing, ...update };
53
+ fs.writeFileSync(writePath, JSON.stringify(merged, null, 2) + "\n", {
54
+ mode: 0o600,
55
+ });
56
+ }
57
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkB/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC5E,MAAM,CAAC,aAAa,GAAG;YACrB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;YAC5C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;YACzC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,GAAG;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YAClC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAkB,IAAI,CAAC,KAAK,CACpC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAClC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAChD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,QAAQ,GAAkB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAClE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC"}
package/dist/diff.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Simple line-by-line diff using LCS.
3
+ * No external dependencies — good enough for workflow step sizes (< 500 lines).
4
+ * Outputs a context-limited diff (3 lines of context around changes).
5
+ */
6
+ export declare function computeDiff(a: string, b: string, labelA?: string, labelB?: string): string;
7
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyCH,wBAAgB,WAAW,CACzB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,SAAY,EAClB,MAAM,SAAa,GAClB,MAAM,CAuER"}
package/dist/diff.js ADDED
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Simple line-by-line diff using LCS.
3
+ * No external dependencies — good enough for workflow step sizes (< 500 lines).
4
+ * Outputs a context-limited diff (3 lines of context around changes).
5
+ */
6
+ const CONTEXT = 3;
7
+ function lcs(a, b) {
8
+ const n = a.length;
9
+ const m = b.length;
10
+ const dp = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
11
+ for (let i = 1; i <= n; i++) {
12
+ for (let j = 1; j <= m; j++) {
13
+ dp[i][j] =
14
+ a[i - 1] === b[j - 1]
15
+ ? dp[i - 1][j - 1] + 1
16
+ : Math.max(dp[i - 1][j], dp[i][j - 1]);
17
+ }
18
+ }
19
+ const result = [];
20
+ let i = n, j = m;
21
+ while (i > 0 && j > 0) {
22
+ if (a[i - 1] === b[j - 1]) {
23
+ result.unshift(a[--i]);
24
+ j--;
25
+ }
26
+ else if (dp[i - 1][j] > dp[i][j - 1]) {
27
+ i--;
28
+ }
29
+ else {
30
+ j--;
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+ export function computeDiff(a, b, labelA = "current", labelB = "proposed") {
36
+ if (a === b)
37
+ return "No differences found.";
38
+ const linesA = a.split("\n");
39
+ const linesB = b.split("\n");
40
+ const common = lcs(linesA, linesB);
41
+ // Build full diff ops list
42
+ const ops = [];
43
+ let iA = 0, iB = 0, iC = 0;
44
+ while (iA < linesA.length || iB < linesB.length) {
45
+ if (iC < common.length) {
46
+ while (iA < linesA.length && linesA[iA] !== common[iC]) {
47
+ ops.push({ type: "del", text: linesA[iA++] });
48
+ }
49
+ while (iB < linesB.length && linesB[iB] !== common[iC]) {
50
+ ops.push({ type: "add", text: linesB[iB++] });
51
+ }
52
+ ops.push({ type: "keep", text: common[iC] });
53
+ iA++;
54
+ iB++;
55
+ iC++;
56
+ }
57
+ else {
58
+ while (iA < linesA.length)
59
+ ops.push({ type: "del", text: linesA[iA++] });
60
+ while (iB < linesB.length)
61
+ ops.push({ type: "add", text: linesB[iB++] });
62
+ }
63
+ }
64
+ // Now emit only changes with CONTEXT lines of surrounding context.
65
+ // Find indices of change lines, then include nearby keep lines.
66
+ const changeIndices = new Set();
67
+ for (let i = 0; i < ops.length; i++) {
68
+ if (ops[i].type !== "keep") {
69
+ for (let j = Math.max(0, i - CONTEXT); j <= Math.min(ops.length - 1, i + CONTEXT); j++) {
70
+ changeIndices.add(j);
71
+ }
72
+ }
73
+ }
74
+ const out = [`--- ${labelA}`, `+++ ${labelB}`];
75
+ let lastEmitted = -2;
76
+ for (let i = 0; i < ops.length; i++) {
77
+ if (!changeIndices.has(i))
78
+ continue;
79
+ if (i > lastEmitted + 1) {
80
+ out.push("...");
81
+ }
82
+ const op = ops[i];
83
+ if (op.type === "keep")
84
+ out.push(` ${op.text}`);
85
+ else if (op.type === "del")
86
+ out.push(`- ${op.text}`);
87
+ else
88
+ out.push(`+ ${op.text}`);
89
+ lastEmitted = i;
90
+ }
91
+ const added = ops.filter((o) => o.type === "add").length;
92
+ const removed = ops.filter((o) => o.type === "del").length;
93
+ out.push("");
94
+ out.push(`Summary: +${added} -${removed} lines changed`);
95
+ return out.join("\n");
96
+ }
97
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,SAAS,GAAG,CAAC,CAAW,EAAE,CAAW;IACnC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,EAAE,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CACxD,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACzB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACN,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACnB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;oBACtB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,GAAG,CAAC,CAAC;IACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvC,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,WAAW,CACzB,CAAS,EACT,CAAS,EACT,MAAM,GAAG,SAAS,EAClB,MAAM,GAAG,UAAU;IAEnB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAE5C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,2BAA2B;IAC3B,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,IAAI,EAAE,GAAG,CAAC,EACR,EAAE,GAAG,CAAC,EACN,EAAE,GAAG,CAAC,CAAC;IAET,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7C,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;YACL,EAAE,EAAE,CAAC;QACP,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM;gBACvB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM;gBACvB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,gEAAgE;IAChE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,KACE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAChC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAC1C,CAAC,EAAE,EACH,CAAC;gBACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAa,CAAC,OAAO,MAAM,EAAE,EAAE,OAAO,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAEpC,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;aAC5C,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;;YAChD,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9B,WAAW,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,KAAK,OAAO,gBAAgB,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared MCP response helpers and error message constants.
3
+ */
4
+ export declare function json(data: unknown): string;
5
+ export declare function ok(data: unknown): {
6
+ content: {
7
+ type: "text";
8
+ text: string;
9
+ }[];
10
+ };
11
+ export declare function text(msg: string): {
12
+ content: {
13
+ type: "text";
14
+ text: string;
15
+ }[];
16
+ };
17
+ export declare function safe<T>(fn: () => Promise<T>): Promise<{
18
+ content: {
19
+ type: "text";
20
+ text: string;
21
+ }[];
22
+ }>;
23
+ export declare const NOT_CONFIGURED_ES = "Elasticsearch is not configured. Log search requires ES credentials.\n\n**Option 1 \u2014 Environment variables:**\n ELASTICSEARCH_ENDPOINT=https://your-es-cluster\n ELASTICSEARCH_API_KEY=your-api-key\n ELASTICSEARCH_INDEX_NAME=search-workflow-executions (optional)\n\n**Option 2 \u2014 Config file** (~/.laminar/config.json):\n {\n \"elasticsearch\": {\n \"endpoint\": \"https://your-es-cluster\",\n \"apiKey\": \"your-api-key\"\n }\n }\n\n**Option 3 \u2014 Run setup:** laminar-mcp-setup \u2192 Advanced Settings";
24
+ export declare const NOT_CONFIGURED_CRON = "CRON service is not configured. Scheduling requires CRON credentials.\n\n**Option 1 \u2014 Environment variables:**\n CRON_API_KEY=your-cron-api-key\n CRON_API_BASE=https://cron.laminar.run (optional)\n\n**Option 2 \u2014 Config file** (~/.laminar/config.json):\n {\n \"cron\": {\n \"apiKey\": \"your-cron-api-key\"\n }\n }\n\n**Option 3 \u2014 Run setup:** laminar-mcp-setup \u2192 Advanced Settings";
25
+ export declare const NOT_CONNECTED_VM = "No VM connected. Ask the user for their Cloudflare Tunnel URL for the Laminar Desktop Service, then call vm_connect.";
26
+ export declare const NOT_CONNECTED_BROWSER = "No browser RPA service connected. Call browser_connect with the service base URL and bearer token first.";
27
+ export declare function buildRpaProgram(pythonScript: string, pattern: "cloudflare_tunnel" | "channel", flowId: string, stepName: string, stepDescription: string): string;
28
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1C;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO;;;;;EAE/B;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM;;;;;EAE/B;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;;;;;GAMjD;AAED,eAAO,MAAM,iBAAiB,4hBAekC,CAAC;AAEjE,eAAO,MAAM,mBAAmB,oaAagC,CAAC;AAEjE,eAAO,MAAM,gBAAgB,yHAAyH,CAAC;AAEvJ,eAAO,MAAM,qBAAqB,6GAA6G,CAAC;AAEhJ,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAqCR"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Shared MCP response helpers and error message constants.
3
+ */
4
+ export function json(data) {
5
+ return JSON.stringify(data, null, 2);
6
+ }
7
+ export function ok(data) {
8
+ return { content: [{ type: "text", text: json(data) }] };
9
+ }
10
+ export function text(msg) {
11
+ return { content: [{ type: "text", text: msg }] };
12
+ }
13
+ export async function safe(fn) {
14
+ try {
15
+ return ok(await fn());
16
+ }
17
+ catch (e) {
18
+ return text(`Error: ${e.message}`);
19
+ }
20
+ }
21
+ export const NOT_CONFIGURED_ES = `Elasticsearch is not configured. Log search requires ES credentials.
22
+
23
+ **Option 1 — Environment variables:**
24
+ ELASTICSEARCH_ENDPOINT=https://your-es-cluster
25
+ ELASTICSEARCH_API_KEY=your-api-key
26
+ ELASTICSEARCH_INDEX_NAME=search-workflow-executions (optional)
27
+
28
+ **Option 2 — Config file** (~/.laminar/config.json):
29
+ {
30
+ "elasticsearch": {
31
+ "endpoint": "https://your-es-cluster",
32
+ "apiKey": "your-api-key"
33
+ }
34
+ }
35
+
36
+ **Option 3 — Run setup:** laminar-mcp-setup → Advanced Settings`;
37
+ export const NOT_CONFIGURED_CRON = `CRON service is not configured. Scheduling requires CRON credentials.
38
+
39
+ **Option 1 — Environment variables:**
40
+ CRON_API_KEY=your-cron-api-key
41
+ CRON_API_BASE=https://cron.laminar.run (optional)
42
+
43
+ **Option 2 — Config file** (~/.laminar/config.json):
44
+ {
45
+ "cron": {
46
+ "apiKey": "your-cron-api-key"
47
+ }
48
+ }
49
+
50
+ **Option 3 — Run setup:** laminar-mcp-setup → Advanced Settings`;
51
+ export const NOT_CONNECTED_VM = `No VM connected. Ask the user for their Cloudflare Tunnel URL for the Laminar Desktop Service, then call vm_connect.`;
52
+ export const NOT_CONNECTED_BROWSER = `No browser RPA service connected. Call browser_connect with the service base URL and bearer token first.`;
53
+ export function buildRpaProgram(pythonScript, pattern, flowId, stepName, stepDescription) {
54
+ const escaped = pythonScript.replace(/`/g, "\\`").replace(/\$/g, "\\$");
55
+ if (pattern === "channel") {
56
+ return `(data) => {
57
+ const pythonScript = \`
58
+ ${escaped}
59
+ \`;
60
+ return {
61
+ "lam.rpa": {
62
+ "script": pythonScript,
63
+ "channelId": "{{config.channelId}}"
64
+ }
65
+ };
66
+ }`;
67
+ }
68
+ return `(data) => {
69
+ const pythonScript = \`
70
+ ${escaped}
71
+ \`;
72
+ return {
73
+ "lam.httpRequest": {
74
+ "method": "POST",
75
+ "url": "{{config.laminar_desktop_service_url}}/execute",
76
+ "headers": {
77
+ "Content-Type": "application/json",
78
+ "X-API-Key": "{{config.laminar_desktop_service_api_key}}",
79
+ "X-Service-ID": "{{config.laminar_desktop_service_id}}"
80
+ },
81
+ "body": {
82
+ "flowId": "${flowId}",
83
+ "script": pythonScript,
84
+ "executionId": "1",
85
+ "step": { "id": "${flowId}", "name": "${stepName.replace(/"/g, '\\"')}", "description": "${stepDescription.replace(/"/g, '\\"')}", "versionId": "v1.0" }
86
+ }
87
+ }
88
+ };
89
+ }`;
90
+ }
91
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,IAAI,CAAC,IAAa;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,EAAoB;IAChD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;gEAe+B,CAAC;AAEjE,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;gEAa6B,CAAC;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,sHAAsH,CAAC;AAEvJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,0GAA0G,CAAC;AAEhJ,MAAM,UAAU,eAAe,CAC7B,YAAoB,EACpB,OAAwC,EACxC,MAAc,EACd,QAAgB,EAChB,eAAuB;IAEvB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;;EAET,OAAO;;;;;;;;EAQP,CAAC;IACD,CAAC;IACD,OAAO;;EAEP,OAAO;;;;;;;;;;;;qBAYY,MAAM;;;2BAGA,MAAM,eAAe,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,sBAAsB,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;;;EAIrI,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Minicor MCP Server (formerly Laminar)
4
+ *
5
+ * Brings your Minicor workspace into Cursor / Claude Code.
6
+ * Core tools always available; Elasticsearch + CRON unlock with advanced setup.
7
+ */
8
+ export declare function getApiBase(): string;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAkEH,wBAAgB,UAAU,IAAI,MAAM,CAKnC"}