rhachet-roles-bhrain 0.7.4 → 0.7.5

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.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * .what = cli entrypoint for reflect skill
3
+ * .why = enables shell invocation via package-level import
4
+ *
5
+ * .note = this is a SKILL entrypoint, not a public api
6
+ * brain packages are imported here because skill users have them installed
7
+ */
8
+ export declare const reflect: () => Promise<void>;
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reflect = void 0;
4
+ const rhachet_1 = require("rhachet");
5
+ const rhachet_brains_anthropic_1 = require("rhachet-brains-anthropic");
6
+ const rhachet_brains_openai_1 = require("rhachet-brains-openai");
7
+ const rhachet_brains_xai_1 = require("rhachet-brains-xai");
8
+ const stepReflect_1 = require("../../domain.operations/reflect/stepReflect");
9
+ /**
10
+ * .what = default brain for reflect skill
11
+ * .why = anthropic/claude/sonnet-4 is effective for rule extraction and synthesis
12
+ */
13
+ const DEFAULT_BRAIN = 'anthropic/claude/sonnet-4';
14
+ /**
15
+ * .what = loads all available brain atoms from installed packages
16
+ * .why = enables enumeration of available brains for lookup
17
+ */
18
+ const loadAllAtoms = () => {
19
+ return [
20
+ ...(0, rhachet_brains_xai_1.getBrainAtomsByXAI)(),
21
+ ...(0, rhachet_brains_anthropic_1.getBrainAtomsByAnthropic)(),
22
+ ...(0, rhachet_brains_openai_1.getBrainAtomsByOpenAI)(),
23
+ ];
24
+ };
25
+ /**
26
+ * .what = loads all available brain repls from installed packages
27
+ * .why = enables enumeration of available brains for lookup
28
+ */
29
+ const loadAllRepls = () => {
30
+ return [...(0, rhachet_brains_anthropic_1.getBrainReplsByAnthropic)(), ...(0, rhachet_brains_openai_1.getBrainReplsByOpenAI)()];
31
+ };
32
+ /**
33
+ * .what = prints help message with available brains
34
+ * .why = enables users to discover available brain options
35
+ */
36
+ const printHelp = (input) => {
37
+ const brainsInWords = (0, rhachet_1.getAvailableBrainsInWords)({
38
+ atoms: input.atoms,
39
+ repls: input.repls,
40
+ choice: '',
41
+ });
42
+ console.log(`
43
+ reflect - extract rules from feedback and propose to target
44
+
45
+ usage:
46
+ reflect.sh [options]
47
+
48
+ options:
49
+ --source <path> source directory with feedback files (required)
50
+ --target <path> target directory for rules (required)
51
+ --mode <mode> reflect mode: push or pull (default: pull)
52
+ --force create target directory if it does not exist
53
+ --brain <slug> brain to use for reflection (default: ${DEFAULT_BRAIN})
54
+ --help show this help message
55
+
56
+ ${brainsInWords}
57
+ `.trim());
58
+ };
59
+ /**
60
+ * .what = checks if help flag is present in args
61
+ * .why = enables early exit for help display
62
+ */
63
+ const hasHelpFlag = (argv) => {
64
+ return argv.includes('--help') || argv.includes('-h');
65
+ };
66
+ /**
67
+ * .what = detects if node was invoked via `node -e "code"` (eval mode)
68
+ * .why = in eval mode, argv has no entrypoint path: [node, firstArg, ...]
69
+ * in normal mode, argv has entrypoint path: [node, file.js, firstArg, ...]
70
+ * we skip different counts to slice argv correctly
71
+ */
72
+ const isNodeEvalMode = (argv) => {
73
+ // in eval mode, argv[1] is the first user arg (e.g., --source), not an entrypoint path
74
+ // entrypoint paths end with .js, .ts, .mjs, etc. and don't start with --
75
+ const secondArg = argv[1];
76
+ if (!secondArg)
77
+ return false;
78
+ const looksLikeEntrypointPath = /\.(js|ts|mjs|cjs)$/.test(secondArg) || !secondArg.startsWith('--');
79
+ return !looksLikeEntrypointPath;
80
+ };
81
+ /**
82
+ * .what = parses cli args into options object
83
+ * .why = simple arg parser without external dependencies
84
+ */
85
+ const parseArgs = (argv) => {
86
+ // skip node binary (always argv[0]) and entrypoint path (only in normal mode)
87
+ const skipCount = isNodeEvalMode(argv) ? 1 : 2;
88
+ const args = argv.slice(skipCount).filter((arg) => arg !== '--');
89
+ const options = {};
90
+ for (let i = 0; i < args.length; i++) {
91
+ const arg = args[i];
92
+ if (!arg)
93
+ continue;
94
+ if (arg.startsWith('--')) {
95
+ const key = arg.slice(2);
96
+ // handle boolean flags
97
+ if (key === 'force') {
98
+ options[key] = true;
99
+ continue;
100
+ }
101
+ const value = args[i + 1];
102
+ if (value && !value.startsWith('--')) {
103
+ options[key] = value;
104
+ i++;
105
+ }
106
+ }
107
+ }
108
+ return {
109
+ source: options.source,
110
+ target: options.target,
111
+ mode: options.mode ?? 'pull',
112
+ force: options.force ?? false,
113
+ brain: options.brain ?? DEFAULT_BRAIN,
114
+ };
115
+ };
116
+ /**
117
+ * .what = cli entrypoint for reflect skill
118
+ * .why = enables shell invocation via package-level import
119
+ *
120
+ * .note = this is a SKILL entrypoint, not a public api
121
+ * brain packages are imported here because skill users have them installed
122
+ */
123
+ const reflect = async () => {
124
+ // load brains early for help display
125
+ const atoms = loadAllAtoms();
126
+ const repls = loadAllRepls();
127
+ // handle --help flag
128
+ if (hasHelpFlag(process.argv)) {
129
+ printHelp({ atoms, repls });
130
+ return;
131
+ }
132
+ // parse args and create brain context
133
+ const options = parseArgs(process.argv);
134
+ const brain = (0, rhachet_1.genContextBrain)({
135
+ atoms,
136
+ repls,
137
+ choice: options.brain,
138
+ });
139
+ // invoke stepReflect
140
+ await (0, stepReflect_1.stepReflect)({
141
+ source: options.source,
142
+ target: options.target,
143
+ mode: options.mode,
144
+ force: options.force,
145
+ }, { brain });
146
+ };
147
+ exports.reflect = reflect;
148
+ //# sourceMappingURL=reflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../../src/contract/cli/reflect.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * .what = cli entrypoint for review skill
3
- * .why = enables shell invocation via review.sh
3
+ * .why = enables shell invocation via package-level import
4
4
  *
5
5
  * .note = this is a SKILL entrypoint, not a public api
6
6
  * brain packages are imported here because skill users have them installed
@@ -5,7 +5,7 @@ const rhachet_1 = require("rhachet");
5
5
  const rhachet_brains_anthropic_1 = require("rhachet-brains-anthropic");
6
6
  const rhachet_brains_openai_1 = require("rhachet-brains-openai");
7
7
  const rhachet_brains_xai_1 = require("rhachet-brains-xai");
8
- const stepReview_1 = require("../../../domain.operations/review/stepReview");
8
+ const stepReview_1 = require("../../domain.operations/review/stepReview");
9
9
  /**
10
10
  * .what = default brain for review skill
11
11
  * .why = xai/grok/code-fast-1 is fast, cheap, and effective for code review
@@ -83,7 +83,7 @@ const isNodeEvalMode = (argv) => {
83
83
  };
84
84
  /**
85
85
  * .what = parses cli args into options object
86
- * .why = simple arg parse without external dependencies
86
+ * .why = simple arg parser without external dependencies
87
87
  */
88
88
  const parseArgs = (argv) => {
89
89
  // skip node binary (always argv[0]) and script path (only in normal mode)
@@ -125,7 +125,7 @@ const parseArgs = (argv) => {
125
125
  };
126
126
  /**
127
127
  * .what = cli entrypoint for review skill
128
- * .why = enables shell invocation via review.sh
128
+ * .why = enables shell invocation via package-level import
129
129
  *
130
130
  * .note = this is a SKILL entrypoint, not a public api
131
131
  * brain packages are imported here because skill users have them installed
@@ -158,4 +158,4 @@ const review = async () => {
158
158
  }, { brain });
159
159
  };
160
160
  exports.review = review;
161
- //# sourceMappingURL=review.cli.js.map
161
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/contract/cli/review.ts"],"names":[],"mappings":"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"}
@@ -19,4 +19,4 @@
19
19
 
20
20
  set -euo pipefail
21
21
 
22
- exec npx tsx -e "import('rhachet-roles-bhrain').then(m => m.cli.reflect())" -- "$@"
22
+ exec node -e "import('rhachet-roles-bhrain').then(m => m.cli.reflect())" -- "$@"
@@ -17,5 +17,4 @@
17
17
  ######################################################################
18
18
  set -euo pipefail
19
19
 
20
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
21
- exec node -e "import('$SCRIPT_DIR/review.cli.js').then(m => m.review())" -- "$@"
20
+ exec node -e "import('rhachet-roles-bhrain').then(m => m.cli.review())" -- "$@"
package/dist/index.d.ts CHANGED
@@ -3,3 +3,7 @@ export type { StepReflectResult } from './domain.operations/reflect/stepReflect'
3
3
  export { stepReflect } from './domain.operations/reflect/stepReflect';
4
4
  export type { StepReviewResult } from './domain.operations/review/stepReview';
5
5
  export { stepReview } from './domain.operations/review/stepReview';
6
+ export declare const cli: {
7
+ review: () => Promise<void>;
8
+ reflect: () => Promise<void>;
9
+ };
package/dist/index.js CHANGED
@@ -14,11 +14,18 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.stepReview = exports.stepReflect = void 0;
17
+ exports.cli = exports.stepReview = exports.stepReflect = void 0;
18
18
  __exportStar(require("./contract/sdk"), exports);
19
19
  // domain operations for consumers who provide their own brain context
20
20
  var stepReflect_1 = require("./domain.operations/reflect/stepReflect");
21
21
  Object.defineProperty(exports, "stepReflect", { enumerable: true, get: function () { return stepReflect_1.stepReflect; } });
22
22
  var stepReview_1 = require("./domain.operations/review/stepReview");
23
23
  Object.defineProperty(exports, "stepReview", { enumerable: true, get: function () { return stepReview_1.stepReview; } });
24
+ const reflect_1 = require("./contract/cli/reflect");
25
+ // cli entry points for portable skill dispatch
26
+ const review_1 = require("./contract/cli/review");
27
+ exports.cli = {
28
+ review: review_1.review,
29
+ reflect: reflect_1.reflect,
30
+ };
24
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAElC,sEAAsE;AACtE,0EAAyE;AAAhE,0GAAA,WAAW,OAAA;AAEpB,uEAAsE;AAA7D,wGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAElC,sEAAsE;AACtE,0EAAyE;AAAhE,0GAAA,WAAW,OAAA;AAEpB,uEAAsE;AAA7D,wGAAA,UAAU,OAAA;AAEnB,uDAAoD;AACpD,+CAA+C;AAC/C,qDAAkD;AAErC,QAAA,GAAG,GAAG;IACjB,MAAM,EAAN,eAAM;IACN,OAAO,EAAP,iBAAO;CACR,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "rhachet-roles-bhrain",
3
3
  "author": "ehmpathy",
4
4
  "description": "reliable thought concept navigation roles, briefs, and skills, via rhachet",
5
- "version": "0.7.4",
5
+ "version": "0.7.5",
6
6
  "repository": "ehmpathy/rhachet-roles-bhrain",
7
7
  "homepage": "https://github.com/ehmpathy/rhachet-roles-bhrain",
8
8
  "keywords": [
@@ -1 +0,0 @@
1
- {"version":3,"file":"review.cli.js","sourceRoot":"","sources":["../../../../src/domain.roles/reviewer/skills/review.cli.ts"],"names":[],"mappings":"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"}
@@ -1,197 +0,0 @@
1
- import {
2
- type BrainAtom,
3
- type BrainRepl,
4
- genContextBrain,
5
- getAvailableBrainsInWords,
6
- } from 'rhachet';
7
- import {
8
- getBrainAtomsByAnthropic,
9
- getBrainReplsByAnthropic,
10
- } from 'rhachet-brains-anthropic';
11
- import {
12
- getBrainAtomsByOpenAI,
13
- getBrainReplsByOpenAI,
14
- } from 'rhachet-brains-openai';
15
- import { getBrainAtomsByXAI } from 'rhachet-brains-xai';
16
-
17
- import { stepReview } from '@src/domain.operations/review/stepReview';
18
-
19
- /**
20
- * .what = default brain for review skill
21
- * .why = xai/grok/code-fast-1 is fast, cheap, and effective for code review
22
- */
23
- const DEFAULT_BRAIN = 'xai/grok/code-fast-1';
24
-
25
- /**
26
- * .what = loads all available brain atoms from installed packages
27
- * .why = enables enumeration of available brains for lookup
28
- */
29
- const loadAllAtoms = (): BrainAtom[] => {
30
- return [
31
- ...getBrainAtomsByXAI(),
32
- ...getBrainAtomsByAnthropic(),
33
- ...getBrainAtomsByOpenAI(),
34
- ];
35
- };
36
-
37
- /**
38
- * .what = loads all available brain repls from installed packages
39
- * .why = enables enumeration of available brains for lookup
40
- */
41
- const loadAllRepls = (): BrainRepl[] => {
42
- return [...getBrainReplsByAnthropic(), ...getBrainReplsByOpenAI()];
43
- };
44
-
45
- /**
46
- * .what = prints help message with available brains
47
- * .why = enables users to discover available brain options
48
- */
49
- const printHelp = (input: { atoms: BrainAtom[]; repls: BrainRepl[] }): void => {
50
- const brainsInWords = getAvailableBrainsInWords({
51
- atoms: input.atoms,
52
- repls: input.repls,
53
- choice: '',
54
- });
55
-
56
- console.log(
57
- `
58
- review - code review against rules
59
-
60
- usage:
61
- review.sh [options]
62
-
63
- options:
64
- --rules <globs> glob pattern(s) for rule files (required)
65
- --paths <globs> glob pattern(s) for target files
66
- --diffs <range> diff range: uptil-main, uptil-commit, uptil-staged
67
- --refs <globs> glob pattern(s) for reference files (can repeat)
68
- --output <path> output file path for the review (required)
69
- --mode <mode> review mode: push or pull (default: push)
70
- --goal <goal> review goal: exhaustive or representative (default: representative)
71
- --brain <slug> brain to use for review (default: ${DEFAULT_BRAIN})
72
- --help show this help message
73
-
74
- ${brainsInWords}
75
- `.trim(),
76
- );
77
- };
78
-
79
- /**
80
- * .what = checks if help flag is present in args
81
- * .why = enables early exit for help display
82
- */
83
- const hasHelpFlag = (argv: string[]): boolean => {
84
- return argv.includes('--help') || argv.includes('-h');
85
- };
86
-
87
- /**
88
- * .what = detects if node was invoked via `node -e "code"` (eval mode)
89
- * .why = in eval mode, argv has no script path: [node, firstArg, ...]
90
- * in normal mode, argv has script path: [node, script.js, firstArg, ...]
91
- * we need to skip different counts when slicing argv
92
- */
93
- const isNodeEvalMode = (argv: string[]): boolean => {
94
- // in eval mode, argv[1] is the first user arg (e.g., --rules), not a script path
95
- // script paths end with .js, .ts, .mjs, etc. and don't start with --
96
- const secondArg = argv[1];
97
- if (!secondArg) return false;
98
- const looksLikeScriptPath =
99
- /\.(js|ts|mjs|cjs)$/.test(secondArg) || !secondArg.startsWith('--');
100
- return !looksLikeScriptPath;
101
- };
102
-
103
- /**
104
- * .what = parses cli args into options object
105
- * .why = simple arg parse without external dependencies
106
- */
107
- const parseArgs = (
108
- argv: string[],
109
- ): {
110
- rules: string;
111
- diffs: string | undefined;
112
- paths: string | undefined;
113
- refs: string[] | undefined;
114
- output: string;
115
- mode: 'push' | 'pull';
116
- goal: 'exhaustive' | 'representative';
117
- brain: string;
118
- } => {
119
- // skip node binary (always argv[0]) and script path (only in normal mode)
120
- const skipCount = isNodeEvalMode(argv) ? 1 : 2;
121
- const args = argv.slice(skipCount).filter((arg) => arg !== '--');
122
- const options: Record<string, string | string[]> = {};
123
-
124
- for (let i = 0; i < args.length; i++) {
125
- const arg = args[i];
126
- if (!arg) continue;
127
-
128
- if (arg.startsWith('--')) {
129
- const key = arg.slice(2);
130
- const value = args[i + 1];
131
-
132
- // handle --refs which can be specified multiple times
133
- if (key === 'refs') {
134
- if (!options.refs) options.refs = [];
135
- if (value && !value.startsWith('--')) {
136
- (options.refs as string[]).push(value);
137
- i++;
138
- }
139
- } else if (value && !value.startsWith('--')) {
140
- options[key] = value;
141
- i++;
142
- }
143
- }
144
- }
145
-
146
- return {
147
- rules: options.rules as string,
148
- diffs: options.diffs as string | undefined,
149
- paths: options.paths as string | undefined,
150
- refs: options.refs as string[] | undefined,
151
- output: options.output as string,
152
- mode: (options.mode as 'push' | 'pull') ?? 'push',
153
- goal: (options.goal as 'exhaustive' | 'representative') ?? 'representative',
154
- brain: (options.brain as string) ?? DEFAULT_BRAIN,
155
- };
156
- };
157
-
158
- /**
159
- * .what = cli entrypoint for review skill
160
- * .why = enables shell invocation via review.sh
161
- *
162
- * .note = this is a SKILL entrypoint, not a public api
163
- * brain packages are imported here because skill users have them installed
164
- */
165
- export const review = async (): Promise<void> => {
166
- // load brains early for help display
167
- const atoms = loadAllAtoms();
168
- const repls = loadAllRepls();
169
-
170
- // handle --help flag
171
- if (hasHelpFlag(process.argv)) {
172
- printHelp({ atoms, repls });
173
- return;
174
- }
175
-
176
- // parse args and create brain context
177
- const options = parseArgs(process.argv);
178
- const brain = genContextBrain({
179
- atoms,
180
- repls,
181
- choice: options.brain,
182
- });
183
-
184
- // invoke stepReview
185
- await stepReview(
186
- {
187
- rules: options.rules,
188
- diffs: options.diffs,
189
- paths: options.paths,
190
- refs: options.refs,
191
- output: options.output,
192
- mode: options.mode,
193
- goal: options.goal,
194
- },
195
- { brain },
196
- );
197
- };