@hivehub/rulebook 2.1.0 → 3.1.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/LICENSE +0 -0
- package/README.md +840 -661
- 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 +246 -0
- package/dist/agents/ralph-parser.js.map +1 -0
- package/dist/cli/commands.d.ts +35 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +669 -28
- 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 +32 -0
- package/dist/core/claude-mcp.d.ts.map +1 -0
- package/dist/core/claude-mcp.js +92 -0
- package/dist/core/claude-mcp.js.map +1 -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 +209 -10
- 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 +181 -49
- 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 +13 -0
- package/dist/core/migrator.d.ts.map +1 -1
- package/dist/core/migrator.js +76 -9
- package/dist/core/migrator.js.map +1 -1
- 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 +1 -1
- package/dist/core/openspec-migrator.d.ts.map +1 -1
- package/dist/core/openspec-migrator.js +14 -7
- package/dist/core/openspec-migrator.js.map +1 -1
- 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 +276 -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 -261
- package/dist/core/workflow-generator.js.map +1 -1
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +85 -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 +484 -74
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/hnsw-index.d.ts +63 -0
- package/dist/memory/hnsw-index.d.ts.map +1 -0
- package/dist/memory/hnsw-index.js +421 -0
- package/dist/memory/hnsw-index.js.map +1 -0
- package/dist/memory/memory-cache.d.ts +33 -0
- package/dist/memory/memory-cache.d.ts.map +1 -0
- package/dist/memory/memory-cache.js +85 -0
- package/dist/memory/memory-cache.js.map +1 -0
- package/dist/memory/memory-hooks.d.ts +48 -0
- package/dist/memory/memory-hooks.d.ts.map +1 -0
- package/dist/memory/memory-hooks.js +250 -0
- package/dist/memory/memory-hooks.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +56 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +216 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/memory-search.d.ts +42 -0
- package/dist/memory/memory-search.d.ts.map +1 -0
- package/dist/memory/memory-search.js +166 -0
- package/dist/memory/memory-search.js.map +1 -0
- package/dist/memory/memory-store.d.ts +59 -0
- package/dist/memory/memory-store.d.ts.map +1 -0
- package/dist/memory/memory-store.js +394 -0
- package/dist/memory/memory-store.js.map +1 -0
- package/dist/memory/memory-types.d.ts +70 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +7 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/memory/memory-vectorizer.d.ts +29 -0
- package/dist/memory/memory-vectorizer.d.ts.map +1 -0
- package/dist/memory/memory-vectorizer.js +104 -0
- package/dist/memory/memory-vectorizer.js.map +1 -0
- package/dist/types.d.ts +77 -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 +25 -25
- 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 +48 -0
- package/templates/commands/rulebook-memory-search.md +47 -0
- package/templates/commands/rulebook-task-apply.md +2 -2
- package/templates/commands/rulebook-task-archive.md +2 -2
- package/templates/commands/rulebook-task-create.md +2 -2
- package/templates/commands/rulebook-task-list.md +2 -2
- package/templates/commands/rulebook-task-show.md +2 -2
- package/templates/commands/rulebook-task-validate.md +2 -2
- 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 +4 -4
- package/templates/git/GITHUB_ACTIONS.md +3 -3
- package/templates/git/GITLAB_CI.md +4 -4
- package/templates/git/GIT_WORKFLOW.md +0 -0
- package/templates/git/SECRETS_MANAGEMENT.md +4 -4
- package/templates/hooks/COMMIT_MSG.md +4 -4
- package/templates/hooks/POST_CHECKOUT.md +3 -3
- package/templates/hooks/PREPARE_COMMIT_MSG.md +3 -3
- package/templates/hooks/PRE_COMMIT.md +4 -4
- package/templates/hooks/PRE_PUSH.md +4 -4
- 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 +126 -0
- 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 +59 -0
- package/templates/skills/cli/amazon-q/SKILL.md +35 -0
- package/templates/skills/cli/auggie/SKILL.md +42 -0
- package/templates/skills/cli/claude/SKILL.md +42 -0
- package/templates/skills/cli/claude-code/SKILL.md +146 -0
- package/templates/skills/cli/cline/SKILL.md +42 -0
- package/templates/skills/cli/codebuddy/SKILL.md +30 -0
- package/templates/skills/cli/codeium/SKILL.md +30 -0
- package/templates/skills/cli/codex/SKILL.md +31 -0
- package/templates/skills/cli/continue/SKILL.md +44 -0
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -0
- package/templates/skills/cli/factory/SKILL.md +28 -0
- package/templates/skills/cli/gemini/SKILL.md +45 -0
- package/templates/skills/cli/kilocode/SKILL.md +28 -0
- package/templates/skills/cli/opencode/SKILL.md +28 -0
- package/templates/skills/core/agent-automation/SKILL.md +194 -0
- package/templates/skills/core/dag/SKILL.md +314 -0
- package/templates/skills/core/documentation-rules/SKILL.md +47 -0
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -0
- package/templates/skills/core/rulebook/SKILL.md +0 -0
- package/templates/skills/frameworks/angular/SKILL.md +46 -0
- package/templates/skills/frameworks/django/SKILL.md +93 -0
- package/templates/skills/frameworks/electron/SKILL.md +157 -0
- package/templates/skills/frameworks/flask/SKILL.md +48 -0
- package/templates/skills/frameworks/flutter/SKILL.md +65 -0
- package/templates/skills/frameworks/jquery/SKILL.md +42 -0
- package/templates/skills/frameworks/laravel/SKILL.md +48 -0
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -0
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -0
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -0
- package/templates/skills/frameworks/rails/SKILL.md +76 -0
- package/templates/skills/frameworks/react/SKILL.md +48 -0
- package/templates/skills/frameworks/react-native/SKILL.md +57 -0
- package/templates/skills/frameworks/spring/SKILL.md +49 -0
- package/templates/skills/frameworks/symfony/SKILL.md +46 -0
- package/templates/skills/frameworks/vue/SKILL.md +46 -0
- package/templates/skills/frameworks/zend/SKILL.md +45 -0
- package/templates/skills/ides/copilot/SKILL.md +47 -0
- package/templates/skills/ides/cursor/SKILL.md +53 -0
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -0
- package/templates/skills/ides/replit/SKILL.md +46 -0
- package/templates/skills/ides/tabnine/SKILL.md +39 -0
- package/templates/skills/ides/vscode/SKILL.md +50 -0
- package/templates/skills/ides/windsurf/SKILL.md +46 -0
- package/templates/skills/ides/zed/SKILL.md +42 -0
- package/templates/skills/languages/ada/SKILL.md +68 -0
- package/templates/skills/languages/c/SKILL.md +343 -0
- package/templates/skills/languages/cpp/SKILL.md +753 -0
- package/templates/skills/languages/csharp/SKILL.md +427 -0
- package/templates/skills/languages/dart/SKILL.md +342 -0
- package/templates/skills/languages/elixir/SKILL.md +464 -0
- package/templates/skills/languages/erlang/SKILL.md +371 -0
- package/templates/skills/languages/go/SKILL.md +655 -0
- package/templates/skills/languages/haskell/SKILL.md +187 -0
- package/templates/skills/languages/java/SKILL.md +617 -0
- package/templates/skills/languages/javascript/SKILL.md +641 -0
- package/templates/skills/languages/julia/SKILL.md +107 -0
- package/templates/skills/languages/kotlin/SKILL.md +521 -0
- package/templates/skills/languages/lisp/SKILL.md +110 -0
- package/templates/skills/languages/lua/SKILL.md +84 -0
- package/templates/skills/languages/objectivec/SKILL.md +100 -0
- package/templates/skills/languages/php/SKILL.md +426 -0
- package/templates/skills/languages/python/SKILL.md +692 -0
- package/templates/skills/languages/r/SKILL.md +360 -0
- package/templates/skills/languages/ruby/SKILL.md +431 -0
- package/templates/skills/languages/rust/SKILL.md +487 -0
- package/templates/skills/languages/sas/SKILL.md +83 -0
- package/templates/skills/languages/scala/SKILL.md +358 -0
- package/templates/skills/languages/solidity/SKILL.md +590 -0
- package/templates/skills/languages/sql/SKILL.md +147 -0
- package/templates/skills/languages/swift/SKILL.md +476 -0
- package/templates/skills/languages/typescript/SKILL.md +0 -0
- package/templates/skills/languages/zig/SKILL.md +275 -0
- package/templates/skills/modules/atlassian/SKILL.md +265 -0
- package/templates/skills/modules/context7/SKILL.md +64 -0
- package/templates/skills/modules/figma/SKILL.md +277 -0
- package/templates/skills/modules/github-mcp/SKILL.md +74 -0
- package/templates/skills/modules/grafana/SKILL.md +338 -0
- package/templates/skills/modules/memory/SKILL.md +73 -0
- package/templates/skills/modules/notion/SKILL.md +257 -0
- package/templates/skills/modules/playwright/SKILL.md +100 -0
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -0
- package/templates/skills/modules/serena/SKILL.md +347 -0
- package/templates/skills/modules/supabase/SKILL.md +233 -0
- package/templates/skills/modules/synap/SKILL.md +79 -0
- package/templates/skills/modules/vectorizer/SKILL.md +73 -0
- package/templates/skills/services/azure-blob/SKILL.md +194 -0
- package/templates/skills/services/cassandra/SKILL.md +249 -0
- package/templates/skills/services/dynamodb/SKILL.md +318 -0
- package/templates/skills/services/elasticsearch/SKILL.md +357 -0
- package/templates/skills/services/gcs/SKILL.md +188 -0
- package/templates/skills/services/influxdb/SKILL.md +275 -0
- package/templates/skills/services/kafka/SKILL.md +351 -0
- package/templates/skills/services/mariadb/SKILL.md +193 -0
- package/templates/skills/services/memcached/SKILL.md +252 -0
- package/templates/skills/services/minio/SKILL.md +211 -0
- package/templates/skills/services/mongodb/SKILL.md +278 -0
- package/templates/skills/services/mysql/SKILL.md +368 -0
- package/templates/skills/services/neo4j/SKILL.md +257 -0
- package/templates/skills/services/oracle/SKILL.md +300 -0
- package/templates/skills/services/postgresql/SKILL.md +336 -0
- package/templates/skills/services/rabbitmq/SKILL.md +296 -0
- package/templates/skills/services/redis/SKILL.md +302 -0
- package/templates/skills/services/s3/SKILL.md +308 -0
- package/templates/skills/services/sqlite/SKILL.md +304 -0
- package/templates/skills/services/sqlserver/SKILL.md +304 -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
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ralph Autonomous Loop",
|
|
3
|
+
"id": "ralph-autonomous-loop",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"category": "workflow",
|
|
6
|
+
"description": "Autonomous AI agent loop for iterative task implementation using fresh context per iteration",
|
|
7
|
+
"author": "Rulebook",
|
|
8
|
+
"license": "Apache-2.0",
|
|
9
|
+
"homepage": "https://github.com/snarktank/ralph",
|
|
10
|
+
"tags": ["autonomous", "workflow", "iterative", "ai-agent", "task-management"],
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@hivehub/rulebook": ">=3.0.0"
|
|
13
|
+
},
|
|
14
|
+
"provides": {
|
|
15
|
+
"commands": [
|
|
16
|
+
{
|
|
17
|
+
"name": "ralph init",
|
|
18
|
+
"description": "Initialize Ralph configuration and create PRD from rulebook tasks",
|
|
19
|
+
"usage": "rulebook ralph init [--force]"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "ralph run",
|
|
23
|
+
"description": "Execute autonomous iteration loop",
|
|
24
|
+
"usage": "rulebook ralph run [--max-iterations N] [--tool claude|amp|gemini]"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "ralph status",
|
|
28
|
+
"description": "Show loop progress, completed tasks, and current iteration",
|
|
29
|
+
"usage": "rulebook ralph status"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "ralph history",
|
|
33
|
+
"description": "Display iteration history and learnings",
|
|
34
|
+
"usage": "rulebook ralph history [--learnings]"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "ralph pause",
|
|
38
|
+
"description": "Gracefully pause autonomous loop",
|
|
39
|
+
"usage": "rulebook ralph pause"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "ralph resume",
|
|
43
|
+
"description": "Resume from paused state",
|
|
44
|
+
"usage": "rulebook ralph resume"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"mcpTools": [
|
|
48
|
+
{
|
|
49
|
+
"name": "rulebook_ralph_init",
|
|
50
|
+
"description": "Initialize Ralph via MCP"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "rulebook_ralph_run",
|
|
54
|
+
"description": "Start autonomous loop via MCP"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "rulebook_ralph_status",
|
|
58
|
+
"description": "Query loop status via MCP"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "rulebook_ralph_get_iteration_history",
|
|
62
|
+
"description": "Retrieve iteration history via MCP"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"installation": {
|
|
67
|
+
"type": "bash",
|
|
68
|
+
"script": "install.sh",
|
|
69
|
+
"instructions": [
|
|
70
|
+
"Ralph will be enabled in your .rulebook configuration",
|
|
71
|
+
"Create rulebook tasks with: rulebook task create <task-id>",
|
|
72
|
+
"Initialize Ralph with: rulebook ralph init",
|
|
73
|
+
"Run autonomous loop with: rulebook ralph run"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"configuration": {
|
|
77
|
+
"defaults": {
|
|
78
|
+
"ralph": {
|
|
79
|
+
"enabled": false,
|
|
80
|
+
"maxIterations": 10,
|
|
81
|
+
"tool": "claude",
|
|
82
|
+
"maxContextLoss": 3
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"schema": {
|
|
86
|
+
"ralph.enabled": {
|
|
87
|
+
"type": "boolean",
|
|
88
|
+
"description": "Enable Ralph autonomous loop"
|
|
89
|
+
},
|
|
90
|
+
"ralph.maxIterations": {
|
|
91
|
+
"type": "integer",
|
|
92
|
+
"description": "Maximum iterations before stopping",
|
|
93
|
+
"minimum": 1,
|
|
94
|
+
"maximum": 1000
|
|
95
|
+
},
|
|
96
|
+
"ralph.tool": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"description": "AI CLI tool to use (claude, amp, gemini)",
|
|
99
|
+
"enum": ["claude", "amp", "gemini"]
|
|
100
|
+
},
|
|
101
|
+
"ralph.maxContextLoss": {
|
|
102
|
+
"type": "integer",
|
|
103
|
+
"description": "Tolerance for incomplete agent outputs",
|
|
104
|
+
"minimum": 1,
|
|
105
|
+
"maximum": 10
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"requiredCapabilities": [
|
|
110
|
+
"task-management",
|
|
111
|
+
"git-integration",
|
|
112
|
+
"quality-gates"
|
|
113
|
+
],
|
|
114
|
+
"relatedSkills": [
|
|
115
|
+
"claude-code",
|
|
116
|
+
"cline",
|
|
117
|
+
"cursor-cli",
|
|
118
|
+
"persistent-memory"
|
|
119
|
+
],
|
|
120
|
+
"documentation": {
|
|
121
|
+
"readme": "SKILL.md",
|
|
122
|
+
"examples": [
|
|
123
|
+
{
|
|
124
|
+
"title": "Initialize Ralph",
|
|
125
|
+
"command": "rulebook ralph init"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"title": "Run autonomous loop with 10 iterations",
|
|
129
|
+
"command": "rulebook ralph run --max-iterations 10"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"title": "Check loop status",
|
|
133
|
+
"command": "rulebook ralph status"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"title": "View iteration history and learnings",
|
|
137
|
+
"command": "rulebook ralph history --learnings"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"title": "Pause and resume loop",
|
|
141
|
+
"command": "rulebook ralph pause && rulebook ralph resume"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
"changelog": {
|
|
146
|
+
"1.0.0": {
|
|
147
|
+
"date": "2026-02-26",
|
|
148
|
+
"changes": [
|
|
149
|
+
"Initial release of Ralph Autonomous Loop skill",
|
|
150
|
+
"Support for Claude Code, Amp, and Gemini CLI tools",
|
|
151
|
+
"Fresh context per iteration with memory persistence via git, PRD, and progress log",
|
|
152
|
+
"Quality gates enforcement (type-check, lint, tests)",
|
|
153
|
+
"Pause/resume capability",
|
|
154
|
+
"MCP server integration for programmatic access"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
export interface ModernConsoleOptions {
|
|
2
|
-
projectRoot: string;
|
|
3
|
-
refreshInterval?: number;
|
|
4
|
-
}
|
|
5
|
-
interface ActivityLogEntry {
|
|
6
|
-
timestamp: Date;
|
|
7
|
-
type: 'info' | 'success' | 'warning' | 'error' | 'tool';
|
|
8
|
-
message: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Simplified Progress-Focused Modern Console
|
|
12
|
-
* New UI: Active Tasks + Progress Bar + Activity Logs
|
|
13
|
-
*/
|
|
14
|
-
export declare class ModernConsole {
|
|
15
|
-
private screen;
|
|
16
|
-
private openspecManager;
|
|
17
|
-
private options;
|
|
18
|
-
private isRunning;
|
|
19
|
-
private refreshTimer?;
|
|
20
|
-
private animationFrame;
|
|
21
|
-
private headerBox;
|
|
22
|
-
private activeTasksBox;
|
|
23
|
-
private progressBox;
|
|
24
|
-
private logsBox;
|
|
25
|
-
private statusBar;
|
|
26
|
-
private tasks;
|
|
27
|
-
private activityLogs;
|
|
28
|
-
constructor(options: ModernConsoleOptions);
|
|
29
|
-
private setupUI;
|
|
30
|
-
private setupEventHandlers;
|
|
31
|
-
/**
|
|
32
|
-
* Get loading spinner frame
|
|
33
|
-
*/
|
|
34
|
-
private getLoadingFrame;
|
|
35
|
-
/**
|
|
36
|
-
* Format duration in HH:MM:SS
|
|
37
|
-
*/
|
|
38
|
-
private formatDuration;
|
|
39
|
-
/**
|
|
40
|
-
* Render active tasks (max 5, auto-remove completed)
|
|
41
|
-
*/
|
|
42
|
-
private renderActiveTasks;
|
|
43
|
-
/**
|
|
44
|
-
* Render progress bar
|
|
45
|
-
*/
|
|
46
|
-
private renderProgressBar;
|
|
47
|
-
/**
|
|
48
|
-
* Render activity logs (last 10 entries)
|
|
49
|
-
*/
|
|
50
|
-
private renderActivityLogs;
|
|
51
|
-
/**
|
|
52
|
-
* Log activity
|
|
53
|
-
*/
|
|
54
|
-
logActivity(type: ActivityLogEntry['type'], message: string): void;
|
|
55
|
-
/**
|
|
56
|
-
* Mark task as completed and remove from list
|
|
57
|
-
*/
|
|
58
|
-
markTaskCompleted(taskId: string): void;
|
|
59
|
-
/**
|
|
60
|
-
* Mark task as in progress
|
|
61
|
-
*/
|
|
62
|
-
markTaskInProgress(taskId: string): void;
|
|
63
|
-
/**
|
|
64
|
-
* Render all components
|
|
65
|
-
*/
|
|
66
|
-
private render;
|
|
67
|
-
/**
|
|
68
|
-
* Start watching
|
|
69
|
-
*/
|
|
70
|
-
start(): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* Stop watching
|
|
73
|
-
*/
|
|
74
|
-
stop(): void;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Factory function
|
|
78
|
-
*/
|
|
79
|
-
export declare function createModernConsole(options: ModernConsoleOptions): ModernConsole;
|
|
80
|
-
export {};
|
|
81
|
-
//# sourceMappingURL=modern-console-new.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modern-console-new.d.ts","sourceRoot":"","sources":["../../src/core/modern-console-new.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,eAAe,CAA2C;IAClE,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,SAAS,CAA8B;IAG/C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,YAAY,CAA0B;gBAElC,OAAO,EAAE,oBAAoB;IAqBzC,OAAO,CAAC,OAAO;IA2Gf,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAezE;;OAEG;IACI,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa9C;;OAEG;IACI,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY/C;;OAEG;IACH,OAAO,CAAC,MAAM;IAOd;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC5B;;OAEG;IACH,IAAI,IAAI,IAAI;CAeb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAEhF"}
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
import blessed from 'blessed';
|
|
2
|
-
import { createOpenSpecManager } from './openspec-manager.js';
|
|
3
|
-
/**
|
|
4
|
-
* Simplified Progress-Focused Modern Console
|
|
5
|
-
* New UI: Active Tasks + Progress Bar + Activity Logs
|
|
6
|
-
*/
|
|
7
|
-
export class ModernConsole {
|
|
8
|
-
screen;
|
|
9
|
-
openspecManager;
|
|
10
|
-
options;
|
|
11
|
-
isRunning = false;
|
|
12
|
-
refreshTimer;
|
|
13
|
-
animationFrame = 0;
|
|
14
|
-
// UI Components
|
|
15
|
-
headerBox;
|
|
16
|
-
activeTasksBox;
|
|
17
|
-
progressBox;
|
|
18
|
-
logsBox;
|
|
19
|
-
statusBar;
|
|
20
|
-
// Data
|
|
21
|
-
tasks = [];
|
|
22
|
-
activityLogs = [];
|
|
23
|
-
constructor(options) {
|
|
24
|
-
this.options = {
|
|
25
|
-
refreshInterval: 100, // 100ms for smooth animations
|
|
26
|
-
...options,
|
|
27
|
-
};
|
|
28
|
-
this.openspecManager = createOpenSpecManager(options.projectRoot);
|
|
29
|
-
this.screen = blessed.screen({
|
|
30
|
-
smartCSR: true,
|
|
31
|
-
title: 'Rulebook Watcher',
|
|
32
|
-
fullUnicode: true,
|
|
33
|
-
dockBorders: true,
|
|
34
|
-
autoPadding: true,
|
|
35
|
-
warnings: false,
|
|
36
|
-
});
|
|
37
|
-
this.setupUI();
|
|
38
|
-
this.setupEventHandlers();
|
|
39
|
-
}
|
|
40
|
-
setupUI() {
|
|
41
|
-
// Header (3 lines)
|
|
42
|
-
this.headerBox = blessed.box({
|
|
43
|
-
top: 0,
|
|
44
|
-
left: 0,
|
|
45
|
-
width: '100%',
|
|
46
|
-
height: 3,
|
|
47
|
-
content: '{center}{bold}{blue-fg}🤖 RULEBOOK WATCHER{/blue-fg}{/bold} {gray-fg}[F10 Exit]{/gray-fg}{/center}',
|
|
48
|
-
tags: true,
|
|
49
|
-
style: {
|
|
50
|
-
bg: 'blue',
|
|
51
|
-
fg: 'white',
|
|
52
|
-
bold: true,
|
|
53
|
-
},
|
|
54
|
-
border: {
|
|
55
|
-
type: 'line',
|
|
56
|
-
fg: 'blue',
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
// Active Tasks (25% of remaining space, ~6-8 lines)
|
|
60
|
-
this.activeTasksBox = blessed.box({
|
|
61
|
-
top: 3,
|
|
62
|
-
left: 0,
|
|
63
|
-
width: '100%',
|
|
64
|
-
height: '25%-3',
|
|
65
|
-
label: ' {bold}📋 ACTIVE TASKS{/bold} ',
|
|
66
|
-
tags: true,
|
|
67
|
-
scrollable: false,
|
|
68
|
-
style: {
|
|
69
|
-
fg: 'white',
|
|
70
|
-
},
|
|
71
|
-
border: {
|
|
72
|
-
type: 'line',
|
|
73
|
-
fg: 'cyan',
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
// Progress Bar (3 lines fixed)
|
|
77
|
-
this.progressBox = blessed.box({
|
|
78
|
-
top: '25%',
|
|
79
|
-
left: 0,
|
|
80
|
-
width: '100%',
|
|
81
|
-
height: 5,
|
|
82
|
-
label: ' {bold}📊 PROGRESS{/bold} ',
|
|
83
|
-
tags: true,
|
|
84
|
-
style: {
|
|
85
|
-
fg: 'white',
|
|
86
|
-
},
|
|
87
|
-
border: {
|
|
88
|
-
type: 'line',
|
|
89
|
-
fg: 'green',
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
// Activity Logs (remaining space, ~65%)
|
|
93
|
-
this.logsBox = blessed.box({
|
|
94
|
-
top: '30%',
|
|
95
|
-
left: 0,
|
|
96
|
-
width: '100%',
|
|
97
|
-
height: '68%-3',
|
|
98
|
-
label: ' {bold}📝 ACTIVITY LOGS{/bold} ',
|
|
99
|
-
tags: true,
|
|
100
|
-
scrollable: true,
|
|
101
|
-
alwaysScroll: true,
|
|
102
|
-
scrollbar: {
|
|
103
|
-
ch: ' ',
|
|
104
|
-
track: {
|
|
105
|
-
bg: 'cyan',
|
|
106
|
-
},
|
|
107
|
-
style: {
|
|
108
|
-
inverse: true,
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
style: {
|
|
112
|
-
fg: 'white',
|
|
113
|
-
},
|
|
114
|
-
border: {
|
|
115
|
-
type: 'line',
|
|
116
|
-
fg: 'yellow',
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
// Status Bar (1 line)
|
|
120
|
-
this.statusBar = blessed.box({
|
|
121
|
-
bottom: 0,
|
|
122
|
-
left: 0,
|
|
123
|
-
width: '100%',
|
|
124
|
-
height: 1,
|
|
125
|
-
content: ' Press F10 or Ctrl+C to exit',
|
|
126
|
-
tags: true,
|
|
127
|
-
style: {
|
|
128
|
-
bg: 'blue',
|
|
129
|
-
fg: 'white',
|
|
130
|
-
},
|
|
131
|
-
});
|
|
132
|
-
// Add to screen
|
|
133
|
-
this.screen.append(this.headerBox);
|
|
134
|
-
this.screen.append(this.activeTasksBox);
|
|
135
|
-
this.screen.append(this.progressBox);
|
|
136
|
-
this.screen.append(this.logsBox);
|
|
137
|
-
this.screen.append(this.statusBar);
|
|
138
|
-
this.screen.render();
|
|
139
|
-
}
|
|
140
|
-
setupEventHandlers() {
|
|
141
|
-
// Exit on F10 or Ctrl+C
|
|
142
|
-
this.screen.key(['f10', 'C-c'], () => {
|
|
143
|
-
this.stop();
|
|
144
|
-
});
|
|
145
|
-
// Focus logs box for scrolling
|
|
146
|
-
this.logsBox.focus();
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Get loading spinner frame
|
|
150
|
-
*/
|
|
151
|
-
getLoadingFrame() {
|
|
152
|
-
const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
153
|
-
return frames[this.animationFrame % frames.length];
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Format duration in HH:MM:SS
|
|
157
|
-
*/
|
|
158
|
-
formatDuration(ms) {
|
|
159
|
-
const seconds = Math.floor(ms / 1000);
|
|
160
|
-
const minutes = Math.floor(seconds / 60);
|
|
161
|
-
const hours = Math.floor(minutes / 60);
|
|
162
|
-
const h = String(hours).padStart(2, '0');
|
|
163
|
-
const m = String(minutes % 60).padStart(2, '0');
|
|
164
|
-
const s = String(seconds % 60).padStart(2, '0');
|
|
165
|
-
return `${h}:${m}:${s}`;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Render active tasks (max 5, auto-remove completed)
|
|
169
|
-
*/
|
|
170
|
-
renderActiveTasks() {
|
|
171
|
-
const activeTasks = this.tasks.filter(t => t.status !== 'completed').slice(0, 5);
|
|
172
|
-
if (activeTasks.length === 0) {
|
|
173
|
-
this.activeTasksBox.setContent('\n {gray-fg}No active tasks{/gray-fg}');
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
const lines = ['\n'];
|
|
177
|
-
for (const task of activeTasks) {
|
|
178
|
-
const icon = task.status === 'in-progress'
|
|
179
|
-
? `{cyan-fg}${this.getLoadingFrame()}{/cyan-fg}`
|
|
180
|
-
: '{gray-fg}⏸ {/gray-fg}';
|
|
181
|
-
const status = task.status === 'in-progress' ? 'In Progress' : 'Pending';
|
|
182
|
-
const duration = task.status === 'in-progress' && task.metadata?.startedAt
|
|
183
|
-
? ` | Duration: ${this.formatDuration(Date.now() - new Date(task.metadata.startedAt).getTime())}`
|
|
184
|
-
: '';
|
|
185
|
-
lines.push(` ${icon} {bold}${task.title}{/bold}`);
|
|
186
|
-
lines.push(` Status: ${status}${duration}\n`);
|
|
187
|
-
}
|
|
188
|
-
this.activeTasksBox.setContent(lines.join('\n'));
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Render progress bar
|
|
192
|
-
*/
|
|
193
|
-
renderProgressBar() {
|
|
194
|
-
const completed = this.tasks.filter(t => t.status === 'completed').length;
|
|
195
|
-
const total = this.tasks.length;
|
|
196
|
-
const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
|
|
197
|
-
// Calculate bar width (screen width - borders - padding)
|
|
198
|
-
const barWidth = Math.max(40, this.screen.width - 20);
|
|
199
|
-
const filledWidth = Math.round((percentage / 100) * barWidth);
|
|
200
|
-
const emptyWidth = barWidth - filledWidth;
|
|
201
|
-
const filled = '█'.repeat(filledWidth);
|
|
202
|
-
const empty = '░'.repeat(emptyWidth);
|
|
203
|
-
// Color based on progress
|
|
204
|
-
let color = 'green';
|
|
205
|
-
if (percentage < 50)
|
|
206
|
-
color = 'red';
|
|
207
|
-
else if (percentage < 75)
|
|
208
|
-
color = 'yellow';
|
|
209
|
-
const bar = `\n {${color}-fg}${filled}{/}${empty} {bold}{white-fg}${percentage}%{/} {gray-fg}(${completed}/${total}){/}\n`;
|
|
210
|
-
this.progressBox.setContent(bar);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Render activity logs (last 10 entries)
|
|
214
|
-
*/
|
|
215
|
-
renderActivityLogs() {
|
|
216
|
-
if (this.activityLogs.length === 0) {
|
|
217
|
-
this.logsBox.setContent('\n {gray-fg}No activity yet{/gray-fg}');
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const LOG_ICONS = {
|
|
221
|
-
success: '{green-fg}✅{/}',
|
|
222
|
-
info: '{blue-fg}ℹ️ {/}',
|
|
223
|
-
warning: '{yellow-fg}⚠️ {/}',
|
|
224
|
-
error: '{red-fg}❌{/}',
|
|
225
|
-
tool: '{cyan-fg}🔧{/}',
|
|
226
|
-
};
|
|
227
|
-
const lines = this.activityLogs
|
|
228
|
-
.slice(-20) // Last 20 entries
|
|
229
|
-
.map(entry => {
|
|
230
|
-
const time = entry.timestamp.toLocaleTimeString('en-US', { hour12: false });
|
|
231
|
-
const icon = LOG_ICONS[entry.type];
|
|
232
|
-
return `{gray-fg}[${time}]{/} ${icon} ${entry.message}`;
|
|
233
|
-
});
|
|
234
|
-
this.logsBox.setContent('\n' + lines.join('\n') + '\n');
|
|
235
|
-
// Auto-scroll to bottom
|
|
236
|
-
this.logsBox.setScrollPerc(100);
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Log activity
|
|
240
|
-
*/
|
|
241
|
-
logActivity(type, message) {
|
|
242
|
-
this.activityLogs.push({
|
|
243
|
-
timestamp: new Date(),
|
|
244
|
-
type,
|
|
245
|
-
message,
|
|
246
|
-
});
|
|
247
|
-
// Keep only last 100 entries in memory
|
|
248
|
-
if (this.activityLogs.length > 100) {
|
|
249
|
-
this.activityLogs = this.activityLogs.slice(-100);
|
|
250
|
-
}
|
|
251
|
-
this.render();
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Mark task as completed and remove from list
|
|
255
|
-
*/
|
|
256
|
-
markTaskCompleted(taskId) {
|
|
257
|
-
const task = this.tasks.find(t => t.id === taskId);
|
|
258
|
-
if (task) {
|
|
259
|
-
task.status = 'completed';
|
|
260
|
-
this.logActivity('success', `Task completed: ${task.title}`);
|
|
261
|
-
// Remove from active tasks
|
|
262
|
-
this.tasks = this.tasks.filter(t => t.id !== taskId);
|
|
263
|
-
this.render();
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Mark task as in progress
|
|
268
|
-
*/
|
|
269
|
-
markTaskInProgress(taskId) {
|
|
270
|
-
const task = this.tasks.find(t => t.id === taskId);
|
|
271
|
-
if (task) {
|
|
272
|
-
task.status = 'in-progress';
|
|
273
|
-
if (!task.metadata)
|
|
274
|
-
task.metadata = {};
|
|
275
|
-
task.metadata.startedAt = new Date().toISOString();
|
|
276
|
-
this.logActivity('info', `Task started: ${task.title}`);
|
|
277
|
-
this.render();
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Render all components
|
|
282
|
-
*/
|
|
283
|
-
render() {
|
|
284
|
-
this.renderActiveTasks();
|
|
285
|
-
this.renderProgressBar();
|
|
286
|
-
this.renderActivityLogs();
|
|
287
|
-
this.screen.render();
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Start watching
|
|
291
|
-
*/
|
|
292
|
-
async start() {
|
|
293
|
-
if (this.isRunning) {
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
this.isRunning = true;
|
|
297
|
-
try {
|
|
298
|
-
await this.openspecManager.initialize();
|
|
299
|
-
const data = await this.openspecManager.loadOpenSpec();
|
|
300
|
-
this.tasks = data.tasks;
|
|
301
|
-
this.logActivity('info', 'Watcher started');
|
|
302
|
-
this.render();
|
|
303
|
-
// Animation timer (for loading spinner)
|
|
304
|
-
this.refreshTimer = setInterval(() => {
|
|
305
|
-
this.animationFrame++;
|
|
306
|
-
// Only render if there are in-progress tasks (to show spinner)
|
|
307
|
-
const hasInProgress = this.tasks.some(t => t.status === 'in-progress');
|
|
308
|
-
if (hasInProgress) {
|
|
309
|
-
this.render();
|
|
310
|
-
}
|
|
311
|
-
}, this.options.refreshInterval);
|
|
312
|
-
}
|
|
313
|
-
catch (error) {
|
|
314
|
-
this.logActivity('error', `Failed to start: ${error}`);
|
|
315
|
-
throw error;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Stop watching
|
|
320
|
-
*/
|
|
321
|
-
stop() {
|
|
322
|
-
if (!this.isRunning) {
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
this.isRunning = false;
|
|
326
|
-
if (this.refreshTimer) {
|
|
327
|
-
clearInterval(this.refreshTimer);
|
|
328
|
-
this.refreshTimer = undefined;
|
|
329
|
-
}
|
|
330
|
-
this.screen.destroy();
|
|
331
|
-
process.exit(0);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Factory function
|
|
336
|
-
*/
|
|
337
|
-
export function createModernConsole(options) {
|
|
338
|
-
return new ModernConsole(options);
|
|
339
|
-
}
|
|
340
|
-
//# sourceMappingURL=modern-console-new.js.map
|