File size: 5,516 Bytes
5448d8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { describe, it } from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import path from "node:path";

import {
  detectCommandOutput,
  detectCommandType,
} from "../../../open-sse/services/compression/index.ts";

const FIXTURES = path.join(path.dirname(fileURLToPath(import.meta.url)), "fixtures", "rtk");

function fixture(name: string): string {
  return readFileSync(path.join(FIXTURES, name), "utf8");
}

describe("RTK command detector", () => {
  it("detects planned command output classes", () => {
    assert.equal(
      detectCommandType(fixture("git-status-sample.txt"), "git status").type,
      "git-status"
    );
    assert.equal(detectCommandType(fixture("git-diff-sample.txt"), "git diff").type, "git-diff");
    assert.equal(detectCommandType("commit abcdef1\nAuthor: A", "git log").type, "git-log");
    assert.equal(
      detectCommandType(fixture("vitest-output-sample.txt"), "vitest").type,
      "test-vitest"
    );
    assert.equal(detectCommandType("FAIL test\nTests: 1 failed", "jest").type, "test-jest");
    assert.equal(detectCommandType("FAILED test_a.py::test_a", "pytest").type, "test-pytest");
    assert.equal(
      detectCommandType(fixture("typescript-errors-sample.txt"), "tsc --noEmit").type,
      "build-typescript"
    );
    assert.equal(
      detectCommandType(fixture("eslint-output-sample.txt"), "eslint .").type,
      "build-eslint"
    );
    assert.equal(
      detectCommandType("CONTAINER ID   IMAGE   COMMAND", "docker ps").type,
      "docker-ps"
    );
    assert.equal(detectCommandType(fixture("json-output-sample.txt")).type, "json-output");
    assert.equal(detectCommandType("Error: boom\n    at fn").type, "generic-error");
  });

  it("detects RTK parity command output classes", () => {
    const cases: Array<[string, string | null, string]> = [
      ["* feature/rtk\n  main", "git branch", "git-branch"],
      ["running 2 tests\ntest a ... FAILED\ntest result: FAILED", "cargo test", "test-cargo"],
      ["--- FAIL: TestA\nFAIL\t./pkg\t0.1s", "go test ./...", "test-go"],
      ["webpack 5.0.0 compiled with 1 error", "webpack", "build-webpack"],
      ["vite v5.0.0\n✓ built in 100ms", "vite build", "build-vite"],
      ["2026-05-02T00:00:00Z ERROR failed", "docker logs app", "docker-logs"],
      ["./src/a.ts\n./src/b.ts", "find . -name '*.ts'", "shell-find"],
      ["src/a.ts:1:match", "rg match", "shell-grep"],
      ["found 1 vulnerabilities\ncritical severity", "npm audit", "npm-audit"],
      ['Traceback (most recent call last):\n  File "a.py", line 1', null, "error-stacktrace"],
      ["make[1]: Entering directory '/repo'\nmake: *** [all] Error 2", "make", "make"],
      [
        "Terraform will perform the following actions:\nPlan: 1 to add",
        "terraform plan",
        "terraform-plan",
      ],
      ["OpenTofu will perform the following actions:\nPlan: 1 to add", "tofu plan", "tofu-plan"],
      ["Active: failed (Result: exit-code)", "systemctl status omniroute", "systemctl-status"],
      ["Checked 12 files in 18ms. No fixes applied.", "biome check .", "biome"],
      ["Checking formatting...\n[warn] src/app.ts", "prettier --check .", "prettier"],
      ["• Packages in scope: web\nTasks: 1 successful", "turbo build", "turbo"],
      ["NX   Running target build for 2 projects", "nx build web", "nx"],
      ["Running 3 tests using 1 worker", "playwright test", "playwright"],
      ["src/app.py:1:1: F401 unused import", "ruff check .", "ruff"],
      ["src/app.py:12: error: incompatible type", "mypy src", "mypy"],
      ["Collecting requests\nSuccessfully installed requests", "pip install requests", "pip"],
      ["Resolved 42 packages\nInstalled 3 packages", "uv sync", "uv-sync"],
      ["Installing dependencies from lock file", "poetry install", "poetry-install"],
      ["pkg/main.go:22:1: issue\n2 issues:", "golangci-lint run", "golangci-lint"],
      ["Bundle complete! 12 Gemfile dependencies", "bundle install", "bundle-install"],
      ["Inspecting 2 files\napp.rb:1:1: C: Style/FrozenStringLiteralComment", "rubocop", "rubocop"],
      ["An error occurred (AccessDenied) when calling", "aws s3 ls", "aws"],
      ["ERROR: (gcloud.run.deploy) PERMISSION_DENIED", "gcloud run deploy", "gcloud"],
      ["Permission denied (publickey).", "ssh host", "ssh"],
      ["sending incremental file list\nrsync error: code 23", "rsync -av src host:", "rsync"],
      ["HTTP/1.1 500 Internal Server Error", "curl -i example.test", "curl"],
      ["ERROR 404: Not Found.", "wget example.test/missing", "wget"],
      ["USER       PID %CPU COMMAND", "ps aux", "shell-ps"],
      ["Filesystem      Size  Used Avail Use% Mounted on", "df -h", "shell-df"],
      ["120M node_modules", "du -sh *", "shell-du"],
    ];

    for (const [text, command, expected] of cases) {
      const detection = detectCommandType(text, command);
      assert.equal(detection.type, expected);
      assert.ok(detection.matchedPatterns.length > 0);
      assert.ok(detection.confidence >= 0.25);
    }
  });

  it("returns unknown for generic text and exposes planned alias", () => {
    const detection = detectCommandOutput("ordinary prose without command output");

    assert.equal(detection.type, "unknown");
    assert.ok(detection.confidence > 0);
    assert.deepEqual(detection.matchedPatterns, []);
  });
});