rhachet 1.2.0 → 1.3.2
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/bin/run +4 -0
- package/dist/.test/directory.js.map +1 -0
- package/dist/.test/genContextLogTrail.js.map +1 -0
- package/dist/.test/genContextStitchTrail.js.map +1 -0
- package/dist/.test/getContextOpenAI.js.map +1 -0
- package/dist/{__test_assets__ → .test}/stitchers/genStitcherCodeFileRead.d.ts +1 -1
- package/dist/.test/stitchers/genStitcherCodeFileRead.js.map +1 -0
- package/dist/{__test_assets__ → .test}/stitchers/genStitcherCodeFileWrite.d.ts +1 -1
- package/dist/.test/stitchers/genStitcherCodeFileWrite.js.map +1 -0
- package/dist/{__test_assets__ → .test}/stitchers/genStitcherCodeReviewImagine.d.ts +1 -1
- package/dist/.test/stitchers/genStitcherCodeReviewImagine.js.map +1 -0
- package/dist/{__test_assets__ → .test}/stitchers/stitcherCodeDiffImagine.d.ts +1 -1
- package/dist/.test/stitchers/stitcherCodeDiffImagine.js.map +1 -0
- package/dist/{__test_assets__ → .test}/stitchers/stitcherFanoutRandomSum.d.ts +4 -4
- package/dist/.test/stitchers/stitcherFanoutRandomSum.js.map +1 -0
- package/dist/{__test_assets__ → .test}/stitchers/stitcherFanoutSubroutes.d.ts +3 -3
- package/dist/.test/stitchers/stitcherFanoutSubroutes.js.map +1 -0
- package/dist/{__test_assets__ → .test}/threads/codeArtist.js +1 -1
- package/dist/.test/threads/codeArtist.js.map +1 -0
- package/dist/{__test_assets__ → .test}/threads/codeCritic.js +1 -1
- package/dist/.test/threads/codeCritic.js.map +1 -0
- package/dist/.test/threads/director.js.map +1 -0
- package/dist/_topublish/file-fns/src/getFile.js.map +1 -0
- package/dist/contract/cli/.test/example.echoRegistry.d.ts +2 -0
- package/dist/contract/cli/.test/example.echoRegistry.js +54 -0
- package/dist/contract/cli/.test/example.echoRegistry.js.map +1 -0
- package/dist/contract/cli/invoke.d.ts +12 -0
- package/dist/contract/cli/invoke.integration.test.d.ts +1 -0
- package/dist/contract/cli/invoke.integration.test.js +38 -0
- package/dist/contract/cli/invoke.integration.test.js.map +1 -0
- package/dist/contract/cli/invoke.js +88 -0
- package/dist/contract/cli/invoke.js.map +1 -0
- package/dist/contract/cli/invokeAsk.d.ts +10 -0
- package/dist/contract/cli/invokeAsk.integration.test.d.ts +1 -0
- package/dist/contract/cli/invokeAsk.integration.test.js +41 -0
- package/dist/contract/cli/invokeAsk.integration.test.js.map +1 -0
- package/dist/contract/cli/invokeAsk.js +78 -0
- package/dist/contract/cli/invokeAsk.js.map +1 -0
- package/dist/contract/cli/invokeList.d.ts +10 -0
- package/dist/contract/cli/invokeList.js +48 -0
- package/dist/contract/cli/invokeList.js.map +1 -0
- package/dist/contract/cli/invokeReadme.d.ts +15 -0
- package/dist/contract/cli/invokeReadme.integration.test.d.ts +1 -0
- package/dist/contract/cli/invokeReadme.integration.test.js +62 -0
- package/dist/contract/cli/invokeReadme.integration.test.js.map +1 -0
- package/dist/contract/cli/invokeReadme.js +72 -0
- package/dist/contract/cli/invokeReadme.js.map +1 -0
- package/dist/contract/sdk.d.ts +9 -1
- package/dist/contract/sdk.js +16 -2
- package/dist/contract/sdk.js.map +1 -1
- package/dist/domain/objects/index.d.ts +7 -0
- package/dist/domain/objects/index.js +7 -0
- package/dist/domain/objects/index.js.map +1 -1
- package/dist/logic/invoke/assureFindRole.d.ts +10 -0
- package/dist/logic/invoke/assureFindRole.js +22 -0
- package/dist/logic/invoke/assureFindRole.js.map +1 -0
- package/dist/logic/invoke/assureUniqueRoles.d.ts +5 -0
- package/dist/logic/invoke/assureUniqueRoles.js +19 -0
- package/dist/logic/invoke/assureUniqueRoles.js.map +1 -0
- package/dist/logic/invoke/getSkillContext.d.ts +17 -0
- package/dist/logic/invoke/getSkillContext.js +44 -0
- package/dist/logic/invoke/getSkillContext.js.map +1 -0
- package/dist/logic/invoke/getSkillContext.test.d.ts +1 -0
- package/dist/logic/invoke/getSkillContext.test.js +85 -0
- package/dist/logic/invoke/getSkillContext.test.js.map +1 -0
- package/dist/logic/invoke/getSkillThread.test.d.ts +1 -0
- package/dist/logic/invoke/getSkillThread.test.js +115 -0
- package/dist/logic/invoke/getSkillThread.test.js.map +1 -0
- package/dist/logic/invoke/getSkillThreads.d.ts +16 -0
- package/dist/logic/invoke/getSkillThreads.js +46 -0
- package/dist/logic/invoke/getSkillThreads.js.map +1 -0
- package/dist/logic/stitch/enstitch.test.js +2 -2
- package/dist/logic/stitch/enstitch.test.js.map +1 -1
- package/dist/logic/stitch/invokeImagineStitcher.integration.test.js +3 -3
- package/dist/logic/stitch/invokeImagineStitcher.integration.test.js.map +1 -1
- package/dist/logic/template/genStepImagineViaTemplate.test.js +2 -2
- package/dist/logic/template/genStepImagineViaTemplate.test.js.map +1 -1
- package/dist/logic/weave/compose/GStitcherInferredFromChoice.generic.test.js +2 -2
- package/dist/logic/weave/compose/GStitcherInferredFromChoice.generic.test.js.map +1 -1
- package/dist/logic/weave/compose/GStitcherInferredFromCycle.generic.test.js +2 -2
- package/dist/logic/weave/compose/GStitcherInferredFromCycle.generic.test.js.map +1 -1
- package/dist/logic/weave/compose/GStitcherInferredFromFanout.generic.test.js +2 -2
- package/dist/logic/weave/compose/GStitcherInferredFromFanout.generic.test.js.map +1 -1
- package/dist/logic/weave/compose/GStitcherInferredFromRoute.generic.test.js +2 -2
- package/dist/logic/weave/compose/GStitcherInferredFromRoute.generic.test.js.map +1 -1
- package/dist/logic/weave/compose/asStitcher.d.ts +1 -1
- package/dist/logic/weave/compose/genStitchCycle.test.js +2 -2
- package/dist/logic/weave/compose/genStitchCycle.test.js.map +1 -1
- package/dist/logic/weave/compose/genStitchFanout.test.js +2 -2
- package/dist/logic/weave/compose/genStitchFanout.test.js.map +1 -1
- package/dist/logic/weave/enweaveOneChoice.test.js +2 -2
- package/dist/logic/weave/enweaveOneChoice.test.js.map +1 -1
- package/dist/logic/weave/enweaveOneCycle.test.js +2 -2
- package/dist/logic/weave/enweaveOneCycle.test.js.map +1 -1
- package/dist/logic/weave/enweaveOneFanout.integration.test.js +6 -6
- package/dist/logic/weave/enweaveOneFanout.integration.test.js.map +1 -1
- package/dist/logic/weave/enweaveOneRoute.integration.test.js +6 -6
- package/dist/logic/weave/enweaveOneRoute.integration.test.js.map +1 -1
- package/dist/logic/weave/enweaveOneStitcher.integration.test.js +10 -10
- package/dist/logic/weave/enweaveOneStitcher.integration.test.js.map +1 -1
- package/package.json +8 -2
- package/dist/__nonpublished_modules__/file-fns/src/getFile.js.map +0 -1
- package/dist/__test_assets__/directory.js.map +0 -1
- package/dist/__test_assets__/genContextLogTrail.js.map +0 -1
- package/dist/__test_assets__/genContextStitchTrail.js.map +0 -1
- package/dist/__test_assets__/getContextOpenAI.js.map +0 -1
- package/dist/__test_assets__/stitchers/genStitcherCodeFileRead.js.map +0 -1
- package/dist/__test_assets__/stitchers/genStitcherCodeFileWrite.js.map +0 -1
- package/dist/__test_assets__/stitchers/genStitcherCodeReviewImagine.js.map +0 -1
- package/dist/__test_assets__/stitchers/stitcherCodeDiffImagine.js.map +0 -1
- package/dist/__test_assets__/stitchers/stitcherFanoutRandomSum.js.map +0 -1
- package/dist/__test_assets__/stitchers/stitcherFanoutSubroutes.js.map +0 -1
- package/dist/__test_assets__/threads/codeArtist.js.map +0 -1
- package/dist/__test_assets__/threads/codeCritic.js.map +0 -1
- package/dist/__test_assets__/threads/director.js.map +0 -1
- /package/dist/{__test_assets__ → .test}/directory.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/directory.js +0 -0
- /package/dist/{__test_assets__ → .test}/genContextLogTrail.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/genContextLogTrail.js +0 -0
- /package/dist/{__test_assets__ → .test}/genContextStitchTrail.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/genContextStitchTrail.js +0 -0
- /package/dist/{__test_assets__ → .test}/getContextOpenAI.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/getContextOpenAI.js +0 -0
- /package/dist/{__test_assets__ → .test}/stitchers/genStitcherCodeFileRead.js +0 -0
- /package/dist/{__test_assets__ → .test}/stitchers/genStitcherCodeFileWrite.js +0 -0
- /package/dist/{__test_assets__ → .test}/stitchers/genStitcherCodeReviewImagine.js +0 -0
- /package/dist/{__test_assets__ → .test}/stitchers/stitcherCodeDiffImagine.js +0 -0
- /package/dist/{__test_assets__ → .test}/stitchers/stitcherFanoutRandomSum.js +0 -0
- /package/dist/{__test_assets__ → .test}/stitchers/stitcherFanoutSubroutes.js +0 -0
- /package/dist/{__test_assets__ → .test}/threads/codeArtist.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/threads/codeCritic.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/threads/director.d.ts +0 -0
- /package/dist/{__test_assets__ → .test}/threads/director.js +0 -0
- /package/dist/{__nonpublished_modules__ → _topublish}/file-fns/src/getFile.d.ts +0 -0
- /package/dist/{__nonpublished_modules__ → _topublish}/file-fns/src/getFile.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commander_1 = require("commander");
|
|
4
|
+
const test_fns_1 = require("test-fns");
|
|
5
|
+
const example_echoRegistry_1 = require("./.test/example.echoRegistry");
|
|
6
|
+
const invokeReadme_1 = require("./invokeReadme");
|
|
7
|
+
describe('invokeReadme (integration)', () => {
|
|
8
|
+
(0, test_fns_1.given)('a CLI program with invokeReadme registered using EXAMPLE_REGISTRY', () => {
|
|
9
|
+
const program = new commander_1.Command();
|
|
10
|
+
const logSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
|
|
11
|
+
beforeEach(() => logSpy.mockClear());
|
|
12
|
+
(0, invokeReadme_1.invokeReadme)({ program, registries: [example_echoRegistry_1.EXAMPLE_REGISTRY] });
|
|
13
|
+
(0, test_fns_1.when)('invoked with only --registry', () => {
|
|
14
|
+
(0, test_fns_1.then)('it should print the registry readme', async () => {
|
|
15
|
+
await program.parseAsync(['readme', '--registry', 'echo'], {
|
|
16
|
+
from: 'user',
|
|
17
|
+
});
|
|
18
|
+
expect(logSpy).toHaveBeenCalledWith('📜 echo.readme');
|
|
19
|
+
expect(logSpy).toHaveBeenCalledWith(expect.stringContaining(example_echoRegistry_1.EXAMPLE_REGISTRY.readme.split('\n')[0]));
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
(0, test_fns_1.when)('invoked with --role only', () => {
|
|
23
|
+
(0, test_fns_1.then)('it should print the role readme', async () => {
|
|
24
|
+
await program.parseAsync(['readme', '--role', 'echoer'], {
|
|
25
|
+
from: 'user',
|
|
26
|
+
});
|
|
27
|
+
expect(logSpy).toHaveBeenCalledWith('📜 echoer.readme');
|
|
28
|
+
expect(logSpy).toHaveBeenCalledWith(expect.stringContaining(example_echoRegistry_1.EXAMPLE_REGISTRY.roles[0].readme.split('\n')[0]));
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
(0, test_fns_1.when)('invoked with --role and --skill', () => {
|
|
32
|
+
(0, test_fns_1.then)('it should print the skill readme', async () => {
|
|
33
|
+
await program.parseAsync(['readme', '--role', 'echoer', '--skill', 'echo'], { from: 'user' });
|
|
34
|
+
expect(logSpy).toHaveBeenCalledWith('📜 echoer.echo.readme');
|
|
35
|
+
expect(logSpy).toHaveBeenCalledWith(expect.stringContaining(example_echoRegistry_1.EXAMPLE_REGISTRY.roles[0].skills[0].readme.split('\n')[0]));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
(0, test_fns_1.when)('invoked with an unknown role', () => {
|
|
39
|
+
(0, test_fns_1.then)('it should throw a missing role error', async () => {
|
|
40
|
+
const error = await (0, test_fns_1.getError)(() => program.parseAsync(['readme', '--role', 'notreal'], {
|
|
41
|
+
from: 'user',
|
|
42
|
+
}));
|
|
43
|
+
expect(error?.message).toContain(`no role named "notreal" found in any registry`);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
(0, test_fns_1.when)('invoked with an unknown skill', () => {
|
|
47
|
+
(0, test_fns_1.then)('it should throw a missing skill error', async () => {
|
|
48
|
+
const error = await (0, test_fns_1.getError)(() => program.parseAsync(['readme', '--role', 'echoer', '--skill', 'notreal'], { from: 'user' }));
|
|
49
|
+
expect(error?.message).toContain('no skill "notreal" in role "echoer"');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
(0, test_fns_1.when)('invoked with an unknown registry', () => {
|
|
53
|
+
(0, test_fns_1.then)('it should throw a missing registry error', async () => {
|
|
54
|
+
const error = await (0, test_fns_1.getError)(() => program.parseAsync(['readme', '--registry', 'notreal'], {
|
|
55
|
+
from: 'user',
|
|
56
|
+
}));
|
|
57
|
+
expect(error?.message).toContain('no registry matches given options');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=invokeReadme.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invokeReadme.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeReadme.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.indentLines = exports.invokeReadme = void 0;
|
|
4
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
5
|
+
const assureFindRole_1 = require("../../logic/invoke/assureFindRole");
|
|
6
|
+
/**
|
|
7
|
+
* .what = main entrypoint for `readme` CLI command
|
|
8
|
+
* .why = allows devs to introspect registry, role, or skill documentation from the CLI
|
|
9
|
+
*/
|
|
10
|
+
const invokeReadme = ({ program, registries, }) => {
|
|
11
|
+
program
|
|
12
|
+
.command('readme')
|
|
13
|
+
.description('print documentation for the registry, a role, or a skill')
|
|
14
|
+
.option('--registry <slug>', 'which registry to inspect')
|
|
15
|
+
.option('--role <slug>', 'which role to inspect')
|
|
16
|
+
.option('--skill <slug>', 'which skill to inspect')
|
|
17
|
+
.action((opts) => {
|
|
18
|
+
// no inputs provided
|
|
19
|
+
if (!opts.registry && !opts.role)
|
|
20
|
+
helpful_errors_1.BadRequestError.throw('must provide --registry or --role');
|
|
21
|
+
// resolve registry
|
|
22
|
+
const registry = opts.registry
|
|
23
|
+
? registries.find((r) => r.slug === opts.registry)
|
|
24
|
+
: null;
|
|
25
|
+
if (!opts.role) {
|
|
26
|
+
if (!registry)
|
|
27
|
+
helpful_errors_1.BadRequestError.throw(`no registry matches given options`);
|
|
28
|
+
// registry level readme
|
|
29
|
+
return printReadme(`${registry.slug}`, registry.readme);
|
|
30
|
+
}
|
|
31
|
+
// resolve role
|
|
32
|
+
const role = (0, assureFindRole_1.assureFindRole)({ registries, slug: opts.role });
|
|
33
|
+
if (!role)
|
|
34
|
+
helpful_errors_1.BadRequestError.throw(`no role named "${opts.role}" in configured registries`, {
|
|
35
|
+
registries: registries.map((thisRegistry) => thisRegistry.slug),
|
|
36
|
+
});
|
|
37
|
+
// role-level readme
|
|
38
|
+
if (!opts.skill)
|
|
39
|
+
return printReadme(`${role.slug}`, role.readme);
|
|
40
|
+
// resolve skill
|
|
41
|
+
const skill = role.skills.find((s) => s.slug === opts.skill);
|
|
42
|
+
if (!skill)
|
|
43
|
+
helpful_errors_1.BadRequestError.throw(`no skill "${opts.skill}" in role "${opts.role}"`, { skills: role.skills.map((thisSkill) => thisSkill.slug) });
|
|
44
|
+
// skill-level readme
|
|
45
|
+
return printReadme(`${role.slug}.${skill.slug}`, skill.readme);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
exports.invokeReadme = invokeReadme;
|
|
49
|
+
/**
|
|
50
|
+
* .what = logs a formatted markdown readme block with label
|
|
51
|
+
* .why = standardizes output for registry/role/skill readmes in CLI
|
|
52
|
+
*/
|
|
53
|
+
const printReadme = (slug, markdown) => {
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(`📜 ${slug}.readme`);
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log((0, exports.indentLines)(markdown));
|
|
58
|
+
console.log('');
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* .what = indents each line of a string by a fixed number of spaces
|
|
62
|
+
* .why = ensures markdown blocks are consistently readable in nested output
|
|
63
|
+
*/
|
|
64
|
+
const indentLines = (text, spaces = 4) => {
|
|
65
|
+
const prefix = ' '.repeat(spaces);
|
|
66
|
+
return text
|
|
67
|
+
.split('\n')
|
|
68
|
+
.map((line) => `${prefix}${line}`)
|
|
69
|
+
.join('\n');
|
|
70
|
+
};
|
|
71
|
+
exports.indentLines = indentLines;
|
|
72
|
+
//# sourceMappingURL=invokeReadme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invokeReadme.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeReadme.ts"],"names":[],"mappings":"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"}
|
package/dist/contract/sdk.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from '../domain/objects';
|
|
1
2
|
export { genStitchChoice } from '../logic/weave/compose/genStitchChoice';
|
|
2
3
|
export { genStitchCycle } from '../logic/weave/compose/genStitchCycle';
|
|
3
4
|
export { genStitchFanout } from '../logic/weave/compose/genStitchFanout';
|
|
@@ -5,4 +6,11 @@ export { genStitchRoute } from '../logic/weave/compose/genStitchRoute';
|
|
|
5
6
|
export { enweaveOneStitcher } from '../logic/weave/enweaveOneStitcher';
|
|
6
7
|
export { asStitcher } from '../logic/weave/compose/asStitcher';
|
|
7
8
|
export { asStitcherFlat } from '../logic/weave/compose/asStitcherFlat';
|
|
8
|
-
export
|
|
9
|
+
export { genTemplate } from '../logic/template/genTemplate';
|
|
10
|
+
export { getTemplateValFromArtifacts } from '../logic/template/getTemplateValFromArtifacts';
|
|
11
|
+
export { getTemplateVarsFromRoleInherit } from '../logic/template/getTemplateVarsFromInheritance';
|
|
12
|
+
export { useTemplate } from '../logic/template/useTemplate';
|
|
13
|
+
export { genStepImagineViaTemplate } from '../logic/template/genStepImagineViaTemplate';
|
|
14
|
+
export { ContextStitchTrail } from '../logic/stitch/withStitchTrail';
|
|
15
|
+
export { getStitch } from '../logic/thread/getStitch';
|
|
16
|
+
export { enrollThread } from '../logic/role/enrollThread';
|
package/dist/contract/sdk.js
CHANGED
|
@@ -14,7 +14,8 @@ 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.asStitcherFlat = exports.asStitcher = exports.enweaveOneStitcher = exports.genStitchRoute = exports.genStitchFanout = exports.genStitchCycle = exports.genStitchChoice = void 0;
|
|
17
|
+
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
|
+
__exportStar(require("../domain/objects"), exports);
|
|
18
19
|
var genStitchChoice_1 = require("../logic/weave/compose/genStitchChoice");
|
|
19
20
|
Object.defineProperty(exports, "genStitchChoice", { enumerable: true, get: function () { return genStitchChoice_1.genStitchChoice; } });
|
|
20
21
|
var genStitchCycle_1 = require("../logic/weave/compose/genStitchCycle");
|
|
@@ -29,5 +30,18 @@ var asStitcher_1 = require("../logic/weave/compose/asStitcher");
|
|
|
29
30
|
Object.defineProperty(exports, "asStitcher", { enumerable: true, get: function () { return asStitcher_1.asStitcher; } });
|
|
30
31
|
var asStitcherFlat_1 = require("../logic/weave/compose/asStitcherFlat");
|
|
31
32
|
Object.defineProperty(exports, "asStitcherFlat", { enumerable: true, get: function () { return asStitcherFlat_1.asStitcherFlat; } });
|
|
32
|
-
|
|
33
|
+
var genTemplate_1 = require("../logic/template/genTemplate");
|
|
34
|
+
Object.defineProperty(exports, "genTemplate", { enumerable: true, get: function () { return genTemplate_1.genTemplate; } });
|
|
35
|
+
var getTemplateValFromArtifacts_1 = require("../logic/template/getTemplateValFromArtifacts");
|
|
36
|
+
Object.defineProperty(exports, "getTemplateValFromArtifacts", { enumerable: true, get: function () { return getTemplateValFromArtifacts_1.getTemplateValFromArtifacts; } });
|
|
37
|
+
var getTemplateVarsFromInheritance_1 = require("../logic/template/getTemplateVarsFromInheritance");
|
|
38
|
+
Object.defineProperty(exports, "getTemplateVarsFromRoleInherit", { enumerable: true, get: function () { return getTemplateVarsFromInheritance_1.getTemplateVarsFromRoleInherit; } });
|
|
39
|
+
var useTemplate_1 = require("../logic/template/useTemplate");
|
|
40
|
+
Object.defineProperty(exports, "useTemplate", { enumerable: true, get: function () { return useTemplate_1.useTemplate; } });
|
|
41
|
+
var genStepImagineViaTemplate_1 = require("../logic/template/genStepImagineViaTemplate");
|
|
42
|
+
Object.defineProperty(exports, "genStepImagineViaTemplate", { enumerable: true, get: function () { return genStepImagineViaTemplate_1.genStepImagineViaTemplate; } });
|
|
43
|
+
var getStitch_1 = require("../logic/thread/getStitch");
|
|
44
|
+
Object.defineProperty(exports, "getStitch", { enumerable: true, get: function () { return getStitch_1.getStitch; } });
|
|
45
|
+
var enrollThread_1 = require("../logic/role/enrollThread");
|
|
46
|
+
Object.defineProperty(exports, "enrollThread", { enumerable: true, get: function () { return enrollThread_1.enrollThread; } });
|
|
33
47
|
//# 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,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,
|
|
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"}
|
|
@@ -9,3 +9,10 @@ export * from './StitchStep';
|
|
|
9
9
|
export * from './StitchTrail';
|
|
10
10
|
export * from './Thread';
|
|
11
11
|
export * from './Threads';
|
|
12
|
+
export * from './Role';
|
|
13
|
+
export * from './RoleContext';
|
|
14
|
+
export * from './RoleRegistry';
|
|
15
|
+
export * from './RoleSkill';
|
|
16
|
+
export * from './RoleSkillArgGetter';
|
|
17
|
+
export * from './RoleTrait';
|
|
18
|
+
export * from './Template';
|
|
@@ -27,4 +27,11 @@ __exportStar(require("./Thread"), exports);
|
|
|
27
27
|
__exportStar(require("./Threads"), exports);
|
|
28
28
|
// export * from './Weave';
|
|
29
29
|
// export * from './Weaver';
|
|
30
|
+
__exportStar(require("./Role"), exports);
|
|
31
|
+
__exportStar(require("./RoleContext"), exports);
|
|
32
|
+
__exportStar(require("./RoleRegistry"), exports);
|
|
33
|
+
__exportStar(require("./RoleSkill"), exports);
|
|
34
|
+
__exportStar(require("./RoleSkillArgGetter"), exports);
|
|
35
|
+
__exportStar(require("./RoleTrait"), exports);
|
|
36
|
+
__exportStar(require("./Template"), exports);
|
|
30
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/objects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,iDAA+B;AAC/B,gDAA8B;AAC9B,6CAA2B;AAC3B,iDAA+B;AAC/B,gDAA8B;AAC9B,mDAAiC;AACjC,+CAA6B;AAC7B,gDAA8B;AAC9B,2CAAyB;AACzB,4CAA0B;AAC1B,2BAA2B;AAC3B,4BAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/objects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,iDAA+B;AAC/B,gDAA8B;AAC9B,6CAA2B;AAC3B,iDAA+B;AAC/B,gDAA8B;AAC9B,mDAAiC;AACjC,+CAA6B;AAC7B,gDAA8B;AAC9B,2CAAyB;AACzB,4CAA0B;AAC1B,2BAA2B;AAC3B,4BAA4B;AAE5B,yCAAuB;AACvB,gDAA8B;AAC9B,iDAA+B;AAC/B,8CAA4B;AAC5B,uDAAqC;AACrC,8CAA4B;AAE5B,6CAA2B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Role } from '../../domain/objects/Role';
|
|
2
|
+
import { RoleRegistry } from '../../domain/objects/RoleRegistry';
|
|
3
|
+
/**
|
|
4
|
+
* .what = finds the first matching role across registries
|
|
5
|
+
* .why = ensures there is exactly one role match; fails if ambiguous or missing
|
|
6
|
+
*/
|
|
7
|
+
export declare const assureFindRole: ({ registries, slug, }: {
|
|
8
|
+
registries: RoleRegistry[];
|
|
9
|
+
slug: string;
|
|
10
|
+
}) => Role;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assureFindRole = void 0;
|
|
4
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
5
|
+
/**
|
|
6
|
+
* .what = finds the first matching role across registries
|
|
7
|
+
* .why = ensures there is exactly one role match; fails if ambiguous or missing
|
|
8
|
+
*/
|
|
9
|
+
const assureFindRole = ({ registries, slug, }) => {
|
|
10
|
+
const matches = registries
|
|
11
|
+
.flatMap((r) => r.roles)
|
|
12
|
+
.filter((r) => r.slug === slug);
|
|
13
|
+
if (matches.length === 0)
|
|
14
|
+
helpful_errors_1.BadRequestError.throw(`no role named "${slug}" found in any registry`, {
|
|
15
|
+
slug,
|
|
16
|
+
});
|
|
17
|
+
if (matches.length > 1)
|
|
18
|
+
helpful_errors_1.BadRequestError.throw(`multiple roles named "${slug}" found across registries`, { slug });
|
|
19
|
+
return matches[0];
|
|
20
|
+
};
|
|
21
|
+
exports.assureFindRole = assureFindRole;
|
|
22
|
+
//# sourceMappingURL=assureFindRole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assureFindRole.js","sourceRoot":"","sources":["../../../src/logic/invoke/assureFindRole.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAKjD;;;GAGG;AACI,MAAM,cAAc,GAAG,CAAC,EAC7B,UAAU,EACV,IAAI,GAIL,EAAQ,EAAE;IACT,MAAM,OAAO,GAAG,UAAU;SACvB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QACtB,gCAAe,CAAC,KAAK,CAAC,kBAAkB,IAAI,yBAAyB,EAAE;YACrE,IAAI;SACL,CAAC,CAAC;IACL,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QACpB,gCAAe,CAAC,KAAK,CACnB,yBAAyB,IAAI,2BAA2B,EACxD,EAAE,IAAI,EAAE,CACT,CAAC;IACJ,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;AACrB,CAAC,CAAC;AApBW,QAAA,cAAc,kBAoBzB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assureUniqueRoles = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* .what = ensure we fail fast upon duplicate role.slugs across registries
|
|
6
|
+
*/
|
|
7
|
+
const assureUniqueRoles = (registries) => {
|
|
8
|
+
const seen = new Map(); // slug → registry.slug
|
|
9
|
+
for (const registry of registries) {
|
|
10
|
+
for (const role of registry.roles) {
|
|
11
|
+
if (seen.has(role.slug)) {
|
|
12
|
+
throw new Error(`❌ duplicate role.slug "${role.slug}" found in registries: "${seen.get(role.slug)}" and "${registry.slug}"`);
|
|
13
|
+
}
|
|
14
|
+
seen.set(role.slug, registry.slug);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
exports.assureUniqueRoles = assureUniqueRoles;
|
|
19
|
+
//# sourceMappingURL=assureUniqueRoles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assureUniqueRoles.js","sourceRoot":"","sources":["../../../src/logic/invoke/assureUniqueRoles.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,UAA0B,EAAQ,EAAE;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,uBAAuB;IAC/D,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,0BACE,IAAI,CAAC,IACP,2BAA2B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAC5C,QAAQ,CAAC,IACX,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAhBW,QAAA,iBAAiB,qBAgB5B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PickOne } from 'type-fns';
|
|
2
|
+
import { RoleSkillContextGetter } from '../../domain/objects/RoleSkillArgGetter';
|
|
3
|
+
/**
|
|
4
|
+
* .what = hydrates skill context using either passin or lookup mode
|
|
5
|
+
* .why =
|
|
6
|
+
* - supports flexible skill execution via CLI, tests, or runtime composition
|
|
7
|
+
* - ensures all required env inputs are present and valid
|
|
8
|
+
*/
|
|
9
|
+
export declare const getSkillContext: <TOutput extends import("simple-log-methods").ContextLogTrail & import("../..").ContextStitchTrail, TVars extends Record<string, any>>(input: {
|
|
10
|
+
getter: RoleSkillContextGetter<TOutput, TVars>;
|
|
11
|
+
from: PickOne<{
|
|
12
|
+
passin: TVars;
|
|
13
|
+
lookup: {
|
|
14
|
+
env: Record<string, string | undefined>;
|
|
15
|
+
};
|
|
16
|
+
}>;
|
|
17
|
+
}) => Promise<TOutput>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSkillContext = void 0;
|
|
4
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
5
|
+
/**
|
|
6
|
+
* .what = hydrates skill context using either passin or lookup mode
|
|
7
|
+
* .why =
|
|
8
|
+
* - supports flexible skill execution via CLI, tests, or runtime composition
|
|
9
|
+
* - ensures all required env inputs are present and valid
|
|
10
|
+
*/
|
|
11
|
+
const getSkillContext = async (input) => {
|
|
12
|
+
const { getter, from } = input;
|
|
13
|
+
// support passin mode: directly provided context vars
|
|
14
|
+
if ('passin' in from) {
|
|
15
|
+
if (!getter.assess(from.passin)) {
|
|
16
|
+
helpful_errors_1.BadRequestError.throw('from.passin was assessed to have incorrect shape', {
|
|
17
|
+
from,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return await getter.instantiate(from.passin);
|
|
21
|
+
}
|
|
22
|
+
// support lookup mode: pull from env vars
|
|
23
|
+
if ('lookup' in from) {
|
|
24
|
+
const env = from.lookup.env;
|
|
25
|
+
const collected = {};
|
|
26
|
+
for (const [key, spec] of Object.entries(getter.lookup)) {
|
|
27
|
+
const val = env[spec.envar];
|
|
28
|
+
if (val === undefined) {
|
|
29
|
+
helpful_errors_1.BadRequestError.throw(`missing required env var ${spec.envar}`, {
|
|
30
|
+
key,
|
|
31
|
+
spec,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
collected[key] = val;
|
|
35
|
+
}
|
|
36
|
+
if (!getter.assess(collected))
|
|
37
|
+
helpful_errors_1.UnexpectedCodePathError.throw('from.lookup -> collected was assessed to have incorrect shape. this should not be possible', { from: { env: true }, collected: Object.keys(collected) });
|
|
38
|
+
return await getter.instantiate(collected);
|
|
39
|
+
}
|
|
40
|
+
// 🛑 should be unreachable (guard for future extension)
|
|
41
|
+
throw new helpful_errors_1.UnexpectedCodePathError('unsupported context.from', { input });
|
|
42
|
+
};
|
|
43
|
+
exports.getSkillContext = getSkillContext;
|
|
44
|
+
//# sourceMappingURL=getSkillContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSkillContext.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillContext.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAM1E;;;;;GAKG;AACI,MAAM,eAAe,GAAG,KAAK,EAGlC,KAMD,EAAoB,EAAE;IACrB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAE/B,sDAAsD;IACtD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,gCAAe,CAAC,KAAK,CACnB,kDAAkD,EAClD;gBACE,IAAI;aACL,CACF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,0CAA0C;IAC1C,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B,MAAM,SAAS,GAA2B,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,gCAAe,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,EAAE;oBAC9D,GAAG;oBACH,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3B,wCAAuB,CAAC,KAAK,CAC3B,4FAA4F,EAC5F,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAC3D,CAAC;QAEJ,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,wDAAwD;IACxD,MAAM,IAAI,wCAAuB,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AApDW,QAAA,eAAe,mBAoD1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
4
|
+
const test_fns_1 = require("test-fns");
|
|
5
|
+
const objects_1 = require("../../domain/objects");
|
|
6
|
+
const getSkillContext_1 = require("./getSkillContext");
|
|
7
|
+
const getterExample = objects_1.RoleSkillContextGetter.build({
|
|
8
|
+
lookup: {
|
|
9
|
+
openaiApiKey: {
|
|
10
|
+
source: 'process.env',
|
|
11
|
+
desc: 'your OpenAI key',
|
|
12
|
+
envar: 'OPENAI_API_KEY',
|
|
13
|
+
type: 'string',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
assess: (input) => typeof input?.openaiApiKey === 'string',
|
|
17
|
+
instantiate: (input) => ({
|
|
18
|
+
key: input.openaiApiKey,
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
describe('getSkillContext', () => {
|
|
22
|
+
(0, test_fns_1.given)('a valid context getter requiring OPENAI_API_KEY', () => {
|
|
23
|
+
const getter = getterExample.clone();
|
|
24
|
+
(0, test_fns_1.when)('called with passin: { openaiApiKey: "sk-abc" }', () => {
|
|
25
|
+
(0, test_fns_1.then)('it should return the expected context', async () => {
|
|
26
|
+
const result = await (0, getSkillContext_1.getSkillContext)({
|
|
27
|
+
getter,
|
|
28
|
+
from: { passin: { openaiApiKey: 'sk-abc' } },
|
|
29
|
+
});
|
|
30
|
+
expect(result).toEqual({ key: 'sk-abc' });
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
(0, test_fns_1.when)('called with passin: { wrongKey: "oops" }', () => {
|
|
34
|
+
(0, test_fns_1.then)('it should throw BadRequestError', async () => {
|
|
35
|
+
const error = await (0, test_fns_1.getError)(async () => (0, getSkillContext_1.getSkillContext)({
|
|
36
|
+
getter,
|
|
37
|
+
from: { passin: { wrongKey: 'oops' } },
|
|
38
|
+
}));
|
|
39
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
(0, test_fns_1.when)('called with env: { OPENAI_API_KEY: "sk-env" }', () => {
|
|
43
|
+
(0, test_fns_1.then)('it should return the expected context', async () => {
|
|
44
|
+
const result = await (0, getSkillContext_1.getSkillContext)({
|
|
45
|
+
getter,
|
|
46
|
+
from: { lookup: { env: { OPENAI_API_KEY: 'sk-env' } } },
|
|
47
|
+
});
|
|
48
|
+
expect(result).toEqual({ key: 'sk-env' });
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
(0, test_fns_1.when)('called with env: {} (missing key)', () => {
|
|
52
|
+
(0, test_fns_1.then)('it should throw BadRequestError', async () => {
|
|
53
|
+
const error = await (0, test_fns_1.getError)(async () => (0, getSkillContext_1.getSkillContext)({
|
|
54
|
+
getter,
|
|
55
|
+
from: { lookup: { env: {} } },
|
|
56
|
+
}));
|
|
57
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
(0, test_fns_1.given)('a rejecting getter that fails all assess checks', () => {
|
|
62
|
+
const getter = getterExample.clone({
|
|
63
|
+
assess: (() => false),
|
|
64
|
+
});
|
|
65
|
+
(0, test_fns_1.when)('called with env: { OPENAI_API_KEY: "sk-reject" }', () => {
|
|
66
|
+
(0, test_fns_1.then)('it should throw UnexpectedCodePathError', async () => {
|
|
67
|
+
const error = await (0, test_fns_1.getError)(async () => (0, getSkillContext_1.getSkillContext)({
|
|
68
|
+
getter,
|
|
69
|
+
from: { lookup: { env: { OPENAI_API_KEY: 'sk-reject' } } },
|
|
70
|
+
}));
|
|
71
|
+
expect(error).toBeInstanceOf(helpful_errors_1.UnexpectedCodePathError);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
(0, test_fns_1.when)('called with passin: { openaiApiKey: "sk-reject" }', () => {
|
|
75
|
+
(0, test_fns_1.then)('it should throw BadRequestError', async () => {
|
|
76
|
+
const error = await (0, test_fns_1.getError)(async () => (0, getSkillContext_1.getSkillContext)({
|
|
77
|
+
getter,
|
|
78
|
+
from: { passin: { openaiApiKey: 'sk-reject' } },
|
|
79
|
+
}));
|
|
80
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=getSkillContext.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSkillContext.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillContext.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const helpful_errors_1 = require("helpful-errors");
|
|
4
|
+
const test_fns_1 = require("test-fns");
|
|
5
|
+
const RoleSkillArgGetter_1 = require("../../domain/objects/RoleSkillArgGetter");
|
|
6
|
+
const genThread_1 = require("../thread/genThread");
|
|
7
|
+
const getSkillThreads_1 = require("./getSkillThreads");
|
|
8
|
+
const getterExample = RoleSkillArgGetter_1.RoleSkillThreadsGetter.build({
|
|
9
|
+
lookup: {
|
|
10
|
+
target: {
|
|
11
|
+
source: 'process.argv',
|
|
12
|
+
desc: 'target file or dir',
|
|
13
|
+
char: 't',
|
|
14
|
+
type: 'string',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
assess: (input) => typeof input?.target === 'string' && typeof input?.ask === 'string',
|
|
18
|
+
instantiate: (input) => ({
|
|
19
|
+
caller: (0, genThread_1.genThread)({ role: 'caller', target: input.target }),
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
describe('getSkillThreads', () => {
|
|
23
|
+
(0, test_fns_1.given)('a valid threads getter for { target, ask }', () => {
|
|
24
|
+
const getter = getterExample.clone();
|
|
25
|
+
(0, test_fns_1.when)('called with passin: { target: "src/index.ts", ask: "describe" }', () => {
|
|
26
|
+
(0, test_fns_1.then)('it should return the expected caller thread', async () => {
|
|
27
|
+
const result = await (0, getSkillThreads_1.getSkillThreads)({
|
|
28
|
+
getter,
|
|
29
|
+
from: { passin: { target: 'src/index.ts', ask: 'describe' } },
|
|
30
|
+
});
|
|
31
|
+
expect(result).toEqual({
|
|
32
|
+
caller: (0, genThread_1.genThread)({ role: 'caller', target: 'src/index.ts' }),
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
(0, test_fns_1.when)('called with passin: { bad: true }', () => {
|
|
37
|
+
(0, test_fns_1.then)('it should throw BadRequestError', async () => {
|
|
38
|
+
const error = await (0, test_fns_1.getError)(() => (0, getSkillThreads_1.getSkillThreads)({
|
|
39
|
+
getter,
|
|
40
|
+
from: { passin: { bad: true } },
|
|
41
|
+
}));
|
|
42
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
(0, test_fns_1.when)('called with argv: { target: "src/main.ts", ask: "go now" }', () => {
|
|
46
|
+
(0, test_fns_1.then)('it should return the expected caller thread', async () => {
|
|
47
|
+
const result = await (0, getSkillThreads_1.getSkillThreads)({
|
|
48
|
+
getter,
|
|
49
|
+
from: { lookup: { argv: { target: 'src/main.ts', ask: 'go now' } } },
|
|
50
|
+
});
|
|
51
|
+
expect(result).toEqual({
|
|
52
|
+
caller: (0, genThread_1.genThread)({ role: 'caller', target: 'src/main.ts' }),
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
(0, test_fns_1.when)('called with argv: { t: "src/main.ts", ask: "run this" }', () => {
|
|
57
|
+
(0, test_fns_1.then)('it should return the expected caller thread', async () => {
|
|
58
|
+
const result = await (0, getSkillThreads_1.getSkillThreads)({
|
|
59
|
+
getter,
|
|
60
|
+
from: { lookup: { argv: { t: 'src/main.ts', ask: 'run this' } } },
|
|
61
|
+
});
|
|
62
|
+
expect(result).toEqual({
|
|
63
|
+
caller: (0, genThread_1.genThread)({ role: 'caller', target: 'src/main.ts' }),
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
(0, test_fns_1.when)('called with argv: { ask: "missing target" }', () => {
|
|
68
|
+
(0, test_fns_1.then)('it should throw BadRequestError for missing target', async () => {
|
|
69
|
+
const error = await (0, test_fns_1.getError)(() => (0, getSkillThreads_1.getSkillThreads)({
|
|
70
|
+
getter,
|
|
71
|
+
from: { lookup: { argv: { ask: 'missing target' } } },
|
|
72
|
+
}));
|
|
73
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
(0, test_fns_1.when)('called with argv: { target: "src/x.ts" } (missing ask)', () => {
|
|
77
|
+
(0, test_fns_1.then)('it should throw BadRequestError for missing ask', async () => {
|
|
78
|
+
const error = await (0, test_fns_1.getError)(() => (0, getSkillThreads_1.getSkillThreads)({
|
|
79
|
+
getter,
|
|
80
|
+
from: { lookup: { argv: { target: 'src/x.ts' } } },
|
|
81
|
+
}));
|
|
82
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
83
|
+
expect(error.message).toMatch(/missing.*ask/i);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
(0, test_fns_1.given)('a rejecting getter that fails all assess checks', () => {
|
|
88
|
+
const getter = getterExample.clone({
|
|
89
|
+
assess: (() => false),
|
|
90
|
+
});
|
|
91
|
+
(0, test_fns_1.when)('called with argv: { target: "src/any.ts", ask: "still fails" }', () => {
|
|
92
|
+
(0, test_fns_1.then)('it should throw UnexpectedCodePathError', async () => {
|
|
93
|
+
const error = await (0, test_fns_1.getError)(() => (0, getSkillThreads_1.getSkillThreads)({
|
|
94
|
+
getter,
|
|
95
|
+
from: {
|
|
96
|
+
lookup: {
|
|
97
|
+
argv: { target: 'src/any.ts', ask: 'still fails' },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
}));
|
|
101
|
+
expect(error).toBeInstanceOf(helpful_errors_1.UnexpectedCodePathError);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
(0, test_fns_1.when)('called with passin: { target: "src/any.ts", ask: "bad input" }', () => {
|
|
105
|
+
(0, test_fns_1.then)('it should throw BadRequestError', async () => {
|
|
106
|
+
const error = await (0, test_fns_1.getError)(() => (0, getSkillThreads_1.getSkillThreads)({
|
|
107
|
+
getter,
|
|
108
|
+
from: { passin: { target: 'src/any.ts', ask: 'bad input' } },
|
|
109
|
+
}));
|
|
110
|
+
expect(error).toBeInstanceOf(helpful_errors_1.BadRequestError);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=getSkillThread.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSkillThread.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/getSkillThread.test.ts"],"names":[],"mappings":";;AAAA,mDAA0E;AAC1E,uCAAuD;AAGvD,gFAAiF;AACjF,mDAAgD;AAChD,uDAAoD;AAEpD,MAAM,aAAa,GAAG,2CAAsB,CAAC,KAAK,CAKhD;IACA,MAAM,EAAE;QACN,MAAM,EAAE;YACN,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,QAAQ;SACf;KACF;IACD,MAAM,EAAE,CAAC,KAAU,EAA4C,EAAE,CAC/D,OAAO,KAAK,EAAE,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE,GAAG,KAAK,QAAQ;IACrE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvB,MAAM,EAAE,IAAA,qBAAS,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;KAC5D,CAAC;CACH,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAA,gBAAK,EAAC,4CAA4C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;QAErC,IAAA,eAAI,EACF,iEAAiE,EACjE,GAAG,EAAE;YACH,IAAA,eAAI,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC7D,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC;oBACnC,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;iBAC9D,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,MAAM,EAAE,IAAA,qBAAS,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,IAAA,eAAI,EAAC,mCAAmC,EAAE,GAAG,EAAE;YAC7C,IAAA,eAAI,EAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,IAAA,iCAAe,EAAC;oBACd,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAS,EAAE;iBACvC,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,gCAAe,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,4DAA4D,EAAE,GAAG,EAAE;YACtE,IAAA,eAAI,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC7D,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC;oBACnC,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;iBACrE,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,MAAM,EAAE,IAAA,qBAAS,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;iBAC7D,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,yDAAyD,EAAE,GAAG,EAAE;YACnE,IAAA,eAAI,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC7D,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC;oBACnC,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;iBAClE,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,MAAM,EAAE,IAAA,qBAAS,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;iBAC7D,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,6CAA6C,EAAE,GAAG,EAAE;YACvD,IAAA,eAAI,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,IAAA,iCAAe,EAAC;oBACd,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE;iBACtD,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,gCAAe,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,eAAI,EAAC,wDAAwD,EAAE,GAAG,EAAE;YAClE,IAAA,eAAI,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBACjE,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,IAAA,iCAAe,EAAC;oBACd,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;iBACnD,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,gCAAe,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,gBAAK,EAAC,iDAAiD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;YACjC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAQ;SAC7B,CAAC,CAAC;QAEH,IAAA,eAAI,EACF,gEAAgE,EAChE,GAAG,EAAE;YACH,IAAA,eAAI,EAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,IAAA,iCAAe,EAAC;oBACd,MAAM;oBACN,IAAI,EAAE;wBACJ,MAAM,EAAE;4BACN,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE;yBACnD;qBACF;iBACF,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,wCAAuB,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,IAAA,eAAI,EACF,gEAAgE,EAChE,GAAG,EAAE;YACH,IAAA,eAAI,EAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAChC,IAAA,iCAAe,EAAC;oBACd,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;iBAC7D,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,gCAAe,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PickOne } from 'type-fns';
|
|
2
|
+
import { Threads } from '../../domain/objects';
|
|
3
|
+
import { RoleSkillThreadsGetter } from '../../domain/objects/RoleSkillArgGetter';
|
|
4
|
+
/**
|
|
5
|
+
* .what = hydrates skill threads using either passin or lookup mode
|
|
6
|
+
* .why = enables flexible runtime use from CLI or direct invocation
|
|
7
|
+
*/
|
|
8
|
+
export declare const getSkillThreads: <TOutput extends Threads<any>, TVars extends Record<string, any>>(input: {
|
|
9
|
+
getter: RoleSkillThreadsGetter<TOutput, TVars>;
|
|
10
|
+
from: PickOne<{
|
|
11
|
+
passin: TVars;
|
|
12
|
+
lookup: {
|
|
13
|
+
argv: Record<string, string>;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
}) => Promise<TOutput>;
|