mindforge-cc 11.8.2 → 11.9.0
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/.agent/mindforge/wf-orchestrate-review.md +35 -0
- package/.agent/mindforge/wf-verification-loop.md +45 -0
- package/.agent/mindforge/wf-workflow-optimizer.md +51 -0
- package/.agent/skills/article-illustrator/SKILL.md +7 -7
- package/.agent/skills/arxiv/SKILL.md +6 -6
- package/.agent/skills/code-wiki/SKILL.md +11 -11
- package/.agent/skills/concept-diagrams/SKILL.md +6 -6
- package/.agent/skills/concept-diagrams/examples/apartment-floor-plan-conversion.md +244 -0
- package/.agent/skills/concept-diagrams/examples/automated-password-reset-flow.md +276 -0
- package/.agent/skills/concept-diagrams/examples/autonomous-llm-research-agent-flow.md +240 -0
- package/.agent/skills/concept-diagrams/examples/banana-journey-tree-to-smoothie.md +161 -0
- package/.agent/skills/concept-diagrams/examples/commercial-aircraft-structure.md +209 -0
- package/.agent/skills/concept-diagrams/examples/cpu-ooo-microarchitecture.md +236 -0
- package/.agent/skills/concept-diagrams/examples/electricity-grid-flow.md +182 -0
- package/.agent/skills/concept-diagrams/examples/feature-film-production-pipeline.md +172 -0
- package/.agent/skills/concept-diagrams/examples/hospital-emergency-department-flow.md +165 -0
- package/.agent/skills/concept-diagrams/examples/ml-benchmark-grouped-bar-chart.md +114 -0
- package/.agent/skills/concept-diagrams/examples/place-order-uml-sequence.md +325 -0
- package/.agent/skills/concept-diagrams/examples/smart-city-infrastructure.md +173 -0
- package/.agent/skills/concept-diagrams/examples/smartphone-layer-anatomy.md +154 -0
- package/.agent/skills/concept-diagrams/examples/sn2-reaction-mechanism.md +247 -0
- package/.agent/skills/concept-diagrams/examples/wind-turbine-structure.md +338 -0
- package/.agent/skills/concept-diagrams/templates/template.html +174 -0
- package/.agent/skills/domain-intel/SKILL.md +7 -7
- package/.agent/skills/duckduckgo-search/SKILL.md +17 -17
- package/.agent/skills/github-auth/scripts/gh-env.sh +66 -0
- package/.agent/skills/github-code-review/SKILL.md +9 -9
- package/.agent/skills/github-pr-workflow/SKILL.md +3 -3
- package/.agent/skills/godmode/SKILL.md +8 -8
- package/.agent/skills/jupyter-live-kernel/SKILL.md +3 -3
- package/.agent/skills/kanban-orchestrator/SKILL.md +10 -10
- package/.agent/skills/kanban-worker/SKILL.md +6 -6
- package/.agent/skills/llm-wiki/SKILL.md +7 -7
- package/.agent/skills/mindforge-autonomous/SKILL.md +1 -1
- package/.agent/skills/mindforge-complete-milestone/SKILL.md +1 -1
- package/.agent/skills/mindforge-discuss-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-do/SKILL.md +1 -1
- package/.agent/skills/mindforge-execute-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-list-workspaces/SKILL.md +1 -1
- package/.agent/skills/mindforge-manager/SKILL.md +1 -1
- package/.agent/skills/mindforge-neural-orchestrator/SKILL.md +1 -1
- package/.agent/skills/mindforge-new-milestone/SKILL.md +4 -4
- package/.agent/skills/mindforge-new-project/SKILL.md +4 -4
- package/.agent/skills/mindforge-new-workspace/SKILL.md +1 -1
- package/.agent/skills/mindforge-note/SKILL.md +1 -1
- package/.agent/skills/mindforge-plan-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-profile-user/SKILL.md +1 -1
- package/.agent/skills/mindforge-remove-workspace/SKILL.md +1 -1
- package/.agent/skills/mindforge-research-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-ui-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-ui-review/SKILL.md +1 -1
- package/.agent/skills/mindforge-verify-work/SKILL.md +1 -1
- package/.agent/skills/mindforge-workspace-isolated/SKILL.md +1 -1
- package/.agent/skills/node-inspect-debugger/SKILL.md +1 -1
- package/.agent/skills/obsidian/SKILL.md +15 -15
- package/.agent/skills/osint-investigation/SKILL.md +3 -2
- package/.agent/skills/osint-investigation/references/sources/courtlistener.md +98 -0
- package/.agent/skills/osint-investigation/references/sources/gdelt.md +104 -0
- package/.agent/skills/osint-investigation/references/sources/icij-offshore.md +104 -0
- package/.agent/skills/osint-investigation/references/sources/nyc-acris.md +90 -0
- package/.agent/skills/osint-investigation/references/sources/ofac-sdn.md +92 -0
- package/.agent/skills/osint-investigation/references/sources/opencorporates.md +103 -0
- package/.agent/skills/osint-investigation/references/sources/sec-edgar.md +83 -0
- package/.agent/skills/osint-investigation/references/sources/senate-ld.md +89 -0
- package/.agent/skills/osint-investigation/references/sources/usaspending.md +97 -0
- package/.agent/skills/osint-investigation/references/sources/wayback.md +93 -0
- package/.agent/skills/osint-investigation/references/sources/wikipedia.md +107 -0
- package/.agent/skills/osint-investigation/scripts/_http.py +82 -0
- package/.agent/skills/osint-investigation/scripts/_normalize.py +67 -0
- package/.agent/skills/osint-investigation/scripts/build_findings.py +221 -0
- package/.agent/skills/osint-investigation/scripts/entity_resolution.py +228 -0
- package/.agent/skills/osint-investigation/scripts/fetch_courtlistener.py +149 -0
- package/.agent/skills/osint-investigation/scripts/fetch_gdelt.py +161 -0
- package/.agent/skills/osint-investigation/scripts/fetch_icij_offshore.py +234 -0
- package/.agent/skills/osint-investigation/scripts/fetch_nyc_acris.py +203 -0
- package/.agent/skills/osint-investigation/scripts/fetch_ofac_sdn.py +175 -0
- package/.agent/skills/osint-investigation/scripts/fetch_opencorporates.py +191 -0
- package/.agent/skills/osint-investigation/scripts/fetch_sec_edgar.py +184 -0
- package/.agent/skills/osint-investigation/scripts/fetch_senate_ld.py +146 -0
- package/.agent/skills/osint-investigation/scripts/fetch_usaspending.py +170 -0
- package/.agent/skills/osint-investigation/scripts/fetch_wayback.py +142 -0
- package/.agent/skills/osint-investigation/scripts/fetch_wikipedia.py +266 -0
- package/.agent/skills/osint-investigation/scripts/timing_analysis.py +252 -0
- package/.agent/skills/oss-forensics/SKILL.md +10 -9
- package/.agent/skills/oss-forensics/scripts/evidence-store.py +313 -0
- package/.agent/skills/parallel-cli/SKILL.md +2 -2
- package/.agent/skills/pinggy-tunnel/SKILL.md +3 -3
- package/.agent/skills/pixel-art/SKILL.md +2 -2
- package/.agent/skills/plan/SKILL.md +10 -10
- package/.agent/skills/requesting-code-review/SKILL.md +4 -6
- package/.agent/skills/research-paper-writing/SKILL.md +32 -32
- package/.agent/skills/rest-graphql-debug/SKILL.md +31 -32
- package/.agent/skills/s6-container-supervision/SKILL.md +1 -1
- package/.agent/skills/scrapling/SKILL.md +1 -1
- package/.agent/skills/sherlock/SKILL.md +1 -1
- package/.agent/skills/simplify-code/SKILL.md +5 -7
- package/.agent/skills/skill-authoring/SKILL.md +4 -4
- package/.agent/skills/spike/SKILL.md +11 -13
- package/.agent/skills/subagent-driven-development/SKILL.md +7 -11
- package/.agent/skills/systematic-debugging/SKILL.md +13 -14
- package/.agent/skills/test-driven-development/SKILL.md +6 -7
- package/.agent/skills/video-orchestrator/SKILL.md +1 -1
- package/.agent/skills/web-pentest/SKILL.md +7 -7
- package/.mindforge/config.json +3 -2
- package/.mindforge/dynamic-workflows/REGISTRY.md +4 -1
- package/.mindforge/dynamic-workflows/index.json +910 -840
- package/.mindforge/dynamic-workflows/scripts/accessibility-audit.js +88 -90
- package/.mindforge/dynamic-workflows/scripts/ai-model-eval.js +59 -61
- package/.mindforge/dynamic-workflows/scripts/api-contract-test.js +87 -85
- package/.mindforge/dynamic-workflows/scripts/api-migration.js +120 -122
- package/.mindforge/dynamic-workflows/scripts/architecture-modernization.js +84 -86
- package/.mindforge/dynamic-workflows/scripts/code-audit.js +75 -77
- package/.mindforge/dynamic-workflows/scripts/code-explainer.js +99 -101
- package/.mindforge/dynamic-workflows/scripts/competitive-analysis.js +62 -64
- package/.mindforge/dynamic-workflows/scripts/competitive-teardown.js +106 -108
- package/.mindforge/dynamic-workflows/scripts/cost-analysis.js +78 -80
- package/.mindforge/dynamic-workflows/scripts/data-pipeline-validate.js +47 -49
- package/.mindforge/dynamic-workflows/scripts/database-migration.js +85 -87
- package/.mindforge/dynamic-workflows/scripts/debug-detective.js +97 -99
- package/.mindforge/dynamic-workflows/scripts/dependency-health.js +81 -83
- package/.mindforge/dynamic-workflows/scripts/design-system-audit.js +84 -86
- package/.mindforge/dynamic-workflows/scripts/documentation-gen.js +65 -67
- package/.mindforge/dynamic-workflows/scripts/feature-planner.js +78 -80
- package/.mindforge/dynamic-workflows/scripts/incident-response.js +81 -83
- package/.mindforge/dynamic-workflows/scripts/multi-repo-sync.js +49 -51
- package/.mindforge/dynamic-workflows/scripts/mutation-testing.js +113 -115
- package/.mindforge/dynamic-workflows/scripts/onboard-codebase.js +79 -81
- package/.mindforge/dynamic-workflows/scripts/orchestrate-review.js +115 -0
- package/.mindforge/dynamic-workflows/scripts/perf-optimize.js +97 -99
- package/.mindforge/dynamic-workflows/scripts/pr-review.js +61 -63
- package/.mindforge/dynamic-workflows/scripts/refactor-plan.js +88 -90
- package/.mindforge/dynamic-workflows/scripts/release-prep.js +79 -81
- package/.mindforge/dynamic-workflows/scripts/security-hardening.js +117 -119
- package/.mindforge/dynamic-workflows/scripts/security-threat-model.js +119 -121
- package/.mindforge/dynamic-workflows/scripts/tdd-sprint.js +80 -82
- package/.mindforge/dynamic-workflows/scripts/tech-evaluation.js +50 -52
- package/.mindforge/dynamic-workflows/scripts/test-coverage-gap.js +68 -70
- package/.mindforge/dynamic-workflows/scripts/ux-heuristic-audit.js +89 -91
- package/.mindforge/dynamic-workflows/scripts/verification-loop.js +138 -0
- package/.mindforge/dynamic-workflows/scripts/workflow-optimizer.js +136 -0
- package/.mindforge/dynamic-workflows/scripts/writer-reviewer.js +63 -65
- package/.mindforge/memory/sync-manifest.json +1 -1
- package/.mindforge/personas/advisor-researcher.md +2 -2
- package/.mindforge/personas/api-load-tester.md +1 -1
- package/.mindforge/personas/authentication-architect.md +1 -1
- package/.mindforge/personas/backup-recovery-specialist.md +1 -1
- package/.mindforge/personas/build-optimizer.md +1 -1
- package/.mindforge/personas/caching-strategist.md +1 -1
- package/.mindforge/personas/chaos-engineer.md +1 -1
- package/.mindforge/personas/compliance-auditor.md +1 -1
- package/.mindforge/personas/config-management-expert.md +1 -1
- package/.mindforge/personas/coverage-specialist.md +1 -1
- package/.mindforge/personas/debug-specialist.md +2 -2
- package/.mindforge/personas/debugger.md +2 -2
- package/.mindforge/personas/dependency-auditor.md +1 -1
- package/.mindforge/personas/developer.md +1 -1
- package/.mindforge/personas/devops-engineer.md +1 -1
- package/.mindforge/personas/executor.md +1 -1
- package/.mindforge/personas/go-specialist.md +1 -1
- package/.mindforge/personas/incident-commander.md +1 -1
- package/.mindforge/personas/java-specialist.md +1 -1
- package/.mindforge/personas/kubernetes-debugger.md +1 -1
- package/.mindforge/personas/logging-architect.md +1 -1
- package/.mindforge/personas/mf-planner.md +1 -1
- package/.mindforge/personas/mf-researcher.md +1 -1
- package/.mindforge/personas/mf-reviewer.md +1 -1
- package/.mindforge/personas/nyquist-auditor.md +1 -1
- package/.mindforge/personas/observability-engineer.md +1 -1
- package/.mindforge/personas/performance-optimizer.md +1 -1
- package/.mindforge/personas/phase-researcher.md +5 -5
- package/.mindforge/personas/planner.md +1 -1
- package/.mindforge/personas/project-researcher.md +2 -2
- package/.mindforge/personas/python-specialist.md +1 -1
- package/.mindforge/personas/qa-engineer.md +1 -1
- package/.mindforge/personas/release-manager.md +1 -1
- package/.mindforge/personas/research-agent.md +4 -4
- package/.mindforge/personas/roadmapper-extend.md +1 -1
- package/.mindforge/personas/rust-specialist.md +1 -1
- package/.mindforge/personas/security-reviewer.md +1 -1
- package/.mindforge/personas/tech-writer.md +1 -1
- package/.mindforge/personas/typescript-wizard.md +1 -1
- package/.mindforge/personas/ui-researcher.md +1 -1
- package/.mindforge/skills/accessibility/SKILL.md +3 -3
- package/.mindforge/skills/agent-architecture-audit/SKILL.md +11 -0
- package/.mindforge/skills/agent-loops/SKILL.md +1 -1
- package/.mindforge/skills/arxiv/SKILL.md +6 -6
- package/.mindforge/skills/arxiv/scripts/search_arxiv.py +114 -0
- package/.mindforge/skills/code-tour/SKILL.md +2 -2
- package/.mindforge/skills/code-wiki/SKILL.md +11 -11
- package/.mindforge/skills/code-wiki/templates/README.md +31 -0
- package/.mindforge/skills/code-wiki/templates/architecture.md +30 -0
- package/.mindforge/skills/code-wiki/templates/getting-started.md +47 -0
- package/.mindforge/skills/code-wiki/templates/module.md +38 -0
- package/.mindforge/skills/concept-diagrams/SKILL.md +6 -6
- package/.mindforge/skills/concept-diagrams/examples/apartment-floor-plan-conversion.md +244 -0
- package/.mindforge/skills/concept-diagrams/examples/automated-password-reset-flow.md +276 -0
- package/.mindforge/skills/concept-diagrams/examples/autonomous-llm-research-agent-flow.md +240 -0
- package/.mindforge/skills/concept-diagrams/examples/banana-journey-tree-to-smoothie.md +161 -0
- package/.mindforge/skills/concept-diagrams/examples/commercial-aircraft-structure.md +209 -0
- package/.mindforge/skills/concept-diagrams/examples/cpu-ooo-microarchitecture.md +236 -0
- package/.mindforge/skills/concept-diagrams/examples/electricity-grid-flow.md +182 -0
- package/.mindforge/skills/concept-diagrams/examples/feature-film-production-pipeline.md +172 -0
- package/.mindforge/skills/concept-diagrams/examples/hospital-emergency-department-flow.md +165 -0
- package/.mindforge/skills/concept-diagrams/examples/ml-benchmark-grouped-bar-chart.md +114 -0
- package/.mindforge/skills/concept-diagrams/examples/place-order-uml-sequence.md +325 -0
- package/.mindforge/skills/concept-diagrams/examples/smart-city-infrastructure.md +173 -0
- package/.mindforge/skills/concept-diagrams/examples/smartphone-layer-anatomy.md +154 -0
- package/.mindforge/skills/concept-diagrams/examples/sn2-reaction-mechanism.md +247 -0
- package/.mindforge/skills/concept-diagrams/examples/wind-turbine-structure.md +338 -0
- package/.mindforge/skills/concept-diagrams/references/dashboard-patterns.md +43 -0
- package/.mindforge/skills/concept-diagrams/references/infrastructure-patterns.md +144 -0
- package/.mindforge/skills/concept-diagrams/references/physical-shape-cookbook.md +42 -0
- package/.mindforge/skills/concept-diagrams/templates/template.html +174 -0
- package/.mindforge/skills/creative-ideation/references/full-prompt-library.md +110 -0
- package/.mindforge/skills/documentation/SKILL.md +1 -1
- package/.mindforge/skills/domain-intel/SKILL.md +7 -7
- package/.mindforge/skills/domain-intel/scripts/domain_intel.py +397 -0
- package/.mindforge/skills/duckduckgo-search/SKILL.md +17 -17
- package/.mindforge/skills/duckduckgo-search/scripts/duckduckgo.sh +28 -0
- package/.mindforge/skills/environment-management/SKILL.md +1 -1
- package/.mindforge/skills/github-code-review/SKILL.md +9 -9
- package/.mindforge/skills/github-code-review/references/review-output-template.md +74 -0
- package/.mindforge/skills/github-issues/templates/bug-report.md +35 -0
- package/.mindforge/skills/github-issues/templates/feature-request.md +31 -0
- package/.mindforge/skills/github-pr-workflow/SKILL.md +3 -3
- package/.mindforge/skills/github-pr-workflow/references/ci-troubleshooting.md +183 -0
- package/.mindforge/skills/github-pr-workflow/references/conventional-commits.md +71 -0
- package/.mindforge/skills/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
- package/.mindforge/skills/github-pr-workflow/templates/pr-body-feature.md +33 -0
- package/.mindforge/skills/incident-response/SKILL.md +1 -1
- package/.mindforge/skills/jupyter-live-kernel/SKILL.md +3 -3
- package/.mindforge/skills/kanban-orchestrator/SKILL.md +10 -10
- package/.mindforge/skills/kanban-worker/SKILL.md +6 -6
- package/.mindforge/skills/meme-generation/SKILL.md +1 -1
- package/.mindforge/skills/meme-generation/scripts/generate_meme.py +470 -0
- package/.mindforge/skills/meme-generation/scripts/templates.json +97 -0
- package/.mindforge/skills/obsidian/SKILL.md +15 -15
- package/.mindforge/skills/orch-pipeline/SKILL.md +2 -2
- package/.mindforge/skills/osint-investigation/SKILL.md +3 -2
- package/.mindforge/skills/osint-investigation/references/sources/courtlistener.md +98 -0
- package/.mindforge/skills/osint-investigation/references/sources/gdelt.md +104 -0
- package/.mindforge/skills/osint-investigation/references/sources/icij-offshore.md +104 -0
- package/.mindforge/skills/osint-investigation/references/sources/nyc-acris.md +90 -0
- package/.mindforge/skills/osint-investigation/references/sources/ofac-sdn.md +92 -0
- package/.mindforge/skills/osint-investigation/references/sources/opencorporates.md +103 -0
- package/.mindforge/skills/osint-investigation/references/sources/sec-edgar.md +83 -0
- package/.mindforge/skills/osint-investigation/references/sources/senate-ld.md +89 -0
- package/.mindforge/skills/osint-investigation/references/sources/usaspending.md +97 -0
- package/.mindforge/skills/osint-investigation/references/sources/wayback.md +93 -0
- package/.mindforge/skills/osint-investigation/references/sources/wikipedia.md +107 -0
- package/.mindforge/skills/osint-investigation/scripts/_http.py +82 -0
- package/.mindforge/skills/osint-investigation/scripts/_normalize.py +67 -0
- package/.mindforge/skills/osint-investigation/scripts/build_findings.py +221 -0
- package/.mindforge/skills/osint-investigation/scripts/entity_resolution.py +228 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_courtlistener.py +149 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_gdelt.py +161 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_icij_offshore.py +234 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_nyc_acris.py +203 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_ofac_sdn.py +175 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_opencorporates.py +191 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_sec_edgar.py +184 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_senate_ld.py +146 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_usaspending.py +170 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_wayback.py +142 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_wikipedia.py +266 -0
- package/.mindforge/skills/osint-investigation/scripts/timing_analysis.py +252 -0
- package/.mindforge/skills/osint-investigation/templates/source-template.md +59 -0
- package/.mindforge/skills/oss-forensics/SKILL.md +6 -6
- package/.mindforge/skills/oss-forensics/references/evidence-types.md +89 -0
- package/.mindforge/skills/oss-forensics/references/github-archive-guide.md +184 -0
- package/.mindforge/skills/oss-forensics/references/investigation-templates.md +131 -0
- package/.mindforge/skills/oss-forensics/references/recovery-techniques.md +164 -0
- package/.mindforge/skills/oss-forensics/scripts/evidence-store.py +313 -0
- package/.mindforge/skills/oss-forensics/templates/forensic-report.md +151 -0
- package/.mindforge/skills/oss-forensics/templates/malicious-package-report.md +43 -0
- package/.mindforge/skills/pixel-art/SKILL.md +2 -2
- package/.mindforge/skills/pixel-art/references/palettes.md +49 -0
- package/.mindforge/skills/plan/SKILL.md +10 -10
- package/.mindforge/skills/requesting-code-review/SKILL.md +4 -6
- package/.mindforge/skills/research-paper-writing/SKILL.md +32 -32
- package/.mindforge/skills/research-paper-writing/references/autoreason-methodology.md +394 -0
- package/.mindforge/skills/research-paper-writing/references/checklists.md +434 -0
- package/.mindforge/skills/research-paper-writing/references/citation-workflow.md +563 -0
- package/.mindforge/skills/research-paper-writing/references/experiment-patterns.md +728 -0
- package/.mindforge/skills/research-paper-writing/references/human-evaluation.md +476 -0
- package/.mindforge/skills/research-paper-writing/references/paper-types.md +481 -0
- package/.mindforge/skills/research-paper-writing/references/reviewer-guidelines.md +433 -0
- package/.mindforge/skills/research-paper-writing/references/sources.md +191 -0
- package/.mindforge/skills/research-paper-writing/references/writing-guide.md +474 -0
- package/.mindforge/skills/research-paper-writing/templates/README.md +251 -0
- package/.mindforge/skills/scrapling/SKILL.md +1 -1
- package/.mindforge/skills/security-review/SKILL.md +1 -1
- package/.mindforge/skills/sherlock/SKILL.md +1 -1
- package/.mindforge/skills/simplify-code/SKILL.md +5 -7
- package/.mindforge/skills/spike/SKILL.md +11 -13
- package/.mindforge/skills/subagent-driven-development/SKILL.md +7 -11
- package/.mindforge/skills/subagent-driven-development/references/context-budget-discipline.md +53 -0
- package/.mindforge/skills/subagent-driven-development/references/gates-taxonomy.md +93 -0
- package/.mindforge/skills/systematic-debugging/SKILL.md +13 -14
- package/.mindforge/skills/test-driven-development/SKILL.md +7 -8
- package/.mindforge/skills/testing-standards/SKILL.md +1 -1
- package/.mindforge/skills/web-pentest/SKILL.md +2 -2
- package/.mindforge/skills/web-pentest/references/bypass-techniques.md +133 -0
- package/.mindforge/skills/web-pentest/references/exploitation-techniques.md +204 -0
- package/.mindforge/skills/web-pentest/references/scope-enforcement.md +110 -0
- package/.mindforge/skills/web-pentest/references/vuln-taxonomy.md +81 -0
- package/.mindforge/skills/web-pentest/templates/authorization.md +69 -0
- package/.mindforge/skills/web-pentest/templates/pentest-report.md +178 -0
- package/.mindforge/skills/writing-skills/SKILL.md +4 -3
- package/CHANGELOG.md +35 -0
- package/MINDFORGE.md +3 -3
- package/README.md +9 -7
- package/RELEASENOTES.md +65 -2
- package/SECURITY.md +5 -3
- package/bin/autonomous/auto-runner.js +5 -2
- package/bin/engine/skill-loader.js +4 -0
- package/bin/governance/rbac.js +4 -0
- package/bin/memory/eis-client.js +1 -0
- package/bin/mindforge-cli.js +5 -0
- package/bin/models/bedrock-provider.js +192 -0
- package/bin/models/model-client.js +19 -0
- package/bin/spawn-agent.js +9 -2
- package/docs/commands-reference.md +68 -6
- package/docs/faq.md +38 -1
- package/docs/getting-started.md +27 -12
- package/docs/sdk-reference.md +36 -3
- package/docs/troubleshooting.md +59 -1
- package/docs/user-guide.md +7 -4
- package/package.json +3 -3
- package/.claude/commands/mindforge/skill-tdd.md +0 -53
- package/.claude/commands/mindforge/skills-index.md +0 -118
- package/.claude/commands/mindforge/systematic-debug.md +0 -60
- package/.claude/commands/mindforge/wf-accessibility-audit.md +0 -31
- package/.claude/commands/mindforge/wf-ai-model-eval.md +0 -31
- package/.claude/commands/mindforge/wf-api-migration.md +0 -31
- package/.claude/commands/mindforge/wf-architecture-modernization.md +0 -32
- package/.claude/commands/mindforge/wf-catalog.md +0 -59
- package/.claude/commands/mindforge/wf-code-audit.md +0 -31
- package/.claude/commands/mindforge/wf-code-explainer.md +0 -31
- package/.claude/commands/mindforge/wf-competitive-analysis.md +0 -31
- package/.claude/commands/mindforge/wf-competitive-teardown.md +0 -31
- package/.claude/commands/mindforge/wf-cost-analysis.md +0 -31
- package/.claude/commands/mindforge/wf-data-pipeline-validate.md +0 -31
- package/.claude/commands/mindforge/wf-database-migration.md +0 -31
- package/.claude/commands/mindforge/wf-debug-detective.md +0 -32
- package/.claude/commands/mindforge/wf-design-system-audit.md +0 -31
- package/.claude/commands/mindforge/wf-documentation-gen.md +0 -31
- package/.claude/commands/mindforge/wf-feature-planner.md +0 -31
- package/.claude/commands/mindforge/wf-incident-response.md +0 -31
- package/.claude/commands/mindforge/wf-multi-repo-sync.md +0 -31
- package/.claude/commands/mindforge/wf-mutation-testing.md +0 -31
- package/.claude/commands/mindforge/wf-onboard-codebase.md +0 -31
- package/.claude/commands/mindforge/wf-perf-optimize.md +0 -31
- package/.claude/commands/mindforge/wf-pr-review.md +0 -31
- package/.claude/commands/mindforge/wf-refactor-plan.md +0 -31
- package/.claude/commands/mindforge/wf-release-prep.md +0 -31
- package/.claude/commands/mindforge/wf-security-threat-model.md +0 -31
- package/.claude/commands/mindforge/wf-tdd-sprint.md +0 -31
- package/.claude/commands/mindforge/wf-tech-evaluation.md +0 -31
- package/.claude/commands/mindforge/wf-ux-heuristic-audit.md +0 -31
- package/.claude/commands/mindforge/wf-writer-reviewer.md +0 -30
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# OpenCorporates — Global Corporate Registry
|
|
2
|
+
|
|
3
|
+
## 1. Summary
|
|
4
|
+
|
|
5
|
+
OpenCorporates aggregates corporate registry data from 130+ jurisdictions
|
|
6
|
+
worldwide (~200M companies). Covers US state-level filings (NY DOS, Delaware
|
|
7
|
+
DOC, California SOS, etc.), UK Companies House, EU registries, and most
|
|
8
|
+
common-law jurisdictions.
|
|
9
|
+
|
|
10
|
+
## 2. Access Methods
|
|
11
|
+
|
|
12
|
+
- **REST API:** `https://api.opencorporates.com/v0.4/`
|
|
13
|
+
- **HTML fallback:** `https://opencorporates.com/companies?q=...`
|
|
14
|
+
- **Auth:** API token required (free tier 500 calls/month, paid plans available)
|
|
15
|
+
- **Rate limit:** Token-bound; un-tokened requests return 401
|
|
16
|
+
|
|
17
|
+
Set `OPENCORPORATES_API_TOKEN` env var. Get a free token at
|
|
18
|
+
https://opencorporates.com/api_accounts/new.
|
|
19
|
+
|
|
20
|
+
## 3. Data Schema
|
|
21
|
+
|
|
22
|
+
Key fields emitted by `fetch_opencorporates.py`:
|
|
23
|
+
|
|
24
|
+
| Column | Type | Description |
|
|
25
|
+
|--------|------|-------------|
|
|
26
|
+
| `name` | str | Company legal name |
|
|
27
|
+
| `company_number` | str | Registry-assigned number |
|
|
28
|
+
| `jurisdiction_code` | str | e.g. `us_ny`, `us_de`, `gb` |
|
|
29
|
+
| `jurisdiction_name` | str | Human-readable jurisdiction |
|
|
30
|
+
| `incorporation_date` | str | YYYY-MM-DD |
|
|
31
|
+
| `dissolution_date` | str | YYYY-MM-DD (empty if active) |
|
|
32
|
+
| `company_type` | str | Domestic LLC / Foreign Corp / etc. |
|
|
33
|
+
| `status` | str | Active / Inactive / Dissolved |
|
|
34
|
+
| `registered_address` | str | Registered office address |
|
|
35
|
+
| `opencorporates_url` | str | Link to OpenCorporates entity page |
|
|
36
|
+
| `officers_count` | str | Total officers on record |
|
|
37
|
+
| `source` | str | `api`, `html`, or `html-fallback` |
|
|
38
|
+
|
|
39
|
+
## 4. Coverage
|
|
40
|
+
|
|
41
|
+
- US: all 50 states + DC at state level (LLCs, corps, LPs)
|
|
42
|
+
- International: UK, EU, Canada, Australia, NZ, many APAC + LATAM jurisdictions
|
|
43
|
+
- ~200M company records cumulative
|
|
44
|
+
- Update frequency varies by jurisdiction (UK CH is near-realtime; some
|
|
45
|
+
state registries lag months)
|
|
46
|
+
|
|
47
|
+
## 5. Cross-Reference Potential
|
|
48
|
+
|
|
49
|
+
- **NYC ACRIS** ↔ `name` (LLC/corp owners of NYC property)
|
|
50
|
+
- **USAspending** ↔ `name` (corporate federal contractors)
|
|
51
|
+
- **SEC EDGAR** ↔ `name` (public companies + their subsidiaries)
|
|
52
|
+
- **ICIJ Offshore** ↔ `name` (international corporate structures)
|
|
53
|
+
|
|
54
|
+
Join key: normalized company name. Some entries have `previous_names` arrays
|
|
55
|
+
which are not currently exported by the fetch script — query OC directly
|
|
56
|
+
for that.
|
|
57
|
+
|
|
58
|
+
## 6. Data Quality
|
|
59
|
+
|
|
60
|
+
- Company-name spellings vary across re-incorporations and renames
|
|
61
|
+
- Officer records are spottier than company records (many jurisdictions
|
|
62
|
+
don't require officer disclosure)
|
|
63
|
+
- Beneficial-ownership data is generally NOT here — most jurisdictions
|
|
64
|
+
don't require it. UK Companies House has PSC (people with significant
|
|
65
|
+
control) but that's not universal.
|
|
66
|
+
- Cross-jurisdictional links (parent / subsidiary) are based on registry
|
|
67
|
+
filings only; corporate trees are often incomplete
|
|
68
|
+
|
|
69
|
+
## 7. Acquisition Script
|
|
70
|
+
|
|
71
|
+
Path: `scripts/fetch_opencorporates.py`
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Search globally by name
|
|
75
|
+
python3 SKILL_DIR/scripts/fetch_opencorporates.py --query "Example Corp" \
|
|
76
|
+
--out data/oc.csv
|
|
77
|
+
|
|
78
|
+
# Restrict to a jurisdiction
|
|
79
|
+
python3 SKILL_DIR/scripts/fetch_opencorporates.py --query "Example Corp" \
|
|
80
|
+
--jurisdiction us_ny --out data/oc_ny.csv
|
|
81
|
+
|
|
82
|
+
# Set token via env or flag
|
|
83
|
+
OPENCORPORATES_API_TOKEN=xxx python3 SKILL_DIR/scripts/fetch_opencorporates.py \
|
|
84
|
+
--query "Microsoft" --out data/oc.csv
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Without a token the script falls back to scraping the HTML search page.
|
|
88
|
+
The fallback is brittle and only fills in `name`, `jurisdiction_code`,
|
|
89
|
+
`opencorporates_url` — set the token for serious work.
|
|
90
|
+
|
|
91
|
+
## 8. Legal & Licensing
|
|
92
|
+
|
|
93
|
+
- OpenCorporates aggregates public records — the underlying facts are
|
|
94
|
+
public domain
|
|
95
|
+
- OpenCorporates own database is licensed CC-BY-SA-4.0; attribution required
|
|
96
|
+
- API ToS prohibits redistributing the full dataset; per-record reference
|
|
97
|
+
is fine
|
|
98
|
+
|
|
99
|
+
## 9. References
|
|
100
|
+
|
|
101
|
+
- API docs: https://api.opencorporates.com/documentation/API-Reference
|
|
102
|
+
- Jurisdiction codes: https://api.opencorporates.com/v0.4/jurisdictions.json
|
|
103
|
+
- Schema: https://opencorporates.com/info/our_data
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# SEC EDGAR — Corporate Filings
|
|
2
|
+
|
|
3
|
+
## 1. Summary
|
|
4
|
+
|
|
5
|
+
EDGAR (Electronic Data Gathering, Analysis, and Retrieval) is the SEC's system
|
|
6
|
+
for corporate disclosure filings: 10-K (annual), 10-Q (quarterly), 8-K (current
|
|
7
|
+
events), DEF 14A (proxy), Form 4 (insider trading), 13F (institutional holdings).
|
|
8
|
+
|
|
9
|
+
## 2. Access Methods
|
|
10
|
+
|
|
11
|
+
- **API:** `https://data.sec.gov/submissions/CIK<10-digit-padded>.json` (no auth)
|
|
12
|
+
- **Filing index:** `https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=...`
|
|
13
|
+
- **Full-text search:** `https://efts.sec.gov/LATEST/search-index?q=...`
|
|
14
|
+
- **Auth:** None — requires `User-Agent` header with contact info per SEC policy
|
|
15
|
+
- **Rate limit:** 10 requests/second per IP (enforced)
|
|
16
|
+
|
|
17
|
+
## 3. Data Schema
|
|
18
|
+
|
|
19
|
+
Key fields emitted by `fetch_sec_edgar.py` (filings index):
|
|
20
|
+
|
|
21
|
+
| Column | Type | Description |
|
|
22
|
+
|--------|------|-------------|
|
|
23
|
+
| `cik` | str | Central Index Key (10-digit padded) |
|
|
24
|
+
| `company_name` | str | Registrant name |
|
|
25
|
+
| `form_type` | str | 10-K, 10-Q, 8-K, etc. |
|
|
26
|
+
| `filing_date` | str | YYYY-MM-DD |
|
|
27
|
+
| `accession_number` | str | Filing accession (e.g. 0000320193-24-000123) |
|
|
28
|
+
| `primary_document` | str | Filename of main document |
|
|
29
|
+
| `filing_url` | str | Direct URL to filing index |
|
|
30
|
+
| `reporting_period` | str | Period of report (where applicable) |
|
|
31
|
+
|
|
32
|
+
## 4. Coverage
|
|
33
|
+
|
|
34
|
+
- All public US registrants from 1993 → present
|
|
35
|
+
- 1993-2000 has spotty coverage of older filings (paper-to-electronic migration)
|
|
36
|
+
- ~12M filings cumulative
|
|
37
|
+
- Updated within minutes of filing acceptance
|
|
38
|
+
|
|
39
|
+
## 5. Cross-Reference Potential
|
|
40
|
+
|
|
41
|
+
- **USAspending** ↔ `company_name` (public companies as federal contractors)
|
|
42
|
+
- **Senate LD** ↔ `company_name` (public companies hire lobbyists)
|
|
43
|
+
- **OFAC SDN** ↔ `company_name` (sanctions screening of public registrants)
|
|
44
|
+
|
|
45
|
+
Join key: company name OR CIK if you have it. CIK is canonical and stable.
|
|
46
|
+
|
|
47
|
+
## 6. Data Quality
|
|
48
|
+
|
|
49
|
+
- Subsidiaries often filed under parent CIK — be careful with name matches
|
|
50
|
+
- Name changes over time (rebrands, acquisitions) — CIK remains constant
|
|
51
|
+
- 10-K Item 1A Risk Factors are free-form text — useful for `web_extract`-style
|
|
52
|
+
parsing, not structured queries
|
|
53
|
+
- Foreign private issuers file 20-F instead of 10-K
|
|
54
|
+
|
|
55
|
+
## 7. Acquisition Script
|
|
56
|
+
|
|
57
|
+
Path: `scripts/fetch_sec_edgar.py`
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# By CIK
|
|
61
|
+
python3 SKILL_DIR/scripts/fetch_sec_edgar.py --cik 0000320193 \
|
|
62
|
+
--types 10-K,10-Q --out data/edgar_filings.csv
|
|
63
|
+
|
|
64
|
+
# By company name (resolves to CIK first via name search)
|
|
65
|
+
python3 SKILL_DIR/scripts/fetch_sec_edgar.py --company "APPLE INC" \
|
|
66
|
+
--types 8-K --since 2024-01-01 --out data/edgar_filings.csv
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Set `SEC_USER_AGENT` env var with your contact email (SEC requirement).
|
|
70
|
+
Example: `SEC_USER_AGENT="Research example@example.com"`.
|
|
71
|
+
|
|
72
|
+
## 8. Legal & Licensing
|
|
73
|
+
|
|
74
|
+
- Public record under SEC Rule 24b-2 / 17 CFR § 230.401
|
|
75
|
+
- No commercial use restrictions on filing content
|
|
76
|
+
- SEC asks all bulk users to include a `User-Agent` with contact info and to
|
|
77
|
+
respect 10 req/s — failure to do so can result in IP blocking
|
|
78
|
+
|
|
79
|
+
## 9. References
|
|
80
|
+
|
|
81
|
+
- Developer docs: https://www.sec.gov/edgar/sec-api-documentation
|
|
82
|
+
- EDGAR full-text search: https://efts.sec.gov/LATEST/search-index
|
|
83
|
+
- Fair access policy: https://www.sec.gov/os/accessing-edgar-data
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Senate LD — Lobbying Disclosure (LD-1 / LD-2)
|
|
2
|
+
|
|
3
|
+
## 1. Summary
|
|
4
|
+
|
|
5
|
+
The Senate Office of Public Records publishes lobbying disclosures under the
|
|
6
|
+
Lobbying Disclosure Act of 1995 (LDA, as amended by HLOGA 2007). LD-1 is
|
|
7
|
+
registration of a new client-lobbyist relationship; LD-2 is the quarterly
|
|
8
|
+
activity report.
|
|
9
|
+
|
|
10
|
+
## 2. Access Methods
|
|
11
|
+
|
|
12
|
+
- **API:** `https://lda.senate.gov/api/v1/` (no auth required for read-only)
|
|
13
|
+
- **Bulk download:** `https://lda.senate.gov/api/v1/filings/?format=csv` (paginated)
|
|
14
|
+
- **Auth:** Token required for >120 req/hour — register at https://lda.senate.gov/api/auth/register/
|
|
15
|
+
- **Rate limit:** 120 req/hour unauthenticated, 1,200 req/hour authenticated
|
|
16
|
+
|
|
17
|
+
## 3. Data Schema
|
|
18
|
+
|
|
19
|
+
Key fields emitted by `fetch_senate_ld.py`:
|
|
20
|
+
|
|
21
|
+
| Column | Type | Description |
|
|
22
|
+
|--------|------|-------------|
|
|
23
|
+
| `filing_uuid` | str | Unique filing ID |
|
|
24
|
+
| `filing_type` | str | LD-1, LD-2, LD-203, etc. |
|
|
25
|
+
| `filing_year` | int | Year |
|
|
26
|
+
| `filing_period` | str | Q1/Q2/Q3/Q4 or annual |
|
|
27
|
+
| `registrant_name` | str | Lobbying firm or organization |
|
|
28
|
+
| `registrant_id` | str | Senate-assigned registrant ID |
|
|
29
|
+
| `client_name` | str | Client being represented |
|
|
30
|
+
| `client_id` | str | Senate-assigned client ID |
|
|
31
|
+
| `client_general_description` | str | Client industry / business |
|
|
32
|
+
| `income` | float | LD-2 income from client this quarter (USD) |
|
|
33
|
+
| `expenses` | float | LD-2 expenses (in-house lobbying) |
|
|
34
|
+
| `lobbyists` | str | Semicolon-separated lobbyist names |
|
|
35
|
+
| `issues` | str | Semicolon-separated issue areas |
|
|
36
|
+
| `government_entities` | str | Agencies/chambers contacted |
|
|
37
|
+
| `filing_date` | str | YYYY-MM-DD |
|
|
38
|
+
|
|
39
|
+
## 4. Coverage
|
|
40
|
+
|
|
41
|
+
- US federal lobbying only (state lobbying handled by individual state ethics offices)
|
|
42
|
+
- 1999 → present (full electronic coverage from 2008)
|
|
43
|
+
- Quarterly reporting cycle (LD-2)
|
|
44
|
+
- ~1M+ filings cumulative
|
|
45
|
+
|
|
46
|
+
## 5. Cross-Reference Potential
|
|
47
|
+
|
|
48
|
+
- **USAspending** ↔ `client_name` (clients lobbying for contracts)
|
|
49
|
+
- **SEC EDGAR** ↔ `client_name` (public companies as lobbying clients)
|
|
50
|
+
- **OFAC SDN** ↔ `client_name` (sanctions screening of lobbying clients)
|
|
51
|
+
|
|
52
|
+
Join key: normalized client_name. registrant_id and client_id are canonical
|
|
53
|
+
when joining Senate-internal records.
|
|
54
|
+
|
|
55
|
+
## 6. Data Quality
|
|
56
|
+
|
|
57
|
+
- Many lobbyist names appear in multiple registrants over time (job changes)
|
|
58
|
+
- `issues` and `government_entities` are free-text — Inconsistent capitalization
|
|
59
|
+
- Foreign agents register under FARA (Department of Justice), NOT here
|
|
60
|
+
- Income/expenses are reported in $10,000 brackets in some older filings
|
|
61
|
+
|
|
62
|
+
## 7. Acquisition Script
|
|
63
|
+
|
|
64
|
+
Path: `scripts/fetch_senate_ld.py`
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# By client
|
|
68
|
+
python3 SKILL_DIR/scripts/fetch_senate_ld.py --client "EXAMPLE CORP" \
|
|
69
|
+
--year 2024 --out data/lobbying.csv
|
|
70
|
+
|
|
71
|
+
# By registrant (lobbying firm)
|
|
72
|
+
python3 SKILL_DIR/scripts/fetch_senate_ld.py --registrant "BIG K STREET LLP" \
|
|
73
|
+
--year 2024 --out data/lobbying.csv
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Set `SENATE_LDA_TOKEN` env var if you have one (or pass `--token`).
|
|
77
|
+
Defaults to anonymous (120 req/hour).
|
|
78
|
+
|
|
79
|
+
## 8. Legal & Licensing
|
|
80
|
+
|
|
81
|
+
- Public record under 2 U.S.C. § 1604 (LDA)
|
|
82
|
+
- No commercial use restrictions
|
|
83
|
+
- Reuse is unconditional — see Senate Public Records Office disclaimer
|
|
84
|
+
|
|
85
|
+
## 9. References
|
|
86
|
+
|
|
87
|
+
- API docs: https://lda.senate.gov/api/redoc/v1/
|
|
88
|
+
- LDA guidance: https://lobbyingdisclosure.house.gov/ld_guidance.pdf
|
|
89
|
+
- Senate Public Records: https://lda.senate.gov/
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# USAspending — Federal Government Contracts and Grants
|
|
2
|
+
|
|
3
|
+
## 1. Summary
|
|
4
|
+
|
|
5
|
+
USAspending.gov is the official source of federal spending data. Coverage:
|
|
6
|
+
contracts, grants, loans, direct payments, sub-awards. Required by the DATA Act
|
|
7
|
+
of 2014 — all federal agencies must report to a single schema.
|
|
8
|
+
|
|
9
|
+
## 2. Access Methods
|
|
10
|
+
|
|
11
|
+
- **API v2:** `https://api.usaspending.gov/api/v2/` (no auth, no key)
|
|
12
|
+
- **Bulk:** `https://files.usaspending.gov/` (CSV / Parquet by award type)
|
|
13
|
+
- **Auth:** None
|
|
14
|
+
- **Rate limit:** Not strictly enforced, but be polite — keep to <10 req/s
|
|
15
|
+
|
|
16
|
+
## 3. Data Schema
|
|
17
|
+
|
|
18
|
+
Key fields emitted by `fetch_usaspending.py` (prime awards):
|
|
19
|
+
|
|
20
|
+
| Column | Type | Description |
|
|
21
|
+
|--------|------|-------------|
|
|
22
|
+
| `award_id` | str | Federal award ID (PIID for contracts, FAIN for grants) |
|
|
23
|
+
| `recipient_name` | str | Awardee legal name |
|
|
24
|
+
| `recipient_uei` | str | Unique Entity Identifier (replaced DUNS in 2022) |
|
|
25
|
+
| `recipient_duns` | str | Legacy DUNS number (historical only) |
|
|
26
|
+
| `recipient_parent_name` | str | Ultimate parent organization |
|
|
27
|
+
| `recipient_state` | str | Recipient state |
|
|
28
|
+
| `awarding_agency` | str | Department / agency name |
|
|
29
|
+
| `awarding_sub_agency` | str | Sub-tier (e.g. DoD → Army) |
|
|
30
|
+
| `award_type` | str | Contract / Grant / Loan / Direct Payment |
|
|
31
|
+
| `award_amount` | float | Current total obligation in USD |
|
|
32
|
+
| `award_date` | str | Action / signed date YYYY-MM-DD |
|
|
33
|
+
| `period_of_performance_start` | str | YYYY-MM-DD |
|
|
34
|
+
| `period_of_performance_end` | str | YYYY-MM-DD |
|
|
35
|
+
| `naics_code` | str | Industry classification |
|
|
36
|
+
| `psc_code` | str | Product / Service Code |
|
|
37
|
+
| `competition_extent` | str | Full / limited / sole-source |
|
|
38
|
+
| `description` | str | Award description (free-text) |
|
|
39
|
+
|
|
40
|
+
## 4. Coverage
|
|
41
|
+
|
|
42
|
+
- US federal awards only (state/local not included)
|
|
43
|
+
- FY 2008 → present (full coverage from FY 2017)
|
|
44
|
+
- Updated bi-weekly from agency reporting
|
|
45
|
+
- ~100M+ transaction records cumulative
|
|
46
|
+
|
|
47
|
+
## 5. Cross-Reference Potential
|
|
48
|
+
|
|
49
|
+
- **SEC EDGAR** ↔ `recipient_name` (public companies as contractors)
|
|
50
|
+
- **Senate LD** ↔ `recipient_name` (lobbying clients winning contracts)
|
|
51
|
+
- **OFAC SDN** ↔ `recipient_name` (sanctions screening of contractors — must be
|
|
52
|
+
filtered out by SAM.gov but verify)
|
|
53
|
+
- **ICIJ Offshore** ↔ `recipient_name` (offshore-linked contractors)
|
|
54
|
+
|
|
55
|
+
Join key: normalized recipient name. UEI is canonical when present.
|
|
56
|
+
|
|
57
|
+
## 6. Data Quality
|
|
58
|
+
|
|
59
|
+
- DUNS → UEI transition (April 2022) — old records have DUNS, new records have UEI
|
|
60
|
+
- Some sub-awards aren't reported (FFATA threshold is $30k)
|
|
61
|
+
- Award amount changes over time (mod actions) — fetch script reports current total
|
|
62
|
+
- `competition_extent` field is free-text in older records — `fetch_usaspending.py`
|
|
63
|
+
normalizes to canonical values
|
|
64
|
+
- Recipient name variations are extensive — "ACME LLC", "Acme L.L.C.", "ACME, INC"
|
|
65
|
+
all appear. Use `entity_resolution.py`.
|
|
66
|
+
|
|
67
|
+
## 7. Acquisition Script
|
|
68
|
+
|
|
69
|
+
Path: `scripts/fetch_usaspending.py`
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# By recipient name
|
|
73
|
+
python3 SKILL_DIR/scripts/fetch_usaspending.py --recipient "EXAMPLE CORP" \
|
|
74
|
+
--fy 2024 --out data/contracts.csv
|
|
75
|
+
|
|
76
|
+
# By awarding agency
|
|
77
|
+
python3 SKILL_DIR/scripts/fetch_usaspending.py --agency "Department of Defense" \
|
|
78
|
+
--fy 2024 --out data/contracts.csv
|
|
79
|
+
|
|
80
|
+
# Filter to sole-source only
|
|
81
|
+
python3 SKILL_DIR/scripts/fetch_usaspending.py --recipient "EXAMPLE CORP" \
|
|
82
|
+
--fy 2024 --sole-source-only --out data/contracts.csv
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 8. Legal & Licensing
|
|
86
|
+
|
|
87
|
+
- Public record under the Federal Funding Accountability and Transparency Act
|
|
88
|
+
(FFATA, 2006) and DATA Act (2014)
|
|
89
|
+
- No commercial use restrictions on the data
|
|
90
|
+
- Personal information of award recipients (e.g. small business owners' addresses
|
|
91
|
+
in some grants) should be handled per the source agency's privacy notice
|
|
92
|
+
|
|
93
|
+
## 9. References
|
|
94
|
+
|
|
95
|
+
- API docs: https://api.usaspending.gov/
|
|
96
|
+
- Data dictionary: https://www.usaspending.gov/data-dictionary
|
|
97
|
+
- Award schema: https://files.usaspending.gov/docs/Data_Dictionary_Crosswalk.xlsx
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Wayback Machine — Internet Archive CDX
|
|
2
|
+
|
|
3
|
+
## 1. Summary
|
|
4
|
+
|
|
5
|
+
The Internet Archive's Wayback Machine has captured ~900B+ web pages since
|
|
6
|
+
1996. The CDX server API indexes those captures by URL, timestamp, and
|
|
7
|
+
content hash. Free, anonymous, no auth.
|
|
8
|
+
|
|
9
|
+
## 2. Access Methods
|
|
10
|
+
|
|
11
|
+
- **CDX server:** `https://web.archive.org/cdx/search/cdx`
|
|
12
|
+
- **Wayback URL:** `https://web.archive.org/web/<timestamp>/<url>`
|
|
13
|
+
- **Save Page Now (write):** `https://web.archive.org/save/<url>` (different API)
|
|
14
|
+
- **Auth:** None
|
|
15
|
+
- **Rate limit:** Generous; be polite (~1 req/s)
|
|
16
|
+
|
|
17
|
+
## 3. Data Schema
|
|
18
|
+
|
|
19
|
+
Key fields emitted by `fetch_wayback.py`:
|
|
20
|
+
|
|
21
|
+
| Column | Type | Description |
|
|
22
|
+
|--------|------|-------------|
|
|
23
|
+
| `url` | str | Original URL captured |
|
|
24
|
+
| `timestamp` | str | YYYYMMDDHHMMSS (CDX format) |
|
|
25
|
+
| `wayback_url` | str | Direct replay URL |
|
|
26
|
+
| `mimetype` | str | Content-type at capture |
|
|
27
|
+
| `status` | str | HTTP status (typically 200) |
|
|
28
|
+
| `digest` | str | SHA1 of capture content (collapse-friendly) |
|
|
29
|
+
| `length` | str | Byte length of capture |
|
|
30
|
+
|
|
31
|
+
## 4. Coverage
|
|
32
|
+
|
|
33
|
+
- 1996 → present
|
|
34
|
+
- ~900B+ captures across ~700M domains
|
|
35
|
+
- Updated continuously by automated crawls + manual saves
|
|
36
|
+
- Some domains have aggressive coverage (news), others sparse (private)
|
|
37
|
+
|
|
38
|
+
## 5. Cross-Reference Potential
|
|
39
|
+
|
|
40
|
+
- **Wikipedia** ↔ Reverse-lookup pages cited as references that have since
|
|
41
|
+
disappeared
|
|
42
|
+
- **News URLs** ↔ Original article content when present-day URLs 404
|
|
43
|
+
- **Corporate websites** ↔ Historical "About" pages, executive bios that
|
|
44
|
+
have been scrubbed
|
|
45
|
+
|
|
46
|
+
The Wayback CDX is most useful as a **content-recovery** layer when other
|
|
47
|
+
sources point to URLs that no longer exist.
|
|
48
|
+
|
|
49
|
+
## 6. Data Quality
|
|
50
|
+
|
|
51
|
+
- robots.txt-blocked domains may have spotty or no coverage
|
|
52
|
+
- Captures vary in completeness (HTML may be saved without CSS/JS)
|
|
53
|
+
- Some content is excluded by domain owner request (DMCA, etc.)
|
|
54
|
+
- Coverage of "deep links" (URLs with query strings) is uneven
|
|
55
|
+
- Time resolution is per-capture, not continuous — gaps are common
|
|
56
|
+
|
|
57
|
+
## 7. Acquisition Script
|
|
58
|
+
|
|
59
|
+
Path: `scripts/fetch_wayback.py`
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# All captures of a specific URL
|
|
63
|
+
python3 SKILL_DIR/scripts/fetch_wayback.py --url "https://example.com/page" \
|
|
64
|
+
--out data/wb.csv
|
|
65
|
+
|
|
66
|
+
# All captures of a host
|
|
67
|
+
python3 SKILL_DIR/scripts/fetch_wayback.py --url "example.com" \
|
|
68
|
+
--match host --out data/wb.csv
|
|
69
|
+
|
|
70
|
+
# All captures of a domain + subdomains
|
|
71
|
+
python3 SKILL_DIR/scripts/fetch_wayback.py --url "example.com" \
|
|
72
|
+
--match domain --out data/wb.csv
|
|
73
|
+
|
|
74
|
+
# Only unique-content captures within a date window
|
|
75
|
+
python3 SKILL_DIR/scripts/fetch_wayback.py --url "example.com" \
|
|
76
|
+
--match host --collapse digest \
|
|
77
|
+
--from-date 2020-01-01 --to-date 2023-12-31 \
|
|
78
|
+
--out data/wb.csv
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 8. Legal & Licensing
|
|
82
|
+
|
|
83
|
+
- Internet Archive captures are made under fair-use research provisions
|
|
84
|
+
- Replay URLs are stable references — citing them is encouraged
|
|
85
|
+
- Internet Archive non-profit terms of use govern content
|
|
86
|
+
- Some content is rights-restricted; replay may be blocked even if the
|
|
87
|
+
CDX entry shows it as captured
|
|
88
|
+
|
|
89
|
+
## 9. References
|
|
90
|
+
|
|
91
|
+
- CDX server docs: https://github.com/internetarchive/wayback/blob/master/wayback-cdx-server/README.md
|
|
92
|
+
- Wayback API: https://archive.org/help/wayback_api.php
|
|
93
|
+
- Internet Archive: https://archive.org/
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Wikipedia + Wikidata
|
|
2
|
+
|
|
3
|
+
## 1. Summary
|
|
4
|
+
|
|
5
|
+
Wikipedia is the canonical narrative-bio source for notable people, places,
|
|
6
|
+
and organizations. Wikidata is its structured-data counterpart: ~110M
|
|
7
|
+
items, each with claims, dates, identifiers, and cross-references to
|
|
8
|
+
external authorities (VIAF, ISNI, ORCID, GRID, etc.).
|
|
9
|
+
|
|
10
|
+
Together they're a high-precision entity-resolution layer — the bar for
|
|
11
|
+
inclusion is real, but anything past that bar is well-cross-referenced.
|
|
12
|
+
|
|
13
|
+
## 2. Access Methods
|
|
14
|
+
|
|
15
|
+
- **Wikipedia OpenSearch:** `https://en.wikipedia.org/w/api.php?action=opensearch`
|
|
16
|
+
- **Wikipedia REST summary:** `https://en.wikipedia.org/api/rest_v1/page/summary/<title>`
|
|
17
|
+
- **Wikidata Action API:** `https://www.wikidata.org/w/api.php?action=wbgetentities`
|
|
18
|
+
- **Wikidata SPARQL:** `https://query.wikidata.org/sparql` (more powerful but aggressively rate-limited)
|
|
19
|
+
- **Auth:** None, but **a meaningful User-Agent is required**
|
|
20
|
+
|
|
21
|
+
Set `HERMES_OSINT_UA` to something identifying (e.g. `your-app/1.0 (you@example.com)`).
|
|
22
|
+
Wikimedia returns HTTP 429 to generic UAs.
|
|
23
|
+
|
|
24
|
+
## 3. Data Schema
|
|
25
|
+
|
|
26
|
+
Key fields emitted by `fetch_wikipedia.py`:
|
|
27
|
+
|
|
28
|
+
| Column | Type | Description |
|
|
29
|
+
|--------|------|-------------|
|
|
30
|
+
| `source` | str | `wikipedia` or `wikipedia+wikidata` |
|
|
31
|
+
| `label` | str | Wikipedia article title |
|
|
32
|
+
| `description` | str | Short Wikidata description |
|
|
33
|
+
| `qid` | str | Wikidata QID (e.g. Q2283 for Microsoft) |
|
|
34
|
+
| `wikipedia_title`, `wikipedia_url` | str | Article identifier + URL |
|
|
35
|
+
| `wikidata_url` | str | Wikidata entity URL |
|
|
36
|
+
| `instance_of` | str | What kind of thing it is (P31) |
|
|
37
|
+
| `country` | str | Country (P17 for orgs/places, P27 for people) |
|
|
38
|
+
| `occupation` | str | P106 |
|
|
39
|
+
| `employer` | str | P108 |
|
|
40
|
+
| `date_of_birth` | str | P569, YYYY-MM-DD |
|
|
41
|
+
| `place_of_birth` | str | P19 |
|
|
42
|
+
| `summary` | str | Wikipedia REST extract (~1000 chars) |
|
|
43
|
+
|
|
44
|
+
The fetch script uses Wikidata's Action API (NOT SPARQL) for structured
|
|
45
|
+
facts — far more lenient on rate limits.
|
|
46
|
+
|
|
47
|
+
## 4. Coverage
|
|
48
|
+
|
|
49
|
+
- Wikipedia EN: ~7M articles
|
|
50
|
+
- Wikidata: ~110M items, ~1.5B statements
|
|
51
|
+
- Updated continuously; abuse filters and bots run constantly
|
|
52
|
+
- High notability bar — most private individuals are not in Wikipedia
|
|
53
|
+
|
|
54
|
+
## 5. Cross-Reference Potential
|
|
55
|
+
|
|
56
|
+
- **All sources** ↔ `label` (entity identity resolution)
|
|
57
|
+
- **SEC EDGAR** ↔ `label` (public companies)
|
|
58
|
+
- **CourtListener** ↔ `label` (parties to notable litigation)
|
|
59
|
+
- **Wikidata external identifiers** (not currently in this fetcher's output)
|
|
60
|
+
link to VIAF, ISNI, ORCID, GRID, GitHub, Twitter, IMDb, ...
|
|
61
|
+
|
|
62
|
+
Join key: Wikidata QID is canonical. Wikipedia titles are stable for
|
|
63
|
+
most articles but can be renamed.
|
|
64
|
+
|
|
65
|
+
## 6. Data Quality
|
|
66
|
+
|
|
67
|
+
- Notability filter — only notable entities (criteria vary by topic)
|
|
68
|
+
- Recency lag — current events take days to weeks to be reflected
|
|
69
|
+
- POV / vandalism — moderated, but edits between sweeps can be bad
|
|
70
|
+
- Living-persons biographies have stricter sourcing requirements
|
|
71
|
+
- Wikidata claims have qualifiers and references — the fetch script
|
|
72
|
+
doesn't currently export them
|
|
73
|
+
|
|
74
|
+
## 7. Acquisition Script
|
|
75
|
+
|
|
76
|
+
Path: `scripts/fetch_wikipedia.py`
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Look up a notable entity
|
|
80
|
+
python3 SKILL_DIR/scripts/fetch_wikipedia.py --query "Microsoft" --out data/wp.csv
|
|
81
|
+
|
|
82
|
+
# A specific person
|
|
83
|
+
python3 SKILL_DIR/scripts/fetch_wikipedia.py --query "Bill Gates" --out data/wp_bg.csv
|
|
84
|
+
|
|
85
|
+
# Skip the Wikidata enrichment for speed
|
|
86
|
+
python3 SKILL_DIR/scripts/fetch_wikipedia.py --query "Microsoft" --no-wikidata \
|
|
87
|
+
--limit 5 --out data/wp.csv
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The OpenSearch is fuzzy — `--limit 5` returns the top 5 Wikipedia article
|
|
91
|
+
matches. Each is enriched with the QID + structured facts unless
|
|
92
|
+
`--no-wikidata` is passed.
|
|
93
|
+
|
|
94
|
+
## 8. Legal & Licensing
|
|
95
|
+
|
|
96
|
+
- Wikipedia text: CC-BY-SA-3.0 / GFDL
|
|
97
|
+
- Wikidata claims: CC0 (public domain)
|
|
98
|
+
- API ToS: respect rate limits, identify your agent
|
|
99
|
+
- Commercial use allowed with attribution
|
|
100
|
+
|
|
101
|
+
## 9. References
|
|
102
|
+
|
|
103
|
+
- Wikipedia OpenSearch: https://www.mediawiki.org/wiki/API:Opensearch
|
|
104
|
+
- Wikipedia REST: https://en.wikipedia.org/api/rest_v1/
|
|
105
|
+
- Wikidata Action API: https://www.wikidata.org/wiki/Wikidata:Data_access
|
|
106
|
+
- Wikidata SPARQL: https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service
|
|
107
|
+
- User-Agent policy: https://meta.wikimedia.org/wiki/User-Agent_policy
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Tiny stdlib HTTP helper used by fetch_*.py scripts.
|
|
2
|
+
|
|
3
|
+
Provides polite retry + JSON convenience + User-Agent enforcement.
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import os
|
|
9
|
+
import time
|
|
10
|
+
import urllib.error
|
|
11
|
+
import urllib.parse
|
|
12
|
+
import urllib.request
|
|
13
|
+
|
|
14
|
+
DEFAULT_UA = (
|
|
15
|
+
"hermes-osint-investigation/0.2 "
|
|
16
|
+
"(+https://github.com/NousResearch/hermes-agent; "
|
|
17
|
+
"set HERMES_OSINT_UA env var to identify yourself per "
|
|
18
|
+
"Wikimedia / SEC fair-use guidance)"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get(
|
|
23
|
+
url: str,
|
|
24
|
+
*,
|
|
25
|
+
params: dict | None = None,
|
|
26
|
+
headers: dict | None = None,
|
|
27
|
+
user_agent: str | None = None,
|
|
28
|
+
max_retries: int = 3,
|
|
29
|
+
backoff: float = 1.5,
|
|
30
|
+
timeout: float = 30.0,
|
|
31
|
+
) -> bytes:
|
|
32
|
+
"""GET with retry on 5xx and Retry-After honoring.
|
|
33
|
+
|
|
34
|
+
429 (rate-limit) is raised IMMEDIATELY with a clear message — retrying
|
|
35
|
+
when the upstream says "you're over quota" just wastes time. The caller
|
|
36
|
+
should slow down or supply real credentials.
|
|
37
|
+
"""
|
|
38
|
+
if params:
|
|
39
|
+
sep = "&" if "?" in url else "?"
|
|
40
|
+
url = f"{url}{sep}{urllib.parse.urlencode(params)}"
|
|
41
|
+
h = {"User-Agent": user_agent or os.environ.get("HERMES_OSINT_UA", DEFAULT_UA)}
|
|
42
|
+
if headers:
|
|
43
|
+
h.update(headers)
|
|
44
|
+
|
|
45
|
+
last_err: Exception | None = None
|
|
46
|
+
for attempt in range(max_retries + 1):
|
|
47
|
+
req = urllib.request.Request(url, headers=h)
|
|
48
|
+
try:
|
|
49
|
+
with urllib.request.urlopen(req, timeout=timeout) as resp:
|
|
50
|
+
return resp.read()
|
|
51
|
+
except urllib.error.HTTPError as e:
|
|
52
|
+
if e.code == 429:
|
|
53
|
+
# Surface immediately. Read the body so the caller sees the
|
|
54
|
+
# provider's actual message ("OVER_RATE_LIMIT" etc.).
|
|
55
|
+
try:
|
|
56
|
+
body = e.read(2048).decode("utf-8", errors="replace")
|
|
57
|
+
except Exception: # noqa: BLE001
|
|
58
|
+
body = ""
|
|
59
|
+
raise RuntimeError(
|
|
60
|
+
f"HTTP 429 rate-limited by {urllib.parse.urlsplit(url).netloc}. "
|
|
61
|
+
f"Slow down or supply a real API key. Body: {body[:300]}"
|
|
62
|
+
) from e
|
|
63
|
+
if e.code in {500, 502, 503, 504} and attempt < max_retries:
|
|
64
|
+
retry_after = e.headers.get("Retry-After") if e.headers else None
|
|
65
|
+
wait = float(retry_after) if (retry_after and retry_after.isdigit()) else backoff ** (attempt + 1)
|
|
66
|
+
time.sleep(wait)
|
|
67
|
+
last_err = e
|
|
68
|
+
continue
|
|
69
|
+
raise
|
|
70
|
+
except urllib.error.URLError as e:
|
|
71
|
+
if attempt < max_retries:
|
|
72
|
+
time.sleep(backoff ** (attempt + 1))
|
|
73
|
+
last_err = e
|
|
74
|
+
continue
|
|
75
|
+
raise
|
|
76
|
+
if last_err:
|
|
77
|
+
raise last_err
|
|
78
|
+
raise RuntimeError("unreachable")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_json(url: str, **kwargs) -> dict | list:
|
|
82
|
+
return json.loads(get(url, **kwargs).decode("utf-8"))
|