@hivehub/rulebook 3.0.0 → 3.2.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/.claude/commands/ralph-config.md +112 -0
- package/.claude/commands/ralph-history.md +110 -0
- package/.claude/commands/ralph-init.md +72 -0
- package/.claude/commands/ralph-pause-resume.md +105 -0
- package/.claude/commands/ralph-run.md +101 -0
- package/.claude/commands/ralph-status.md +76 -0
- package/.claude/commands/rulebook-memory-save.md +48 -0
- package/.claude/commands/rulebook-memory-search.md +47 -0
- package/.claude/commands/rulebook-task-apply.md +67 -0
- package/.claude/commands/rulebook-task-archive.md +70 -0
- package/.claude/commands/rulebook-task-create.md +93 -0
- package/.claude/commands/rulebook-task-list.md +42 -0
- package/.claude/commands/rulebook-task-show.md +52 -0
- package/.claude/commands/rulebook-task-validate.md +53 -0
- package/.claude-plugin/marketplace.json +29 -0
- package/.claude-plugin/plugin.json +8 -0
- package/LICENSE +0 -0
- package/README.md +67 -5
- package/dist/agents/claude-code.d.ts +0 -0
- package/dist/agents/claude-code.d.ts.map +0 -0
- package/dist/agents/claude-code.js +0 -0
- package/dist/agents/claude-code.js.map +0 -0
- package/dist/agents/cursor-agent.d.ts +0 -0
- package/dist/agents/cursor-agent.d.ts.map +0 -0
- package/dist/agents/cursor-agent.js +0 -0
- package/dist/agents/cursor-agent.js.map +0 -0
- package/dist/agents/gemini-cli.d.ts +0 -0
- package/dist/agents/gemini-cli.d.ts.map +0 -0
- package/dist/agents/gemini-cli.js +0 -0
- package/dist/agents/gemini-cli.js.map +0 -0
- package/dist/agents/ralph-parser.d.ts +52 -0
- package/dist/agents/ralph-parser.d.ts.map +1 -0
- package/dist/agents/ralph-parser.js +223 -0
- package/dist/agents/ralph-parser.js.map +1 -0
- package/dist/cli/commands.d.ts +13 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +385 -21
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/docs-prompts.d.ts +0 -0
- package/dist/cli/docs-prompts.d.ts.map +0 -0
- package/dist/cli/docs-prompts.js +0 -0
- package/dist/cli/docs-prompts.js.map +0 -0
- package/dist/cli/prompts.d.ts +0 -0
- package/dist/cli/prompts.d.ts.map +0 -0
- package/dist/cli/prompts.js +0 -0
- package/dist/cli/prompts.js.map +0 -0
- package/dist/core/agent-manager.d.ts +0 -0
- package/dist/core/agent-manager.d.ts.map +0 -0
- package/dist/core/agent-manager.js +0 -0
- package/dist/core/agent-manager.js.map +0 -0
- package/dist/core/auto-fixer.d.ts +0 -0
- package/dist/core/auto-fixer.d.ts.map +0 -0
- package/dist/core/auto-fixer.js +0 -0
- package/dist/core/auto-fixer.js.map +0 -0
- package/dist/core/changelog-generator.d.ts +0 -0
- package/dist/core/changelog-generator.d.ts.map +0 -0
- package/dist/core/changelog-generator.js +0 -0
- package/dist/core/changelog-generator.js.map +0 -0
- package/dist/core/claude-mcp.d.ts +0 -0
- package/dist/core/claude-mcp.d.ts.map +0 -0
- package/dist/core/claude-mcp.js +0 -0
- package/dist/core/claude-mcp.js.map +0 -0
- package/dist/core/cli-bridge.d.ts +0 -0
- package/dist/core/cli-bridge.d.ts.map +0 -0
- package/dist/core/cli-bridge.js +0 -0
- package/dist/core/cli-bridge.js.map +0 -0
- package/dist/core/config-manager.d.ts +13 -2
- package/dist/core/config-manager.d.ts.map +1 -1
- package/dist/core/config-manager.js +185 -7
- package/dist/core/config-manager.js.map +1 -1
- package/dist/core/coverage-checker.d.ts +0 -0
- package/dist/core/coverage-checker.d.ts.map +0 -0
- package/dist/core/coverage-checker.js +0 -0
- package/dist/core/coverage-checker.js.map +0 -0
- package/dist/core/custom-templates.d.ts +0 -0
- package/dist/core/custom-templates.d.ts.map +0 -0
- package/dist/core/custom-templates.js +0 -0
- package/dist/core/custom-templates.js.map +0 -0
- package/dist/core/dependency-checker.d.ts +0 -0
- package/dist/core/dependency-checker.d.ts.map +0 -0
- package/dist/core/dependency-checker.js +0 -0
- package/dist/core/dependency-checker.js.map +0 -0
- package/dist/core/detector.d.ts +0 -0
- package/dist/core/detector.d.ts.map +0 -0
- package/dist/core/detector.js +0 -0
- package/dist/core/detector.js.map +0 -0
- package/dist/core/docs-generator.d.ts +0 -0
- package/dist/core/docs-generator.d.ts.map +0 -0
- package/dist/core/docs-generator.js +0 -0
- package/dist/core/docs-generator.js.map +0 -0
- package/dist/core/generator.d.ts +0 -0
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +128 -45
- package/dist/core/generator.js.map +1 -1
- package/dist/core/gitignore-generator.d.ts +0 -0
- package/dist/core/gitignore-generator.d.ts.map +0 -0
- package/dist/core/gitignore-generator.js +0 -0
- package/dist/core/gitignore-generator.js.map +0 -0
- package/dist/core/health-scorer.d.ts +0 -0
- package/dist/core/health-scorer.d.ts.map +0 -0
- package/dist/core/health-scorer.js +0 -0
- package/dist/core/health-scorer.js.map +0 -0
- package/dist/core/iteration-tracker.d.ts +57 -0
- package/dist/core/iteration-tracker.d.ts.map +1 -0
- package/dist/core/iteration-tracker.js +209 -0
- package/dist/core/iteration-tracker.js.map +1 -0
- package/dist/core/logger.d.ts +0 -0
- package/dist/core/logger.d.ts.map +0 -0
- package/dist/core/logger.js +0 -0
- package/dist/core/logger.js.map +0 -0
- package/dist/core/merger.d.ts +0 -0
- package/dist/core/merger.d.ts.map +0 -0
- package/dist/core/merger.js +0 -0
- package/dist/core/merger.js.map +0 -0
- package/dist/core/migrator.d.ts +0 -0
- package/dist/core/migrator.d.ts.map +0 -0
- package/dist/core/migrator.js +0 -0
- package/dist/core/migrator.js.map +0 -0
- package/dist/core/minimal-scaffolder.d.ts +0 -0
- package/dist/core/minimal-scaffolder.d.ts.map +0 -0
- package/dist/core/minimal-scaffolder.js +0 -0
- package/dist/core/minimal-scaffolder.js.map +0 -0
- package/dist/core/modern-console.d.ts +0 -0
- package/dist/core/modern-console.d.ts.map +0 -0
- package/dist/core/modern-console.js +0 -0
- package/dist/core/modern-console.js.map +0 -0
- package/dist/core/openspec-manager.d.ts +0 -0
- package/dist/core/openspec-manager.d.ts.map +0 -0
- package/dist/core/openspec-manager.js +0 -0
- package/dist/core/openspec-manager.js.map +0 -0
- package/dist/core/openspec-migrator.d.ts +0 -0
- package/dist/core/openspec-migrator.d.ts.map +0 -0
- package/dist/core/openspec-migrator.js +0 -0
- package/dist/core/openspec-migrator.js.map +0 -0
- package/dist/core/prd-generator.d.ts +36 -0
- package/dist/core/prd-generator.d.ts.map +1 -0
- package/dist/core/prd-generator.js +137 -0
- package/dist/core/prd-generator.js.map +1 -0
- package/dist/core/ralph-manager.d.ts +75 -0
- package/dist/core/ralph-manager.d.ts.map +1 -0
- package/dist/core/ralph-manager.js +274 -0
- package/dist/core/ralph-manager.js.map +1 -0
- package/dist/core/skills-manager.d.ts +0 -0
- package/dist/core/skills-manager.d.ts.map +0 -0
- package/dist/core/skills-manager.js +0 -0
- package/dist/core/skills-manager.js.map +0 -0
- package/dist/core/task-manager.d.ts +0 -0
- package/dist/core/task-manager.d.ts.map +0 -0
- package/dist/core/task-manager.js +0 -0
- package/dist/core/task-manager.js.map +0 -0
- package/dist/core/test-task-manager.d.ts +0 -0
- package/dist/core/test-task-manager.d.ts.map +0 -0
- package/dist/core/test-task-manager.js +0 -0
- package/dist/core/test-task-manager.js.map +0 -0
- package/dist/core/validator.d.ts +0 -0
- package/dist/core/validator.d.ts.map +0 -0
- package/dist/core/validator.js +0 -0
- package/dist/core/validator.js.map +0 -0
- package/dist/core/version-bumper.d.ts +0 -0
- package/dist/core/version-bumper.d.ts.map +0 -0
- package/dist/core/version-bumper.js +0 -0
- package/dist/core/version-bumper.js.map +0 -0
- package/dist/core/watcher.d.ts +0 -0
- package/dist/core/watcher.d.ts.map +0 -0
- package/dist/core/watcher.js +0 -0
- package/dist/core/watcher.js.map +0 -0
- package/dist/core/workflow-generator.d.ts +0 -0
- package/dist/core/workflow-generator.d.ts.map +0 -0
- package/dist/core/workflow-generator.js +297 -297
- package/dist/core/workflow-generator.js.map +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +46 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts +0 -0
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +263 -18
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/hnsw-index.d.ts +0 -0
- package/dist/memory/hnsw-index.d.ts.map +1 -1
- package/dist/memory/hnsw-index.js +0 -0
- package/dist/memory/hnsw-index.js.map +1 -1
- package/dist/memory/memory-cache.d.ts +0 -0
- package/dist/memory/memory-cache.d.ts.map +1 -1
- package/dist/memory/memory-cache.js +0 -0
- package/dist/memory/memory-cache.js.map +1 -1
- package/dist/memory/memory-hooks.d.ts +6 -0
- package/dist/memory/memory-hooks.d.ts.map +1 -1
- package/dist/memory/memory-hooks.js +70 -15
- package/dist/memory/memory-hooks.js.map +1 -1
- package/dist/memory/memory-manager.d.ts +1 -0
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +9 -7
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-search.d.ts +0 -0
- package/dist/memory/memory-search.d.ts.map +1 -1
- package/dist/memory/memory-search.js +3 -8
- package/dist/memory/memory-search.js.map +1 -1
- package/dist/memory/memory-store.d.ts +0 -0
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +68 -71
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/memory/memory-types.d.ts +1 -0
- package/dist/memory/memory-types.d.ts.map +1 -1
- package/dist/memory/memory-types.js +0 -0
- package/dist/memory/memory-types.js.map +0 -0
- package/dist/memory/memory-vectorizer.d.ts +0 -0
- package/dist/memory/memory-vectorizer.d.ts.map +1 -1
- package/dist/memory/memory-vectorizer.js +108 -13
- package/dist/memory/memory-vectorizer.js.map +1 -1
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -0
- package/dist/types.js.map +0 -0
- package/dist/utils/file-system.d.ts +0 -0
- package/dist/utils/file-system.d.ts.map +0 -0
- package/dist/utils/file-system.js +0 -0
- package/dist/utils/file-system.js.map +0 -0
- package/dist/utils/git-hooks.d.ts +0 -0
- package/dist/utils/git-hooks.d.ts.map +0 -0
- package/dist/utils/git-hooks.js +0 -0
- package/dist/utils/git-hooks.js.map +0 -0
- package/dist/utils/rulesignore.d.ts +0 -0
- package/dist/utils/rulesignore.d.ts.map +0 -0
- package/dist/utils/rulesignore.js +0 -0
- package/dist/utils/rulesignore.js.map +0 -0
- package/package.json +108 -107
- package/templates/cli/AIDER.md +0 -0
- package/templates/cli/AMAZON_Q.md +0 -0
- package/templates/cli/AUGGIE.md +0 -0
- package/templates/cli/CLAUDE.md +85 -0
- package/templates/cli/CLAUDE_CODE.md +0 -0
- package/templates/cli/CLINE.md +69 -2
- package/templates/cli/CODEBUDDY.md +0 -0
- package/templates/cli/CODEIUM.md +0 -0
- package/templates/cli/CODEX.md +0 -0
- package/templates/cli/CONTINUE.md +0 -0
- package/templates/cli/CURSOR_CLI.md +37 -3
- package/templates/cli/FACTORY.md +0 -0
- package/templates/cli/GEMINI.md +0 -0
- package/templates/cli/KILOCODE.md +0 -0
- package/templates/cli/OPENCODE.md +0 -0
- package/templates/cli/_GENERIC_TEMPLATE.md +0 -0
- package/templates/cli/gemini-extension.json +0 -0
- package/templates/commands/rulebook-memory-save.md +0 -0
- package/templates/commands/rulebook-memory-search.md +0 -0
- package/templates/commands/rulebook-task-apply.md +0 -0
- package/templates/commands/rulebook-task-archive.md +0 -0
- package/templates/commands/rulebook-task-create.md +0 -0
- package/templates/commands/rulebook-task-list.md +0 -0
- package/templates/commands/rulebook-task-show.md +0 -0
- package/templates/commands/rulebook-task-validate.md +0 -0
- package/templates/core/AGENT_AUTOMATION.md +142 -38
- package/templates/core/DAG.md +0 -0
- package/templates/core/DOCUMENTATION_RULES.md +0 -0
- package/templates/core/QUALITY_ENFORCEMENT.md +0 -0
- package/templates/core/RALPH.md +430 -0
- package/templates/core/RULEBOOK.md +20 -1
- package/templates/frameworks/ANGULAR.md +0 -0
- package/templates/frameworks/DJANGO.md +0 -0
- package/templates/frameworks/ELECTRON.md +0 -0
- package/templates/frameworks/FLASK.md +0 -0
- package/templates/frameworks/FLUTTER.md +0 -0
- package/templates/frameworks/JQUERY.md +0 -0
- package/templates/frameworks/LARAVEL.md +0 -0
- package/templates/frameworks/NESTJS.md +0 -0
- package/templates/frameworks/NEXTJS.md +0 -0
- package/templates/frameworks/NUXT.md +0 -0
- package/templates/frameworks/RAILS.md +0 -0
- package/templates/frameworks/REACT.md +0 -0
- package/templates/frameworks/REACT_NATIVE.md +0 -0
- package/templates/frameworks/SPRING.md +0 -0
- package/templates/frameworks/SYMFONY.md +0 -0
- package/templates/frameworks/VUE.md +0 -0
- package/templates/frameworks/ZEND.md +0 -0
- package/templates/git/CI_CD_PATTERNS.md +0 -0
- package/templates/git/GITHUB_ACTIONS.md +0 -0
- package/templates/git/GITLAB_CI.md +0 -0
- package/templates/git/GIT_WORKFLOW.md +0 -0
- package/templates/git/SECRETS_MANAGEMENT.md +0 -0
- package/templates/hooks/COMMIT_MSG.md +0 -0
- package/templates/hooks/POST_CHECKOUT.md +0 -0
- package/templates/hooks/PREPARE_COMMIT_MSG.md +0 -0
- package/templates/hooks/PRE_COMMIT.md +0 -0
- package/templates/hooks/PRE_PUSH.md +0 -0
- package/templates/hooks/csharp-pre-commit.sh +0 -0
- package/templates/hooks/csharp-pre-push.sh +0 -0
- package/templates/hooks/dart-pre-commit.sh +0 -0
- package/templates/hooks/dart-pre-push.sh +0 -0
- package/templates/hooks/elixir-pre-commit.sh +0 -0
- package/templates/hooks/elixir-pre-push.sh +0 -0
- package/templates/hooks/erlang-pre-commit.sh +0 -0
- package/templates/hooks/erlang-pre-push.sh +0 -0
- package/templates/hooks/go-pre-commit.sh +0 -0
- package/templates/hooks/go-pre-push.sh +0 -0
- package/templates/hooks/haskell-pre-commit.sh +0 -0
- package/templates/hooks/haskell-pre-push.sh +0 -0
- package/templates/hooks/java-pre-commit.sh +0 -0
- package/templates/hooks/java-pre-push.sh +0 -0
- package/templates/hooks/kotlin-pre-commit.sh +0 -0
- package/templates/hooks/kotlin-pre-push.sh +0 -0
- package/templates/hooks/php-pre-commit.sh +0 -0
- package/templates/hooks/php-pre-push.sh +0 -0
- package/templates/hooks/python-pre-commit.sh +0 -0
- package/templates/hooks/python-pre-push.sh +0 -0
- package/templates/hooks/ruby-pre-commit.sh +0 -0
- package/templates/hooks/ruby-pre-push.sh +0 -0
- package/templates/hooks/rust-pre-commit.sh +0 -0
- package/templates/hooks/rust-pre-push.sh +0 -0
- package/templates/hooks/scala-pre-commit.sh +0 -0
- package/templates/hooks/scala-pre-push.sh +0 -0
- package/templates/hooks/swift-pre-commit.sh +0 -0
- package/templates/hooks/swift-pre-push.sh +0 -0
- package/templates/hooks/typescript-pre-commit.sh +0 -0
- package/templates/hooks/typescript-pre-push.sh +0 -0
- package/templates/ides/COPILOT.md +0 -0
- package/templates/ides/CURSOR.md +0 -0
- package/templates/ides/JETBRAINS_AI.md +0 -0
- package/templates/ides/REPLIT.md +0 -0
- package/templates/ides/TABNINE.md +0 -0
- package/templates/ides/VSCODE.md +0 -0
- package/templates/ides/WINDSURF.md +0 -0
- package/templates/ides/ZED.md +0 -0
- package/templates/languages/ADA.md +0 -0
- package/templates/languages/C.md +0 -0
- package/templates/languages/CPP.md +0 -0
- package/templates/languages/CSHARP.md +0 -0
- package/templates/languages/DART.md +0 -0
- package/templates/languages/ELIXIR.md +0 -0
- package/templates/languages/ERLANG.md +0 -0
- package/templates/languages/GO.md +0 -0
- package/templates/languages/HASKELL.md +0 -0
- package/templates/languages/JAVA.md +0 -0
- package/templates/languages/JAVASCRIPT.md +0 -0
- package/templates/languages/JULIA.md +0 -0
- package/templates/languages/KOTLIN.md +0 -0
- package/templates/languages/LISP.md +0 -0
- package/templates/languages/LUA.md +0 -0
- package/templates/languages/OBJECTIVEC.md +0 -0
- package/templates/languages/PHP.md +0 -0
- package/templates/languages/PYTHON.md +0 -0
- package/templates/languages/R.md +0 -0
- package/templates/languages/RUBY.md +0 -0
- package/templates/languages/RUST.md +0 -0
- package/templates/languages/SAS.md +0 -0
- package/templates/languages/SCALA.md +0 -0
- package/templates/languages/SOLIDITY.md +0 -0
- package/templates/languages/SQL.md +0 -0
- package/templates/languages/SWIFT.md +0 -0
- package/templates/languages/TYPESCRIPT.md +0 -0
- package/templates/languages/ZIG.md +0 -0
- package/templates/modules/ATLASSIAN.md +0 -0
- package/templates/modules/CONTEXT7.md +0 -0
- package/templates/modules/FIGMA.md +0 -0
- package/templates/modules/GITHUB_MCP.md +0 -0
- package/templates/modules/GRAFANA.md +0 -0
- package/templates/modules/MEMORY.md +74 -11
- package/templates/modules/NOTION.md +0 -0
- package/templates/modules/PLAYWRIGHT.md +0 -0
- package/templates/modules/RULEBOOK_MCP.md +0 -0
- package/templates/modules/SERENA.md +0 -0
- package/templates/modules/SUPABASE.md +0 -0
- package/templates/modules/SYNAP.md +0 -0
- package/templates/modules/VECTORIZER.md +0 -0
- package/templates/services/AZURE_BLOB.md +0 -0
- package/templates/services/CASSANDRA.md +0 -0
- package/templates/services/DYNAMODB.md +0 -0
- package/templates/services/ELASTICSEARCH.md +0 -0
- package/templates/services/GCS.md +0 -0
- package/templates/services/INFLUXDB.md +0 -0
- package/templates/services/KAFKA.md +0 -0
- package/templates/services/MARIADB.md +0 -0
- package/templates/services/MEMCACHED.md +0 -0
- package/templates/services/MINIO.md +0 -0
- package/templates/services/MONGODB.md +0 -0
- package/templates/services/MYSQL.md +0 -0
- package/templates/services/NEO4J.md +0 -0
- package/templates/services/ORACLE.md +0 -0
- package/templates/services/POSTGRESQL.md +0 -0
- package/templates/services/RABBITMQ.md +0 -0
- package/templates/services/REDIS.md +0 -0
- package/templates/services/S3.md +0 -0
- package/templates/services/SQLITE.md +0 -0
- package/templates/services/SQLSERVER.md +0 -0
- package/templates/skills/cli/aider/SKILL.md +0 -0
- package/templates/skills/cli/amazon-q/SKILL.md +0 -0
- package/templates/skills/cli/auggie/SKILL.md +0 -0
- package/templates/skills/cli/claude/SKILL.md +0 -0
- package/templates/skills/cli/claude-code/SKILL.md +0 -0
- package/templates/skills/cli/cline/SKILL.md +0 -0
- package/templates/skills/cli/codebuddy/SKILL.md +0 -0
- package/templates/skills/cli/codeium/SKILL.md +0 -0
- package/templates/skills/cli/codex/SKILL.md +0 -0
- package/templates/skills/cli/continue/SKILL.md +0 -0
- package/templates/skills/cli/cursor-cli/SKILL.md +0 -0
- package/templates/skills/cli/factory/SKILL.md +0 -0
- package/templates/skills/cli/gemini/SKILL.md +0 -0
- package/templates/skills/cli/kilocode/SKILL.md +0 -0
- package/templates/skills/cli/opencode/SKILL.md +0 -0
- package/templates/skills/core/agent-automation/SKILL.md +0 -0
- package/templates/skills/core/dag/SKILL.md +0 -0
- package/templates/skills/core/documentation-rules/SKILL.md +0 -0
- package/templates/skills/core/quality-enforcement/SKILL.md +0 -0
- package/templates/skills/core/rulebook/SKILL.md +0 -0
- package/templates/skills/frameworks/angular/SKILL.md +0 -0
- package/templates/skills/frameworks/django/SKILL.md +0 -0
- package/templates/skills/frameworks/electron/SKILL.md +0 -0
- package/templates/skills/frameworks/flask/SKILL.md +0 -0
- package/templates/skills/frameworks/flutter/SKILL.md +0 -0
- package/templates/skills/frameworks/jquery/SKILL.md +0 -0
- package/templates/skills/frameworks/laravel/SKILL.md +0 -0
- package/templates/skills/frameworks/nestjs/SKILL.md +0 -0
- package/templates/skills/frameworks/nextjs/SKILL.md +0 -0
- package/templates/skills/frameworks/nuxt/SKILL.md +0 -0
- package/templates/skills/frameworks/rails/SKILL.md +0 -0
- package/templates/skills/frameworks/react/SKILL.md +0 -0
- package/templates/skills/frameworks/react-native/SKILL.md +0 -0
- package/templates/skills/frameworks/spring/SKILL.md +0 -0
- package/templates/skills/frameworks/symfony/SKILL.md +0 -0
- package/templates/skills/frameworks/vue/SKILL.md +0 -0
- package/templates/skills/frameworks/zend/SKILL.md +0 -0
- package/templates/skills/ides/copilot/SKILL.md +0 -0
- package/templates/skills/ides/cursor/SKILL.md +0 -0
- package/templates/skills/ides/jetbrains-ai/SKILL.md +0 -0
- package/templates/skills/ides/replit/SKILL.md +0 -0
- package/templates/skills/ides/tabnine/SKILL.md +0 -0
- package/templates/skills/ides/vscode/SKILL.md +0 -0
- package/templates/skills/ides/windsurf/SKILL.md +0 -0
- package/templates/skills/ides/zed/SKILL.md +0 -0
- package/templates/skills/languages/ada/SKILL.md +0 -0
- package/templates/skills/languages/c/SKILL.md +0 -0
- package/templates/skills/languages/cpp/SKILL.md +0 -0
- package/templates/skills/languages/csharp/SKILL.md +0 -0
- package/templates/skills/languages/dart/SKILL.md +0 -0
- package/templates/skills/languages/elixir/SKILL.md +0 -0
- package/templates/skills/languages/erlang/SKILL.md +0 -0
- package/templates/skills/languages/go/SKILL.md +0 -0
- package/templates/skills/languages/haskell/SKILL.md +0 -0
- package/templates/skills/languages/java/SKILL.md +0 -0
- package/templates/skills/languages/javascript/SKILL.md +0 -0
- package/templates/skills/languages/julia/SKILL.md +0 -0
- package/templates/skills/languages/kotlin/SKILL.md +0 -0
- package/templates/skills/languages/lisp/SKILL.md +0 -0
- package/templates/skills/languages/lua/SKILL.md +0 -0
- package/templates/skills/languages/objectivec/SKILL.md +0 -0
- package/templates/skills/languages/php/SKILL.md +0 -0
- package/templates/skills/languages/python/SKILL.md +0 -0
- package/templates/skills/languages/r/SKILL.md +0 -0
- package/templates/skills/languages/ruby/SKILL.md +0 -0
- package/templates/skills/languages/rust/SKILL.md +0 -0
- package/templates/skills/languages/sas/SKILL.md +0 -0
- package/templates/skills/languages/scala/SKILL.md +0 -0
- package/templates/skills/languages/solidity/SKILL.md +0 -0
- package/templates/skills/languages/sql/SKILL.md +0 -0
- package/templates/skills/languages/swift/SKILL.md +0 -0
- package/templates/skills/languages/typescript/SKILL.md +0 -0
- package/templates/skills/languages/zig/SKILL.md +0 -0
- package/templates/skills/modules/atlassian/SKILL.md +0 -0
- package/templates/skills/modules/context7/SKILL.md +0 -0
- package/templates/skills/modules/figma/SKILL.md +0 -0
- package/templates/skills/modules/github-mcp/SKILL.md +0 -0
- package/templates/skills/modules/grafana/SKILL.md +0 -0
- package/templates/skills/modules/memory/SKILL.md +0 -0
- package/templates/skills/modules/notion/SKILL.md +0 -0
- package/templates/skills/modules/playwright/SKILL.md +0 -0
- package/templates/skills/modules/rulebook-mcp/SKILL.md +0 -0
- package/templates/skills/modules/serena/SKILL.md +0 -0
- package/templates/skills/modules/supabase/SKILL.md +0 -0
- package/templates/skills/modules/synap/SKILL.md +0 -0
- package/templates/skills/modules/vectorizer/SKILL.md +0 -0
- package/templates/skills/services/azure-blob/SKILL.md +0 -0
- package/templates/skills/services/cassandra/SKILL.md +0 -0
- package/templates/skills/services/dynamodb/SKILL.md +0 -0
- package/templates/skills/services/elasticsearch/SKILL.md +0 -0
- package/templates/skills/services/gcs/SKILL.md +0 -0
- package/templates/skills/services/influxdb/SKILL.md +0 -0
- package/templates/skills/services/kafka/SKILL.md +0 -0
- package/templates/skills/services/mariadb/SKILL.md +0 -0
- package/templates/skills/services/memcached/SKILL.md +0 -0
- package/templates/skills/services/minio/SKILL.md +0 -0
- package/templates/skills/services/mongodb/SKILL.md +0 -0
- package/templates/skills/services/mysql/SKILL.md +0 -0
- package/templates/skills/services/neo4j/SKILL.md +0 -0
- package/templates/skills/services/oracle/SKILL.md +0 -0
- package/templates/skills/services/postgresql/SKILL.md +0 -0
- package/templates/skills/services/rabbitmq/SKILL.md +0 -0
- package/templates/skills/services/redis/SKILL.md +0 -0
- package/templates/skills/services/s3/SKILL.md +0 -0
- package/templates/skills/services/sqlite/SKILL.md +0 -0
- package/templates/skills/services/sqlserver/SKILL.md +0 -0
- package/templates/skills/workflows/ralph/SETUP.md +228 -0
- package/templates/skills/workflows/ralph/SKILL.md +309 -0
- package/templates/skills/workflows/ralph/install.sh +87 -0
- package/templates/skills/workflows/ralph/manifest.json +158 -0
- package/templates/workflows/codespell.yml +0 -0
- package/templates/workflows/cpp-lint.yml +0 -0
- package/templates/workflows/cpp-publish.yml +0 -0
- package/templates/workflows/cpp-test.yml +0 -0
- package/templates/workflows/dotnet-lint.yml +0 -0
- package/templates/workflows/dotnet-publish.yml +0 -0
- package/templates/workflows/dotnet-test.yml +0 -0
- package/templates/workflows/elixir-lint.yml +0 -0
- package/templates/workflows/elixir-publish.yml +0 -0
- package/templates/workflows/elixir-test.yml +0 -0
- package/templates/workflows/erlang-lint.yml +0 -0
- package/templates/workflows/erlang-test.yml +0 -0
- package/templates/workflows/go-lint.yml +0 -0
- package/templates/workflows/go-publish.yml +0 -0
- package/templates/workflows/go-test.yml +0 -0
- package/templates/workflows/java-lint.yml +0 -0
- package/templates/workflows/java-publish.yml +0 -0
- package/templates/workflows/java-test.yml +0 -0
- package/templates/workflows/kotlin-lint.yml +0 -0
- package/templates/workflows/kotlin-publish.yml +0 -0
- package/templates/workflows/kotlin-test.yml +0 -0
- package/templates/workflows/php-lint.yml +0 -0
- package/templates/workflows/php-publish.yml +0 -0
- package/templates/workflows/php-test.yml +0 -0
- package/templates/workflows/python-lint.yml +0 -0
- package/templates/workflows/python-publish.yml +0 -0
- package/templates/workflows/python-test.yml +0 -0
- package/templates/workflows/rust-lint.yml +0 -0
- package/templates/workflows/rust-publish.yml +0 -0
- package/templates/workflows/rust-test.yml +0 -0
- package/templates/workflows/solidity-lint.yml +0 -0
- package/templates/workflows/solidity-test.yml +0 -0
- package/templates/workflows/swift-lint.yml +0 -0
- package/templates/workflows/swift-publish.yml +0 -0
- package/templates/workflows/swift-test.yml +0 -0
- package/templates/workflows/typescript-lint.yml +0 -0
- package/templates/workflows/typescript-publish.yml +0 -0
- package/templates/workflows/typescript-test.yml +0 -0
- package/templates/workflows/zig-lint.yml +0 -0
- package/templates/workflows/zig-test.yml +0 -0
- package/dist/core/modern-console-new.d.ts +0 -81
- package/dist/core/modern-console-new.d.ts.map +0 -1
- package/dist/core/modern-console-new.js +0 -340
- package/dist/core/modern-console-new.js.map +0 -1
- package/dist/mcp/handlers/archive-task.d.ts +0 -17
- package/dist/mcp/handlers/archive-task.d.ts.map +0 -1
- package/dist/mcp/handlers/archive-task.js +0 -36
- package/dist/mcp/handlers/archive-task.js.map +0 -1
- package/dist/mcp/handlers/create-task.d.ts +0 -17
- package/dist/mcp/handlers/create-task.d.ts.map +0 -1
- package/dist/mcp/handlers/create-task.js +0 -56
- package/dist/mcp/handlers/create-task.js.map +0 -1
- package/dist/mcp/handlers/list-tasks.d.ts +0 -22
- package/dist/mcp/handlers/list-tasks.d.ts.map +0 -1
- package/dist/mcp/handlers/list-tasks.js +0 -42
- package/dist/mcp/handlers/list-tasks.js.map +0 -1
- package/dist/mcp/handlers/show-task.d.ts +0 -25
- package/dist/mcp/handlers/show-task.d.ts.map +0 -1
- package/dist/mcp/handlers/show-task.js +0 -43
- package/dist/mcp/handlers/show-task.js.map +0 -1
- package/dist/mcp/handlers/update-task.d.ts +0 -17
- package/dist/mcp/handlers/update-task.d.ts.map +0 -1
- package/dist/mcp/handlers/update-task.js +0 -35
- package/dist/mcp/handlers/update-task.js.map +0 -1
- package/dist/mcp/handlers/validate-task.d.ts +0 -15
- package/dist/mcp/handlers/validate-task.d.ts.map +0 -1
- package/dist/mcp/handlers/validate-task.js +0 -27
- package/dist/mcp/handlers/validate-task.js.map +0 -1
- package/dist/mcp/rulebook-config.d.ts +0 -22
- package/dist/mcp/rulebook-config.d.ts.map +0 -1
- package/dist/mcp/rulebook-config.js +0 -65
- package/dist/mcp/rulebook-config.js.map +0 -1
package/dist/cli/commands.js
CHANGED
|
@@ -5,7 +5,7 @@ import { promptProjectConfig, promptSimplifiedConfig, promptMergeStrategy } from
|
|
|
5
5
|
import { generateFullAgents } from '../core/generator.js';
|
|
6
6
|
import { mergeFullAgents } from '../core/merger.js';
|
|
7
7
|
import { generateWorkflows, generateIDEFiles, generateAICLIFiles, } from '../core/workflow-generator.js';
|
|
8
|
-
import { writeFile, createBackup
|
|
8
|
+
import { writeFile, createBackup } from '../utils/file-system.js';
|
|
9
9
|
import { existsSync } from 'fs';
|
|
10
10
|
import { parseRulesIgnore } from '../utils/rulesignore.js';
|
|
11
11
|
import { installGitHooks } from '../utils/git-hooks.js';
|
|
@@ -179,6 +179,10 @@ export async function initCommand(options) {
|
|
|
179
179
|
// Save project configuration to .rulebook
|
|
180
180
|
const { createConfigManager } = await import('../core/config-manager.js');
|
|
181
181
|
const configManager = createConfigManager(cwd);
|
|
182
|
+
// Migrate old directory structure to new consolidated structure
|
|
183
|
+
const dirMigrationSpinner = ora('Migrating directory structure...').start();
|
|
184
|
+
await configManager.migrateDirectoryStructure(cwd);
|
|
185
|
+
dirMigrationSpinner.succeed('Directory structure migrated');
|
|
182
186
|
// Auto-detect and enable skills based on project detection (v2.0)
|
|
183
187
|
let enabledSkills = [];
|
|
184
188
|
try {
|
|
@@ -202,6 +206,8 @@ export async function initCommand(options) {
|
|
|
202
206
|
catch {
|
|
203
207
|
// Skills system not available or error - continue without skills
|
|
204
208
|
}
|
|
209
|
+
// Load existing config to preserve ralph and memory settings
|
|
210
|
+
const existingConfig = await configManager.loadConfig();
|
|
205
211
|
await configManager.updateConfig({
|
|
206
212
|
languages: config.languages,
|
|
207
213
|
frameworks: config.frameworks,
|
|
@@ -210,6 +216,8 @@ export async function initCommand(options) {
|
|
|
210
216
|
modular: config.modular ?? true,
|
|
211
217
|
rulebookDir: config.rulebookDir || 'rulebook',
|
|
212
218
|
skills: enabledSkills.length > 0 ? { enabled: enabledSkills } : undefined,
|
|
219
|
+
ralph: existingConfig.ralph,
|
|
220
|
+
memory: existingConfig.memory,
|
|
213
221
|
});
|
|
214
222
|
// Generate or merge AGENTS.md
|
|
215
223
|
const agentsPath = path.join(cwd, 'AGENTS.md');
|
|
@@ -1155,22 +1163,18 @@ export async function updateCommand(options) {
|
|
|
1155
1163
|
console.log(chalk.gray('\nℹ Git hooks were not installed during update. Re-run "rulebook update" later or install them manually if you change your mind.'));
|
|
1156
1164
|
}
|
|
1157
1165
|
const agentsPath = path.join(cwd, 'AGENTS.md');
|
|
1158
|
-
|
|
1166
|
+
// Load existing config using ConfigManager
|
|
1167
|
+
const { createConfigManager } = await import('../core/config-manager.js');
|
|
1168
|
+
const configManager = createConfigManager(cwd);
|
|
1169
|
+
const existingConfig = await configManager.loadConfig();
|
|
1159
1170
|
let existingMode;
|
|
1160
1171
|
let existingLightMode;
|
|
1161
|
-
if (
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
if (currentConfig && (currentConfig.mode === 'minimal' || currentConfig.mode === 'full')) {
|
|
1165
|
-
existingMode = currentConfig.mode;
|
|
1166
|
-
}
|
|
1167
|
-
if (currentConfig && currentConfig.lightMode !== undefined) {
|
|
1168
|
-
existingLightMode = currentConfig.lightMode;
|
|
1169
|
-
}
|
|
1172
|
+
if (existingConfig) {
|
|
1173
|
+
if (existingConfig && (existingConfig.mode === 'minimal' || existingConfig.mode === 'full')) {
|
|
1174
|
+
existingMode = existingConfig.mode;
|
|
1170
1175
|
}
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
existingLightMode = undefined;
|
|
1176
|
+
if (existingConfig && existingConfig.lightMode !== undefined) {
|
|
1177
|
+
existingLightMode = existingConfig.lightMode;
|
|
1174
1178
|
}
|
|
1175
1179
|
}
|
|
1176
1180
|
const minimalMode = options.minimal ?? existingMode === 'minimal';
|
|
@@ -1341,12 +1345,11 @@ export async function updateCommand(options) {
|
|
|
1341
1345
|
}
|
|
1342
1346
|
}
|
|
1343
1347
|
}
|
|
1344
|
-
//
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
// Load existing config to preserve skills
|
|
1348
|
-
const existingConfig = await configManager.loadConfig();
|
|
1348
|
+
// Migration already done via configManager.loadConfig() -> migrateConfig() -> migrateDirectoryStructure()
|
|
1349
|
+
// No need to call it again here
|
|
1350
|
+
// Load existing config to preserve skills and ralph settings (already loaded above)
|
|
1349
1351
|
const existingSkills = existingConfig.skills?.enabled || [];
|
|
1352
|
+
const existingRalph = existingConfig.ralph;
|
|
1350
1353
|
// Auto-detect skills based on project detection (v2.0)
|
|
1351
1354
|
let detectedSkills = [];
|
|
1352
1355
|
try {
|
|
@@ -1385,6 +1388,8 @@ export async function updateCommand(options) {
|
|
|
1385
1388
|
modular: config.modular ?? true,
|
|
1386
1389
|
rulebookDir: config.rulebookDir || 'rulebook',
|
|
1387
1390
|
skills: detectedSkills.length > 0 ? { enabled: detectedSkills } : undefined,
|
|
1391
|
+
ralph: existingRalph,
|
|
1392
|
+
memory: existingConfig.memory,
|
|
1388
1393
|
});
|
|
1389
1394
|
// Migrate flat layout to specs/ subdirectory if needed
|
|
1390
1395
|
{
|
|
@@ -1466,9 +1471,10 @@ export async function updateCommand(options) {
|
|
|
1466
1471
|
testRun: 600000,
|
|
1467
1472
|
},
|
|
1468
1473
|
...(existingConfig.memory ? { memory: existingConfig.memory } : {}),
|
|
1474
|
+
...(existingConfig.ralph ? { ralph: existingConfig.ralph } : {}),
|
|
1469
1475
|
...(existingConfig.skills ? { skills: existingConfig.skills } : {}),
|
|
1470
1476
|
};
|
|
1471
|
-
await
|
|
1477
|
+
await configManager.saveConfig(rulebookConfig);
|
|
1472
1478
|
configSpinner.succeed('.rulebook configuration updated');
|
|
1473
1479
|
// Auto-setup Claude Code integration (MCP + skills)
|
|
1474
1480
|
const claudeSpinner = ora('Checking Claude Code integration...').start();
|
|
@@ -1491,6 +1497,31 @@ export async function updateCommand(options) {
|
|
|
1491
1497
|
catch {
|
|
1492
1498
|
claudeSpinner.info('Claude Code integration skipped');
|
|
1493
1499
|
}
|
|
1500
|
+
// Migrate memory directory if old structure exists
|
|
1501
|
+
try {
|
|
1502
|
+
await migrateMemoryDirectory();
|
|
1503
|
+
}
|
|
1504
|
+
catch {
|
|
1505
|
+
// Silently skip if migration fails
|
|
1506
|
+
}
|
|
1507
|
+
// Install plugin in Claude Code
|
|
1508
|
+
try {
|
|
1509
|
+
await setupClaudeCodePlugin();
|
|
1510
|
+
}
|
|
1511
|
+
catch {
|
|
1512
|
+
// Silently skip if plugin installation fails
|
|
1513
|
+
}
|
|
1514
|
+
// Clean up any accidental duplicate directories
|
|
1515
|
+
try {
|
|
1516
|
+
const fsPromises = await import('fs/promises');
|
|
1517
|
+
const accidentalDir = path.join(cwd, '.rulebook', '.rulebook');
|
|
1518
|
+
if (existsSync(accidentalDir)) {
|
|
1519
|
+
await fsPromises.rm(accidentalDir, { recursive: true, force: true });
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
catch {
|
|
1523
|
+
// Ignore cleanup errors
|
|
1524
|
+
}
|
|
1494
1525
|
// Success message
|
|
1495
1526
|
console.log(chalk.bold.green('\n✅ Update complete!\n'));
|
|
1496
1527
|
console.log(chalk.white('Updated components:'));
|
|
@@ -1931,7 +1962,8 @@ export async function memoryStatsCommand() {
|
|
|
1931
1962
|
const sizeMB = (stats.dbSizeBytes / 1024 / 1024).toFixed(2);
|
|
1932
1963
|
const maxMB = (stats.maxSizeBytes / 1024 / 1024).toFixed(0);
|
|
1933
1964
|
const usage = stats.usagePercent.toFixed(1);
|
|
1934
|
-
const bar = '█'.repeat(Math.floor(stats.usagePercent / 5)) +
|
|
1965
|
+
const bar = '█'.repeat(Math.floor(stats.usagePercent / 5)) +
|
|
1966
|
+
'░'.repeat(20 - Math.floor(stats.usagePercent / 5));
|
|
1935
1967
|
console.log(`\n Memories: ${chalk.cyan(stats.memoryCount)}`);
|
|
1936
1968
|
console.log(` Sessions: ${chalk.cyan(stats.sessionCount)}`);
|
|
1937
1969
|
console.log(` DB Size: ${chalk.cyan(sizeMB + ' MB')} / ${maxMB} MB`);
|
|
@@ -2011,4 +2043,336 @@ export async function memoryExportCommand(options) {
|
|
|
2011
2043
|
process.exit(1);
|
|
2012
2044
|
}
|
|
2013
2045
|
}
|
|
2046
|
+
// Ralph Autonomous Loop Commands (v3.0)
|
|
2047
|
+
export async function ralphInitCommand() {
|
|
2048
|
+
const oraModule = await import('ora');
|
|
2049
|
+
const ora = oraModule.default;
|
|
2050
|
+
const spinner = ora('Initializing Ralph autonomous loop...').start();
|
|
2051
|
+
try {
|
|
2052
|
+
const cwd = process.cwd();
|
|
2053
|
+
const { Logger } = await import('../core/logger.js');
|
|
2054
|
+
const { RalphManager } = await import('../core/ralph-manager.js');
|
|
2055
|
+
const { PRDGenerator } = await import('../core/prd-generator.js');
|
|
2056
|
+
const { createConfigManager } = await import('../core/config-manager.js');
|
|
2057
|
+
const logger = new Logger(cwd);
|
|
2058
|
+
const configManager = createConfigManager(cwd);
|
|
2059
|
+
const config = await configManager.loadConfig();
|
|
2060
|
+
// Create managers
|
|
2061
|
+
const ralphManager = new RalphManager(cwd, logger);
|
|
2062
|
+
const prdGenerator = new PRDGenerator(cwd, logger);
|
|
2063
|
+
// Initialize Ralph
|
|
2064
|
+
const maxIterations = config.ralph?.maxIterations || 10;
|
|
2065
|
+
const tool = (config.ralph?.tool || 'claude');
|
|
2066
|
+
await ralphManager.initialize(maxIterations, tool);
|
|
2067
|
+
// Generate PRD from rulebook tasks
|
|
2068
|
+
const prd = await prdGenerator.generatePRD(path.basename(cwd));
|
|
2069
|
+
// Save PRD
|
|
2070
|
+
const prdPath = path.join(cwd, '.rulebook', 'ralph', 'prd.json');
|
|
2071
|
+
await writeFile(prdPath, JSON.stringify(prd, null, 2));
|
|
2072
|
+
spinner.succeed(`Ralph initialized: ${prd.userStories.length} user stories loaded`);
|
|
2073
|
+
console.log(`\n 📋 PRD: ${prdPath}`);
|
|
2074
|
+
console.log(` 🔄 Max iterations: ${maxIterations}`);
|
|
2075
|
+
console.log(` 🤖 AI Tool: ${tool}`);
|
|
2076
|
+
console.log(`\n Run: ${chalk.bold('rulebook ralph run')}\n`);
|
|
2077
|
+
}
|
|
2078
|
+
catch (error) {
|
|
2079
|
+
spinner.fail('Ralph initialization failed');
|
|
2080
|
+
console.error(chalk.red(String(error)));
|
|
2081
|
+
process.exit(1);
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
export async function ralphRunCommand(options) {
|
|
2085
|
+
const oraModule = await import('ora');
|
|
2086
|
+
const ora = oraModule.default;
|
|
2087
|
+
const spinner = ora('Starting Ralph autonomous loop...').start();
|
|
2088
|
+
try {
|
|
2089
|
+
const cwd = process.cwd();
|
|
2090
|
+
const { Logger } = await import('../core/logger.js');
|
|
2091
|
+
const { RalphManager } = await import('../core/ralph-manager.js');
|
|
2092
|
+
const { createConfigManager } = await import('../core/config-manager.js');
|
|
2093
|
+
const logger = new Logger(cwd);
|
|
2094
|
+
const configManager = createConfigManager(cwd);
|
|
2095
|
+
const config = await configManager.loadConfig();
|
|
2096
|
+
const ralphManager = new RalphManager(cwd, logger);
|
|
2097
|
+
const maxIterations = options.maxIterations || config.ralph?.maxIterations || 10;
|
|
2098
|
+
const tool = options.tool || config.ralph?.tool || 'claude';
|
|
2099
|
+
await ralphManager.initialize(maxIterations, tool);
|
|
2100
|
+
spinner.text = 'Ralph loop running (Ctrl+C to pause)...';
|
|
2101
|
+
let iterationCount = 0;
|
|
2102
|
+
while (ralphManager.canContinue()) {
|
|
2103
|
+
iterationCount++;
|
|
2104
|
+
const task = await ralphManager.getNextTask();
|
|
2105
|
+
if (!task) {
|
|
2106
|
+
break;
|
|
2107
|
+
}
|
|
2108
|
+
spinner.text = `Iteration ${iterationCount}: ${task.title}...`;
|
|
2109
|
+
// In production, would execute agent here
|
|
2110
|
+
// For now, just mark story as complete
|
|
2111
|
+
await ralphManager.markStoryComplete(task.id);
|
|
2112
|
+
// Simulate iteration result (placeholder)
|
|
2113
|
+
const result = {
|
|
2114
|
+
iteration: iterationCount,
|
|
2115
|
+
timestamp: new Date().toISOString(),
|
|
2116
|
+
task_id: task.id,
|
|
2117
|
+
task_title: task.title,
|
|
2118
|
+
status: 'success',
|
|
2119
|
+
ai_tool: tool,
|
|
2120
|
+
execution_time_ms: 5000,
|
|
2121
|
+
quality_checks: { type_check: true, lint: true, tests: true, coverage_met: true },
|
|
2122
|
+
output_summary: `Completed ${task.title}`,
|
|
2123
|
+
git_commit: undefined,
|
|
2124
|
+
learnings: [],
|
|
2125
|
+
errors: [],
|
|
2126
|
+
metadata: { context_loss_count: 0, parsed_completion: true },
|
|
2127
|
+
};
|
|
2128
|
+
await ralphManager.recordIteration(result);
|
|
2129
|
+
}
|
|
2130
|
+
const stats = await ralphManager.getTaskStats();
|
|
2131
|
+
spinner.succeed(`Ralph loop complete: ${stats.completed}/${stats.total} tasks completed`);
|
|
2132
|
+
console.log(`\n ✅ Iterations: ${iterationCount}`);
|
|
2133
|
+
console.log(` 📊 Completed: ${stats.completed}/${stats.total}`);
|
|
2134
|
+
console.log(`\n View history: ${chalk.bold('rulebook ralph history')}\n`);
|
|
2135
|
+
}
|
|
2136
|
+
catch (error) {
|
|
2137
|
+
spinner.fail('Ralph loop failed');
|
|
2138
|
+
console.error(chalk.red(String(error)));
|
|
2139
|
+
process.exit(1);
|
|
2140
|
+
}
|
|
2141
|
+
}
|
|
2142
|
+
export async function ralphStatusCommand() {
|
|
2143
|
+
const oraModule = await import('ora');
|
|
2144
|
+
const ora = oraModule.default;
|
|
2145
|
+
const spinner = ora('Loading Ralph status...').start();
|
|
2146
|
+
try {
|
|
2147
|
+
const cwd = process.cwd();
|
|
2148
|
+
const { Logger } = await import('../core/logger.js');
|
|
2149
|
+
const { RalphManager } = await import('../core/ralph-manager.js');
|
|
2150
|
+
const logger = new Logger(cwd);
|
|
2151
|
+
const ralphManager = new RalphManager(cwd, logger);
|
|
2152
|
+
const status = await ralphManager.getStatus();
|
|
2153
|
+
if (!status) {
|
|
2154
|
+
spinner.fail('Ralph not initialized');
|
|
2155
|
+
console.log(`\n Run: ${chalk.bold('rulebook ralph init')}\n`);
|
|
2156
|
+
return;
|
|
2157
|
+
}
|
|
2158
|
+
spinner.stop();
|
|
2159
|
+
console.log(`\n ${chalk.bold('Ralph Loop Status')}`);
|
|
2160
|
+
console.log(` Iteration: ${status.current_iteration}/${status.max_iterations}`);
|
|
2161
|
+
console.log(` Tasks: ${status.completed_tasks}/${status.total_tasks}`);
|
|
2162
|
+
console.log(` Status: ${status.paused ? chalk.yellow('PAUSED') : chalk.green('RUNNING')}`);
|
|
2163
|
+
console.log(` AI Tool: ${status.tool}`);
|
|
2164
|
+
console.log(` Started: ${new Date(status.started_at).toLocaleString()}`);
|
|
2165
|
+
console.log();
|
|
2166
|
+
}
|
|
2167
|
+
catch (error) {
|
|
2168
|
+
spinner.fail('Failed to load status');
|
|
2169
|
+
console.error(chalk.red(String(error)));
|
|
2170
|
+
process.exit(1);
|
|
2171
|
+
}
|
|
2172
|
+
}
|
|
2173
|
+
export async function ralphHistoryCommand(options) {
|
|
2174
|
+
const oraModule = await import('ora');
|
|
2175
|
+
const ora = oraModule.default;
|
|
2176
|
+
const spinner = ora('Loading iteration history...').start();
|
|
2177
|
+
try {
|
|
2178
|
+
const cwd = process.cwd();
|
|
2179
|
+
const { Logger } = await import('../core/logger.js');
|
|
2180
|
+
const { IterationTracker } = await import('../core/iteration-tracker.js');
|
|
2181
|
+
const logger = new Logger(cwd);
|
|
2182
|
+
const tracker = new IterationTracker(cwd, logger);
|
|
2183
|
+
const limit = options.limit || 10;
|
|
2184
|
+
const history = await tracker.getHistory(limit);
|
|
2185
|
+
if (history.length === 0) {
|
|
2186
|
+
spinner.fail('No iteration history found');
|
|
2187
|
+
return;
|
|
2188
|
+
}
|
|
2189
|
+
spinner.stop();
|
|
2190
|
+
console.log(`\n ${chalk.bold('Recent Iterations')} (${history.length})\n`);
|
|
2191
|
+
for (const iter of history) {
|
|
2192
|
+
const statusIcon = iter.status === 'success'
|
|
2193
|
+
? chalk.green('✓')
|
|
2194
|
+
: iter.status === 'partial'
|
|
2195
|
+
? chalk.yellow('◐')
|
|
2196
|
+
: chalk.red('✗');
|
|
2197
|
+
console.log(` ${statusIcon} Iteration ${iter.iteration}: ${iter.task_title}`);
|
|
2198
|
+
console.log(` Status: ${iter.status} | Duration: ${(iter.duration_ms || 0) / 1000}s`);
|
|
2199
|
+
console.log(` Checks: type=${iter.quality_checks.type_check ? '✓' : '✗'} lint=${iter.quality_checks.lint ? '✓' : '✗'} tests=${iter.quality_checks.tests ? '✓' : '✗'}`);
|
|
2200
|
+
if (iter.git_commit) {
|
|
2201
|
+
console.log(` Commit: ${iter.git_commit}`);
|
|
2202
|
+
}
|
|
2203
|
+
console.log();
|
|
2204
|
+
}
|
|
2205
|
+
// Show statistics
|
|
2206
|
+
const stats = await tracker.getStatistics();
|
|
2207
|
+
console.log(` ${chalk.bold('Statistics')}`);
|
|
2208
|
+
console.log(` Total: ${stats.total_iterations} | Success: ${stats.successful_iterations} | Failed: ${stats.failed_iterations}`);
|
|
2209
|
+
console.log(` Success rate: ${(stats.success_rate * 100).toFixed(1)}%`);
|
|
2210
|
+
console.log(` Avg duration: ${stats.average_duration_ms}ms\n`);
|
|
2211
|
+
}
|
|
2212
|
+
catch (error) {
|
|
2213
|
+
spinner.fail('Failed to load history');
|
|
2214
|
+
console.error(chalk.red(String(error)));
|
|
2215
|
+
process.exit(1);
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
export async function ralphPauseCommand() {
|
|
2219
|
+
const oraModule = await import('ora');
|
|
2220
|
+
const ora = oraModule.default;
|
|
2221
|
+
const spinner = ora('Pausing Ralph loop...').start();
|
|
2222
|
+
try {
|
|
2223
|
+
const cwd = process.cwd();
|
|
2224
|
+
const { Logger } = await import('../core/logger.js');
|
|
2225
|
+
const { RalphManager } = await import('../core/ralph-manager.js');
|
|
2226
|
+
const logger = new Logger(cwd);
|
|
2227
|
+
const ralphManager = new RalphManager(cwd, logger);
|
|
2228
|
+
await ralphManager.pause();
|
|
2229
|
+
spinner.succeed('Ralph loop paused');
|
|
2230
|
+
console.log(`\n Resume with: ${chalk.bold('rulebook ralph resume')}\n`);
|
|
2231
|
+
}
|
|
2232
|
+
catch (error) {
|
|
2233
|
+
spinner.fail('Failed to pause');
|
|
2234
|
+
console.error(chalk.red(String(error)));
|
|
2235
|
+
process.exit(1);
|
|
2236
|
+
}
|
|
2237
|
+
}
|
|
2238
|
+
export async function ralphResumeCommand() {
|
|
2239
|
+
const oraModule = await import('ora');
|
|
2240
|
+
const ora = oraModule.default;
|
|
2241
|
+
const spinner = ora('Resuming Ralph loop...').start();
|
|
2242
|
+
try {
|
|
2243
|
+
const cwd = process.cwd();
|
|
2244
|
+
const { Logger } = await import('../core/logger.js');
|
|
2245
|
+
const { RalphManager } = await import('../core/ralph-manager.js');
|
|
2246
|
+
const logger = new Logger(cwd);
|
|
2247
|
+
const ralphManager = new RalphManager(cwd, logger);
|
|
2248
|
+
await ralphManager.resume();
|
|
2249
|
+
spinner.succeed('Ralph loop resumed');
|
|
2250
|
+
console.log(`\n Continue loop: ${chalk.bold('rulebook ralph run')}\n`);
|
|
2251
|
+
}
|
|
2252
|
+
catch (error) {
|
|
2253
|
+
spinner.fail('Failed to resume');
|
|
2254
|
+
console.error(chalk.red(String(error)));
|
|
2255
|
+
process.exit(1);
|
|
2256
|
+
}
|
|
2257
|
+
}
|
|
2258
|
+
export async function setupClaudeCodePlugin() {
|
|
2259
|
+
const oraModule = await import('ora');
|
|
2260
|
+
const ora = oraModule.default;
|
|
2261
|
+
const spinner = ora('Setting up Claude Code plugin...').start();
|
|
2262
|
+
try {
|
|
2263
|
+
const { readFile } = await import('../utils/file-system.js');
|
|
2264
|
+
const os = await import('os');
|
|
2265
|
+
const fs = await import('fs/promises');
|
|
2266
|
+
const url = await import('url');
|
|
2267
|
+
// Get plugin info from .claude-plugin/plugin.json relative to this module
|
|
2268
|
+
const packageDir = path.dirname(url.fileURLToPath(import.meta.url));
|
|
2269
|
+
const pluginJsonPath = path.join(packageDir, '..', '..', '.claude-plugin', 'plugin.json');
|
|
2270
|
+
const pluginJson = JSON.parse(await readFile(pluginJsonPath));
|
|
2271
|
+
// Get Claude Code plugins directory
|
|
2272
|
+
const homeDir = os.homedir();
|
|
2273
|
+
const pluginsDir = path.join(homeDir, '.claude', 'plugins');
|
|
2274
|
+
const installCountsPath = path.join(pluginsDir, 'install-counts-cache.json');
|
|
2275
|
+
const installedPluginsPath = path.join(pluginsDir, 'installed_plugins.json');
|
|
2276
|
+
// Create plugins directory if it doesn't exist
|
|
2277
|
+
await fs.mkdir(pluginsDir, { recursive: true });
|
|
2278
|
+
// Load or create installed_plugins.json
|
|
2279
|
+
let installedPlugins = {
|
|
2280
|
+
version: 2,
|
|
2281
|
+
plugins: {},
|
|
2282
|
+
};
|
|
2283
|
+
if (existsSync(installedPluginsPath)) {
|
|
2284
|
+
const content = await readFile(installedPluginsPath);
|
|
2285
|
+
installedPlugins = JSON.parse(content);
|
|
2286
|
+
}
|
|
2287
|
+
// Add rulebook plugin
|
|
2288
|
+
const pluginKey = `rulebook@hivehub`;
|
|
2289
|
+
const version = pluginJson.version || '3.2.0';
|
|
2290
|
+
const installPath = path.join(pluginsDir, 'cache', 'hivehub', 'rulebook', version);
|
|
2291
|
+
if (!installedPlugins.plugins[pluginKey]) {
|
|
2292
|
+
installedPlugins.plugins[pluginKey] = [];
|
|
2293
|
+
}
|
|
2294
|
+
// Check if already installed
|
|
2295
|
+
const existing = installedPlugins.plugins[pluginKey].find((p) => p.version === version);
|
|
2296
|
+
if (!existing) {
|
|
2297
|
+
installedPlugins.plugins[pluginKey].push({
|
|
2298
|
+
scope: 'user',
|
|
2299
|
+
installPath: installPath,
|
|
2300
|
+
version: version,
|
|
2301
|
+
installedAt: new Date().toISOString(),
|
|
2302
|
+
lastUpdated: new Date().toISOString(),
|
|
2303
|
+
});
|
|
2304
|
+
}
|
|
2305
|
+
// Save installed_plugins.json
|
|
2306
|
+
await fs.writeFile(installedPluginsPath, JSON.stringify(installedPlugins, null, 2));
|
|
2307
|
+
// Update install-counts-cache.json
|
|
2308
|
+
let installCounts = {};
|
|
2309
|
+
if (existsSync(installCountsPath)) {
|
|
2310
|
+
const content = await readFile(installCountsPath);
|
|
2311
|
+
installCounts = JSON.parse(content);
|
|
2312
|
+
}
|
|
2313
|
+
installCounts[pluginKey] = (installCounts[pluginKey] || 0) + 1;
|
|
2314
|
+
await fs.writeFile(installCountsPath, JSON.stringify(installCounts, null, 2));
|
|
2315
|
+
spinner.succeed('Claude Code plugin installed');
|
|
2316
|
+
console.log(`\n ${chalk.green('✓')} Plugin: ${pluginKey} v${version}`);
|
|
2317
|
+
console.log(` ${chalk.gray('Installed to:')} ${installPath}`);
|
|
2318
|
+
console.log(`\n ${chalk.blue('Note:')} Restart Claude Code to load the plugin.\n`);
|
|
2319
|
+
}
|
|
2320
|
+
catch (error) {
|
|
2321
|
+
spinner.fail('Failed to install plugin');
|
|
2322
|
+
console.error(chalk.red(String(error)));
|
|
2323
|
+
process.exit(1);
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2326
|
+
export async function migrateMemoryDirectory() {
|
|
2327
|
+
const oraModule = await import('ora');
|
|
2328
|
+
const ora = oraModule.default;
|
|
2329
|
+
const spinner = ora('Migrating memory directory structure...').start();
|
|
2330
|
+
try {
|
|
2331
|
+
const { createConfigManager } = await import('../core/config-manager.js');
|
|
2332
|
+
const fs = await import('fs');
|
|
2333
|
+
const fsPromises = fs.promises;
|
|
2334
|
+
const cwd = process.cwd();
|
|
2335
|
+
const oldDir = path.join(cwd, '.rulebook-memory');
|
|
2336
|
+
const rulebookDir = path.join(cwd, '.rulebook');
|
|
2337
|
+
const newDir = path.join(rulebookDir, 'memory');
|
|
2338
|
+
// Check if old directory exists
|
|
2339
|
+
if (!existsSync(oldDir)) {
|
|
2340
|
+
spinner.info('No old memory directory found (.rulebook-memory)');
|
|
2341
|
+
return;
|
|
2342
|
+
}
|
|
2343
|
+
// Create .rulebook directory if it doesn't exist
|
|
2344
|
+
if (!existsSync(rulebookDir)) {
|
|
2345
|
+
await fsPromises.mkdir(rulebookDir, { recursive: true });
|
|
2346
|
+
}
|
|
2347
|
+
// Create memory subdirectory
|
|
2348
|
+
await fsPromises.mkdir(newDir, { recursive: true });
|
|
2349
|
+
// Copy files from old to new
|
|
2350
|
+
const files = await fsPromises.readdir(oldDir);
|
|
2351
|
+
for (const file of files) {
|
|
2352
|
+
const oldPath = path.join(oldDir, file);
|
|
2353
|
+
const newPath = path.join(newDir, file);
|
|
2354
|
+
await fsPromises.copyFile(oldPath, newPath);
|
|
2355
|
+
}
|
|
2356
|
+
// Remove old directory
|
|
2357
|
+
await fsPromises.rm(oldDir, { recursive: true, force: true });
|
|
2358
|
+
// Update config to use new path
|
|
2359
|
+
const configManager = createConfigManager(cwd);
|
|
2360
|
+
const existingConfig = await configManager.loadConfig();
|
|
2361
|
+
if (existingConfig.memory) {
|
|
2362
|
+
existingConfig.memory.dbPath = '.rulebook/memory/memory.db';
|
|
2363
|
+
}
|
|
2364
|
+
await configManager.updateConfig(existingConfig);
|
|
2365
|
+
spinner.succeed('Memory directory migrated');
|
|
2366
|
+
console.log(`\n ${chalk.green('✓')} Migrated to: ${newDir}`);
|
|
2367
|
+
console.log(` ${chalk.gray('Old directory removed: .rulebook-memory')}\n`);
|
|
2368
|
+
}
|
|
2369
|
+
catch (error) {
|
|
2370
|
+
const oraModule = await import('ora');
|
|
2371
|
+
const ora = oraModule.default;
|
|
2372
|
+
const spinner2 = ora();
|
|
2373
|
+
spinner2.fail('Failed to migrate memory directory');
|
|
2374
|
+
console.error(chalk.red(String(error)));
|
|
2375
|
+
process.exit(1);
|
|
2376
|
+
}
|
|
2377
|
+
}
|
|
2014
2378
|
//# sourceMappingURL=commands.js.map
|