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
package/LICENSE.md ADDED
@@ -0,0 +1,30 @@
1
+ # Surrogate Protocol MCP License
2
+
3
+ © 2025 DETA Entertainment Studios. All rights reserved.
4
+
5
+ ## Terms of Use
6
+
7
+ This software is proprietary and confidential.
8
+
9
+ ### Permitted Use
10
+ - Personal and educational use
11
+ - Internal development and testing
12
+ - Non-commercial projects
13
+
14
+ ### Prohibited Without Written Permission
15
+ - Commercial use or deployment
16
+ - Redistribution or sublicensing
17
+ - Publishing to package registries (NPM, etc.)
18
+ - Modification and redistribution of derivative works
19
+
20
+ ### Disclaimer
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
29
+ ### Contact
30
+ For commercial licensing inquiries, please contact DETA Entertainment Studios.
package/README.md ADDED
@@ -0,0 +1,198 @@
1
+ # Surrogate Protocol MCP Server
2
+
3
+ A Model Context Protocol (MCP) server for multi-agent coding orchestration. Enables Claude Code to spawn autonomous coding agents with isolated worktrees, file locks, and validation gates.
4
+
5
+ ## Features
6
+
7
+ - **Isolated Worktrees**: Each agent gets its own git worktree for parallel work
8
+ - **File Locking**: Prevents conflicts when multiple agents work simultaneously
9
+ - **Validation Gates**: Automatic testing, type-checking, linting, and building
10
+ - **Session Recovery**: Reconcile and recover from crashes
11
+ - **Observability**: Detailed logs and reports for debugging
12
+
13
+ ## Installation
14
+
15
+ ### From GitHub (Recommended)
16
+
17
+ Add to your Claude Code `.mcp.json`:
18
+
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "surrogate-protocol": {
23
+ "command": "npx",
24
+ "args": [
25
+ "-y",
26
+ "github.com/NeMeJP/surrogate-protocol-mcp"
27
+ ]
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ Replace `YOUR_USERNAME` with your GitHub username.
34
+
35
+ ### Local Development
36
+
37
+ ```bash
38
+ git clone https://github.com/NeMeJP/surrogate-protocol-mcp.git
39
+ cd surrogate-protocol-mcp
40
+ npm install
41
+ npm run build
42
+ npm link
43
+ ```
44
+
45
+ Then in `.mcp.json`:
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "surrogate-protocol": {
51
+ "command": "node",
52
+ "args": ["/path/to/surrogate-protocol-mcp/dist/mcp-server.js"]
53
+ }
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Usage
59
+
60
+ ### Basic Workflow
61
+
62
+ 1. **Check Status**: `get_status()` - Always call first
63
+ 2. **Spawn Agent**: `spawn_surrogate(id, role, task, files_to_lock)`
64
+ 3. **Monitor**: `get_status()` to check progress
65
+ 4. **Complete**: Agent auto-submits when done (runs validation gates)
66
+
67
+ ### Available Tools
68
+
69
+ | Tool | Purpose |
70
+ |------|---------|
71
+ | `get_status()` | Get current state, active surrogates, locked files |
72
+ | `spawn_surrogate()` | Create and start a new agent |
73
+ | `update_surrogate_status()` | Update agent progress status |
74
+ | `submit_work()` | Complete task (runs validation gates) |
75
+ | `fail_surrogate()` | Mark agent as failed and release locks |
76
+ | `check_file_locks()` | Check if files are locked before spawning |
77
+ | `reconcile_surrogates()` | Recover from crashes and sync state |
78
+ | `get_surrogate_logs()` | Get detailed logs for debugging |
79
+ | `get_surrogate_report()` | Get completion report with git stats |
80
+ | `clean_zombies()` | Clean up orphaned worktrees |
81
+
82
+ ### Example: Multi-Agent Task
83
+
84
+ ```javascript
85
+ // 1. Check current state
86
+ get_status()
87
+
88
+ // 2. Check file availability
89
+ check_file_locks(['src/auth.ts', 'src/api/login.ts'])
90
+
91
+ // 3. Spawn first agent
92
+ spawn_surrogate({
93
+ id: 'auth-01',
94
+ role: 'security-engineer',
95
+ task: 'Implement JWT authentication',
96
+ files_to_lock: ['src/auth.ts', 'src/middleware/verify.ts']
97
+ })
98
+
99
+ // 4. Spawn second agent (different files)
100
+ spawn_surrogate({
101
+ id: 'api-01',
102
+ role: 'backend-dev',
103
+ task: 'Add API rate limiting',
104
+ files_to_lock: ['src/api/middleware.ts']
105
+ })
106
+
107
+ // 5. Monitor progress
108
+ get_status()
109
+
110
+ // Agents work autonomously and submit when complete!
111
+ ```
112
+
113
+ ## Validation Gates
114
+
115
+ When an agent calls `submit_work()`, these gates run automatically:
116
+
117
+ 1. **Rebase** - Sync with main branch
118
+ 2. **Tests** - Run test suite (project-aware: npm test, pytest, etc.)
119
+ 3. **Type Check** - TypeScript or mypy validation
120
+ 4. **Lint** - Code style checks (warnings only)
121
+ 5. **Build** - Compilation check
122
+ 6. **Security** - Dependency audit (warnings only)
123
+
124
+ If any critical gate fails, the submission is rejected and the agent must fix issues.
125
+
126
+ ## Requirements
127
+
128
+ - Node.js 18+
129
+ - Git
130
+ - Claude CLI (`claude` command) for autonomous agents
131
+
132
+ ## Configuration
133
+
134
+ Optional environment variables:
135
+
136
+ ```bash
137
+ # Claude CLI binary path (if not in PATH)
138
+ export CLAUDE_BINARY_PATH=/path/to/claude
139
+
140
+ # Auto-cleanup worktrees on completion
141
+ export SURROGATE_CLEANUP_ON_COMPLETE=true
142
+ ```
143
+
144
+ ## Project Structure
145
+
146
+ ```
147
+ surrogate-protocol-mcp/
148
+ ├── src/
149
+ │ ├── mcp-server.ts # Main MCP server
150
+ │ ├── utils/
151
+ │ │ ├── state.ts # State management
152
+ │ │ ├── worktree.ts # Git worktree operations
153
+ │ │ ├── gates.ts # Validation gates
154
+ │ │ ├── agent.ts # Agent spawning
155
+ │ │ ├── logging.ts # Structured logging
156
+ │ │ └── artifacts.ts # Reports and markers
157
+ ├── dist/ # Compiled JavaScript
158
+ ├── package.json
159
+ └── tsconfig.json
160
+ ```
161
+
162
+ ## Troubleshooting
163
+
164
+ ### "Surrogate not found"
165
+ Run `reconcile_surrogates()` to sync state after crashes.
166
+
167
+ ### "File lock conflict"
168
+ Another agent owns those files. Wait for completion or choose different files.
169
+
170
+ ### "GATE_FAILED"
171
+ Fix the issues reported in the error message and call `submit_work()` again.
172
+
173
+ ### Zombie worktrees
174
+ Run `clean_zombies()` to remove orphaned worktrees.
175
+
176
+ ## Development
177
+
178
+ ```bash
179
+ # Build
180
+ npm run build
181
+
182
+ # Watch mode
183
+ npm run dev
184
+
185
+ # Run tests
186
+ npm test
187
+
188
+ # Lint
189
+ npm run lint
190
+ ```
191
+
192
+ ## License
193
+
194
+ MIT
195
+
196
+ ## Author
197
+
198
+ DETA Entertainment Studios
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gates.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gates.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,342 @@
1
+ // Tests for utils/gates.ts - Validation gates
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { execSync } from 'child_process';
5
+ import { runRebaseGate, runTestGate, runTypeCheckGate, runLintGate, runBuildGate, runSecurityGate, runAllGates, commitChanges, } from '../utils/gates.js';
6
+ // Test fixtures directory
7
+ const TEST_DIR = path.join(process.cwd(), '.gates-test');
8
+ describe('Validation Gates', () => {
9
+ // Helper to create a minimal test project
10
+ function createTestProject(options = {}) {
11
+ const { withTsConfig = false, withPackageJson = true, withTestScript = false, withBuildScript = false, withLintConfig = false, } = options;
12
+ if (withPackageJson) {
13
+ const scripts = {};
14
+ if (withTestScript) {
15
+ scripts.test = 'echo "Tests passed"';
16
+ }
17
+ if (withBuildScript) {
18
+ scripts.build = 'echo "Build complete"';
19
+ }
20
+ if (withLintConfig) {
21
+ scripts.lint = 'echo "Lint passed"';
22
+ }
23
+ fs.writeFileSync(path.join(TEST_DIR, 'package.json'), JSON.stringify({
24
+ name: 'test-project',
25
+ version: '1.0.0',
26
+ scripts,
27
+ }, null, 2));
28
+ }
29
+ if (withTsConfig) {
30
+ fs.writeFileSync(path.join(TEST_DIR, 'tsconfig.json'), JSON.stringify({
31
+ compilerOptions: {
32
+ target: 'ES2022',
33
+ module: 'NodeNext',
34
+ strict: true,
35
+ noEmit: true,
36
+ },
37
+ include: ['src/**/*'],
38
+ }, null, 2));
39
+ fs.mkdirSync(path.join(TEST_DIR, 'src'), { recursive: true });
40
+ fs.writeFileSync(path.join(TEST_DIR, 'src', 'index.ts'), 'export const hello = "world";\n');
41
+ }
42
+ if (withLintConfig) {
43
+ fs.writeFileSync(path.join(TEST_DIR, '.eslintrc.js'), 'module.exports = { rules: {} };');
44
+ }
45
+ }
46
+ // Helper to init git repo
47
+ function initGitRepo() {
48
+ execSync('git init', { cwd: TEST_DIR, stdio: 'pipe' });
49
+ execSync('git config user.email "test@test.com"', { cwd: TEST_DIR, stdio: 'pipe' });
50
+ execSync('git config user.name "Test"', { cwd: TEST_DIR, stdio: 'pipe' });
51
+ // Create initial commit
52
+ fs.writeFileSync(path.join(TEST_DIR, 'README.md'), '# Test');
53
+ execSync('git add .', { cwd: TEST_DIR, stdio: 'pipe' });
54
+ execSync('git commit -m "Initial commit"', { cwd: TEST_DIR, stdio: 'pipe' });
55
+ }
56
+ beforeEach(() => {
57
+ // Clean test directory before each test
58
+ if (fs.existsSync(TEST_DIR)) {
59
+ fs.rmSync(TEST_DIR, { recursive: true, force: true });
60
+ }
61
+ fs.mkdirSync(TEST_DIR, { recursive: true });
62
+ });
63
+ afterEach(() => {
64
+ if (fs.existsSync(TEST_DIR)) {
65
+ fs.rmSync(TEST_DIR, { recursive: true, force: true });
66
+ }
67
+ });
68
+ describe('GateResult interface', () => {
69
+ it('should have required fields', () => {
70
+ const result = {
71
+ gate: 'TEST',
72
+ passed: true,
73
+ duration_ms: 100,
74
+ };
75
+ expect(result.gate).toBe('TEST');
76
+ expect(result.passed).toBe(true);
77
+ expect(result.duration_ms).toBe(100);
78
+ });
79
+ it('should allow optional fields', () => {
80
+ const result = {
81
+ gate: 'BUILD',
82
+ passed: false,
83
+ error: 'Build failed',
84
+ output: 'Some output',
85
+ duration_ms: 200,
86
+ };
87
+ expect(result.error).toBe('Build failed');
88
+ expect(result.output).toBe('Some output');
89
+ });
90
+ });
91
+ describe('runTestGate', () => {
92
+ it('should pass when test script succeeds', () => {
93
+ createTestProject({ withTestScript: true });
94
+ const result = runTestGate(TEST_DIR);
95
+ expect(result.gate).toBe('TEST');
96
+ expect(result.passed).toBe(true);
97
+ expect(result.duration_ms).toBeGreaterThanOrEqual(0);
98
+ });
99
+ it('should fail when no test script exists', () => {
100
+ createTestProject({ withTestScript: false });
101
+ const result = runTestGate(TEST_DIR);
102
+ expect(result.gate).toBe('TEST');
103
+ expect(result.passed).toBe(false);
104
+ expect(result.error).toBeDefined();
105
+ });
106
+ });
107
+ describe('runTypeCheckGate', () => {
108
+ it('should skip when no tsconfig.json exists', () => {
109
+ createTestProject({ withTsConfig: false });
110
+ const result = runTypeCheckGate(TEST_DIR);
111
+ expect(result.gate).toBe('TYPECHECK');
112
+ expect(result.passed).toBe(true);
113
+ expect(result.output).toContain('Skipped');
114
+ });
115
+ it('should pass for valid TypeScript', () => {
116
+ createTestProject({ withTsConfig: true });
117
+ const result = runTypeCheckGate(TEST_DIR);
118
+ expect(result.gate).toBe('TYPECHECK');
119
+ expect(result.passed).toBe(true);
120
+ });
121
+ it('should fail for invalid TypeScript', () => {
122
+ createTestProject({ withTsConfig: true });
123
+ // Write invalid TypeScript
124
+ fs.writeFileSync(path.join(TEST_DIR, 'src', 'bad.ts'), 'const x: number = "not a number";\n');
125
+ const result = runTypeCheckGate(TEST_DIR);
126
+ expect(result.gate).toBe('TYPECHECK');
127
+ expect(result.passed).toBe(false);
128
+ expect(result.error).toBeDefined();
129
+ });
130
+ });
131
+ describe('runLintGate', () => {
132
+ it('should be non-blocking by default', () => {
133
+ createTestProject({ withLintConfig: false });
134
+ const result = runLintGate(TEST_DIR, false);
135
+ // Even if lint fails, non-blocking should "pass"
136
+ expect(result.gate).toBe('LINT');
137
+ // With no lint script, it will fail but be non-blocking
138
+ });
139
+ it('should fail when blocking and lint fails', () => {
140
+ createTestProject({ withPackageJson: true });
141
+ // No lint script, so it will fail
142
+ fs.writeFileSync(path.join(TEST_DIR, 'package.json'), JSON.stringify({
143
+ name: 'test',
144
+ scripts: {
145
+ lint: 'exit 1', // Force failure
146
+ },
147
+ }));
148
+ const result = runLintGate(TEST_DIR, true);
149
+ expect(result.gate).toBe('LINT');
150
+ expect(result.passed).toBe(false);
151
+ });
152
+ });
153
+ describe('runBuildGate', () => {
154
+ it('should skip when no package.json exists', () => {
155
+ createTestProject({ withPackageJson: false });
156
+ const result = runBuildGate(TEST_DIR);
157
+ expect(result.gate).toBe('BUILD');
158
+ expect(result.passed).toBe(true);
159
+ expect(result.output).toContain('Skipped');
160
+ });
161
+ it('should skip when no build script exists', () => {
162
+ createTestProject({ withBuildScript: false });
163
+ const result = runBuildGate(TEST_DIR);
164
+ expect(result.gate).toBe('BUILD');
165
+ expect(result.passed).toBe(true);
166
+ expect(result.output).toContain('Skipped');
167
+ });
168
+ it('should pass when build script succeeds', () => {
169
+ createTestProject({ withBuildScript: true });
170
+ const result = runBuildGate(TEST_DIR);
171
+ expect(result.gate).toBe('BUILD');
172
+ expect(result.passed).toBe(true);
173
+ });
174
+ it('should fail when build script fails', () => {
175
+ fs.writeFileSync(path.join(TEST_DIR, 'package.json'), JSON.stringify({
176
+ name: 'test',
177
+ scripts: {
178
+ build: 'exit 1',
179
+ },
180
+ }));
181
+ const result = runBuildGate(TEST_DIR);
182
+ expect(result.gate).toBe('BUILD');
183
+ expect(result.passed).toBe(false);
184
+ });
185
+ });
186
+ describe('runSecurityGate', () => {
187
+ it('should be non-blocking', () => {
188
+ createTestProject({ withPackageJson: true });
189
+ const result = runSecurityGate(TEST_DIR);
190
+ expect(result.gate).toBe('SECURITY');
191
+ // Security gate is always non-blocking, so passed should be true
192
+ // even if audit finds issues (or fails to run)
193
+ expect(typeof result.passed).toBe('boolean');
194
+ });
195
+ });
196
+ describe('commitChanges', () => {
197
+ it('should stage and commit changes', () => {
198
+ createTestProject({});
199
+ initGitRepo();
200
+ // Create a new file
201
+ fs.writeFileSync(path.join(TEST_DIR, 'new-file.txt'), 'content');
202
+ const result = commitChanges(TEST_DIR, 'Add new file');
203
+ expect(result.success).toBe(true);
204
+ // Verify commit exists
205
+ const log = execSync('git log --oneline -1', {
206
+ cwd: TEST_DIR,
207
+ encoding: 'utf8',
208
+ });
209
+ expect(log).toContain('Add new file');
210
+ });
211
+ it('should succeed with no changes to commit', () => {
212
+ createTestProject({});
213
+ initGitRepo();
214
+ const result = commitChanges(TEST_DIR, 'Empty commit');
215
+ expect(result.success).toBe(true);
216
+ });
217
+ });
218
+ describe('runAllGates', () => {
219
+ it('should run all gates in order', async () => {
220
+ createTestProject({
221
+ withTestScript: true,
222
+ withBuildScript: true,
223
+ });
224
+ initGitRepo();
225
+ const result = await runAllGates(TEST_DIR, {
226
+ skipRebase: true, // Skip rebase since we don't have remote
227
+ });
228
+ expect(result.gates.length).toBeGreaterThan(0);
229
+ // Check gates are present
230
+ const gateNames = result.gates.map((g) => g.gate);
231
+ expect(gateNames).toContain('TEST');
232
+ expect(gateNames).toContain('BUILD');
233
+ });
234
+ it('should stop on first critical failure', async () => {
235
+ createTestProject({
236
+ withTestScript: false, // Will cause TEST to fail
237
+ withBuildScript: true,
238
+ });
239
+ initGitRepo();
240
+ const result = await runAllGates(TEST_DIR, {
241
+ skipRebase: true,
242
+ });
243
+ expect(result.all_passed).toBe(false);
244
+ expect(result.summary).toContain('TEST');
245
+ // Should not have run BUILD after TEST failed
246
+ const buildGate = result.gates.find((g) => g.gate === 'BUILD');
247
+ expect(buildGate).toBeUndefined();
248
+ });
249
+ it('should respect skip options', async () => {
250
+ createTestProject({});
251
+ initGitRepo();
252
+ const result = await runAllGates(TEST_DIR, {
253
+ skipRebase: true,
254
+ skipTests: true,
255
+ skipTypecheck: true,
256
+ skipLint: true,
257
+ skipBuild: true,
258
+ skipSecurity: true,
259
+ });
260
+ expect(result.all_passed).toBe(true);
261
+ // Policy gates (CLEAN_TREE, HAS_CHANGES) always run - only validation gates can be skipped
262
+ expect(result.gates).toHaveLength(2);
263
+ expect(result.gates.map(g => g.gate)).toEqual(['CLEAN_TREE', 'HAS_CHANGES']);
264
+ });
265
+ it('should include duration in summary', async () => {
266
+ createTestProject({ withTestScript: true, withBuildScript: true });
267
+ initGitRepo();
268
+ const result = await runAllGates(TEST_DIR, {
269
+ skipRebase: true,
270
+ skipTypecheck: true,
271
+ skipLint: true,
272
+ skipSecurity: true,
273
+ });
274
+ expect(result.summary).toMatch(/\d+ms/);
275
+ });
276
+ });
277
+ describe('Gate ordering', () => {
278
+ it('should run gates in correct order', async () => {
279
+ createTestProject({
280
+ withTestScript: true,
281
+ withTsConfig: true,
282
+ withBuildScript: true,
283
+ withLintConfig: true,
284
+ });
285
+ initGitRepo();
286
+ const result = await runAllGates(TEST_DIR, {
287
+ skipRebase: true,
288
+ skipSecurity: true,
289
+ });
290
+ // Verify order: TEST -> TYPECHECK -> LINT -> BUILD
291
+ const gateOrder = result.gates.map((g) => g.gate);
292
+ const testIndex = gateOrder.indexOf('TEST');
293
+ const typeIndex = gateOrder.indexOf('TYPECHECK');
294
+ const lintIndex = gateOrder.indexOf('LINT');
295
+ const buildIndex = gateOrder.indexOf('BUILD');
296
+ expect(testIndex).toBeLessThan(typeIndex);
297
+ expect(typeIndex).toBeLessThan(lintIndex);
298
+ expect(lintIndex).toBeLessThan(buildIndex);
299
+ });
300
+ });
301
+ });
302
+ describe('RebaseGate', () => {
303
+ const TEST_DIR = path.join(process.cwd(), '.rebase-test');
304
+ beforeEach(() => {
305
+ if (fs.existsSync(TEST_DIR)) {
306
+ fs.rmSync(TEST_DIR, { recursive: true, force: true });
307
+ }
308
+ fs.mkdirSync(TEST_DIR, { recursive: true });
309
+ });
310
+ afterEach(() => {
311
+ if (fs.existsSync(TEST_DIR)) {
312
+ fs.rmSync(TEST_DIR, { recursive: true, force: true });
313
+ }
314
+ });
315
+ it('should have RebaseResult type with conflict info', () => {
316
+ const result = {
317
+ gate: 'REBASE',
318
+ passed: false,
319
+ has_conflict: true,
320
+ conflicting_files: ['file1.ts', 'file2.ts'],
321
+ error: 'Merge conflict',
322
+ duration_ms: 100,
323
+ };
324
+ expect(result.has_conflict).toBe(true);
325
+ expect(result.conflicting_files).toContain('file1.ts');
326
+ });
327
+ it('should handle missing remote gracefully', () => {
328
+ fs.mkdirSync(TEST_DIR, { recursive: true });
329
+ execSync('git init', { cwd: TEST_DIR, stdio: 'pipe' });
330
+ execSync('git config user.email "test@test.com"', { cwd: TEST_DIR, stdio: 'pipe' });
331
+ execSync('git config user.name "Test"', { cwd: TEST_DIR, stdio: 'pipe' });
332
+ fs.writeFileSync(path.join(TEST_DIR, 'README.md'), '# Test');
333
+ execSync('git add .', { cwd: TEST_DIR, stdio: 'pipe' });
334
+ execSync('git commit -m "Initial"', { cwd: TEST_DIR, stdio: 'pipe' });
335
+ // This should fail gracefully (no remote configured)
336
+ const result = runRebaseGate(TEST_DIR, 'main');
337
+ expect(result.gate).toBe('REBASE');
338
+ expect(result.passed).toBe(false);
339
+ // Should have error about missing remote
340
+ });
341
+ });
342
+ //# sourceMappingURL=gates.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.test.js","sourceRoot":"","sources":["../../src/__tests__/gates.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=observability.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/observability.test.ts"],"names":[],"mappings":""}