surrogate-protocol-mcp 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 (67) hide show
  1. package/LICENSE.md +30 -0
  2. package/README.md +198 -0
  3. package/dist/__tests__/gates.test.d.ts +2 -0
  4. package/dist/__tests__/gates.test.d.ts.map +1 -0
  5. package/dist/__tests__/gates.test.js +342 -0
  6. package/dist/__tests__/gates.test.js.map +1 -0
  7. package/dist/__tests__/observability.test.d.ts +2 -0
  8. package/dist/__tests__/observability.test.d.ts.map +1 -0
  9. package/dist/__tests__/observability.test.js +382 -0
  10. package/dist/__tests__/observability.test.js.map +1 -0
  11. package/dist/__tests__/state.test.d.ts +2 -0
  12. package/dist/__tests__/state.test.d.ts.map +1 -0
  13. package/dist/__tests__/state.test.js +415 -0
  14. package/dist/__tests__/state.test.js.map +1 -0
  15. package/dist/agent-runner.d.ts +3 -0
  16. package/dist/agent-runner.d.ts.map +1 -0
  17. package/dist/agent-runner.js +419 -0
  18. package/dist/agent-runner.js.map +1 -0
  19. package/dist/cli.d.ts +3 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +763 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/mcp-server.d.ts +3 -0
  24. package/dist/mcp-server.d.ts.map +1 -0
  25. package/dist/mcp-server.js +1382 -0
  26. package/dist/mcp-server.js.map +1 -0
  27. package/dist/utils/agent.d.ts +42 -0
  28. package/dist/utils/agent.d.ts.map +1 -0
  29. package/dist/utils/agent.js +231 -0
  30. package/dist/utils/agent.js.map +1 -0
  31. package/dist/utils/artifacts.d.ts +92 -0
  32. package/dist/utils/artifacts.d.ts.map +1 -0
  33. package/dist/utils/artifacts.js +338 -0
  34. package/dist/utils/artifacts.js.map +1 -0
  35. package/dist/utils/capsule.d.ts +28 -0
  36. package/dist/utils/capsule.d.ts.map +1 -0
  37. package/dist/utils/capsule.js +462 -0
  38. package/dist/utils/capsule.js.map +1 -0
  39. package/dist/utils/diagnostics.d.ts +62 -0
  40. package/dist/utils/diagnostics.d.ts.map +1 -0
  41. package/dist/utils/diagnostics.js +404 -0
  42. package/dist/utils/diagnostics.js.map +1 -0
  43. package/dist/utils/gates.d.ts +78 -0
  44. package/dist/utils/gates.d.ts.map +1 -0
  45. package/dist/utils/gates.js +661 -0
  46. package/dist/utils/gates.js.map +1 -0
  47. package/dist/utils/logging.d.ts +53 -0
  48. package/dist/utils/logging.d.ts.map +1 -0
  49. package/dist/utils/logging.js +187 -0
  50. package/dist/utils/logging.js.map +1 -0
  51. package/dist/utils/project-gates.d.ts +73 -0
  52. package/dist/utils/project-gates.d.ts.map +1 -0
  53. package/dist/utils/project-gates.js +520 -0
  54. package/dist/utils/project-gates.js.map +1 -0
  55. package/dist/utils/reconcile.d.ts +50 -0
  56. package/dist/utils/reconcile.d.ts.map +1 -0
  57. package/dist/utils/reconcile.js +262 -0
  58. package/dist/utils/reconcile.js.map +1 -0
  59. package/dist/utils/state.d.ts +241 -0
  60. package/dist/utils/state.d.ts.map +1 -0
  61. package/dist/utils/state.js +865 -0
  62. package/dist/utils/state.js.map +1 -0
  63. package/dist/utils/worktree.d.ts +27 -0
  64. package/dist/utils/worktree.d.ts.map +1 -0
  65. package/dist/utils/worktree.js +275 -0
  66. package/dist/utils/worktree.js.map +1 -0
  67. package/package.json +65 -0
@@ -0,0 +1,419 @@
1
+ #!/usr/bin/env node
2
+ // surrogate-tools/src/agent-runner.ts
3
+ // THE SOUL - Shell-Driven Surrogate Pattern
4
+ // Uses Claude CLI (Local Binary Interface) instead of direct SDK
5
+ // Spawned by spawn_surrogate, exits when task complete
6
+ import * as path from 'path';
7
+ import * as fs from 'fs';
8
+ import { spawn, execSync } from 'child_process';
9
+ import { createResultMarker, writeResultMarker, MARKER_SCHEMA_VERSION, } from './utils/artifacts.js';
10
+ import { createSurrogateLogger } from './utils/logging.js';
11
+ // ═══════════════════════════════════════════════════════════════════
12
+ // CONFIGURATION
13
+ // ═══════════════════════════════════════════════════════════════════
14
+ const SURROGATE_ID = process.env.SURROGATE_ID;
15
+ const WORKTREE_PATH = process.env.SURROGATE_WORKTREE;
16
+ const TASK = process.env.SURROGATE_TASK;
17
+ const ROLE = process.env.SURROGATE_ROLE;
18
+ const PROJECT_ROOT = process.env.SURROGATE_PROJECT_ROOT;
19
+ // Validate required env vars
20
+ if (!SURROGATE_ID || !WORKTREE_PATH || !TASK) {
21
+ console.error('[AgentRunner] Missing required environment variables');
22
+ console.error(` SURROGATE_ID: ${SURROGATE_ID || 'MISSING'}`);
23
+ console.error(` SURROGATE_WORKTREE: ${WORKTREE_PATH || 'MISSING'}`);
24
+ console.error(` SURROGATE_TASK: ${TASK ? 'SET' : 'MISSING'}`);
25
+ process.exit(1);
26
+ }
27
+ console.log(`[AgentRunner] Starting surrogate: ${SURROGATE_ID}`);
28
+ console.log(`[AgentRunner] Worktree: ${WORKTREE_PATH}`);
29
+ console.log(`[AgentRunner] Role: ${ROLE}`);
30
+ // Initialize structured logger (WS3-1)
31
+ const logger = createSurrogateLogger(SURROGATE_ID, 'agent-runner');
32
+ logger.info('Agent runner started', { worktree: WORKTREE_PATH, role: ROLE, task: TASK.slice(0, 200) });
33
+ // ═══════════════════════════════════════════════════════════════════
34
+ // STATE SHARDING - Agent owns its own status file (no race conditions)
35
+ // ═══════════════════════════════════════════════════════════════════
36
+ // Each agent writes ONLY to its own status file - never touches the master YAML
37
+ const STATUS_DIR = path.resolve(PROJECT_ROOT, '.surrogate/status');
38
+ const STATUS_FILE = path.join(STATUS_DIR, `${SURROGATE_ID}.json`);
39
+ // Ensure status directory exists
40
+ function ensureStatusDir() {
41
+ if (!fs.existsSync(STATUS_DIR)) {
42
+ fs.mkdirSync(STATUS_DIR, { recursive: true });
43
+ }
44
+ }
45
+ // Read current status (or create initial)
46
+ function readStatus() {
47
+ try {
48
+ if (fs.existsSync(STATUS_FILE)) {
49
+ return JSON.parse(fs.readFileSync(STATUS_FILE, 'utf8'));
50
+ }
51
+ }
52
+ catch {
53
+ // File corrupted or doesn't exist
54
+ }
55
+ // Return initial status
56
+ return {
57
+ surrogate_id: SURROGATE_ID,
58
+ status: 'INITIALIZING',
59
+ last_heartbeat: new Date().toISOString(),
60
+ started: new Date().toISOString(),
61
+ pid: process.pid,
62
+ };
63
+ }
64
+ // Write status atomically (write to temp, then rename)
65
+ function writeStatus(status) {
66
+ ensureStatusDir();
67
+ const tempFile = `${STATUS_FILE}.tmp`;
68
+ fs.writeFileSync(tempFile, JSON.stringify(status, null, 2));
69
+ fs.renameSync(tempFile, STATUS_FILE);
70
+ }
71
+ // Update heartbeat - writes to OWN file only (no race condition)
72
+ function updateHeartbeat() {
73
+ try {
74
+ const status = readStatus();
75
+ status.last_heartbeat = new Date().toISOString();
76
+ writeStatus(status);
77
+ }
78
+ catch (error) {
79
+ console.error('[AgentRunner] Failed to update heartbeat:', error);
80
+ }
81
+ }
82
+ // Update status - writes to OWN file only (no race condition)
83
+ function updateAgentStatus(newStatus) {
84
+ try {
85
+ const status = readStatus();
86
+ status.status = newStatus;
87
+ status.last_heartbeat = new Date().toISOString();
88
+ writeStatus(status);
89
+ }
90
+ catch (error) {
91
+ console.error('[AgentRunner] Failed to update status:', error);
92
+ }
93
+ }
94
+ // Track start time for duration calculation
95
+ const STARTED_AT = new Date().toISOString();
96
+ // Write completion marker using schema v1 (WS5-2)
97
+ function writeCompletionMarkerV1(success, options = {}) {
98
+ try {
99
+ const marker = createResultMarker(SURROGATE_ID, WORKTREE_PATH, success, {
100
+ exitCode: options.exitCode,
101
+ errorType: options.errorType,
102
+ errorMessage: options.errorMessage,
103
+ startedAt: STARTED_AT,
104
+ });
105
+ writeResultMarker(WORKTREE_PATH, marker);
106
+ console.log(`[AgentRunner] Wrote result marker (schema v${MARKER_SCHEMA_VERSION})`);
107
+ }
108
+ catch (error) {
109
+ // Fallback to simple marker if artifacts module fails
110
+ console.error(`[AgentRunner] Failed to write schema marker, using fallback: ${error}`);
111
+ const markerFile = path.join(WORKTREE_PATH, '.surrogate-result.json');
112
+ fs.writeFileSync(markerFile, JSON.stringify({
113
+ schema_version: MARKER_SCHEMA_VERSION,
114
+ surrogate_id: SURROGATE_ID,
115
+ worktree_path: WORKTREE_PATH,
116
+ success,
117
+ error_message: options.errorMessage,
118
+ started_at: STARTED_AT,
119
+ ended_at: new Date().toISOString(),
120
+ }, null, 2));
121
+ }
122
+ }
123
+ // ═══════════════════════════════════════════════════════════════════
124
+ // CLAUDE CLI PREFLIGHT CHECK
125
+ // ═══════════════════════════════════════════════════════════════════
126
+ async function preflightCheck(claudePath) {
127
+ return new Promise((resolve) => {
128
+ // Step 1: Check claude --version
129
+ const versionCheck = spawn(claudePath, ['--version'], {
130
+ cwd: WORKTREE_PATH,
131
+ timeout: 10000,
132
+ });
133
+ let versionOutput = '';
134
+ let versionError = '';
135
+ versionCheck.stdout?.on('data', (data) => { versionOutput += data.toString(); });
136
+ versionCheck.stderr?.on('data', (data) => { versionError += data.toString(); });
137
+ versionCheck.on('error', (err) => {
138
+ resolve({
139
+ success: false,
140
+ error: `Claude CLI not found or not executable: ${err.message}`,
141
+ });
142
+ });
143
+ versionCheck.on('exit', (code) => {
144
+ if (code !== 0) {
145
+ resolve({
146
+ success: false,
147
+ error: `Claude CLI version check failed (exit ${code}): ${versionError || versionOutput}`,
148
+ });
149
+ return;
150
+ }
151
+ console.log(`[AgentRunner] Claude CLI version: ${versionOutput.trim()}`);
152
+ logger.info('Preflight: version check passed', { version: versionOutput.trim() });
153
+ // Step 2: Quick tool test - try to read a file
154
+ // Using minimal headless args: -p + --allowedTools + --max-turns
155
+ const toolTest = spawn(claudePath, [
156
+ '-p', 'Read the first line of any file in the current directory and respond with just "OK"',
157
+ '--allowedTools', 'Read',
158
+ '--max-turns', '1',
159
+ '--output-format', 'stream-json',
160
+ ], {
161
+ cwd: WORKTREE_PATH,
162
+ timeout: 30000, // 30s for tool test
163
+ });
164
+ let toolOutput = '';
165
+ let toolError = '';
166
+ toolTest.stdout?.on('data', (data) => { toolOutput += data.toString(); });
167
+ toolTest.stderr?.on('data', (data) => { toolError += data.toString(); });
168
+ toolTest.on('error', (err) => {
169
+ resolve({
170
+ success: false,
171
+ error: `Claude CLI tool test failed: ${err.message}`,
172
+ });
173
+ });
174
+ toolTest.on('exit', (testCode) => {
175
+ if (testCode !== 0) {
176
+ // Check for auth errors
177
+ const combinedOutput = (toolOutput + toolError).toLowerCase();
178
+ if (combinedOutput.includes('api key') || combinedOutput.includes('authentication') || combinedOutput.includes('unauthorized')) {
179
+ resolve({
180
+ success: false,
181
+ error: `CLI_NOT_AUTHENTICATED: Claude CLI is not authenticated. Run 'claude' interactively to login.`,
182
+ });
183
+ }
184
+ else {
185
+ resolve({
186
+ success: false,
187
+ error: `Claude CLI tool test failed (exit ${testCode}): ${toolError || toolOutput}`,
188
+ });
189
+ }
190
+ return;
191
+ }
192
+ logger.info('Preflight: tool test passed');
193
+ resolve({ success: true });
194
+ });
195
+ });
196
+ });
197
+ }
198
+ // ═══════════════════════════════════════════════════════════════════
199
+ // CLAUDE CLI EXECUTION
200
+ // ═══════════════════════════════════════════════════════════════════
201
+ async function runClaudeCLI() {
202
+ // Get claude CLI path from environment (resolved by agent.ts)
203
+ const claudePath = process.env.CLAUDE_BINARY_PATH || 'claude';
204
+ // ═══════════════════════════════════════════════════════════════════
205
+ // PREFLIGHT CHECK - Verify CLI is working before starting task
206
+ // ═══════════════════════════════════════════════════════════════════
207
+ console.log('[AgentRunner] Running preflight check...');
208
+ const preflight = await preflightCheck(claudePath);
209
+ if (!preflight.success) {
210
+ console.error(`[AgentRunner] Preflight FAILED: ${preflight.error}`);
211
+ logger.error('Preflight check failed', { error: preflight.error });
212
+ // Determine error type from preflight error
213
+ const errorType = preflight.error?.includes('CLI_NOT_AUTHENTICATED')
214
+ ? 'CONFIG_ERROR'
215
+ : preflight.error?.includes('not found')
216
+ ? 'CONFIG_ERROR'
217
+ : 'SPAWN_FAILED';
218
+ updateAgentStatus(errorType === 'CONFIG_ERROR' ? 'CONFIG_ERROR' : 'SPAWN_FAILED');
219
+ writeCompletionMarkerV1(false, {
220
+ errorType,
221
+ errorMessage: preflight.error,
222
+ });
223
+ throw new Error(preflight.error);
224
+ }
225
+ console.log('[AgentRunner] Preflight check passed');
226
+ // Detect if this is a research-only task (no code changes expected)
227
+ const isResearchTask = TASK.toLowerCase().includes('research only') ||
228
+ TASK.toLowerCase().includes('do not modify');
229
+ // Construct the prompt for the Claude CLI
230
+ const prompt = isResearchTask
231
+ ? `You are a research agent analyzing code in a git worktree.
232
+
233
+ SURROGATE ID: ${SURROGATE_ID}
234
+ ROLE: ${ROLE}
235
+ WORKTREE PATH: ${WORKTREE_PATH}
236
+
237
+ YOUR TASK:
238
+ ${TASK}
239
+
240
+ CRITICAL RULES:
241
+ 1. This is a RESEARCH task - do NOT modify any files.
242
+ 2. Use Read, Glob, and Grep tools to analyze the codebase.
243
+ 3. Compile your findings into a clear report.
244
+ 4. Focus ONLY on answering the research questions.
245
+ 5. Do NOT commit or make changes.
246
+
247
+ OUTPUT YOUR RESEARCH FINDINGS:
248
+ Provide a detailed analysis answering the questions in the task.
249
+ When done, simply output "RESEARCH COMPLETE" and your findings.`
250
+ : `You are a coding agent working in an isolated git worktree.
251
+
252
+ SURROGATE ID: ${SURROGATE_ID}
253
+ ROLE: ${ROLE}
254
+ WORKTREE PATH: ${WORKTREE_PATH}
255
+
256
+ YOUR TASK:
257
+ ${TASK}
258
+
259
+ CRITICAL RULES:
260
+ 1. You are working in a git worktree. All your changes are isolated.
261
+ 2. Focus ONLY on completing the task described above.
262
+ 3. When you are DONE, commit your changes with a descriptive message.
263
+ 4. Do NOT ask questions - make reasonable decisions and proceed.
264
+ 5. If you encounter a blocking error, document it and exit.
265
+
266
+ WORKFLOW:
267
+ 1. Read any existing files you need to understand
268
+ 2. Make the required changes
269
+ 3. Stage and commit: git add -A && git commit -m "your message"
270
+ 4. Exit when complete
271
+
272
+ Begin working on your task now. Do not wait for further instructions.`;
273
+ console.log(`[AgentRunner] Using Claude CLI at: ${claudePath}`);
274
+ console.log(`[AgentRunner] Working directory: ${WORKTREE_PATH}`);
275
+ console.log(`[AgentRunner] Task type: ${isResearchTask ? 'RESEARCH' : 'CODING'}`);
276
+ logger.info('Starting Claude CLI', {
277
+ claude_path: claudePath,
278
+ task_type: isResearchTask ? 'RESEARCH' : 'CODING',
279
+ });
280
+ // Update status to CODING (writes to own status file)
281
+ updateAgentStatus('CODING');
282
+ // Start heartbeat
283
+ const heartbeatInterval = setInterval(updateHeartbeat, 30000);
284
+ updateHeartbeat(); // Initial heartbeat
285
+ return new Promise((resolve, reject) => {
286
+ // ═══════════════════════════════════════════════════════════════════
287
+ // BUILD CLI ARGS - Based on official Claude Code CLI reference
288
+ // ═══════════════════════════════════════════════════════════════════
289
+ // NOTE: --yes does NOT exist in Claude Code CLI!
290
+ // Headless mode uses: -p + --allowedTools + --output-format + --max-turns
291
+ // Tool allowlist - configurable via env, defaults to minimal safe set
292
+ const defaultTools = isResearchTask
293
+ ? 'Read,Glob,Grep'
294
+ : 'Bash,Read,Write,Edit,Glob,Grep';
295
+ const allowedTools = process.env.CLAUDE_ALLOWED_TOOLS || defaultTools;
296
+ // Max turns to prevent infinite loops
297
+ const maxTurns = parseInt(process.env.SURROGATE_MAX_TURNS || '24', 10);
298
+ // Build args for headless execution
299
+ const cliArgs = [
300
+ '-p', prompt, // Non-interactive prompt mode
301
+ '--output-format', 'stream-json', // Structured output for parsing
302
+ '--max-turns', maxTurns.toString(), // Prevent runaway loops
303
+ ];
304
+ // Permission handling
305
+ if (process.env.CLAUDE_DANGEROUSLY_SKIP_PERMISSIONS === '1') {
306
+ console.log('[AgentRunner] WARNING: Using --dangerously-skip-permissions (debug mode)');
307
+ logger.warn('Using dangerous skip permissions mode');
308
+ cliArgs.push('--dangerously-skip-permissions');
309
+ }
310
+ else {
311
+ // Default: strict allowlist (security baseline)
312
+ cliArgs.push('--allowedTools', allowedTools);
313
+ }
314
+ console.log(`[AgentRunner] CLI args: ${cliArgs.join(' ').replace(prompt, '<PROMPT>')}`);
315
+ logger.info('CLI args configured', { allowedTools, maxTurns });
316
+ // Spawn claude CLI with the prompt and proper flags
317
+ const claudeProcess = spawn(claudePath, cliArgs, {
318
+ cwd: WORKTREE_PATH,
319
+ stdio: ['ignore', 'pipe', 'pipe'],
320
+ env: {
321
+ ...process.env,
322
+ // Ensure Claude CLI knows this is a surrogate context
323
+ SURROGATE_ID,
324
+ SURROGATE_WORKTREE: WORKTREE_PATH,
325
+ },
326
+ });
327
+ let stdout = '';
328
+ let stderr = '';
329
+ claudeProcess.stdout?.on('data', (data) => {
330
+ const text = data.toString();
331
+ stdout += text;
332
+ process.stdout.write(`[Claude] ${text}`);
333
+ });
334
+ claudeProcess.stderr?.on('data', (data) => {
335
+ const text = data.toString();
336
+ stderr += text;
337
+ process.stderr.write(`[Claude:err] ${text}`);
338
+ });
339
+ claudeProcess.on('error', (error) => {
340
+ clearInterval(heartbeatInterval);
341
+ console.error(`[AgentRunner] Claude CLI error: ${error.message}`);
342
+ logger.error('Claude CLI error', { error: error.message });
343
+ updateAgentStatus('CONFIG_ERROR'); // Proper error state (WS1-5)
344
+ writeCompletionMarkerV1(false, {
345
+ errorType: 'CONFIG_ERROR',
346
+ errorMessage: `Claude CLI error: ${error.message}`,
347
+ });
348
+ reject(error);
349
+ });
350
+ claudeProcess.on('exit', (code, signal) => {
351
+ clearInterval(heartbeatInterval);
352
+ console.log(`[AgentRunner] Claude CLI exited with code ${code}, signal ${signal}`);
353
+ if (code === 0) {
354
+ // Success - check if there are committed changes
355
+ try {
356
+ const hasChanges = execSync('git log --oneline -1', {
357
+ cwd: WORKTREE_PATH,
358
+ encoding: 'utf8',
359
+ });
360
+ console.log(`[AgentRunner] Last commit: ${hasChanges.trim()}`);
361
+ logger.info('Task completed successfully', { last_commit: hasChanges.trim() });
362
+ updateAgentStatus('REVIEWING');
363
+ writeCompletionMarkerV1(true, { exitCode: 0 });
364
+ }
365
+ catch {
366
+ console.log('[AgentRunner] No commits made');
367
+ logger.info('Task completed (no changes needed)');
368
+ updateAgentStatus('REVIEWING');
369
+ writeCompletionMarkerV1(true, { exitCode: 0 });
370
+ }
371
+ resolve();
372
+ }
373
+ else {
374
+ // Determine proper error state (WS1-5)
375
+ const errorType = signal ? 'TIMEOUT' : 'EXECUTION_ERROR';
376
+ const errorStatus = signal ? 'TIMEOUT' : 'FAILED';
377
+ logger.error('Task failed', {
378
+ exit_code: code,
379
+ signal,
380
+ error_type: errorType,
381
+ stderr_tail: stderr.slice(-200),
382
+ });
383
+ updateAgentStatus(errorStatus);
384
+ writeCompletionMarkerV1(false, {
385
+ exitCode: code,
386
+ errorType,
387
+ errorMessage: `Claude CLI exited with code ${code}, signal ${signal}\n${stderr.slice(-500)}`,
388
+ });
389
+ reject(new Error(`Claude CLI exited with code ${code}`));
390
+ }
391
+ });
392
+ // Timeout - configurable via env (default 30 minutes)
393
+ const timeoutMs = parseInt(process.env.SURROGATE_TIMEOUT_MS || '1800000', 10);
394
+ setTimeout(() => {
395
+ if (!claudeProcess.killed) {
396
+ console.log(`[AgentRunner] Timeout reached (${timeoutMs}ms), killing Claude CLI`);
397
+ logger.warn('Agent timeout', { timeout_ms: timeoutMs });
398
+ claudeProcess.kill('SIGTERM');
399
+ }
400
+ }, timeoutMs);
401
+ });
402
+ }
403
+ // ═══════════════════════════════════════════════════════════════════
404
+ // MAIN
405
+ // ═══════════════════════════════════════════════════════════════════
406
+ async function main() {
407
+ console.log('[AgentRunner] Starting...');
408
+ try {
409
+ await runClaudeCLI();
410
+ console.log('[AgentRunner] Completed successfully');
411
+ process.exit(0);
412
+ }
413
+ catch (error) {
414
+ console.error('[AgentRunner] Failed:', error);
415
+ process.exit(1);
416
+ }
417
+ }
418
+ main();
419
+ //# sourceMappingURL=agent-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.js","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}