rhachet-roles-bhrain 0.2.0 → 0.3.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/dist/.test/getContextOpenAI.js +1 -1
- package/dist/.test/getContextOpenAI.js.map +1 -1
- package/dist/domain.operations/review/compileReviewPrompt.d.ts +22 -0
- package/dist/domain.operations/review/compileReviewPrompt.js +95 -0
- package/dist/domain.operations/review/compileReviewPrompt.js.map +1 -0
- package/dist/domain.operations/review/enumFilesFromDiffs.d.ts +8 -0
- package/dist/domain.operations/review/enumFilesFromDiffs.js +74 -0
- package/dist/domain.operations/review/enumFilesFromDiffs.js.map +1 -0
- package/dist/domain.operations/review/enumFilesFromGlob.d.ts +8 -0
- package/dist/domain.operations/review/enumFilesFromGlob.js +31 -0
- package/dist/domain.operations/review/enumFilesFromGlob.js.map +1 -0
- package/dist/domain.operations/review/estimateTokenCount.d.ts +9 -0
- package/dist/domain.operations/review/estimateTokenCount.js +20 -0
- package/dist/domain.operations/review/estimateTokenCount.js.map +1 -0
- package/dist/domain.operations/review/formatReviewOutput.d.ts +14 -0
- package/dist/domain.operations/review/formatReviewOutput.js +42 -0
- package/dist/domain.operations/review/formatReviewOutput.js.map +1 -0
- package/dist/domain.operations/review/genTokenBreakdownMarkdown.d.ts +19 -0
- package/dist/domain.operations/review/genTokenBreakdownMarkdown.js +110 -0
- package/dist/domain.operations/review/genTokenBreakdownMarkdown.js.map +1 -0
- package/dist/domain.operations/review/genTokenBreakdownReport.d.ts +24 -0
- package/dist/domain.operations/review/genTokenBreakdownReport.js +64 -0
- package/dist/domain.operations/review/genTokenBreakdownReport.js.map +1 -0
- package/dist/domain.operations/review/invokeClaudeCode.d.ts +22 -0
- package/dist/domain.operations/review/invokeClaudeCode.js +92 -0
- package/dist/domain.operations/review/invokeClaudeCode.js.map +1 -0
- package/dist/domain.operations/review/writeInputArtifacts.d.ts +27 -0
- package/dist/domain.operations/review/writeInputArtifacts.js +50 -0
- package/dist/domain.operations/review/writeInputArtifacts.js.map +1 -0
- package/dist/domain.operations/review/writeOutputArtifacts.d.ts +12 -0
- package/dist/domain.operations/review/writeOutputArtifacts.js +46 -0
- package/dist/domain.operations/review/writeOutputArtifacts.js.map +1 -0
- package/dist/roles/getRoleRegistry.js +2 -1
- package/dist/roles/getRoleRegistry.js.map +1 -1
- package/dist/roles/getRoleRegistry.readme.js +6 -0
- package/dist/roles/getRoleRegistry.readme.js.map +1 -1
- package/dist/roles/reviewer/briefs/review.tactics.md +60 -0
- package/dist/roles/reviewer/getReviewerRole.d.ts +6 -0
- package/dist/roles/reviewer/getReviewerRole.js +80 -0
- package/dist/roles/reviewer/getReviewerRole.js.map +1 -0
- package/dist/roles/reviewer/skills/review/review.d.ts +57 -0
- package/dist/roles/reviewer/skills/review/review.js +445 -0
- package/dist/roles/reviewer/skills/review/review.js.map +1 -0
- package/dist/roles/reviewer/skills/review/review.sh +21 -0
- package/dist/roles/reviewer/skills/review/review.ts +575 -0
- package/dist/roles/thinker/getThinkerRole.js +1 -1
- package/dist/roles/thinker/getThinkerRole.js.map +1 -1
- package/dist/roles/thinker/skills/brief.articulate/.demo/article.vision.v2025_08_19..i1.via_chatgpt.md +47 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/article.vision.v2025_08_19.i2.via_rhachet.md +60 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/diverge.v2025_08_17.i1.md +62 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/diverge.v2025_08_17.i1.with_feedback.md +89 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/diverge.v2025_08_17.i2.md +47 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/joke.v2025_08_15.i1.md +44 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/joke.v2025_08_15.i2.md +63 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/joke.v2025_08_15.i3.md +51 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/user-journey.v2025_08_17.i1.md +62 -0
- package/dist/roles/thinker/skills/brief.articulate/.demo/user-journey.v2025_08_17.i2.md +49 -0
- package/dist/roles/thinker/skills/brief.articulate/.readme.md +0 -0
- package/dist/roles/thinker/skills/brief.articulate/stepArticulate.skill.js +1 -1
- package/dist/roles/thinker/skills/brief.articulate/stepArticulate.skill.js.map +1 -1
- package/dist/roles/thinker/skills/brief.articulate/stepArticulate.skill.ts +168 -0
- package/dist/roles/thinker/skills/brief.articulate/stepArticulate.ts +157 -0
- package/dist/roles/thinker/skills/brief.catalogize/.demo/joke.types.v2025_08_28.i1.md +93 -0
- package/dist/roles/thinker/skills/brief.catalogize/.demo/joke.types.v2025_08_28.i2.md +84 -0
- package/dist/roles/thinker/skills/brief.catalogize/.demo/joke.types.v2025_09_28.i1.no_focus_context.md +8 -0
- package/dist/roles/thinker/skills/brief.catalogize/.demo/joke.types.v2025_09_28.i2.md +54 -0
- package/dist/roles/thinker/skills/brief.catalogize/.demo/persona.usecases.v2025_08_28.i1.md +62 -0
- package/dist/roles/thinker/skills/brief.catalogize/.demo/persona.usecases.v2025_08_28.i2.md +64 -0
- package/dist/roles/thinker/skills/brief.catalogize/.readme.md +5 -0
- package/dist/roles/thinker/skills/brief.catalogize/stepCatalogize.skill.js +1 -1
- package/dist/roles/thinker/skills/brief.catalogize/stepCatalogize.skill.js.map +1 -1
- package/dist/roles/thinker/skills/brief.catalogize/stepCatalogize.skill.ts +173 -0
- package/dist/roles/thinker/skills/brief.catalogize/stepCatalogize.ts +132 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.input.example.i4.md +3 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.input.example.i5.md +3 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.input.example.i6.md +3 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.input.example.md +3 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.v2025_08_27.i1.md +52 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.v2025_08_27.i2.md +51 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.v2025_08_27.i3.md +47 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.v2025_08_27.i4.md +62 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.v2025_08_27.i5.md +47 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.demo/user.journey.roadtrip.v2025_08_27.i6.md +53 -0
- package/dist/roles/thinker/skills/brief.demonstrate/.readme +3 -0
- package/dist/roles/thinker/skills/brief.demonstrate/stepDemonstrate.skill.js +1 -1
- package/dist/roles/thinker/skills/brief.demonstrate/stepDemonstrate.skill.js.map +1 -1
- package/dist/roles/thinker/skills/brief.demonstrate/stepDemonstrate.skill.ts +190 -0
- package/dist/roles/thinker/skills/brief.demonstrate/stepDemonstrate.ts +164 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input1.cluster.v2025_08_17.i1.md +72 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input1.cluster.v2025_08_17.i2.md +53 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input1.cluster.v2025_08_17.i3.which_objectives.md +58 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input1.cluster.v2025_08_17.i5.which_personas.md +64 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input2.cluster.v2025_08_17.i1.md +67 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input2.cluster.v2025_08_17.i2.md +49 -0
- package/dist/roles/thinker/skills/khue.cluster/.demo/user.journeys.input2.cluster.v2025_08_17.i3.md +59 -0
- package/dist/roles/thinker/skills/khue.cluster/.readme.md +0 -0
- package/dist/roles/thinker/skills/khue.cluster/stepCluster.skill.js +1 -1
- package/dist/roles/thinker/skills/khue.cluster/stepCluster.skill.js.map +1 -1
- package/dist/roles/thinker/skills/khue.cluster/stepCluster.skill.ts +174 -0
- package/dist/roles/thinker/skills/khue.cluster/stepCluster.ts +150 -0
- package/dist/roles/thinker/skills/khue.decompose/.readme.md +9 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/joke.examples.v2025_08_17.i2.md +23 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/joke.examples.v2025_08_17.i3.md +23 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/joke.varieties.v2025_08_17.i1.md +23 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/userjourney.examples.v2025_08_17.i1.md +9 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/userjourney.examples.v2025_08_17.i2.md +9 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/userjourney.examples.v2025_08_17.i3.md +23 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/userjourney.examples.v2025_08_17.i4.folksy.md +9 -0
- package/dist/roles/thinker/skills/khue.diverge/.demo/userjourney.examples.v2025_08_17.i5.folksy.md +23 -0
- package/dist/roles/thinker/skills/khue.diverge/.readme.md +0 -0
- package/dist/roles/thinker/skills/khue.diverge/stepDiverge.skill.js +1 -1
- package/dist/roles/thinker/skills/khue.diverge/stepDiverge.skill.js.map +1 -1
- package/dist/roles/thinker/skills/khue.diverge/stepDiverge.skill.ts +149 -0
- package/dist/roles/thinker/skills/khue.diverge/stepDiverge.ts +151 -0
- package/dist/roles/thinker/skills/khue.encompose/.readme.md +7 -0
- package/dist/roles/thinker/skills/khue.instantiate/.readme.md +14 -0
- package/dist/roles/thinker/skills/khue.instantiate/stepInstantiate.skill.js +1 -1
- package/dist/roles/thinker/skills/khue.instantiate/stepInstantiate.skill.js.map +1 -1
- package/dist/roles/thinker/skills/khue.instantiate/stepInstantiate.skill.ts +190 -0
- package/dist/roles/thinker/skills/khue.instantiate/stepInstantiate.ts +132 -0
- package/dist/roles/thinker/skills/khue.triage/.demo/laughs.v2025_08_18.i1.md +29 -0
- package/dist/roles/thinker/skills/khue.triage/.demo/user.journeys.v2025_08_17.i1.md +86 -0
- package/dist/roles/thinker/skills/khue.triage/.demo/user.journeys.v2025_08_17.i2.md +68 -0
- package/dist/roles/thinker/skills/khue.triage/.readme.md +0 -0
- package/dist/roles/thinker/skills/khue.triage/stepTriage.skill.js +1 -1
- package/dist/roles/thinker/skills/khue.triage/stepTriage.skill.js.map +1 -1
- package/dist/roles/thinker/skills/khue.triage/stepTriage.skill.ts +174 -0
- package/dist/roles/thinker/skills/khue.triage/stepTriage.ts +153 -0
- package/package.json +7 -6
- package/readme.md +55 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.invokeClaudeCode = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
6
|
+
/**
|
|
7
|
+
* .what = invokes claude-code cli with the prompt
|
|
8
|
+
* .why = executes the review via the specified brain (claude-code)
|
|
9
|
+
*/
|
|
10
|
+
const invokeClaudeCode = async (input) => {
|
|
11
|
+
// invoke claude-code cli via stdin to avoid E2BIG on large prompts
|
|
12
|
+
const output = await new Promise((resolve, reject) => {
|
|
13
|
+
const child = (0, child_process_1.spawn)('claude', ['-p', '-', '--output-format', 'json'], {
|
|
14
|
+
cwd: input.cwd,
|
|
15
|
+
});
|
|
16
|
+
let stdout = '';
|
|
17
|
+
let stderr = '';
|
|
18
|
+
child.stdout.on('data', (data) => {
|
|
19
|
+
stdout += data.toString();
|
|
20
|
+
});
|
|
21
|
+
child.stderr.on('data', (data) => {
|
|
22
|
+
stderr += data.toString();
|
|
23
|
+
});
|
|
24
|
+
child.on('error', reject);
|
|
25
|
+
child.on('close', (code) => {
|
|
26
|
+
if (code !== 0) {
|
|
27
|
+
// check for prompt too long error
|
|
28
|
+
if (stdout.includes('Prompt is too long')) {
|
|
29
|
+
reject(new helpful_errors_1.BadRequestError('prompt is too long for claude context window; reduce --rules or --paths scope', {
|
|
30
|
+
status: code,
|
|
31
|
+
hint: 'try narrowing your glob patterns or excluding large files',
|
|
32
|
+
}));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
reject(new helpful_errors_1.UnexpectedCodePathError('claude-code exited with non-zero', {
|
|
36
|
+
status: code,
|
|
37
|
+
stdout: stdout.slice(0, 2000),
|
|
38
|
+
stderr: stderr.slice(0, 2000),
|
|
39
|
+
}));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
resolve(stdout);
|
|
43
|
+
});
|
|
44
|
+
// write prompt to stdin and close
|
|
45
|
+
child.stdin.write(input.prompt);
|
|
46
|
+
child.stdin.end();
|
|
47
|
+
});
|
|
48
|
+
// parse the json response
|
|
49
|
+
const response = (() => {
|
|
50
|
+
try {
|
|
51
|
+
return JSON.parse(output);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
throw new helpful_errors_1.UnexpectedCodePathError('failed to parse claude-code response', {
|
|
55
|
+
output,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
// extract review content from response
|
|
60
|
+
const review = (() => {
|
|
61
|
+
// claude-code json output has a 'result' field with the text content
|
|
62
|
+
if (response.result && typeof response.result === 'string') {
|
|
63
|
+
return response.result;
|
|
64
|
+
}
|
|
65
|
+
// fallback: look for text in message content
|
|
66
|
+
if (response.content && Array.isArray(response.content)) {
|
|
67
|
+
const textContent = response.content.find((c) => c.type === 'text');
|
|
68
|
+
if (textContent?.text) {
|
|
69
|
+
return textContent.text;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
throw new helpful_errors_1.UnexpectedCodePathError('failed to extract review from response', {
|
|
73
|
+
response,
|
|
74
|
+
});
|
|
75
|
+
})();
|
|
76
|
+
// extract usage from response
|
|
77
|
+
const usage = (() => {
|
|
78
|
+
if (!response.usage)
|
|
79
|
+
throw new helpful_errors_1.UnexpectedCodePathError('response.usage not found', {
|
|
80
|
+
response,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
inputTokens: response.usage.input_tokens ?? 0,
|
|
84
|
+
inputTokensCacheCreation: response.usage.cache_creation_input_tokens ?? 0,
|
|
85
|
+
inputTokensCacheRead: response.usage.cache_read_input_tokens ?? 0,
|
|
86
|
+
outputTokens: response.usage.output_tokens ?? 0,
|
|
87
|
+
};
|
|
88
|
+
})();
|
|
89
|
+
return { response, review, usage };
|
|
90
|
+
};
|
|
91
|
+
exports.invokeClaudeCode = invokeClaudeCode;
|
|
92
|
+
//# sourceMappingURL=invokeClaudeCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invokeClaudeCode.js","sourceRoot":"","sources":["../../../src/domain.operations/review/invokeClaudeCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .what = writes input artifacts to log directory for auditability
|
|
3
|
+
* .why = enables debugging, replay, and audit of review invocations
|
|
4
|
+
*/
|
|
5
|
+
export declare const writeInputArtifacts: (input: {
|
|
6
|
+
logDir: string;
|
|
7
|
+
args: {
|
|
8
|
+
rules: string | string[];
|
|
9
|
+
diffs?: string;
|
|
10
|
+
paths?: string | string[];
|
|
11
|
+
output: string;
|
|
12
|
+
mode: 'soft' | 'hard';
|
|
13
|
+
};
|
|
14
|
+
scope: {
|
|
15
|
+
ruleFiles: string[];
|
|
16
|
+
targetFiles: string[];
|
|
17
|
+
};
|
|
18
|
+
metrics: {
|
|
19
|
+
tokenEstimate: number;
|
|
20
|
+
contextWindowPercent: number;
|
|
21
|
+
costEstimate: number;
|
|
22
|
+
};
|
|
23
|
+
prompt: string;
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
argsPath: string;
|
|
26
|
+
promptPath: string;
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.writeInputArtifacts = void 0;
|
|
27
|
+
const fs = __importStar(require("fs/promises"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
/**
|
|
30
|
+
* .what = writes input artifacts to log directory for auditability
|
|
31
|
+
* .why = enables debugging, replay, and audit of review invocations
|
|
32
|
+
*/
|
|
33
|
+
const writeInputArtifacts = async (input) => {
|
|
34
|
+
// ensure log directory exists
|
|
35
|
+
await fs.mkdir(input.logDir, { recursive: true });
|
|
36
|
+
// write input.args.json
|
|
37
|
+
const argsPath = path.join(input.logDir, 'input.args.json');
|
|
38
|
+
const argsContent = JSON.stringify({
|
|
39
|
+
args: input.args,
|
|
40
|
+
scope: input.scope,
|
|
41
|
+
metrics: input.metrics,
|
|
42
|
+
}, null, 2);
|
|
43
|
+
await fs.writeFile(argsPath, argsContent, 'utf-8');
|
|
44
|
+
// write input.prompt.md
|
|
45
|
+
const promptPath = path.join(input.logDir, 'input.prompt.md');
|
|
46
|
+
await fs.writeFile(promptPath, input.prompt, 'utf-8');
|
|
47
|
+
return { argsPath, promptPath };
|
|
48
|
+
};
|
|
49
|
+
exports.writeInputArtifacts = writeInputArtifacts;
|
|
50
|
+
//# sourceMappingURL=writeInputArtifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeInputArtifacts.js","sourceRoot":"","sources":["../../../src/domain.operations/review/writeInputArtifacts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAE7B;;;GAGG;AACI,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAmBzC,EAAqD,EAAE;IACtD,8BAA8B;IAC9B,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAChC;QACE,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEnD,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC,CAAC;AAzCW,QAAA,mBAAmB,uBAyC9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .what = writes output artifacts to log directory for auditability
|
|
3
|
+
* .why = enables debugging, replay, and audit of review results
|
|
4
|
+
*/
|
|
5
|
+
export declare const writeOutputArtifacts: (input: {
|
|
6
|
+
logDir: string;
|
|
7
|
+
response: object;
|
|
8
|
+
review: string;
|
|
9
|
+
}) => Promise<{
|
|
10
|
+
responsePath: string;
|
|
11
|
+
reviewPath: string;
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.writeOutputArtifacts = void 0;
|
|
27
|
+
const fs = __importStar(require("fs/promises"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
/**
|
|
30
|
+
* .what = writes output artifacts to log directory for auditability
|
|
31
|
+
* .why = enables debugging, replay, and audit of review results
|
|
32
|
+
*/
|
|
33
|
+
const writeOutputArtifacts = async (input) => {
|
|
34
|
+
// ensure log directory exists (should already exist from writeInputArtifacts)
|
|
35
|
+
await fs.mkdir(input.logDir, { recursive: true });
|
|
36
|
+
// write output.response.json
|
|
37
|
+
const responsePath = path.join(input.logDir, 'output.response.json');
|
|
38
|
+
const responseContent = JSON.stringify(input.response, null, 2);
|
|
39
|
+
await fs.writeFile(responsePath, responseContent, 'utf-8');
|
|
40
|
+
// write output.review.md
|
|
41
|
+
const reviewPath = path.join(input.logDir, 'output.review.md');
|
|
42
|
+
await fs.writeFile(reviewPath, input.review, 'utf-8');
|
|
43
|
+
return { responsePath, reviewPath };
|
|
44
|
+
};
|
|
45
|
+
exports.writeOutputArtifacts = writeOutputArtifacts;
|
|
46
|
+
//# sourceMappingURL=writeOutputArtifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeOutputArtifacts.js","sourceRoot":"","sources":["../../../src/domain.operations/review/writeOutputArtifacts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAE7B;;;GAGG;AACI,MAAM,oBAAoB,GAAG,KAAK,EAAE,KAI1C,EAAyD,EAAE;IAC1D,8EAA8E;IAC9E,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,6BAA6B;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getRoleRegistry = void 0;
|
|
4
4
|
const rhachet_1 = require("rhachet");
|
|
5
5
|
const getRoleRegistry_readme_1 = require("./getRoleRegistry.readme");
|
|
6
|
+
const getReviewerRole_1 = require("./reviewer/getReviewerRole");
|
|
6
7
|
const getThinkerRole_1 = require("./thinker/getThinkerRole");
|
|
7
8
|
/**
|
|
8
9
|
* .what = returns the core registry of predefined roles and skills
|
|
@@ -13,7 +14,7 @@ const getThinkerRole_1 = require("./thinker/getThinkerRole");
|
|
|
13
14
|
const getRoleRegistry = () => new rhachet_1.RoleRegistry({
|
|
14
15
|
slug: 'bhrain',
|
|
15
16
|
readme: getRoleRegistry_readme_1.BHRAIN_REGISTRY_README,
|
|
16
|
-
roles: [getThinkerRole_1.ROLE_THINKER],
|
|
17
|
+
roles: [getThinkerRole_1.ROLE_THINKER, getReviewerRole_1.ROLE_REVIEWER],
|
|
17
18
|
});
|
|
18
19
|
exports.getRoleRegistry = getRoleRegistry;
|
|
19
20
|
//# sourceMappingURL=getRoleRegistry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRoleRegistry.js","sourceRoot":"","sources":["../../src/roles/getRoleRegistry.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAEvC,qEAAkE;AAClE,6DAAwD;AAExD;;;;;GAKG;AACI,MAAM,eAAe,GAAG,GAAiB,EAAE,CAChD,IAAI,sBAAY,CAAC;IACf,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,+CAAsB;IAC9B,KAAK,EAAE,CAAC,6BAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"getRoleRegistry.js","sourceRoot":"","sources":["../../src/roles/getRoleRegistry.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAEvC,qEAAkE;AAClE,gEAA2D;AAC3D,6DAAwD;AAExD;;;;;GAKG;AACI,MAAM,eAAe,GAAG,GAAiB,EAAE,CAChD,IAAI,sBAAY,CAAC;IACf,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,+CAAsB;IAC9B,KAAK,EAAE,CAAC,6BAAY,EAAE,+BAAa,CAAC;CACrC,CAAC,CAAC;AALQ,QAAA,eAAe,mBAKvB"}
|
|
@@ -18,5 +18,11 @@ Used to navigate through concept space. See src/roles/thinker/briefs/cognition f
|
|
|
18
18
|
## 📚 Librarian
|
|
19
19
|
|
|
20
20
|
Used to curate knowledge and context. see src/roles/thinker/briefs/librarian.context and src/roles/thinker/briefs/librarian.tactics for details.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🔍 Reviewer
|
|
25
|
+
|
|
26
|
+
Used to review artifacts against declared rules. Designed to be composed into review skills for other roles.
|
|
21
27
|
`.trim();
|
|
22
28
|
//# sourceMappingURL=getRoleRegistry.readme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRoleRegistry.readme.js","sourceRoot":"","sources":["../../src/roles/getRoleRegistry.readme.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACtC,QAAA,sBAAsB,GAAG
|
|
1
|
+
{"version":3,"file":"getRoleRegistry.readme.js","sourceRoot":"","sources":["../../src/roles/getRoleRegistry.readme.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACtC,QAAA,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;GAsBnC,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# review tactics
|
|
2
|
+
|
|
3
|
+
## purpose
|
|
4
|
+
|
|
5
|
+
the reviewer role performs automated code review against declared rules, using claude-code as the underlying brain.
|
|
6
|
+
|
|
7
|
+
## modes
|
|
8
|
+
|
|
9
|
+
### soft mode
|
|
10
|
+
|
|
11
|
+
- includes only file paths in the prompt
|
|
12
|
+
- instructs brain to read files directly
|
|
13
|
+
- lower token usage
|
|
14
|
+
- best for: large codebases, exploratory reviews
|
|
15
|
+
|
|
16
|
+
### hard mode
|
|
17
|
+
|
|
18
|
+
- includes full file contents in the prompt
|
|
19
|
+
- no additional file reads required
|
|
20
|
+
- higher token usage, faster execution
|
|
21
|
+
- best for: focused reviews, smaller scopes
|
|
22
|
+
|
|
23
|
+
## mode selection criteria
|
|
24
|
+
|
|
25
|
+
use `--soft` when:
|
|
26
|
+
- scope is large (>50 files)
|
|
27
|
+
- context window would exceed 60%
|
|
28
|
+
- reviewing for general patterns
|
|
29
|
+
|
|
30
|
+
use `--hard` when:
|
|
31
|
+
- scope is small (<20 files)
|
|
32
|
+
- precision is critical
|
|
33
|
+
- reviewing specific changes
|
|
34
|
+
|
|
35
|
+
## context window thresholds
|
|
36
|
+
|
|
37
|
+
- **60% warning**: emits warning but continues
|
|
38
|
+
- **75% failfast**: throws error with recommendation to reduce scope or use soft mode
|
|
39
|
+
|
|
40
|
+
## scope combination
|
|
41
|
+
|
|
42
|
+
targets are the union of `--diffs` and `--paths`:
|
|
43
|
+
- `--diffs uptil-main`: files changed since main branch
|
|
44
|
+
- `--diffs uptil-staged`: only staged files
|
|
45
|
+
- `--paths`: explicit glob patterns
|
|
46
|
+
|
|
47
|
+
## artifacts
|
|
48
|
+
|
|
49
|
+
all invocations log to `.log/bhrain/review/$timestamp/`:
|
|
50
|
+
- `input.args.json`: original arguments and computed metrics
|
|
51
|
+
- `input.prompt.md`: exact prompt sent to brain
|
|
52
|
+
- `output.response.json`: raw brain response
|
|
53
|
+
- `output.review.md`: formatted review output
|
|
54
|
+
|
|
55
|
+
## output format
|
|
56
|
+
|
|
57
|
+
reviews follow the feedback template format:
|
|
58
|
+
- blockers appear first (severity: blocker)
|
|
59
|
+
- nitpicks appear second (severity: nitpick)
|
|
60
|
+
- each finding includes file path and line number when available
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ROLE_REVIEWER = void 0;
|
|
4
|
+
const rhachet_1 = require("rhachet");
|
|
5
|
+
/**
|
|
6
|
+
* .what = reviewer role definition
|
|
7
|
+
* .why = enables code review against declared rules via brain invocation
|
|
8
|
+
*/
|
|
9
|
+
exports.ROLE_REVIEWER = rhachet_1.Role.build({
|
|
10
|
+
slug: 'reviewer',
|
|
11
|
+
name: 'Reviewer',
|
|
12
|
+
purpose: 'review artifacts against declared rules',
|
|
13
|
+
readme: `
|
|
14
|
+
## 🔍 Reviewer
|
|
15
|
+
|
|
16
|
+
- **scale**: repo-level, artifact quality
|
|
17
|
+
- **focus**: rule compliance, best practices enforcement
|
|
18
|
+
- **maximizes**: artifact quality and consistency
|
|
19
|
+
|
|
20
|
+
used to review artifacts against declared rules and best practices.
|
|
21
|
+
invokes claude-code brain to perform intelligent review.
|
|
22
|
+
designed to be composed into review skills for other roles.
|
|
23
|
+
|
|
24
|
+
### usage
|
|
25
|
+
|
|
26
|
+
\`\`\`sh
|
|
27
|
+
npx rhachet run --repo bhrain --skill review --mode hard --diffs uptil-main --paths '!pnpm-lock.yaml'
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
produces
|
|
31
|
+
|
|
32
|
+
\`\`\`
|
|
33
|
+
🌊 skill "review" from repo=bhrain role=reviewer
|
|
34
|
+
|
|
35
|
+
🔭 metrics.expected
|
|
36
|
+
├─ files
|
|
37
|
+
│ ├─ rules: 60
|
|
38
|
+
│ └─ targets: 69
|
|
39
|
+
├─ tokens
|
|
40
|
+
│ ├─ estimate: 73122
|
|
41
|
+
│ └─ context: 36.6%
|
|
42
|
+
└─ cost
|
|
43
|
+
└─ estimate: $0.3290
|
|
44
|
+
|
|
45
|
+
🪵 logs
|
|
46
|
+
├─ scope: .log/bhrain/review/2025-12-23T00-39-00-673Z/input.scope.json
|
|
47
|
+
├─ metrics: .log/bhrain/review/2025-12-23T00-39-00-673Z/metrics.expected.json
|
|
48
|
+
└─ tokens: .log/bhrain/review/2025-12-23T00-39-00-673Z/tokens.expected.md
|
|
49
|
+
|
|
50
|
+
🐢 let's review!
|
|
51
|
+
└─ elapsed: 85s ✓
|
|
52
|
+
|
|
53
|
+
✨ metrics.realized
|
|
54
|
+
├─ tokens
|
|
55
|
+
│ ├─ input: 2
|
|
56
|
+
│ ├─ cache.write: 144578
|
|
57
|
+
│ ├─ cache.read: 14316
|
|
58
|
+
│ └─ output: 1090
|
|
59
|
+
└─ cost
|
|
60
|
+
├─ input: $0.0000
|
|
61
|
+
├─ cache.write: $0.5422
|
|
62
|
+
├─ cache.read: $0.0043
|
|
63
|
+
├─ output: $0.0164
|
|
64
|
+
└─ total: $0.5629
|
|
65
|
+
|
|
66
|
+
🌊 output
|
|
67
|
+
├─ logs: .log/bhrain/review/2025-12-23T00-39-00-673Z
|
|
68
|
+
└─ review: .review/bhrain/v2025-12-23T00-39-00-645Z/[feedback].[given].by_robot.md
|
|
69
|
+
\`\`\`
|
|
70
|
+
`.trim(),
|
|
71
|
+
traits: [],
|
|
72
|
+
skills: {
|
|
73
|
+
dirs: [{ uri: __dirname + '/skills' }],
|
|
74
|
+
refs: [],
|
|
75
|
+
},
|
|
76
|
+
briefs: {
|
|
77
|
+
dirs: [{ uri: __dirname + '/briefs' }],
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=getReviewerRole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getReviewerRole.js","sourceRoot":"","sources":["../../../src/roles/reviewer/getReviewerRole.ts"],"names":[],"mappings":";;;AAAA,qCAA+B;AAE/B;;;GAGG;AACU,QAAA,aAAa,GAAS,cAAI,CAAC,KAAK,CAAC;IAC5C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,yCAAyC;IAClD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDP,CAAC,IAAI,EAAE;IACR,MAAM,EAAE,EAAE;IACV,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;QACtC,IAAI,EAAE,EAAE;KACT;IACD,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;KACvC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .what = result of stepReview execution
|
|
3
|
+
* .why = enables caller to inspect review outcome and artifacts
|
|
4
|
+
*/
|
|
5
|
+
export type StepReviewResult = {
|
|
6
|
+
review: {
|
|
7
|
+
formatted: string;
|
|
8
|
+
};
|
|
9
|
+
log: {
|
|
10
|
+
dir: string;
|
|
11
|
+
};
|
|
12
|
+
output: {
|
|
13
|
+
path: string;
|
|
14
|
+
};
|
|
15
|
+
metrics: {
|
|
16
|
+
files: {
|
|
17
|
+
rulesCount: number;
|
|
18
|
+
targetsCount: number;
|
|
19
|
+
};
|
|
20
|
+
expected: {
|
|
21
|
+
tokens: {
|
|
22
|
+
estimate: number;
|
|
23
|
+
contextWindowPercent: number;
|
|
24
|
+
};
|
|
25
|
+
cost: {
|
|
26
|
+
estimate: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
realized: {
|
|
30
|
+
tokens: {
|
|
31
|
+
input: number;
|
|
32
|
+
inputCacheCreation: number;
|
|
33
|
+
inputCacheRead: number;
|
|
34
|
+
output: number;
|
|
35
|
+
};
|
|
36
|
+
cost: {
|
|
37
|
+
input: number;
|
|
38
|
+
cacheWrite: number;
|
|
39
|
+
cacheRead: number;
|
|
40
|
+
output: number;
|
|
41
|
+
total: number;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* .what = executes a code review against specified rules and targets
|
|
48
|
+
* .why = core orchestration flow for reviewer role
|
|
49
|
+
*/
|
|
50
|
+
export declare const stepReview: (input: {
|
|
51
|
+
rules: string | string[];
|
|
52
|
+
diffs?: string;
|
|
53
|
+
paths?: string | string[];
|
|
54
|
+
output: string;
|
|
55
|
+
mode: 'soft' | 'hard';
|
|
56
|
+
cwd?: string;
|
|
57
|
+
}) => Promise<StepReviewResult>;
|