codeloop-mcp-server 0.1.4 → 0.1.5

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 (59) hide show
  1. package/dist/index.js +550 -40
  2. package/dist/index.js.map +1 -1
  3. package/dist/project-discovery.d.ts +17 -0
  4. package/dist/project-discovery.d.ts.map +1 -0
  5. package/dist/project-discovery.js +109 -0
  6. package/dist/project-discovery.js.map +1 -0
  7. package/dist/runners/app_logger.d.ts +31 -0
  8. package/dist/runners/app_logger.d.ts.map +1 -0
  9. package/dist/runners/app_logger.js +203 -0
  10. package/dist/runners/app_logger.js.map +1 -0
  11. package/dist/runners/base.d.ts.map +1 -1
  12. package/dist/runners/base.js +4 -2
  13. package/dist/runners/base.js.map +1 -1
  14. package/dist/runners/flutter.d.ts +1 -0
  15. package/dist/runners/flutter.d.ts.map +1 -1
  16. package/dist/runners/flutter.js +29 -0
  17. package/dist/runners/flutter.js.map +1 -1
  18. package/dist/runners/platform_detect.d.ts +14 -0
  19. package/dist/runners/platform_detect.d.ts.map +1 -0
  20. package/dist/runners/platform_detect.js +102 -0
  21. package/dist/runners/platform_detect.js.map +1 -0
  22. package/dist/runners/screenshot.d.ts +3 -7
  23. package/dist/runners/screenshot.d.ts.map +1 -1
  24. package/dist/runners/screenshot.js +115 -28
  25. package/dist/runners/screenshot.js.map +1 -1
  26. package/dist/runners/video_recorder.d.ts +47 -0
  27. package/dist/runners/video_recorder.d.ts.map +1 -0
  28. package/dist/runners/video_recorder.js +478 -0
  29. package/dist/runners/video_recorder.js.map +1 -0
  30. package/dist/runners/window_manager.d.ts +55 -0
  31. package/dist/runners/window_manager.d.ts.map +1 -0
  32. package/dist/runners/window_manager.js +481 -0
  33. package/dist/runners/window_manager.js.map +1 -0
  34. package/dist/tools/design_compare.d.ts +1 -1
  35. package/dist/tools/design_compare.d.ts.map +1 -1
  36. package/dist/tools/design_compare.js +1 -2
  37. package/dist/tools/design_compare.js.map +1 -1
  38. package/dist/tools/discover_screens.d.ts +3 -3
  39. package/dist/tools/discover_screens.d.ts.map +1 -1
  40. package/dist/tools/discover_screens.js +140 -157
  41. package/dist/tools/discover_screens.js.map +1 -1
  42. package/dist/tools/gate_check.js +13 -1
  43. package/dist/tools/gate_check.js.map +1 -1
  44. package/dist/tools/init-project.d.ts +15 -0
  45. package/dist/tools/init-project.d.ts.map +1 -0
  46. package/dist/tools/init-project.js +273 -0
  47. package/dist/tools/init-project.js.map +1 -0
  48. package/dist/tools/interaction_replay.d.ts +2 -1
  49. package/dist/tools/interaction_replay.d.ts.map +1 -1
  50. package/dist/tools/interaction_replay.js +24 -2
  51. package/dist/tools/interaction_replay.js.map +1 -1
  52. package/dist/tools/verify.d.ts.map +1 -1
  53. package/dist/tools/verify.js +203 -52
  54. package/dist/tools/verify.js.map +1 -1
  55. package/dist/tools/visual_review.d.ts +1 -1
  56. package/dist/tools/visual_review.d.ts.map +1 -1
  57. package/dist/tools/visual_review.js +1 -2
  58. package/dist/tools/visual_review.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,273 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from "fs";
2
+ import { join, dirname } from "path";
3
+ export async function runInitProject(input) {
4
+ const cwd = input.project_dir;
5
+ const projectType = input.project_type === "auto" || !input.project_type
6
+ ? detectProjectType(cwd)
7
+ : input.project_type;
8
+ const ide = detectIDE(cwd);
9
+ const filesCreated = [];
10
+ const filesMerged = [];
11
+ // 1. Create .codeloop/config.json
12
+ const configPath = join(cwd, ".codeloop", "config.json");
13
+ if (!existsSync(configPath)) {
14
+ const apiKey = process.env.CODELOOP_API_KEY || "";
15
+ const config = createConfig(apiKey, projectType);
16
+ writeFileEnsureDir(configPath, JSON.stringify(config, null, 2) + "\n");
17
+ filesCreated.push(".codeloop/config.json");
18
+ }
19
+ // 2. Create artifacts directory
20
+ const artifactsDir = join(cwd, "artifacts");
21
+ if (!existsSync(artifactsDir)) {
22
+ mkdirSync(artifactsDir, { recursive: true });
23
+ filesCreated.push("artifacts/");
24
+ }
25
+ // 3. IDE-specific setup
26
+ if (ide === "cursor" || ide === "both") {
27
+ setupCursorProject(cwd, projectType, filesCreated, filesMerged);
28
+ }
29
+ if (ide === "claude" || ide === "both") {
30
+ setupClaudeProject(cwd, projectType, filesCreated, filesMerged);
31
+ }
32
+ if (ide === "unknown") {
33
+ setupCursorProject(cwd, projectType, filesCreated, filesMerged);
34
+ setupClaudeProject(cwd, projectType, filesCreated, filesMerged);
35
+ }
36
+ // 4. Update .gitignore
37
+ updateGitignore(cwd, filesCreated);
38
+ return {
39
+ initialized: true,
40
+ project_dir: cwd,
41
+ project_type: projectType,
42
+ ide_detected: ide,
43
+ files_created: filesCreated,
44
+ files_merged: filesMerged,
45
+ message: `CodeLoop initialized for ${projectType} project. Created ${filesCreated.length} files, merged ${filesMerged.length} configs.`,
46
+ };
47
+ }
48
+ function detectProjectType(cwd) {
49
+ if (existsSync(join(cwd, "pubspec.yaml")))
50
+ return "flutter";
51
+ if (existsSync(join(cwd, "playwright.config.ts")) ||
52
+ existsSync(join(cwd, "playwright.config.js")))
53
+ return "web";
54
+ if (existsSync(join(cwd, "package.json"))) {
55
+ try {
56
+ const pkg = JSON.parse(readFileSync(join(cwd, "package.json"), "utf-8"));
57
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
58
+ const webFrameworks = [
59
+ "react", "next", "vue", "nuxt", "svelte", "@sveltejs/kit",
60
+ "angular", "@angular/core", "gatsby", "remix", "astro", "vite",
61
+ "@playwright/test",
62
+ ];
63
+ if (webFrameworks.some(fw => fw in deps))
64
+ return "web";
65
+ }
66
+ catch { /* fall through */ }
67
+ return "node";
68
+ }
69
+ if (hasFileWith(cwd, ".xcodeproj") || hasFileWith(cwd, ".xcworkspace"))
70
+ return "xcode";
71
+ if (existsSync(join(cwd, "build.gradle")) || existsSync(join(cwd, "build.gradle.kts")))
72
+ return "android";
73
+ if (hasFileWith(cwd, ".sln") || hasFileWith(cwd, ".csproj"))
74
+ return "dotnet";
75
+ return "unknown";
76
+ }
77
+ function hasFileWith(dir, ext) {
78
+ try {
79
+ return readdirSync(dir).some(f => f.endsWith(ext));
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }
85
+ function detectIDE(cwd) {
86
+ const hasCursor = existsSync(join(cwd, ".cursor"));
87
+ const hasClaude = existsSync(join(cwd, ".claude")) || existsSync(join(cwd, "CLAUDE.md"));
88
+ if (hasCursor && hasClaude)
89
+ return "both";
90
+ if (hasCursor)
91
+ return "cursor";
92
+ if (hasClaude)
93
+ return "claude";
94
+ return "unknown";
95
+ }
96
+ function createConfig(apiKey, projectType) {
97
+ return {
98
+ api_key: apiKey,
99
+ vision_model: "auto",
100
+ platforms: projectType !== "unknown" ? [projectType] : ["auto"],
101
+ screenshot_viewports: ["375x812", "390x844", "1440x900"],
102
+ design_match_threshold: 0.85,
103
+ max_loop_iterations: 10,
104
+ auto_verify_on_complete: true,
105
+ auto_gate_check: true,
106
+ recommendations: {
107
+ enabled: true,
108
+ external_tools: true,
109
+ sponsored: false,
110
+ preferences: {
111
+ budget: "low",
112
+ self_hosted: false,
113
+ open_source_only: false,
114
+ gdpr_sensitive: false,
115
+ preferred_cloud: "",
116
+ region: "",
117
+ },
118
+ },
119
+ evidence: {
120
+ capture_screenshots: true,
121
+ capture_traces: true,
122
+ capture_videos: true,
123
+ baseline_auto_update: false,
124
+ },
125
+ };
126
+ }
127
+ function setupCursorProject(cwd, projectType, filesCreated, filesMerged) {
128
+ // Merge MCP config
129
+ const mcpPath = join(cwd, ".cursor", "mcp.json");
130
+ mergeMcpEntry(mcpPath);
131
+ filesMerged.push(".cursor/mcp.json");
132
+ // Create core rules
133
+ const rulesDir = join(cwd, ".cursor", "rules");
134
+ if (!existsSync(rulesDir))
135
+ mkdirSync(rulesDir, { recursive: true });
136
+ writeIfMissing(join(rulesDir, "core.mdc"), CORE_RULE, filesCreated, ".cursor/rules/core.mdc");
137
+ writeIfMissing(join(rulesDir, "loop.mdc"), LOOP_RULE, filesCreated, ".cursor/rules/loop.mdc");
138
+ if (projectType === "web") {
139
+ writeIfMissing(join(rulesDir, "web.mdc"), WEB_RULE, filesCreated, ".cursor/rules/web.mdc");
140
+ }
141
+ }
142
+ function setupClaudeProject(cwd, projectType, filesCreated, filesMerged) {
143
+ // Merge MCP config
144
+ const settingsPath = join(cwd, ".claude", "settings.local.json");
145
+ mergeMcpEntry(settingsPath);
146
+ filesMerged.push(".claude/settings.local.json");
147
+ // Create CLAUDE.md
148
+ const claudeMdPath = join(cwd, "CLAUDE.md");
149
+ const platformNote = projectType === "web"
150
+ ? "\n- For web projects: run `codeloop_verify` with platform 'web' after UI changes"
151
+ : "";
152
+ writeIfMissing(claudeMdPath, CLAUDE_RULE(platformNote), filesCreated, "CLAUDE.md");
153
+ }
154
+ function mergeMcpEntry(filePath) {
155
+ const dir = dirname(filePath);
156
+ if (!existsSync(dir))
157
+ mkdirSync(dir, { recursive: true });
158
+ let existing = {};
159
+ if (existsSync(filePath)) {
160
+ try {
161
+ existing = JSON.parse(readFileSync(filePath, "utf-8"));
162
+ }
163
+ catch { /* use empty */ }
164
+ }
165
+ const servers = (existing.mcpServers ?? {});
166
+ if (!servers.codeloop) {
167
+ servers.codeloop = {
168
+ command: "npx",
169
+ args: ["-y", "codeloop-mcp-server"],
170
+ env: { CODELOOP_API_KEY: "${CODELOOP_API_KEY}" },
171
+ };
172
+ existing.mcpServers = servers;
173
+ writeFileSync(filePath, JSON.stringify(existing, null, 2) + "\n", "utf-8");
174
+ }
175
+ }
176
+ function updateGitignore(cwd, filesCreated) {
177
+ const gitignorePath = join(cwd, ".gitignore");
178
+ const entries = [".codeloop/config.json", "artifacts/", ".env", ".env.*", "!.env.example"];
179
+ let content = "";
180
+ if (existsSync(gitignorePath)) {
181
+ content = readFileSync(gitignorePath, "utf-8");
182
+ }
183
+ const newEntries = entries.filter(e => !content.includes(e));
184
+ if (newEntries.length > 0) {
185
+ const addition = (content.endsWith("\n") ? "" : "\n") +
186
+ "\n# CodeLoop\n" + newEntries.join("\n") + "\n";
187
+ writeFileSync(gitignorePath, content + addition, "utf-8");
188
+ filesCreated.push(".gitignore");
189
+ }
190
+ }
191
+ function writeFileEnsureDir(filePath, content) {
192
+ const dir = dirname(filePath);
193
+ if (!existsSync(dir))
194
+ mkdirSync(dir, { recursive: true });
195
+ writeFileSync(filePath, content, "utf-8");
196
+ }
197
+ function writeIfMissing(filePath, content, filesCreated, displayPath) {
198
+ if (!existsSync(filePath)) {
199
+ writeFileEnsureDir(filePath, content);
200
+ filesCreated.push(displayPath);
201
+ }
202
+ }
203
+ // Minimal rule templates — enough to activate CodeLoop's verification loop.
204
+ // Full templates are available via `npx codeloop init` (CLI package).
205
+ const CORE_RULE = `---
206
+ description: CodeLoop automated verification — core workflow
207
+ globs: "**/*"
208
+ alwaysApply: true
209
+ ---
210
+
211
+ # CodeLoop Core Rules
212
+
213
+ ## After every code change
214
+
215
+ 1. Call \`codeloop_verify\` to run tests and static analysis
216
+ 2. Call \`codeloop_capture_screenshot\` to capture visual evidence
217
+ 3. If tests fail, call \`codeloop_diagnose\` and fix issues
218
+ 4. Call \`codeloop_gate_check\` before marking complete
219
+
220
+ ## Never
221
+
222
+ - Never skip verification after code changes
223
+ - Never mark a task complete without evidence
224
+ - Never ignore test failures
225
+ `;
226
+ const LOOP_RULE = `---
227
+ description: CodeLoop verify-diagnose-fix cycle
228
+ globs: "**/*"
229
+ alwaysApply: false
230
+ ---
231
+
232
+ # CodeLoop Loop
233
+
234
+ When implementing features:
235
+
236
+ 1. Make the code change
237
+ 2. \`codeloop_verify\` — run tests
238
+ 3. If failures → \`codeloop_diagnose\` → fix → goto 2
239
+ 4. \`codeloop_capture_screenshot\` — visual evidence
240
+ 5. \`codeloop_gate_check\` — final quality gate
241
+ `;
242
+ const WEB_RULE = `---
243
+ description: CodeLoop web project verification
244
+ globs: "**/*.{ts,tsx,js,jsx,html,css}"
245
+ alwaysApply: false
246
+ ---
247
+
248
+ # CodeLoop Web Rules
249
+
250
+ ## Verification for web projects
251
+
252
+ - Use platform "web" with \`codeloop_verify\`
253
+ - Playwright tests are the primary verification method
254
+ - Capture screenshots at key viewports (375, 390, 1440)
255
+ - Use \`codeloop_start_recording\` for interaction testing
256
+ - Interact with ALL elements during video capture
257
+ `;
258
+ function CLAUDE_RULE(platformNote) {
259
+ return `# CodeLoop Integration
260
+
261
+ This project uses CodeLoop for automated verification.
262
+
263
+ ## After every code change
264
+
265
+ 1. Call \`codeloop_verify\` to run tests and static analysis
266
+ 2. Call \`codeloop_capture_screenshot\` for visual evidence
267
+ 3. If tests fail, call \`codeloop_diagnose\` and fix issues
268
+ 4. Call \`codeloop_gate_check\` before marking complete${platformNote}
269
+
270
+ ## Never skip verification after code changes.
271
+ `;
272
+ }
273
+ //# sourceMappingURL=init-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../src/tools/init-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAiBrC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAuB;IAEvB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY;QACtE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC;QACxB,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IACvB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE3B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,kCAAkC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvE,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,gCAAgC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,wBAAwB;IACxB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvC,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvC,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAChE,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAED,uBAAuB;IACvB,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEnC,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,WAAW;QACzB,YAAY,EAAE,GAAG;QACjB,aAAa,EAAE,YAAY;QAC3B,YAAY,EAAE,WAAW;QACzB,OAAO,EAAE,4BAA4B,WAAW,qBAAqB,YAAY,CAAC,MAAM,kBAAkB,WAAW,CAAC,MAAM,WAAW;KACxI,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAC7C,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YAC7D,MAAM,aAAa,GAAG;gBACpB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe;gBACzD,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;gBAC9D,kBAAkB;aACnB,CAAC;YACF,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC;QAAE,OAAO,OAAO,CAAC;IACvF,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzG,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,GAAW;IAC3C,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IACzF,IAAI,SAAS,IAAI,SAAS;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC/B,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC/B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,WAAmB;IACvD,OAAO;QACL,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,MAAM;QACpB,SAAS,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/D,oBAAoB,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;QACxD,sBAAsB,EAAE,IAAI;QAC5B,mBAAmB,EAAE,EAAE;QACvB,uBAAuB,EAAE,IAAI;QAC7B,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE;YACf,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE;gBACX,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,KAAK;gBAClB,gBAAgB,EAAE,KAAK;gBACvB,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,EAAE;gBACnB,MAAM,EAAE,EAAE;aACX;SACF;QACD,QAAQ,EAAE;YACR,mBAAmB,EAAE,IAAI;YACzB,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,IAAI;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAW,EACX,WAAmB,EACnB,YAAsB,EACtB,WAAqB;IAErB,mBAAmB;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAErC,oBAAoB;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAC9F,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAE9F,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAW,EACX,WAAmB,EACnB,YAAsB,EACtB,WAAqB;IAErB,mBAAmB;IACnB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACjE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5B,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAEhD,mBAAmB;IACnB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,WAAW,KAAK,KAAK;QACxC,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,EAAE,CAAC;IACP,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAA4B,CAAC;IACvE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,GAAG;YACjB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACnC,GAAG,EAAE,EAAE,gBAAgB,EAAE,qBAAqB,EAAE;SACjD,CAAC;QACF,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC;QAC9B,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,YAAsB;IAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,uBAAuB,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAE3F,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAClD,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,OAAe;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CACrB,QAAgB,EAChB,OAAe,EACf,YAAsB,EACtB,WAAmB;IAEnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,sEAAsE;AAEtE,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;CAoBjB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;CAejB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;CAehB,CAAC;AAEF,SAAS,WAAW,CAAC,YAAoB;IACvC,OAAO;;;;;;;;;yDASgD,YAAY;;;CAGpE,CAAC;AACF,CAAC"}
@@ -10,10 +10,11 @@ export interface InteractionReplayOutput {
10
10
  framePaths: string[];
11
11
  expected_flow: string;
12
12
  ffmpeg_available: boolean;
13
+ logExcerpt?: string;
13
14
  }
14
15
  /**
15
16
  * Extracts key frames from a video recording and returns their paths
16
17
  * for the AI agent to analyze via its own vision model.
17
18
  */
18
- export declare function runInteractionReplay(input: InteractionReplayInput, _config: CodeLoopConfig): Promise<InteractionReplayOutput>;
19
+ export declare function runInteractionReplay(input: InteractionReplayInput, _config: CodeLoopConfig, cwd?: string): Promise<InteractionReplayOutput>;
19
20
  //# sourceMappingURL=interaction_replay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interaction_replay.d.ts","sourceRoot":"","sources":["../../src/tools/interaction_replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAqED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,uBAAuB,CAAC,CA4DlC"}
1
+ {"version":3,"file":"interaction_replay.d.ts","sourceRoot":"","sources":["../../src/tools/interaction_replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3D,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiFD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAyElC"}
@@ -2,6 +2,7 @@ import { existsSync, readdirSync, mkdirSync } from "fs";
2
2
  import { join, resolve } from "path";
3
3
  import { execFile } from "child_process";
4
4
  import { getArtifactsBaseDir, getRunDir, listRuns } from "../evidence/artifacts.js";
5
+ import { readLogTail } from "../runners/app_logger.js";
5
6
  function findVideoInRun(runId, cwd) {
6
7
  const base = getArtifactsBaseDir(cwd);
7
8
  const videosDir = join(getRunDir(runId, base), "videos");
@@ -13,6 +14,14 @@ function findVideoInRun(runId, cwd) {
13
14
  });
14
15
  return files.length > 0 ? join(videosDir, files[0]) : null;
15
16
  }
17
+ function findLogInRun(runId, cwd) {
18
+ const base = getArtifactsBaseDir(cwd);
19
+ const logsDir = join(getRunDir(runId, base), "logs");
20
+ if (!existsSync(logsDir))
21
+ return null;
22
+ const files = readdirSync(logsDir).filter((f) => f.startsWith("app_log_") && f.endsWith(".txt"));
23
+ return files.length > 0 ? join(logsDir, files[0]) : null;
24
+ }
16
25
  const MAX_FRAMES = 15;
17
26
  function extractFrames(videoPath, outputDir, maxFrames) {
18
27
  return new Promise((resolveP, reject) => {
@@ -63,8 +72,7 @@ function isFfmpegAvailable() {
63
72
  * Extracts key frames from a video recording and returns their paths
64
73
  * for the AI agent to analyze via its own vision model.
65
74
  */
66
- export async function runInteractionReplay(input, _config) {
67
- const cwd = process.cwd();
75
+ export async function runInteractionReplay(input, _config, cwd = process.cwd()) {
68
76
  let videoPath = null;
69
77
  if (input.video_path) {
70
78
  videoPath = resolve(cwd, input.video_path);
@@ -78,6 +86,16 @@ export async function runInteractionReplay(input, _config) {
78
86
  videoPath = findVideoInRun(runs[0], cwd);
79
87
  }
80
88
  }
89
+ // Find log file for this run (if available)
90
+ let logExcerpt;
91
+ if (input.run_id) {
92
+ const logPath = findLogInRun(input.run_id, cwd);
93
+ if (logPath) {
94
+ const content = readLogTail(logPath, 200);
95
+ if (content.trim())
96
+ logExcerpt = content;
97
+ }
98
+ }
81
99
  if (!videoPath || !existsSync(videoPath)) {
82
100
  return {
83
101
  video_analyzed: videoPath ?? "(none)",
@@ -85,6 +103,7 @@ export async function runInteractionReplay(input, _config) {
85
103
  framePaths: [],
86
104
  expected_flow: input.expected_flow,
87
105
  ffmpeg_available: false,
106
+ logExcerpt,
88
107
  };
89
108
  }
90
109
  const hasFfmpeg = await isFfmpegAvailable();
@@ -95,6 +114,7 @@ export async function runInteractionReplay(input, _config) {
95
114
  framePaths: [],
96
115
  expected_flow: input.expected_flow,
97
116
  ffmpeg_available: false,
117
+ logExcerpt,
98
118
  };
99
119
  }
100
120
  const framesDir = join(getArtifactsBaseDir(cwd), "replay_frames", `frames_${Date.now()}`);
@@ -106,6 +126,7 @@ export async function runInteractionReplay(input, _config) {
106
126
  framePaths,
107
127
  expected_flow: input.expected_flow,
108
128
  ffmpeg_available: true,
129
+ logExcerpt,
109
130
  };
110
131
  }
111
132
  catch {
@@ -115,6 +136,7 @@ export async function runInteractionReplay(input, _config) {
115
136
  framePaths: [],
116
137
  expected_flow: input.expected_flow,
117
138
  ffmpeg_available: true,
139
+ logExcerpt,
118
140
  };
119
141
  }
120
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interaction_replay.js","sourceRoot":"","sources":["../../src/tools/interaction_replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interaction_replay.js","sourceRoot":"","sources":["../../src/tools/interaction_replay.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,cAAc,EACtB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAkJvB"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0BlD;AAQD,wBAAsB,SAAS,CAC7B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,cAAc,EACtB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAqKvB"}