rhachet 1.13.12 → 1.14.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.
@@ -2,8 +2,8 @@ import type { Command } from 'commander';
2
2
  import type { RoleRegistry } from '../../contract/sdk';
3
3
  /**
4
4
  * .what = adds the "roles" command to the CLI with subcommands
5
- * .why = manages role resources (briefs and skills) in .agent/ directory structure
6
- * .how = registers "link", "boot", and "cost" subcommands under "roles"
5
+ * .why = manages role resources (briefs, skills, inits) in .agent/ directory structure
6
+ * .how = registers "link", "init", "boot", and "cost" subcommands under "roles"
7
7
  */
8
8
  export declare const invokeRoles: ({ program, registries, }: {
9
9
  program: Command;
@@ -3,17 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.invokeRoles = void 0;
4
4
  const invokeRolesBoot_1 = require("./invokeRolesBoot");
5
5
  const invokeRolesCost_1 = require("./invokeRolesCost");
6
+ const invokeRolesInit_1 = require("./invokeRolesInit");
6
7
  const invokeRolesLink_1 = require("./invokeRolesLink");
7
8
  /**
8
9
  * .what = adds the "roles" command to the CLI with subcommands
9
- * .why = manages role resources (briefs and skills) in .agent/ directory structure
10
- * .how = registers "link", "boot", and "cost" subcommands under "roles"
10
+ * .why = manages role resources (briefs, skills, inits) in .agent/ directory structure
11
+ * .how = registers "link", "init", "boot", and "cost" subcommands under "roles"
11
12
  */
12
13
  const invokeRoles = ({ program, registries, }) => {
13
14
  const rolesCommand = program
14
15
  .command('roles')
15
- .description('manage role resources (link, boot, cost)');
16
+ .description('manage role resources (link, init, boot, cost)');
16
17
  (0, invokeRolesLink_1.invokeRolesLink)({ command: rolesCommand, registries });
18
+ (0, invokeRolesInit_1.invokeRolesInit)({ command: rolesCommand, registries });
17
19
  (0, invokeRolesBoot_1.invokeRolesBoot)({ command: rolesCommand, registries });
18
20
  (0, invokeRolesCost_1.invokeRolesCost)({ command: rolesCommand, registries });
19
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"invokeRoles.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeRoles.ts"],"names":[],"mappings":";;;AAIA,uDAAoD;AACpD,uDAAoD;AACpD,uDAAoD;AAEpD;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,EAC1B,OAAO,EACP,UAAU,GAIX,EAAQ,EAAE;IACT,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC;AAdW,QAAA,WAAW,eActB"}
1
+ {"version":3,"file":"invokeRoles.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeRoles.ts"],"names":[],"mappings":";;;AAIA,uDAAoD;AACpD,uDAAoD;AACpD,uDAAoD;AACpD,uDAAoD;AAEpD;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,EAC1B,OAAO,EACP,UAAU,GAIX,EAAQ,EAAE;IACT,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gDAAgD,CAAC,CAAC;IAEjE,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACvD,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC;AAfW,QAAA,WAAW,eAetB"}
@@ -0,0 +1,11 @@
1
+ import type { Command } from 'commander';
2
+ import type { RoleRegistry } from '../../contract/sdk';
3
+ /**
4
+ * .what = adds the "roles init" subcommand to the CLI
5
+ * .why = executes role initialization commands after linking
6
+ * .how = runs Role.inits.exec commands sequentially from cwd
7
+ */
8
+ export declare const invokeRolesInit: ({ command, registries, }: {
9
+ command: Command;
10
+ registries: RoleRegistry[];
11
+ }) => void;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.invokeRolesInit = void 0;
4
+ const helpful_errors_1 = require("helpful-errors");
5
+ const assureFindRole_1 = require("../../domain.operations/invoke/assureFindRole");
6
+ const inferRepoByRole_1 = require("../../domain.operations/invoke/inferRepoByRole");
7
+ const node_child_process_1 = require("node:child_process");
8
+ /**
9
+ * .what = adds the "roles init" subcommand to the CLI
10
+ * .why = executes role initialization commands after linking
11
+ * .how = runs Role.inits.exec commands sequentially from cwd
12
+ */
13
+ const invokeRolesInit = ({ command, registries, }) => {
14
+ command
15
+ .command('init')
16
+ .description('execute role initialization commands')
17
+ .option('--repo <slug>', 'the repository slug for the role')
18
+ .option('--role <slug>', 'the role to initialize')
19
+ .action((opts) => {
20
+ if (!opts.role)
21
+ helpful_errors_1.BadRequestError.throw('--role is required (e.g., --role mechanic)');
22
+ const role = (0, assureFindRole_1.assureFindRole)({ registries, slug: opts.role });
23
+ const repo = opts.repo
24
+ ? registries.find((r) => r.slug === opts.repo)
25
+ : (0, inferRepoByRole_1.inferRepoByRole)({ registries, roleSlug: opts.role });
26
+ if (!repo)
27
+ helpful_errors_1.BadRequestError.throw(`No repo found with slug "${opts.repo}"`);
28
+ // check if role has init commands
29
+ const execCmds = role.inits?.exec ?? [];
30
+ if (execCmds.length === 0) {
31
+ console.log(``);
32
+ console.log(`⚠️ Role "${role.slug}" has no initialization commands.`);
33
+ console.log(``);
34
+ return;
35
+ }
36
+ console.log(``);
37
+ console.log(`🔧 Init role "${role.slug}" from repo "${repo.slug}"`);
38
+ console.log(``);
39
+ // execute each command sequentially
40
+ for (const { cmd } of execCmds) {
41
+ console.log(` ▸ ${cmd}`);
42
+ (0, node_child_process_1.execSync)(cmd, {
43
+ cwd: process.cwd(),
44
+ stdio: 'inherit',
45
+ shell: '/bin/bash',
46
+ });
47
+ }
48
+ console.log(``);
49
+ console.log(`✨ Role "${role.slug}" initialized successfully.`);
50
+ console.log(``);
51
+ });
52
+ };
53
+ exports.invokeRolesInit = invokeRolesInit;
54
+ //# sourceMappingURL=invokeRolesInit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invokeRolesInit.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeRolesInit.ts"],"names":[],"mappings":";;;AACA,mDAAiD;AAGjD,iFAA8E;AAC9E,mFAAgF;AAEhF,2DAA8C;AAE9C;;;;GAIG;AACI,MAAM,eAAe,GAAG,CAAC,EAC9B,OAAO,EACP,UAAU,GAIX,EAAQ,EAAE;IACT,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,MAAM,CAAC,CAAC,IAAsC,EAAE,EAAE;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,gCAAe,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAEtE,MAAM,IAAI,GAAG,IAAA,+BAAc,EAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;YACpB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;YAC9C,CAAC,CAAC,IAAA,iCAAe,EAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI;YACP,gCAAe,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAElE,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,mCAAmC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,oCAAoC;QACpC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;YAC1B,IAAA,6BAAQ,EAAC,GAAG,EAAE;gBACZ,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAlDW,QAAA,eAAe,mBAkD1B"}
@@ -68,12 +68,22 @@ const invokeRolesLink = ({ command, registries, }) => {
68
68
  targetDir: (0, node_path_1.resolve)(repoRoleDir, 'skills'),
69
69
  resourceName: 'skills',
70
70
  });
71
+ // Link inits if configured
72
+ const initsCount = role.inits?.dirs
73
+ ? (0, symlinkResourceDirectories_1.symlinkResourceDirectories)({
74
+ sourceDirs: role.inits.dirs,
75
+ targetDir: (0, node_path_1.resolve)(repoRoleDir, 'inits'),
76
+ resourceName: 'inits',
77
+ })
78
+ : 0;
71
79
  console.log(``);
72
80
  console.log(`🔗 Linked role "${role.slug}" from repo "${repo.slug}"`);
73
81
  if (briefsCount > 0)
74
82
  console.log(` - ${briefsCount} brief(s) linked`);
75
83
  if (skillsCount > 0)
76
84
  console.log(` - ${skillsCount} skill(s) linked`);
85
+ if (initsCount > 0)
86
+ console.log(` - ${initsCount} init(s) linked`);
77
87
  console.log(``);
78
88
  });
79
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"invokeRolesLink.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeRolesLink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invokeRolesLink.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeRolesLink.ts"],"names":[],"mappings":"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"}
@@ -41,11 +41,15 @@ export interface Role {
41
41
  * .why = declares what the role can do
42
42
  * .how =
43
43
  * - dirs: directory-based skills (e.g., .sh scripts) for linking/booting
44
+ * - single { uri: string }: symlinks this dir as the full skills dir
45
+ * - array { uri: string }[]: symlinks each dir within the skills dir
44
46
  * - refs: programmatic RoleSkill references for execution
45
47
  */
46
48
  skills: {
47
49
  dirs: {
48
50
  uri: string;
51
+ } | {
52
+ uri: string;
49
53
  }[];
50
54
  refs: RoleSkill<any>[];
51
55
  };
@@ -53,10 +57,35 @@ export interface Role {
53
57
  * .what = the briefs curated for this role
54
58
  * .why = declares the library of knowledge this role can and should leverage
55
59
  * - enables reuse of the briefs, independent from the skills
60
+ * .how =
61
+ * - dirs: directory-based briefs for linking/booting
62
+ * - single { uri: string }: symlinks this dir as the full briefs dir
63
+ * - array { uri: string }[]: symlinks each dir within the briefs dir
56
64
  */
57
65
  briefs: {
58
66
  dirs: {
59
67
  uri: string;
68
+ } | {
69
+ uri: string;
70
+ }[];
71
+ };
72
+ /**
73
+ * .what = initialization resources and commands for this role
74
+ * .why = declares setup actions that should run once when instantiating a role
75
+ * .how =
76
+ * - dirs: directory-based init scripts for linking (same pattern as briefs/skills)
77
+ * - single { uri: string }: symlinks this dir as the full inits dir
78
+ * - array { uri: string }[]: symlinks each dir within the inits dir
79
+ * - exec: commands to execute when `npx rhachet roles init` is run
80
+ */
81
+ inits?: {
82
+ dirs?: {
83
+ uri: string;
84
+ } | {
85
+ uri: string;
86
+ }[];
87
+ exec?: {
88
+ cmd: string;
60
89
  }[];
61
90
  };
62
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Role.js","sourceRoot":"","sources":["../../src/domain.objects/Role.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAgE9C,MAAa,IAAK,SAAQ,6BAAkB;;AAA5C,oBAEC;AADe,WAAM,GAAG,CAAC,MAAM,CAAU,CAAC"}
1
+ {"version":3,"file":"Role.js","sourceRoot":"","sources":["../../src/domain.objects/Role.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAoF9C,MAAa,IAAK,SAAQ,6BAAkB;;AAA5C,oBAEC;AADe,WAAM,GAAG,CAAC,MAAM,CAAU,CAAC"}
@@ -1,10 +1,15 @@
1
1
  /**
2
2
  * .what = creates symlinks for resource directories to a target directory
3
3
  * .why = enables role resources (briefs, skills, etc.) to be linked from node_modules or other sources
4
- * .how = removes deprecated symlinks, then creates symlinks for entire directories, returns count of leaf files
4
+ * .how =
5
+ * - single { uri: string }: symlinks the source dir directly as the target dir
6
+ * - array { uri: string }[]: removes deprecated symlinks, then symlinks each dir within target
7
+ * - returns count of leaf files
5
8
  */
6
9
  export declare const symlinkResourceDirectories: (options: {
7
- sourceDirs: Array<{
10
+ sourceDirs: {
11
+ uri: string;
12
+ } | Array<{
8
13
  uri: string;
9
14
  }>;
10
15
  targetDir: string;
@@ -51,13 +51,46 @@ const setDirectoryReadonlyExecutable = (dirPath) => {
51
51
  /**
52
52
  * .what = creates symlinks for resource directories to a target directory
53
53
  * .why = enables role resources (briefs, skills, etc.) to be linked from node_modules or other sources
54
- * .how = removes deprecated symlinks, then creates symlinks for entire directories, returns count of leaf files
54
+ * .how =
55
+ * - single { uri: string }: symlinks the source dir directly as the target dir
56
+ * - array { uri: string }[]: removes deprecated symlinks, then symlinks each dir within target
57
+ * - returns count of leaf files
55
58
  */
56
59
  const symlinkResourceDirectories = (options) => {
57
60
  const { sourceDirs, targetDir, resourceName } = options;
58
- // Calculate expected symlink names based on source directories
61
+ // handle single-dir mode: symlink source dir directly as target dir
62
+ if (!Array.isArray(sourceDirs)) {
63
+ const sourcePath = (0, node_path_1.resolve)(process.cwd(), sourceDirs.uri);
64
+ if (!(0, node_fs_1.existsSync)(sourcePath))
65
+ return 0;
66
+ // remove existing target if present (symlink or directory)
67
+ const relativeTargetPath = (0, node_path_1.relative)(process.cwd(), targetDir);
68
+ if ((0, node_fs_1.existsSync)(targetDir)) {
69
+ try {
70
+ (0, node_fs_1.unlinkSync)(targetDir);
71
+ console.log(` ↻ ${relativeTargetPath} (updated)`);
72
+ }
73
+ catch {
74
+ (0, node_fs_1.rmSync)(targetDir, { recursive: true, force: true });
75
+ console.log(` ↻ ${relativeTargetPath} (updated)`);
76
+ }
77
+ }
78
+ else {
79
+ console.log(` + ${relativeTargetPath}`);
80
+ }
81
+ // create parent directory if needed
82
+ const targetParent = (0, node_path_1.resolve)(targetDir, '..');
83
+ (0, node_fs_1.mkdirSync)(targetParent, { recursive: true });
84
+ // create relative symlink: targetDir -> sourcePath
85
+ const relativeSource = (0, node_path_1.relative)(targetParent, sourcePath);
86
+ (0, node_fs_1.symlinkSync)(relativeSource, targetDir, 'dir');
87
+ setDirectoryReadonlyExecutable(sourcePath);
88
+ return countFilesInDirectory(sourcePath);
89
+ }
90
+ // handle array-dir mode: symlink each dir within target dir
91
+ // calculate expected symlink names based on source directories
59
92
  const expectedNames = new Set(sourceDirs.map((dir) => (0, node_path_1.basename)(dir.uri)));
60
- // Remove deprecated symlinks (ones that exist but are no longer in the config)
93
+ // remove deprecated symlinks (ones that exist but are no longer in the config)
61
94
  if ((0, node_fs_1.existsSync)(targetDir)) {
62
95
  const existingEntries = (0, node_fs_1.readdirSync)(targetDir);
63
96
  for (const entry of existingEntries) {
@@ -74,21 +107,18 @@ const symlinkResourceDirectories = (options) => {
74
107
  }
75
108
  }
76
109
  }
77
- if (sourceDirs.length === 0) {
110
+ if (sourceDirs.length === 0)
78
111
  return 0;
79
- }
80
112
  let totalFileCount = 0;
81
113
  for (const sourceDir of sourceDirs) {
82
114
  const sourcePath = (0, node_path_1.resolve)(process.cwd(), sourceDir.uri);
83
- if (!(0, node_fs_1.existsSync)(sourcePath)) {
84
- continue; // Skip if source doesn't exist
85
- }
86
- // Create target directory parent if needed
115
+ if (!(0, node_fs_1.existsSync)(sourcePath))
116
+ continue;
117
+ // create target directory parent if needed
87
118
  (0, node_fs_1.mkdirSync)(targetDir, { recursive: true });
88
- // Create a unique target path for this source directory
89
- // Use the basename of the source directory to avoid conflicts
119
+ // create a unique target path for this source directory
90
120
  const targetPath = (0, node_path_1.resolve)(targetDir, (0, node_path_1.basename)(sourcePath));
91
- // Remove existing symlink/file if it exists
121
+ // remove existing symlink/file if it exists
92
122
  const relativeTargetPath = (0, node_path_1.relative)(process.cwd(), targetPath);
93
123
  if ((0, node_fs_1.existsSync)(targetPath)) {
94
124
  try {
@@ -103,24 +133,12 @@ const symlinkResourceDirectories = (options) => {
103
133
  else {
104
134
  console.log(` + ${relativeTargetPath}`);
105
135
  }
106
- // Create relative symlink from target directory to source directory
136
+ // create relative symlink from target directory to source directory
107
137
  const relativeSource = (0, node_path_1.relative)(targetDir, sourcePath);
108
- try {
109
- (0, node_fs_1.symlinkSync)(relativeSource, targetPath, 'dir');
110
- // set all files and directories to readonly+executable to prevent accidental or malicious overwrites while allowing skills to run
111
- setDirectoryReadonlyExecutable(sourcePath);
112
- // count the files in the source directory
113
- const fileCount = countFilesInDirectory(sourcePath);
114
- totalFileCount += fileCount;
115
- }
116
- catch (error) {
117
- if (error.code === 'EEXIST') {
118
- console.log(` ⚠️ ${relativeTargetPath} already exists (skipped)`);
119
- }
120
- else {
121
- throw error;
122
- }
123
- }
138
+ (0, node_fs_1.symlinkSync)(relativeSource, targetPath, 'dir');
139
+ setDirectoryReadonlyExecutable(sourcePath);
140
+ const fileCount = countFilesInDirectory(sourcePath);
141
+ totalFileCount += fileCount;
124
142
  }
125
143
  return totalFileCount;
126
144
  };
@@ -1 +1 @@
1
- {"version":3,"file":"symlinkResourceDirectories.js","sourceRoot":"","sources":["../../../../src/domain.operations/invoke/link/symlinkResourceDirectories.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symlinkResourceDirectories.js","sourceRoot":"","sources":["../../../../src/domain.operations/invoke/link/symlinkResourceDirectories.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "rhachet",
3
3
  "author": "ehmpathy",
4
4
  "description": "A framework for reliable, thorough thought. Weave threads of thought via stitches.",
5
- "version": "1.13.12",
5
+ "version": "1.14.0",
6
6
  "repository": "ehmpathy/rhachet",
7
7
  "homepage": "https://github.com/ehmpathy/rhachet",
8
8
  "keywords": [
@@ -51,7 +51,7 @@
51
51
  "postversion": "git push origin HEAD --tags --no-verify",
52
52
  "prepare:husky": "husky install && chmod ug+x .husky/*",
53
53
  "prepare": "if [ -e .git ] && [ -z $CI ]; then npm run prepare:husky && npm run prepare:rhachet; fi",
54
- "prepare:rhachet": "rhachet init --force && rhachet roles link --role mechanic && .agent/repo=ehmpathy/role=mechanic/skills/.skills/init.claude.sh"
54
+ "prepare:rhachet": "rhachet init && rhachet roles link --role mechanic && .agent/repo=ehmpathy/role=mechanic/skills/.skills/init.claude.sh"
55
55
  },
56
56
  "dependencies": {
57
57
  "@ehmpathy/uni-time": "1.9.0",
@@ -89,8 +89,8 @@
89
89
  "esbuild-register": "3.6.0",
90
90
  "husky": "8.0.3",
91
91
  "jest": "30.2.0",
92
- "rhachet": "1.13.1",
93
- "rhachet-roles-ehmpathy": "1.15.1",
92
+ "rhachet": "1.13.11",
93
+ "rhachet-roles-ehmpathy": "1.15.12",
94
94
  "test-fns": "1.7.0",
95
95
  "tsc-alias": "1.8.10",
96
96
  "tsx": "~4.20.6",