donobu 2.23.4 → 2.23.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.
@@ -1 +1 @@
1
- 1259
1
+ 1260
@@ -94,7 +94,12 @@ function generateMarkdown(jsonData) {
94
94
  test.annotations &&
95
95
  test.annotations.some((a) => a.type === 'self-healed');
96
96
 
97
- if (result) {
97
+ if (
98
+ test.status === 'skipped' ||
99
+ (!result && test.status === undefined)
100
+ ) {
101
+ skipped++;
102
+ } else if (result) {
98
103
  if (isSelfHealed) {
99
104
  selfHealed++;
100
105
  } else {
@@ -131,13 +136,8 @@ function generateMarkdown(jsonData) {
131
136
  totalInterrupted += interrupted;
132
137
  totalSelfHealed += selfHealed;
133
138
  totalDuration += fileDuration;
134
- const anchor = suite.file
135
- .replace(/[^\w\s-]/g, '') // remove non-alphanumeric
136
- .trim()
137
- .replace(/\s+/g, '-') // spaces to dashes
138
- .toLowerCase();
139
139
 
140
- markdown += `| [${suite.file}](#${anchor}) | ${passed ? passed + ' ✅' : ''} | ${selfHealed ? selfHealed + ' ❤️‍🩹' : ''} | ${failed ? failed + ' ❌' : ''} | ${timedOut ? timedOut + ' ⏰' : ''} | ${skipped ? skipped + ' ⏭️' : ''} | ${interrupted ? interrupted + ' ⚡' : ''} | ${formatDuration(fileDuration)} |\n`;
140
+ markdown += `| ${suite.file} | ${passed ? passed + ' ✅' : ''} | ${selfHealed ? selfHealed + ' ❤️‍🩹' : ''} | ${failed ? failed + ' ❌' : ''} | ${timedOut ? timedOut + ' ⏰' : ''} | ${skipped ? skipped + ' ⏭️' : ''} | ${interrupted ? interrupted + ' ⚡' : ''} | ${formatDuration(fileDuration)} |\n`;
141
141
  });
142
142
 
143
143
  // Add totals row
@@ -156,11 +156,25 @@ function generateMarkdown(jsonData) {
156
156
  spec.tests.forEach((test) => {
157
157
  const result = test.results && test.results.at(-1);
158
158
 
159
- // Skip tests without results
160
- if (!result) {
161
- markdown += `**Status**: ⚠️ No Results\n`;
162
- markdown += `**Duration**: N/A\n`;
163
- markdown += `**Objective**: Test skipped or no results available\n`;
159
+ if (test.status === 'skipped' || !result || test.status !== undefined) {
160
+ markdown += `**Status**: ⏭️ Skipped \n`;
161
+ markdown += `**Duration**: N/A \n`;
162
+ // Get objective from annotations if available
163
+ let objective = 'No objective provided';
164
+
165
+ if (test.annotations) {
166
+ const objectiveAnnotation = test.annotations.find(
167
+ (a) => a.type === 'objective',
168
+ );
169
+ if (objectiveAnnotation) {
170
+ objective =
171
+ objectiveAnnotation.description || 'No objective provided';
172
+ }
173
+ }
174
+
175
+ // Escape any existing triple backticks in the objective
176
+ objective = objective.replace(/```/g, '\\`\\`\\`');
177
+ markdown += `**Objective**:\n\`\`\`\n${objective}\n\`\`\`\n`;
164
178
  markdown += `---\n\n`;
165
179
  return;
166
180
  }
@@ -1 +1 @@
1
- 1259
1
+ 1260
@@ -94,7 +94,12 @@ function generateMarkdown(jsonData) {
94
94
  test.annotations &&
95
95
  test.annotations.some((a) => a.type === 'self-healed');
96
96
 
97
- if (result) {
97
+ if (
98
+ test.status === 'skipped' ||
99
+ (!result && test.status === undefined)
100
+ ) {
101
+ skipped++;
102
+ } else if (result) {
98
103
  if (isSelfHealed) {
99
104
  selfHealed++;
100
105
  } else {
@@ -131,13 +136,8 @@ function generateMarkdown(jsonData) {
131
136
  totalInterrupted += interrupted;
132
137
  totalSelfHealed += selfHealed;
133
138
  totalDuration += fileDuration;
134
- const anchor = suite.file
135
- .replace(/[^\w\s-]/g, '') // remove non-alphanumeric
136
- .trim()
137
- .replace(/\s+/g, '-') // spaces to dashes
138
- .toLowerCase();
139
139
 
140
- markdown += `| [${suite.file}](#${anchor}) | ${passed ? passed + ' ✅' : ''} | ${selfHealed ? selfHealed + ' ❤️‍🩹' : ''} | ${failed ? failed + ' ❌' : ''} | ${timedOut ? timedOut + ' ⏰' : ''} | ${skipped ? skipped + ' ⏭️' : ''} | ${interrupted ? interrupted + ' ⚡' : ''} | ${formatDuration(fileDuration)} |\n`;
140
+ markdown += `| ${suite.file} | ${passed ? passed + ' ✅' : ''} | ${selfHealed ? selfHealed + ' ❤️‍🩹' : ''} | ${failed ? failed + ' ❌' : ''} | ${timedOut ? timedOut + ' ⏰' : ''} | ${skipped ? skipped + ' ⏭️' : ''} | ${interrupted ? interrupted + ' ⚡' : ''} | ${formatDuration(fileDuration)} |\n`;
141
141
  });
142
142
 
143
143
  // Add totals row
@@ -156,11 +156,25 @@ function generateMarkdown(jsonData) {
156
156
  spec.tests.forEach((test) => {
157
157
  const result = test.results && test.results.at(-1);
158
158
 
159
- // Skip tests without results
160
- if (!result) {
161
- markdown += `**Status**: ⚠️ No Results\n`;
162
- markdown += `**Duration**: N/A\n`;
163
- markdown += `**Objective**: Test skipped or no results available\n`;
159
+ if (test.status === 'skipped' || !result || test.status !== undefined) {
160
+ markdown += `**Status**: ⏭️ Skipped \n`;
161
+ markdown += `**Duration**: N/A \n`;
162
+ // Get objective from annotations if available
163
+ let objective = 'No objective provided';
164
+
165
+ if (test.annotations) {
166
+ const objectiveAnnotation = test.annotations.find(
167
+ (a) => a.type === 'objective',
168
+ );
169
+ if (objectiveAnnotation) {
170
+ objective =
171
+ objectiveAnnotation.description || 'No objective provided';
172
+ }
173
+ }
174
+
175
+ // Escape any existing triple backticks in the objective
176
+ objective = objective.replace(/```/g, '\\`\\`\\`');
177
+ markdown += `**Objective**:\n\`\`\`\n${objective}\n\`\`\`\n`;
164
178
  markdown += `---\n\n`;
165
179
  return;
166
180
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "donobu",
3
- "version": "2.23.4",
3
+ "version": "2.23.5",
4
4
  "description": "Create browser automations with an LLM agent and replay them as Playwright scripts.",
5
5
  "main": "dist/main.js",
6
6
  "module": "dist/esm/main.js",