Compare commits

...

18 Commits

Author SHA1 Message Date
Carlos Polop
28e773ff2d chore: touch linpeas module to retrigger PR-tests 2026-02-13 18:16:05 +01:00
Carlos Polop
06756b8d0f chore: retrigger after agent_config key hotfix 2026-02-13 18:15:39 +01:00
Carlos Polop
5c2ed8576e chore: retrigger PR-tests after enabling workflow-run automation 2026-02-13 18:11:26 +01:00
Carlos Polop
10de2d0540 test: enable chack workflows, add subuid check, and inject linpeas build failure 2026-02-13 18:06:22 +01:00
Carlos Polop
6a1d1efe95 ci: temporarily disable all chack-agent workflows 2026-02-11 19:36:26 +01:00
Carlos Polop
cf3565d7e0 Revert "test: intentional ci break for chack agent workflow validation"
This reverts commit 386ef0642a.
2026-02-11 17:17:46 +01:00
Carlos Polop
386ef0642a test: intentional ci break for chack agent workflow validation 2026-02-11 17:05:14 +01:00
Carlos Polop
0680509774 Use CHACK_LOGS_HTTP_URL repository secret in workflows 2026-02-11 16:42:13 +01:00
Carlos Polop
3b0a8fd616 Set CHACK_LOGS_HTTP_URL for chack-agent workflows 2026-02-11 16:40:59 +01:00
Carlos Polop
62ef61af0f Do not fail workflow when token cannot push workflow-touching refs 2026-02-11 15:57:06 +01:00
Carlos Polop
b6c4474c27 Skip auto-push when workflow files remain staged 2026-02-11 15:46:13 +01:00
Carlos Polop
4650d6b8ad Exclude untracked workflow files from chack-agent auto-fix commits 2026-02-11 15:35:18 +01:00
Carlos Polop
354e3b81fb Harden chack-agent auto-commit against workflow permission rejects 2026-02-11 15:26:27 +01:00
Carlos Polop
2848feda9b Remove max_turns caps and harden triage output parsing 2026-02-11 15:08:27 +01:00
Carlos Polop
0bec3535dc Remove timeout limits from chack-agent workflow steps 2026-02-11 14:26:32 +01:00
Carlos Polop
2b1ab21f66 Disable self-critique and enforce task-list init in workflows 2026-02-11 14:24:43 +01:00
Carlos Polop
a8c5967d21 Bound chack-agent runtime and use faster model 2026-02-11 14:11:25 +01:00
Carlos Polop
1e68040be3 Cap chack-agent workflow runs with max_turns 2026-02-11 14:00:03 +01:00
5 changed files with 133 additions and 15 deletions

View File

@@ -12,6 +12,8 @@ jobs:
permissions: permissions:
contents: write contents: write
pull-requests: write pull-requests: write
env:
CHACK_LOGS_HTTP_URL: ${{ secrets.CHACK_LOGS_HTTP_URL }}
outputs: outputs:
should_run: ${{ steps.gate.outputs.should_run }} should_run: ${{ steps.gate.outputs.should_run }}
pr_number: ${{ steps.gate.outputs.pr_number }} pr_number: ${{ steps.gate.outputs.pr_number }}
@@ -80,13 +82,25 @@ jobs:
${{ steps.gate.outputs.base_ref }} \ ${{ steps.gate.outputs.base_ref }} \
+refs/pull/${{ steps.gate.outputs.pr_number }}/head +refs/pull/${{ steps.gate.outputs.pr_number }}/head
- name: Set up Node.js for Codex
if: ${{ steps.gate.outputs.should_run == 'true' }}
uses: actions/setup-node@v5
with:
node-version: "20"
- name: Install Codex CLI
if: ${{ steps.gate.outputs.should_run == 'true' }}
run: |
npm install -g @openai/codex
codex --version
- name: Run Chack Agent - name: Run Chack Agent
id: run_chack id: run_chack
if: ${{ steps.gate.outputs.should_run == 'true' }} if: ${{ steps.gate.outputs.should_run == 'true' }}
uses: carlospolop/chack-agent@master uses: carlospolop/chack-agent@master
with: with:
provider: openrouter provider: codex
model_primary: BEST_QUALITY model_primary: CHEAP_BUT_QUALITY
main_action: peass-ng main_action: peass-ng
sub_action: Chack-Agent PR Triage sub_action: Chack-Agent PR Triage
system_prompt: | system_prompt: |
@@ -96,6 +110,7 @@ jobs:
Remember taht you are an autonomouts agent, use the exec tool to run the needed commands to list, read, analyze, modify, test... Remember taht you are an autonomouts agent, use the exec tool to run the needed commands to list, read, analyze, modify, test...
tools_config_json: "{\"exec_enabled\": true}" tools_config_json: "{\"exec_enabled\": true}"
session_config_json: "{\"long_term_memory_enabled\": false}" session_config_json: "{\"long_term_memory_enabled\": false}"
agent_config_json: "{\"self_critique_enabled\": false, \"require_task_list_init_first\": true}"
output_schema_file: .github/chack-agent/pr-merge-schema.json output_schema_file: .github/chack-agent/pr-merge-schema.json
user_prompt: | user_prompt: |
You are reviewing PR #${{ steps.gate.outputs.pr_number }} for ${{ github.repository }}. You are reviewing PR #${{ steps.gate.outputs.pr_number }} for ${{ github.repository }}.
@@ -119,7 +134,7 @@ jobs:
Output JSON only, following the provided schema: Output JSON only, following the provided schema:
.github/chack-agent/pr-merge-schema.json .github/chack-agent/pr-merge-schema.json
openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }} openai_api_key: ${{ secrets.OPENAI_API_KEY }}
- name: Parse Chack Agent decision - name: Parse Chack Agent decision
id: parse id: parse
@@ -131,9 +146,18 @@ jobs:
import json import json
import os import os
data = json.loads(os.environ.get('CHACK_MESSAGE', '') or '{}') raw = (os.environ.get('CHACK_MESSAGE', '') or '').strip()
decision = data.get('decision', 'comment') decision = 'comment'
message = data.get('message', '').strip() or 'Chack Agent did not provide details.' message = 'Chack Agent did not provide details.'
try:
data = json.loads(raw or '{}')
if isinstance(data, dict):
decision = data.get('decision', 'comment')
message = data.get('message', '').strip() or message
else:
message = raw or message
except Exception:
message = raw or message
with open(os.environ['GITHUB_OUTPUT'], 'a') as handle: with open(os.environ['GITHUB_OUTPUT'], 'a') as handle:
handle.write(f"decision={decision}\n") handle.write(f"decision={decision}\n")
handle.write("message<<EOF\n") handle.write("message<<EOF\n")

View File

@@ -20,6 +20,7 @@ jobs:
env: env:
TARGET_BRANCH: master TARGET_BRANCH: master
FIX_BRANCH: chack-agent/ci-master-fix-${{ github.event.workflow_run.id }} FIX_BRANCH: chack-agent/ci-master-fix-${{ github.event.workflow_run.id }}
CHACK_LOGS_HTTP_URL: ${{ secrets.CHACK_LOGS_HTTP_URL }}
steps: steps:
- name: Checkout failing commit - name: Checkout failing commit
uses: actions/checkout@v5 uses: actions/checkout@v5
@@ -96,12 +97,22 @@ jobs:
echo "Leave the repo in a state ready to commit; changes will be committed and pushed automatically." echo "Leave the repo in a state ready to commit; changes will be committed and pushed automatically."
} > chack_prompt.txt } > chack_prompt.txt
- name: Set up Node.js for Codex
uses: actions/setup-node@v5
with:
node-version: "20"
- name: Install Codex CLI
run: |
npm install -g @openai/codex
codex --version
- name: Run Chack Agent - name: Run Chack Agent
id: run_chack id: run_chack
uses: carlospolop/chack-agent@master uses: carlospolop/chack-agent@master
with: with:
provider: openrouter provider: codex
model_primary: BEST_QUALITY model_primary: CHEAP_BUT_QUALITY
main_action: peass-ng main_action: peass-ng
sub_action: CI-master Failure Chack-Agent PR sub_action: CI-master Failure Chack-Agent PR
system_prompt: | system_prompt: |
@@ -110,7 +121,8 @@ jobs:
prompt_file: chack_prompt.txt prompt_file: chack_prompt.txt
tools_config_json: "{\"exec_enabled\": true}" tools_config_json: "{\"exec_enabled\": true}"
session_config_json: "{\"long_term_memory_enabled\": false}" session_config_json: "{\"long_term_memory_enabled\": false}"
openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }} agent_config_json: "{\"self_critique_enabled\": false, \"require_task_list_init_first\": true}"
openai_api_key: ${{ secrets.OPENAI_API_KEY }}
- name: Commit and push fix branch if changed - name: Commit and push fix branch if changed
id: push_fix id: push_fix
@@ -123,9 +135,27 @@ jobs:
rm -f chack_failure_summary.txt chack_prompt.txt chack_failed_steps_logs.txt rm -f chack_failure_summary.txt chack_prompt.txt chack_failed_steps_logs.txt
git add -A git add -A
# Avoid workflow-file pushes with token scopes that cannot write workflows.
git reset -- .github/workflows || true
git checkout -- .github/workflows || true
git clean -fdx -- .github/workflows || true
git reset -- chack_failure_summary.txt chack_prompt.txt chack_failed_steps_logs.txt git reset -- chack_failure_summary.txt chack_prompt.txt chack_failed_steps_logs.txt
if git diff --cached --name-only | grep -q '^.github/workflows/'; then
echo "Workflow-file changes are still staged; skipping push without workflows permission."
echo "pushed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
if git diff --cached --quiet; then
echo "No committable changes left after filtering."
echo "pushed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
git commit -m "Fix CI-master failures for run #${{ github.event.workflow_run.id }}" git commit -m "Fix CI-master failures for run #${{ github.event.workflow_run.id }}"
git push origin HEAD:"$FIX_BRANCH" if ! git push origin HEAD:"$FIX_BRANCH"; then
echo "Push failed (likely token workflow permission limits); skipping PR creation."
echo "pushed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
echo "pushed=true" >> "$GITHUB_OUTPUT" echo "pushed=true" >> "$GITHUB_OUTPUT"
- name: Create PR to master - name: Create PR to master

View File

@@ -64,6 +64,8 @@ jobs:
pull-requests: write pull-requests: write
issues: write issues: write
actions: read actions: read
env:
CHACK_LOGS_HTTP_URL: ${{ secrets.CHACK_LOGS_HTTP_URL }}
steps: steps:
- name: Comment on PR with failure info - name: Comment on PR with failure info
uses: actions/github-script@v7 uses: actions/github-script@v7
@@ -152,12 +154,22 @@ jobs:
echo "Leave the repo in a state ready to commit as when you finish, it'll be automatically committed and pushed." echo "Leave the repo in a state ready to commit as when you finish, it'll be automatically committed and pushed."
} > chack_prompt.txt } > chack_prompt.txt
- name: Set up Node.js for Codex
uses: actions/setup-node@v5
with:
node-version: "20"
- name: Install Codex CLI
run: |
npm install -g @openai/codex
codex --version
- name: Run Chack Agent - name: Run Chack Agent
id: run_chack id: run_chack
uses: carlospolop/chack-agent@master uses: carlospolop/chack-agent@master
with: with:
provider: openrouter provider: codex
model_primary: BEST_QUALITY model_primary: CHEAP_BUT_QUALITY
main_action: peass-ng main_action: peass-ng
sub_action: PR Failure Chack-Agent Dispatch sub_action: PR Failure Chack-Agent Dispatch
system_prompt: | system_prompt: |
@@ -167,7 +179,8 @@ jobs:
prompt_file: chack_prompt.txt prompt_file: chack_prompt.txt
tools_config_json: "{\"exec_enabled\": true}" tools_config_json: "{\"exec_enabled\": true}"
session_config_json: "{\"long_term_memory_enabled\": false}" session_config_json: "{\"long_term_memory_enabled\": false}"
openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }} agent_config_json: "{\"self_critique_enabled\": false, \"require_task_list_init_first\": true}"
openai_api_key: ${{ secrets.OPENAI_API_KEY }}
- name: Commit and push if changed - name: Commit and push if changed
env: env:
@@ -180,9 +193,24 @@ jobs:
fi fi
rm -f chack_failure_summary.txt chack_prompt.txt rm -f chack_failure_summary.txt chack_prompt.txt
git add -A git add -A
# Avoid workflow-file pushes with token scopes that cannot write workflows.
git reset -- .github/workflows || true
git checkout -- .github/workflows || true
git clean -fdx -- .github/workflows || true
git reset -- chack_failure_summary.txt chack_prompt.txt git reset -- chack_failure_summary.txt chack_prompt.txt
if git diff --cached --name-only | grep -q '^.github/workflows/'; then
echo "Workflow-file changes are still staged; skipping push without workflows permission."
exit 0
fi
if git diff --cached --quiet; then
echo "No committable changes left after filtering."
exit 0
fi
git commit -m "Fix CI failures for PR #${PR_NUMBER}" git commit -m "Fix CI failures for PR #${PR_NUMBER}"
git push origin HEAD:${TARGET_BRANCH} if ! git push origin HEAD:${TARGET_BRANCH}; then
echo "Push failed (likely token workflow permission limits); leaving run successful without push."
exit 0
fi
- name: Comment with Chack Agent result - name: Comment with Chack Agent result
if: ${{ steps.run_chack.outputs.final-message != '' }} if: ${{ steps.run_chack.outputs.final-message != '' }}

View File

@@ -0,0 +1,36 @@
# Title: Users Information - subuid/subgid mappings
# ID: UG_Subuid_subgid_mappings
# Author: Carlos Polop
# Last Update: 13-02-2026
# Description: Show delegated user namespace ID ranges from /etc/subuid and /etc/subgid.
# License: GNU GPL
# Version: 1.0
# Functions Used: print_2title
# Global Variables: $MACPEAS
# Initial Functions:
# Generated Global Variables:
# Fat linpeas: 0
# Small linpeas: 1
print_2title "User namespace mappings (subuid/subgid)"
if [ "$MACPEAS" ]; then
echo "Not applicable on macOS"
else
if [ -r /etc/subuid ]; then
echo "subuid:"
grep -v -E '^\s*#|^\s*$' /etc/subuid 2>/dev/null
else
echo "/etc/subuid not readable or not present"
fi
if [ -r /etc/subgid ]; then
echo ""
echo "subgid:"
grep -v -E '^\s*#|^\s*$' /etc/subgid 2>/dev/null
else
echo "/etc/subgid not readable or not present"
fi
fi
echo ""

View File

@@ -46,7 +46,7 @@ class LinpeasBuilder:
def build(self): def build(self):
print("[+] Building variables...") print("[+] Building variables...")
variables = self.__generate_variables() variables = self.__generate_variabless()
self.__replace_mark(PEAS_VARIABLES_MARKUP, variables, "") self.__replace_mark(PEAS_VARIABLES_MARKUP, variables, "")
if len(re.findall(r"PSTORAGE_[a-zA-Z0-9_]+", self.linpeas_sh)) > 1: #Only add storages if there are storages (PSTORAGE_BACKUPS is always there so it doesn't count) if len(re.findall(r"PSTORAGE_[a-zA-Z0-9_]+", self.linpeas_sh)) > 1: #Only add storages if there are storages (PSTORAGE_BACKUPS is always there so it doesn't count)