diff --git a/.github/workflows/ask.lock.yml b/.github/workflows/ask.lock.yml index bbaa645b4..6c76f0b5d 100644 --- a/.github/workflows/ask.lock.yml +++ b/.github/workflows/ask.lock.yml @@ -2,7 +2,7 @@ # To update this file, edit the corresponding .md file and run: # gh aw compile # -# Effective stop-time: 2025-09-19 12:19:14 +# Effective stop-time: 2025-09-19 12:48:19 name: "Question Answering Researcher" on: @@ -1066,7 +1066,7 @@ jobs: WORKFLOW_NAME="Question Answering Researcher" # Check stop-time limit - STOP_TIME="2025-09-19 12:19:14" + STOP_TIME="2025-09-19 12:48:19" echo "Checking stop-time limit: $STOP_TIME" # Convert stop time to epoch seconds @@ -1396,24 +1396,21 @@ jobs: * @returns {string} The string with unknown domains redacted */ function sanitizeUrlDomains(s) { - return s.replace( - /\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, - (match) => { - // Extract just the URL part after https:// - const urlAfterProtocol = match.slice(8); // Remove 'https://' - // Extract the hostname part (before first slash, colon, or other delimiter) - const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); - // Check if this domain or any parent domain is in the allowlist - const isAllowed = allowedDomains.some(allowedDomain => { - const normalizedAllowed = allowedDomain.toLowerCase(); - return ( - hostname === normalizedAllowed || - hostname.endsWith("." + normalizedAllowed) - ); - }); - return isAllowed ? match : "(redacted)"; - } - ); + return s.replace(/\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, match => { + // Extract just the URL part after https:// + const urlAfterProtocol = match.slice(8); // Remove 'https://' + // Extract the hostname part (before first slash, colon, or other delimiter) + const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); + // Check if this domain or any parent domain is in the allowlist + const isAllowed = allowedDomains.some(allowedDomain => { + const normalizedAllowed = allowedDomain.toLowerCase(); + return ( + hostname === normalizedAllowed || + hostname.endsWith("." + normalizedAllowed) + ); + }); + return isAllowed ? match : "(redacted)"; + }); } /** * Remove unknown protocols except https @@ -2113,16 +2110,22 @@ jobs: } core.setOutput("output", JSON.stringify(validatedOutput)); core.setOutput("raw_output", outputContent); + // Write processed output to step summary using core.summary + try { + await core.summary + .addRaw("## Processed Output\n\n") + .addRaw("```json\n") + .addRaw(JSON.stringify(validatedOutput)) + .addRaw("\n```\n") + .write(); + core.info("Successfully wrote processed output to step summary"); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + core.warning(`Failed to write to step summary: ${errorMsg}`); + } } // Call the main function await main(); - - name: Print sanitized agent output - run: | - echo "## Processed Output" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo '``````json' >> $GITHUB_STEP_SUMMARY - echo '${{ steps.collect_output.outputs.output }}' >> $GITHUB_STEP_SUMMARY - echo '``````' >> $GITHUB_STEP_SUMMARY - name: Upload sanitized agent output if: always() && env.GITHUB_AW_AGENT_OUTPUT uses: actions/upload-artifact@v4 diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 31045da84..31c36d35e 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -2,7 +2,7 @@ # To update this file, edit the corresponding .md file and run: # gh aw compile # -# Effective stop-time: 2025-09-19 12:19:14 +# Effective stop-time: 2025-09-19 12:48:19 name: "CI Failure Doctor" "on": @@ -547,7 +547,7 @@ jobs: WORKFLOW_NAME="CI Failure Doctor" # Check stop-time limit - STOP_TIME="2025-09-19 12:19:14" + STOP_TIME="2025-09-19 12:48:19" echo "Checking stop-time limit: $STOP_TIME" # Convert stop time to epoch seconds @@ -1010,24 +1010,21 @@ jobs: * @returns {string} The string with unknown domains redacted */ function sanitizeUrlDomains(s) { - return s.replace( - /\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, - (match) => { - // Extract just the URL part after https:// - const urlAfterProtocol = match.slice(8); // Remove 'https://' - // Extract the hostname part (before first slash, colon, or other delimiter) - const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); - // Check if this domain or any parent domain is in the allowlist - const isAllowed = allowedDomains.some(allowedDomain => { - const normalizedAllowed = allowedDomain.toLowerCase(); - return ( - hostname === normalizedAllowed || - hostname.endsWith("." + normalizedAllowed) - ); - }); - return isAllowed ? match : "(redacted)"; - } - ); + return s.replace(/\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, match => { + // Extract just the URL part after https:// + const urlAfterProtocol = match.slice(8); // Remove 'https://' + // Extract the hostname part (before first slash, colon, or other delimiter) + const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); + // Check if this domain or any parent domain is in the allowlist + const isAllowed = allowedDomains.some(allowedDomain => { + const normalizedAllowed = allowedDomain.toLowerCase(); + return ( + hostname === normalizedAllowed || + hostname.endsWith("." + normalizedAllowed) + ); + }); + return isAllowed ? match : "(redacted)"; + }); } /** * Remove unknown protocols except https @@ -1727,16 +1724,22 @@ jobs: } core.setOutput("output", JSON.stringify(validatedOutput)); core.setOutput("raw_output", outputContent); + // Write processed output to step summary using core.summary + try { + await core.summary + .addRaw("## Processed Output\n\n") + .addRaw("```json\n") + .addRaw(JSON.stringify(validatedOutput)) + .addRaw("\n```\n") + .write(); + core.info("Successfully wrote processed output to step summary"); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + core.warning(`Failed to write to step summary: ${errorMsg}`); + } } // Call the main function await main(); - - name: Print sanitized agent output - run: | - echo "## Processed Output" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo '``````json' >> $GITHUB_STEP_SUMMARY - echo '${{ steps.collect_output.outputs.output }}' >> $GITHUB_STEP_SUMMARY - echo '``````' >> $GITHUB_STEP_SUMMARY - name: Upload sanitized agent output if: always() && env.GITHUB_AW_AGENT_OUTPUT uses: actions/upload-artifact@v4 diff --git a/.github/workflows/daily-backlog-burner.lock.yml b/.github/workflows/daily-backlog-burner.lock.yml index 29b7593e9..18a236738 100644 --- a/.github/workflows/daily-backlog-burner.lock.yml +++ b/.github/workflows/daily-backlog-burner.lock.yml @@ -2,7 +2,7 @@ # To update this file, edit the corresponding .md file and run: # gh aw compile # -# Effective stop-time: 2025-09-19 12:19:14 +# Effective stop-time: 2025-09-19 12:48:20 name: "Daily Backlog Burner" "on": @@ -527,7 +527,7 @@ jobs: WORKFLOW_NAME="Daily Backlog Burner" # Check stop-time limit - STOP_TIME="2025-09-19 12:19:14" + STOP_TIME="2025-09-19 12:48:20" echo "Checking stop-time limit: $STOP_TIME" # Convert stop time to epoch seconds @@ -923,24 +923,21 @@ jobs: * @returns {string} The string with unknown domains redacted */ function sanitizeUrlDomains(s) { - return s.replace( - /\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, - (match) => { - // Extract just the URL part after https:// - const urlAfterProtocol = match.slice(8); // Remove 'https://' - // Extract the hostname part (before first slash, colon, or other delimiter) - const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); - // Check if this domain or any parent domain is in the allowlist - const isAllowed = allowedDomains.some(allowedDomain => { - const normalizedAllowed = allowedDomain.toLowerCase(); - return ( - hostname === normalizedAllowed || - hostname.endsWith("." + normalizedAllowed) - ); - }); - return isAllowed ? match : "(redacted)"; - } - ); + return s.replace(/\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, match => { + // Extract just the URL part after https:// + const urlAfterProtocol = match.slice(8); // Remove 'https://' + // Extract the hostname part (before first slash, colon, or other delimiter) + const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); + // Check if this domain or any parent domain is in the allowlist + const isAllowed = allowedDomains.some(allowedDomain => { + const normalizedAllowed = allowedDomain.toLowerCase(); + return ( + hostname === normalizedAllowed || + hostname.endsWith("." + normalizedAllowed) + ); + }); + return isAllowed ? match : "(redacted)"; + }); } /** * Remove unknown protocols except https @@ -1640,16 +1637,22 @@ jobs: } core.setOutput("output", JSON.stringify(validatedOutput)); core.setOutput("raw_output", outputContent); + // Write processed output to step summary using core.summary + try { + await core.summary + .addRaw("## Processed Output\n\n") + .addRaw("```json\n") + .addRaw(JSON.stringify(validatedOutput)) + .addRaw("\n```\n") + .write(); + core.info("Successfully wrote processed output to step summary"); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + core.warning(`Failed to write to step summary: ${errorMsg}`); + } } // Call the main function await main(); - - name: Print sanitized agent output - run: | - echo "## Processed Output" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo '``````json' >> $GITHUB_STEP_SUMMARY - echo '${{ steps.collect_output.outputs.output }}' >> $GITHUB_STEP_SUMMARY - echo '``````' >> $GITHUB_STEP_SUMMARY - name: Upload sanitized agent output if: always() && env.GITHUB_AW_AGENT_OUTPUT uses: actions/upload-artifact@v4 diff --git a/.github/workflows/daily-perf-improver.lock.yml b/.github/workflows/daily-perf-improver.lock.yml index e72ffb56f..e56dd53d4 100644 --- a/.github/workflows/daily-perf-improver.lock.yml +++ b/.github/workflows/daily-perf-improver.lock.yml @@ -2,7 +2,7 @@ # To update this file, edit the corresponding .md file and run: # gh aw compile # -# Effective stop-time: 2025-09-19 12:19:14 +# Effective stop-time: 2025-09-19 12:48:20 name: "Daily Perf Improver" "on": @@ -541,7 +541,7 @@ jobs: WORKFLOW_NAME="Daily Perf Improver" # Check stop-time limit - STOP_TIME="2025-09-19 12:19:14" + STOP_TIME="2025-09-19 12:48:20" echo "Checking stop-time limit: $STOP_TIME" # Convert stop time to epoch seconds @@ -998,24 +998,21 @@ jobs: * @returns {string} The string with unknown domains redacted */ function sanitizeUrlDomains(s) { - return s.replace( - /\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, - (match) => { - // Extract just the URL part after https:// - const urlAfterProtocol = match.slice(8); // Remove 'https://' - // Extract the hostname part (before first slash, colon, or other delimiter) - const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); - // Check if this domain or any parent domain is in the allowlist - const isAllowed = allowedDomains.some(allowedDomain => { - const normalizedAllowed = allowedDomain.toLowerCase(); - return ( - hostname === normalizedAllowed || - hostname.endsWith("." + normalizedAllowed) - ); - }); - return isAllowed ? match : "(redacted)"; - } - ); + return s.replace(/\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, match => { + // Extract just the URL part after https:// + const urlAfterProtocol = match.slice(8); // Remove 'https://' + // Extract the hostname part (before first slash, colon, or other delimiter) + const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); + // Check if this domain or any parent domain is in the allowlist + const isAllowed = allowedDomains.some(allowedDomain => { + const normalizedAllowed = allowedDomain.toLowerCase(); + return ( + hostname === normalizedAllowed || + hostname.endsWith("." + normalizedAllowed) + ); + }); + return isAllowed ? match : "(redacted)"; + }); } /** * Remove unknown protocols except https @@ -1715,16 +1712,22 @@ jobs: } core.setOutput("output", JSON.stringify(validatedOutput)); core.setOutput("raw_output", outputContent); + // Write processed output to step summary using core.summary + try { + await core.summary + .addRaw("## Processed Output\n\n") + .addRaw("```json\n") + .addRaw(JSON.stringify(validatedOutput)) + .addRaw("\n```\n") + .write(); + core.info("Successfully wrote processed output to step summary"); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + core.warning(`Failed to write to step summary: ${errorMsg}`); + } } // Call the main function await main(); - - name: Print sanitized agent output - run: | - echo "## Processed Output" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo '``````json' >> $GITHUB_STEP_SUMMARY - echo '${{ steps.collect_output.outputs.output }}' >> $GITHUB_STEP_SUMMARY - echo '``````' >> $GITHUB_STEP_SUMMARY - name: Upload sanitized agent output if: always() && env.GITHUB_AW_AGENT_OUTPUT uses: actions/upload-artifact@v4 diff --git a/.github/workflows/daily-test-improver.lock.yml b/.github/workflows/daily-test-improver.lock.yml index 465f0eb33..5f28ddf34 100644 --- a/.github/workflows/daily-test-improver.lock.yml +++ b/.github/workflows/daily-test-improver.lock.yml @@ -2,7 +2,7 @@ # To update this file, edit the corresponding .md file and run: # gh aw compile # -# Effective stop-time: 2025-09-19 12:19:15 +# Effective stop-time: 2025-09-19 12:48:20 name: "Daily Test Coverage Improver" "on": @@ -541,7 +541,7 @@ jobs: WORKFLOW_NAME="Daily Test Coverage Improver" # Check stop-time limit - STOP_TIME="2025-09-19 12:19:15" + STOP_TIME="2025-09-19 12:48:20" echo "Checking stop-time limit: $STOP_TIME" # Convert stop time to epoch seconds @@ -973,24 +973,21 @@ jobs: * @returns {string} The string with unknown domains redacted */ function sanitizeUrlDomains(s) { - return s.replace( - /\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, - (match) => { - // Extract just the URL part after https:// - const urlAfterProtocol = match.slice(8); // Remove 'https://' - // Extract the hostname part (before first slash, colon, or other delimiter) - const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); - // Check if this domain or any parent domain is in the allowlist - const isAllowed = allowedDomains.some(allowedDomain => { - const normalizedAllowed = allowedDomain.toLowerCase(); - return ( - hostname === normalizedAllowed || - hostname.endsWith("." + normalizedAllowed) - ); - }); - return isAllowed ? match : "(redacted)"; - } - ); + return s.replace(/\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, match => { + // Extract just the URL part after https:// + const urlAfterProtocol = match.slice(8); // Remove 'https://' + // Extract the hostname part (before first slash, colon, or other delimiter) + const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); + // Check if this domain or any parent domain is in the allowlist + const isAllowed = allowedDomains.some(allowedDomain => { + const normalizedAllowed = allowedDomain.toLowerCase(); + return ( + hostname === normalizedAllowed || + hostname.endsWith("." + normalizedAllowed) + ); + }); + return isAllowed ? match : "(redacted)"; + }); } /** * Remove unknown protocols except https @@ -1690,16 +1687,22 @@ jobs: } core.setOutput("output", JSON.stringify(validatedOutput)); core.setOutput("raw_output", outputContent); + // Write processed output to step summary using core.summary + try { + await core.summary + .addRaw("## Processed Output\n\n") + .addRaw("```json\n") + .addRaw(JSON.stringify(validatedOutput)) + .addRaw("\n```\n") + .write(); + core.info("Successfully wrote processed output to step summary"); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + core.warning(`Failed to write to step summary: ${errorMsg}`); + } } // Call the main function await main(); - - name: Print sanitized agent output - run: | - echo "## Processed Output" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo '``````json' >> $GITHUB_STEP_SUMMARY - echo '${{ steps.collect_output.outputs.output }}' >> $GITHUB_STEP_SUMMARY - echo '``````' >> $GITHUB_STEP_SUMMARY - name: Upload sanitized agent output if: always() && env.GITHUB_AW_AGENT_OUTPUT uses: actions/upload-artifact@v4 diff --git a/.github/workflows/pr-fix.lock.yml b/.github/workflows/pr-fix.lock.yml index 9810ca9d0..3b1205367 100644 --- a/.github/workflows/pr-fix.lock.yml +++ b/.github/workflows/pr-fix.lock.yml @@ -2,7 +2,7 @@ # To update this file, edit the corresponding .md file and run: # gh aw compile # -# Effective stop-time: 2025-09-19 12:19:15 +# Effective stop-time: 2025-09-19 12:48:20 name: "PR Fix" on: @@ -1071,7 +1071,7 @@ jobs: WORKFLOW_NAME="PR Fix" # Check stop-time limit - STOP_TIME="2025-09-19 12:19:15" + STOP_TIME="2025-09-19 12:48:20" echo "Checking stop-time limit: $STOP_TIME" # Convert stop time to epoch seconds @@ -1427,24 +1427,21 @@ jobs: * @returns {string} The string with unknown domains redacted */ function sanitizeUrlDomains(s) { - return s.replace( - /\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, - (match) => { - // Extract just the URL part after https:// - const urlAfterProtocol = match.slice(8); // Remove 'https://' - // Extract the hostname part (before first slash, colon, or other delimiter) - const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); - // Check if this domain or any parent domain is in the allowlist - const isAllowed = allowedDomains.some(allowedDomain => { - const normalizedAllowed = allowedDomain.toLowerCase(); - return ( - hostname === normalizedAllowed || - hostname.endsWith("." + normalizedAllowed) - ); - }); - return isAllowed ? match : "(redacted)"; - } - ); + return s.replace(/\bhttps:\/\/[^\s\])}'"<>&\x00-\x1f,;]+/gi, match => { + // Extract just the URL part after https:// + const urlAfterProtocol = match.slice(8); // Remove 'https://' + // Extract the hostname part (before first slash, colon, or other delimiter) + const hostname = urlAfterProtocol.split(/[\/:\?#]/)[0].toLowerCase(); + // Check if this domain or any parent domain is in the allowlist + const isAllowed = allowedDomains.some(allowedDomain => { + const normalizedAllowed = allowedDomain.toLowerCase(); + return ( + hostname === normalizedAllowed || + hostname.endsWith("." + normalizedAllowed) + ); + }); + return isAllowed ? match : "(redacted)"; + }); } /** * Remove unknown protocols except https @@ -2144,16 +2141,22 @@ jobs: } core.setOutput("output", JSON.stringify(validatedOutput)); core.setOutput("raw_output", outputContent); + // Write processed output to step summary using core.summary + try { + await core.summary + .addRaw("## Processed Output\n\n") + .addRaw("```json\n") + .addRaw(JSON.stringify(validatedOutput)) + .addRaw("\n```\n") + .write(); + core.info("Successfully wrote processed output to step summary"); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + core.warning(`Failed to write to step summary: ${errorMsg}`); + } } // Call the main function await main(); - - name: Print sanitized agent output - run: | - echo "## Processed Output" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo '``````json' >> $GITHUB_STEP_SUMMARY - echo '${{ steps.collect_output.outputs.output }}' >> $GITHUB_STEP_SUMMARY - echo '``````' >> $GITHUB_STEP_SUMMARY - name: Upload sanitized agent output if: always() && env.GITHUB_AW_AGENT_OUTPUT uses: actions/upload-artifact@v4