@occam-scaly/mcp-server 0.1.2

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 (91) hide show
  1. package/README.md +166 -0
  2. package/bin/scaly-mcp.js +6 -0
  3. package/dist/audit.d.ts +25 -0
  4. package/dist/audit.d.ts.map +1 -0
  5. package/dist/audit.js +182 -0
  6. package/dist/audit.js.map +1 -0
  7. package/dist/client.d.ts +16 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +142 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +24 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +76 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +279 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/resources/index.d.ts +17 -0
  20. package/dist/resources/index.d.ts.map +1 -0
  21. package/dist/resources/index.js +505 -0
  22. package/dist/resources/index.js.map +1 -0
  23. package/dist/tools/addons.d.ts +3 -0
  24. package/dist/tools/addons.d.ts.map +1 -0
  25. package/dist/tools/addons.js +128 -0
  26. package/dist/tools/addons.js.map +1 -0
  27. package/dist/tools/apps.d.ts +3 -0
  28. package/dist/tools/apps.d.ts.map +1 -0
  29. package/dist/tools/apps.js +121 -0
  30. package/dist/tools/apps.js.map +1 -0
  31. package/dist/tools/compute.d.ts +3 -0
  32. package/dist/tools/compute.d.ts.map +1 -0
  33. package/dist/tools/compute.js +135 -0
  34. package/dist/tools/compute.js.map +1 -0
  35. package/dist/tools/db.d.ts +3 -0
  36. package/dist/tools/db.d.ts.map +1 -0
  37. package/dist/tools/db.js +597 -0
  38. package/dist/tools/db.js.map +1 -0
  39. package/dist/tools/deployments.d.ts +3 -0
  40. package/dist/tools/deployments.d.ts.map +1 -0
  41. package/dist/tools/deployments.js +354 -0
  42. package/dist/tools/deployments.js.map +1 -0
  43. package/dist/tools/diagnose.d.ts +3 -0
  44. package/dist/tools/diagnose.d.ts.map +1 -0
  45. package/dist/tools/diagnose.js +213 -0
  46. package/dist/tools/diagnose.js.map +1 -0
  47. package/dist/tools/env.d.ts +3 -0
  48. package/dist/tools/env.d.ts.map +1 -0
  49. package/dist/tools/env.js +216 -0
  50. package/dist/tools/env.js.map +1 -0
  51. package/dist/tools/index.d.ts +38 -0
  52. package/dist/tools/index.d.ts.map +1 -0
  53. package/dist/tools/index.js +48 -0
  54. package/dist/tools/index.js.map +1 -0
  55. package/dist/tools/jobs.d.ts +3 -0
  56. package/dist/tools/jobs.d.ts.map +1 -0
  57. package/dist/tools/jobs.js +160 -0
  58. package/dist/tools/jobs.js.map +1 -0
  59. package/dist/tools/logs.d.ts +3 -0
  60. package/dist/tools/logs.d.ts.map +1 -0
  61. package/dist/tools/logs.js +157 -0
  62. package/dist/tools/logs.js.map +1 -0
  63. package/dist/tools/operations.d.ts +3 -0
  64. package/dist/tools/operations.d.ts.map +1 -0
  65. package/dist/tools/operations.js +262 -0
  66. package/dist/tools/operations.js.map +1 -0
  67. package/dist/tools/project.d.ts +3 -0
  68. package/dist/tools/project.d.ts.map +1 -0
  69. package/dist/tools/project.js +341 -0
  70. package/dist/tools/project.js.map +1 -0
  71. package/dist/tools/s3.d.ts +3 -0
  72. package/dist/tools/s3.d.ts.map +1 -0
  73. package/dist/tools/s3.js +256 -0
  74. package/dist/tools/s3.js.map +1 -0
  75. package/dist/tools/status.d.ts +3 -0
  76. package/dist/tools/status.d.ts.map +1 -0
  77. package/dist/tools/status.js +139 -0
  78. package/dist/tools/status.js.map +1 -0
  79. package/dist/tools/write.d.ts +3 -0
  80. package/dist/tools/write.d.ts.map +1 -0
  81. package/dist/tools/write.js +900 -0
  82. package/dist/tools/write.js.map +1 -0
  83. package/dist/utils/jwt.d.ts +3 -0
  84. package/dist/utils/jwt.d.ts.map +1 -0
  85. package/dist/utils/jwt.js +32 -0
  86. package/dist/utils/jwt.js.map +1 -0
  87. package/dist/utils/paths.d.ts +5 -0
  88. package/dist/utils/paths.d.ts.map +1 -0
  89. package/dist/utils/paths.js +26 -0
  90. package/dist/utils/paths.js.map +1 -0
  91. package/package.json +50 -0
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deploymentTools = void 0;
4
+ const zod_1 = require("zod");
5
+ const client_js_1 = require("../client.js");
6
+ const index_js_1 = require("./index.js");
7
+ const ListDeploymentsSchema = zod_1.z.object({
8
+ app_id: zod_1.z.string().optional().describe('Filter deployments by app ID'),
9
+ stack_id: zod_1.z.string().optional().describe('Filter deployments by stack ID'),
10
+ limit: zod_1.z
11
+ .number()
12
+ .int()
13
+ .min(1)
14
+ .max(50)
15
+ .optional()
16
+ .default(10)
17
+ .describe('Number of deployments to return (max 50)')
18
+ });
19
+ const GetDeploymentSchema = zod_1.z.object({
20
+ deployment_id: zod_1.z.string().describe('The deployment ID'),
21
+ include_logs: zod_1.z
22
+ .boolean()
23
+ .optional()
24
+ .default(false)
25
+ .describe('Include recent log lines from the deployment')
26
+ });
27
+ const DeployAppSchema = zod_1.z.object({
28
+ app_id: zod_1.z.string().describe('The app ID to deploy'),
29
+ wait: zod_1.z
30
+ .boolean()
31
+ .optional()
32
+ .default(false)
33
+ .describe('If true, wait for completion (prefer scaly_wait_operation)')
34
+ });
35
+ const RestartStackServicesSchema = zod_1.z.object({
36
+ stack_id: zod_1.z.string().describe('The stack ID to restart services for')
37
+ });
38
+ const RetryDeploymentSchema = zod_1.z.object({
39
+ deployment_id: zod_1.z.string().describe('A failed deployment ID to retry')
40
+ });
41
+ exports.deploymentTools = [
42
+ {
43
+ name: 'scaly_list_deployments',
44
+ description: 'List recent deployments. Filter by app_id and/or stack_id.',
45
+ inputSchema: ListDeploymentsSchema,
46
+ handler: async (input) => {
47
+ try {
48
+ const where = {};
49
+ if (input.app_id)
50
+ where.appId = { equals: input.app_id };
51
+ if (input.stack_id)
52
+ where.stackId = { equals: input.stack_id };
53
+ const gql = `
54
+ query ListDeployments($where: DeploymentWhereInput, $take: Int, $orderBy: [DeploymentOrderByInput!]) {
55
+ listDeployments(where: $where, take: $take, orderBy: $orderBy) {
56
+ id
57
+ status
58
+ resourceType
59
+ stackId
60
+ appId
61
+ description
62
+ queuedAt
63
+ startedAt
64
+ finishedAt
65
+ progressPct
66
+ step
67
+ errorCode
68
+ errorMessage
69
+ remediationHint
70
+ }
71
+ }
72
+ `;
73
+ const result = await (0, client_js_1.query)(gql, {
74
+ where: Object.keys(where).length ? where : undefined,
75
+ take: input.limit,
76
+ orderBy: [{ queuedAt: 'desc' }]
77
+ });
78
+ const deployments = result.listDeployments || [];
79
+ return (0, index_js_1.ok)({ deployments, count: deployments.length });
80
+ }
81
+ catch (err) {
82
+ return (0, index_js_1.fail)({
83
+ code: 'INTERNAL_ERROR',
84
+ message: err.message,
85
+ retriable: true
86
+ });
87
+ }
88
+ }
89
+ },
90
+ {
91
+ name: 'scaly_get_deployment',
92
+ description: 'Get deployment status/details. Optionally include recent deployment logs.',
93
+ inputSchema: GetDeploymentSchema,
94
+ handler: async (input) => {
95
+ try {
96
+ const gql = `
97
+ query GetDeployment($where: DeploymentWhereUniqueInput!) {
98
+ getDeployment(where: $where) {
99
+ id
100
+ status
101
+ resourceType
102
+ stackId
103
+ appId
104
+ description
105
+ queuedAt
106
+ startedAt
107
+ finishedAt
108
+ progressPct
109
+ step
110
+ errorCode
111
+ errorMessage
112
+ remediationHint
113
+ logStreamNames
114
+ metadata
115
+ logs @include(if: ${input.include_logs ? 'true' : 'false'}) {
116
+ timestamp
117
+ message
118
+ logStreamName
119
+ }
120
+ }
121
+ }
122
+ `;
123
+ const result = await (0, client_js_1.query)(gql, {
124
+ where: { id: input.deployment_id }
125
+ });
126
+ if (!result.getDeployment) {
127
+ return (0, index_js_1.fail)({
128
+ code: 'RESOURCE_NOT_FOUND',
129
+ message: `Deployment not found: ${input.deployment_id}`,
130
+ retriable: false
131
+ });
132
+ }
133
+ return (0, index_js_1.ok)({ deployment: result.getDeployment });
134
+ }
135
+ catch (err) {
136
+ return (0, index_js_1.fail)({
137
+ code: 'INTERNAL_ERROR',
138
+ message: err.message,
139
+ retriable: true
140
+ });
141
+ }
142
+ }
143
+ },
144
+ {
145
+ name: 'scaly_get_deployment_status',
146
+ description: 'DEPRECATED alias for scaly_get_deployment (kept for backward compatibility).',
147
+ inputSchema: GetDeploymentSchema,
148
+ handler: async (input) => {
149
+ try {
150
+ const gql = `
151
+ query GetDeployment($where: DeploymentWhereUniqueInput!) {
152
+ getDeployment(where: $where) {
153
+ id
154
+ status
155
+ resourceType
156
+ stackId
157
+ appId
158
+ description
159
+ queuedAt
160
+ startedAt
161
+ finishedAt
162
+ progressPct
163
+ step
164
+ errorCode
165
+ errorMessage
166
+ remediationHint
167
+ }
168
+ }
169
+ `;
170
+ const result = await (0, client_js_1.query)(gql, {
171
+ where: { id: input.deployment_id }
172
+ });
173
+ if (!result.getDeployment) {
174
+ return (0, index_js_1.fail)({
175
+ code: 'RESOURCE_NOT_FOUND',
176
+ message: `Deployment not found: ${input.deployment_id}`,
177
+ retriable: false
178
+ });
179
+ }
180
+ return (0, index_js_1.ok)({ deployment: result.getDeployment });
181
+ }
182
+ catch (err) {
183
+ return (0, index_js_1.fail)({
184
+ code: 'INTERNAL_ERROR',
185
+ message: err.message,
186
+ retriable: true
187
+ });
188
+ }
189
+ }
190
+ },
191
+ {
192
+ name: 'scaly_restart_stack_services',
193
+ description: 'Restart services for a stack (forces a new ECS deployment). Returns a deployment record.',
194
+ inputSchema: RestartStackServicesSchema,
195
+ handler: async (input) => {
196
+ try {
197
+ const gql = `
198
+ mutation RestartStackServices($stackId: String!) {
199
+ restartStackServices(stackId: $stackId) {
200
+ id
201
+ status
202
+ resourceType
203
+ stackId
204
+ appId
205
+ description
206
+ queuedAt
207
+ startedAt
208
+ finishedAt
209
+ progressPct
210
+ step
211
+ errorCode
212
+ errorMessage
213
+ remediationHint
214
+ }
215
+ }
216
+ `;
217
+ const result = await (0, client_js_1.query)(gql, {
218
+ stackId: input.stack_id
219
+ });
220
+ return (0, index_js_1.ok)({
221
+ deployment: result.restartStackServices,
222
+ operation_id: result.restartStackServices.id
223
+ });
224
+ }
225
+ catch (err) {
226
+ return (0, index_js_1.fail)({
227
+ code: 'INTERNAL_ERROR',
228
+ message: err.message,
229
+ retriable: true
230
+ });
231
+ }
232
+ }
233
+ },
234
+ {
235
+ name: 'scaly_retry_deployment',
236
+ description: 'Retry a failed deployment. Returns a new deployment record.',
237
+ inputSchema: RetryDeploymentSchema,
238
+ handler: async (input) => {
239
+ try {
240
+ const gql = `
241
+ mutation RetryDeployment($id: String!) {
242
+ retryDeployment(id: $id) {
243
+ id
244
+ status
245
+ resourceType
246
+ stackId
247
+ appId
248
+ description
249
+ queuedAt
250
+ startedAt
251
+ finishedAt
252
+ progressPct
253
+ step
254
+ errorCode
255
+ errorMessage
256
+ remediationHint
257
+ }
258
+ }
259
+ `;
260
+ const result = await (0, client_js_1.query)(gql, {
261
+ id: input.deployment_id
262
+ });
263
+ return (0, index_js_1.ok)({
264
+ deployment: result.retryDeployment,
265
+ operation_id: result.retryDeployment.id
266
+ });
267
+ }
268
+ catch (err) {
269
+ return (0, index_js_1.fail)({
270
+ code: 'INTERNAL_ERROR',
271
+ message: err.message,
272
+ retriable: true
273
+ });
274
+ }
275
+ }
276
+ },
277
+ {
278
+ name: 'scaly_deploy_app',
279
+ description: 'Deploy an app by restarting its stack services (forces a new ECS deployment).',
280
+ inputSchema: DeployAppSchema,
281
+ handler: async (input) => {
282
+ try {
283
+ const getAppGql = `
284
+ query GetApp($where: AppWhereUniqueInput!) {
285
+ getApp(where: $where) {
286
+ id
287
+ name
288
+ stackId
289
+ }
290
+ }
291
+ `;
292
+ const appResult = await (0, client_js_1.query)(getAppGql, {
293
+ where: { id: input.app_id }
294
+ });
295
+ if (!appResult.getApp) {
296
+ return (0, index_js_1.fail)({
297
+ code: 'RESOURCE_NOT_FOUND',
298
+ message: `App not found: ${input.app_id}`,
299
+ retriable: false
300
+ });
301
+ }
302
+ const app = appResult.getApp;
303
+ if (!app.stackId) {
304
+ return (0, index_js_1.fail)({
305
+ code: 'INTERNAL_ERROR',
306
+ message: `App has no stackId: ${input.app_id}`,
307
+ retriable: false
308
+ });
309
+ }
310
+ const deployGql = `
311
+ mutation RestartStackServices($stackId: String!) {
312
+ restartStackServices(stackId: $stackId) {
313
+ id
314
+ status
315
+ resourceType
316
+ stackId
317
+ appId
318
+ description
319
+ queuedAt
320
+ startedAt
321
+ finishedAt
322
+ progressPct
323
+ step
324
+ errorCode
325
+ errorMessage
326
+ remediationHint
327
+ }
328
+ }
329
+ `;
330
+ const deployResult = await (0, client_js_1.query)(deployGql, {
331
+ stackId: app.stackId
332
+ });
333
+ return (0, index_js_1.ok)({
334
+ app: { id: app.id, name: app.name, stack_id: app.stackId },
335
+ deployment: deployResult.restartStackServices,
336
+ operation_id: deployResult.restartStackServices.id,
337
+ wait_supported: false,
338
+ next: {
339
+ tool: 'scaly_wait_operation',
340
+ operation_id: deployResult.restartStackServices.id
341
+ }
342
+ });
343
+ }
344
+ catch (err) {
345
+ return (0, index_js_1.fail)({
346
+ code: 'INTERNAL_ERROR',
347
+ message: err.message,
348
+ retriable: true
349
+ });
350
+ }
351
+ }
352
+ }
353
+ ];
354
+ //# sourceMappingURL=deployments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/tools/deployments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from './index.js';
2
+ export declare const diagnoseTools: ToolDefinition[];
3
+ //# sourceMappingURL=diagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,YAAY,CAAC;AAuL3D,eAAO,MAAM,aAAa,EAAE,cAAc,EAmGzC,CAAC"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.diagnoseTools = void 0;
4
+ const zod_1 = require("zod");
5
+ const client_js_1 = require("../client.js");
6
+ const index_js_1 = require("./index.js");
7
+ const DiagnoseAppSchema = zod_1.z.object({
8
+ app_id: zod_1.z.string().describe('The app ID to diagnose')
9
+ });
10
+ function statusIcon(status) {
11
+ switch (status) {
12
+ case 'pass':
13
+ return 'pass';
14
+ case 'warn':
15
+ return 'warn';
16
+ case 'fail':
17
+ return 'fail';
18
+ }
19
+ }
20
+ function runDiagnostics(app, recentDeployments) {
21
+ const checks = [];
22
+ // App status
23
+ if (app.status === 'Active') {
24
+ checks.push({
25
+ name: 'App Status',
26
+ status: 'pass',
27
+ message: 'App is running'
28
+ });
29
+ }
30
+ else if (app.status === 'Deploying') {
31
+ checks.push({
32
+ name: 'App Status',
33
+ status: 'warn',
34
+ message: 'App is currently deploying',
35
+ detail: 'Wait for deployment to complete'
36
+ });
37
+ }
38
+ else {
39
+ checks.push({
40
+ name: 'App Status',
41
+ status: 'fail',
42
+ message: `App status is ${app.status ?? 'unknown'}`
43
+ });
44
+ }
45
+ // Stack status
46
+ if (app.stack) {
47
+ if (app.stack.status === 'Active') {
48
+ checks.push({
49
+ name: 'Stack Status',
50
+ status: 'pass',
51
+ message: `Stack "${app.stack.name ?? app.stack.id}" is healthy`
52
+ });
53
+ }
54
+ else {
55
+ checks.push({
56
+ name: 'Stack Status',
57
+ status: 'fail',
58
+ message: `Stack "${app.stack.name ?? app.stack.id}" status is ${app.stack.status ?? 'unknown'}`
59
+ });
60
+ }
61
+ }
62
+ else {
63
+ checks.push({
64
+ name: 'Stack Status',
65
+ status: 'warn',
66
+ message: 'App stack is unknown'
67
+ });
68
+ }
69
+ // Recent deployment
70
+ const last = recentDeployments[0];
71
+ if (!last) {
72
+ checks.push({
73
+ name: 'Last Deployment',
74
+ status: 'warn',
75
+ message: 'No recent deployments found'
76
+ });
77
+ }
78
+ else if (last.status === 'Success' ||
79
+ last.status === 'Successful' ||
80
+ last.status === 'successful') {
81
+ checks.push({
82
+ name: 'Last Deployment',
83
+ status: 'pass',
84
+ message: 'Last deployment succeeded'
85
+ });
86
+ }
87
+ else if (String(last.status).toLowerCase() === 'failed' ||
88
+ String(last.status).toLowerCase() === 'error') {
89
+ checks.push({
90
+ name: 'Last Deployment',
91
+ status: 'fail',
92
+ message: 'Last deployment failed',
93
+ detail: last.errorMessage ?? last.errorCode ?? 'Unknown error'
94
+ });
95
+ }
96
+ else {
97
+ checks.push({
98
+ name: 'Last Deployment',
99
+ status: 'warn',
100
+ message: `Last deployment status: ${last.status ?? 'unknown'}`
101
+ });
102
+ }
103
+ // Env vars (count only – values can contain secrets)
104
+ const envVarCount = Array.isArray(app.envVars) ? app.envVars.length : 0;
105
+ checks.push({
106
+ name: 'Environment Variables',
107
+ status: envVarCount === 0 ? 'warn' : 'pass',
108
+ message: envVarCount === 0
109
+ ? 'No environment variables configured'
110
+ : `${envVarCount} environment variable(s) configured`
111
+ });
112
+ // Failure pattern
113
+ const failedCount = recentDeployments.filter((d) => ['failed', 'error'].includes(String(d.status ?? '').toLowerCase())).length;
114
+ if (failedCount >= 3) {
115
+ checks.push({
116
+ name: 'Deployment Pattern',
117
+ status: 'fail',
118
+ message: `${failedCount} of the last ${recentDeployments.length} deployments failed`,
119
+ detail: 'There may be a persistent issue; inspect logs and remediation hints.'
120
+ });
121
+ }
122
+ return checks;
123
+ }
124
+ exports.diagnoseTools = [
125
+ {
126
+ name: 'scaly_diagnose_app',
127
+ description: 'Run lightweight diagnostics on an app (status, stack health, recent deployments, configuration).',
128
+ inputSchema: DiagnoseAppSchema,
129
+ handler: async (input) => {
130
+ try {
131
+ const getAppGql = `
132
+ query GetApp($where: AppWhereUniqueInput!) {
133
+ getApp(where: $where) {
134
+ id
135
+ name
136
+ status
137
+ stackId
138
+ accountId
139
+ envVars {
140
+ id
141
+ name
142
+ }
143
+ stack {
144
+ id
145
+ name
146
+ status
147
+ size
148
+ minIdle
149
+ }
150
+ }
151
+ }
152
+ `;
153
+ const appResult = await (0, client_js_1.query)(getAppGql, {
154
+ where: { id: input.app_id }
155
+ });
156
+ if (!appResult.getApp) {
157
+ return (0, index_js_1.fail)({
158
+ code: 'RESOURCE_NOT_FOUND',
159
+ message: `App not found: ${input.app_id}`,
160
+ retriable: false
161
+ });
162
+ }
163
+ const app = appResult.getApp;
164
+ const deploymentsGql = `
165
+ query ListDeployments($where: DeploymentWhereInput, $take: Int, $orderBy: [DeploymentOrderByInput!]) {
166
+ listDeployments(where: $where, take: $take, orderBy: $orderBy) {
167
+ id
168
+ status
169
+ queuedAt
170
+ startedAt
171
+ finishedAt
172
+ errorCode
173
+ errorMessage
174
+ remediationHint
175
+ }
176
+ }
177
+ `;
178
+ const deploymentsResult = await (0, client_js_1.query)(deploymentsGql, {
179
+ where: { appId: { equals: input.app_id } },
180
+ take: 5,
181
+ orderBy: [{ queuedAt: 'desc' }]
182
+ });
183
+ const deployments = deploymentsResult.listDeployments || [];
184
+ const checks = runDiagnostics(app, deployments);
185
+ const summary = {
186
+ pass: checks.filter((c) => c.status === 'pass').length,
187
+ warn: checks.filter((c) => c.status === 'warn').length,
188
+ fail: checks.filter((c) => c.status === 'fail').length,
189
+ total: checks.length
190
+ };
191
+ return (0, index_js_1.ok)({
192
+ app: {
193
+ id: app.id,
194
+ name: app.name,
195
+ status: app.status,
196
+ stack_id: app.stackId
197
+ },
198
+ summary,
199
+ checks: checks.map((c) => ({ ...c, status: statusIcon(c.status) })),
200
+ recent_deployments: deployments
201
+ });
202
+ }
203
+ catch (err) {
204
+ return (0, index_js_1.fail)({
205
+ code: 'INTERNAL_ERROR',
206
+ message: err.message,
207
+ retriable: true
208
+ });
209
+ }
210
+ }
211
+ }
212
+ ];
213
+ //# sourceMappingURL=diagnose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from './index.js';
2
+ export declare const envTools: ToolDefinition[];
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/tools/env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,YAAY,CAAC;AA+H3D,eAAO,MAAM,QAAQ,EAAE,cAAc,EAwHpC,CAAC"}