speclore 0.1.2 → 0.1.4
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.
- package/LICENSE +21 -21
- package/README.en.md +240 -240
- package/README.md +240 -240
- package/dist/cli/index.js +8 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates/report.html +201 -201
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/server.js.map +1 -1
- package/package.json +20 -18
- package/scripts/cleanup-global.cjs +46 -46
- package/src/cli/templates/report.html +201 -201
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>SpecLore Verification Report — {{PROJECT}}</title>
|
|
7
|
-
<style>
|
|
8
|
-
:root {
|
|
9
|
-
--color-bg: #f8f9fa;
|
|
10
|
-
--color-surface: #ffffff;
|
|
11
|
-
--color-text: #1a1a2e;
|
|
12
|
-
--color-text-secondary: #6c757d;
|
|
13
|
-
--color-border: #dee2e6;
|
|
14
|
-
--color-passed: #198754;
|
|
15
|
-
--color-failed: #dc3545;
|
|
16
|
-
--color-skipped: #ffc107;
|
|
17
|
-
--color-unmapped: #6c757d;
|
|
18
|
-
--color-accent: #0d6efd;
|
|
19
|
-
--radius: 8px;
|
|
20
|
-
}
|
|
21
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
22
|
-
body {
|
|
23
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
24
|
-
background: var(--color-bg);
|
|
25
|
-
color: var(--color-text);
|
|
26
|
-
line-height: 1.6;
|
|
27
|
-
padding: 2rem;
|
|
28
|
-
max-width: 1200px;
|
|
29
|
-
margin: 0 auto;
|
|
30
|
-
}
|
|
31
|
-
header {
|
|
32
|
-
background: var(--color-surface);
|
|
33
|
-
border: 1px solid var(--color-border);
|
|
34
|
-
border-radius: var(--radius);
|
|
35
|
-
padding: 1.5rem 2rem;
|
|
36
|
-
margin-bottom: 1.5rem;
|
|
37
|
-
}
|
|
38
|
-
header h1 {
|
|
39
|
-
font-size: 1.5rem;
|
|
40
|
-
font-weight: 600;
|
|
41
|
-
margin-bottom: 0.5rem;
|
|
42
|
-
}
|
|
43
|
-
header .meta {
|
|
44
|
-
color: var(--color-text-secondary);
|
|
45
|
-
font-size: 0.875rem;
|
|
46
|
-
}
|
|
47
|
-
.summary {
|
|
48
|
-
display: grid;
|
|
49
|
-
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
50
|
-
gap: 1rem;
|
|
51
|
-
margin-bottom: 1.5rem;
|
|
52
|
-
}
|
|
53
|
-
.stat-card {
|
|
54
|
-
background: var(--color-surface);
|
|
55
|
-
border: 1px solid var(--color-border);
|
|
56
|
-
border-radius: var(--radius);
|
|
57
|
-
padding: 1rem 1.25rem;
|
|
58
|
-
text-align: center;
|
|
59
|
-
}
|
|
60
|
-
.stat-card .value {
|
|
61
|
-
font-size: 2rem;
|
|
62
|
-
font-weight: 700;
|
|
63
|
-
line-height: 1.2;
|
|
64
|
-
}
|
|
65
|
-
.stat-card .label {
|
|
66
|
-
font-size: 0.75rem;
|
|
67
|
-
text-transform: uppercase;
|
|
68
|
-
letter-spacing: 0.05em;
|
|
69
|
-
color: var(--color-text-secondary);
|
|
70
|
-
margin-top: 0.25rem;
|
|
71
|
-
}
|
|
72
|
-
.stat-card.passed .value { color: var(--color-passed); }
|
|
73
|
-
.stat-card.failed .value { color: var(--color-failed); }
|
|
74
|
-
.stat-card.unmapped .value { color: var(--color-unmapped); }
|
|
75
|
-
section.feature {
|
|
76
|
-
background: var(--color-surface);
|
|
77
|
-
border: 1px solid var(--color-border);
|
|
78
|
-
border-radius: var(--radius);
|
|
79
|
-
padding: 1.25rem 1.5rem;
|
|
80
|
-
margin-bottom: 1rem;
|
|
81
|
-
}
|
|
82
|
-
section.feature h3 {
|
|
83
|
-
font-size: 1.1rem;
|
|
84
|
-
font-weight: 600;
|
|
85
|
-
margin-bottom: 0.25rem;
|
|
86
|
-
}
|
|
87
|
-
section.feature .file {
|
|
88
|
-
font-size: 0.8rem;
|
|
89
|
-
color: var(--color-text-secondary);
|
|
90
|
-
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
|
|
91
|
-
margin-bottom: 0.75rem;
|
|
92
|
-
}
|
|
93
|
-
table {
|
|
94
|
-
width: 100%;
|
|
95
|
-
border-collapse: collapse;
|
|
96
|
-
font-size: 0.875rem;
|
|
97
|
-
}
|
|
98
|
-
thead th {
|
|
99
|
-
text-align: left;
|
|
100
|
-
padding: 0.5rem 0.75rem;
|
|
101
|
-
border-bottom: 2px solid var(--color-border);
|
|
102
|
-
font-weight: 600;
|
|
103
|
-
font-size: 0.75rem;
|
|
104
|
-
text-transform: uppercase;
|
|
105
|
-
letter-spacing: 0.05em;
|
|
106
|
-
color: var(--color-text-secondary);
|
|
107
|
-
}
|
|
108
|
-
tbody td {
|
|
109
|
-
padding: 0.5rem 0.75rem;
|
|
110
|
-
border-bottom: 1px solid var(--color-border);
|
|
111
|
-
}
|
|
112
|
-
.status {
|
|
113
|
-
display: inline-flex;
|
|
114
|
-
align-items: center;
|
|
115
|
-
gap: 0.25rem;
|
|
116
|
-
font-weight: 500;
|
|
117
|
-
font-size: 0.8rem;
|
|
118
|
-
padding: 0.15rem 0.5rem;
|
|
119
|
-
border-radius: 999px;
|
|
120
|
-
}
|
|
121
|
-
.status.passed { background: #d1e7dd; color: var(--color-passed); }
|
|
122
|
-
.status.failed { background: #f8d7da; color: var(--color-failed); }
|
|
123
|
-
.status.skipped { background: #fff3cd; color: #997404; }
|
|
124
|
-
.status.unmapped { background: #e2e3e5; color: var(--color-unmapped); }
|
|
125
|
-
section.failures {
|
|
126
|
-
background: var(--color-surface);
|
|
127
|
-
border: 1px solid #f8d7da;
|
|
128
|
-
border-radius: var(--radius);
|
|
129
|
-
padding: 1.25rem 1.5rem;
|
|
130
|
-
margin-top: 1.5rem;
|
|
131
|
-
}
|
|
132
|
-
section.failures h2 {
|
|
133
|
-
color: var(--color-failed);
|
|
134
|
-
font-size: 1.1rem;
|
|
135
|
-
margin-bottom: 0.75rem;
|
|
136
|
-
}
|
|
137
|
-
details {
|
|
138
|
-
margin-bottom: 0.75rem;
|
|
139
|
-
}
|
|
140
|
-
details summary {
|
|
141
|
-
cursor: pointer;
|
|
142
|
-
font-weight: 500;
|
|
143
|
-
padding: 0.5rem 0;
|
|
144
|
-
color: var(--color-failed);
|
|
145
|
-
}
|
|
146
|
-
details pre {
|
|
147
|
-
background: #1e1e2e;
|
|
148
|
-
color: #cdd6f4;
|
|
149
|
-
padding: 1rem;
|
|
150
|
-
border-radius: var(--radius);
|
|
151
|
-
overflow-x: auto;
|
|
152
|
-
font-size: 0.8rem;
|
|
153
|
-
line-height: 1.5;
|
|
154
|
-
margin-top: 0.5rem;
|
|
155
|
-
}
|
|
156
|
-
footer {
|
|
157
|
-
text-align: center;
|
|
158
|
-
margin-top: 2rem;
|
|
159
|
-
color: var(--color-text-secondary);
|
|
160
|
-
font-size: 0.75rem;
|
|
161
|
-
}
|
|
162
|
-
</style>
|
|
163
|
-
</head>
|
|
164
|
-
<body>
|
|
165
|
-
<header>
|
|
166
|
-
<h1>SpecLore Verification Report</h1>
|
|
167
|
-
<p class="meta">{{PROJECT}} — {{TIMESTAMP}}</p>
|
|
168
|
-
</header>
|
|
169
|
-
|
|
170
|
-
<div class="summary">
|
|
171
|
-
<div class="stat-card">
|
|
172
|
-
<div class="value">{{TOTAL_SCENARIOS}}</div>
|
|
173
|
-
<div class="label">Total Scenarios</div>
|
|
174
|
-
</div>
|
|
175
|
-
<div class="stat-card passed">
|
|
176
|
-
<div class="value">{{PASSED}}</div>
|
|
177
|
-
<div class="label">Passed</div>
|
|
178
|
-
</div>
|
|
179
|
-
<div class="stat-card failed">
|
|
180
|
-
<div class="value">{{FAILED}}</div>
|
|
181
|
-
<div class="label">Failed</div>
|
|
182
|
-
</div>
|
|
183
|
-
<div class="stat-card unmapped">
|
|
184
|
-
<div class="value">{{UNMAPPED}}</div>
|
|
185
|
-
<div class="label">Unmapped</div>
|
|
186
|
-
</div>
|
|
187
|
-
<div class="stat-card">
|
|
188
|
-
<div class="value">{{PASS_RATE}}</div>
|
|
189
|
-
<div class="label">Pass Rate</div>
|
|
190
|
-
</div>
|
|
191
|
-
</div>
|
|
192
|
-
|
|
193
|
-
{{FEATURES}}
|
|
194
|
-
|
|
195
|
-
{{FAILED_DETAILS}}
|
|
196
|
-
|
|
197
|
-
<footer>
|
|
198
|
-
Generated by <a href="https://github.com/nicepkg/speclore" style="color: var(--color-accent);">SpecLore</a>
|
|
199
|
-
</footer>
|
|
200
|
-
</body>
|
|
201
|
-
</html>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>SpecLore Verification Report — {{PROJECT}}</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
--color-bg: #f8f9fa;
|
|
10
|
+
--color-surface: #ffffff;
|
|
11
|
+
--color-text: #1a1a2e;
|
|
12
|
+
--color-text-secondary: #6c757d;
|
|
13
|
+
--color-border: #dee2e6;
|
|
14
|
+
--color-passed: #198754;
|
|
15
|
+
--color-failed: #dc3545;
|
|
16
|
+
--color-skipped: #ffc107;
|
|
17
|
+
--color-unmapped: #6c757d;
|
|
18
|
+
--color-accent: #0d6efd;
|
|
19
|
+
--radius: 8px;
|
|
20
|
+
}
|
|
21
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
22
|
+
body {
|
|
23
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
24
|
+
background: var(--color-bg);
|
|
25
|
+
color: var(--color-text);
|
|
26
|
+
line-height: 1.6;
|
|
27
|
+
padding: 2rem;
|
|
28
|
+
max-width: 1200px;
|
|
29
|
+
margin: 0 auto;
|
|
30
|
+
}
|
|
31
|
+
header {
|
|
32
|
+
background: var(--color-surface);
|
|
33
|
+
border: 1px solid var(--color-border);
|
|
34
|
+
border-radius: var(--radius);
|
|
35
|
+
padding: 1.5rem 2rem;
|
|
36
|
+
margin-bottom: 1.5rem;
|
|
37
|
+
}
|
|
38
|
+
header h1 {
|
|
39
|
+
font-size: 1.5rem;
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
margin-bottom: 0.5rem;
|
|
42
|
+
}
|
|
43
|
+
header .meta {
|
|
44
|
+
color: var(--color-text-secondary);
|
|
45
|
+
font-size: 0.875rem;
|
|
46
|
+
}
|
|
47
|
+
.summary {
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
50
|
+
gap: 1rem;
|
|
51
|
+
margin-bottom: 1.5rem;
|
|
52
|
+
}
|
|
53
|
+
.stat-card {
|
|
54
|
+
background: var(--color-surface);
|
|
55
|
+
border: 1px solid var(--color-border);
|
|
56
|
+
border-radius: var(--radius);
|
|
57
|
+
padding: 1rem 1.25rem;
|
|
58
|
+
text-align: center;
|
|
59
|
+
}
|
|
60
|
+
.stat-card .value {
|
|
61
|
+
font-size: 2rem;
|
|
62
|
+
font-weight: 700;
|
|
63
|
+
line-height: 1.2;
|
|
64
|
+
}
|
|
65
|
+
.stat-card .label {
|
|
66
|
+
font-size: 0.75rem;
|
|
67
|
+
text-transform: uppercase;
|
|
68
|
+
letter-spacing: 0.05em;
|
|
69
|
+
color: var(--color-text-secondary);
|
|
70
|
+
margin-top: 0.25rem;
|
|
71
|
+
}
|
|
72
|
+
.stat-card.passed .value { color: var(--color-passed); }
|
|
73
|
+
.stat-card.failed .value { color: var(--color-failed); }
|
|
74
|
+
.stat-card.unmapped .value { color: var(--color-unmapped); }
|
|
75
|
+
section.feature {
|
|
76
|
+
background: var(--color-surface);
|
|
77
|
+
border: 1px solid var(--color-border);
|
|
78
|
+
border-radius: var(--radius);
|
|
79
|
+
padding: 1.25rem 1.5rem;
|
|
80
|
+
margin-bottom: 1rem;
|
|
81
|
+
}
|
|
82
|
+
section.feature h3 {
|
|
83
|
+
font-size: 1.1rem;
|
|
84
|
+
font-weight: 600;
|
|
85
|
+
margin-bottom: 0.25rem;
|
|
86
|
+
}
|
|
87
|
+
section.feature .file {
|
|
88
|
+
font-size: 0.8rem;
|
|
89
|
+
color: var(--color-text-secondary);
|
|
90
|
+
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
|
|
91
|
+
margin-bottom: 0.75rem;
|
|
92
|
+
}
|
|
93
|
+
table {
|
|
94
|
+
width: 100%;
|
|
95
|
+
border-collapse: collapse;
|
|
96
|
+
font-size: 0.875rem;
|
|
97
|
+
}
|
|
98
|
+
thead th {
|
|
99
|
+
text-align: left;
|
|
100
|
+
padding: 0.5rem 0.75rem;
|
|
101
|
+
border-bottom: 2px solid var(--color-border);
|
|
102
|
+
font-weight: 600;
|
|
103
|
+
font-size: 0.75rem;
|
|
104
|
+
text-transform: uppercase;
|
|
105
|
+
letter-spacing: 0.05em;
|
|
106
|
+
color: var(--color-text-secondary);
|
|
107
|
+
}
|
|
108
|
+
tbody td {
|
|
109
|
+
padding: 0.5rem 0.75rem;
|
|
110
|
+
border-bottom: 1px solid var(--color-border);
|
|
111
|
+
}
|
|
112
|
+
.status {
|
|
113
|
+
display: inline-flex;
|
|
114
|
+
align-items: center;
|
|
115
|
+
gap: 0.25rem;
|
|
116
|
+
font-weight: 500;
|
|
117
|
+
font-size: 0.8rem;
|
|
118
|
+
padding: 0.15rem 0.5rem;
|
|
119
|
+
border-radius: 999px;
|
|
120
|
+
}
|
|
121
|
+
.status.passed { background: #d1e7dd; color: var(--color-passed); }
|
|
122
|
+
.status.failed { background: #f8d7da; color: var(--color-failed); }
|
|
123
|
+
.status.skipped { background: #fff3cd; color: #997404; }
|
|
124
|
+
.status.unmapped { background: #e2e3e5; color: var(--color-unmapped); }
|
|
125
|
+
section.failures {
|
|
126
|
+
background: var(--color-surface);
|
|
127
|
+
border: 1px solid #f8d7da;
|
|
128
|
+
border-radius: var(--radius);
|
|
129
|
+
padding: 1.25rem 1.5rem;
|
|
130
|
+
margin-top: 1.5rem;
|
|
131
|
+
}
|
|
132
|
+
section.failures h2 {
|
|
133
|
+
color: var(--color-failed);
|
|
134
|
+
font-size: 1.1rem;
|
|
135
|
+
margin-bottom: 0.75rem;
|
|
136
|
+
}
|
|
137
|
+
details {
|
|
138
|
+
margin-bottom: 0.75rem;
|
|
139
|
+
}
|
|
140
|
+
details summary {
|
|
141
|
+
cursor: pointer;
|
|
142
|
+
font-weight: 500;
|
|
143
|
+
padding: 0.5rem 0;
|
|
144
|
+
color: var(--color-failed);
|
|
145
|
+
}
|
|
146
|
+
details pre {
|
|
147
|
+
background: #1e1e2e;
|
|
148
|
+
color: #cdd6f4;
|
|
149
|
+
padding: 1rem;
|
|
150
|
+
border-radius: var(--radius);
|
|
151
|
+
overflow-x: auto;
|
|
152
|
+
font-size: 0.8rem;
|
|
153
|
+
line-height: 1.5;
|
|
154
|
+
margin-top: 0.5rem;
|
|
155
|
+
}
|
|
156
|
+
footer {
|
|
157
|
+
text-align: center;
|
|
158
|
+
margin-top: 2rem;
|
|
159
|
+
color: var(--color-text-secondary);
|
|
160
|
+
font-size: 0.75rem;
|
|
161
|
+
}
|
|
162
|
+
</style>
|
|
163
|
+
</head>
|
|
164
|
+
<body>
|
|
165
|
+
<header>
|
|
166
|
+
<h1>SpecLore Verification Report</h1>
|
|
167
|
+
<p class="meta">{{PROJECT}} — {{TIMESTAMP}}</p>
|
|
168
|
+
</header>
|
|
169
|
+
|
|
170
|
+
<div class="summary">
|
|
171
|
+
<div class="stat-card">
|
|
172
|
+
<div class="value">{{TOTAL_SCENARIOS}}</div>
|
|
173
|
+
<div class="label">Total Scenarios</div>
|
|
174
|
+
</div>
|
|
175
|
+
<div class="stat-card passed">
|
|
176
|
+
<div class="value">{{PASSED}}</div>
|
|
177
|
+
<div class="label">Passed</div>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="stat-card failed">
|
|
180
|
+
<div class="value">{{FAILED}}</div>
|
|
181
|
+
<div class="label">Failed</div>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="stat-card unmapped">
|
|
184
|
+
<div class="value">{{UNMAPPED}}</div>
|
|
185
|
+
<div class="label">Unmapped</div>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="stat-card">
|
|
188
|
+
<div class="value">{{PASS_RATE}}</div>
|
|
189
|
+
<div class="label">Pass Rate</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
{{FEATURES}}
|
|
194
|
+
|
|
195
|
+
{{FAILED_DETAILS}}
|
|
196
|
+
|
|
197
|
+
<footer>
|
|
198
|
+
Generated by <a href="https://github.com/nicepkg/speclore" style="color: var(--color-accent);">SpecLore</a>
|
|
199
|
+
</footer>
|
|
200
|
+
</body>
|
|
201
|
+
</html>
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
-
var __esm = (fn, res) => function __init() {
|
|
4
|
-
|
|
3
|
+
var __esm = (fn, res, err) => function __init() {
|
|
4
|
+
if (err) throw err[0];
|
|
5
|
+
try {
|
|
6
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
7
|
+
} catch (e) {
|
|
8
|
+
throw err = [e], e;
|
|
9
|
+
}
|
|
5
10
|
};
|
|
6
11
|
var __export = (target, all) => {
|
|
7
12
|
for (var name in all)
|
|
@@ -5062,7 +5067,7 @@ var init_server = __esm({
|
|
|
5062
5067
|
description: STATUS_TOOL_DESC,
|
|
5063
5068
|
inputSchema: statusInputSchema.shape
|
|
5064
5069
|
},
|
|
5065
|
-
|
|
5070
|
+
(args) => {
|
|
5066
5071
|
const result = executeStatusTool(
|
|
5067
5072
|
{ feature: args.feature },
|
|
5068
5073
|
getProjectRoot()
|