@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,3 @@
1
+ import { type ToolDefinition } from './index.js';
2
+ export declare const operationTools: ToolDefinition[];
3
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,YAAY,CAAC;AA0L3D,eAAO,MAAM,cAAc,EAAE,cAAc,EAyI1C,CAAC"}
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.operationTools = 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 GetOperationSchema = zod_1.z.object({
8
+ operation_id: zod_1.z.string().describe('Operation ID (currently: deployment ID)')
9
+ });
10
+ const WaitOperationSchema = zod_1.z.object({
11
+ operation_id: zod_1.z.string().describe('Operation ID (currently: deployment ID)'),
12
+ timeout_ms: zod_1.z
13
+ .number()
14
+ .int()
15
+ .min(1)
16
+ .max(10 * 60 * 1000)
17
+ .optional()
18
+ .default(60_000)
19
+ .describe('Max time to wait in milliseconds (max 10 minutes)'),
20
+ poll_interval_ms: zod_1.z
21
+ .number()
22
+ .int()
23
+ .min(250)
24
+ .max(30_000)
25
+ .optional()
26
+ .default(2_000)
27
+ .describe('Polling interval in milliseconds')
28
+ });
29
+ const GetOperationEventsSchema = zod_1.z.object({
30
+ operation_id: zod_1.z.string().describe('Operation ID (currently: deployment ID)'),
31
+ limit: zod_1.z
32
+ .number()
33
+ .int()
34
+ .min(1)
35
+ .max(200)
36
+ .optional()
37
+ .default(50)
38
+ .describe('Max number of events/log lines to return')
39
+ });
40
+ const CancelOperationSchema = zod_1.z.object({
41
+ operation_id: zod_1.z.string().describe('Operation ID to cancel'),
42
+ confirm: zod_1.z
43
+ .literal(true)
44
+ .describe('Must be true to confirm cancellation attempt')
45
+ });
46
+ function mapDeploymentStatusToOperationStatus(status) {
47
+ switch (status) {
48
+ case 'Queued':
49
+ case 'Pending':
50
+ return 'pending';
51
+ case 'Deploying':
52
+ return 'running';
53
+ case 'Successful':
54
+ return 'completed';
55
+ case 'Failed':
56
+ return 'failed';
57
+ case 'Cancelled':
58
+ case 'Canceled':
59
+ case 'CancelledByUser':
60
+ case 'CanceledByUser':
61
+ return 'canceled';
62
+ default:
63
+ return 'running';
64
+ }
65
+ }
66
+ function toOperation(deployment) {
67
+ const status = mapDeploymentStatusToOperationStatus(deployment.status);
68
+ const resourceId = deployment.resourceType === 'APP'
69
+ ? deployment.appId
70
+ : deployment.resourceType === 'STACK'
71
+ ? deployment.stackId
72
+ : (deployment.stackId ?? deployment.appId ?? null);
73
+ return {
74
+ operation_id: deployment.id,
75
+ kind: `deployment.${String(deployment.resourceType).toLowerCase()}`,
76
+ status,
77
+ progress: {
78
+ percent: deployment.progressPct ?? undefined,
79
+ message: deployment.description,
80
+ current_step: deployment.step
81
+ },
82
+ resource: resourceId
83
+ ? { type: String(deployment.resourceType).toLowerCase(), id: resourceId }
84
+ : undefined,
85
+ created_at: deployment.createdAt,
86
+ started_at: deployment.startedAt,
87
+ updated_at: deployment.updatedAt,
88
+ completed_at: deployment.finishedAt,
89
+ result: status === 'completed'
90
+ ? { deployment_id: deployment.id, status: deployment.status }
91
+ : undefined,
92
+ error: status === 'failed'
93
+ ? {
94
+ code: deployment.errorCode ?? 'DEPLOYMENT_FAILED',
95
+ message: deployment.errorMessage ?? 'Deployment failed',
96
+ details: {
97
+ remediation_hint: deployment.remediationHint ?? undefined
98
+ }
99
+ }
100
+ : undefined
101
+ };
102
+ }
103
+ async function getDeploymentById(id) {
104
+ const gql = `
105
+ query GetDeployment($where: DeploymentWhereUniqueInput!) {
106
+ getDeployment(where: $where) {
107
+ id
108
+ status
109
+ resourceType
110
+ stackId
111
+ appId
112
+ description
113
+ queuedAt
114
+ startedAt
115
+ finishedAt
116
+ durationMs
117
+ step
118
+ progressPct
119
+ errorCode
120
+ errorMessage
121
+ remediationHint
122
+ logStreamNames
123
+ metadata
124
+ logs {
125
+ timestamp
126
+ message
127
+ logStreamName
128
+ }
129
+ createdAt
130
+ updatedAt
131
+ }
132
+ }
133
+ `;
134
+ const result = await (0, client_js_1.query)(gql, { where: { id } });
135
+ return result.getDeployment ?? null;
136
+ }
137
+ exports.operationTools = [
138
+ {
139
+ name: 'scaly_get_operation',
140
+ description: 'Get async operation status (currently backed by deployments). Returns ScalyOperation JSON.',
141
+ inputSchema: GetOperationSchema,
142
+ handler: async (input) => {
143
+ try {
144
+ const deployment = await getDeploymentById(input.operation_id);
145
+ if (!deployment) {
146
+ return (0, index_js_1.fail)({
147
+ code: 'RESOURCE_NOT_FOUND',
148
+ message: `Operation not found: ${input.operation_id}`,
149
+ retriable: false
150
+ });
151
+ }
152
+ return (0, index_js_1.ok)({ operation: toOperation(deployment) });
153
+ }
154
+ catch (err) {
155
+ return (0, index_js_1.fail)({
156
+ code: 'INTERNAL_ERROR',
157
+ message: err.message,
158
+ retriable: true
159
+ });
160
+ }
161
+ }
162
+ },
163
+ {
164
+ name: 'scaly_get_operation_events',
165
+ description: 'Get operation events/log lines (currently backed by deployment logs).',
166
+ inputSchema: GetOperationEventsSchema,
167
+ handler: async (input) => {
168
+ try {
169
+ const deployment = await getDeploymentById(input.operation_id);
170
+ if (!deployment) {
171
+ return (0, index_js_1.fail)({
172
+ code: 'RESOURCE_NOT_FOUND',
173
+ message: `Operation not found: ${input.operation_id}`,
174
+ retriable: false
175
+ });
176
+ }
177
+ const events = (deployment.logs || []).slice(-input.limit).map((e) => ({
178
+ timestamp: e.timestamp,
179
+ type: 'log',
180
+ message: e.message,
181
+ log_stream_name: e.logStreamName ?? undefined
182
+ }));
183
+ return (0, index_js_1.ok)({
184
+ operation_id: deployment.id,
185
+ events
186
+ });
187
+ }
188
+ catch (err) {
189
+ return (0, index_js_1.fail)({
190
+ code: 'INTERNAL_ERROR',
191
+ message: err.message,
192
+ retriable: true
193
+ });
194
+ }
195
+ }
196
+ },
197
+ {
198
+ name: 'scaly_wait_operation',
199
+ description: 'Wait for an operation to complete/fail. If timeout is reached, returns OPERATION_PENDING with retry_after_ms.',
200
+ inputSchema: WaitOperationSchema,
201
+ handler: async (input) => {
202
+ const started = Date.now();
203
+ const deadline = started + input.timeout_ms;
204
+ try {
205
+ while (Date.now() < deadline) {
206
+ const deployment = await getDeploymentById(input.operation_id);
207
+ if (!deployment) {
208
+ return (0, index_js_1.fail)({
209
+ code: 'RESOURCE_NOT_FOUND',
210
+ message: `Operation not found: ${input.operation_id}`,
211
+ retriable: false
212
+ });
213
+ }
214
+ const operation = toOperation(deployment);
215
+ if (operation.status === 'completed' ||
216
+ operation.status === 'failed' ||
217
+ operation.status === 'canceled') {
218
+ return (0, index_js_1.ok)({ operation });
219
+ }
220
+ await new Promise((r) => setTimeout(r, input.poll_interval_ms));
221
+ }
222
+ const deployment = await getDeploymentById(input.operation_id);
223
+ if (!deployment) {
224
+ return (0, index_js_1.fail)({
225
+ code: 'RESOURCE_NOT_FOUND',
226
+ message: `Operation not found: ${input.operation_id}`,
227
+ retriable: false
228
+ });
229
+ }
230
+ return (0, index_js_1.fail)({
231
+ code: 'OPERATION_PENDING',
232
+ message: 'Operation still running after timeout',
233
+ retriable: true,
234
+ retry_after_ms: Math.max(input.poll_interval_ms, 1_000)
235
+ }, {
236
+ operation: toOperation(deployment),
237
+ elapsed_ms: Date.now() - started
238
+ });
239
+ }
240
+ catch (err) {
241
+ return (0, index_js_1.fail)({
242
+ code: 'INTERNAL_ERROR',
243
+ message: err.message,
244
+ retriable: true
245
+ });
246
+ }
247
+ }
248
+ },
249
+ {
250
+ name: 'scaly_cancel_operation',
251
+ description: 'Cancel an operation (not supported for deployments yet).',
252
+ inputSchema: CancelOperationSchema,
253
+ handler: async (input) => {
254
+ return (0, index_js_1.fail)({
255
+ code: 'NOT_SUPPORTED',
256
+ message: `Operation cancellation is not supported yet: ${input.operation_id}`,
257
+ retriable: false
258
+ });
259
+ }
260
+ }
261
+ ];
262
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from './index.js';
2
+ export declare const projectTools: ToolDefinition[];
3
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAqP3D,eAAO,MAAM,YAAY,EAAE,cAAc,EA0IxC,CAAC"}
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.projectTools = void 0;
7
+ const zod_1 = require("zod");
8
+ const node_child_process_1 = require("node:child_process");
9
+ const node_fs_1 = require("node:fs");
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const index_js_1 = require("./index.js");
13
+ function isProbablyPath(p) {
14
+ return p.includes('/') || p.includes('\\') || p.endsWith('.js');
15
+ }
16
+ async function ensureDir(dir) {
17
+ const s = await (0, promises_1.stat)(dir);
18
+ if (!s.isDirectory()) {
19
+ throw new Error(`Not a directory: ${dir}`);
20
+ }
21
+ }
22
+ function findScalyCliScript(startDir) {
23
+ let current = node_path_1.default.resolve(startDir);
24
+ // eslint-disable-next-line no-constant-condition
25
+ while (true) {
26
+ const candidate = node_path_1.default.join(current, 'packages', 'scaly-cli', 'bin', 'scaly.js');
27
+ if ((0, node_fs_1.existsSync)(candidate))
28
+ return candidate;
29
+ const parent = node_path_1.default.dirname(current);
30
+ if (parent === current)
31
+ return null;
32
+ current = parent;
33
+ }
34
+ }
35
+ function resolveScalyCliCommand(cwd) {
36
+ const override = process.env.SCALY_CLI_BIN;
37
+ if (override) {
38
+ const trimmed = override.trim();
39
+ if (trimmed.endsWith('.js') || isProbablyPath(trimmed)) {
40
+ return { command: process.execPath, baseArgs: [trimmed] };
41
+ }
42
+ return { command: trimmed, baseArgs: [] };
43
+ }
44
+ // Prefer installed `scaly` on PATH.
45
+ return { command: 'scaly', baseArgs: [] };
46
+ }
47
+ async function runJsonCli({ cwd, args }) {
48
+ const { command, baseArgs } = resolveScalyCliCommand(cwd);
49
+ const resolvedArgs = [...baseArgs, ...args];
50
+ const attempt = async (cmd, cmdArgs) => {
51
+ return await new Promise((resolve, reject) => {
52
+ const child = (0, node_child_process_1.spawn)(cmd, cmdArgs, {
53
+ cwd,
54
+ stdio: ['ignore', 'pipe', 'pipe'],
55
+ env: process.env
56
+ });
57
+ let stdout = '';
58
+ let stderr = '';
59
+ child.stdout.on('data', (d) => (stdout += d.toString('utf8')));
60
+ child.stderr.on('data', (d) => (stderr += d.toString('utf8')));
61
+ child.on('error', (err) => reject(err));
62
+ child.on('close', (code) => resolve({ code, stdout, stderr }));
63
+ });
64
+ };
65
+ try {
66
+ const res = await attempt(command, resolvedArgs);
67
+ if (res.code !== 0) {
68
+ const e = new Error(res.stderr.trim() || `CLI exited with ${res.code}`);
69
+ e.code = 'CLI_EXIT_NONZERO';
70
+ e.details = {
71
+ stdout: res.stdout,
72
+ stderr: res.stderr,
73
+ exit_code: res.code
74
+ };
75
+ throw e;
76
+ }
77
+ try {
78
+ return JSON.parse(res.stdout);
79
+ }
80
+ catch (err) {
81
+ const e = new Error(`Failed to parse CLI JSON output: ${err.message}`);
82
+ e.code = 'CLI_JSON_PARSE_FAILED';
83
+ e.details = { stdout: res.stdout, stderr: res.stderr };
84
+ throw e;
85
+ }
86
+ }
87
+ catch (err) {
88
+ // Fallback: if `scaly` isn't installed, but we're in the monorepo, run the script directly.
89
+ if (err?.code === 'ENOENT' && command === 'scaly') {
90
+ const script = findScalyCliScript(cwd);
91
+ if (!script)
92
+ throw err;
93
+ const res = await attempt(process.execPath, [script, ...args]);
94
+ if (res.code !== 0) {
95
+ const e = new Error(res.stderr.trim() || `CLI exited with ${res.code}`);
96
+ e.code = 'CLI_EXIT_NONZERO';
97
+ e.details = {
98
+ stdout: res.stdout,
99
+ stderr: res.stderr,
100
+ exit_code: res.code
101
+ };
102
+ throw e;
103
+ }
104
+ return JSON.parse(res.stdout);
105
+ }
106
+ throw err;
107
+ }
108
+ }
109
+ function mapCliFailure(stderr) {
110
+ const text = String(stderr || '').trim();
111
+ const lower = text.toLowerCase();
112
+ if (!text) {
113
+ return { code: 'INTERNAL_ERROR', message: 'CLI failed', retriable: true };
114
+ }
115
+ if (lower.includes('plan hash mismatch')) {
116
+ return {
117
+ code: 'PLAN_STALE',
118
+ message: 'Plan hash mismatch; re-run scaly_plan and retry.',
119
+ retriable: false
120
+ };
121
+ }
122
+ if (lower.includes('invalid .scaly/config.yaml')) {
123
+ return {
124
+ code: 'VALIDATION_ERROR',
125
+ message: 'Invalid .scaly/config.yaml (see details).',
126
+ retriable: false
127
+ };
128
+ }
129
+ if (lower.includes('missing .scaly/config.yaml') ||
130
+ lower.includes('run `scaly init`')) {
131
+ return {
132
+ code: 'RESOURCE_NOT_FOUND',
133
+ message: 'Missing .scaly/config.yaml; run `scaly init` first.',
134
+ retriable: false
135
+ };
136
+ }
137
+ if (lower.includes('refusing to overwrite')) {
138
+ return {
139
+ code: 'RESOURCE_EXISTS',
140
+ message: 'Refusing to overwrite existing .scaly/config.yaml (use force).',
141
+ retriable: false
142
+ };
143
+ }
144
+ return { code: 'INTERNAL_ERROR', message: text, retriable: true };
145
+ }
146
+ const PlanSchema = zod_1.z.object({
147
+ project_path: zod_1.z
148
+ .string()
149
+ .optional()
150
+ .describe('Project directory containing `.scaly/config.yaml` (defaults to server cwd)'),
151
+ env: zod_1.z
152
+ .string()
153
+ .optional()
154
+ .describe('Optional overlay environment name (e.g., dev, prod)'),
155
+ app: zod_1.z
156
+ .string()
157
+ .optional()
158
+ .describe('Optional app name (for multi-app config)'),
159
+ json: zod_1.z
160
+ .boolean()
161
+ .optional()
162
+ .default(true)
163
+ .describe('Always true for MCP; included for compatibility')
164
+ });
165
+ const ApplySchema = zod_1.z.object({
166
+ project_path: zod_1.z
167
+ .string()
168
+ .optional()
169
+ .describe('Project directory containing `.scaly/config.yaml` (defaults to server cwd)'),
170
+ env: zod_1.z.string().optional().describe('Optional overlay environment name'),
171
+ app: zod_1.z
172
+ .string()
173
+ .optional()
174
+ .describe('Optional app name (for multi-app config)'),
175
+ plan_hash: zod_1.z.string().describe('Plan hash from scaly_plan (sha256:...)'),
176
+ auto_approve: zod_1.z
177
+ .boolean()
178
+ .optional()
179
+ .default(false)
180
+ .describe('Must be true to apply changes from MCP')
181
+ });
182
+ const PullSchema = zod_1.z.object({
183
+ project_path: zod_1.z
184
+ .string()
185
+ .optional()
186
+ .describe('Directory to write `.scaly/config.yaml` into (defaults to server cwd)'),
187
+ force: zod_1.z
188
+ .boolean()
189
+ .optional()
190
+ .default(false)
191
+ .describe('Overwrite existing config'),
192
+ stack_id: zod_1.z
193
+ .string()
194
+ .optional()
195
+ .describe('Explicit stack id if multiple stacks exist'),
196
+ app_id: zod_1.z
197
+ .string()
198
+ .optional()
199
+ .describe('Explicit app id if multiple apps exist')
200
+ });
201
+ exports.projectTools = [
202
+ {
203
+ name: 'scaly_plan',
204
+ description: 'Compute an infrastructure plan from `.scaly/config.yaml` (and optional overlays) and return a stable plan_hash.',
205
+ inputSchema: PlanSchema,
206
+ handler: async (input) => {
207
+ try {
208
+ const cwd = node_path_1.default.resolve(input.project_path || process.cwd());
209
+ await ensureDir(cwd);
210
+ const configPath = node_path_1.default.join(cwd, '.scaly', 'config.yaml');
211
+ if (!(0, node_fs_1.existsSync)(configPath)) {
212
+ return (0, index_js_1.fail)({
213
+ code: 'RESOURCE_NOT_FOUND',
214
+ message: `Missing .scaly/config.yaml in ${cwd}. Run \`scaly init\` first.`,
215
+ retriable: false,
216
+ details: { project_path: cwd }
217
+ });
218
+ }
219
+ const args = ['plan', '--json'];
220
+ if (input.env)
221
+ args.push('--env', input.env);
222
+ if (input.app)
223
+ args.push('--app', input.app);
224
+ const data = await runJsonCli({ cwd, args });
225
+ return (0, index_js_1.ok)(data);
226
+ }
227
+ catch (err) {
228
+ if (err?.code === 'CLI_EXIT_NONZERO') {
229
+ const mapped = mapCliFailure(err?.details?.stderr);
230
+ return (0, index_js_1.fail)({
231
+ code: mapped.code,
232
+ message: mapped.message,
233
+ retriable: mapped.retriable,
234
+ details: err?.details
235
+ });
236
+ }
237
+ return (0, index_js_1.fail)({
238
+ code: 'INTERNAL_ERROR',
239
+ message: err?.message || 'Unknown error',
240
+ retriable: true,
241
+ details: err?.details
242
+ });
243
+ }
244
+ }
245
+ },
246
+ {
247
+ name: 'scaly_apply',
248
+ description: 'Apply the current plan from `.scaly/config.yaml`. Requires the plan_hash from scaly_plan and auto_approve=true.',
249
+ inputSchema: ApplySchema,
250
+ handler: async (input) => {
251
+ try {
252
+ if (!input.auto_approve) {
253
+ return (0, index_js_1.fail)({
254
+ code: 'VALIDATION_ERROR',
255
+ message: 'auto_approve must be true to run scaly_apply from MCP.',
256
+ retriable: false
257
+ });
258
+ }
259
+ const cwd = node_path_1.default.resolve(input.project_path || process.cwd());
260
+ await ensureDir(cwd);
261
+ const configPath = node_path_1.default.join(cwd, '.scaly', 'config.yaml');
262
+ if (!(0, node_fs_1.existsSync)(configPath)) {
263
+ return (0, index_js_1.fail)({
264
+ code: 'RESOURCE_NOT_FOUND',
265
+ message: `Missing .scaly/config.yaml in ${cwd}. Run \`scaly init\` first.`,
266
+ retriable: false,
267
+ details: { project_path: cwd }
268
+ });
269
+ }
270
+ const args = [
271
+ 'apply',
272
+ '--json',
273
+ '--auto-approve',
274
+ '--plan-hash',
275
+ input.plan_hash
276
+ ];
277
+ if (input.env)
278
+ args.push('--env', input.env);
279
+ if (input.app)
280
+ args.push('--app', input.app);
281
+ const data = await runJsonCli({ cwd, args });
282
+ return (0, index_js_1.ok)(data);
283
+ }
284
+ catch (err) {
285
+ if (err?.code === 'CLI_EXIT_NONZERO') {
286
+ const mapped = mapCliFailure(err?.details?.stderr);
287
+ return (0, index_js_1.fail)({
288
+ code: mapped.code,
289
+ message: mapped.message,
290
+ retriable: mapped.retriable,
291
+ details: err?.details
292
+ });
293
+ }
294
+ return (0, index_js_1.fail)({
295
+ code: 'INTERNAL_ERROR',
296
+ message: err?.message || 'Unknown error',
297
+ retriable: true,
298
+ details: err?.details
299
+ });
300
+ }
301
+ }
302
+ },
303
+ {
304
+ name: 'scaly_pull',
305
+ description: 'Write `.scaly/config.yaml` by reverse-engineering live state. Use this to bootstrap a project or re-sync config.',
306
+ inputSchema: PullSchema,
307
+ handler: async (input) => {
308
+ try {
309
+ const cwd = node_path_1.default.resolve(input.project_path || process.cwd());
310
+ await ensureDir(cwd);
311
+ const args = ['pull', '--json'];
312
+ if (input.force)
313
+ args.push('--force');
314
+ if (input.stack_id)
315
+ args.push('--stack', input.stack_id);
316
+ if (input.app_id)
317
+ args.push('--app', input.app_id);
318
+ const data = await runJsonCli({ cwd, args });
319
+ return (0, index_js_1.ok)(data);
320
+ }
321
+ catch (err) {
322
+ if (err?.code === 'CLI_EXIT_NONZERO') {
323
+ const mapped = mapCliFailure(err?.details?.stderr);
324
+ return (0, index_js_1.fail)({
325
+ code: mapped.code,
326
+ message: mapped.message,
327
+ retriable: mapped.retriable,
328
+ details: err?.details
329
+ });
330
+ }
331
+ return (0, index_js_1.fail)({
332
+ code: 'INTERNAL_ERROR',
333
+ message: err?.message || 'Unknown error',
334
+ retriable: true,
335
+ details: err?.details
336
+ });
337
+ }
338
+ }
339
+ }
340
+ ];
341
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from './index.js';
2
+ export declare const s3Tools: ToolDefinition[];
3
+ //# sourceMappingURL=s3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../src/tools/s3.ts"],"names":[],"mappings":"AAUA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA2C3D,eAAO,MAAM,OAAO,EAAE,cAAc,EAwOnC,CAAC"}