@hivehub/rulebook 4.3.1 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.claude/commands/rulebook-decision-create.md +55 -0
  2. package/.claude/commands/rulebook-decision-list.md +15 -0
  3. package/.claude/commands/rulebook-knowledge-add.md +41 -0
  4. package/.claude/commands/rulebook-knowledge-list.md +15 -0
  5. package/.claude/commands/rulebook-learn-capture.md +48 -0
  6. package/.claude/commands/rulebook-learn-list.md +13 -0
  7. package/.claude/commands/rulebook-task-archive.md +24 -0
  8. package/.claude-plugin/plugin.json +1 -1
  9. package/README.md +8 -6
  10. package/dist/cli/commands.d.ts +32 -0
  11. package/dist/cli/commands.d.ts.map +1 -1
  12. package/dist/cli/commands.js +171 -0
  13. package/dist/cli/commands.js.map +1 -1
  14. package/dist/core/decision-manager.d.ts +25 -0
  15. package/dist/core/decision-manager.d.ts.map +1 -0
  16. package/dist/core/decision-manager.js +188 -0
  17. package/dist/core/decision-manager.js.map +1 -0
  18. package/dist/core/generator.d.ts.map +1 -1
  19. package/dist/core/generator.js +26 -0
  20. package/dist/core/generator.js.map +1 -1
  21. package/dist/core/indexer/background-indexer.d.ts +7 -0
  22. package/dist/core/indexer/background-indexer.d.ts.map +1 -1
  23. package/dist/core/indexer/background-indexer.js +45 -23
  24. package/dist/core/indexer/background-indexer.js.map +1 -1
  25. package/dist/core/knowledge-manager.d.ts +24 -0
  26. package/dist/core/knowledge-manager.d.ts.map +1 -0
  27. package/dist/core/knowledge-manager.js +173 -0
  28. package/dist/core/knowledge-manager.js.map +1 -0
  29. package/dist/core/learn-manager.d.ts +29 -0
  30. package/dist/core/learn-manager.d.ts.map +1 -0
  31. package/dist/core/learn-manager.js +159 -0
  32. package/dist/core/learn-manager.js.map +1 -0
  33. package/dist/core/workspace/project-worker.d.ts +9 -0
  34. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  35. package/dist/core/workspace/project-worker.js +27 -0
  36. package/dist/core/workspace/project-worker.js.map +1 -1
  37. package/dist/index.js +68 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  40. package/dist/mcp/rulebook-server.js +498 -14
  41. package/dist/mcp/rulebook-server.js.map +1 -1
  42. package/dist/memory/memory-manager.d.ts +3 -0
  43. package/dist/memory/memory-manager.d.ts.map +1 -1
  44. package/dist/memory/memory-manager.js +18 -1
  45. package/dist/memory/memory-manager.js.map +1 -1
  46. package/dist/memory/memory-store.d.ts.map +1 -1
  47. package/dist/memory/memory-store.js +3 -1
  48. package/dist/memory/memory-store.js.map +1 -1
  49. package/dist/types.d.ts +43 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +1 -1
  52. package/templates/agents/context-intelligence.md +52 -0
  53. package/templates/commands/rulebook-decision-create.md +55 -0
  54. package/templates/commands/rulebook-decision-list.md +15 -0
  55. package/templates/commands/rulebook-knowledge-add.md +41 -0
  56. package/templates/commands/rulebook-knowledge-list.md +15 -0
  57. package/templates/commands/rulebook-learn-capture.md +48 -0
  58. package/templates/commands/rulebook-learn-list.md +13 -0
  59. package/templates/core/DECISIONS.md +38 -0
  60. package/templates/core/KNOWLEDGE.md +49 -0
@@ -0,0 +1,24 @@
1
+ import type { KnowledgeEntry, KnowledgeType, KnowledgeCategory } from '../types.js';
2
+ export declare class KnowledgeManager {
3
+ private knowledgePath;
4
+ constructor(projectRoot: string, rulebookDir?: string);
5
+ private ensureDir;
6
+ add(type: KnowledgeType, title: string, options: {
7
+ category: KnowledgeCategory;
8
+ description: string;
9
+ example?: string;
10
+ whenToUse?: string;
11
+ whenNotToUse?: string;
12
+ tags?: string[];
13
+ source?: KnowledgeEntry['source'];
14
+ }): Promise<KnowledgeEntry>;
15
+ list(type?: KnowledgeType, category?: KnowledgeCategory): Promise<KnowledgeEntry[]>;
16
+ show(id: string): Promise<{
17
+ entry: KnowledgeEntry;
18
+ content: string;
19
+ } | null>;
20
+ remove(id: string): Promise<boolean>;
21
+ getForGenerator(): Promise<string>;
22
+ private renderMarkdown;
23
+ }
24
+ //# sourceMappingURL=knowledge-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-manager.d.ts","sourceRoot":"","sources":["../../src/core/knowledge-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAiBpF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB;IAIlE,OAAO,CAAC,SAAS;IAoBX,GAAG,CACP,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QACP,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;KACnC,GACA,OAAO,CAAC,cAAc,CAAC;IA6BpB,IAAI,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnF,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAiB5E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IA+BxC,OAAO,CAAC,cAAc;CAwBvB"}
@@ -0,0 +1,173 @@
1
+ import { existsSync, mkdirSync, readdirSync, rmSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { readFile as readFileUtil, writeFile as writeFileUtil, } from '../utils/file-system.js';
4
+ const KNOWLEDGE_DIR = 'knowledge';
5
+ const PATTERNS_DIR = 'patterns';
6
+ const ANTI_PATTERNS_DIR = 'anti-patterns';
7
+ function slugify(title) {
8
+ return title
9
+ .toLowerCase()
10
+ .replace(/[^a-z0-9]+/g, '-')
11
+ .replace(/^-|-$/g, '');
12
+ }
13
+ function subdir(type) {
14
+ return type === 'pattern' ? PATTERNS_DIR : ANTI_PATTERNS_DIR;
15
+ }
16
+ export class KnowledgeManager {
17
+ knowledgePath;
18
+ constructor(projectRoot, rulebookDir = '.rulebook') {
19
+ this.knowledgePath = join(projectRoot, rulebookDir, KNOWLEDGE_DIR);
20
+ }
21
+ ensureDir(type) {
22
+ if (!existsSync(this.knowledgePath)) {
23
+ mkdirSync(this.knowledgePath, { recursive: true });
24
+ }
25
+ if (type) {
26
+ const dir = join(this.knowledgePath, subdir(type));
27
+ if (!existsSync(dir)) {
28
+ mkdirSync(dir, { recursive: true });
29
+ }
30
+ }
31
+ else {
32
+ // Ensure both
33
+ for (const d of [PATTERNS_DIR, ANTI_PATTERNS_DIR]) {
34
+ const dir = join(this.knowledgePath, d);
35
+ if (!existsSync(dir)) {
36
+ mkdirSync(dir, { recursive: true });
37
+ }
38
+ }
39
+ }
40
+ }
41
+ async add(type, title, options) {
42
+ this.ensureDir(type);
43
+ const id = slugify(title);
44
+ const dir = join(this.knowledgePath, subdir(type));
45
+ const entry = {
46
+ id,
47
+ type,
48
+ title,
49
+ category: options.category,
50
+ description: options.description,
51
+ example: options.example,
52
+ whenToUse: options.whenToUse,
53
+ whenNotToUse: options.whenNotToUse,
54
+ createdAt: new Date().toISOString(),
55
+ tags: options.tags ?? [],
56
+ source: options.source ?? 'manual',
57
+ };
58
+ // Write markdown
59
+ const md = this.renderMarkdown(entry);
60
+ await writeFileUtil(join(dir, `${id}.md`), md);
61
+ // Write metadata
62
+ await writeFileUtil(join(dir, `${id}.metadata.json`), JSON.stringify(entry, null, 2));
63
+ return entry;
64
+ }
65
+ async list(type, category) {
66
+ this.ensureDir();
67
+ const types = type ? [type] : ['pattern', 'anti-pattern'];
68
+ const entries = [];
69
+ for (const t of types) {
70
+ const dir = join(this.knowledgePath, subdir(t));
71
+ if (!existsSync(dir))
72
+ continue;
73
+ const files = readdirSync(dir).filter((f) => f.endsWith('.metadata.json'));
74
+ for (const file of files) {
75
+ const raw = await readFileUtil(join(dir, file));
76
+ if (!raw)
77
+ continue;
78
+ try {
79
+ const meta = JSON.parse(raw);
80
+ if (category && meta.category !== category)
81
+ continue;
82
+ entries.push(meta);
83
+ }
84
+ catch {
85
+ // skip malformed
86
+ }
87
+ }
88
+ }
89
+ return entries.sort((a, b) => a.title.localeCompare(b.title));
90
+ }
91
+ async show(id) {
92
+ this.ensureDir();
93
+ // Search both dirs
94
+ for (const t of ['pattern', 'anti-pattern']) {
95
+ const dir = join(this.knowledgePath, subdir(t));
96
+ if (!existsSync(dir))
97
+ continue;
98
+ const metaPath = join(dir, `${id}.metadata.json`);
99
+ if (!existsSync(metaPath))
100
+ continue;
101
+ const raw = await readFileUtil(metaPath);
102
+ if (!raw)
103
+ continue;
104
+ const entry = JSON.parse(raw);
105
+ const content = (await readFileUtil(join(dir, `${id}.md`))) ?? '';
106
+ return { entry, content };
107
+ }
108
+ return null;
109
+ }
110
+ async remove(id) {
111
+ this.ensureDir();
112
+ for (const t of ['pattern', 'anti-pattern']) {
113
+ const dir = join(this.knowledgePath, subdir(t));
114
+ if (!existsSync(dir))
115
+ continue;
116
+ const metaPath = join(dir, `${id}.metadata.json`);
117
+ if (!existsSync(metaPath))
118
+ continue;
119
+ const mdPath = join(dir, `${id}.md`);
120
+ if (existsSync(mdPath))
121
+ rmSync(mdPath);
122
+ rmSync(metaPath);
123
+ return true;
124
+ }
125
+ return false;
126
+ }
127
+ async getForGenerator() {
128
+ const patterns = await this.list('pattern');
129
+ const antiPatterns = await this.list('anti-pattern');
130
+ if (patterns.length === 0 && antiPatterns.length === 0)
131
+ return '';
132
+ const lines = ['## Project Knowledge', ''];
133
+ if (patterns.length > 0) {
134
+ lines.push('### Patterns', '', 'The following patterns are enforced in this project:', '');
135
+ for (const p of patterns) {
136
+ lines.push(`- **${p.title}** → [spec](/.rulebook/knowledge/patterns/${p.id}.md)`);
137
+ }
138
+ lines.push('');
139
+ }
140
+ if (antiPatterns.length > 0) {
141
+ lines.push('### Anti-Patterns to Avoid', '');
142
+ for (const a of antiPatterns) {
143
+ lines.push(`- **${a.title}** → [details](/.rulebook/knowledge/anti-patterns/${a.id}.md)`);
144
+ }
145
+ lines.push('');
146
+ }
147
+ return lines.join('\n');
148
+ }
149
+ renderMarkdown(e) {
150
+ const lines = [
151
+ `# ${e.title}`,
152
+ '',
153
+ `**Category**: ${e.category}`,
154
+ `**Tags**: ${e.tags.join(', ') || 'none'}`,
155
+ '',
156
+ '## Description',
157
+ '',
158
+ e.description,
159
+ ];
160
+ if (e.example) {
161
+ lines.push('', '## Example', '', e.example);
162
+ }
163
+ if (e.whenToUse) {
164
+ lines.push('', '## When to Use', '', e.whenToUse);
165
+ }
166
+ if (e.whenNotToUse) {
167
+ lines.push('', '## When NOT to Use', '', e.whenNotToUse);
168
+ }
169
+ lines.push('');
170
+ return lines.join('\n');
171
+ }
172
+ }
173
+ //# sourceMappingURL=knowledge-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-manager.js","sourceRoot":"","sources":["../../src/core/knowledge-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Learning, KnowledgeCategory } from '../types.js';
2
+ export declare class LearnManager {
3
+ private learningsPath;
4
+ private ralphHistoryPath;
5
+ private decisionManager;
6
+ private knowledgeManager;
7
+ constructor(projectRoot: string, rulebookDir?: string);
8
+ private ensureDir;
9
+ capture(title: string, content: string, options?: {
10
+ source?: Learning['source'];
11
+ relatedTask?: string;
12
+ relatedDecision?: number;
13
+ tags?: string[];
14
+ }): Promise<Learning>;
15
+ fromRalph(): Promise<Learning[]>;
16
+ list(limit?: number): Promise<Learning[]>;
17
+ show(id: string): Promise<{
18
+ learning: Learning;
19
+ content: string;
20
+ } | null>;
21
+ promote(id: string, target: 'knowledge' | 'decision', options?: {
22
+ title?: string;
23
+ category?: KnowledgeCategory;
24
+ }): Promise<{
25
+ type: 'knowledge' | 'decision';
26
+ id: string;
27
+ } | null>;
28
+ }
29
+ //# sourceMappingURL=learn-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn-manager.d.ts","sourceRoot":"","sources":["../../src/core/learn-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAa/D,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB;IAQlE,OAAO,CAAC,SAAS;IAMX,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACZ,GACL,OAAO,CAAC,QAAQ,CAAC;IA0Cd,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAyChC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBzC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAazE,OAAO,CACX,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,GAAG,UAAU,EAChC,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;KACzB,GACL,OAAO,CAAC;QAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAkClE"}
@@ -0,0 +1,159 @@
1
+ import { existsSync, mkdirSync, readdirSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { readFile as readFileUtil, writeFile as writeFileUtil, } from '../utils/file-system.js';
4
+ import { DecisionManager } from './decision-manager.js';
5
+ import { KnowledgeManager } from './knowledge-manager.js';
6
+ const LEARNINGS_DIR = 'learnings';
7
+ function slugify(title) {
8
+ return title
9
+ .toLowerCase()
10
+ .replace(/[^a-z0-9]+/g, '-')
11
+ .replace(/^-|-$/g, '');
12
+ }
13
+ export class LearnManager {
14
+ learningsPath;
15
+ ralphHistoryPath;
16
+ decisionManager;
17
+ knowledgeManager;
18
+ constructor(projectRoot, rulebookDir = '.rulebook') {
19
+ const rbPath = join(projectRoot, rulebookDir);
20
+ this.learningsPath = join(rbPath, LEARNINGS_DIR);
21
+ this.ralphHistoryPath = join(rbPath, 'ralph', 'history');
22
+ this.decisionManager = new DecisionManager(projectRoot, rulebookDir);
23
+ this.knowledgeManager = new KnowledgeManager(projectRoot, rulebookDir);
24
+ }
25
+ ensureDir() {
26
+ if (!existsSync(this.learningsPath)) {
27
+ mkdirSync(this.learningsPath, { recursive: true });
28
+ }
29
+ }
30
+ async capture(title, content, options = {}) {
31
+ this.ensureDir();
32
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
33
+ const slug = slugify(title);
34
+ const id = `${timestamp}-${slug}`;
35
+ const learning = {
36
+ id,
37
+ title,
38
+ content,
39
+ source: options.source ?? 'manual',
40
+ relatedTask: options.relatedTask,
41
+ relatedDecision: options.relatedDecision,
42
+ tags: options.tags ?? [],
43
+ createdAt: new Date().toISOString(),
44
+ };
45
+ // Write markdown
46
+ const md = [
47
+ `# ${title}`,
48
+ '',
49
+ `**Source**: ${learning.source}`,
50
+ `**Date**: ${learning.createdAt.split('T')[0]}`,
51
+ learning.relatedTask ? `**Related Task**: ${learning.relatedTask}` : '',
52
+ learning.tags.length > 0 ? `**Tags**: ${learning.tags.join(', ')}` : '',
53
+ '',
54
+ content,
55
+ '',
56
+ ]
57
+ .filter(Boolean)
58
+ .join('\n');
59
+ await writeFileUtil(join(this.learningsPath, `${id}.md`), md);
60
+ await writeFileUtil(join(this.learningsPath, `${id}.metadata.json`), JSON.stringify(learning, null, 2));
61
+ return learning;
62
+ }
63
+ async fromRalph() {
64
+ this.ensureDir();
65
+ if (!existsSync(this.ralphHistoryPath))
66
+ return [];
67
+ const files = readdirSync(this.ralphHistoryPath).filter((f) => f.startsWith('iteration-') && f.endsWith('.json'));
68
+ // Load existing learning titles for dedup
69
+ const existing = await this.list();
70
+ const existingTitles = new Set(existing.map((l) => l.title));
71
+ const newLearnings = [];
72
+ for (const file of files) {
73
+ const raw = await readFileUtil(join(this.ralphHistoryPath, file));
74
+ if (!raw)
75
+ continue;
76
+ try {
77
+ const iteration = JSON.parse(raw);
78
+ const learnings = iteration.learnings ?? [];
79
+ for (const text of learnings) {
80
+ // Use first line or first 60 chars as title
81
+ const title = text.split('\n')[0].slice(0, 80);
82
+ if (existingTitles.has(title))
83
+ continue;
84
+ existingTitles.add(title);
85
+ const learning = await this.capture(title, text, {
86
+ source: 'ralph',
87
+ relatedTask: iteration.task_id,
88
+ tags: ['ralph', `iteration-${iteration.iteration}`],
89
+ });
90
+ newLearnings.push(learning);
91
+ }
92
+ }
93
+ catch {
94
+ // skip malformed
95
+ }
96
+ }
97
+ return newLearnings;
98
+ }
99
+ async list(limit) {
100
+ this.ensureDir();
101
+ const files = readdirSync(this.learningsPath).filter((f) => f.endsWith('.metadata.json'));
102
+ const learnings = [];
103
+ for (const file of files) {
104
+ const raw = await readFileUtil(join(this.learningsPath, file));
105
+ if (!raw)
106
+ continue;
107
+ try {
108
+ learnings.push(JSON.parse(raw));
109
+ }
110
+ catch {
111
+ // skip malformed
112
+ }
113
+ }
114
+ // Sort newest first
115
+ learnings.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
116
+ return limit ? learnings.slice(0, limit) : learnings;
117
+ }
118
+ async show(id) {
119
+ this.ensureDir();
120
+ const metaPath = join(this.learningsPath, `${id}.metadata.json`);
121
+ if (!existsSync(metaPath))
122
+ return null;
123
+ const raw = await readFileUtil(metaPath);
124
+ if (!raw)
125
+ return null;
126
+ const learning = JSON.parse(raw);
127
+ const content = (await readFileUtil(join(this.learningsPath, `${id}.md`))) ?? '';
128
+ return { learning, content };
129
+ }
130
+ async promote(id, target, options = {}) {
131
+ const result = await this.show(id);
132
+ if (!result)
133
+ return null;
134
+ const { learning } = result;
135
+ const title = options.title ?? learning.title;
136
+ let targetId;
137
+ if (target === 'knowledge') {
138
+ const entry = await this.knowledgeManager.add('pattern', title, {
139
+ category: options.category ?? 'code',
140
+ description: learning.content,
141
+ tags: learning.tags,
142
+ source: 'learn',
143
+ });
144
+ targetId = entry.id;
145
+ }
146
+ else {
147
+ const decision = await this.decisionManager.create(title, {
148
+ context: learning.content,
149
+ relatedTasks: learning.relatedTask ? [learning.relatedTask] : undefined,
150
+ });
151
+ targetId = String(decision.id);
152
+ }
153
+ // Mark as promoted
154
+ learning.promotedTo = { type: target, id: targetId };
155
+ await writeFileUtil(join(this.learningsPath, `${id}.metadata.json`), JSON.stringify(learning, null, 2));
156
+ return { type: target, id: targetId };
157
+ }
158
+ }
159
+ //# sourceMappingURL=learn-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn-manager.js","sourceRoot":"","sources":["../../src/core/learn-manager.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,9 @@
7
7
  import { TaskManager } from '../task-manager.js';
8
8
  import { ConfigManager } from '../config-manager.js';
9
9
  import { SkillsManager } from '../skills-manager.js';
10
+ import { DecisionManager } from '../decision-manager.js';
11
+ import { KnowledgeManager } from '../knowledge-manager.js';
12
+ import { LearnManager } from '../learn-manager.js';
10
13
  import type { RulebookConfig } from '../../types.js';
11
14
  export declare class ProjectWorker {
12
15
  readonly projectId: string;
@@ -14,6 +17,9 @@ export declare class ProjectWorker {
14
17
  private taskManager;
15
18
  private configManager;
16
19
  private skillsManager;
20
+ private decisionManager;
21
+ private knowledgeManager;
22
+ private learnManager;
17
23
  private memoryManager;
18
24
  private bgIndexer;
19
25
  private _lastAccessedAt;
@@ -43,6 +49,9 @@ export declare class ProjectWorker {
43
49
  getSkillsManager(): SkillsManager;
44
50
  /** Returns the ConfigManager for this project. Throws if not initialized. */
45
51
  getConfigManager(): ConfigManager;
52
+ getDecisionManager(): DecisionManager;
53
+ getKnowledgeManager(): KnowledgeManager;
54
+ getLearnManager(): LearnManager;
46
55
  /** Returns the loaded RulebookConfig, or null if not initialized. */
47
56
  getRulebookConfig(): RulebookConfig | null;
48
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"project-worker.d.ts","sourceRoot":"","sources":["../../../src/core/workspace/project-worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAA2B,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,qBAAa,aAAa;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAEL;IAChB,OAAO,CAAC,SAAS,CAAiC;IAElD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAA+B;gBAE1C,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKlD,uDAAuD;IACvD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,6DAA6D;IAC7D,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,iDAAiD;IACjD,KAAK,IAAI,IAAI;IAIb,wEAAwE;IACxE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BjC,+DAA+D;IACzD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,2EAA2E;IAC3E,cAAc,IAAI,WAAW;IAM7B,gEAAgE;IAChE,gBAAgB,IAAI,OAAO,IAAI,CAAC,aAAa;IAK7C,6EAA6E;IAC7E,gBAAgB,IAAI,aAAa;IAMjC,6EAA6E;IAC7E,gBAAgB,IAAI,aAAa;IAMjC,qEAAqE;IACrE,iBAAiB,IAAI,cAAc,GAAG,IAAI;CAG3C"}
1
+ {"version":3,"file":"project-worker.d.ts","sourceRoot":"","sources":["../../../src/core/workspace/project-worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAA2B,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,qBAAa,aAAa;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAEL;IAChB,OAAO,CAAC,SAAS,CAAiC;IAElD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAA+B;gBAE1C,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKlD,uDAAuD;IACvD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,6DAA6D;IAC7D,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,iDAAiD;IACjD,KAAK,IAAI,IAAI;IAIb,wEAAwE;IACxE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC,+DAA+D;IACzD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,2EAA2E;IAC3E,cAAc,IAAI,WAAW;IAM7B,gEAAgE;IAChE,gBAAgB,IAAI,OAAO,IAAI,CAAC,aAAa;IAK7C,6EAA6E;IAC7E,gBAAgB,IAAI,aAAa;IAMjC,6EAA6E;IAC7E,gBAAgB,IAAI,aAAa;IAMjC,kBAAkB,IAAI,eAAe;IAMrC,mBAAmB,IAAI,gBAAgB;IAMvC,eAAe,IAAI,YAAY;IAM/B,qEAAqE;IACrE,iBAAiB,IAAI,cAAc,GAAG,IAAI;CAG3C"}
@@ -8,12 +8,18 @@ import { join } from 'node:path';
8
8
  import { TaskManager } from '../task-manager.js';
9
9
  import { ConfigManager } from '../config-manager.js';
10
10
  import { SkillsManager, getDefaultTemplatesPath } from '../skills-manager.js';
11
+ import { DecisionManager } from '../decision-manager.js';
12
+ import { KnowledgeManager } from '../knowledge-manager.js';
13
+ import { LearnManager } from '../learn-manager.js';
11
14
  export class ProjectWorker {
12
15
  projectId;
13
16
  projectRoot;
14
17
  taskManager = null;
15
18
  configManager = null;
16
19
  skillsManager = null;
20
+ decisionManager = null;
21
+ knowledgeManager = null;
22
+ learnManager = null;
17
23
  memoryManager = null;
18
24
  bgIndexer = null;
19
25
  _lastAccessedAt = Date.now();
@@ -50,6 +56,9 @@ export class ProjectWorker {
50
56
  this._rulebookConfig = await this.configManager.loadConfig();
51
57
  this.taskManager = new TaskManager(this.projectRoot, '.rulebook');
52
58
  this.skillsManager = new SkillsManager(getDefaultTemplatesPath(), this.projectRoot);
59
+ this.decisionManager = new DecisionManager(this.projectRoot, '.rulebook');
60
+ this.knowledgeManager = new KnowledgeManager(this.projectRoot, '.rulebook');
61
+ this.learnManager = new LearnManager(this.projectRoot, '.rulebook');
53
62
  // Lazy-load memory if enabled in project config
54
63
  if (this._rulebookConfig.memory?.enabled) {
55
64
  try {
@@ -103,6 +112,24 @@ export class ProjectWorker {
103
112
  throw new Error(`Worker ${this.projectId} not initialized`);
104
113
  return this.configManager;
105
114
  }
115
+ getDecisionManager() {
116
+ this.touch();
117
+ if (!this.decisionManager)
118
+ throw new Error(`Worker ${this.projectId} not initialized`);
119
+ return this.decisionManager;
120
+ }
121
+ getKnowledgeManager() {
122
+ this.touch();
123
+ if (!this.knowledgeManager)
124
+ throw new Error(`Worker ${this.projectId} not initialized`);
125
+ return this.knowledgeManager;
126
+ }
127
+ getLearnManager() {
128
+ this.touch();
129
+ if (!this.learnManager)
130
+ throw new Error(`Worker ${this.projectId} not initialized`);
131
+ return this.learnManager;
132
+ }
106
133
  /** Returns the loaded RulebookConfig, or null if not initialized. */
107
134
  getRulebookConfig() {
108
135
  return this._rulebookConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"project-worker.js","sourceRoot":"","sources":["../../../src/core/workspace/project-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-worker.js","sourceRoot":"","sources":["../../../src/core/workspace/project-worker.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -16,7 +16,9 @@ reviewCommand,
16
16
  // Setup commands
17
17
  setupClaudeCodePlugin, migrateMemoryDirectory,
18
18
  // Workspace commands (v4.2)
19
- workspaceInitCommand, workspaceAddCommand, workspaceRemoveCommand, workspaceListCommand, workspaceStatusCommand, } from './cli/commands.js';
19
+ workspaceInitCommand, workspaceAddCommand, workspaceRemoveCommand, workspaceListCommand, workspaceStatusCommand,
20
+ // Context Intelligence commands (v4.4)
21
+ decisionCreateCommand, decisionListCommand, decisionShowCommand, decisionSupersedeCommand, knowledgeAddCommand, knowledgeListCommand, knowledgeShowCommand, knowledgeRemoveCommand, learnCaptureCommand, learnFromRalphCommand, learnListCommand, learnPromoteCommand, } from './cli/commands.js';
20
22
  import { readFileSync } from 'fs';
21
23
  import { fileURLToPath } from 'url';
22
24
  import path from 'path';
@@ -393,5 +395,70 @@ workspaceCommand
393
395
  .command('status')
394
396
  .description('Show detailed workspace status (workers, tasks, memory)')
395
397
  .action(() => workspaceStatusCommand());
398
+ // Context Intelligence commands (v4.4)
399
+ const decisionCommand = program.command('decision').description('Manage Architecture Decision Records');
400
+ decisionCommand
401
+ .command('create <title>')
402
+ .description('Create a new decision record')
403
+ .option('--context <context>', 'Decision context')
404
+ .option('--related-task <taskId>', 'Related task ID')
405
+ .action((title, options) => decisionCreateCommand(title, options));
406
+ decisionCommand
407
+ .command('list')
408
+ .description('List all decisions')
409
+ .option('--status <status>', 'Filter by status: proposed, accepted, superseded, deprecated')
410
+ .action((options) => decisionListCommand(options));
411
+ decisionCommand
412
+ .command('show <id>')
413
+ .description('Show decision details')
414
+ .action((id) => decisionShowCommand(id));
415
+ decisionCommand
416
+ .command('supersede <oldId> <newId>')
417
+ .description('Mark a decision as superseded by another')
418
+ .action((oldId, newId) => decisionSupersedeCommand(oldId, newId));
419
+ const knowledgeCommand = program.command('knowledge').description('Manage project knowledge base');
420
+ knowledgeCommand
421
+ .command('add <type> <title>')
422
+ .description('Add a pattern or anti-pattern')
423
+ .option('--category <category>', 'Category: architecture, code, testing, security, performance, devops', 'code')
424
+ .option('--description <desc>', 'Description of the pattern')
425
+ .action((type, title, options) => knowledgeAddCommand(type, title, options));
426
+ knowledgeCommand
427
+ .command('list')
428
+ .description('List knowledge entries')
429
+ .option('--type <type>', 'Filter by type: pattern, anti-pattern')
430
+ .option('--category <category>', 'Filter by category')
431
+ .action((options) => knowledgeListCommand(options));
432
+ knowledgeCommand
433
+ .command('show <id>')
434
+ .description('Show knowledge entry details')
435
+ .action((id) => knowledgeShowCommand(id));
436
+ knowledgeCommand
437
+ .command('remove <id>')
438
+ .description('Remove a knowledge entry')
439
+ .action((id) => knowledgeRemoveCommand(id));
440
+ const learnCommand = program.command('learn').description('Capture and promote learnings');
441
+ learnCommand
442
+ .command('capture')
443
+ .description('Capture a learning')
444
+ .option('--title <title>', 'Learning title')
445
+ .option('--content <content>', 'Learning content')
446
+ .option('--related-task <taskId>', 'Related task ID')
447
+ .option('--tags <tags>', 'Comma-separated tags')
448
+ .action((options) => learnCaptureCommand(options));
449
+ learnCommand
450
+ .command('from-ralph')
451
+ .description('Extract learnings from Ralph iteration history')
452
+ .action(() => learnFromRalphCommand());
453
+ learnCommand
454
+ .command('list')
455
+ .description('List learnings')
456
+ .option('--limit <n>', 'Max results', '20')
457
+ .action((options) => learnListCommand(options));
458
+ learnCommand
459
+ .command('promote <id> <target>')
460
+ .description('Promote learning to knowledge entry or decision')
461
+ .option('--title <title>', 'Override title for the promoted entry')
462
+ .action((id, target, options) => learnPromoteCommand(id, target, options));
396
463
  program.parse(process.argv);
397
464
  //# sourceMappingURL=index.js.map