@hivehub/rulebook 5.5.1 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/rulebook-learn-capture.md +41 -48
- package/.claude/commands/rulebook-learn-list.md +13 -13
- package/README.md +332 -394
- package/dist/cli/commands/context-intelligence.d.ts +0 -1
- package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
- package/dist/cli/commands/context-intelligence.js +12 -33
- package/dist/cli/commands/context-intelligence.js.map +1 -1
- package/dist/cli/commands/index.d.ts +4 -7
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +4 -7
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +40 -81
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +0 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +1 -7
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/memory.d.ts +7 -1
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +51 -57
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/misc.d.ts +1 -15
- package/dist/cli/commands/misc.d.ts.map +1 -1
- package/dist/cli/commands/misc.js +36 -215
- package/dist/cli/commands/misc.js.map +1 -1
- package/dist/cli/commands/plans.d.ts +0 -6
- package/dist/cli/commands/plans.d.ts.map +1 -1
- package/dist/cli/commands/plans.js +9 -77
- package/dist/cli/commands/plans.js.map +1 -1
- package/dist/cli/commands/skills.js +6 -6
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/task.js +4 -4
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +122 -52
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +1 -78
- package/dist/cli/prompts.js.map +1 -1
- package/dist/core/claude/claude-mcp.d.ts +59 -0
- package/dist/core/claude/claude-mcp.d.ts.map +1 -0
- package/dist/core/claude/claude-mcp.js +220 -0
- package/dist/core/claude/claude-mcp.js.map +1 -0
- package/dist/core/claude/claude-md-generator.d.ts +52 -0
- package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
- package/dist/core/claude/claude-md-generator.js +104 -0
- package/dist/core/claude/claude-md-generator.js.map +1 -0
- package/dist/core/claude/claude-settings-manager.d.ts +44 -0
- package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
- package/dist/core/claude/claude-settings-manager.js +194 -0
- package/dist/core/claude/claude-settings-manager.js.map +1 -0
- package/dist/core/claude-settings-manager.d.ts.map +1 -1
- package/dist/core/claude-settings-manager.js +9 -3
- package/dist/core/claude-settings-manager.js.map +1 -1
- package/dist/core/console/cli-bridge.d.ts +113 -0
- package/dist/core/console/cli-bridge.d.ts.map +1 -0
- package/dist/core/console/cli-bridge.js +1094 -0
- package/dist/core/console/cli-bridge.js.map +1 -0
- package/dist/core/detect/detector.d.ts +35 -0
- package/dist/core/detect/detector.d.ts.map +1 -0
- package/dist/core/detect/detector.js +541 -0
- package/dist/core/detect/detector.js.map +1 -0
- package/dist/core/docs/docs-generator.d.ts +9 -0
- package/dist/core/docs/docs-generator.d.ts.map +1 -0
- package/dist/core/docs/docs-generator.js +531 -0
- package/dist/core/docs/docs-generator.js.map +1 -0
- package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
- package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
- package/dist/core/docs/mcp-reference-generator.js +66 -0
- package/dist/core/docs/mcp-reference-generator.js.map +1 -0
- package/dist/core/generators/generator.d.ts +54 -0
- package/dist/core/generators/generator.d.ts.map +1 -0
- package/dist/core/generators/generator.js +1041 -0
- package/dist/core/generators/generator.js.map +1 -0
- package/dist/core/generators/gitignore-generator.d.ts +13 -0
- package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
- package/dist/core/generators/gitignore-generator.js +307 -0
- package/dist/core/generators/gitignore-generator.js.map +1 -0
- package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
- package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
- package/dist/core/generators/minimal-scaffolder.js +51 -0
- package/dist/core/generators/minimal-scaffolder.js.map +1 -0
- package/dist/core/generators/rules-generator.d.ts +73 -0
- package/dist/core/generators/rules-generator.d.ts.map +1 -0
- package/dist/core/generators/rules-generator.js +202 -0
- package/dist/core/generators/rules-generator.js.map +1 -0
- package/dist/core/generators/workflow-generator.d.ts +15 -0
- package/dist/core/generators/workflow-generator.d.ts.map +1 -0
- package/dist/core/generators/workflow-generator.js +390 -0
- package/dist/core/generators/workflow-generator.js.map +1 -0
- package/dist/core/ide/multi-tool-generator.d.ts +59 -0
- package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
- package/dist/core/ide/multi-tool-generator.js +157 -0
- package/dist/core/ide/multi-tool-generator.js.map +1 -0
- package/dist/core/ide/opencode-generator.d.ts +72 -0
- package/dist/core/ide/opencode-generator.d.ts.map +1 -0
- package/dist/core/ide/opencode-generator.js +450 -0
- package/dist/core/ide/opencode-generator.js.map +1 -0
- package/dist/core/merger.d.ts +1 -1
- package/dist/core/merger.d.ts.map +1 -1
- package/dist/core/merger.js +5 -5
- package/dist/core/merger.js.map +1 -1
- package/dist/core/migrator.d.ts +0 -1
- package/dist/core/migrator.d.ts.map +1 -1
- package/dist/core/migrator.js +4 -29
- package/dist/core/migrator.js.map +1 -1
- package/dist/core/quality/coverage-checker.d.ts +14 -0
- package/dist/core/quality/coverage-checker.d.ts.map +1 -0
- package/dist/core/quality/coverage-checker.js +176 -0
- package/dist/core/quality/coverage-checker.js.map +1 -0
- package/dist/core/quality/dependency-checker.d.ts +21 -0
- package/dist/core/quality/dependency-checker.d.ts.map +1 -0
- package/dist/core/quality/dependency-checker.js +247 -0
- package/dist/core/quality/dependency-checker.js.map +1 -0
- package/dist/core/quality/doctor.d.ts +19 -0
- package/dist/core/quality/doctor.d.ts.map +1 -0
- package/dist/core/quality/doctor.js +163 -0
- package/dist/core/quality/doctor.js.map +1 -0
- package/dist/core/quality/validator.d.ts +21 -0
- package/dist/core/quality/validator.d.ts.map +1 -0
- package/dist/core/quality/validator.js +177 -0
- package/dist/core/quality/validator.js.map +1 -0
- package/dist/core/ralph-scripts.d.ts.map +1 -1
- package/dist/core/ralph-scripts.js +7 -6
- package/dist/core/ralph-scripts.js.map +1 -1
- package/dist/core/skills/skills-manager.d.ts +126 -0
- package/dist/core/skills/skills-manager.d.ts.map +1 -0
- package/dist/core/skills/skills-manager.js +630 -0
- package/dist/core/skills/skills-manager.js.map +1 -0
- package/dist/core/state/config-manager.d.ts +86 -0
- package/dist/core/state/config-manager.d.ts.map +1 -0
- package/dist/core/state/config-manager.js +562 -0
- package/dist/core/state/config-manager.js.map +1 -0
- package/dist/core/state/override-manager.d.ts +23 -0
- package/dist/core/state/override-manager.d.ts.map +1 -0
- package/dist/core/state/override-manager.js +82 -0
- package/dist/core/state/override-manager.js.map +1 -0
- package/dist/core/state/state-writer.d.ts +34 -0
- package/dist/core/state/state-writer.d.ts.map +1 -0
- package/dist/core/state/state-writer.js +78 -0
- package/dist/core/state/state-writer.js.map +1 -0
- package/dist/core/state/version-bumper.d.ts +19 -0
- package/dist/core/state/version-bumper.d.ts.map +1 -0
- package/dist/core/state/version-bumper.js +180 -0
- package/dist/core/state/version-bumper.js.map +1 -0
- package/dist/core/tasks/decision-manager.d.ts +25 -0
- package/dist/core/tasks/decision-manager.d.ts.map +1 -0
- package/dist/core/tasks/decision-manager.js +183 -0
- package/dist/core/tasks/decision-manager.js.map +1 -0
- package/dist/core/tasks/knowledge-manager.d.ts +24 -0
- package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
- package/dist/core/tasks/knowledge-manager.js +173 -0
- package/dist/core/tasks/knowledge-manager.js.map +1 -0
- package/dist/core/tasks/learn-manager.d.ts +27 -0
- package/dist/core/tasks/learn-manager.d.ts.map +1 -0
- package/dist/core/tasks/learn-manager.js +121 -0
- package/dist/core/tasks/learn-manager.js.map +1 -0
- package/dist/core/tasks/plans-manager.d.ts +46 -0
- package/dist/core/tasks/plans-manager.d.ts.map +1 -0
- package/dist/core/tasks/plans-manager.js +158 -0
- package/dist/core/tasks/plans-manager.js.map +1 -0
- package/dist/core/tasks/task-manager.d.ts +127 -0
- package/dist/core/tasks/task-manager.d.ts.map +1 -0
- package/dist/core/tasks/task-manager.js +607 -0
- package/dist/core/tasks/task-manager.js.map +1 -0
- package/dist/core/workspace/project-worker.d.ts +6 -6
- package/dist/core/workspace/project-worker.d.ts.map +1 -1
- package/dist/core/workspace/project-worker.js +6 -6
- package/dist/core/workspace/project-worker.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -176
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +16 -960
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/file-search.d.ts +43 -0
- package/dist/memory/file-search.d.ts.map +1 -0
- package/dist/memory/file-search.js +228 -0
- package/dist/memory/file-search.js.map +1 -0
- package/dist/memory/file-store.d.ts +99 -0
- package/dist/memory/file-store.d.ts.map +1 -0
- package/dist/memory/file-store.js +615 -0
- package/dist/memory/file-store.js.map +1 -0
- package/dist/memory/legacy-migrator.d.ts +27 -0
- package/dist/memory/legacy-migrator.d.ts.map +1 -0
- package/dist/memory/legacy-migrator.js +185 -0
- package/dist/memory/legacy-migrator.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +25 -24
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +97 -140
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-types.d.ts +1 -1
- package/dist/memory/memory-types.d.ts.map +1 -1
- package/dist/types.d.ts +8 -119
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/file-system.d.ts +22 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +31 -0
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/git-hooks.d.ts.map +1 -1
- package/dist/utils/git-hooks.js +3 -2
- package/dist/utils/git-hooks.js.map +1 -1
- package/package.json +2 -6
- package/templates/agents/context-intelligence.md +50 -52
- package/templates/cli/OPENCODE.md +85 -18
- package/templates/commands/rulebook-learn-capture.md +41 -48
- package/templates/commands/rulebook-learn-list.md +13 -13
- package/templates/core/AGENTS_LEAN.md +0 -14
- package/templates/hooks/check-context-and-handoff.sh +74 -76
- package/templates/hooks/enforce-pre-tool.sh +70 -0
- package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
- package/templates/hooks/on-compact-reinject.sh +34 -34
- package/templates/hooks/resume-from-handoff.sh +61 -61
- package/templates/hooks/terse-activate.sh +197 -197
- package/templates/hooks/terse-mode-tracker.sh +190 -187
- package/templates/ides/OPENCODE.md +63 -0
- package/templates/skills/cli/opencode/SKILL.md +82 -28
- package/.claude/commands/ralph-config.md +0 -112
- package/.claude/commands/ralph-history.md +0 -110
- package/.claude/commands/ralph-init.md +0 -72
- package/.claude/commands/ralph-pause-resume.md +0 -105
- package/.claude/commands/ralph-run.md +0 -101
- package/.claude/commands/ralph-status.md +0 -76
- package/templates/core/RALPH.md +0 -471
- package/templates/frameworks/ANGULAR.md +0 -36
- package/templates/frameworks/DJANGO.md +0 -83
- package/templates/frameworks/ELECTRON.md +0 -147
- package/templates/frameworks/FLASK.md +0 -38
- package/templates/frameworks/FLUTTER.md +0 -55
- package/templates/frameworks/JQUERY.md +0 -32
- package/templates/frameworks/LARAVEL.md +0 -38
- package/templates/frameworks/NESTJS.md +0 -43
- package/templates/frameworks/NEXTJS.md +0 -127
- package/templates/frameworks/NUXT.md +0 -40
- package/templates/frameworks/RAILS.md +0 -66
- package/templates/frameworks/REACT.md +0 -38
- package/templates/frameworks/REACT_NATIVE.md +0 -47
- package/templates/frameworks/SPRING.md +0 -39
- package/templates/frameworks/SYMFONY.md +0 -36
- package/templates/frameworks/VUE.md +0 -36
- package/templates/frameworks/ZEND.md +0 -35
- package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
- package/templates/hooks/enforce-no-deferred.sh +0 -21
- package/templates/hooks/enforce-no-shortcuts.sh +0 -31
- package/templates/ides/COPILOT.md +0 -37
- package/templates/ides/CURSOR.md +0 -43
- package/templates/ides/JETBRAINS_AI.md +0 -35
- package/templates/ides/REPLIT.md +0 -36
- package/templates/ides/TABNINE.md +0 -29
- package/templates/ides/VSCODE.md +0 -40
- package/templates/ides/WINDSURF.md +0 -36
- package/templates/ides/ZED.md +0 -32
- package/templates/ides/cursor-mdc/go.mdc +0 -24
- package/templates/ides/cursor-mdc/python.mdc +0 -24
- package/templates/ides/cursor-mdc/quality.mdc +0 -25
- package/templates/ides/cursor-mdc/ralph.mdc +0 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
- package/templates/ides/cursor-mdc/rust.mdc +0 -24
- package/templates/ides/cursor-mdc/typescript.mdc +0 -25
- package/templates/ralph/ralph-history.bat +0 -4
- package/templates/ralph/ralph-history.sh +0 -5
- package/templates/ralph/ralph-init.bat +0 -5
- package/templates/ralph/ralph-init.sh +0 -5
- package/templates/ralph/ralph-pause.bat +0 -5
- package/templates/ralph/ralph-pause.sh +0 -5
- package/templates/ralph/ralph-run.bat +0 -5
- package/templates/ralph/ralph-run.sh +0 -5
- package/templates/ralph/ralph-status.bat +0 -4
- package/templates/ralph/ralph-status.sh +0 -5
- package/templates/services/AZURE_BLOB.md +0 -184
- package/templates/services/CASSANDRA.md +0 -239
- package/templates/services/DATADOG.md +0 -26
- package/templates/services/DOCKER.md +0 -124
- package/templates/services/DOCKER_COMPOSE.md +0 -168
- package/templates/services/DYNAMODB.md +0 -308
- package/templates/services/ELASTICSEARCH.md +0 -347
- package/templates/services/GCS.md +0 -178
- package/templates/services/HELM.md +0 -194
- package/templates/services/INFLUXDB.md +0 -265
- package/templates/services/KAFKA.md +0 -341
- package/templates/services/KUBERNETES.md +0 -208
- package/templates/services/MARIADB.md +0 -183
- package/templates/services/MEMCACHED.md +0 -242
- package/templates/services/MINIO.md +0 -201
- package/templates/services/MONGODB.md +0 -268
- package/templates/services/MYSQL.md +0 -358
- package/templates/services/NEO4J.md +0 -247
- package/templates/services/OPENTELEMETRY.md +0 -25
- package/templates/services/ORACLE.md +0 -290
- package/templates/services/PINO.md +0 -24
- package/templates/services/POSTGRESQL.md +0 -326
- package/templates/services/PROMETHEUS.md +0 -33
- package/templates/services/RABBITMQ.md +0 -286
- package/templates/services/REDIS.md +0 -292
- package/templates/services/S3.md +0 -298
- package/templates/services/SENTRY.md +0 -23
- package/templates/services/SQLITE.md +0 -294
- package/templates/services/SQLSERVER.md +0 -294
- package/templates/services/WINSTON.md +0 -30
- package/templates/skills/frameworks/angular/SKILL.md +0 -46
- package/templates/skills/frameworks/django/SKILL.md +0 -93
- package/templates/skills/frameworks/electron/SKILL.md +0 -157
- package/templates/skills/frameworks/flask/SKILL.md +0 -48
- package/templates/skills/frameworks/flutter/SKILL.md +0 -65
- package/templates/skills/frameworks/jquery/SKILL.md +0 -42
- package/templates/skills/frameworks/laravel/SKILL.md +0 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
- package/templates/skills/frameworks/rails/SKILL.md +0 -76
- package/templates/skills/frameworks/react/SKILL.md +0 -48
- package/templates/skills/frameworks/react-native/SKILL.md +0 -57
- package/templates/skills/frameworks/spring/SKILL.md +0 -49
- package/templates/skills/frameworks/symfony/SKILL.md +0 -46
- package/templates/skills/frameworks/vue/SKILL.md +0 -46
- package/templates/skills/frameworks/zend/SKILL.md +0 -45
- package/templates/skills/services/azure-blob/SKILL.md +0 -194
- package/templates/skills/services/cassandra/SKILL.md +0 -249
- package/templates/skills/services/dynamodb/SKILL.md +0 -318
- package/templates/skills/services/elasticsearch/SKILL.md +0 -357
- package/templates/skills/services/gcs/SKILL.md +0 -188
- package/templates/skills/services/influxdb/SKILL.md +0 -275
- package/templates/skills/services/kafka/SKILL.md +0 -351
- package/templates/skills/services/mariadb/SKILL.md +0 -193
- package/templates/skills/services/memcached/SKILL.md +0 -252
- package/templates/skills/services/minio/SKILL.md +0 -211
- package/templates/skills/services/mongodb/SKILL.md +0 -278
- package/templates/skills/services/mysql/SKILL.md +0 -368
- package/templates/skills/services/neo4j/SKILL.md +0 -257
- package/templates/skills/services/oracle/SKILL.md +0 -300
- package/templates/skills/services/postgresql/SKILL.md +0 -336
- package/templates/skills/services/rabbitmq/SKILL.md +0 -296
- package/templates/skills/services/redis/SKILL.md +0 -302
- package/templates/skills/services/s3/SKILL.md +0 -308
- package/templates/skills/services/sqlite/SKILL.md +0 -304
- package/templates/skills/services/sqlserver/SKILL.md +0 -304
- package/templates/skills/workflows/ralph/SETUP.md +0 -228
- package/templates/skills/workflows/ralph/SKILL.md +0 -309
- package/templates/skills/workflows/ralph/install.sh +0 -87
- package/templates/skills/workflows/ralph/manifest.json +0 -158
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { RulebookConfig } from '../../types.js';
|
|
2
|
+
export declare class ConfigManager {
|
|
3
|
+
private configPath;
|
|
4
|
+
private configDir;
|
|
5
|
+
private projectRoot;
|
|
6
|
+
private config;
|
|
7
|
+
constructor(projectRoot: string);
|
|
8
|
+
/**
|
|
9
|
+
* Load configuration from .rulebook/rulebook.json file
|
|
10
|
+
*/
|
|
11
|
+
loadConfig(): Promise<RulebookConfig>;
|
|
12
|
+
/**
|
|
13
|
+
* Save configuration to .rulebook/rulebook.json file
|
|
14
|
+
*/
|
|
15
|
+
saveConfig(config: RulebookConfig): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Migrate old .rulebook file to new .rulebook/rulebook.json structure
|
|
18
|
+
*/
|
|
19
|
+
private migrateOldRulebookFile;
|
|
20
|
+
/**
|
|
21
|
+
* Initialize new configuration with defaults
|
|
22
|
+
*/
|
|
23
|
+
initializeConfig(): Promise<RulebookConfig>;
|
|
24
|
+
/**
|
|
25
|
+
* Migrate configuration from older versions
|
|
26
|
+
*/
|
|
27
|
+
migrateConfig(config: RulebookConfig): Promise<RulebookConfig>;
|
|
28
|
+
/**
|
|
29
|
+
* Update specific configuration values
|
|
30
|
+
*/
|
|
31
|
+
updateConfig(updates: Partial<RulebookConfig>): Promise<RulebookConfig>;
|
|
32
|
+
/**
|
|
33
|
+
* Enable or disable a feature
|
|
34
|
+
*/
|
|
35
|
+
toggleFeature(feature: keyof RulebookConfig['features'], enabled: boolean): Promise<RulebookConfig>;
|
|
36
|
+
/**
|
|
37
|
+
* Detect available CLI tools
|
|
38
|
+
*/
|
|
39
|
+
detectCLITools(): Promise<string[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Update detected CLI tools in config
|
|
42
|
+
*/
|
|
43
|
+
updateCLITools(): Promise<RulebookConfig>;
|
|
44
|
+
/**
|
|
45
|
+
* Get configuration value
|
|
46
|
+
*/
|
|
47
|
+
getConfigValue<K extends keyof RulebookConfig>(key: K): Promise<RulebookConfig[K]>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if feature is enabled
|
|
50
|
+
*/
|
|
51
|
+
isFeatureEnabled(feature: keyof RulebookConfig['features']): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Get configuration summary
|
|
54
|
+
*/
|
|
55
|
+
getConfigSummary(): Promise<{
|
|
56
|
+
version: string;
|
|
57
|
+
projectId: string;
|
|
58
|
+
enabledFeatures: string[];
|
|
59
|
+
coverageThreshold: number;
|
|
60
|
+
cliTools: string[];
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Migrate old rulebook/ directory into .rulebook/
|
|
64
|
+
* Moves rulebook/specs/ → .rulebook/specs/ and rulebook/tasks/ → .rulebook/tasks/
|
|
65
|
+
* Then removes the now-empty rulebook/ directory
|
|
66
|
+
*/
|
|
67
|
+
migrateRulebookDirectory(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Migrate old directory structure to new consolidated structure
|
|
70
|
+
* Moves .rulebook-memory/ to .rulebook/memory/ and .rulebook-ralph/ to .rulebook/ralph/
|
|
71
|
+
*/
|
|
72
|
+
migrateDirectoryStructure(projectRoot: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Ensure .gitignore has .rulebook entries with specs/ and tasks/ exceptions
|
|
75
|
+
*/
|
|
76
|
+
ensureGitignore(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a new ConfigManager instance
|
|
80
|
+
*/
|
|
81
|
+
export declare function createConfigManager(projectRoot: string): ConfigManager;
|
|
82
|
+
/**
|
|
83
|
+
* Get default configuration
|
|
84
|
+
*/
|
|
85
|
+
export declare function getDefaultConfig(): RulebookConfig;
|
|
86
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/core/state/config-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAmBrD,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA+B;gBAEjC,WAAW,EAAE,MAAM;IAM/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA8B3C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BvD;;OAEG;YACW,sBAAsB;IAiCpC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC;IAsDjD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAuEpE;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ7E;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,EACzC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC;IAc1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBzC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;IAK/C;;OAEG;IACG,cAAc,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKxF;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnF;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAgBF;;;;OAIG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD/C;;;OAGG;IACG,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiFnE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CA6DvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAEtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAuCjD"}
|
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
import { readFile, writeFile, existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { randomUUID } from 'crypto';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { cp, rm, mkdir } from 'fs/promises';
|
|
7
|
+
const readFileAsync = promisify(readFile);
|
|
8
|
+
const writeFileAsync = promisify(writeFile);
|
|
9
|
+
const CONFIG_DIR = '.rulebook';
|
|
10
|
+
const CONFIG_FILE = 'rulebook.json';
|
|
11
|
+
function getPackageVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const packagePath = join(__dirname, '..', '..', '..', 'package.json');
|
|
15
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
16
|
+
return packageJson.version;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return '2.2.0';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class ConfigManager {
|
|
23
|
+
configPath;
|
|
24
|
+
configDir;
|
|
25
|
+
projectRoot;
|
|
26
|
+
config = null;
|
|
27
|
+
constructor(projectRoot) {
|
|
28
|
+
this.projectRoot = projectRoot;
|
|
29
|
+
this.configDir = join(projectRoot, CONFIG_DIR);
|
|
30
|
+
this.configPath = join(this.configDir, CONFIG_FILE);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load configuration from .rulebook/rulebook.json file
|
|
34
|
+
*/
|
|
35
|
+
async loadConfig() {
|
|
36
|
+
if (this.config) {
|
|
37
|
+
return this.config;
|
|
38
|
+
}
|
|
39
|
+
// Migrate old .rulebook file to new directory structure if needed
|
|
40
|
+
await this.migrateOldRulebookFile();
|
|
41
|
+
// Migrate old rulebook/ directory into .rulebook/
|
|
42
|
+
await this.migrateRulebookDirectory();
|
|
43
|
+
if (!existsSync(this.configPath)) {
|
|
44
|
+
return await this.initializeConfig();
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const data = await readFileAsync(this.configPath, 'utf-8');
|
|
48
|
+
const loadedConfig = JSON.parse(data);
|
|
49
|
+
// Migrate config if needed
|
|
50
|
+
const migratedConfig = await this.migrateConfig(loadedConfig);
|
|
51
|
+
this.config = migratedConfig;
|
|
52
|
+
return migratedConfig;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.warn('Failed to load config, initializing new one:', error);
|
|
56
|
+
return await this.initializeConfig();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Save configuration to .rulebook/rulebook.json file
|
|
61
|
+
*/
|
|
62
|
+
async saveConfig(config) {
|
|
63
|
+
try {
|
|
64
|
+
const fsPromises = await import('fs/promises');
|
|
65
|
+
// Check if .rulebook exists as a file (old structure) and remove it
|
|
66
|
+
const oldConfigPath = join(this.projectRoot, '.rulebook');
|
|
67
|
+
if (existsSync(oldConfigPath)) {
|
|
68
|
+
const stats = await fsPromises.stat(oldConfigPath);
|
|
69
|
+
if (stats.isFile()) {
|
|
70
|
+
// It's a file, remove it
|
|
71
|
+
await fsPromises.rm(oldConfigPath, { force: true });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Ensure .rulebook directory exists
|
|
75
|
+
await mkdir(this.configDir, { recursive: true });
|
|
76
|
+
const configToSave = {
|
|
77
|
+
...config,
|
|
78
|
+
updatedAt: new Date().toISOString(),
|
|
79
|
+
};
|
|
80
|
+
await writeFileAsync(this.configPath, JSON.stringify(configToSave, null, 2));
|
|
81
|
+
this.config = configToSave;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
throw new Error(`Failed to save config: ${error}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Migrate old .rulebook file to new .rulebook/rulebook.json structure
|
|
89
|
+
*/
|
|
90
|
+
async migrateOldRulebookFile() {
|
|
91
|
+
const oldConfigPath = join(this.projectRoot, '.rulebook');
|
|
92
|
+
const fsPromises = await import('fs/promises');
|
|
93
|
+
// Check if old .rulebook file exists and is a file (not directory)
|
|
94
|
+
if (!existsSync(oldConfigPath)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const stats = await fsPromises.stat(oldConfigPath);
|
|
99
|
+
if (stats.isDirectory()) {
|
|
100
|
+
// Already migrated
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Old file exists as a file, migrate it
|
|
104
|
+
const data = await readFileAsync(oldConfigPath, 'utf-8');
|
|
105
|
+
const config = JSON.parse(data);
|
|
106
|
+
// Remove old file first (before creating directory with same name)
|
|
107
|
+
await fsPromises.rm(oldConfigPath, { force: true });
|
|
108
|
+
// Create .rulebook directory
|
|
109
|
+
await mkdir(this.configDir, { recursive: true });
|
|
110
|
+
// Save config to new location
|
|
111
|
+
await this.saveConfig(config);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Silently skip migration errors - they'll be handled by loadConfig
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Initialize new configuration with defaults
|
|
119
|
+
*/
|
|
120
|
+
async initializeConfig() {
|
|
121
|
+
const now = new Date().toISOString();
|
|
122
|
+
const projectId = randomUUID();
|
|
123
|
+
const defaultConfig = {
|
|
124
|
+
version: getPackageVersion(),
|
|
125
|
+
installedAt: now,
|
|
126
|
+
updatedAt: now,
|
|
127
|
+
projectId,
|
|
128
|
+
mode: 'full',
|
|
129
|
+
features: {
|
|
130
|
+
watcher: true,
|
|
131
|
+
agent: true,
|
|
132
|
+
logging: true,
|
|
133
|
+
notifications: false,
|
|
134
|
+
dryRun: false,
|
|
135
|
+
gitHooks: false,
|
|
136
|
+
repl: false,
|
|
137
|
+
templates: false,
|
|
138
|
+
context: false,
|
|
139
|
+
health: false,
|
|
140
|
+
plugins: false,
|
|
141
|
+
parallel: false,
|
|
142
|
+
smartContinue: false,
|
|
143
|
+
},
|
|
144
|
+
coverageThreshold: 95,
|
|
145
|
+
language: 'en',
|
|
146
|
+
outputLanguage: 'en',
|
|
147
|
+
cliTools: [],
|
|
148
|
+
maxParallelTasks: 1,
|
|
149
|
+
timeouts: {
|
|
150
|
+
taskExecution: 300000, // 5 minutes
|
|
151
|
+
cliResponse: 60000, // 1 minute
|
|
152
|
+
testRun: 120000, // 2 minutes
|
|
153
|
+
},
|
|
154
|
+
memory: {
|
|
155
|
+
enabled: false,
|
|
156
|
+
dbPath: '.rulebook/memory/memory.db',
|
|
157
|
+
maxSizeBytes: 524288000,
|
|
158
|
+
autoCapture: false,
|
|
159
|
+
vectorDimensions: 256,
|
|
160
|
+
},
|
|
161
|
+
agentsMode: 'lean',
|
|
162
|
+
monorepo: {
|
|
163
|
+
detected: false,
|
|
164
|
+
tool: null,
|
|
165
|
+
packages: [],
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
await this.saveConfig(defaultConfig);
|
|
169
|
+
return defaultConfig;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Migrate configuration from older versions
|
|
173
|
+
*/
|
|
174
|
+
async migrateConfig(config) {
|
|
175
|
+
const migrated = { ...config };
|
|
176
|
+
// Migrate directory structure from old to new layout
|
|
177
|
+
await this.migrateDirectoryStructure(this.projectRoot);
|
|
178
|
+
// Add missing features with defaults
|
|
179
|
+
const defaultFeatures = {
|
|
180
|
+
watcher: true,
|
|
181
|
+
agent: true,
|
|
182
|
+
logging: true,
|
|
183
|
+
notifications: false,
|
|
184
|
+
dryRun: false,
|
|
185
|
+
gitHooks: false,
|
|
186
|
+
repl: false,
|
|
187
|
+
templates: false,
|
|
188
|
+
context: false,
|
|
189
|
+
health: false,
|
|
190
|
+
plugins: false,
|
|
191
|
+
parallel: false,
|
|
192
|
+
smartContinue: false,
|
|
193
|
+
};
|
|
194
|
+
migrated.features = { ...defaultFeatures, ...migrated.features };
|
|
195
|
+
if (!migrated.mode) {
|
|
196
|
+
migrated.mode = 'full';
|
|
197
|
+
}
|
|
198
|
+
// Add missing top-level properties
|
|
199
|
+
if (!migrated.outputLanguage) {
|
|
200
|
+
migrated.outputLanguage = migrated.language || 'en';
|
|
201
|
+
}
|
|
202
|
+
if (!migrated.maxParallelTasks) {
|
|
203
|
+
migrated.maxParallelTasks = 1;
|
|
204
|
+
}
|
|
205
|
+
if (!migrated.timeouts) {
|
|
206
|
+
migrated.timeouts = {
|
|
207
|
+
taskExecution: 300000,
|
|
208
|
+
cliResponse: 60000,
|
|
209
|
+
testRun: 120000,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// Add memory config with defaults (disabled by default to save resources)
|
|
213
|
+
if (!migrated.memory) {
|
|
214
|
+
migrated.memory = {
|
|
215
|
+
enabled: false,
|
|
216
|
+
dbPath: '.rulebook/memory/memory.db',
|
|
217
|
+
maxSizeBytes: 524288000,
|
|
218
|
+
autoCapture: false,
|
|
219
|
+
vectorDimensions: 256,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Preserve existing memory.enabled — don't force it
|
|
224
|
+
if (!migrated.memory.dbPath)
|
|
225
|
+
migrated.memory.dbPath = '.rulebook/memory/memory.db';
|
|
226
|
+
if (!migrated.memory.maxSizeBytes)
|
|
227
|
+
migrated.memory.maxSizeBytes = 524288000;
|
|
228
|
+
if (migrated.memory.autoCapture === undefined)
|
|
229
|
+
migrated.memory.autoCapture = false;
|
|
230
|
+
if (!migrated.memory.vectorDimensions)
|
|
231
|
+
migrated.memory.vectorDimensions = 256;
|
|
232
|
+
}
|
|
233
|
+
// v4 migration: ensure .rulebook/scripts/ dir is noted in config
|
|
234
|
+
// Scripts dir will be populated on next init/update
|
|
235
|
+
// No config changes needed — scripts are filesystem-only
|
|
236
|
+
// Update version
|
|
237
|
+
migrated.version = getPackageVersion();
|
|
238
|
+
return migrated;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Update specific configuration values
|
|
242
|
+
*/
|
|
243
|
+
async updateConfig(updates) {
|
|
244
|
+
const currentConfig = await this.loadConfig();
|
|
245
|
+
const updatedConfig = { ...currentConfig, ...updates };
|
|
246
|
+
await this.saveConfig(updatedConfig);
|
|
247
|
+
return updatedConfig;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Enable or disable a feature
|
|
251
|
+
*/
|
|
252
|
+
async toggleFeature(feature, enabled) {
|
|
253
|
+
const currentConfig = await this.loadConfig();
|
|
254
|
+
const updatedConfig = {
|
|
255
|
+
...currentConfig,
|
|
256
|
+
features: {
|
|
257
|
+
...currentConfig.features,
|
|
258
|
+
[feature]: enabled,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
await this.saveConfig(updatedConfig);
|
|
262
|
+
return updatedConfig;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Detect available CLI tools
|
|
266
|
+
*/
|
|
267
|
+
async detectCLITools() {
|
|
268
|
+
const { execa } = await import('execa');
|
|
269
|
+
const cliTools = [];
|
|
270
|
+
const tools = ['cursor-agent', 'claude-code', 'gemini-cli', 'opencode'];
|
|
271
|
+
for (const tool of tools) {
|
|
272
|
+
try {
|
|
273
|
+
await execa(tool, ['--version'], { timeout: 5000 });
|
|
274
|
+
cliTools.push(tool);
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
// Tool not available
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return cliTools;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Update detected CLI tools in config
|
|
284
|
+
*/
|
|
285
|
+
async updateCLITools() {
|
|
286
|
+
const detectedTools = await this.detectCLITools();
|
|
287
|
+
return await this.updateConfig({ cliTools: detectedTools });
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Get configuration value
|
|
291
|
+
*/
|
|
292
|
+
async getConfigValue(key) {
|
|
293
|
+
const config = await this.loadConfig();
|
|
294
|
+
return config[key];
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Check if feature is enabled
|
|
298
|
+
*/
|
|
299
|
+
async isFeatureEnabled(feature) {
|
|
300
|
+
const config = await this.loadConfig();
|
|
301
|
+
return config.features[feature];
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get configuration summary
|
|
305
|
+
*/
|
|
306
|
+
async getConfigSummary() {
|
|
307
|
+
const config = await this.loadConfig();
|
|
308
|
+
const enabledFeatures = Object.entries(config.features)
|
|
309
|
+
.filter(([, enabled]) => enabled)
|
|
310
|
+
.map(([feature]) => feature);
|
|
311
|
+
return {
|
|
312
|
+
version: config.version,
|
|
313
|
+
projectId: config.projectId,
|
|
314
|
+
enabledFeatures,
|
|
315
|
+
coverageThreshold: config.coverageThreshold,
|
|
316
|
+
cliTools: config.cliTools,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Migrate old rulebook/ directory into .rulebook/
|
|
321
|
+
* Moves rulebook/specs/ → .rulebook/specs/ and rulebook/tasks/ → .rulebook/tasks/
|
|
322
|
+
* Then removes the now-empty rulebook/ directory
|
|
323
|
+
*/
|
|
324
|
+
async migrateRulebookDirectory() {
|
|
325
|
+
const fsPromises = await import('fs/promises');
|
|
326
|
+
const oldRulebookDir = join(this.projectRoot, 'rulebook');
|
|
327
|
+
const newRulebookDir = join(this.projectRoot, '.rulebook');
|
|
328
|
+
// Only migrate if old rulebook/ directory exists
|
|
329
|
+
if (!existsSync(oldRulebookDir)) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
try {
|
|
333
|
+
const stats = await fsPromises.stat(oldRulebookDir);
|
|
334
|
+
if (!stats.isDirectory()) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
// Ensure .rulebook directory exists
|
|
343
|
+
await mkdir(newRulebookDir, { recursive: true });
|
|
344
|
+
// Migrate specs/
|
|
345
|
+
const oldSpecsDir = join(oldRulebookDir, 'specs');
|
|
346
|
+
const newSpecsDir = join(newRulebookDir, 'specs');
|
|
347
|
+
if (existsSync(oldSpecsDir)) {
|
|
348
|
+
if (!existsSync(newSpecsDir)) {
|
|
349
|
+
await cp(oldSpecsDir, newSpecsDir, { recursive: true });
|
|
350
|
+
}
|
|
351
|
+
await rm(oldSpecsDir, { recursive: true, force: true });
|
|
352
|
+
}
|
|
353
|
+
// Migrate tasks/
|
|
354
|
+
const oldTasksDir = join(oldRulebookDir, 'tasks');
|
|
355
|
+
const newTasksDir = join(newRulebookDir, 'tasks');
|
|
356
|
+
if (existsSync(oldTasksDir)) {
|
|
357
|
+
if (!existsSync(newTasksDir)) {
|
|
358
|
+
await cp(oldTasksDir, newTasksDir, { recursive: true });
|
|
359
|
+
}
|
|
360
|
+
await rm(oldTasksDir, { recursive: true, force: true });
|
|
361
|
+
}
|
|
362
|
+
// Remove empty rulebook/ directory if it's now empty
|
|
363
|
+
try {
|
|
364
|
+
const remaining = await fsPromises.readdir(oldRulebookDir);
|
|
365
|
+
if (remaining.length === 0) {
|
|
366
|
+
await rm(oldRulebookDir, { recursive: true, force: true });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
// Ignore errors reading the directory
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
console.warn(`Rulebook directory migration warning: ${error}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Migrate old directory structure to new consolidated structure
|
|
379
|
+
* Moves .rulebook-memory/ to .rulebook/memory/ and .rulebook-ralph/ to .rulebook/ralph/
|
|
380
|
+
*/
|
|
381
|
+
async migrateDirectoryStructure(projectRoot) {
|
|
382
|
+
const fsPromises = await import('fs/promises');
|
|
383
|
+
const { mkdir } = fsPromises;
|
|
384
|
+
const oldMemoryDir = join(projectRoot, '.rulebook-memory');
|
|
385
|
+
const oldRalphDir = join(projectRoot, '.rulebook-ralph');
|
|
386
|
+
const newRulebookDir = join(projectRoot, '.rulebook');
|
|
387
|
+
const newMemoryDir = join(newRulebookDir, 'memory');
|
|
388
|
+
const newRalphDir = join(newRulebookDir, 'ralph');
|
|
389
|
+
try {
|
|
390
|
+
// Check if .rulebook exists
|
|
391
|
+
if (existsSync(newRulebookDir)) {
|
|
392
|
+
const stats = await fsPromises.stat(newRulebookDir);
|
|
393
|
+
if (stats.isFile()) {
|
|
394
|
+
// Old .rulebook file exists, remove it
|
|
395
|
+
await fsPromises.rm(newRulebookDir, { force: true });
|
|
396
|
+
}
|
|
397
|
+
else if (stats.isDirectory()) {
|
|
398
|
+
// Already migrated to directory structure, skip migration
|
|
399
|
+
// Clean up accidental subdirectories and exit
|
|
400
|
+
const accidentalDir = join(newRulebookDir, '.rulebook');
|
|
401
|
+
if (existsSync(accidentalDir)) {
|
|
402
|
+
await fsPromises.rm(accidentalDir, { recursive: true, force: true });
|
|
403
|
+
}
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// Create parent .rulebook directory if needed
|
|
408
|
+
if (!existsSync(newRulebookDir)) {
|
|
409
|
+
await mkdir(newRulebookDir, { recursive: true });
|
|
410
|
+
}
|
|
411
|
+
// Migrate memory directory if it exists (but not if it's already in new location)
|
|
412
|
+
// Also prevent copying .rulebook into itself
|
|
413
|
+
if (existsSync(oldMemoryDir) &&
|
|
414
|
+
oldMemoryDir !== newMemoryDir &&
|
|
415
|
+
!oldMemoryDir.includes(newRulebookDir)) {
|
|
416
|
+
if (!existsSync(newMemoryDir)) {
|
|
417
|
+
await cp(oldMemoryDir, newMemoryDir, { recursive: true });
|
|
418
|
+
}
|
|
419
|
+
// Remove old directory after successful copy
|
|
420
|
+
await rm(oldMemoryDir, { recursive: true, force: true });
|
|
421
|
+
}
|
|
422
|
+
// Migrate ralph directory if it exists (but not if it's already in new location)
|
|
423
|
+
// Also prevent copying .rulebook into itself
|
|
424
|
+
if (existsSync(oldRalphDir) &&
|
|
425
|
+
oldRalphDir !== newRalphDir &&
|
|
426
|
+
!oldRalphDir.includes(newRulebookDir)) {
|
|
427
|
+
if (!existsSync(newRalphDir)) {
|
|
428
|
+
await cp(oldRalphDir, newRalphDir, { recursive: true });
|
|
429
|
+
}
|
|
430
|
+
// Remove old directory after successful copy
|
|
431
|
+
await rm(oldRalphDir, { recursive: true, force: true });
|
|
432
|
+
}
|
|
433
|
+
// Clean up any accidental .rulebook/.rulebook directory
|
|
434
|
+
const accidentalDir = join(newRulebookDir, '.rulebook');
|
|
435
|
+
if (existsSync(accidentalDir)) {
|
|
436
|
+
await rm(accidentalDir, { recursive: true, force: true });
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
// Log error but don't fail - migration is non-critical
|
|
441
|
+
// Still clean up accidental directories even if there's an error
|
|
442
|
+
try {
|
|
443
|
+
const accidentalDir = join(newRulebookDir, '.rulebook');
|
|
444
|
+
if (existsSync(accidentalDir)) {
|
|
445
|
+
const fsP = await import('fs/promises');
|
|
446
|
+
await fsP.rm(accidentalDir, { recursive: true, force: true });
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
// Ignore cleanup errors
|
|
451
|
+
}
|
|
452
|
+
console.warn(`Directory migration warning: ${error}`);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Ensure .gitignore has .rulebook entries with specs/ and tasks/ exceptions
|
|
457
|
+
*/
|
|
458
|
+
async ensureGitignore() {
|
|
459
|
+
const gitignorePath = join(this.projectRoot, '.gitignore');
|
|
460
|
+
const rulebookBlock = [
|
|
461
|
+
'',
|
|
462
|
+
'# Rulebook - ignore runtime data, keep specs and tasks',
|
|
463
|
+
'/.rulebook/*',
|
|
464
|
+
'!/.rulebook/specs/',
|
|
465
|
+
'!/.rulebook/tasks/',
|
|
466
|
+
'!/.rulebook/tasks/**/*.md',
|
|
467
|
+
'!/.rulebook/rulebook.json',
|
|
468
|
+
].join('\n');
|
|
469
|
+
try {
|
|
470
|
+
if (existsSync(gitignorePath)) {
|
|
471
|
+
let content = await readFileAsync(gitignorePath, 'utf-8');
|
|
472
|
+
// Already has the correct block with all exceptions
|
|
473
|
+
if (content.includes('!/.rulebook/specs/') &&
|
|
474
|
+
content.includes('!/.rulebook/tasks/**/*.md')) {
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
// Has old-style entry without exceptions — replace it
|
|
478
|
+
if (content.includes('.rulebook')) {
|
|
479
|
+
// Remove old entries (with or without leading /)
|
|
480
|
+
const lines = content.split('\n');
|
|
481
|
+
const filtered = lines.filter((line) => {
|
|
482
|
+
const trimmed = line.trim();
|
|
483
|
+
return (trimmed !== '.rulebook' &&
|
|
484
|
+
trimmed !== '.rulebook/' &&
|
|
485
|
+
trimmed !== '.rulebook/*' &&
|
|
486
|
+
trimmed !== '/.rulebook' &&
|
|
487
|
+
trimmed !== '/.rulebook/' &&
|
|
488
|
+
trimmed !== '/.rulebook/*' &&
|
|
489
|
+
trimmed !== '!.rulebook/specs/' &&
|
|
490
|
+
trimmed !== '!.rulebook/tasks/' &&
|
|
491
|
+
trimmed !== '!.rulebook/tasks/**/*.md' &&
|
|
492
|
+
trimmed !== '!.rulebook/rulebook.json' &&
|
|
493
|
+
trimmed !== '!/.rulebook/specs/' &&
|
|
494
|
+
trimmed !== '!/.rulebook/tasks/' &&
|
|
495
|
+
trimmed !== '!/.rulebook/tasks/**/*.md' &&
|
|
496
|
+
trimmed !== '!/.rulebook/rulebook.json' &&
|
|
497
|
+
trimmed !== '# Rulebook - ignore runtime data, keep specs and tasks');
|
|
498
|
+
});
|
|
499
|
+
content = filtered.join('\n');
|
|
500
|
+
}
|
|
501
|
+
// Append the correct block
|
|
502
|
+
const separator = content.endsWith('\n') ? '' : '\n';
|
|
503
|
+
await writeFileAsync(gitignorePath, content + separator + rulebookBlock + '\n');
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
await writeFileAsync(gitignorePath, rulebookBlock.trimStart() + '\n');
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
// Non-critical, don't fail init
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* Create a new ConfigManager instance
|
|
516
|
+
*/
|
|
517
|
+
export function createConfigManager(projectRoot) {
|
|
518
|
+
return new ConfigManager(projectRoot);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Get default configuration
|
|
522
|
+
*/
|
|
523
|
+
export function getDefaultConfig() {
|
|
524
|
+
const now = new Date().toISOString();
|
|
525
|
+
const projectId = randomUUID();
|
|
526
|
+
return {
|
|
527
|
+
version: getPackageVersion(),
|
|
528
|
+
installedAt: now,
|
|
529
|
+
updatedAt: now,
|
|
530
|
+
projectId,
|
|
531
|
+
mode: 'full',
|
|
532
|
+
features: {
|
|
533
|
+
watcher: true,
|
|
534
|
+
agent: true,
|
|
535
|
+
logging: true,
|
|
536
|
+
notifications: false,
|
|
537
|
+
dryRun: false,
|
|
538
|
+
gitHooks: false,
|
|
539
|
+
repl: false,
|
|
540
|
+
templates: false,
|
|
541
|
+
context: false,
|
|
542
|
+
health: false,
|
|
543
|
+
plugins: false,
|
|
544
|
+
parallel: false,
|
|
545
|
+
smartContinue: false,
|
|
546
|
+
},
|
|
547
|
+
coverageThreshold: 95,
|
|
548
|
+
language: 'en',
|
|
549
|
+
outputLanguage: 'en',
|
|
550
|
+
cliTools: [],
|
|
551
|
+
maxParallelTasks: 1,
|
|
552
|
+
timeouts: {
|
|
553
|
+
taskExecution: 300000,
|
|
554
|
+
cliResponse: 60000,
|
|
555
|
+
testRun: 120000,
|
|
556
|
+
},
|
|
557
|
+
memory: {
|
|
558
|
+
enabled: false,
|
|
559
|
+
},
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/state/config-manager.ts"],"names":[],"mappings":"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"}
|