rhachet 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.test/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/contract/sdk.d.ts +1 -0
- package/dist/contract/sdk.js +3 -1
- package/dist/contract/sdk.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 +92 -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/dist/logic/template/getTemplatePathByCallerPath.d.ts +29 -0
- package/dist/logic/template/getTemplatePathByCallerPath.js +50 -0
- package/dist/logic/template/getTemplatePathByCallerPath.js.map +1 -0
- package/package.json +7 -4
- package/dist/contract/cli/.test/example.echoRegistry.js +0 -54
- package/dist/contract/cli/.test/example.echoRegistry.js.map +0 -1
package/dist/.test/directory.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.directoryTestAssets = void 0;
|
|
3
|
+
exports.TEST_FIXTURE_DIRECTORY = exports.directoryTestAssets = void 0;
|
|
4
4
|
exports.directoryTestAssets = __dirname;
|
|
5
|
+
exports.TEST_FIXTURE_DIRECTORY = __dirname;
|
|
5
6
|
//# sourceMappingURL=directory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/.test/directory.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/.test/directory.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAChC,QAAA,sBAAsB,GAAG,SAAS,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { RoleRegistry } from '../../
|
|
1
|
+
import { RoleRegistry } from '../../domain/objects';
|
|
2
2
|
export declare const EXAMPLE_REGISTRY: RoleRegistry;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EXAMPLE_REGISTRY = void 0;
|
|
4
|
+
const rhachet_artifact_git_1 = require("rhachet-artifact-git");
|
|
5
|
+
const objects_1 = require("../../domain/objects");
|
|
6
|
+
const genThread_1 = require("../../logic/thread/genThread");
|
|
7
|
+
const stepEchoAsk = new objects_1.StitchStepCompute({
|
|
8
|
+
slug: 'echo.step',
|
|
9
|
+
form: 'COMPUTE',
|
|
10
|
+
stitchee: 'caller',
|
|
11
|
+
readme: 'simple echo logic',
|
|
12
|
+
invoke: async ({ threads }, context) => {
|
|
13
|
+
context.log.info('echo:', { ask: threads.caller.context.ask });
|
|
14
|
+
return {
|
|
15
|
+
input: null,
|
|
16
|
+
output: `echo: ${threads.caller.context.ask}`,
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
const echoSkill = objects_1.RoleSkill.build({
|
|
21
|
+
slug: 'echo',
|
|
22
|
+
readme: 'Echoes back the ask string.',
|
|
23
|
+
route: stepEchoAsk,
|
|
24
|
+
threads: {
|
|
25
|
+
lookup: {},
|
|
26
|
+
assess: (input) => true,
|
|
27
|
+
instantiate: (input) => ({
|
|
28
|
+
caller: (0, genThread_1.genThread)({ role: 'caller', ask: input.ask }),
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
context: {
|
|
32
|
+
lookup: {},
|
|
33
|
+
assess: (input) => true,
|
|
34
|
+
instantiate: () => ({
|
|
35
|
+
log: console,
|
|
36
|
+
stitch: {
|
|
37
|
+
trail: [],
|
|
38
|
+
},
|
|
39
|
+
}),
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const stepWriteAsk = new objects_1.StitchStepCompute({
|
|
43
|
+
slug: 'step.write',
|
|
44
|
+
form: 'COMPUTE',
|
|
45
|
+
stitchee: 'caller',
|
|
46
|
+
readme: 'simple echo logic',
|
|
47
|
+
invoke: async ({ threads }, context) => {
|
|
48
|
+
context.log.info('echo:', { ask: threads.caller.context.ask });
|
|
49
|
+
await threads.caller.context.art.output.set({
|
|
50
|
+
content: threads.caller.context.ask,
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
input: null,
|
|
54
|
+
output: `echo: ${threads.caller.context.ask}`,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
const writeSkill = objects_1.RoleSkill.build({
|
|
59
|
+
slug: 'write',
|
|
60
|
+
readme: 'Writes down the ask string.',
|
|
61
|
+
route: stepWriteAsk,
|
|
62
|
+
threads: {
|
|
63
|
+
lookup: {
|
|
64
|
+
output: {
|
|
65
|
+
source: 'process.argv',
|
|
66
|
+
char: 'o',
|
|
67
|
+
desc: 'the output file to write against',
|
|
68
|
+
type: 'string',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
assess: (input) => input.output && input.ask,
|
|
72
|
+
instantiate: (input) => ({
|
|
73
|
+
caller: (0, genThread_1.genThread)({
|
|
74
|
+
role: 'caller',
|
|
75
|
+
ask: input.ask,
|
|
76
|
+
art: { output: (0, rhachet_artifact_git_1.genArtifactGitFile)({ uri: input.output }) },
|
|
77
|
+
}),
|
|
78
|
+
}),
|
|
79
|
+
},
|
|
80
|
+
context: {
|
|
81
|
+
lookup: {},
|
|
82
|
+
assess: (input) => true,
|
|
83
|
+
instantiate: () => ({
|
|
84
|
+
log: console,
|
|
85
|
+
stitch: {
|
|
86
|
+
trail: [],
|
|
87
|
+
},
|
|
88
|
+
}),
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
const echoRole = objects_1.Role.build({
|
|
92
|
+
slug: 'echoer',
|
|
93
|
+
name: 'Echoer',
|
|
94
|
+
purpose: 'repeat things',
|
|
95
|
+
readme: 'knows how to echo input back to the user.',
|
|
96
|
+
traits: [],
|
|
97
|
+
skills: [echoSkill, writeSkill],
|
|
98
|
+
});
|
|
99
|
+
exports.EXAMPLE_REGISTRY = new objects_1.RoleRegistry({
|
|
100
|
+
slug: 'echo',
|
|
101
|
+
readme: 'basic registry for testing CLI execution',
|
|
102
|
+
roles: [echoRole],
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=example.echoRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.echoRegistry.js","sourceRoot":"","sources":["../../../src/.test/example.use.repo/example.echoRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const path_1 = __importDefault(require("path"));
|
|
7
7
|
const test_fns_1 = require("test-fns");
|
|
8
|
+
const directory_1 = require("../../.test/directory");
|
|
8
9
|
const invoke_1 = require("./invoke");
|
|
9
10
|
describe('invoke', () => {
|
|
10
11
|
(0, test_fns_1.given)('a valid config path pointing to a basic test registry', () => {
|
|
11
|
-
const configPath = path_1.default.resolve(
|
|
12
|
+
const configPath = path_1.default.resolve(directory_1.TEST_FIXTURE_DIRECTORY, './example.use.repo/example.rhachet.use.ts');
|
|
12
13
|
(0, test_fns_1.when)('asked to readme a role', () => {
|
|
13
14
|
const args = [
|
|
14
15
|
'--config',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.integration.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,uCAA6C;AAE7C,qCAAkC;AAElC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAA,gBAAK,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAClE,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAC7B,
|
|
1
|
+
{"version":3,"file":"invoke.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.integration.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,uCAA6C;AAE7C,qDAA+D;AAC/D,qCAAkC;AAElC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAA,gBAAK,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAClE,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAC7B,kCAAsB,EACtB,2CAA2C,CAC5C,CAAC;QAEF,IAAA,eAAI,EAAC,wBAAwB,EAAE,GAAG,EAAE;YAClC,MAAM,IAAI,GAAG;gBACX,UAAU;gBACV,UAAU;gBACV,QAAQ;gBACR,YAAY;gBACZ,MAAM;gBACN,QAAQ;gBACR,QAAQ;aACT,CAAC;YAEF,IAAI,MAA8C,CAAC;YAEnD,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,GAAG,EAAE;gBACZ,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;YAEH,IAAA,eAAI,EAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEvB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,34 +1,12 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.invoke = void 0;
|
|
27
4
|
const commander_1 = require("commander");
|
|
28
5
|
const helpful_errors_1 = require("helpful-errors");
|
|
29
|
-
const
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
30
7
|
const rhachet_artifact_git_1 = require("rhachet-artifact-git");
|
|
31
8
|
const assureUniqueRoles_1 = require("../../logic/invoke/assureUniqueRoles");
|
|
9
|
+
const getRegistriesByOpts_1 = require("../../logic/invoke/getRegistriesByOpts");
|
|
32
10
|
const invokeAsk_1 = require("./invokeAsk");
|
|
33
11
|
const invokeList_1 = require("./invokeList");
|
|
34
12
|
const invokeReadme_1 = require("./invokeReadme");
|
|
@@ -42,18 +20,18 @@ const invokeReadme_1 = require("./invokeReadme");
|
|
|
42
20
|
* - config must export a `getRoleRegistries()` function returning a set of RoleRegistries to support
|
|
43
21
|
*/
|
|
44
22
|
const invoke = async (input) => {
|
|
45
|
-
|
|
46
|
-
// grab the config
|
|
23
|
+
// grab the config.registries
|
|
47
24
|
const configArg = input.args.findIndex((a) => a === '--config' || a === '-c');
|
|
48
25
|
const configPathExplicit = configArg >= 0 && input.args[configArg + 1]
|
|
49
26
|
? input.args[configArg + 1]
|
|
50
27
|
: undefined;
|
|
28
|
+
const cwd = process.cwd(); //
|
|
51
29
|
const configPath = configPathExplicit
|
|
52
|
-
? (0,
|
|
53
|
-
: (0,
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
30
|
+
? (0, node_path_1.resolve)(cwd, configPathExplicit)
|
|
31
|
+
: (0, node_path_1.resolve)(await (0, rhachet_artifact_git_1.getGitRepoRoot)({ from: cwd }), 'rhachet.use.ts');
|
|
32
|
+
const registries = await (0, getRegistriesByOpts_1.getRegistriesByOpts)({
|
|
33
|
+
opts: { config: configPath },
|
|
34
|
+
});
|
|
57
35
|
// failfast on duplicate roles // todo: update commands to allow registry based disambiguation
|
|
58
36
|
await (0, assureUniqueRoles_1.assureUniqueRoles)(registries);
|
|
59
37
|
// declare the cli program
|
|
@@ -69,9 +47,8 @@ const invoke = async (input) => {
|
|
|
69
47
|
.option('-c, --config <path>', 'where to find the rhachet.use.ts config'); // tell commander that we expect the config input and not to complain about it
|
|
70
48
|
(0, invokeReadme_1.invokeReadme)({ program, registries });
|
|
71
49
|
(0, invokeList_1.invokeList)({ program, registries });
|
|
72
|
-
(0, invokeAsk_1.invokeAsk)({ program, registries });
|
|
50
|
+
(0, invokeAsk_1.invokeAsk)({ program, config: { path: configPath }, registries });
|
|
73
51
|
// invoke it
|
|
74
|
-
// console.log('[args]', input.args); // todo: make it easier to d ebug
|
|
75
52
|
await program.parseAsync(input.args, { from: 'user' }).catch((error) => {
|
|
76
53
|
if (error instanceof helpful_errors_1.BadRequestError) {
|
|
77
54
|
console.error(``);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,mDAAiD;AACjD,yCAAoC;AACpC,+DAAsD;AAEtD,4EAAyE;AACzE,gFAA6E;AAC7E,2CAAwC;AACxC,6CAA0C;AAC1C,iDAA8C;AAE9C;;;;;;;;GAQG;AACI,MAAM,MAAM,GAAG,KAAK,EAAE,KAAyB,EAAiB,EAAE;IACvE,6BAA6B;IAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GACtB,SAAS,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAE;QAC5B,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;IAC7B,MAAM,UAAU,GAAG,kBAAkB;QACnC,CAAC,CAAC,IAAA,mBAAO,EAAC,GAAG,EAAE,kBAAkB,CAAC;QAClC,CAAC,CAAC,IAAA,mBAAO,EAAC,MAAM,IAAA,qCAAc,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,IAAA,yCAAmB,EAAC;QAC3C,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;KAC7B,CAAC,CAAC;IAEH,8FAA8F;IAC9F,MAAM,IAAA,qCAAiB,EAAC,UAAU,CAAC,CAAC;IAEpC,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,eAAe,CAAC;QACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;IACH,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CACV,mFAAmF,CACpF;SACA,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,CAAC,CAAC,CAAC,8EAA8E;IAC3J,IAAA,2BAAY,EAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACtC,IAAA,uBAAU,EAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACpC,IAAA,qBAAS,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAEjE,YAAY;IACZ,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrE,IAAI,KAAK,YAAY,gCAAe,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA/CW,QAAA,MAAM,UA+CjB"}
|
|
@@ -4,7 +4,10 @@ import { RoleRegistry } from '../../domain/objects/RoleRegistry';
|
|
|
4
4
|
* .what = adds the "ask" command to the CLI
|
|
5
5
|
* .why = lets users invoke a skill from any role in the given registries
|
|
6
6
|
*/
|
|
7
|
-
export declare const invokeAsk: ({ program, registries, }: {
|
|
7
|
+
export declare const invokeAsk: ({ program, registries, ...input }: {
|
|
8
8
|
program: Command;
|
|
9
|
+
config: {
|
|
10
|
+
path: string;
|
|
11
|
+
};
|
|
9
12
|
registries: RoleRegistry[];
|
|
10
13
|
}) => void;
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const commander_1 = require("commander");
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
4
8
|
const test_fns_1 = require("test-fns");
|
|
5
|
-
const
|
|
9
|
+
const directory_1 = require("../../.test/directory");
|
|
10
|
+
const example_echoRegistry_1 = require("../../.test/example.use.repo/example.echoRegistry");
|
|
6
11
|
const invokeAsk_1 = require("./invokeAsk");
|
|
7
12
|
describe('invokeAsk (integration)', () => {
|
|
8
13
|
(0, test_fns_1.given)('a CLI program with invokeAsk registered using EXAMPLE_REGISTRY', () => {
|
|
14
|
+
// config path is required for nested attempts to be explicitly declared
|
|
15
|
+
const configPath = node_path_1.default.resolve(directory_1.TEST_FIXTURE_DIRECTORY, './example.use.repo/example.rhachet.use.ts');
|
|
9
16
|
const program = new commander_1.Command();
|
|
10
|
-
(0, invokeAsk_1.invokeAsk)({
|
|
17
|
+
(0, invokeAsk_1.invokeAsk)({
|
|
18
|
+
program,
|
|
19
|
+
config: { path: configPath },
|
|
20
|
+
registries: [example_echoRegistry_1.EXAMPLE_REGISTRY],
|
|
21
|
+
});
|
|
11
22
|
(0, test_fns_1.when)('invoking a valid echo skill with ask input', () => {
|
|
12
23
|
(0, test_fns_1.then)('it should execute the skill successfully', async () => {
|
|
13
24
|
const args = [
|
|
@@ -36,6 +47,22 @@ describe('invokeAsk (integration)', () => {
|
|
|
36
47
|
expect(error?.message).toContain('no role named');
|
|
37
48
|
});
|
|
38
49
|
});
|
|
50
|
+
(0, test_fns_1.when)('invoking a valid echo skill with attempts', () => {
|
|
51
|
+
(0, test_fns_1.then)('it should execute the skill successfully', async () => {
|
|
52
|
+
const args = [
|
|
53
|
+
'ask',
|
|
54
|
+
'--role',
|
|
55
|
+
'echoer',
|
|
56
|
+
'--skill',
|
|
57
|
+
'echo',
|
|
58
|
+
'--ask',
|
|
59
|
+
'hello',
|
|
60
|
+
'--attempts',
|
|
61
|
+
'3',
|
|
62
|
+
];
|
|
63
|
+
await program.parseAsync(args, { from: 'user' });
|
|
64
|
+
});
|
|
65
|
+
});
|
|
39
66
|
});
|
|
40
67
|
});
|
|
41
68
|
//# sourceMappingURL=invokeAsk.integration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invokeAsk.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeAsk.integration.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invokeAsk.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeAsk.integration.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,0DAA6B;AAC7B,uCAAuD;AAEvD,qDAA+D;AAC/D,4FAAqF;AACrF,2CAAwC;AAExC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAA,gBAAK,EACH,gEAAgE,EAChE,GAAG,EAAE;QACH,wEAAwE;QACxE,MAAM,UAAU,GAAG,mBAAI,CAAC,OAAO,CAC7B,kCAAsB,EACtB,2CAA2C,CAC5C,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;QAC9B,IAAA,qBAAS,EAAC;YACR,OAAO;YACP,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAC5B,UAAU,EAAE,CAAC,uCAAgB,CAAC;SAC/B,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,IAAA,eAAI,EAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,IAAI,GAAG;oBACX,KAAK;oBACL,QAAQ;oBACR,QAAQ;oBACR,SAAS;oBACT,MAAM;oBACN,OAAO;oBACP,OAAO;iBACR,CAAC;gBACF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,gCAAgC,EAAE,GAAG,EAAE;YAC1C,IAAA,eAAI,EAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAC3C,CAAC;gBACF,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,+BAA+B,EAAE,GAAG,EAAE;YACzC,IAAA,eAAI,EAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBACtD,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnE,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAC3C,CAAC;gBACF,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,2CAA2C,EAAE,GAAG,EAAE;YACrD,IAAA,eAAI,EAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,IAAI,GAAG;oBACX,KAAK;oBACL,QAAQ;oBACR,QAAQ;oBACR,SAAS;oBACT,MAAM;oBACN,OAAO;oBACP,OAAO;oBACP,YAAY;oBACZ,GAAG;iBACJ,CAAC;gBACF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -3,19 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.invokeAsk = void 0;
|
|
4
4
|
const helpful_errors_1 = require("helpful-errors");
|
|
5
5
|
const assureFindRole_1 = require("../../logic/invoke/assureFindRole");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const sdk_1 = require("../sdk");
|
|
6
|
+
const performInCurrentThread_1 = require("../../logic/invoke/performInCurrentThread");
|
|
7
|
+
const performInIsolatedThreads_1 = require("../../logic/invoke/performInIsolatedThreads");
|
|
9
8
|
/**
|
|
10
9
|
* .what = adds the "ask" command to the CLI
|
|
11
10
|
* .why = lets users invoke a skill from any role in the given registries
|
|
12
11
|
*/
|
|
13
|
-
const invokeAsk = ({ program, registries, }) => {
|
|
12
|
+
const invokeAsk = ({ program, registries, ...input }) => {
|
|
14
13
|
const askCommand = program
|
|
15
14
|
.command('ask')
|
|
16
15
|
.requiredOption('-r, --role <slug>', 'role to invoke')
|
|
17
16
|
.requiredOption('-s, --skill <slug>', 'skill to invoke')
|
|
18
17
|
.option('-a, --ask <ask>', 'your ask')
|
|
18
|
+
.option('--attempts <int>', 'number of independent outputs (requires -o/--output)')
|
|
19
|
+
.option('--concurrency <int>', 'parallel subthreads limit (default 3)')
|
|
19
20
|
.allowUnknownOption(true)
|
|
20
21
|
.allowExcessArguments(true);
|
|
21
22
|
// 💉 dynamically inject CLI flags from skill inputs
|
|
@@ -40,49 +41,18 @@ const invokeAsk = ({ program, registries, }) => {
|
|
|
40
41
|
});
|
|
41
42
|
// 🧠 perform the skill
|
|
42
43
|
askCommand.action(async (opts) => {
|
|
43
|
-
|
|
44
|
-
// lookup the role
|
|
45
|
-
const role = (0, assureFindRole_1.assureFindRole)({
|
|
46
|
-
registries,
|
|
47
|
-
slug: roleSlug ??
|
|
48
|
-
helpful_errors_1.UnexpectedCodePathError.throw('roleSlug not defined. why not?', {
|
|
49
|
-
opts,
|
|
50
|
-
}),
|
|
51
|
-
});
|
|
52
|
-
if (!role)
|
|
53
|
-
helpful_errors_1.BadRequestError.throw(`unknown role "${roleSlug}"`);
|
|
54
|
-
// lookup the skill
|
|
55
|
-
const skill = role.skills.find((s) => s.slug === skillSlug);
|
|
56
|
-
if (!skill)
|
|
57
|
-
helpful_errors_1.BadRequestError.throw(`unknown skill "${skillSlug}" under role "${roleSlug}"`);
|
|
58
|
-
// instantiate the threads
|
|
44
|
+
// instantiate the composed argv
|
|
59
45
|
const argvWithAsk = {
|
|
60
46
|
...opts,
|
|
61
|
-
ask: ask ??
|
|
47
|
+
ask: opts.ask ??
|
|
48
|
+
helpful_errors_1.UnexpectedCodePathError.throw('ask was not declared', { opts }),
|
|
49
|
+
config: input.config.path, // required for isolated child threads when used with attempts
|
|
62
50
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const env = process.env;
|
|
69
|
-
const context = await (0, getSkillContext_1.getSkillContext)({
|
|
70
|
-
getter: skill.context,
|
|
71
|
-
from: { lookup: { env } },
|
|
72
|
-
});
|
|
73
|
-
// execute the weave
|
|
74
|
-
console.log('');
|
|
75
|
-
console.log('');
|
|
76
|
-
console.log('🎙️ heard');
|
|
77
|
-
console.log('');
|
|
78
|
-
console.log(argvWithAsk.ask);
|
|
79
|
-
console.log('');
|
|
80
|
-
console.log('🫡 on it!');
|
|
81
|
-
console.log('');
|
|
82
|
-
await (0, sdk_1.enweaveOneStitcher)({
|
|
83
|
-
stitcher: skill.route,
|
|
84
|
-
threads,
|
|
85
|
-
}, context);
|
|
51
|
+
// if attempts were requested, perform the skill in isolated threads per attempt
|
|
52
|
+
if (opts.attempts)
|
|
53
|
+
return await (0, performInIsolatedThreads_1.performInIsolatedThreads)({ opts: argvWithAsk });
|
|
54
|
+
// otherwise, perform in the main thread by default
|
|
55
|
+
return await (0, performInCurrentThread_1.performInCurrentThread)({ opts: argvWithAsk, registries });
|
|
86
56
|
});
|
|
87
57
|
};
|
|
88
58
|
exports.invokeAsk = invokeAsk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invokeAsk.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeAsk.ts"],"names":[],"mappings":";;;AACA,mDAA0E;AAG1E,sEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"invokeAsk.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeAsk.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const commander_1 = require("commander");
|
|
4
4
|
const test_fns_1 = require("test-fns");
|
|
5
|
-
const example_echoRegistry_1 = require("
|
|
5
|
+
const example_echoRegistry_1 = require("../../.test/example.use.repo/example.echoRegistry");
|
|
6
6
|
const invokeReadme_1 = require("./invokeReadme");
|
|
7
7
|
describe('invokeReadme (integration)', () => {
|
|
8
8
|
(0, test_fns_1.given)('a CLI program with invokeReadme registered using EXAMPLE_REGISTRY', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invokeReadme.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeReadme.integration.test.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,uCAAuD;AAEvD,
|
|
1
|
+
{"version":3,"file":"invokeReadme.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeReadme.integration.test.ts"],"names":[],"mappings":"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"}
|
package/dist/contract/sdk.d.ts
CHANGED
|
@@ -16,3 +16,4 @@ export { getStitch } from '../logic/thread/getStitch';
|
|
|
16
16
|
export { enrollThread } from '../logic/role/enrollThread';
|
|
17
17
|
export { genRoleSkill } from '../logic/role/genRoleSkill';
|
|
18
18
|
export { genContextStitchTrail } from '../logic/context/genContextStitchTrail';
|
|
19
|
+
export { getTemplatePathByCallerPath } from '../logic/template/getTemplatePathByCallerPath';
|
package/dist/contract/sdk.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.genContextStitchTrail = exports.genRoleSkill = exports.enrollThread = exports.getStitch = exports.genStepImagineViaTemplate = exports.useTemplate = exports.getTemplateVarsFromRoleInherit = exports.getTemplateValFromArtifacts = exports.genTemplate = exports.asStitcherFlat = exports.asStitcher = exports.enweaveOneStitcher = exports.genStitchRoute = exports.genStitchFanout = exports.genStitchCycle = exports.genStitchChoice = void 0;
|
|
17
|
+
exports.getTemplatePathByCallerPath = exports.genContextStitchTrail = exports.genRoleSkill = exports.enrollThread = exports.getStitch = exports.genStepImagineViaTemplate = exports.useTemplate = exports.getTemplateVarsFromRoleInherit = exports.getTemplateValFromArtifacts = exports.genTemplate = exports.asStitcherFlat = exports.asStitcher = exports.enweaveOneStitcher = exports.genStitchRoute = exports.genStitchFanout = exports.genStitchCycle = exports.genStitchChoice = void 0;
|
|
18
18
|
__exportStar(require("../domain/objects"), exports);
|
|
19
19
|
var genStitchChoice_1 = require("../logic/weave/compose/genStitchChoice");
|
|
20
20
|
Object.defineProperty(exports, "genStitchChoice", { enumerable: true, get: function () { return genStitchChoice_1.genStitchChoice; } });
|
|
@@ -48,4 +48,6 @@ var genRoleSkill_1 = require("../logic/role/genRoleSkill");
|
|
|
48
48
|
Object.defineProperty(exports, "genRoleSkill", { enumerable: true, get: function () { return genRoleSkill_1.genRoleSkill; } });
|
|
49
49
|
var genContextStitchTrail_1 = require("../logic/context/genContextStitchTrail");
|
|
50
50
|
Object.defineProperty(exports, "genContextStitchTrail", { enumerable: true, get: function () { return genContextStitchTrail_1.genContextStitchTrail; } });
|
|
51
|
+
var getTemplatePathByCallerPath_1 = require("../logic/template/getTemplatePathByCallerPath");
|
|
52
|
+
Object.defineProperty(exports, "getTemplatePathByCallerPath", { enumerable: true, get: function () { return getTemplatePathByCallerPath_1.getTemplatePathByCallerPath; } });
|
|
51
53
|
//# sourceMappingURL=sdk.js.map
|
package/dist/contract/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/contract/sdk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAElC,0EAAyE;AAAhE,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,gHAAA,cAAc,OAAA;AACvB,0EAAyE;AAAhE,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,gHAAA,cAAc,OAAA;AAEvB,wEAAuE;AAA9D,wHAAA,kBAAkB,OAAA;AAE3B,gEAA+D;AAAtD,wGAAA,UAAU,OAAA;AACnB,wEAAuE;AAA9D,gHAAA,cAAc,OAAA;AAEvB,6DAA4D;AAAnD,0GAAA,WAAW,OAAA;AACpB,6FAA4F;AAAnF,0IAAA,2BAA2B,OAAA;AACpC,mGAAkG;AAAzF,gJAAA,8BAA8B,OAAA;AACvC,6DAA4D;AAAnD,0GAAA,WAAW,OAAA;AACpB,yFAAwF;AAA/E,sIAAA,yBAAyB,OAAA;AAGlC,uDAAsD;AAA7C,sGAAA,SAAS,OAAA;AAClB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AAErB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AACrB,gFAA+E;AAAtE,8HAAA,qBAAqB,OAAA"}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/contract/sdk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAElC,0EAAyE;AAAhE,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,gHAAA,cAAc,OAAA;AACvB,0EAAyE;AAAhE,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,gHAAA,cAAc,OAAA;AAEvB,wEAAuE;AAA9D,wHAAA,kBAAkB,OAAA;AAE3B,gEAA+D;AAAtD,wGAAA,UAAU,OAAA;AACnB,wEAAuE;AAA9D,gHAAA,cAAc,OAAA;AAEvB,6DAA4D;AAAnD,0GAAA,WAAW,OAAA;AACpB,6FAA4F;AAAnF,0IAAA,2BAA2B,OAAA;AACpC,mGAAkG;AAAzF,gJAAA,8BAA8B,OAAA;AACvC,6DAA4D;AAAnD,0GAAA,WAAW,OAAA;AACpB,yFAAwF;AAA/E,sIAAA,yBAAyB,OAAA;AAGlC,uDAAsD;AAA7C,sGAAA,SAAS,OAAA;AAClB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AAErB,2DAA0D;AAAjD,4GAAA,YAAY,OAAA;AACrB,gFAA+E;AAAtE,8HAAA,qBAAqB,OAAA;AAC9B,6FAA4F;AAAnF,0IAAA,2BAA2B,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SRC_DIRECTORY: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Serializable } from 'serde-fns';
|
|
2
|
+
/**
|
|
3
|
+
* .what = options declared to specify an invocation
|
|
4
|
+
* .why =
|
|
5
|
+
* - skills are generic and can take any shape of inputs
|
|
6
|
+
* - our responsibility is to forward the caller's full intent, with the careful transfer of the full options they declared
|
|
7
|
+
* .note =
|
|
8
|
+
* - we do allow the requirement of a _minimum_ set of options
|
|
9
|
+
* - for example, `ask` invocations will always require the skill to be specified at a minimum
|
|
10
|
+
*/
|
|
11
|
+
export type InvokeOpts<TMinimum extends Record<string, Serializable> | undefined = undefined> = TMinimum & Record<string, string | number | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvokeOpts.js","sourceRoot":"","sources":["../../../src/domain/objects/InvokeOpts.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
describe('InvokeOpts', () => {
|
|
4
|
+
it('should allow guaranteed presence of TMinimum string values', () => {
|
|
5
|
+
// ✅ allowed: exact minimum present with correct string type
|
|
6
|
+
const opts1 = { skill: 'writer' };
|
|
7
|
+
const use1 = opts1.skill;
|
|
8
|
+
const use1alt = opts1.role;
|
|
9
|
+
expect(use1).toBe('writer');
|
|
10
|
+
// ❌ not allowed: must have the keys required in TMinimum at a minimum
|
|
11
|
+
// @ts-expect-error -- 'skill' must be declared
|
|
12
|
+
const opts2 = { other: 'x', another: undefined };
|
|
13
|
+
// ❌ not allowed: wrong type for required minimum key
|
|
14
|
+
// @ts-expect-error -- 'skill' must be a string per TMinimum
|
|
15
|
+
const opts3 = { skill: 123 };
|
|
16
|
+
// ❌ not allowed: non-string extras in the record branch
|
|
17
|
+
// @ts-expect-error -- extra props in the record branch must be string | undefined
|
|
18
|
+
const opts4 = { other: 42 };
|
|
19
|
+
});
|
|
20
|
+
it('should allow guaranteed presence of TMinimum numeric values', () => {
|
|
21
|
+
// ✅ allowed: exact minimum present with correct numeric type
|
|
22
|
+
const opts1 = { attempts: 2 };
|
|
23
|
+
const use1 = opts1.attempts;
|
|
24
|
+
expect(use1).toBe(2);
|
|
25
|
+
// ❌ not allowed: must include the keys required in TMinimum at a minimum
|
|
26
|
+
// @ts-expect-error -- missing required key 'attempts'
|
|
27
|
+
const opts2 = { something: 'else' };
|
|
28
|
+
// ✅ allowed: minimum present + extra string props
|
|
29
|
+
const opts3 = { attempts: 3, something: 'x' };
|
|
30
|
+
const use2 = opts3.attempts;
|
|
31
|
+
const use2alt = opts3.something;
|
|
32
|
+
expect(use2).toBe(3);
|
|
33
|
+
// ❌ not allowed: wrong type for required minimum key
|
|
34
|
+
// @ts-expect-error -- 'attempts' must be a number per TMinimum
|
|
35
|
+
const opts4 = { attempts: '2' };
|
|
36
|
+
// ❌ not allowed: non-string extras in the record branch
|
|
37
|
+
// @ts-expect-error -- extra props in the record branch must be string | undefined
|
|
38
|
+
const opts5 = { other: 42 };
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=InvokeOpts.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvokeOpts.test.js","sourceRoot":"","sources":["../../../src/domain/objects/InvokeOpts.test.ts"],"names":[],"mappings":";;AAGA,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAGpE,4DAA4D;QAC5D,MAAM,KAAK,GAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,GAAW,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,OAAO,GAAgC,KAAK,CAAC,IAAI,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,sEAAsE;QACtE,+CAA+C;QAC/C,MAAM,KAAK,GAAyB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAEvE,qDAAqD;QACrD,4DAA4D;QAC5D,MAAM,KAAK,GAAyB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAEnD,wDAAwD;QACxD,kFAAkF;QAClF,MAAM,KAAK,GAAyB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QAGrE,6DAA6D;QAC7D,MAAM,KAAK,GAAyB,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAW,KAAK,CAAC,QAAQ,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,yEAAyE;QACzE,sDAAsD;QACtD,MAAM,KAAK,GAAyB,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAE1D,kDAAkD;QAClD,MAAM,KAAK,GAAyB,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QACpE,MAAM,IAAI,GAAW,KAAK,CAAC,QAAQ,CAAC;QACpC,MAAM,OAAO,GAAgC,KAAK,CAAC,SAAS,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,qDAAqD;QACrD,+DAA+D;QAC/D,MAAM,KAAK,GAAyB,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAEtD,wDAAwD;QACxD,kFAAkF;QAClF,MAAM,KAAK,GAAyB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .what = adds an attempt qualifier to an output file path
|
|
3
|
+
* .why =
|
|
4
|
+
* - ensures deterministic, per-attempt output paths
|
|
5
|
+
* - supports explicit token replacement via `{{attempt}}` or automatic suffix
|
|
6
|
+
* .how =
|
|
7
|
+
* - if `path` contains `{{attempt}}` → replace with `i${attempt}`
|
|
8
|
+
* - else → insert `.i{attempt}` before the final extension
|
|
9
|
+
*/
|
|
10
|
+
export declare const addAttemptQualifierToOutputPath: (input: {
|
|
11
|
+
path: string;
|
|
12
|
+
attempt: number;
|
|
13
|
+
}) => string;
|
|
@@ -0,0 +1,30 @@
|
|
|
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.addAttemptQualifierToOutputPath = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const type_fns_1 = require("type-fns");
|
|
9
|
+
/**
|
|
10
|
+
* .what = adds an attempt qualifier to an output file path
|
|
11
|
+
* .why =
|
|
12
|
+
* - ensures deterministic, per-attempt output paths
|
|
13
|
+
* - supports explicit token replacement via `{{attempt}}` or automatic suffix
|
|
14
|
+
* .how =
|
|
15
|
+
* - if `path` contains `{{attempt}}` → replace with `i${attempt}`
|
|
16
|
+
* - else → insert `.i{attempt}` before the final extension
|
|
17
|
+
*/
|
|
18
|
+
const addAttemptQualifierToOutputPath = (input) => {
|
|
19
|
+
// if replacement variable is present, replace it
|
|
20
|
+
if (input.path.includes('{{attempt}}'))
|
|
21
|
+
return input.path.replace(/\{\{attempt\}\}/g, `i${input.attempt}`);
|
|
22
|
+
// parse the path parts
|
|
23
|
+
const parts = node_path_1.default.parse(input.path);
|
|
24
|
+
// build the path
|
|
25
|
+
return node_path_1.default.join(parts.dir, [parts.name, `i${input.attempt}`, parts.ext.replace(/^\./, '') || null]
|
|
26
|
+
.filter(type_fns_1.isPresent)
|
|
27
|
+
.join('.'));
|
|
28
|
+
};
|
|
29
|
+
exports.addAttemptQualifierToOutputPath = addAttemptQualifierToOutputPath;
|
|
30
|
+
//# sourceMappingURL=addAttemptQualifierToOutputPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addAttemptQualifierToOutputPath.js","sourceRoot":"","sources":["../../../src/logic/invoke/addAttemptQualifierToOutputPath.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,uCAAqC;AAErC;;;;;;;;GAQG;AACI,MAAM,+BAA+B,GAAG,CAAC,KAG/C,EAAU,EAAE;IACX,iDAAiD;IACjD,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QACpC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAErE,uBAAuB;IACvB,MAAM,KAAK,GAAG,mBAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,iBAAiB;IACjB,OAAO,mBAAI,CAAC,IAAI,CACd,KAAK,CAAC,GAAG,EACT,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;SACpE,MAAM,CAAC,oBAAS,CAAC;SACjB,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,+BAA+B,mCAkB1C"}
|