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.
- package/dist/.test/directory.d.ts +1 -0
- package/dist/.test/directory.js +2 -1
- package/dist/.test/directory.js.map +1 -1
- package/dist/{contract/cli/.test → .test/example.use.repo}/example.echoRegistry.d.ts +1 -1
- package/dist/.test/example.use.repo/example.echoRegistry.js +104 -0
- package/dist/.test/example.use.repo/example.echoRegistry.js.map +1 -0
- package/dist/contract/cli/invoke.integration.test.js +2 -1
- package/dist/contract/cli/invoke.integration.test.js.map +1 -1
- package/dist/contract/cli/invoke.js +10 -33
- package/dist/contract/cli/invoke.js.map +1 -1
- package/dist/contract/cli/invokeAsk.d.ts +4 -1
- package/dist/contract/cli/invokeAsk.integration.test.js +29 -2
- package/dist/contract/cli/invokeAsk.integration.test.js.map +1 -1
- package/dist/contract/cli/invokeAsk.js +14 -44
- package/dist/contract/cli/invokeAsk.js.map +1 -1
- package/dist/contract/cli/invokeReadme.integration.test.js +1 -1
- package/dist/contract/cli/invokeReadme.integration.test.js.map +1 -1
- package/dist/directory.d.ts +1 -0
- package/dist/directory.js +5 -0
- package/dist/directory.js.map +1 -0
- package/dist/domain/objects/InvokeOpts.d.ts +11 -0
- package/dist/domain/objects/InvokeOpts.js +3 -0
- package/dist/domain/objects/InvokeOpts.js.map +1 -0
- package/dist/domain/objects/InvokeOpts.test.d.ts +1 -0
- package/dist/domain/objects/InvokeOpts.test.js +41 -0
- package/dist/domain/objects/InvokeOpts.test.js.map +1 -0
- package/dist/logic/invoke/addAttemptQualifierToOutputPath.d.ts +13 -0
- package/dist/logic/invoke/addAttemptQualifierToOutputPath.js +30 -0
- package/dist/logic/invoke/addAttemptQualifierToOutputPath.js.map +1 -0
- package/dist/logic/invoke/addAttemptQualifierToOutputPath.test.d.ts +1 -0
- package/dist/logic/invoke/addAttemptQualifierToOutputPath.test.js +130 -0
- package/dist/logic/invoke/addAttemptQualifierToOutputPath.test.js.map +1 -0
- package/dist/logic/invoke/getRegistriesByOpts.d.ts +13 -0
- package/dist/logic/invoke/getRegistriesByOpts.js +40 -0
- package/dist/logic/invoke/getRegistriesByOpts.js.map +1 -0
- package/dist/logic/invoke/getSkillThread.test.js.map +1 -1
- package/dist/logic/invoke/getSkillThreads.d.ts +4 -1
- package/dist/logic/invoke/getSkillThreads.js +1 -1
- package/dist/logic/invoke/getSkillThreads.js.map +1 -1
- package/dist/logic/invoke/performInCurrentThread.d.ts +16 -0
- package/dist/logic/invoke/performInCurrentThread.js +56 -0
- package/dist/logic/invoke/performInCurrentThread.js.map +1 -0
- package/dist/logic/invoke/performInIsolatedThread.execute.d.ts +14 -0
- package/dist/logic/invoke/performInIsolatedThread.execute.js +48 -0
- package/dist/logic/invoke/performInIsolatedThread.execute.js.map +1 -0
- package/dist/logic/invoke/performInIsolatedThread.invoke.d.ts +31 -0
- package/dist/logic/invoke/performInIsolatedThread.invoke.integration.test.d.ts +1 -0
- package/dist/logic/invoke/performInIsolatedThread.invoke.integration.test.js +74 -0
- package/dist/logic/invoke/performInIsolatedThread.invoke.integration.test.js.map +1 -0
- package/dist/logic/invoke/performInIsolatedThread.invoke.js +93 -0
- package/dist/logic/invoke/performInIsolatedThread.invoke.js.map +1 -0
- package/dist/logic/invoke/performInIsolatedThreads.d.ts +19 -0
- package/dist/logic/invoke/performInIsolatedThreads.integration.test.d.ts +1 -0
- package/dist/logic/invoke/performInIsolatedThreads.integration.test.js +75 -0
- package/dist/logic/invoke/performInIsolatedThreads.integration.test.js.map +1 -0
- package/dist/logic/invoke/performInIsolatedThreads.js +99 -0
- package/dist/logic/invoke/performInIsolatedThreads.js.map +1 -0
- package/package.json +7 -4
- package/readme.md +27 -8
- package/dist/contract/cli/.test/example.echoRegistry.js +0 -54
- 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:
|
|
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;
|
|
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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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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"}
|