Download ProjectIntakeTower/scripts/create_project_cards.py from smlflg/AgentProjectMinenraeumer: direct link, hf CLI and curl.
- Browser
- Download file 3.03 kB
-
https://huggingface.co/smlflg/AgentProjectMinenraeumer/resolve/main/ProjectIntakeTower/scripts/create_project_cards.py
- Command line
-
hf download hf://smlflg/AgentProjectMinenraeumer/ProjectIntakeTower/scripts/create_project_cards.py
-
curl -L -o create_project_cards.py https://huggingface.co/smlflg/AgentProjectMinenraeumer/resolve/main/ProjectIntakeTower/scripts/create_project_cards.py
3.03 kB
| #!/usr/bin/env python3 | |
| from intake_common import * | |
| def next_actions(p): | |
| actions = [] | |
| if p.get("git_status", {}).get("dirty"): | |
| actions.append("Review tracked dirty work and decide: continue, park, or archive. Do not commit without owner approval.") | |
| if p.get("todo_fixme_count", 0): | |
| actions.append("Cluster TODO/FIXME/WIP hints into one bounded next action.") | |
| if p.get("plan_hit_count", 0): | |
| actions.append("Read plan/backlog artifacts and extract current unfinished thread.") | |
| if not p.get("readme_summary"): | |
| actions.append("Classify purpose from filenames only; ask owner before writing project README.") | |
| if "agent" in p.get("technologies", []) or "hermes-async" in p.get("technologies", []): | |
| actions.append("Inspect agent handoff/async state read-only and summarize stale/running/done work.") | |
| actions.append("Produce a handoff artifact under ProjectIntakeTower/jobs/done/<job_id>/.") | |
| return actions[:5] | |
| def main(): | |
| ensure_dirs() | |
| clear_generated_files(CARDS, "*.md") | |
| projects = load_jsonl(INV / "projects.jsonl") | |
| for p in projects: | |
| pid = p["project_id"] | |
| card = CARDS / f"{pid}.md" | |
| todos = p.get("todo_fixme_snippets", []) | |
| body = [ | |
| f"# {p['name']}", | |
| "", | |
| f"- Project ID: `{pid}`", | |
| f"- Path: `{p['path']}`", | |
| f"- Last modified: `{p.get('last_modified','')}`", | |
| f"- Git repo: {'yes' if p.get('is_git_repo') else 'no'}", | |
| f"- Git status: {'dirty' if p.get('git_status',{}).get('dirty') else 'clean/unknown'} ({p.get('git_status',{}).get('dirty_tracked_count',0)} tracked changes)", | |
| f"- Branch: `{p.get('git_status',{}).get('branch','')}`", | |
| f"- Technologies: {', '.join(p.get('technologies', []))}", | |
| f"- Triage status: `{p.get('triage_status')}`", | |
| f"- Risk level: `{p.get('risk_level')}`", | |
| f"- Score: `{p.get('score')}` — {', '.join(p.get('score_reasons', []))}", | |
| f"- Evidence: `{p.get('evidence_file')}`", | |
| "", | |
| "## README summary", | |
| "", | |
| p.get("readme_summary") or "No safe README summary found.", | |
| "", | |
| "## TODO/FIXME/WIP hints", | |
| "", | |
| ] | |
| if todos: | |
| for t in todos[:10]: | |
| body.append(f"- `{t.get('file')}`:{t.get('line')} — {t.get('text')}") | |
| else: | |
| body.append("- No safe TODO/FIXME/WIP snippets found.") | |
| body += ["", "## Possible next actions", ""] | |
| for i, a in enumerate(next_actions(p), 1): | |
| body.append(f"{i}. {a}") | |
| body += ["", "## Safety note", "", "Read-only intake only. Do not modify this project from an intake job unless Samuel explicitly changes the job mode.", ""] | |
| card.write_text("\n".join(body), encoding="utf-8") | |
| print(json.dumps({"status": "succeeded", "project_cards": len(list(CARDS.glob('*.md')))}, indent=2)) | |
| if __name__ == "__main__": | |
| main() | |