@hivehub/rulebook 5.7.0 → 5.8.1
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/.claude/commands/analysis.md +35 -35
- package/.claude/commands/continue.md +33 -33
- package/.claude/commands/rulebook-decision-create.md +55 -55
- package/.claude/commands/rulebook-decision-list.md +15 -15
- package/.claude/commands/rulebook-knowledge-add.md +41 -41
- package/.claude/commands/rulebook-knowledge-list.md +15 -15
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +67 -67
- package/.claude/commands/rulebook-task-archive.md +94 -94
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +86 -0
- package/dist/cli/commands/claude.d.ts +17 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +56 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +18 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +6 -1
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/prompts.d.ts +13 -0
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +106 -0
- package/dist/cli/prompts.js.map +1 -1
- package/dist/core/claude/claude-mcp.d.ts +10 -1
- package/dist/core/claude/claude-mcp.d.ts.map +1 -1
- package/dist/core/claude/claude-mcp.js +48 -2
- package/dist/core/claude/claude-mcp.js.map +1 -1
- package/dist/core/claude/claude-settings-manager.d.ts +12 -0
- package/dist/core/claude/claude-settings-manager.d.ts.map +1 -1
- package/dist/core/claude/claude-settings-manager.js +59 -3
- package/dist/core/claude/claude-settings-manager.js.map +1 -1
- package/dist/core/detect/detector.d.ts +8 -1
- package/dist/core/detect/detector.d.ts.map +1 -1
- package/dist/core/detect/detector.js +225 -0
- package/dist/core/detect/detector.js.map +1 -1
- package/dist/core/detect/library-registry.d.ts +40 -0
- package/dist/core/detect/library-registry.d.ts.map +1 -0
- package/dist/core/detect/library-registry.js +239 -0
- package/dist/core/detect/library-registry.js.map +1 -0
- package/dist/core/generators/generator.d.ts +2 -1
- package/dist/core/generators/generator.d.ts.map +1 -1
- package/dist/core/generators/generator.js +38 -1
- package/dist/core/generators/generator.js.map +1 -1
- package/dist/core/generators/rules-generator.d.ts +1 -5
- package/dist/core/generators/rules-generator.d.ts.map +1 -1
- package/dist/core/generators/rules-generator.js +40 -1
- package/dist/core/generators/rules-generator.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.js +0 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +23 -22
- package/templates/agents/accessibility-reviewer.md +43 -43
- package/templates/agents/api-designer.md +42 -42
- package/templates/agents/architect.md +51 -51
- package/templates/agents/build-engineer.md +36 -36
- package/templates/agents/code-reviewer.md +47 -47
- package/templates/agents/compiler/codegen-debugger.md +34 -34
- package/templates/agents/compiler/stdlib-engineer.md +28 -28
- package/templates/agents/compiler/test-coverage-guardian.md +31 -31
- package/templates/agents/database-architect.md +41 -41
- package/templates/agents/devops-engineer.md +42 -42
- package/templates/agents/docs-writer.md +38 -38
- package/templates/agents/game-engine/cpp-core-expert.md +35 -35
- package/templates/agents/game-engine/render-engineer.md +22 -22
- package/templates/agents/game-engine/shader-engineer.md +38 -38
- package/templates/agents/game-engine/systems-integration.md +43 -43
- package/templates/agents/generic/code-reviewer.md +41 -41
- package/templates/agents/generic/docs-writer.md +25 -25
- package/templates/agents/generic/project-manager.md +36 -36
- package/templates/agents/generic/researcher.md +34 -34
- package/templates/agents/generic/test-engineer.md +41 -41
- package/templates/agents/i18n-engineer.md +42 -42
- package/templates/agents/implementer.md +42 -42
- package/templates/agents/migration-engineer.md +42 -42
- package/templates/agents/mobile/platform-specialist.md +22 -22
- package/templates/agents/mobile/ui-engineer.md +22 -22
- package/templates/agents/performance-engineer.md +49 -49
- package/templates/agents/project-manager.md +217 -0
- package/templates/agents/quality-gatekeeper.md +208 -0
- package/templates/agents/refactoring-agent.md +41 -41
- package/templates/agents/researcher.md +38 -38
- package/templates/agents/security-reviewer.md +40 -40
- package/templates/agents/team-lead.md +37 -37
- package/templates/agents/tester.md +48 -48
- package/templates/agents/ux-reviewer.md +43 -43
- package/templates/agents/web-app/api-designer.md +22 -22
- package/templates/agents/web-app/backend-engineer.md +30 -30
- package/templates/agents/web-app/database-engineer.md +22 -22
- package/templates/agents/web-app/frontend-engineer.md +29 -29
- package/templates/agents/web-app/security-reviewer.md +32 -32
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/claude-workflows/bugfix.js +94 -0
- package/templates/claude-workflows/feature-pipeline.js +88 -0
- package/templates/claude-workflows/release-gate.js +64 -0
- package/templates/claude-workflows/review-fanout.js +125 -0
- package/templates/claude-workflows/rulebook-driver.js +382 -0
- package/templates/claude-workflows/spec-author.js +133 -0
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-decision-create.md +55 -55
- package/templates/commands/rulebook-decision-list.md +15 -15
- package/templates/commands/rulebook-knowledge-add.md +41 -41
- package/templates/commands/rulebook-knowledge-list.md +15 -15
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/compact-context/_default.md +23 -23
- package/templates/compact-context/cpp.md +26 -26
- package/templates/compact-context/go.md +26 -26
- package/templates/compact-context/python.md +26 -26
- package/templates/compact-context/rust.md +28 -28
- package/templates/compact-context/typescript.md +29 -29
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +296 -296
- package/templates/core/CLAUDE_MD_v2.md +90 -90
- package/templates/core/DAG.md +304 -304
- package/templates/core/DECISIONS.md +38 -38
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/KNOWLEDGE.md +49 -49
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RULEBOOK.md +1947 -1947
- package/templates/core/TIER1_PROHIBITIONS.md +154 -154
- package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1192 -1192
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/hooks/check-context-and-handoff.sh +16 -6
- package/templates/hooks/update-check.ps1 +84 -0
- package/templates/hooks/update-check.sh +103 -0
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/libraries/go/ECHO.md +18 -0
- package/templates/libraries/go/GIN.md +18 -0
- package/templates/libraries/go/GORM.md +18 -0
- package/templates/libraries/python/DJANGO.md +18 -0
- package/templates/libraries/python/FASTAPI.md +18 -0
- package/templates/libraries/python/FLASK.md +17 -0
- package/templates/libraries/python/PYDANTIC.md +17 -0
- package/templates/libraries/python/PYTEST.md +17 -0
- package/templates/libraries/python/SQLALCHEMY.md +17 -0
- package/templates/libraries/rust/ACTIX.md +17 -0
- package/templates/libraries/rust/AXUM.md +18 -0
- package/templates/libraries/rust/SERDE.md +16 -0
- package/templates/libraries/rust/SQLX.md +17 -0
- package/templates/libraries/rust/TOKIO.md +16 -0
- package/templates/libraries/typescript/ANGULAR.md +17 -0
- package/templates/libraries/typescript/DRIZZLE.md +16 -0
- package/templates/libraries/typescript/EXPRESS.md +17 -0
- package/templates/libraries/typescript/HEROUI.md +16 -0
- package/templates/libraries/typescript/JEST.md +17 -0
- package/templates/libraries/typescript/NESTJS.md +17 -0
- package/templates/libraries/typescript/NEXT.md +18 -0
- package/templates/libraries/typescript/PRISMA.md +16 -0
- package/templates/libraries/typescript/RADIX.md +16 -0
- package/templates/libraries/typescript/REACT.md +18 -0
- package/templates/libraries/typescript/SHADCN.md +16 -0
- package/templates/libraries/typescript/SVELTE.md +16 -0
- package/templates/libraries/typescript/TAILWIND.md +16 -0
- package/templates/libraries/typescript/TRPC.md +16 -0
- package/templates/libraries/typescript/VITEST.md +17 -0
- package/templates/libraries/typescript/VUE.md +17 -0
- package/templates/libraries/typescript/ZOD.md +17 -0
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +208 -208
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/rules/consult-analysis-before-implementing.md +23 -23
- package/templates/rules/cpp.md +46 -46
- package/templates/rules/csharp.md +44 -44
- package/templates/rules/diagnostic-first.md +39 -39
- package/templates/rules/fail-twice-escalate.md +46 -46
- package/templates/rules/follow-task-sequence.md +36 -36
- package/templates/rules/git-safety.md +29 -29
- package/templates/rules/go.md +40 -40
- package/templates/rules/incremental-implementation.md +56 -56
- package/templates/rules/incremental-tests.md +29 -29
- package/templates/rules/java.md +43 -43
- package/templates/rules/javascript.md +39 -39
- package/templates/rules/knowledge-base-usage.md +41 -41
- package/templates/rules/multi-agent-teams.md +75 -75
- package/templates/rules/no-deferred.md +31 -31
- package/templates/rules/no-shortcuts.md +30 -30
- package/templates/rules/python.md +43 -43
- package/templates/rules/research-first.md +30 -30
- package/templates/rules/respect-handoff-trigger.md +41 -41
- package/templates/rules/rust.md +40 -40
- package/templates/rules/sequential-editing.md +21 -21
- package/templates/rules/session-workflow.md +24 -24
- package/templates/rules/task-decomposition.md +32 -32
- package/templates/rules/typescript.md +40 -40
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
- package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
- package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
- package/templates/skills/dev/accessibility/SKILL.md +17 -17
- package/templates/skills/dev/analysis/SKILL.md +19 -19
- package/templates/skills/dev/api-design/SKILL.md +15 -15
- package/templates/skills/dev/architect/SKILL.md +17 -17
- package/templates/skills/dev/build-fix/SKILL.md +17 -17
- package/templates/skills/dev/db-design/SKILL.md +15 -15
- package/templates/skills/dev/debug/SKILL.md +16 -16
- package/templates/skills/dev/deploy/SKILL.md +17 -17
- package/templates/skills/dev/docs/SKILL.md +17 -17
- package/templates/skills/dev/handoff/SKILL.md +27 -27
- package/templates/skills/dev/migrate/SKILL.md +15 -15
- package/templates/skills/dev/perf/SKILL.md +17 -17
- package/templates/skills/dev/refactor/SKILL.md +17 -17
- package/templates/skills/dev/research/SKILL.md +14 -14
- package/templates/skills/dev/review/SKILL.md +18 -18
- package/templates/skills/dev/security-audit/SKILL.md +17 -17
- package/templates/skills/dev/spec/SKILL.md +65 -0
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/workflows/typescript-test.yml +9 -3
- package/dist/agents/ralph-parser.d.ts +0 -91
- package/dist/agents/ralph-parser.d.ts.map +0 -1
- package/dist/agents/ralph-parser.js +0 -415
- package/dist/agents/ralph-parser.js.map +0 -1
- package/dist/cli/commands/analysis.d.ts +0 -8
- package/dist/cli/commands/analysis.d.ts.map +0 -1
- package/dist/cli/commands/analysis.js +0 -78
- package/dist/cli/commands/analysis.js.map +0 -1
- package/dist/cli/commands/compress.d.ts +0 -18
- package/dist/cli/commands/compress.d.ts.map +0 -1
- package/dist/cli/commands/compress.js +0 -100
- package/dist/cli/commands/compress.js.map +0 -1
- package/dist/cli/commands/ralph.d.ts +0 -45
- package/dist/cli/commands/ralph.d.ts.map +0 -1
- package/dist/cli/commands/ralph.js +0 -694
- package/dist/cli/commands/ralph.js.map +0 -1
- package/dist/cli/docs-prompts.d.ts +0 -3
- package/dist/cli/docs-prompts.d.ts.map +0 -1
- package/dist/cli/docs-prompts.js +0 -45
- package/dist/cli/docs-prompts.js.map +0 -1
- package/dist/core/agent-manager.d.ts +0 -69
- package/dist/core/agent-manager.d.ts.map +0 -1
- package/dist/core/agent-manager.js +0 -476
- package/dist/core/agent-manager.js.map +0 -1
- package/dist/core/agent-template-engine.d.ts +0 -51
- package/dist/core/agent-template-engine.d.ts.map +0 -1
- package/dist/core/agent-template-engine.js +0 -291
- package/dist/core/agent-template-engine.js.map +0 -1
- package/dist/core/analysis-manager.d.ts +0 -56
- package/dist/core/analysis-manager.d.ts.map +0 -1
- package/dist/core/analysis-manager.js +0 -218
- package/dist/core/analysis-manager.js.map +0 -1
- package/dist/core/auto-fixer.d.ts +0 -14
- package/dist/core/auto-fixer.d.ts.map +0 -1
- package/dist/core/auto-fixer.js +0 -207
- package/dist/core/auto-fixer.js.map +0 -1
- package/dist/core/changelog-generator.d.ts +0 -44
- package/dist/core/changelog-generator.d.ts.map +0 -1
- package/dist/core/changelog-generator.js +0 -222
- package/dist/core/changelog-generator.js.map +0 -1
- package/dist/core/claude-mcp.d.ts +0 -59
- package/dist/core/claude-mcp.d.ts.map +0 -1
- package/dist/core/claude-mcp.js +0 -220
- package/dist/core/claude-mcp.js.map +0 -1
- package/dist/core/claude-md-generator.d.ts +0 -52
- package/dist/core/claude-md-generator.d.ts.map +0 -1
- package/dist/core/claude-md-generator.js +0 -104
- package/dist/core/claude-md-generator.js.map +0 -1
- package/dist/core/claude-settings-manager.d.ts +0 -44
- package/dist/core/claude-settings-manager.d.ts.map +0 -1
- package/dist/core/claude-settings-manager.js +0 -191
- package/dist/core/claude-settings-manager.js.map +0 -1
- package/dist/core/cli-bridge.d.ts +0 -113
- package/dist/core/cli-bridge.d.ts.map +0 -1
- package/dist/core/cli-bridge.js +0 -1094
- package/dist/core/cli-bridge.js.map +0 -1
- package/dist/core/compact-context-manager.d.ts +0 -34
- package/dist/core/compact-context-manager.d.ts.map +0 -1
- package/dist/core/compact-context-manager.js +0 -60
- package/dist/core/compact-context-manager.js.map +0 -1
- package/dist/core/complexity-detector.d.ts +0 -36
- package/dist/core/complexity-detector.d.ts.map +0 -1
- package/dist/core/complexity-detector.js +0 -334
- package/dist/core/complexity-detector.js.map +0 -1
- package/dist/core/compress/compressor.d.ts +0 -60
- package/dist/core/compress/compressor.d.ts.map +0 -1
- package/dist/core/compress/compressor.js +0 -232
- package/dist/core/compress/compressor.js.map +0 -1
- package/dist/core/compress/discover.d.ts +0 -19
- package/dist/core/compress/discover.d.ts.map +0 -1
- package/dist/core/compress/discover.js +0 -100
- package/dist/core/compress/discover.js.map +0 -1
- package/dist/core/compress/validator.d.ts +0 -47
- package/dist/core/compress/validator.d.ts.map +0 -1
- package/dist/core/compress/validator.js +0 -131
- package/dist/core/compress/validator.js.map +0 -1
- package/dist/core/config-manager.d.ts +0 -86
- package/dist/core/config-manager.d.ts.map +0 -1
- package/dist/core/config-manager.js +0 -621
- package/dist/core/config-manager.js.map +0 -1
- package/dist/core/coverage-checker.d.ts +0 -14
- package/dist/core/coverage-checker.d.ts.map +0 -1
- package/dist/core/coverage-checker.js +0 -176
- package/dist/core/coverage-checker.js.map +0 -1
- package/dist/core/cursor-mdc-generator.d.ts +0 -30
- package/dist/core/cursor-mdc-generator.d.ts.map +0 -1
- package/dist/core/cursor-mdc-generator.js +0 -98
- package/dist/core/cursor-mdc-generator.js.map +0 -1
- package/dist/core/decision-manager.d.ts +0 -25
- package/dist/core/decision-manager.d.ts.map +0 -1
- package/dist/core/decision-manager.js +0 -183
- package/dist/core/decision-manager.js.map +0 -1
- package/dist/core/dependency-checker.d.ts +0 -21
- package/dist/core/dependency-checker.d.ts.map +0 -1
- package/dist/core/dependency-checker.js +0 -247
- package/dist/core/dependency-checker.js.map +0 -1
- package/dist/core/detector.d.ts +0 -27
- package/dist/core/detector.d.ts.map +0 -1
- package/dist/core/detector.js +0 -1763
- package/dist/core/detector.js.map +0 -1
- package/dist/core/docs-generator.d.ts +0 -9
- package/dist/core/docs-generator.d.ts.map +0 -1
- package/dist/core/docs-generator.js +0 -531
- package/dist/core/docs-generator.js.map +0 -1
- package/dist/core/doctor.d.ts +0 -19
- package/dist/core/doctor.d.ts.map +0 -1
- package/dist/core/doctor.js +0 -229
- package/dist/core/doctor.js.map +0 -1
- package/dist/core/generator.d.ts +0 -56
- package/dist/core/generator.d.ts.map +0 -1
- package/dist/core/generator.js +0 -1193
- package/dist/core/generator.js.map +0 -1
- package/dist/core/github-issues-importer.d.ts +0 -82
- package/dist/core/github-issues-importer.d.ts.map +0 -1
- package/dist/core/github-issues-importer.js +0 -161
- package/dist/core/github-issues-importer.js.map +0 -1
- package/dist/core/gitignore-generator.d.ts +0 -13
- package/dist/core/gitignore-generator.d.ts.map +0 -1
- package/dist/core/gitignore-generator.js +0 -307
- package/dist/core/gitignore-generator.js.map +0 -1
- package/dist/core/health-scorer.d.ts +0 -61
- package/dist/core/health-scorer.d.ts.map +0 -1
- package/dist/core/health-scorer.js +0 -638
- package/dist/core/health-scorer.js.map +0 -1
- package/dist/core/iteration-tracker.d.ts +0 -85
- package/dist/core/iteration-tracker.d.ts.map +0 -1
- package/dist/core/iteration-tracker.js +0 -295
- package/dist/core/iteration-tracker.js.map +0 -1
- package/dist/core/knowledge-manager.d.ts +0 -24
- package/dist/core/knowledge-manager.d.ts.map +0 -1
- package/dist/core/knowledge-manager.js +0 -173
- package/dist/core/knowledge-manager.js.map +0 -1
- package/dist/core/learn-manager.d.ts +0 -29
- package/dist/core/learn-manager.d.ts.map +0 -1
- package/dist/core/learn-manager.js +0 -159
- package/dist/core/learn-manager.js.map +0 -1
- package/dist/core/mcp-reference-generator.d.ts +0 -13
- package/dist/core/mcp-reference-generator.d.ts.map +0 -1
- package/dist/core/mcp-reference-generator.js +0 -66
- package/dist/core/mcp-reference-generator.js.map +0 -1
- package/dist/core/minimal-scaffolder.d.ts +0 -8
- package/dist/core/minimal-scaffolder.d.ts.map +0 -1
- package/dist/core/minimal-scaffolder.js +0 -51
- package/dist/core/minimal-scaffolder.js.map +0 -1
- package/dist/core/modern-console.d.ts +0 -98
- package/dist/core/modern-console.d.ts.map +0 -1
- package/dist/core/modern-console.js +0 -556
- package/dist/core/modern-console.js.map +0 -1
- package/dist/core/multi-tool-generator.d.ts +0 -59
- package/dist/core/multi-tool-generator.d.ts.map +0 -1
- package/dist/core/multi-tool-generator.js +0 -157
- package/dist/core/multi-tool-generator.js.map +0 -1
- package/dist/core/override-manager.d.ts +0 -23
- package/dist/core/override-manager.d.ts.map +0 -1
- package/dist/core/override-manager.js +0 -82
- package/dist/core/override-manager.js.map +0 -1
- package/dist/core/plans-manager.d.ts +0 -46
- package/dist/core/plans-manager.d.ts.map +0 -1
- package/dist/core/plans-manager.js +0 -158
- package/dist/core/plans-manager.js.map +0 -1
- package/dist/core/prd-generator.d.ts +0 -48
- package/dist/core/prd-generator.d.ts.map +0 -1
- package/dist/core/prd-generator.js +0 -233
- package/dist/core/prd-generator.js.map +0 -1
- package/dist/core/ralph-manager.d.ts +0 -163
- package/dist/core/ralph-manager.d.ts.map +0 -1
- package/dist/core/ralph-manager.js +0 -555
- package/dist/core/ralph-manager.js.map +0 -1
- package/dist/core/ralph-parallel.d.ts +0 -55
- package/dist/core/ralph-parallel.d.ts.map +0 -1
- package/dist/core/ralph-parallel.js +0 -201
- package/dist/core/ralph-parallel.js.map +0 -1
- package/dist/core/ralph-plan-checkpoint.d.ts +0 -58
- package/dist/core/ralph-plan-checkpoint.d.ts.map +0 -1
- package/dist/core/ralph-plan-checkpoint.js +0 -154
- package/dist/core/ralph-plan-checkpoint.js.map +0 -1
- package/dist/core/ralph-scripts.d.ts +0 -12
- package/dist/core/ralph-scripts.d.ts.map +0 -1
- package/dist/core/ralph-scripts.js +0 -50
- package/dist/core/ralph-scripts.js.map +0 -1
- package/dist/core/review-manager.d.ts +0 -74
- package/dist/core/review-manager.d.ts.map +0 -1
- package/dist/core/review-manager.js +0 -371
- package/dist/core/review-manager.js.map +0 -1
- package/dist/core/rules-generator.d.ts +0 -73
- package/dist/core/rules-generator.d.ts.map +0 -1
- package/dist/core/rules-generator.js +0 -202
- package/dist/core/rules-generator.js.map +0 -1
- package/dist/core/skills-manager.d.ts +0 -126
- package/dist/core/skills-manager.d.ts.map +0 -1
- package/dist/core/skills-manager.js +0 -654
- package/dist/core/skills-manager.js.map +0 -1
- package/dist/core/state-writer.d.ts +0 -35
- package/dist/core/state-writer.d.ts.map +0 -1
- package/dist/core/state-writer.js +0 -81
- package/dist/core/state-writer.js.map +0 -1
- package/dist/core/task-manager.d.ts +0 -127
- package/dist/core/task-manager.d.ts.map +0 -1
- package/dist/core/task-manager.js +0 -607
- package/dist/core/task-manager.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -29
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -57
- package/dist/core/telemetry.js.map +0 -1
- package/dist/core/validator.d.ts +0 -21
- package/dist/core/validator.d.ts.map +0 -1
- package/dist/core/validator.js +0 -177
- package/dist/core/validator.js.map +0 -1
- package/dist/core/version-bumper.d.ts +0 -19
- package/dist/core/version-bumper.d.ts.map +0 -1
- package/dist/core/version-bumper.js +0 -180
- package/dist/core/version-bumper.js.map +0 -1
- package/dist/core/watcher.d.ts +0 -9
- package/dist/core/watcher.d.ts.map +0 -1
- package/dist/core/watcher.js +0 -22
- package/dist/core/watcher.js.map +0 -1
- package/dist/core/workflow-generator.d.ts +0 -15
- package/dist/core/workflow-generator.d.ts.map +0 -1
- package/dist/core/workflow-generator.js +0 -391
- package/dist/core/workflow-generator.js.map +0 -1
- package/dist/hooks/terse-activate.d.ts +0 -59
- package/dist/hooks/terse-activate.d.ts.map +0 -1
- package/dist/hooks/terse-activate.js +0 -149
- package/dist/hooks/terse-activate.js.map +0 -1
- package/dist/hooks/terse-config.d.ts +0 -51
- package/dist/hooks/terse-config.d.ts.map +0 -1
- package/dist/hooks/terse-config.js +0 -130
- package/dist/hooks/terse-config.js.map +0 -1
- package/dist/hooks/terse-mode-tracker.d.ts +0 -78
- package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
- package/dist/hooks/terse-mode-tracker.js +0 -213
- package/dist/hooks/terse-mode-tracker.js.map +0 -1
- package/dist/memory/hnsw-index.d.ts +0 -68
- package/dist/memory/hnsw-index.d.ts.map +0 -1
- package/dist/memory/hnsw-index.js +0 -544
- package/dist/memory/hnsw-index.js.map +0 -1
- package/dist/memory/memory-cache.d.ts +0 -33
- package/dist/memory/memory-cache.d.ts.map +0 -1
- package/dist/memory/memory-cache.js +0 -85
- package/dist/memory/memory-cache.js.map +0 -1
- package/dist/memory/memory-search.d.ts +0 -42
- package/dist/memory/memory-search.d.ts.map +0 -1
- package/dist/memory/memory-search.js +0 -180
- package/dist/memory/memory-search.js.map +0 -1
- package/dist/memory/memory-store.d.ts +0 -84
- package/dist/memory/memory-store.d.ts.map +0 -1
- package/dist/memory/memory-store.js +0 -566
- package/dist/memory/memory-store.js.map +0 -1
- package/dist/memory/memory-vectorizer.d.ts +0 -29
- package/dist/memory/memory-vectorizer.d.ts.map +0 -1
- package/dist/memory/memory-vectorizer.js +0 -199
- package/dist/memory/memory-vectorizer.js.map +0 -1
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Vectorizer"
|
|
3
|
-
description: "Use MCP Vectorizer as primary data source for project information instead of file reading."
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
category: "modules"
|
|
6
|
-
author: "Rulebook"
|
|
7
|
-
tags: ["modules", "mcp"]
|
|
8
|
-
dependencies: []
|
|
9
|
-
conflicts: []
|
|
10
|
-
---
|
|
11
|
-
<!-- VECTORIZER:START -->
|
|
12
|
-
# Vectorizer Instructions
|
|
13
|
-
|
|
14
|
-
**CRITICAL**: Use MCP Vectorizer as primary data source for project information instead of file reading.
|
|
15
|
-
|
|
16
|
-
## Core Functions
|
|
17
|
-
|
|
18
|
-
### Search
|
|
19
|
-
```
|
|
20
|
-
mcp_vectorizer_search - Multiple strategies:
|
|
21
|
-
- intelligent: AI-powered with query expansion
|
|
22
|
-
- semantic: Advanced with reranking
|
|
23
|
-
- contextual: Context-aware with filtering
|
|
24
|
-
- multi_collection: Cross-project search
|
|
25
|
-
- batch: Parallel queries
|
|
26
|
-
- by_file_type: Filter by extension (.rs, .ts, .py)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### File Operations
|
|
30
|
-
```
|
|
31
|
-
get_content - Retrieve file without disk I/O
|
|
32
|
-
list_files - List indexed files with metadata
|
|
33
|
-
get_summary - File summaries (extractive/structural)
|
|
34
|
-
get_chunks - Progressive reading of large files
|
|
35
|
-
get_outline - Project structure overview
|
|
36
|
-
get_related - Find semantically related files
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Discovery
|
|
40
|
-
```
|
|
41
|
-
full_pipeline - Complete discovery with scoring
|
|
42
|
-
broad_discovery - Multi-query with deduplication
|
|
43
|
-
semantic_focus - Deep semantic search
|
|
44
|
-
expand_queries - Generate query variations
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## When to Use
|
|
48
|
-
|
|
49
|
-
| Task | Tool |
|
|
50
|
-
|------|------|
|
|
51
|
-
| Explore unfamiliar code | intelligent search |
|
|
52
|
-
| Read file | get_content |
|
|
53
|
-
| Understand structure | get_outline |
|
|
54
|
-
| Find related files | get_related |
|
|
55
|
-
| Read large file | get_chunks |
|
|
56
|
-
| Complex question | full_pipeline |
|
|
57
|
-
|
|
58
|
-
## Best Practices
|
|
59
|
-
|
|
60
|
-
✅ **DO:**
|
|
61
|
-
- Start with intelligent search for exploration
|
|
62
|
-
- Use file_operations to avoid disk I/O
|
|
63
|
-
- Batch queries for related items
|
|
64
|
-
- Set similarity thresholds (0.6-0.8)
|
|
65
|
-
- Use specific collections when known
|
|
66
|
-
|
|
67
|
-
❌ **DON'T:**
|
|
68
|
-
- Read files from disk when available in vectorizer
|
|
69
|
-
- Use sequential searches (batch instead)
|
|
70
|
-
- Skip similarity thresholds
|
|
71
|
-
- Search entire codebase when collection is known
|
|
72
|
-
|
|
73
|
-
<!-- VECTORIZER:END -->
|
|
1
|
+
---
|
|
2
|
+
name: "Vectorizer"
|
|
3
|
+
description: "Use MCP Vectorizer as primary data source for project information instead of file reading."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
category: "modules"
|
|
6
|
+
author: "Rulebook"
|
|
7
|
+
tags: ["modules", "mcp"]
|
|
8
|
+
dependencies: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
---
|
|
11
|
+
<!-- VECTORIZER:START -->
|
|
12
|
+
# Vectorizer Instructions
|
|
13
|
+
|
|
14
|
+
**CRITICAL**: Use MCP Vectorizer as primary data source for project information instead of file reading.
|
|
15
|
+
|
|
16
|
+
## Core Functions
|
|
17
|
+
|
|
18
|
+
### Search
|
|
19
|
+
```
|
|
20
|
+
mcp_vectorizer_search - Multiple strategies:
|
|
21
|
+
- intelligent: AI-powered with query expansion
|
|
22
|
+
- semantic: Advanced with reranking
|
|
23
|
+
- contextual: Context-aware with filtering
|
|
24
|
+
- multi_collection: Cross-project search
|
|
25
|
+
- batch: Parallel queries
|
|
26
|
+
- by_file_type: Filter by extension (.rs, .ts, .py)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### File Operations
|
|
30
|
+
```
|
|
31
|
+
get_content - Retrieve file without disk I/O
|
|
32
|
+
list_files - List indexed files with metadata
|
|
33
|
+
get_summary - File summaries (extractive/structural)
|
|
34
|
+
get_chunks - Progressive reading of large files
|
|
35
|
+
get_outline - Project structure overview
|
|
36
|
+
get_related - Find semantically related files
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Discovery
|
|
40
|
+
```
|
|
41
|
+
full_pipeline - Complete discovery with scoring
|
|
42
|
+
broad_discovery - Multi-query with deduplication
|
|
43
|
+
semantic_focus - Deep semantic search
|
|
44
|
+
expand_queries - Generate query variations
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## When to Use
|
|
48
|
+
|
|
49
|
+
| Task | Tool |
|
|
50
|
+
|------|------|
|
|
51
|
+
| Explore unfamiliar code | intelligent search |
|
|
52
|
+
| Read file | get_content |
|
|
53
|
+
| Understand structure | get_outline |
|
|
54
|
+
| Find related files | get_related |
|
|
55
|
+
| Read large file | get_chunks |
|
|
56
|
+
| Complex question | full_pipeline |
|
|
57
|
+
|
|
58
|
+
## Best Practices
|
|
59
|
+
|
|
60
|
+
✅ **DO:**
|
|
61
|
+
- Start with intelligent search for exploration
|
|
62
|
+
- Use file_operations to avoid disk I/O
|
|
63
|
+
- Batch queries for related items
|
|
64
|
+
- Set similarity thresholds (0.6-0.8)
|
|
65
|
+
- Use specific collections when known
|
|
66
|
+
|
|
67
|
+
❌ **DON'T:**
|
|
68
|
+
- Read files from disk when available in vectorizer
|
|
69
|
+
- Use sequential searches (batch instead)
|
|
70
|
+
- Skip similarity thresholds
|
|
71
|
+
- Search entire codebase when collection is known
|
|
72
|
+
|
|
73
|
+
<!-- VECTORIZER:END -->
|
|
@@ -60,10 +60,16 @@ jobs:
|
|
|
60
60
|
flags: unittests
|
|
61
61
|
fail_ci_if_error: false
|
|
62
62
|
|
|
63
|
-
- name: Security audit
|
|
63
|
+
- name: Security audit (blocking on high/critical)
|
|
64
|
+
# Fails the build on high or critical production vulnerabilities.
|
|
65
|
+
# Runs only once (ubuntu/20.x) to avoid duplicate failures across the matrix.
|
|
66
|
+
if: matrix.os == 'ubuntu-latest' && matrix.node-version == '20.x'
|
|
67
|
+
run: |
|
|
68
|
+
echo "Running security audit (production, high+)..."
|
|
69
|
+
npm audit --production --audit-level=high
|
|
70
|
+
|
|
71
|
+
- name: Dependency hygiene (informational)
|
|
64
72
|
run: |
|
|
65
|
-
echo "Running security audit..."
|
|
66
|
-
npm audit --production --audit-level=moderate || true
|
|
67
73
|
echo "Checking for outdated dependencies..."
|
|
68
74
|
npm outdated || true
|
|
69
75
|
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { IterationResult } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Parses AI agent output to extract task completion status,
|
|
4
|
-
* quality metrics, and learnings for Ralph iteration tracking
|
|
5
|
-
*/
|
|
6
|
-
export declare class RalphParser {
|
|
7
|
-
/**
|
|
8
|
-
* Parse agent output and extract iteration result
|
|
9
|
-
*/
|
|
10
|
-
static parseAgentOutput(agentOutput: string, iterationNum: number, taskId: string, taskTitle: string, tool: 'claude' | 'amp' | 'gemini'): IterationResult;
|
|
11
|
-
/**
|
|
12
|
-
* Extract quality check results from agent output.
|
|
13
|
-
* Uses structured count-based detection to avoid false positives.
|
|
14
|
-
* "0 errors" / "no errors" are treated as success, not failure.
|
|
15
|
-
* Note: In MCP ralph_run, real quality gates are determined by actual command exit codes,
|
|
16
|
-
* not this parser. This is a best-effort extraction for standalone parsing.
|
|
17
|
-
*/
|
|
18
|
-
private static extractQualityChecks;
|
|
19
|
-
/**
|
|
20
|
-
* Parse lint error count from ESLint output.
|
|
21
|
-
* Returns 0 if no error count found (treat as passing).
|
|
22
|
-
*/
|
|
23
|
-
private static parseLintErrorCount;
|
|
24
|
-
/**
|
|
25
|
-
* Parse test failure count from vitest/jest output.
|
|
26
|
-
* Returns 0 if no failure count found (treat as passing).
|
|
27
|
-
*/
|
|
28
|
-
private static parseTestFailCount;
|
|
29
|
-
/**
|
|
30
|
-
* Parse real coverage percentage from test runner output.
|
|
31
|
-
* Supports vitest table format and jest/c8 line format.
|
|
32
|
-
* Returns null if coverage cannot be determined.
|
|
33
|
-
*/
|
|
34
|
-
static parseCoveragePercentage(output: string): number | null;
|
|
35
|
-
/**
|
|
36
|
-
* Helper: Check if a single line contains percentage >= threshold
|
|
37
|
-
*/
|
|
38
|
-
private static lineHasPercentageAbove;
|
|
39
|
-
/**
|
|
40
|
-
* Determine overall iteration status
|
|
41
|
-
*/
|
|
42
|
-
private static determineStatus;
|
|
43
|
-
/**
|
|
44
|
-
* Extract learnings and insights from output
|
|
45
|
-
*/
|
|
46
|
-
private static extractLearnings;
|
|
47
|
-
/**
|
|
48
|
-
* Extract errors from output
|
|
49
|
-
*/
|
|
50
|
-
private static extractErrors;
|
|
51
|
-
/**
|
|
52
|
-
* Extract git commit hash from output
|
|
53
|
-
*/
|
|
54
|
-
private static extractGitCommit;
|
|
55
|
-
/**
|
|
56
|
-
* Generate summary from agent output
|
|
57
|
-
*/
|
|
58
|
-
private static generateSummary;
|
|
59
|
-
/**
|
|
60
|
-
* Count context loss events in output
|
|
61
|
-
*/
|
|
62
|
-
private static countContextLoss;
|
|
63
|
-
/**
|
|
64
|
-
* Check if iteration completion is detected
|
|
65
|
-
*/
|
|
66
|
-
private static isCompletionDetected;
|
|
67
|
-
/**
|
|
68
|
-
* Parse `npm audit --json` output.
|
|
69
|
-
* Returns the highest severity found: 'critical' | 'high' | 'moderate' | 'low' | 'none'
|
|
70
|
-
*/
|
|
71
|
-
static parseNpmAuditSeverity(jsonOutput: string): 'critical' | 'high' | 'moderate' | 'low' | 'none';
|
|
72
|
-
/**
|
|
73
|
-
* Parse text-based security tool output (trivy, semgrep, or npm audit without --json).
|
|
74
|
-
* Returns the highest severity found: 'critical' | 'high' | 'moderate' | 'low' | 'none'
|
|
75
|
-
*/
|
|
76
|
-
static parseSecurityOutputText(output: string): 'critical' | 'high' | 'moderate' | 'low' | 'none';
|
|
77
|
-
/**
|
|
78
|
-
* Parse trivy JSON output (`trivy fs --format json`) for the highest severity found.
|
|
79
|
-
*/
|
|
80
|
-
static parseTrivySeverity(jsonOutput: string): 'critical' | 'high' | 'moderate' | 'low' | 'none';
|
|
81
|
-
/**
|
|
82
|
-
* Parse semgrep JSON output (`semgrep --json`) for the highest severity found.
|
|
83
|
-
*/
|
|
84
|
-
static parseSemgrepSeverity(jsonOutput: string): 'critical' | 'high' | 'moderate' | 'low' | 'none';
|
|
85
|
-
/**
|
|
86
|
-
* Determine if a security gate passes given the found severity and the configured failOn threshold.
|
|
87
|
-
* Severity order: none < low < moderate < high < critical
|
|
88
|
-
*/
|
|
89
|
-
static securityGatePasses(foundSeverity: 'critical' | 'high' | 'moderate' | 'low' | 'none', failOn: 'critical' | 'high' | 'moderate' | 'low'): boolean;
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=ralph-parser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ralph-parser.d.ts","sourceRoot":"","sources":["../../src/agents/ralph-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAChC,eAAe;IA4ClB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA2EnC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAgBlC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAgBjC;;;;OAIG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA4B7D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAYrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAwB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA4B/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IA4B5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAa/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAiB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiB/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAC1B,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM;IAoBpD;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAC5B,MAAM,EAAE,MAAM,GACb,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM;IASpD;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM;IAoBhG;;OAEG;IACH,MAAM,CAAC,oBAAoB,CACzB,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM;IAyBpD;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CACvB,aAAa,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,EAChE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAC/C,OAAO;CAMX"}
|
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parses AI agent output to extract task completion status,
|
|
3
|
-
* quality metrics, and learnings for Ralph iteration tracking
|
|
4
|
-
*/
|
|
5
|
-
export class RalphParser {
|
|
6
|
-
/**
|
|
7
|
-
* Parse agent output and extract iteration result
|
|
8
|
-
*/
|
|
9
|
-
static parseAgentOutput(agentOutput, iterationNum, taskId, taskTitle, tool) {
|
|
10
|
-
const startTime = Date.now();
|
|
11
|
-
// Extract quality check results
|
|
12
|
-
const qualityChecks = this.extractQualityChecks(agentOutput);
|
|
13
|
-
// Determine success/partial/failed status
|
|
14
|
-
const status = this.determineStatus(qualityChecks);
|
|
15
|
-
// Extract learnings and errors
|
|
16
|
-
const learnings = this.extractLearnings(agentOutput);
|
|
17
|
-
const errors = this.extractErrors(agentOutput);
|
|
18
|
-
// Extract git commit hash if present
|
|
19
|
-
const gitCommit = this.extractGitCommit(agentOutput);
|
|
20
|
-
// Generate summary from output
|
|
21
|
-
const summary = this.generateSummary(agentOutput, status);
|
|
22
|
-
// Calculate execution time (placeholder - would be from actual execution)
|
|
23
|
-
const executionTime = Date.now() - startTime;
|
|
24
|
-
const result = {
|
|
25
|
-
iteration: iterationNum,
|
|
26
|
-
timestamp: new Date().toISOString(),
|
|
27
|
-
task_id: taskId,
|
|
28
|
-
task_title: taskTitle,
|
|
29
|
-
status,
|
|
30
|
-
ai_tool: tool,
|
|
31
|
-
execution_time_ms: executionTime,
|
|
32
|
-
quality_checks: qualityChecks,
|
|
33
|
-
output_summary: summary,
|
|
34
|
-
git_commit: gitCommit,
|
|
35
|
-
learnings,
|
|
36
|
-
errors,
|
|
37
|
-
metadata: {
|
|
38
|
-
context_loss_count: this.countContextLoss(agentOutput),
|
|
39
|
-
parsed_completion: this.isCompletionDetected(agentOutput),
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Extract quality check results from agent output.
|
|
46
|
-
* Uses structured count-based detection to avoid false positives.
|
|
47
|
-
* "0 errors" / "no errors" are treated as success, not failure.
|
|
48
|
-
* Note: In MCP ralph_run, real quality gates are determined by actual command exit codes,
|
|
49
|
-
* not this parser. This is a best-effort extraction for standalone parsing.
|
|
50
|
-
*/
|
|
51
|
-
static extractQualityChecks(output) {
|
|
52
|
-
const lines = output.split('\n').map((l) => l.toLowerCase().trim());
|
|
53
|
-
// Type-check: pass if no TypeScript error codes (error TS\d+) found
|
|
54
|
-
const tsErrorCount = (output.match(/error TS\d+/gi) ?? []).length;
|
|
55
|
-
const typeCheckExplicitPass = lines.some((l) => (l.includes('type-check') || l.includes('tsc')) &&
|
|
56
|
-
(l.includes('pass') || l.includes('success') || l.includes('✓')) &&
|
|
57
|
-
!l.includes('fail'));
|
|
58
|
-
const typeCheckPass = typeCheckExplicitPass || tsErrorCount === 0;
|
|
59
|
-
// Lint: parse "X problems (Y errors, Z warnings)" — fail only if errors > 0
|
|
60
|
-
// Also pass on "0 problems", "0 errors", "no problems", explicit pass
|
|
61
|
-
const lintErrorCount = this.parseLintErrorCount(lines);
|
|
62
|
-
const lintExplicitPass = lines.some((l) => (l.includes('eslint') || l.includes('lint')) &&
|
|
63
|
-
(l.includes('pass') ||
|
|
64
|
-
l.includes('success') ||
|
|
65
|
-
l.includes('✓') ||
|
|
66
|
-
l.includes('0 problems') ||
|
|
67
|
-
l.includes('no problems')));
|
|
68
|
-
const lintExplicitFail = lines.some((l) => (l.includes('eslint') || l.includes('lint')) && l.includes('fail'));
|
|
69
|
-
const lintPass = lintExplicitFail ? false : lintExplicitPass || lintErrorCount === 0;
|
|
70
|
-
// Tests: parse "X failed" — fail only if count > 0
|
|
71
|
-
// "0 errors", "passing", "✓ X tests" are all success
|
|
72
|
-
const testFailCount = this.parseTestFailCount(lines);
|
|
73
|
-
const testExplicitPass = lines.some((l) => (l.includes('test') || l.includes('vitest') || l.includes('jest')) &&
|
|
74
|
-
(l.includes('pass') ||
|
|
75
|
-
l.includes('passed') ||
|
|
76
|
-
l.includes('✓') ||
|
|
77
|
-
l.includes('success') ||
|
|
78
|
-
l.includes('0 errors') ||
|
|
79
|
-
l.includes('no errors') ||
|
|
80
|
-
l.includes('0 failed')));
|
|
81
|
-
const testExplicitFail = lines.some((l) => (l.includes('test') || l.includes('vitest') || l.includes('jest')) &&
|
|
82
|
-
l.includes('fail') &&
|
|
83
|
-
!l.includes('0 fail'));
|
|
84
|
-
const testsPass = testExplicitFail ? false : testExplicitPass || testFailCount === 0;
|
|
85
|
-
// Coverage: parse actual percentage or explicit pass/fail
|
|
86
|
-
const covPct = this.parseCoveragePercentage(output);
|
|
87
|
-
const coveragePass = (covPct !== null && covPct >= 95) ||
|
|
88
|
-
lines.some((l) => l.includes('coverage') && this.lineHasPercentageAbove(l, 95)) ||
|
|
89
|
-
lines.some((l) => l.includes('coverage') && (l.includes('pass') || l.includes('met') || l.includes('✓')));
|
|
90
|
-
return {
|
|
91
|
-
type_check: typeCheckPass,
|
|
92
|
-
lint: lintPass,
|
|
93
|
-
tests: testsPass,
|
|
94
|
-
coverage_met: coveragePass,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Parse lint error count from ESLint output.
|
|
99
|
-
* Returns 0 if no error count found (treat as passing).
|
|
100
|
-
*/
|
|
101
|
-
static parseLintErrorCount(lines) {
|
|
102
|
-
for (const line of lines) {
|
|
103
|
-
// "X problems (Y errors, Z warnings)"
|
|
104
|
-
const problemsMatch = line.match(/(\d+)\s+problems?\s+\((\d+)\s+errors?/);
|
|
105
|
-
if (problemsMatch) {
|
|
106
|
-
return parseInt(problemsMatch[2], 10);
|
|
107
|
-
}
|
|
108
|
-
// "X error" standalone
|
|
109
|
-
const errorCountMatch = line.match(/^(\d+)\s+errors?$/);
|
|
110
|
-
if (errorCountMatch) {
|
|
111
|
-
return parseInt(errorCountMatch[1], 10);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return 0;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Parse test failure count from vitest/jest output.
|
|
118
|
-
* Returns 0 if no failure count found (treat as passing).
|
|
119
|
-
*/
|
|
120
|
-
static parseTestFailCount(lines) {
|
|
121
|
-
for (const line of lines) {
|
|
122
|
-
// "X failed" — vitest/jest
|
|
123
|
-
const failMatch = line.match(/(\d+)\s+failed/);
|
|
124
|
-
if (failMatch) {
|
|
125
|
-
return parseInt(failMatch[1], 10);
|
|
126
|
-
}
|
|
127
|
-
// "Tests: X failed" — jest summary
|
|
128
|
-
const jestMatch = line.match(/tests:\s+(\d+)\s+failed/);
|
|
129
|
-
if (jestMatch) {
|
|
130
|
-
return parseInt(jestMatch[1], 10);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return 0;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Parse real coverage percentage from test runner output.
|
|
137
|
-
* Supports vitest table format and jest/c8 line format.
|
|
138
|
-
* Returns null if coverage cannot be determined.
|
|
139
|
-
*/
|
|
140
|
-
static parseCoveragePercentage(output) {
|
|
141
|
-
// vitest/istanbul table: "All files | 87.50 | ..." or "All files | 87.50 |"
|
|
142
|
-
const vitestMatch = output.match(/all files\s*\|\s*(\d+(?:\.\d+)?)\s*\|/i);
|
|
143
|
-
if (vitestMatch) {
|
|
144
|
-
return parseFloat(vitestMatch[1]);
|
|
145
|
-
}
|
|
146
|
-
// jest: "Lines : 87.5%" or "Lines : 87.5 %"
|
|
147
|
-
const jestLinesMatch = output.match(/lines\s*:\s*(\d+(?:\.\d+)?)\s*%/i);
|
|
148
|
-
if (jestLinesMatch) {
|
|
149
|
-
return parseFloat(jestLinesMatch[1]);
|
|
150
|
-
}
|
|
151
|
-
// c8/nyc: "% Lines | 87.5"
|
|
152
|
-
const c8Match = output.match(/%\s*lines\s*\|\s*(\d+(?:\.\d+)?)/i);
|
|
153
|
-
if (c8Match) {
|
|
154
|
-
return parseFloat(c8Match[1]);
|
|
155
|
-
}
|
|
156
|
-
// Generic: "coverage: 87%" or "coverage 87.5%"
|
|
157
|
-
const genericMatch = output.match(/coverage[:\s]+(\d+(?:\.\d+)?)%/i);
|
|
158
|
-
if (genericMatch) {
|
|
159
|
-
return parseFloat(genericMatch[1]);
|
|
160
|
-
}
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Helper: Check if a single line contains percentage >= threshold
|
|
165
|
-
*/
|
|
166
|
-
static lineHasPercentageAbove(line, threshold) {
|
|
167
|
-
// eslint-disable-next-line no-useless-escape
|
|
168
|
-
const percentMatches = line.match(/(\d+(?:\.\d+)?)%/g);
|
|
169
|
-
if (!percentMatches) {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
return percentMatches.some((match) => {
|
|
173
|
-
const percent = parseFloat(match);
|
|
174
|
-
return percent >= threshold;
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Determine overall iteration status
|
|
179
|
-
*/
|
|
180
|
-
static determineStatus(qualityChecks) {
|
|
181
|
-
const allPass = qualityChecks.type_check &&
|
|
182
|
-
qualityChecks.lint &&
|
|
183
|
-
qualityChecks.tests &&
|
|
184
|
-
qualityChecks.coverage_met;
|
|
185
|
-
if (allPass) {
|
|
186
|
-
return 'success';
|
|
187
|
-
}
|
|
188
|
-
const passCount = Object.values(qualityChecks).filter(Boolean).length;
|
|
189
|
-
if (passCount >= 2) {
|
|
190
|
-
return 'partial';
|
|
191
|
-
}
|
|
192
|
-
return 'failed';
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Extract learnings and insights from output
|
|
196
|
-
*/
|
|
197
|
-
static extractLearnings(output) {
|
|
198
|
-
const learnings = [];
|
|
199
|
-
// Look for key learnings markers
|
|
200
|
-
const learningsMatch = output.match(/(?:learning|insight|pattern|note)[\s:]*([^\n]+)/gi);
|
|
201
|
-
if (learningsMatch) {
|
|
202
|
-
learningsMatch.forEach((match) => {
|
|
203
|
-
const cleaned = match.replace(/^(?:learning|insight|pattern|note)[\s:]*/i, '').trim();
|
|
204
|
-
if (cleaned.length > 10 && cleaned.length < 500) {
|
|
205
|
-
learnings.push(cleaned);
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
// Extract from code comments about discoveries
|
|
210
|
-
const discoveryMatch = output.match(/(?:discovered|found|realized)[\s:]*([^\n]+)/gi);
|
|
211
|
-
if (discoveryMatch) {
|
|
212
|
-
discoveryMatch.forEach((match) => {
|
|
213
|
-
const cleaned = match.replace(/^(?:discovered|found|realized)[\s:]*/i, '').trim();
|
|
214
|
-
if (cleaned.length > 10 && cleaned.length < 500) {
|
|
215
|
-
learnings.push(cleaned);
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
return learnings.slice(0, 5); // Limit to 5 learnings
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Extract errors from output
|
|
223
|
-
*/
|
|
224
|
-
static extractErrors(output) {
|
|
225
|
-
const errors = [];
|
|
226
|
-
// Look for error patterns
|
|
227
|
-
const errorMatch = output.match(/(?:error|failed|fail)[\s:]*([^\n]+)/gi);
|
|
228
|
-
if (errorMatch) {
|
|
229
|
-
errorMatch.forEach((match) => {
|
|
230
|
-
const cleaned = match.replace(/^(?:error|failed|fail)[\s:]*/i, '').trim();
|
|
231
|
-
if (cleaned.length > 5 && cleaned.length < 300) {
|
|
232
|
-
errors.push(cleaned);
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
// Look for stack traces or error codes
|
|
237
|
-
const stackMatch = output.match(/(?:Error|Exception)[\s:]*([^\n]+)/g);
|
|
238
|
-
if (stackMatch) {
|
|
239
|
-
stackMatch.forEach((match) => {
|
|
240
|
-
const cleaned = match.trim();
|
|
241
|
-
if (cleaned.length > 5 && !errors.includes(cleaned)) {
|
|
242
|
-
errors.push(cleaned);
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
return errors.slice(0, 3); // Limit to 3 errors
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Extract git commit hash from output
|
|
250
|
-
*/
|
|
251
|
-
static extractGitCommit(output) {
|
|
252
|
-
// Look for commit hashes (40 hex chars or short 7-char format)
|
|
253
|
-
const commitMatch = output.match(/\b[a-f0-9]{7,40}\b/);
|
|
254
|
-
if (commitMatch) {
|
|
255
|
-
const hash = commitMatch[0];
|
|
256
|
-
// Verify it looks like a commit hash (after 'commit' keyword)
|
|
257
|
-
if (output.toLowerCase().includes('commit') && output.includes(hash)) {
|
|
258
|
-
return hash;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return undefined;
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Generate summary from agent output
|
|
265
|
-
*/
|
|
266
|
-
static generateSummary(output, status) {
|
|
267
|
-
// Get first 300 chars of meaningful content
|
|
268
|
-
const lines = output
|
|
269
|
-
.split('\n')
|
|
270
|
-
.filter((l) => l.trim().length > 20)
|
|
271
|
-
.slice(0, 3);
|
|
272
|
-
let summary = lines.join(' ').substring(0, 300);
|
|
273
|
-
// Add status if not already present
|
|
274
|
-
if (!summary.toLowerCase().includes(status)) {
|
|
275
|
-
summary = `[${status.toUpperCase()}] ${summary}`;
|
|
276
|
-
}
|
|
277
|
-
return summary;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Count context loss events in output
|
|
281
|
-
*/
|
|
282
|
-
static countContextLoss(output) {
|
|
283
|
-
const contextLossPatterns = [
|
|
284
|
-
/context.*loss/gi,
|
|
285
|
-
/context.*window/gi,
|
|
286
|
-
/ran out of.*context/gi,
|
|
287
|
-
/context.*exceeded/gi,
|
|
288
|
-
];
|
|
289
|
-
let count = 0;
|
|
290
|
-
for (const pattern of contextLossPatterns) {
|
|
291
|
-
const matches = output.match(pattern) || [];
|
|
292
|
-
count += matches.length;
|
|
293
|
-
}
|
|
294
|
-
return Math.min(count, 10); // Cap at 10
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Check if iteration completion is detected
|
|
298
|
-
*/
|
|
299
|
-
static isCompletionDetected(output) {
|
|
300
|
-
const completionKeywords = [
|
|
301
|
-
'complete',
|
|
302
|
-
'done',
|
|
303
|
-
'finished',
|
|
304
|
-
'success',
|
|
305
|
-
'implemented',
|
|
306
|
-
'deployed',
|
|
307
|
-
'committed',
|
|
308
|
-
];
|
|
309
|
-
const lowerOutput = output.toLowerCase();
|
|
310
|
-
return completionKeywords.some((kw) => lowerOutput.includes(kw));
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Parse `npm audit --json` output.
|
|
314
|
-
* Returns the highest severity found: 'critical' | 'high' | 'moderate' | 'low' | 'none'
|
|
315
|
-
*/
|
|
316
|
-
static parseNpmAuditSeverity(jsonOutput) {
|
|
317
|
-
try {
|
|
318
|
-
const parsed = JSON.parse(jsonOutput);
|
|
319
|
-
const v = parsed?.metadata?.vulnerabilities;
|
|
320
|
-
if (!v)
|
|
321
|
-
return 'none';
|
|
322
|
-
if ((v.critical ?? 0) > 0)
|
|
323
|
-
return 'critical';
|
|
324
|
-
if ((v.high ?? 0) > 0)
|
|
325
|
-
return 'high';
|
|
326
|
-
if ((v.moderate ?? 0) > 0)
|
|
327
|
-
return 'moderate';
|
|
328
|
-
if ((v.low ?? 0) > 0)
|
|
329
|
-
return 'low';
|
|
330
|
-
return 'none';
|
|
331
|
-
}
|
|
332
|
-
catch {
|
|
333
|
-
// Not valid JSON — try text-based fallback
|
|
334
|
-
return this.parseSecurityOutputText(jsonOutput);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Parse text-based security tool output (trivy, semgrep, or npm audit without --json).
|
|
339
|
-
* Returns the highest severity found: 'critical' | 'high' | 'moderate' | 'low' | 'none'
|
|
340
|
-
*/
|
|
341
|
-
static parseSecurityOutputText(output) {
|
|
342
|
-
const lower = output.toLowerCase();
|
|
343
|
-
if (lower.includes('critical'))
|
|
344
|
-
return 'critical';
|
|
345
|
-
if (lower.includes(' high'))
|
|
346
|
-
return 'high';
|
|
347
|
-
if (lower.includes('moderate'))
|
|
348
|
-
return 'moderate';
|
|
349
|
-
if (lower.includes(' low'))
|
|
350
|
-
return 'low';
|
|
351
|
-
return 'none';
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Parse trivy JSON output (`trivy fs --format json`) for the highest severity found.
|
|
355
|
-
*/
|
|
356
|
-
static parseTrivySeverity(jsonOutput) {
|
|
357
|
-
try {
|
|
358
|
-
const parsed = JSON.parse(jsonOutput);
|
|
359
|
-
const severities = (parsed.Results ?? [])
|
|
360
|
-
.flatMap((r) => r.Vulnerabilities ?? [])
|
|
361
|
-
.map((v) => (v.Severity ?? '').toLowerCase());
|
|
362
|
-
if (severities.includes('critical'))
|
|
363
|
-
return 'critical';
|
|
364
|
-
if (severities.includes('high'))
|
|
365
|
-
return 'high';
|
|
366
|
-
if (severities.includes('medium'))
|
|
367
|
-
return 'moderate'; // trivy uses MEDIUM
|
|
368
|
-
if (severities.includes('moderate'))
|
|
369
|
-
return 'moderate';
|
|
370
|
-
if (severities.includes('low'))
|
|
371
|
-
return 'low';
|
|
372
|
-
return 'none';
|
|
373
|
-
}
|
|
374
|
-
catch {
|
|
375
|
-
return this.parseSecurityOutputText(jsonOutput);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Parse semgrep JSON output (`semgrep --json`) for the highest severity found.
|
|
380
|
-
*/
|
|
381
|
-
static parseSemgrepSeverity(jsonOutput) {
|
|
382
|
-
try {
|
|
383
|
-
const parsed = JSON.parse(jsonOutput);
|
|
384
|
-
const severities = (parsed.results ?? []).map((r) => {
|
|
385
|
-
const sev = (r.extra?.severity ?? r.extra?.metadata?.severity ?? '').toLowerCase();
|
|
386
|
-
return sev;
|
|
387
|
-
});
|
|
388
|
-
if (severities.includes('critical') || severities.includes('error'))
|
|
389
|
-
return 'high'; // semgrep ERROR ≈ high
|
|
390
|
-
if (severities.includes('high'))
|
|
391
|
-
return 'high';
|
|
392
|
-
if (severities.includes('warning') ||
|
|
393
|
-
severities.includes('medium') ||
|
|
394
|
-
severities.includes('moderate'))
|
|
395
|
-
return 'moderate';
|
|
396
|
-
if (severities.includes('info') || severities.includes('low'))
|
|
397
|
-
return 'low';
|
|
398
|
-
return severities.length > 0 ? 'low' : 'none';
|
|
399
|
-
}
|
|
400
|
-
catch {
|
|
401
|
-
return this.parseSecurityOutputText(jsonOutput);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Determine if a security gate passes given the found severity and the configured failOn threshold.
|
|
406
|
-
* Severity order: none < low < moderate < high < critical
|
|
407
|
-
*/
|
|
408
|
-
static securityGatePasses(foundSeverity, failOn) {
|
|
409
|
-
const order = ['none', 'low', 'moderate', 'high', 'critical'];
|
|
410
|
-
const foundIdx = order.indexOf(foundSeverity);
|
|
411
|
-
const failIdx = order.indexOf(failOn);
|
|
412
|
-
return foundIdx < failIdx;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
//# sourceMappingURL=ralph-parser.js.map
|