rhachet 1.6.0 → 1.7.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 (61) hide show
  1. package/dist/.test/directory.d.ts +1 -0
  2. package/dist/.test/directory.js +2 -1
  3. package/dist/.test/directory.js.map +1 -1
  4. package/dist/{contract/cli/.test → .test/example.use.repo}/example.echoRegistry.d.ts +1 -1
  5. package/dist/.test/example.use.repo/example.echoRegistry.js +104 -0
  6. package/dist/.test/example.use.repo/example.echoRegistry.js.map +1 -0
  7. package/dist/contract/cli/invoke.integration.test.js +2 -1
  8. package/dist/contract/cli/invoke.integration.test.js.map +1 -1
  9. package/dist/contract/cli/invoke.js +10 -33
  10. package/dist/contract/cli/invoke.js.map +1 -1
  11. package/dist/contract/cli/invokeAsk.d.ts +4 -1
  12. package/dist/contract/cli/invokeAsk.integration.test.js +29 -2
  13. package/dist/contract/cli/invokeAsk.integration.test.js.map +1 -1
  14. package/dist/contract/cli/invokeAsk.js +14 -44
  15. package/dist/contract/cli/invokeAsk.js.map +1 -1
  16. package/dist/contract/cli/invokeReadme.integration.test.js +1 -1
  17. package/dist/contract/cli/invokeReadme.integration.test.js.map +1 -1
  18. package/dist/directory.d.ts +1 -0
  19. package/dist/directory.js +5 -0
  20. package/dist/directory.js.map +1 -0
  21. package/dist/domain/objects/InvokeOpts.d.ts +11 -0
  22. package/dist/domain/objects/InvokeOpts.js +3 -0
  23. package/dist/domain/objects/InvokeOpts.js.map +1 -0
  24. package/dist/domain/objects/InvokeOpts.test.d.ts +1 -0
  25. package/dist/domain/objects/InvokeOpts.test.js +41 -0
  26. package/dist/domain/objects/InvokeOpts.test.js.map +1 -0
  27. package/dist/logic/invoke/addAttemptQualifierToOutputPath.d.ts +13 -0
  28. package/dist/logic/invoke/addAttemptQualifierToOutputPath.js +30 -0
  29. package/dist/logic/invoke/addAttemptQualifierToOutputPath.js.map +1 -0
  30. package/dist/logic/invoke/addAttemptQualifierToOutputPath.test.d.ts +1 -0
  31. package/dist/logic/invoke/addAttemptQualifierToOutputPath.test.js +130 -0
  32. package/dist/logic/invoke/addAttemptQualifierToOutputPath.test.js.map +1 -0
  33. package/dist/logic/invoke/getRegistriesByOpts.d.ts +13 -0
  34. package/dist/logic/invoke/getRegistriesByOpts.js +40 -0
  35. package/dist/logic/invoke/getRegistriesByOpts.js.map +1 -0
  36. package/dist/logic/invoke/getSkillThread.test.js.map +1 -1
  37. package/dist/logic/invoke/getSkillThreads.d.ts +4 -1
  38. package/dist/logic/invoke/getSkillThreads.js +1 -1
  39. package/dist/logic/invoke/getSkillThreads.js.map +1 -1
  40. package/dist/logic/invoke/performInCurrentThread.d.ts +16 -0
  41. package/dist/logic/invoke/performInCurrentThread.js +56 -0
  42. package/dist/logic/invoke/performInCurrentThread.js.map +1 -0
  43. package/dist/logic/invoke/performInIsolatedThread.execute.d.ts +14 -0
  44. package/dist/logic/invoke/performInIsolatedThread.execute.js +48 -0
  45. package/dist/logic/invoke/performInIsolatedThread.execute.js.map +1 -0
  46. package/dist/logic/invoke/performInIsolatedThread.invoke.d.ts +31 -0
  47. package/dist/logic/invoke/performInIsolatedThread.invoke.integration.test.d.ts +1 -0
  48. package/dist/logic/invoke/performInIsolatedThread.invoke.integration.test.js +74 -0
  49. package/dist/logic/invoke/performInIsolatedThread.invoke.integration.test.js.map +1 -0
  50. package/dist/logic/invoke/performInIsolatedThread.invoke.js +93 -0
  51. package/dist/logic/invoke/performInIsolatedThread.invoke.js.map +1 -0
  52. package/dist/logic/invoke/performInIsolatedThreads.d.ts +19 -0
  53. package/dist/logic/invoke/performInIsolatedThreads.integration.test.d.ts +1 -0
  54. package/dist/logic/invoke/performInIsolatedThreads.integration.test.js +75 -0
  55. package/dist/logic/invoke/performInIsolatedThreads.integration.test.js.map +1 -0
  56. package/dist/logic/invoke/performInIsolatedThreads.js +99 -0
  57. package/dist/logic/invoke/performInIsolatedThreads.js.map +1 -0
  58. package/package.json +7 -4
  59. package/readme.md +27 -8
  60. package/dist/contract/cli/.test/example.echoRegistry.js +0 -54
  61. package/dist/contract/cli/.test/example.echoRegistry.js.map +0 -1
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const test_fns_1 = require("test-fns");
4
+ const addAttemptQualifierToOutputPath_1 = require("./addAttemptQualifierToOutputPath");
5
+ describe('addAttemptQualifierToOutputPath', () => {
6
+ describe('with replacement variable', () => {
7
+ (0, test_fns_1.given)('a path containing {{attempt}} once', () => {
8
+ const input = { path: 'dist/out.{{attempt}}.json', attempt: 3 };
9
+ (0, test_fns_1.when)('qualifying the path', () => {
10
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
11
+ (0, test_fns_1.then)('it replaces the placeholder with i{attempt}', () => {
12
+ expect(result).toBe('dist/out.i3.json');
13
+ });
14
+ });
15
+ });
16
+ (0, test_fns_1.given)('a path containing {{attempt}} multiple times', () => {
17
+ const input = { path: 'a.{{attempt}}.b.{{attempt}}.c', attempt: 9 };
18
+ (0, test_fns_1.when)('qualifying the path', () => {
19
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
20
+ (0, test_fns_1.then)('it replaces each occurrence', () => {
21
+ expect(result).toBe('a.i9.b.i9.c');
22
+ });
23
+ });
24
+ });
25
+ (0, test_fns_1.given)('a path with {{attempt}} and dotted directories', () => {
26
+ const input = { path: 'build.v2/out.{{attempt}}.log', attempt: 11 };
27
+ (0, test_fns_1.when)('qualifying the path', () => {
28
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
29
+ (0, test_fns_1.then)('it replaces the placeholder in the filename and preserves directories', () => {
30
+ expect(result).toBe('build.v2/out.i11.log');
31
+ });
32
+ });
33
+ });
34
+ });
35
+ describe('wout replacement variable', () => {
36
+ describe('with extension', () => {
37
+ (0, test_fns_1.given)('a simple file with one extension', () => {
38
+ const input = { path: 'out.json', attempt: 2 };
39
+ (0, test_fns_1.when)('qualifying the path', () => {
40
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
41
+ (0, test_fns_1.then)('it inserts .i{attempt} before the final extension', () => {
42
+ expect(result).toBe('out.i2.json');
43
+ });
44
+ });
45
+ });
46
+ (0, test_fns_1.given)('a multi-dot basename but a single final extension', () => {
47
+ const input = { path: 'foo.bar.baz.json', attempt: 7 };
48
+ (0, test_fns_1.when)('qualifying the path', () => {
49
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
50
+ (0, test_fns_1.then)('it inserts only before the final extension', () => {
51
+ expect(result).toBe('foo.bar.baz.i7.json');
52
+ });
53
+ });
54
+ });
55
+ (0, test_fns_1.given)('a hidden file with an extension (e.g., .env.local)', () => {
56
+ const input = { path: '.env.local', attempt: 4 };
57
+ (0, test_fns_1.when)('qualifying the path', () => {
58
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
59
+ (0, test_fns_1.then)('it preserves the leading dot and inserts before the final extension', () => {
60
+ expect(result).toBe('.env.i4.local'); // if folks dont want this outcome, they can use {{attempt}} replacement var instead
61
+ });
62
+ });
63
+ });
64
+ (0, test_fns_1.given)('a dotted directory with a simple filename', () => {
65
+ const input = { path: 'build.v1/output.json', attempt: 5 };
66
+ (0, test_fns_1.when)('qualifying the path', () => {
67
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
68
+ (0, test_fns_1.then)('it preserves directory dots and inserts before the final extension', () => {
69
+ expect(result).toBe('build.v1/output.i5.json');
70
+ });
71
+ });
72
+ });
73
+ (0, test_fns_1.given)('attempt number zero (edge numeric case)', () => {
74
+ const input = { path: 'file.txt', attempt: 0 };
75
+ (0, test_fns_1.when)('qualifying the path', () => {
76
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
77
+ (0, test_fns_1.then)('it renders i0 in the qualified path', () => {
78
+ expect(result).toBe('file.i0.txt');
79
+ });
80
+ });
81
+ });
82
+ });
83
+ // explicitly not supported today
84
+ // todo: should we ever support this? folks can simply use template var replacement if needed. otherwise, seems like an infinite list of extensions to allowlist
85
+ describe.skip('double extension', () => {
86
+ (0, test_fns_1.given)('a nested path with .tar.gz', () => {
87
+ const input = { path: 'build/artifacts/output.tar.gz', attempt: 5 };
88
+ (0, test_fns_1.when)('qualifying the path', () => {
89
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
90
+ (0, test_fns_1.then)('it inserts before the last extension only', () => {
91
+ expect(result).toBe('build/artifacts/output.i5.tar.gz');
92
+ });
93
+ });
94
+ });
95
+ (0, test_fns_1.given)('multiple dotted directories and a multi-dot filename', () => {
96
+ const input = {
97
+ path: 'releases/2025.09.09/artifact.v2.tar.gz',
98
+ attempt: 8,
99
+ };
100
+ (0, test_fns_1.when)('qualifying the path', () => {
101
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
102
+ (0, test_fns_1.then)('it qualifies before the final extension and keeps directory dots intact', () => {
103
+ expect(result).toBe('releases/2025.09.09/artifact.v2.i8.tar.gz');
104
+ });
105
+ });
106
+ });
107
+ });
108
+ describe('no extension', () => {
109
+ (0, test_fns_1.given)('a regular file with no extension (e.g., README)', () => {
110
+ const input = { path: 'README', attempt: 1 };
111
+ (0, test_fns_1.when)('qualifying the path', () => {
112
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
113
+ (0, test_fns_1.then)('it suffixes i{attempt}. after the basename', () => {
114
+ expect(result).toBe('README.i1');
115
+ });
116
+ });
117
+ });
118
+ (0, test_fns_1.given)('a dotfile with no extension (e.g., .env)', () => {
119
+ const input = { path: '.env', attempt: 7 };
120
+ (0, test_fns_1.when)('qualifying the path', () => {
121
+ const result = (0, addAttemptQualifierToOutputPath_1.addAttemptQualifierToOutputPath)(input);
122
+ (0, test_fns_1.then)('it suffixes i{attempt} after the basename while keeping the dotfile root', () => {
123
+ expect(result).toBe('.env.i7');
124
+ });
125
+ });
126
+ });
127
+ });
128
+ });
129
+ });
130
+ //# sourceMappingURL=addAttemptQualifierToOutputPath.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAttemptQualifierToOutputPath.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/addAttemptQualifierToOutputPath.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { RoleRegistry } from '../../domain/objects';
2
+ import { InvokeOpts } from '../../domain/objects/InvokeOpts';
3
+ /**
4
+ * .what = get registries from the invocation options declared
5
+ * .how =
6
+ * - lookup the config based on the options
7
+ * - grab the registries from the config
8
+ */
9
+ export declare const getRegistriesByOpts: (input: {
10
+ opts: InvokeOpts<{
11
+ config: string;
12
+ }>;
13
+ }) => Promise<RoleRegistry[]>;
@@ -0,0 +1,40 @@
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.getRegistriesByOpts = void 0;
27
+ /**
28
+ * .what = get registries from the invocation options declared
29
+ * .how =
30
+ * - lookup the config based on the options
31
+ * - grab the registries from the config
32
+ */
33
+ const getRegistriesByOpts = async (input) => {
34
+ // import the config
35
+ const config = await Promise.resolve(`${input.opts.config}`).then(s => __importStar(require(s)));
36
+ // grab the registries
37
+ return await config.getRoleRegistries();
38
+ };
39
+ exports.getRegistriesByOpts = getRegistriesByOpts;
40
+ //# sourceMappingURL=getRegistriesByOpts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRegistriesByOpts.js","sourceRoot":"","sources":["../../../src/logic/invoke/getRegistriesByOpts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAEzC,EAA2B,EAAE;IAC5B,oBAAoB;IACpB,MAAM,MAAM,GACV,yBAAa,KAAK,CAAC,IAAI,CAAC,MAAM,uCAAC,CAAC;IAElC,sBAAsB;IACtB,OAAO,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAC1C,CAAC,CAAC;AATW,QAAA,mBAAmB,uBAS9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSkillThread.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillThread.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getSkillThread.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillThread.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { PickOne } from 'type-fns';
2
2
  import { Threads } from '../../domain/objects';
3
+ import { InvokeOpts } from '../../domain/objects/InvokeOpts';
3
4
  import { RoleSkillThreadsGetter } from '../../domain/objects/RoleSkillArgGetter';
4
5
  /**
5
6
  * .what = hydrates skill threads using either passin or lookup mode
@@ -10,7 +11,9 @@ export declare const getSkillThreads: <TOutput extends Threads<any>, TVars exten
10
11
  from: PickOne<{
11
12
  passin: TVars;
12
13
  lookup: {
13
- argv: Record<string, string>;
14
+ argv: InvokeOpts<{
15
+ ask: string;
16
+ }>;
14
17
  };
15
18
  }>;
16
19
  }) => Promise<TOutput>;
@@ -27,7 +27,7 @@ const getSkillThreads = async (input) => {
27
27
  for (const [key, spec] of Object.entries(getter.lookup)) {
28
28
  const val = argv[key] ?? (spec.char ? argv[spec.char] : undefined);
29
29
  if (val !== undefined)
30
- collected[key] = val;
30
+ collected[key] = String(val);
31
31
  if (val === undefined && !spec.type.startsWith('?'))
32
32
  helpful_errors_1.BadRequestError.throw(`missing required arg --${key} (-${spec.char})`, {
33
33
  key,
@@ -1 +1 @@
1
- {"version":3,"file":"getSkillThreads.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillThreads.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAM1E;;;GAGG;AACI,MAAM,eAAe,GAAG,KAAK,EAGlC,KAMD,EAAoB,EAAE;IACrB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAE/B,sBAAsB;IACtB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,gCAAe,CAAC,KAAK,CACnB,kDAAkD,EAClD,EAAE,IAAI,EAAE,CACT,CAAC;QACJ,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,sBAAsB;IACtB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAE9B,+DAA+D;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG;YACN,gCAAe,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,sCAAsC;QACtC,MAAM,SAAS,GAA2B,EAAE,GAAG,EAAE,CAAC;QAElD,8BAA8B;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,GAAG,KAAK,SAAS;gBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACjD,gCAAe,CAAC,KAAK,CAAC,0BAA0B,GAAG,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE;oBACrE,GAAG;oBACH,IAAI;iBACL,CAAC,CAAC;QACP,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3B,wCAAuB,CAAC,KAAK,CAC3B,+FAA+F,EAC/F,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;QAEJ,cAAc;QACd,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,wCAAuB,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AAzDW,QAAA,eAAe,mBAyD1B"}
1
+ {"version":3,"file":"getSkillThreads.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillThreads.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAO1E;;;GAGG;AACI,MAAM,eAAe,GAAG,KAAK,EAGlC,KAMD,EAAoB,EAAE;IACrB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAE/B,sBAAsB;IACtB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,gCAAe,CAAC,KAAK,CACnB,kDAAkD,EAClD,EAAE,IAAI,EAAE,CACT,CAAC;QACJ,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,sBAAsB;IACtB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAE9B,+DAA+D;QAC/D,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,GAAG;YACN,gCAAe,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,sCAAsC;QACtC,MAAM,SAAS,GAA2B,EAAE,GAAG,EAAE,CAAC;QAElD,8BAA8B;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,GAAG,KAAK,SAAS;gBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACjD,gCAAe,CAAC,KAAK,CAAC,0BAA0B,GAAG,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE;oBACrE,GAAG;oBACH,IAAI;iBACL,CAAC,CAAC;QACP,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3B,wCAAuB,CAAC,KAAK,CAC3B,+FAA+F,EAC/F,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;QAEJ,cAAc;QACd,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,wCAAuB,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AAzDW,QAAA,eAAe,mBAyD1B"}
@@ -0,0 +1,16 @@
1
+ import { RoleRegistry } from '../../domain/objects';
2
+ import { InvokeOpts } from '../../domain/objects/InvokeOpts';
3
+ /**
4
+ * .what = perform a skill within the current thread
5
+ * .why =
6
+ * - this is the default way to perform a skill; contrasted to within isolated threads, for isolated parallelism
7
+ * - this is reused within the performance of skills within isolated threads
8
+ */
9
+ export declare const performInCurrentThread: (input: {
10
+ opts: InvokeOpts<{
11
+ ask: string;
12
+ role?: string;
13
+ skill?: string;
14
+ }>;
15
+ registries: RoleRegistry[];
16
+ }) => Promise<void>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.performInCurrentThread = void 0;
4
+ const helpful_errors_1 = require("helpful-errors");
5
+ const enweaveOneStitcher_1 = require("../weave/enweaveOneStitcher");
6
+ const assureFindRole_1 = require("./assureFindRole");
7
+ const getSkillContext_1 = require("./getSkillContext");
8
+ const getSkillThreads_1 = require("./getSkillThreads");
9
+ /**
10
+ * .what = perform a skill within the current thread
11
+ * .why =
12
+ * - this is the default way to perform a skill; contrasted to within isolated threads, for isolated parallelism
13
+ * - this is reused within the performance of skills within isolated threads
14
+ */
15
+ const performInCurrentThread = async (input) => {
16
+ // lookup the role
17
+ const role = (0, assureFindRole_1.assureFindRole)({
18
+ registries: input.registries,
19
+ slug: input.opts.role ??
20
+ helpful_errors_1.UnexpectedCodePathError.throw('opts.role slug not defined. why not?', {
21
+ opts: input.opts,
22
+ }),
23
+ });
24
+ if (!role)
25
+ helpful_errors_1.BadRequestError.throw(`unknown role "${input.opts.role}"`);
26
+ // lookup the skill
27
+ const skill = role.skills.find((s) => s.slug === input.opts.skill);
28
+ if (!skill)
29
+ helpful_errors_1.BadRequestError.throw(`unknown skill "${input.opts.skill}" under role "${input.opts.role}"`);
30
+ // instantiate the threads
31
+ const threads = await (0, getSkillThreads_1.getSkillThreads)({
32
+ getter: skill.threads,
33
+ from: { lookup: { argv: input.opts } },
34
+ });
35
+ // instantiate the context
36
+ const env = process.env;
37
+ const context = await (0, getSkillContext_1.getSkillContext)({
38
+ getter: skill.context,
39
+ from: { lookup: { env } },
40
+ });
41
+ // execute the weave
42
+ console.log('');
43
+ console.log('');
44
+ console.log('🎙️ heard');
45
+ console.log('');
46
+ console.log(input.opts.ask);
47
+ console.log('');
48
+ console.log('🫡 on it!');
49
+ console.log('');
50
+ await (0, enweaveOneStitcher_1.enweaveOneStitcher)({
51
+ stitcher: skill.route,
52
+ threads,
53
+ }, context);
54
+ };
55
+ exports.performInCurrentThread = performInCurrentThread;
56
+ //# sourceMappingURL=performInCurrentThread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performInCurrentThread.js","sourceRoot":"","sources":["../../../src/logic/invoke/performInCurrentThread.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAI1E,oEAAiE;AACjE,qDAAkD;AAClD,uDAAoD;AACpD,uDAAoD;AAEpD;;;;;GAKG;AACI,MAAM,sBAAsB,GAAG,KAAK,EAAE,KAO5C,EAAiB,EAAE;IAClB,kBAAkB;IAClB,MAAM,IAAI,GAAG,IAAA,+BAAc,EAAC;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EACF,KAAK,CAAC,IAAI,CAAC,IAAI;YACf,wCAAuB,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBACpE,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC;KACL,CAAC,CAAC;IACH,IAAI,CAAC,IAAI;QAAE,gCAAe,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAEtE,mBAAmB;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK;QACR,gCAAe,CAAC,KAAK,CACnB,kBAAkB,KAAK,CAAC,IAAI,CAAC,KAAK,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CACtE,CAAC;IAEJ,0BAA0B;IAC1B,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAe,EAAC;QACpC,MAAM,EAAE,KAAK,CAAC,OAAO;QACrB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;KACvC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAyC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAe,EAAC;QACpC,MAAM,EAAE,KAAK,CAAC,OAAO;QACrB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;KAC1B,CAAC,CAAC;IAEH,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,IAAA,uCAAkB,EACtB;QACE,QAAQ,EAAE,KAAK,CAAC,KAAK;QACrB,OAAO;KACR,EACD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC;AAvDW,QAAA,sBAAsB,0BAuDjC"}
@@ -0,0 +1,14 @@
1
+ import { InvokeOpts } from '../../domain/objects/InvokeOpts';
2
+ /**
3
+ * .what = executes the performance of a skill within a currently isolated thread
4
+ * - looks up the registries from the opts
5
+ * - performs in current thread
6
+ */
7
+ export declare const executePerformInIsolatedThread: (input: {
8
+ opts: InvokeOpts<{
9
+ config: string;
10
+ ask: string;
11
+ role: string;
12
+ skill: string;
13
+ }>;
14
+ }) => Promise<void>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executePerformInIsolatedThread = void 0;
4
+ const helpful_errors_1 = require("helpful-errors");
5
+ const serde_fns_1 = require("serde-fns");
6
+ const getRegistriesByOpts_1 = require("./getRegistriesByOpts");
7
+ const performInCurrentThread_1 = require("./performInCurrentThread");
8
+ /**
9
+ * .what = executes the performance of a skill within a currently isolated thread
10
+ * - looks up the registries from the opts
11
+ * - performs in current thread
12
+ */
13
+ const executePerformInIsolatedThread = async (input) => {
14
+ // grab the registries for the current options
15
+ const registries = await (0, getRegistriesByOpts_1.getRegistriesByOpts)({ opts: input.opts });
16
+ // perform in the current thread
17
+ await (0, performInCurrentThread_1.performInCurrentThread)({ opts: input.opts, registries });
18
+ };
19
+ exports.executePerformInIsolatedThread = executePerformInIsolatedThread;
20
+ /**
21
+ * .what = subthread entrypoint
22
+ * .why =
23
+ * - when this module is executed directly, automatically execute the attempt
24
+ * .how =
25
+ * - is main import, run the executor with `workerData`, exit 0/1
26
+ */
27
+ if (require.main === module)
28
+ (async () => {
29
+ // decode the payload from env
30
+ const payloadEnvVar = process.env.RHACHET_INVOKE_OPTS_PAYLOAD ??
31
+ helpful_errors_1.BadRequestError.throw('RHACHET_INVOKE_OPTS_PAYLOAD was not defined');
32
+ const payloadDecoded = (0, serde_fns_1.deSerialJSON)(serde_fns_1.isSerialJSON.assure((0, serde_fns_1.deSerialBase64)(serde_fns_1.isSerialBase64.assure(payloadEnvVar))));
33
+ if (!payloadDecoded.opts)
34
+ // basic runtime validation
35
+ throw new helpful_errors_1.BadRequestError('did not find .opts on payload decoded', {
36
+ payloadDecoded,
37
+ });
38
+ // execute against that payload
39
+ await (0, exports.executePerformInIsolatedThread)(payloadDecoded);
40
+ })()
41
+ .then(() => {
42
+ process.exit(0);
43
+ })
44
+ .catch((error) => {
45
+ console.error(error);
46
+ process.exit(1);
47
+ });
48
+ //# sourceMappingURL=performInIsolatedThread.execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performInIsolatedThread.execute.js","sourceRoot":"","sources":["../../../src/logic/invoke/performInIsolatedThread.execute.ts"],"names":[],"mappings":";;;AACA,mDAAiD;AACjD,yCAKmB;AAGnB,+DAA4D;AAC5D,qEAAkE;AAElE;;;;GAIG;AACI,MAAM,8BAA8B,GAAG,KAAK,EAAE,KAOpD,EAAiB,EAAE;IAClB,8CAA8C;IAC9C,MAAM,UAAU,GAAG,MAAM,IAAA,yCAAmB,EAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnE,gCAAgC;IAChC,MAAM,IAAA,+CAAsB,EAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC;AAbW,QAAA,8BAA8B,kCAazC;AAEF;;;;;;GAMG;AACH,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;IACzB,CAAC,KAAK,IAAI,EAAE;QACV,8BAA8B;QAC9B,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,2BAA2B;YACvC,gCAAe,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,IAAA,wBAAY,EAGjC,wBAAY,CAAC,MAAM,CAAC,IAAA,0BAAc,EAAC,0BAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAC1E,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,IAAI;YACtB,2BAA2B;YAC3B,MAAM,IAAI,gCAAe,CAAC,uCAAuC,EAAE;gBACjE,cAAc;aACf,CAAC,CAAC;QAEL,+BAA+B;QAC/B,MAAM,IAAA,sCAA8B,EAAC,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,EAAE;SACD,IAAI,CAAC,GAAG,EAAE;QACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { UniDateTimeRange, UniDuration } from '@ehmpathy/uni-time';
2
+ import { InvokeOpts } from '../../domain/objects/InvokeOpts';
3
+ /**
4
+ * .what = perform a single skill execution in an isolated child thread (subprocess)
5
+ * .why =
6
+ * - isolates side-effects and resources per attempt
7
+ * - enables parallel fan-out while keeping logs readable per attempt
8
+ * .how =
9
+ * - invokes a worker which spins up an isolated thread to execute the performance
10
+ * - streams the logs to main thread with identifiable prefix, for observability
11
+ */
12
+ export declare const invokePerformInIsolatedThread: (input: {
13
+ opts: InvokeOpts<{
14
+ config: string;
15
+ attempt: number;
16
+ }>;
17
+ peer: {
18
+ /**
19
+ * the total number of peer threads that we expect. used to format log prefixes
20
+ */
21
+ attempts: number;
22
+ };
23
+ }) => Promise<{
24
+ attempt: number;
25
+ code: number | null;
26
+ clock: {
27
+ range: UniDateTimeRange;
28
+ duration: UniDuration;
29
+ };
30
+ }>;
31
+ export { invokePerformInIsolatedThread as performInIsolatedThread };
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_path_1 = __importDefault(require("node:path"));
7
+ const test_fns_1 = require("test-fns");
8
+ const directory_1 = require("../../.test/directory");
9
+ const performInIsolatedThread_invoke_1 = require("./performInIsolatedThread.invoke");
10
+ describe('performInIsolatedThread', () => {
11
+ // observe stdout
12
+ let stdoutObserved = '';
13
+ const originalWrite = process.stdout.write;
14
+ beforeAll(() => {
15
+ process.stdout.write = (chunk, ...args) => {
16
+ stdoutObserved += chunk.toString();
17
+ return originalWrite.call(process.stdout, chunk, ...args);
18
+ };
19
+ });
20
+ afterAll(() => {
21
+ process.stdout.write = originalWrite;
22
+ });
23
+ (0, test_fns_1.given)('a simple demo config', () => {
24
+ // declare the demo config via path
25
+ const configPath = node_path_1.default.resolve(directory_1.TEST_FIXTURE_DIRECTORY, './example.use.repo/example.rhachet.use.ts');
26
+ (0, test_fns_1.when)('asked to perform a skill registered in the config', () => {
27
+ const opts = {
28
+ config: configPath,
29
+ skill: 'echo',
30
+ role: 'echoer',
31
+ attempt: 1,
32
+ ask: 'do it',
33
+ };
34
+ (0, test_fns_1.then)('it should successfully execute it', async () => {
35
+ await (0, performInIsolatedThread_invoke_1.performInIsolatedThread)({ opts, peer: { attempts: 3 } });
36
+ });
37
+ (0, test_fns_1.then)('it should have logged with observable prefixes', async () => {
38
+ expect(stdoutObserved).toContain('○ i1 ›');
39
+ expect(stdoutObserved).toContain(`🫡 on it!`);
40
+ });
41
+ });
42
+ (0, test_fns_1.when)('asked to perform a skill registered in the config with 100 peer attempts', () => {
43
+ const opts = {
44
+ config: configPath,
45
+ skill: 'echo',
46
+ role: 'echoer',
47
+ attempt: 1,
48
+ ask: 'do it',
49
+ };
50
+ (0, test_fns_1.then)('it should successfully execute it', async () => {
51
+ await (0, performInIsolatedThread_invoke_1.performInIsolatedThread)({ opts, peer: { attempts: 100 } });
52
+ });
53
+ (0, test_fns_1.then)('it should have logged with padded observable prefixes', async () => {
54
+ expect(stdoutObserved).toContain('○ i001 ›');
55
+ });
56
+ });
57
+ (0, test_fns_1.when)('asked to perform a skill registered in the config on attempt number 3', () => {
58
+ const opts = {
59
+ config: configPath,
60
+ skill: 'echo',
61
+ role: 'echoer',
62
+ attempt: 3,
63
+ ask: 'do it',
64
+ };
65
+ (0, test_fns_1.then)('it should successfully execute it', async () => {
66
+ await (0, performInIsolatedThread_invoke_1.performInIsolatedThread)({ opts, peer: { attempts: 3 } });
67
+ });
68
+ (0, test_fns_1.then)('it should have logged with padded observable prefixes', async () => {
69
+ expect(stdoutObserved).toContain('○ i3 ›');
70
+ });
71
+ });
72
+ });
73
+ });
74
+ //# sourceMappingURL=performInIsolatedThread.invoke.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performInIsolatedThread.invoke.integration.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/performInIsolatedThread.invoke.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.performInIsolatedThread = exports.invokePerformInIsolatedThread = void 0;
7
+ const uni_time_1 = require("@ehmpathy/uni-time");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const helpful_errors_1 = require("helpful-errors");
10
+ const node_child_process_1 = require("node:child_process");
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const node_readline_1 = __importDefault(require("node:readline"));
13
+ const serde_fns_1 = require("serde-fns");
14
+ /**
15
+ * .what = gets the standard output prefix for this attempt
16
+ * .why =
17
+ * - makes it easy to detect logs per attempt
18
+ */
19
+ const getLogPrefixForAttempt = (input) => {
20
+ const palette = [
21
+ chalk_1.default.cyan,
22
+ chalk_1.default.green,
23
+ chalk_1.default.magenta,
24
+ chalk_1.default.yellow,
25
+ chalk_1.default.blue,
26
+ chalk_1.default.hex('#ffb5a7'), // pastel coral
27
+ chalk_1.default.hex('#b5ead7'), // pastel mint
28
+ chalk_1.default.hex('#ffd6a5'), // pastel orange
29
+ chalk_1.default.hex('#e2f0cb'), // pastel lime
30
+ chalk_1.default.hex('#d2b48c'), // pastel wood
31
+ chalk_1.default.hex('#ffe5ec'), // pastel rose
32
+ ];
33
+ const color = palette[(input.attempt - 1) % palette.length];
34
+ const pads = String(input.peers).length;
35
+ const prefix = color(`○ i${String(input.attempt).padStart(pads, '0')} › `);
36
+ return prefix;
37
+ };
38
+ /**
39
+ * .what = perform a single skill execution in an isolated child thread (subprocess)
40
+ * .why =
41
+ * - isolates side-effects and resources per attempt
42
+ * - enables parallel fan-out while keeping logs readable per attempt
43
+ * .how =
44
+ * - invokes a worker which spins up an isolated thread to execute the performance
45
+ * - streams the logs to main thread with identifiable prefix, for observability
46
+ */
47
+ const invokePerformInIsolatedThread = async (input) => {
48
+ // grab the attempt index from the argv
49
+ const attempt = input.opts.attempt ??
50
+ helpful_errors_1.UnexpectedCodePathError.throw('attempt should have been declared in argv if this was called', { argv: input.opts });
51
+ // grab the prefix to log with
52
+ const logPrefix = getLogPrefixForAttempt({
53
+ attempt,
54
+ peers: input.peer.attempts,
55
+ });
56
+ // serialize the payload
57
+ const payload = (0, serde_fns_1.asSerialBase64)((0, serde_fns_1.asSerialJSON)({ opts: input.opts }));
58
+ // define the executor
59
+ const EXECUTOR_PATH = node_path_1.default.resolve(__dirname, 'performInIsolatedThread.execute');
60
+ const TSX_CLI = require.resolve('tsx/cli');
61
+ return await new Promise((resolve) => {
62
+ // spawn child thread that'll run the executor, with stdout/stderr streams exposed
63
+ const child = (0, node_child_process_1.spawn)(process.execPath, [TSX_CLI, EXECUTOR_PATH], {
64
+ stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
65
+ env: {
66
+ ...process.env,
67
+ RHACHET_ATTEMPT: String(input.opts.attempt),
68
+ RHACHET_ATTEMPTS: String(input.peer.attempts),
69
+ RHACHET_INVOKE_OPTS_PAYLOAD: payload,
70
+ },
71
+ });
72
+ // forward the workers logs, with the prefix attached, for observability
73
+ const pipe = (stream, write) => {
74
+ const rl = node_readline_1.default.createInterface({ input: stream });
75
+ rl.on('line', (line) => write(logPrefix + line));
76
+ };
77
+ pipe(child.stdout, (s) => process.stdout.write(s + '\n'));
78
+ pipe(child.stderr, (s) => process.stderr.write(s + '\n'));
79
+ // resolve this procedure on exit of worker
80
+ const beganAt = (0, uni_time_1.asUniDateTime)(new Date());
81
+ child.once('exit', (code) => {
82
+ const range = { since: beganAt, until: (0, uni_time_1.asUniDateTime)(new Date()) };
83
+ resolve({
84
+ attempt,
85
+ code,
86
+ clock: { range, duration: (0, uni_time_1.getDuration)({ of: { range } }) },
87
+ });
88
+ });
89
+ });
90
+ };
91
+ exports.invokePerformInIsolatedThread = invokePerformInIsolatedThread;
92
+ exports.performInIsolatedThread = exports.invokePerformInIsolatedThread;
93
+ //# sourceMappingURL=performInIsolatedThread.invoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performInIsolatedThread.invoke.js","sourceRoot":"","sources":["../../../src/logic/invoke/performInIsolatedThread.invoke.ts"],"names":[],"mappings":"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"}