@hivehub/rulebook 1.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/LICENSE +191 -0
- package/README.md +539 -0
- package/dist/agents/claude-code.d.ts +69 -0
- package/dist/agents/claude-code.d.ts.map +1 -0
- package/dist/agents/claude-code.js +180 -0
- package/dist/agents/claude-code.js.map +1 -0
- package/dist/agents/cursor-agent.d.ts +184 -0
- package/dist/agents/cursor-agent.d.ts.map +1 -0
- package/dist/agents/cursor-agent.js +299 -0
- package/dist/agents/cursor-agent.js.map +1 -0
- package/dist/agents/gemini-cli.d.ts +69 -0
- package/dist/agents/gemini-cli.d.ts.map +1 -0
- package/dist/agents/gemini-cli.js +180 -0
- package/dist/agents/gemini-cli.js.map +1 -0
- package/dist/cli/commands.d.ts +57 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +1370 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/docs-prompts.d.ts +3 -0
- package/dist/cli/docs-prompts.d.ts.map +1 -0
- package/dist/cli/docs-prompts.js +45 -0
- package/dist/cli/docs-prompts.js.map +1 -0
- package/dist/cli/prompts.d.ts +6 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +376 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/core/agent-manager.d.ts +89 -0
- package/dist/core/agent-manager.d.ts.map +1 -0
- package/dist/core/agent-manager.js +546 -0
- package/dist/core/agent-manager.js.map +1 -0
- package/dist/core/auto-fixer.d.ts +14 -0
- package/dist/core/auto-fixer.d.ts.map +1 -0
- package/dist/core/auto-fixer.js +207 -0
- package/dist/core/auto-fixer.js.map +1 -0
- package/dist/core/changelog-generator.d.ts +44 -0
- package/dist/core/changelog-generator.d.ts.map +1 -0
- package/dist/core/changelog-generator.js +222 -0
- package/dist/core/changelog-generator.js.map +1 -0
- package/dist/core/cli-bridge.d.ts +113 -0
- package/dist/core/cli-bridge.d.ts.map +1 -0
- package/dist/core/cli-bridge.js +1094 -0
- package/dist/core/cli-bridge.js.map +1 -0
- package/dist/core/config-manager.d.ts +65 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +266 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/coverage-checker.d.ts +14 -0
- package/dist/core/coverage-checker.d.ts.map +1 -0
- package/dist/core/coverage-checker.js +176 -0
- package/dist/core/coverage-checker.js.map +1 -0
- package/dist/core/custom-templates.d.ts +27 -0
- package/dist/core/custom-templates.d.ts.map +1 -0
- package/dist/core/custom-templates.js +122 -0
- package/dist/core/custom-templates.js.map +1 -0
- package/dist/core/dependency-checker.d.ts +21 -0
- package/dist/core/dependency-checker.d.ts.map +1 -0
- package/dist/core/dependency-checker.js +247 -0
- package/dist/core/dependency-checker.js.map +1 -0
- package/dist/core/detector.d.ts +3 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +1443 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/docs-generator.d.ts +9 -0
- package/dist/core/docs-generator.d.ts.map +1 -0
- package/dist/core/docs-generator.js +531 -0
- package/dist/core/docs-generator.js.map +1 -0
- package/dist/core/generator.d.ts +16 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +561 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/gitignore-generator.d.ts +13 -0
- package/dist/core/gitignore-generator.d.ts.map +1 -0
- package/dist/core/gitignore-generator.js +307 -0
- package/dist/core/gitignore-generator.js.map +1 -0
- package/dist/core/health-scorer.d.ts +22 -0
- package/dist/core/health-scorer.d.ts.map +1 -0
- package/dist/core/health-scorer.js +395 -0
- package/dist/core/health-scorer.js.map +1 -0
- package/dist/core/logger.d.ts +116 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +289 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/merger.d.ts +6 -0
- package/dist/core/merger.d.ts.map +1 -0
- package/dist/core/merger.js +131 -0
- package/dist/core/merger.js.map +1 -0
- package/dist/core/migrator.d.ts +19 -0
- package/dist/core/migrator.d.ts.map +1 -0
- package/dist/core/migrator.js +102 -0
- package/dist/core/migrator.js.map +1 -0
- package/dist/core/minimal-scaffolder.d.ts +8 -0
- package/dist/core/minimal-scaffolder.d.ts.map +1 -0
- package/dist/core/minimal-scaffolder.js +51 -0
- package/dist/core/minimal-scaffolder.js.map +1 -0
- package/dist/core/modern-console-new.d.ts +81 -0
- package/dist/core/modern-console-new.d.ts.map +1 -0
- package/dist/core/modern-console-new.js +340 -0
- package/dist/core/modern-console-new.js.map +1 -0
- package/dist/core/modern-console.d.ts +99 -0
- package/dist/core/modern-console.d.ts.map +1 -0
- package/dist/core/modern-console.js +568 -0
- package/dist/core/modern-console.js.map +1 -0
- package/dist/core/openspec-manager.d.ts +133 -0
- package/dist/core/openspec-manager.d.ts.map +1 -0
- package/dist/core/openspec-manager.js +605 -0
- package/dist/core/openspec-manager.js.map +1 -0
- package/dist/core/openspec-migrator.d.ts +27 -0
- package/dist/core/openspec-migrator.d.ts.map +1 -0
- package/dist/core/openspec-migrator.js +255 -0
- package/dist/core/openspec-migrator.js.map +1 -0
- package/dist/core/task-manager.d.ts +65 -0
- package/dist/core/task-manager.d.ts.map +1 -0
- package/dist/core/task-manager.js +318 -0
- package/dist/core/task-manager.js.map +1 -0
- package/dist/core/test-task-manager.d.ts +49 -0
- package/dist/core/test-task-manager.d.ts.map +1 -0
- package/dist/core/test-task-manager.js +121 -0
- package/dist/core/test-task-manager.js.map +1 -0
- package/dist/core/validator.d.ts +21 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +177 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/version-bumper.d.ts +19 -0
- package/dist/core/version-bumper.d.ts.map +1 -0
- package/dist/core/version-bumper.js +180 -0
- package/dist/core/version-bumper.js.map +1 -0
- package/dist/core/watcher.d.ts +9 -0
- package/dist/core/watcher.d.ts.map +1 -0
- package/dist/core/watcher.js +22 -0
- package/dist/core/watcher.js.map +1 -0
- package/dist/core/workflow-generator.d.ts +10 -0
- package/dist/core/workflow-generator.d.ts.map +1 -0
- package/dist/core/workflow-generator.js +279 -0
- package/dist/core/workflow-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +159 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/handlers/archive-task.d.ts +17 -0
- package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
- package/dist/mcp/handlers/archive-task.js +36 -0
- package/dist/mcp/handlers/archive-task.js.map +1 -0
- package/dist/mcp/handlers/create-task.d.ts +17 -0
- package/dist/mcp/handlers/create-task.d.ts.map +1 -0
- package/dist/mcp/handlers/create-task.js +56 -0
- package/dist/mcp/handlers/create-task.js.map +1 -0
- package/dist/mcp/handlers/list-tasks.d.ts +22 -0
- package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
- package/dist/mcp/handlers/list-tasks.js +42 -0
- package/dist/mcp/handlers/list-tasks.js.map +1 -0
- package/dist/mcp/handlers/show-task.d.ts +25 -0
- package/dist/mcp/handlers/show-task.d.ts.map +1 -0
- package/dist/mcp/handlers/show-task.js +43 -0
- package/dist/mcp/handlers/show-task.js.map +1 -0
- package/dist/mcp/handlers/update-task.d.ts +17 -0
- package/dist/mcp/handlers/update-task.d.ts.map +1 -0
- package/dist/mcp/handlers/update-task.js +35 -0
- package/dist/mcp/handlers/update-task.js.map +1 -0
- package/dist/mcp/handlers/validate-task.d.ts +15 -0
- package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
- package/dist/mcp/handlers/validate-task.js +27 -0
- package/dist/mcp/handlers/validate-task.js.map +1 -0
- package/dist/mcp/rulebook-config.d.ts +22 -0
- package/dist/mcp/rulebook-config.d.ts.map +1 -0
- package/dist/mcp/rulebook-config.js +65 -0
- package/dist/mcp/rulebook-config.js.map +1 -0
- package/dist/mcp/rulebook-server.d.ts +4 -0
- package/dist/mcp/rulebook-server.d.ts.map +1 -0
- package/dist/mcp/rulebook-server.js +246 -0
- package/dist/mcp/rulebook-server.js.map +1 -0
- package/dist/types.d.ts +190 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file-system.d.ts +9 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +51 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/git-hooks.d.ts +8 -0
- package/dist/utils/git-hooks.d.ts.map +1 -0
- package/dist/utils/git-hooks.js +440 -0
- package/dist/utils/git-hooks.js.map +1 -0
- package/dist/utils/rulesignore.d.ts +9 -0
- package/dist/utils/rulesignore.d.ts.map +1 -0
- package/dist/utils/rulesignore.js +42 -0
- package/dist/utils/rulesignore.js.map +1 -0
- package/package.json +106 -0
- package/templates/cli/AIDER.md +49 -0
- package/templates/cli/AMAZON_Q.md +25 -0
- package/templates/cli/AUGGIE.md +32 -0
- package/templates/cli/CLAUDE.md +32 -0
- package/templates/cli/CLAUDE_CODE.md +35 -0
- package/templates/cli/CLINE.md +32 -0
- package/templates/cli/CODEBUDDY.md +20 -0
- package/templates/cli/CODEIUM.md +20 -0
- package/templates/cli/CODEX.md +21 -0
- package/templates/cli/CONTINUE.md +34 -0
- package/templates/cli/CURSOR_CLI.md +28 -0
- package/templates/cli/FACTORY.md +18 -0
- package/templates/cli/GEMINI.md +35 -0
- package/templates/cli/KILOCODE.md +18 -0
- package/templates/cli/OPENCODE.md +18 -0
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
- package/templates/commands/rulebook-task-apply.md +67 -0
- package/templates/commands/rulebook-task-archive.md +70 -0
- package/templates/commands/rulebook-task-create.md +93 -0
- package/templates/commands/rulebook-task-list.md +42 -0
- package/templates/commands/rulebook-task-show.md +52 -0
- package/templates/commands/rulebook-task-validate.md +53 -0
- package/templates/core/AGENT_AUTOMATION.md +184 -0
- package/templates/core/DAG.md +304 -0
- package/templates/core/DOCUMENTATION_RULES.md +37 -0
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
- package/templates/core/RULEBOOK.md +1874 -0
- package/templates/frameworks/ANGULAR.md +36 -0
- package/templates/frameworks/DJANGO.md +83 -0
- package/templates/frameworks/ELECTRON.md +147 -0
- package/templates/frameworks/FLASK.md +38 -0
- package/templates/frameworks/FLUTTER.md +55 -0
- package/templates/frameworks/JQUERY.md +32 -0
- package/templates/frameworks/LARAVEL.md +38 -0
- package/templates/frameworks/NESTJS.md +43 -0
- package/templates/frameworks/NEXTJS.md +127 -0
- package/templates/frameworks/NUXT.md +40 -0
- package/templates/frameworks/RAILS.md +66 -0
- package/templates/frameworks/REACT.md +38 -0
- package/templates/frameworks/REACT_NATIVE.md +47 -0
- package/templates/frameworks/SPRING.md +39 -0
- package/templates/frameworks/SYMFONY.md +36 -0
- package/templates/frameworks/VUE.md +36 -0
- package/templates/frameworks/ZEND.md +35 -0
- package/templates/git/CI_CD_PATTERNS.md +661 -0
- package/templates/git/GITHUB_ACTIONS.md +728 -0
- package/templates/git/GITLAB_CI.md +730 -0
- package/templates/git/GIT_WORKFLOW.md +1157 -0
- package/templates/git/SECRETS_MANAGEMENT.md +585 -0
- package/templates/hooks/COMMIT_MSG.md +530 -0
- package/templates/hooks/POST_CHECKOUT.md +546 -0
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
- package/templates/hooks/PRE_COMMIT.md +414 -0
- package/templates/hooks/PRE_PUSH.md +601 -0
- package/templates/hooks/csharp-pre-commit.sh +23 -0
- package/templates/hooks/csharp-pre-push.sh +23 -0
- package/templates/hooks/dart-pre-commit.sh +30 -0
- package/templates/hooks/dart-pre-push.sh +25 -0
- package/templates/hooks/elixir-pre-commit.sh +32 -0
- package/templates/hooks/elixir-pre-push.sh +31 -0
- package/templates/hooks/erlang-pre-commit.sh +30 -0
- package/templates/hooks/erlang-pre-push.sh +37 -0
- package/templates/hooks/go-pre-commit.sh +40 -0
- package/templates/hooks/go-pre-push.sh +31 -0
- package/templates/hooks/haskell-pre-commit.sh +41 -0
- package/templates/hooks/haskell-pre-push.sh +37 -0
- package/templates/hooks/java-pre-commit.sh +34 -0
- package/templates/hooks/java-pre-push.sh +24 -0
- package/templates/hooks/kotlin-pre-commit.sh +32 -0
- package/templates/hooks/kotlin-pre-push.sh +16 -0
- package/templates/hooks/php-pre-commit.sh +36 -0
- package/templates/hooks/php-pre-push.sh +26 -0
- package/templates/hooks/python-pre-commit.sh +51 -0
- package/templates/hooks/python-pre-push.sh +25 -0
- package/templates/hooks/ruby-pre-commit.sh +33 -0
- package/templates/hooks/ruby-pre-push.sh +32 -0
- package/templates/hooks/rust-pre-commit.sh +30 -0
- package/templates/hooks/rust-pre-push.sh +30 -0
- package/templates/hooks/scala-pre-commit.sh +32 -0
- package/templates/hooks/scala-pre-push.sh +24 -0
- package/templates/hooks/swift-pre-commit.sh +25 -0
- package/templates/hooks/swift-pre-push.sh +23 -0
- package/templates/hooks/typescript-pre-commit.sh +37 -0
- package/templates/hooks/typescript-pre-push.sh +36 -0
- package/templates/ides/COPILOT.md +37 -0
- package/templates/ides/CURSOR.md +43 -0
- package/templates/ides/JETBRAINS_AI.md +35 -0
- package/templates/ides/REPLIT.md +36 -0
- package/templates/ides/TABNINE.md +29 -0
- package/templates/ides/VSCODE.md +40 -0
- package/templates/ides/WINDSURF.md +36 -0
- package/templates/ides/ZED.md +32 -0
- package/templates/languages/ADA.md +58 -0
- package/templates/languages/C.md +333 -0
- package/templates/languages/CPP.md +743 -0
- package/templates/languages/CSHARP.md +417 -0
- package/templates/languages/DART.md +332 -0
- package/templates/languages/ELIXIR.md +454 -0
- package/templates/languages/ERLANG.md +361 -0
- package/templates/languages/GO.md +645 -0
- package/templates/languages/HASKELL.md +177 -0
- package/templates/languages/JAVA.md +607 -0
- package/templates/languages/JAVASCRIPT.md +631 -0
- package/templates/languages/JULIA.md +97 -0
- package/templates/languages/KOTLIN.md +511 -0
- package/templates/languages/LISP.md +100 -0
- package/templates/languages/LUA.md +74 -0
- package/templates/languages/OBJECTIVEC.md +90 -0
- package/templates/languages/PHP.md +416 -0
- package/templates/languages/PYTHON.md +682 -0
- package/templates/languages/R.md +350 -0
- package/templates/languages/RUBY.md +421 -0
- package/templates/languages/RUST.md +477 -0
- package/templates/languages/SAS.md +73 -0
- package/templates/languages/SCALA.md +348 -0
- package/templates/languages/SOLIDITY.md +580 -0
- package/templates/languages/SQL.md +137 -0
- package/templates/languages/SWIFT.md +466 -0
- package/templates/languages/TYPESCRIPT.md +591 -0
- package/templates/languages/ZIG.md +265 -0
- package/templates/modules/ATLASSIAN.md +255 -0
- package/templates/modules/CONTEXT7.md +54 -0
- package/templates/modules/FIGMA.md +267 -0
- package/templates/modules/GITHUB_MCP.md +64 -0
- package/templates/modules/GRAFANA.md +328 -0
- package/templates/modules/NOTION.md +247 -0
- package/templates/modules/PLAYWRIGHT.md +90 -0
- package/templates/modules/RULEBOOK_MCP.md +156 -0
- package/templates/modules/SERENA.md +337 -0
- package/templates/modules/SUPABASE.md +223 -0
- package/templates/modules/SYNAP.md +69 -0
- package/templates/modules/VECTORIZER.md +63 -0
- package/templates/services/AZURE_BLOB.md +184 -0
- package/templates/services/CASSANDRA.md +239 -0
- package/templates/services/DYNAMODB.md +308 -0
- package/templates/services/ELASTICSEARCH.md +347 -0
- package/templates/services/GCS.md +178 -0
- package/templates/services/INFLUXDB.md +265 -0
- package/templates/services/KAFKA.md +341 -0
- package/templates/services/MARIADB.md +183 -0
- package/templates/services/MEMCACHED.md +242 -0
- package/templates/services/MINIO.md +201 -0
- package/templates/services/MONGODB.md +268 -0
- package/templates/services/MYSQL.md +358 -0
- package/templates/services/NEO4J.md +247 -0
- package/templates/services/ORACLE.md +290 -0
- package/templates/services/POSTGRESQL.md +326 -0
- package/templates/services/RABBITMQ.md +286 -0
- package/templates/services/REDIS.md +292 -0
- package/templates/services/S3.md +298 -0
- package/templates/services/SQLITE.md +294 -0
- package/templates/services/SQLSERVER.md +294 -0
- package/templates/workflows/codespell.yml +31 -0
- package/templates/workflows/cpp-lint.yml +47 -0
- package/templates/workflows/cpp-publish.yml +119 -0
- package/templates/workflows/cpp-test.yml +77 -0
- package/templates/workflows/dotnet-lint.yml +29 -0
- package/templates/workflows/dotnet-publish.yml +40 -0
- package/templates/workflows/dotnet-test.yml +41 -0
- package/templates/workflows/elixir-lint.yml +45 -0
- package/templates/workflows/elixir-publish.yml +49 -0
- package/templates/workflows/elixir-test.yml +54 -0
- package/templates/workflows/erlang-lint.yml +47 -0
- package/templates/workflows/erlang-test.yml +62 -0
- package/templates/workflows/go-lint.yml +39 -0
- package/templates/workflows/go-publish.yml +95 -0
- package/templates/workflows/go-test.yml +59 -0
- package/templates/workflows/java-lint.yml +60 -0
- package/templates/workflows/java-publish.yml +120 -0
- package/templates/workflows/java-test.yml +85 -0
- package/templates/workflows/kotlin-lint.yml +34 -0
- package/templates/workflows/kotlin-publish.yml +56 -0
- package/templates/workflows/kotlin-test.yml +48 -0
- package/templates/workflows/php-lint.yml +39 -0
- package/templates/workflows/php-publish.yml +50 -0
- package/templates/workflows/php-test.yml +54 -0
- package/templates/workflows/python-lint.yml +47 -0
- package/templates/workflows/python-publish.yml +91 -0
- package/templates/workflows/python-test.yml +59 -0
- package/templates/workflows/rust-lint.yml +54 -0
- package/templates/workflows/rust-publish.yml +66 -0
- package/templates/workflows/rust-test.yml +75 -0
- package/templates/workflows/solidity-lint.yml +41 -0
- package/templates/workflows/solidity-test.yml +47 -0
- package/templates/workflows/swift-lint.yml +32 -0
- package/templates/workflows/swift-publish.yml +58 -0
- package/templates/workflows/swift-test.yml +44 -0
- package/templates/workflows/typescript-lint.yml +61 -0
- package/templates/workflows/typescript-publish.yml +60 -0
- package/templates/workflows/typescript-test.yml +73 -0
- package/templates/workflows/zig-lint.yml +27 -0
- package/templates/workflows/zig-test.yml +40 -0
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { readFile, fileExists, writeFile, ensureDir } from '../utils/file-system.js';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname } from 'path';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
// Resolve templates directory (handles both dev and production)
|
|
8
|
+
function getTemplatesDir() {
|
|
9
|
+
// In production (dist/), templates are at package root
|
|
10
|
+
// In development (src/), templates are at package root
|
|
11
|
+
// Both resolve to same location
|
|
12
|
+
return path.join(__dirname, '..', '..', 'templates');
|
|
13
|
+
}
|
|
14
|
+
// Helper to read core template files (AGENT_AUTOMATION, DOCUMENTATION_RULES, QUALITY_ENFORCEMENT, RULEBOOK)
|
|
15
|
+
async function generateCoreRules(name) {
|
|
16
|
+
const templatesDir = path.join(getTemplatesDir(), 'core');
|
|
17
|
+
const templatePath = path.join(templatesDir, `${name.toUpperCase()}.md`);
|
|
18
|
+
if (await fileExists(templatePath)) {
|
|
19
|
+
return await readFile(templatePath);
|
|
20
|
+
}
|
|
21
|
+
return `<!-- ${name.toUpperCase()}:START -->\n# ${name.charAt(0).toUpperCase() + name.slice(1)} Rules\n\nCore rules for ${name}.\n<!-- ${name.toUpperCase()}:END -->\n`;
|
|
22
|
+
}
|
|
23
|
+
export async function generateAgentsContent(config) {
|
|
24
|
+
const sections = [];
|
|
25
|
+
// Header comment
|
|
26
|
+
sections.push('<!-- RULEBOOK:START -->');
|
|
27
|
+
sections.push('# Project Rules');
|
|
28
|
+
sections.push('');
|
|
29
|
+
sections.push('Generated by @hivellm/rulebook');
|
|
30
|
+
sections.push(`Generated at: ${new Date().toISOString()}`);
|
|
31
|
+
sections.push('');
|
|
32
|
+
const rulebookDir = config.rulebookDir || 'rulebook';
|
|
33
|
+
// RULEBOOK.md has HIGHEST PRECEDENCE - must be first and most prominent
|
|
34
|
+
sections.push('## ⚠️ CRITICAL: Task Management Rules (HIGHEST PRECEDENCE)');
|
|
35
|
+
sections.push('');
|
|
36
|
+
sections.push('**MANDATORY**: All task creation MUST follow Rulebook task management system.');
|
|
37
|
+
sections.push('');
|
|
38
|
+
sections.push(`**📋 ALWAYS reference \`/${rulebookDir}/RULEBOOK.md\` FIRST before creating any tasks or when "openspec" is mentioned.**`);
|
|
39
|
+
sections.push('');
|
|
40
|
+
sections.push('**Rules from RULEBOOK.md take precedence over all other rules in this file.**');
|
|
41
|
+
sections.push('');
|
|
42
|
+
sections.push('**Key Requirements:**');
|
|
43
|
+
sections.push('- ✅ Context7 MCP is REQUIRED for task creation');
|
|
44
|
+
sections.push('- ✅ All tasks MUST follow OpenSpec-compatible format');
|
|
45
|
+
sections.push('- ✅ Use `rulebook task create` instead of OpenSpec commands');
|
|
46
|
+
sections.push('- ✅ Always validate task format before committing');
|
|
47
|
+
sections.push('- ❌ NEVER create tasks without checking RULEBOOK.md format requirements');
|
|
48
|
+
sections.push('- ❌ NEVER use OpenSpec commands - use Rulebook task system instead');
|
|
49
|
+
sections.push('');
|
|
50
|
+
sections.push('### ⚠️ CRITICAL: Task File Structure Rules');
|
|
51
|
+
sections.push('');
|
|
52
|
+
sections.push('**MANDATORY**: When creating or updating tasks, you MUST follow the correct file structure:');
|
|
53
|
+
sections.push('');
|
|
54
|
+
sections.push('**✅ CORRECT File Structure:**');
|
|
55
|
+
sections.push('- `proposal.md` - **Why** and **What Changes** (detailed explanations go here)');
|
|
56
|
+
sections.push('- `tasks.md` - **ONLY checklist items** (simple `- [ ]` or `- [x]` format)');
|
|
57
|
+
sections.push('- `specs/<module>/spec.md` - **Technical specifications** (SHALL/MUST requirements)');
|
|
58
|
+
sections.push('- `design.md` - **Technical design decisions** (optional, for complex features)');
|
|
59
|
+
sections.push('');
|
|
60
|
+
sections.push('**❌ FORBIDDEN Practices:**');
|
|
61
|
+
sections.push('- ❌ **NEVER** add long explanations or specifications in `tasks.md`');
|
|
62
|
+
sections.push('- ❌ **NEVER** put technical details in `tasks.md` (use `specs/` instead)');
|
|
63
|
+
sections.push('- ❌ **NEVER** create `README.md` or `README` files in task directories');
|
|
64
|
+
sections.push('- ❌ **NEVER** create `PROCESS.md` or `PROCESS` files in task directories');
|
|
65
|
+
sections.push('- ❌ **NEVER** create any file not listed in the correct structure above');
|
|
66
|
+
sections.push('');
|
|
67
|
+
sections.push('**What Goes Where:**');
|
|
68
|
+
sections.push('');
|
|
69
|
+
sections.push('1. **`proposal.md`** - Use for:');
|
|
70
|
+
sections.push(' - Detailed "Why" explanations (minimum 20 characters)');
|
|
71
|
+
sections.push(' - "What Changes" descriptions');
|
|
72
|
+
sections.push(' - Impact analysis');
|
|
73
|
+
sections.push(' - Business/technical rationale');
|
|
74
|
+
sections.push('');
|
|
75
|
+
sections.push('2. **`tasks.md`** - Use ONLY for:');
|
|
76
|
+
sections.push(' - Simple checklist items: `- [ ] Task description`');
|
|
77
|
+
sections.push(' - Status updates: `- [x] Completed task`');
|
|
78
|
+
sections.push(' - Brief comments: `<!-- tested, coverage: 95% -->`');
|
|
79
|
+
sections.push(' - **DO NOT** add long explanations, specifications, or technical details here');
|
|
80
|
+
sections.push('');
|
|
81
|
+
sections.push('3. **`specs/<module>/spec.md`** - Use for:');
|
|
82
|
+
sections.push(' - Technical specifications with SHALL/MUST requirements');
|
|
83
|
+
sections.push(' - Scenario definitions (Given/When/Then)');
|
|
84
|
+
sections.push(' - Delta operations (ADDED/MODIFIED/REMOVED)');
|
|
85
|
+
sections.push(' - All detailed technical requirements');
|
|
86
|
+
sections.push('');
|
|
87
|
+
sections.push('4. **`design.md`** - Use for (optional):');
|
|
88
|
+
sections.push(' - Architecture decisions');
|
|
89
|
+
sections.push(' - Technical design rationale');
|
|
90
|
+
sections.push(' - Complex implementation details');
|
|
91
|
+
sections.push('');
|
|
92
|
+
sections.push('**Example of WRONG usage:**');
|
|
93
|
+
sections.push('```markdown');
|
|
94
|
+
sections.push('# tasks.md (WRONG - too much detail)');
|
|
95
|
+
sections.push('');
|
|
96
|
+
sections.push('## Implementation');
|
|
97
|
+
sections.push('- [ ] Create authentication system');
|
|
98
|
+
sections.push(' The system SHALL implement JWT-based authentication...');
|
|
99
|
+
sections.push(' Users MUST be able to login with email and password...');
|
|
100
|
+
sections.push(' The system MUST validate tokens...');
|
|
101
|
+
sections.push('```');
|
|
102
|
+
sections.push('');
|
|
103
|
+
sections.push('**Example of CORRECT usage:**');
|
|
104
|
+
sections.push('```markdown');
|
|
105
|
+
sections.push('# tasks.md (CORRECT - simple checklist)');
|
|
106
|
+
sections.push('');
|
|
107
|
+
sections.push('## 1. Implementation Phase');
|
|
108
|
+
sections.push('- [ ] 1.1 Create authentication module');
|
|
109
|
+
sections.push('- [ ] 1.2 Add JWT token generation');
|
|
110
|
+
sections.push('- [ ] 1.3 Implement password validation');
|
|
111
|
+
sections.push('');
|
|
112
|
+
sections.push('# specs/auth/spec.md (CORRECT - specifications here)');
|
|
113
|
+
sections.push('');
|
|
114
|
+
sections.push('## ADDED Requirements');
|
|
115
|
+
sections.push('');
|
|
116
|
+
sections.push('### Requirement: Authentication System');
|
|
117
|
+
sections.push('The system SHALL implement JWT-based authentication.');
|
|
118
|
+
sections.push('');
|
|
119
|
+
sections.push('#### Scenario: User Login');
|
|
120
|
+
sections.push('Given a user with valid credentials');
|
|
121
|
+
sections.push('When the user submits login form');
|
|
122
|
+
sections.push('Then the system MUST return a JWT token');
|
|
123
|
+
sections.push('```');
|
|
124
|
+
sections.push('');
|
|
125
|
+
sections.push('**Remember:**');
|
|
126
|
+
sections.push('- ✅ `tasks.md` = Simple checklist only');
|
|
127
|
+
sections.push('- ✅ `proposal.md` = Why and what changes');
|
|
128
|
+
sections.push('- ✅ `specs/` = Technical specifications');
|
|
129
|
+
sections.push('- ❌ No README, PROCESS, or other files');
|
|
130
|
+
sections.push('');
|
|
131
|
+
sections.push(`**For complete task management guidelines, see: \`/${rulebookDir}/RULEBOOK.md\`**`);
|
|
132
|
+
sections.push('');
|
|
133
|
+
sections.push('---');
|
|
134
|
+
sections.push('');
|
|
135
|
+
// Core rules summary (detailed rules in /rulebook/)
|
|
136
|
+
sections.push('## Core Rules');
|
|
137
|
+
sections.push('');
|
|
138
|
+
sections.push('This project uses @hivellm/rulebook standards.');
|
|
139
|
+
sections.push('');
|
|
140
|
+
sections.push('**CRITICAL RULES:**');
|
|
141
|
+
sections.push('1. **ALWAYS check `RULEBOOK.md` first** when creating tasks or if "openspec" is mentioned');
|
|
142
|
+
sections.push(`2. Write tests first (${config.coverageThreshold}%+ coverage required)`);
|
|
143
|
+
sections.push('3. Run quality checks before committing:');
|
|
144
|
+
sections.push(' - Type check / Compiler check');
|
|
145
|
+
sections.push(' - Linter (no warnings allowed)');
|
|
146
|
+
sections.push(' - All tests (100% pass rate)');
|
|
147
|
+
sections.push(' - Coverage check');
|
|
148
|
+
sections.push('4. Update docs/ when implementing features');
|
|
149
|
+
sections.push('5. Follow strict documentation structure');
|
|
150
|
+
sections.push('6. **NEVER run destructive deletions (`rm -rf`) in this repository; when adding submodules always use `git submodule add`.**');
|
|
151
|
+
sections.push('7. **Temporary files and scripts**:');
|
|
152
|
+
sections.push(' - ✅ ALL scripts MUST be created in `/scripts` directory');
|
|
153
|
+
sections.push(' - ✅ ALL temporary files (test, log, debug) MUST be in `/scripts`');
|
|
154
|
+
sections.push(' - ✅ ALL temporary files MUST be removed immediately after use (MANDATORY)');
|
|
155
|
+
sections.push(' - ❌ NEVER create temporary files in project root or outside `/scripts`');
|
|
156
|
+
sections.push(' - ❌ NEVER leave temporary files after use - clean up before committing');
|
|
157
|
+
sections.push('');
|
|
158
|
+
sections.push('## Detailed Rules');
|
|
159
|
+
sections.push('');
|
|
160
|
+
sections.push(`For comprehensive rules, see the corresponding files in \`/${rulebookDir}/\`:`);
|
|
161
|
+
sections.push('');
|
|
162
|
+
// RULEBOOK.md is always first in the list (highest precedence)
|
|
163
|
+
sections.push(`- \`/${rulebookDir}/RULEBOOK.md\` - **Task management rules (HIGHEST PRECEDENCE)**`);
|
|
164
|
+
// Only reference QUALITY_ENFORCEMENT if not in light mode
|
|
165
|
+
if (!config.lightMode) {
|
|
166
|
+
sections.push(`- \`/${rulebookDir}/QUALITY_ENFORCEMENT.md\` - Quality enforcement rules`);
|
|
167
|
+
}
|
|
168
|
+
// Only reference GIT if enabled
|
|
169
|
+
if (config.includeGitWorkflow) {
|
|
170
|
+
sections.push(`- \`/${rulebookDir}/GIT.md\` - Git workflow rules`);
|
|
171
|
+
}
|
|
172
|
+
sections.push('');
|
|
173
|
+
sections.push(`Language-specific rules are in \`/${rulebookDir}/\`.`);
|
|
174
|
+
sections.push(`Module-specific patterns are in \`/${rulebookDir}/\`.`);
|
|
175
|
+
sections.push('');
|
|
176
|
+
sections.push('When in doubt, ask to review @AGENTS.md first.');
|
|
177
|
+
sections.push('');
|
|
178
|
+
sections.push('<!-- RULEBOOK:END -->');
|
|
179
|
+
return sections.join('\n');
|
|
180
|
+
}
|
|
181
|
+
export async function generateLanguageRules(language) {
|
|
182
|
+
const templatesDir = path.join(getTemplatesDir(), 'languages');
|
|
183
|
+
const templatePath = path.join(templatesDir, `${language.toUpperCase()}.md`);
|
|
184
|
+
if (await fileExists(templatePath)) {
|
|
185
|
+
return await readFile(templatePath);
|
|
186
|
+
}
|
|
187
|
+
return `<!-- ${language.toUpperCase()}:START -->\n# ${language.charAt(0).toUpperCase() + language.slice(1)} Rules\n\nLanguage-specific rules for ${language}.\n<!-- ${language.toUpperCase()}:END -->\n`;
|
|
188
|
+
}
|
|
189
|
+
export async function generateFrameworkRules(framework) {
|
|
190
|
+
const templatesDir = path.join(getTemplatesDir(), 'frameworks');
|
|
191
|
+
const templatePath = path.join(templatesDir, `${framework.toUpperCase()}.md`);
|
|
192
|
+
if (await fileExists(templatePath)) {
|
|
193
|
+
return await readFile(templatePath);
|
|
194
|
+
}
|
|
195
|
+
const title = framework.charAt(0).toUpperCase() + framework.slice(1);
|
|
196
|
+
return `<!-- ${framework.toUpperCase()}:START -->
|
|
197
|
+
# ${title} Framework Rules
|
|
198
|
+
|
|
199
|
+
Framework-specific rules for ${title}.
|
|
200
|
+
<!-- ${framework.toUpperCase()}:END -->
|
|
201
|
+
`;
|
|
202
|
+
}
|
|
203
|
+
export async function generateModuleRules(module) {
|
|
204
|
+
const templatesDir = path.join(getTemplatesDir(), 'modules');
|
|
205
|
+
const templatePath = path.join(templatesDir, `${module.toUpperCase()}.md`);
|
|
206
|
+
if (await fileExists(templatePath)) {
|
|
207
|
+
return await readFile(templatePath);
|
|
208
|
+
}
|
|
209
|
+
return `<!-- ${module.toUpperCase()}:START -->\n# ${module.charAt(0).toUpperCase() + module.slice(1)} Instructions\n\nModule-specific instructions for ${module}.\n<!-- ${module.toUpperCase()}:END -->\n`;
|
|
210
|
+
}
|
|
211
|
+
export async function generateServiceRules(service) {
|
|
212
|
+
const templatesDir = path.join(getTemplatesDir(), 'services');
|
|
213
|
+
// Convert service name to template filename (e.g., 'azure_blob' -> 'AZURE_BLOB.md')
|
|
214
|
+
const serviceName = service.toUpperCase().replace(/-/g, '_');
|
|
215
|
+
const templatePath = path.join(templatesDir, `${serviceName}.md`);
|
|
216
|
+
if (await fileExists(templatePath)) {
|
|
217
|
+
return await readFile(templatePath);
|
|
218
|
+
}
|
|
219
|
+
const serviceTitle = service
|
|
220
|
+
.split(/[-_]/)
|
|
221
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
222
|
+
.join(' ');
|
|
223
|
+
return `<!-- ${serviceName}:START -->\n# ${serviceTitle} Instructions\n\nService-specific instructions for ${serviceTitle}.\n<!-- ${serviceName}:END -->\n`;
|
|
224
|
+
}
|
|
225
|
+
export async function generateGitRules(pushMode) {
|
|
226
|
+
const templatesDir = path.join(getTemplatesDir(), 'git');
|
|
227
|
+
const templatePath = path.join(templatesDir, 'GIT_WORKFLOW.md');
|
|
228
|
+
let gitRules = '';
|
|
229
|
+
if (await fileExists(templatePath)) {
|
|
230
|
+
gitRules = await readFile(templatePath);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
gitRules = `<!-- GIT:START -->\n# Git Workflow Rules\n\nGit workflow guidelines for this project.\n<!-- GIT:END -->\n`;
|
|
234
|
+
}
|
|
235
|
+
// Add push mode configuration
|
|
236
|
+
const pushModeConfig = `\n**AI Assistant Git Push Mode**: ${pushMode.toUpperCase()}\n\n`;
|
|
237
|
+
const pushModeInstructions = {
|
|
238
|
+
manual: `**CRITICAL**: Never execute \`git push\` commands automatically.
|
|
239
|
+
Always provide push commands for manual execution by the user.
|
|
240
|
+
|
|
241
|
+
Example:
|
|
242
|
+
\`\`\`
|
|
243
|
+
✋ MANUAL ACTION REQUIRED:
|
|
244
|
+
Run these commands manually (SSH password may be required):
|
|
245
|
+
git push origin main
|
|
246
|
+
git push origin v1.0.0
|
|
247
|
+
\`\`\``,
|
|
248
|
+
prompt: `**CRITICAL**: Always ask user permission before pushing.
|
|
249
|
+
|
|
250
|
+
Example:
|
|
251
|
+
\`\`\`
|
|
252
|
+
Ready to push changes. Execute these commands?
|
|
253
|
+
git push origin main
|
|
254
|
+
|
|
255
|
+
[Y/n]:
|
|
256
|
+
\`\`\``,
|
|
257
|
+
auto: `**INFO**: Automatic push enabled.
|
|
258
|
+
AI assistants may execute push commands automatically.
|
|
259
|
+
|
|
260
|
+
⚠️ Only use this mode if:
|
|
261
|
+
- SSH key has no password
|
|
262
|
+
- GitHub CLI is authenticated
|
|
263
|
+
- You trust the AI assistant completely`,
|
|
264
|
+
};
|
|
265
|
+
// Insert push mode config after <!-- GIT:START -->
|
|
266
|
+
gitRules = gitRules.replace('<!-- GIT:START -->', `<!-- GIT:START -->\n${pushModeConfig}${pushModeInstructions[pushMode]}\n`);
|
|
267
|
+
return gitRules;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Write modular directive file to /rulebook/ directory
|
|
271
|
+
* Adds header and footer comments for consistency
|
|
272
|
+
*/
|
|
273
|
+
async function writeModularFile(projectRoot, fileName, content, rulebookDir = 'rulebook') {
|
|
274
|
+
const rulebookPath = path.join(projectRoot, rulebookDir);
|
|
275
|
+
await ensureDir(rulebookPath);
|
|
276
|
+
const filePath = path.join(rulebookPath, `${fileName}.md`);
|
|
277
|
+
// Add header comment if not already present
|
|
278
|
+
const headerComment = `<!-- ${fileName}:START -->\n`;
|
|
279
|
+
const footerComment = `\n<!-- ${fileName}:END -->`;
|
|
280
|
+
let finalContent = content.trim();
|
|
281
|
+
// Add header if not present
|
|
282
|
+
if (!finalContent.startsWith(headerComment.trim())) {
|
|
283
|
+
finalContent = headerComment + finalContent;
|
|
284
|
+
}
|
|
285
|
+
// Add footer if not present
|
|
286
|
+
if (!finalContent.endsWith(footerComment.trim())) {
|
|
287
|
+
finalContent = finalContent + footerComment;
|
|
288
|
+
}
|
|
289
|
+
await writeFile(filePath, finalContent);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Generate reference section for AGENTS.md
|
|
293
|
+
*/
|
|
294
|
+
function generateReferenceSection(name, fileName, description, quickRef, rulebookDir = 'rulebook') {
|
|
295
|
+
const sections = [];
|
|
296
|
+
sections.push(`### ${name}`);
|
|
297
|
+
sections.push('');
|
|
298
|
+
sections.push(`For comprehensive ${description}, see \`/${rulebookDir}/${fileName}.md\``);
|
|
299
|
+
sections.push('');
|
|
300
|
+
sections.push('Quick reference:');
|
|
301
|
+
for (const item of quickRef) {
|
|
302
|
+
sections.push(`- ${item}`);
|
|
303
|
+
}
|
|
304
|
+
sections.push('');
|
|
305
|
+
return sections.join('\n');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Generate language reference for AGENTS.md
|
|
309
|
+
*/
|
|
310
|
+
function generateLanguageReference(language, rulebookDir = 'rulebook') {
|
|
311
|
+
const languageName = language.charAt(0).toUpperCase() + language.slice(1);
|
|
312
|
+
const quickRef = [
|
|
313
|
+
'Type safety and strict mode',
|
|
314
|
+
'Code quality standards',
|
|
315
|
+
'Testing requirements (95%+ coverage)',
|
|
316
|
+
'Package management',
|
|
317
|
+
'Error handling patterns',
|
|
318
|
+
];
|
|
319
|
+
return generateReferenceSection(`${languageName} Development Rules`, language.toUpperCase(), `${languageName}-specific guidelines`, quickRef, rulebookDir);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Generate framework reference for AGENTS.md
|
|
323
|
+
*/
|
|
324
|
+
function generateFrameworkReference(framework, rulebookDir = 'rulebook') {
|
|
325
|
+
const frameworkName = framework.charAt(0).toUpperCase() + framework.slice(1);
|
|
326
|
+
const quickRef = [
|
|
327
|
+
'Framework-specific patterns',
|
|
328
|
+
'Component structure',
|
|
329
|
+
'Best practices',
|
|
330
|
+
'Testing conventions',
|
|
331
|
+
];
|
|
332
|
+
return generateReferenceSection(`${frameworkName} Framework Rules`, framework.toUpperCase(), `${frameworkName}-specific guidelines`, quickRef, rulebookDir);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Generate module reference for AGENTS.md
|
|
336
|
+
*/
|
|
337
|
+
function generateModuleReference(module, rulebookDir = 'rulebook') {
|
|
338
|
+
const moduleName = module.charAt(0).toUpperCase() + module.slice(1).replace(/_/g, ' ');
|
|
339
|
+
const quickRef = ['Module-specific instructions', 'Usage guidelines', 'Integration patterns'];
|
|
340
|
+
return generateReferenceSection(`${moduleName} Instructions`, module.toUpperCase(), `${moduleName}-specific instructions`, quickRef, rulebookDir);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Generate service reference for AGENTS.md
|
|
344
|
+
*/
|
|
345
|
+
function generateServiceReference(service, rulebookDir = 'rulebook') {
|
|
346
|
+
const serviceName = service
|
|
347
|
+
.split(/[-_]/)
|
|
348
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
349
|
+
.join(' ');
|
|
350
|
+
const serviceId = service.toUpperCase().replace(/-/g, '_');
|
|
351
|
+
const quickRef = ['Connection setup', 'Basic operations', 'Best practices', 'Configuration'];
|
|
352
|
+
return generateReferenceSection(`${serviceName} Instructions`, serviceId, `${serviceName}-specific instructions`, quickRef, rulebookDir);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Load project configuration from .rulebook file
|
|
356
|
+
*/
|
|
357
|
+
async function loadProjectConfigFromRulebook(projectRoot = process.cwd()) {
|
|
358
|
+
const { createConfigManager } = await import('./config-manager.js');
|
|
359
|
+
const configManager = createConfigManager(projectRoot);
|
|
360
|
+
try {
|
|
361
|
+
const rulebookConfig = await configManager.loadConfig();
|
|
362
|
+
// Map RulebookConfig to ProjectConfig
|
|
363
|
+
const projectConfig = {
|
|
364
|
+
languages: rulebookConfig.languages || [],
|
|
365
|
+
frameworks: rulebookConfig.frameworks || [],
|
|
366
|
+
modules: rulebookConfig.modules || [],
|
|
367
|
+
services: rulebookConfig.services || [],
|
|
368
|
+
modular: rulebookConfig.modular !== false, // Default to true
|
|
369
|
+
rulebookDir: rulebookConfig.rulebookDir || 'rulebook',
|
|
370
|
+
};
|
|
371
|
+
return projectConfig;
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
// If .rulebook doesn't exist or can't be read, return empty config
|
|
375
|
+
return {};
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Generate modular AGENTS.md with references
|
|
380
|
+
*/
|
|
381
|
+
export async function generateModularAgents(config, projectRoot = process.cwd()) {
|
|
382
|
+
// Load saved configuration from .rulebook and merge with provided config
|
|
383
|
+
const savedConfig = await loadProjectConfigFromRulebook(projectRoot);
|
|
384
|
+
// Merge: saved config takes precedence for languages/frameworks/modules/services
|
|
385
|
+
// provided config takes precedence for other settings (like rulebookDir when explicitly set)
|
|
386
|
+
const mergedConfig = {
|
|
387
|
+
...config,
|
|
388
|
+
languages: savedConfig.languages?.length ? savedConfig.languages : config.languages,
|
|
389
|
+
frameworks: savedConfig.frameworks?.length ? savedConfig.frameworks : config.frameworks || [],
|
|
390
|
+
modules: savedConfig.modules?.length ? savedConfig.modules : config.modules,
|
|
391
|
+
services: savedConfig.services?.length ? savedConfig.services : config.services || [],
|
|
392
|
+
modular: savedConfig.modular !== undefined ? savedConfig.modular : config.modular !== false,
|
|
393
|
+
// rulebookDir: provided config takes precedence if explicitly set, otherwise use saved or default
|
|
394
|
+
rulebookDir: config.rulebookDir || savedConfig.rulebookDir || 'rulebook',
|
|
395
|
+
};
|
|
396
|
+
const rulebookDir = mergedConfig.rulebookDir || 'rulebook';
|
|
397
|
+
const sections = [];
|
|
398
|
+
// Add Rulebook section (core rules stay embedded - simplified)
|
|
399
|
+
sections.push(await generateAgentsContent(mergedConfig));
|
|
400
|
+
sections.push('');
|
|
401
|
+
// Write RULEBOOK.md to /rulebook/ (ALWAYS included - highest precedence)
|
|
402
|
+
const rulebookContent = await generateCoreRules('RULEBOOK');
|
|
403
|
+
await writeModularFile(projectRoot, 'RULEBOOK', rulebookContent.trim(), rulebookDir);
|
|
404
|
+
// Write QUALITY_ENFORCEMENT to /rulebook/ (always included unless light mode)
|
|
405
|
+
if (!mergedConfig.lightMode) {
|
|
406
|
+
const enforcementContent = await generateCoreRules('QUALITY_ENFORCEMENT');
|
|
407
|
+
await writeModularFile(projectRoot, 'QUALITY_ENFORCEMENT', enforcementContent.trim(), rulebookDir);
|
|
408
|
+
}
|
|
409
|
+
// Write Git workflow rules to /rulebook/GIT.md
|
|
410
|
+
if (mergedConfig.includeGitWorkflow) {
|
|
411
|
+
const gitRules = await generateGitRules(mergedConfig.gitPushMode || 'manual');
|
|
412
|
+
await writeModularFile(projectRoot, 'GIT', gitRules.trim(), rulebookDir);
|
|
413
|
+
}
|
|
414
|
+
// Write language files and add references
|
|
415
|
+
if (mergedConfig.languages.length > 0) {
|
|
416
|
+
sections.push('## Language-Specific Rules');
|
|
417
|
+
sections.push('');
|
|
418
|
+
sections.push('The following languages are configured for this project. For detailed rules, see the corresponding files in `/rulebook/`:');
|
|
419
|
+
sections.push('');
|
|
420
|
+
// Write all language files first
|
|
421
|
+
for (const language of mergedConfig.languages) {
|
|
422
|
+
const langRules = await generateLanguageRules(language);
|
|
423
|
+
await writeModularFile(projectRoot, language.toUpperCase(), langRules, rulebookDir);
|
|
424
|
+
}
|
|
425
|
+
// Then add all references together
|
|
426
|
+
for (const language of mergedConfig.languages) {
|
|
427
|
+
sections.push(generateLanguageReference(language, rulebookDir));
|
|
428
|
+
}
|
|
429
|
+
sections.push('**Usage**: When working with language-specific code, reference the corresponding `/rulebook/[LANGUAGE].md` file for detailed guidelines.');
|
|
430
|
+
sections.push('');
|
|
431
|
+
}
|
|
432
|
+
// Write framework files and add references
|
|
433
|
+
if (mergedConfig.frameworks && mergedConfig.frameworks.length > 0) {
|
|
434
|
+
sections.push('## Framework-Specific Rules');
|
|
435
|
+
sections.push('');
|
|
436
|
+
sections.push('The following frameworks are configured for this project. For detailed rules, see the corresponding files in `/rulebook/`:');
|
|
437
|
+
sections.push('');
|
|
438
|
+
// Write all framework files first
|
|
439
|
+
for (const framework of mergedConfig.frameworks) {
|
|
440
|
+
const frameworkRules = await generateFrameworkRules(framework);
|
|
441
|
+
await writeModularFile(projectRoot, framework.toUpperCase(), frameworkRules, rulebookDir);
|
|
442
|
+
}
|
|
443
|
+
// Then add all references together
|
|
444
|
+
for (const framework of mergedConfig.frameworks) {
|
|
445
|
+
sections.push(generateFrameworkReference(framework, rulebookDir));
|
|
446
|
+
}
|
|
447
|
+
sections.push('');
|
|
448
|
+
sections.push('**Usage**: When working with framework-specific code, reference the corresponding `/rulebook/[FRAMEWORK].md` file for detailed guidelines.');
|
|
449
|
+
sections.push('');
|
|
450
|
+
}
|
|
451
|
+
// Write module files and add references
|
|
452
|
+
// First, write AGENT_AUTOMATION if not minimal (core file, not module)
|
|
453
|
+
if (!mergedConfig.minimal) {
|
|
454
|
+
const agentAutomation = await generateCoreRules('AGENT_AUTOMATION');
|
|
455
|
+
await writeModularFile(projectRoot, 'AGENT_AUTOMATION', agentAutomation, rulebookDir);
|
|
456
|
+
}
|
|
457
|
+
// Then handle all modules together
|
|
458
|
+
const allModules = [];
|
|
459
|
+
if (!mergedConfig.minimal) {
|
|
460
|
+
allModules.push('agent_automation');
|
|
461
|
+
}
|
|
462
|
+
allModules.push(...mergedConfig.modules);
|
|
463
|
+
if (allModules.length > 0) {
|
|
464
|
+
sections.push('## Module-Specific Instructions');
|
|
465
|
+
sections.push('');
|
|
466
|
+
sections.push('The following modules are configured for this project. For detailed instructions, see the corresponding files in `/rulebook/`:');
|
|
467
|
+
sections.push('');
|
|
468
|
+
// Write all module files first (except AGENT_AUTOMATION which is already written)
|
|
469
|
+
for (const module of mergedConfig.modules) {
|
|
470
|
+
const moduleRules = await generateModuleRules(module);
|
|
471
|
+
await writeModularFile(projectRoot, module.toUpperCase(), moduleRules, rulebookDir);
|
|
472
|
+
}
|
|
473
|
+
// Then add all references together
|
|
474
|
+
if (!mergedConfig.minimal) {
|
|
475
|
+
sections.push(generateModuleReference('agent_automation', rulebookDir));
|
|
476
|
+
}
|
|
477
|
+
for (const module of mergedConfig.modules) {
|
|
478
|
+
sections.push(generateModuleReference(module, rulebookDir));
|
|
479
|
+
}
|
|
480
|
+
sections.push('**Usage**: When working with module-specific features, reference the corresponding `/rulebook/[MODULE].md` file for detailed instructions.');
|
|
481
|
+
sections.push('');
|
|
482
|
+
}
|
|
483
|
+
// Write service files and add references
|
|
484
|
+
if (mergedConfig.services && mergedConfig.services.length > 0) {
|
|
485
|
+
sections.push('## Service-Specific Instructions');
|
|
486
|
+
sections.push('');
|
|
487
|
+
sections.push('The following services are configured for this project. For detailed instructions, see the corresponding files in `/rulebook/`:');
|
|
488
|
+
sections.push('');
|
|
489
|
+
// Write all service files first
|
|
490
|
+
for (const service of mergedConfig.services) {
|
|
491
|
+
const serviceRules = await generateServiceRules(service);
|
|
492
|
+
const serviceId = service.toUpperCase().replace(/-/g, '_');
|
|
493
|
+
await writeModularFile(projectRoot, serviceId, serviceRules, rulebookDir);
|
|
494
|
+
}
|
|
495
|
+
// Then add all references together
|
|
496
|
+
for (const service of mergedConfig.services) {
|
|
497
|
+
sections.push(generateServiceReference(service, rulebookDir));
|
|
498
|
+
}
|
|
499
|
+
sections.push('**Usage**: When working with service-specific features, reference the corresponding `/rulebook/[SERVICE].md` file for detailed instructions.');
|
|
500
|
+
sections.push('');
|
|
501
|
+
}
|
|
502
|
+
return sections.join('\n').trim() + '\n';
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Generate full AGENTS.md (modular by default, legacy mode available)
|
|
506
|
+
*/
|
|
507
|
+
export async function generateFullAgents(config, projectRoot = process.cwd()) {
|
|
508
|
+
// Use modular generation by default (unless explicitly disabled)
|
|
509
|
+
if (config.modular !== false) {
|
|
510
|
+
return await generateModularAgents(config, projectRoot);
|
|
511
|
+
}
|
|
512
|
+
// Legacy mode: embed all templates
|
|
513
|
+
const sections = [];
|
|
514
|
+
// Add Rulebook section
|
|
515
|
+
sections.push(await generateAgentsContent(config));
|
|
516
|
+
sections.push('');
|
|
517
|
+
// Add RULEBOOK.md rules (ALWAYS included - highest precedence)
|
|
518
|
+
const rulebookContent = await generateCoreRules('RULEBOOK');
|
|
519
|
+
sections.push(rulebookContent);
|
|
520
|
+
sections.push('');
|
|
521
|
+
// Add language-specific rules
|
|
522
|
+
for (const language of config.languages) {
|
|
523
|
+
const langRules = await generateLanguageRules(language);
|
|
524
|
+
sections.push(langRules);
|
|
525
|
+
sections.push('');
|
|
526
|
+
}
|
|
527
|
+
// Add framework-specific rules
|
|
528
|
+
for (const framework of config.frameworks || []) {
|
|
529
|
+
const frameworkRules = await generateFrameworkRules(framework);
|
|
530
|
+
sections.push(frameworkRules);
|
|
531
|
+
sections.push('');
|
|
532
|
+
}
|
|
533
|
+
if (!config.minimal) {
|
|
534
|
+
// Add AGENT_AUTOMATION (core file, not module) when not in minimal mode
|
|
535
|
+
const agentAutomation = await generateCoreRules('AGENT_AUTOMATION');
|
|
536
|
+
sections.push(agentAutomation);
|
|
537
|
+
sections.push('');
|
|
538
|
+
}
|
|
539
|
+
// Add module-specific rules
|
|
540
|
+
for (const module of config.modules) {
|
|
541
|
+
const moduleRules = await generateModuleRules(module);
|
|
542
|
+
sections.push(moduleRules);
|
|
543
|
+
sections.push('');
|
|
544
|
+
}
|
|
545
|
+
// Add service-specific rules
|
|
546
|
+
if (config.services && config.services.length > 0) {
|
|
547
|
+
for (const service of config.services) {
|
|
548
|
+
const serviceRules = await generateServiceRules(service);
|
|
549
|
+
sections.push(serviceRules);
|
|
550
|
+
sections.push('');
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
// Add Git workflow rules if enabled
|
|
554
|
+
if (config.includeGitWorkflow) {
|
|
555
|
+
const gitRules = await generateGitRules(config.gitPushMode || 'manual');
|
|
556
|
+
sections.push(gitRules);
|
|
557
|
+
sections.push('');
|
|
558
|
+
}
|
|
559
|
+
return sections.join('\n').trim() + '\n';
|
|
560
|
+
}
|
|
561
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LanguageDetection } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate .gitignore content based on detected languages
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateGitignoreContent(languages: LanguageDetection[]): string;
|
|
6
|
+
/**
|
|
7
|
+
* Generate or update .gitignore file
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateGitignore(projectRoot: string, languages: LanguageDetection[]): Promise<{
|
|
10
|
+
created: boolean;
|
|
11
|
+
updated: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=gitignore-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore-generator.d.ts","sourceRoot":"","sources":["../../src/core/gitignore-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwNrD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,CA0B/E;AAiDD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkCjD"}
|