rhachet 1.7.2 → 1.9.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.
Files changed (32) hide show
  1. package/dist/contract/cli/invoke.js +7 -1
  2. package/dist/contract/cli/invoke.js.map +1 -1
  3. package/dist/contract/cli/invokeAsk.d.ts +2 -0
  4. package/dist/contract/cli/invokeAsk.integration.test.js +1 -0
  5. package/dist/contract/cli/invokeAsk.integration.test.js.map +1 -1
  6. package/dist/contract/cli/invokeAsk.js +7 -2
  7. package/dist/contract/cli/invokeAsk.js.map +1 -1
  8. package/dist/contract/cli/invokeChoose.d.ts +8 -0
  9. package/dist/contract/cli/invokeChoose.integration.test.d.ts +1 -0
  10. package/dist/contract/cli/invokeChoose.integration.test.js +111 -0
  11. package/dist/contract/cli/invokeChoose.integration.test.js.map +1 -0
  12. package/dist/contract/cli/invokeChoose.js +111 -0
  13. package/dist/contract/cli/invokeChoose.js.map +1 -0
  14. package/dist/domain/objects/InvokeHooks.d.ts +10 -0
  15. package/dist/domain/objects/InvokeHooks.js +3 -0
  16. package/dist/domain/objects/InvokeHooks.js.map +1 -0
  17. package/dist/domain/objects/index.d.ts +1 -0
  18. package/dist/domain/objects/index.js +1 -0
  19. package/dist/domain/objects/index.js.map +1 -1
  20. package/dist/logic/invoke/getInvokeHooksByOpts.d.ts +13 -0
  21. package/dist/logic/invoke/getInvokeHooksByOpts.js +40 -0
  22. package/dist/logic/invoke/getInvokeHooksByOpts.js.map +1 -0
  23. package/dist/logic/invoke/getPeerQualifiersOfOutputChoice.d.ts +23 -0
  24. package/dist/logic/invoke/getPeerQualifiersOfOutputChoice.js +52 -0
  25. package/dist/logic/invoke/getPeerQualifiersOfOutputChoice.js.map +1 -0
  26. package/dist/logic/invoke/getPeerQualifiersOfOutputChoice.test.d.ts +1 -0
  27. package/dist/logic/invoke/getPeerQualifiersOfOutputChoice.test.js +77 -0
  28. package/dist/logic/invoke/getPeerQualifiersOfOutputChoice.test.js.map +1 -0
  29. package/dist/logic/invoke/hooks/onInvokeAskInput.d.ts +15 -0
  30. package/dist/logic/invoke/hooks/onInvokeAskInput.js +16 -0
  31. package/dist/logic/invoke/hooks/onInvokeAskInput.js.map +1 -0
  32. package/package.json +2 -1
@@ -6,8 +6,10 @@ const helpful_errors_1 = require("helpful-errors");
6
6
  const node_path_1 = require("node:path");
7
7
  const rhachet_artifact_git_1 = require("rhachet-artifact-git");
8
8
  const assureUniqueRoles_1 = require("../../logic/invoke/assureUniqueRoles");
9
+ const getInvokeHooksByOpts_1 = require("../../logic/invoke/getInvokeHooksByOpts");
9
10
  const getRegistriesByOpts_1 = require("../../logic/invoke/getRegistriesByOpts");
10
11
  const invokeAsk_1 = require("./invokeAsk");
12
+ const invokeChoose_1 = require("./invokeChoose");
11
13
  const invokeList_1 = require("./invokeList");
12
14
  const invokeReadme_1 = require("./invokeReadme");
13
15
  /**
@@ -32,6 +34,9 @@ const invoke = async (input) => {
32
34
  const registries = await (0, getRegistriesByOpts_1.getRegistriesByOpts)({
33
35
  opts: { config: configPath },
34
36
  });
37
+ const hooks = await (0, getInvokeHooksByOpts_1.getInvokeHooksByOpts)({
38
+ opts: { config: configPath }, // todo: maybe, getConfigByOpts ? returns both?
39
+ });
35
40
  // failfast on duplicate roles // todo: update commands to allow registry based disambiguation
36
41
  await (0, assureUniqueRoles_1.assureUniqueRoles)(registries);
37
42
  // declare the cli program
@@ -47,7 +52,8 @@ const invoke = async (input) => {
47
52
  .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
48
53
  (0, invokeReadme_1.invokeReadme)({ program, registries });
49
54
  (0, invokeList_1.invokeList)({ program, registries });
50
- (0, invokeAsk_1.invokeAsk)({ program, config: { path: configPath }, registries });
55
+ (0, invokeChoose_1.invokeChoose)({ program });
56
+ (0, invokeAsk_1.invokeAsk)({ program, config: { path: configPath }, registries, hooks });
51
57
  // invoke it
52
58
  await program.parseAsync(input.args, { from: 'user' }).catch((error) => {
53
59
  if (error instanceof helpful_errors_1.BadRequestError) {
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/contract/cli/invoke.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Command } from 'commander';
2
+ import { InvokeHooks } from '../../domain/objects/InvokeHooks';
2
3
  import { RoleRegistry } from '../../domain/objects/RoleRegistry';
3
4
  /**
4
5
  * .what = adds the "ask" command to the CLI
@@ -10,4 +11,5 @@ export declare const invokeAsk: ({ program, registries, ...input }: {
10
11
  path: string;
11
12
  };
12
13
  registries: RoleRegistry[];
14
+ hooks: null | InvokeHooks;
13
15
  }) => void;
@@ -18,6 +18,7 @@ describe('invokeAsk (integration)', () => {
18
18
  program,
19
19
  config: { path: configPath },
20
20
  registries: [example_echoRegistry_1.EXAMPLE_REGISTRY],
21
+ hooks: null,
21
22
  });
22
23
  (0, test_fns_1.when)('invoking a valid echo skill with ask input', () => {
23
24
  (0, test_fns_1.then)('it should execute the skill successfully', async () => {
@@ -1 +1 @@
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"}
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;YAC9B,KAAK,EAAE,IAAI;SACZ,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,6 +3,7 @@ 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 onInvokeAskInput_1 = require("../../logic/invoke/hooks/onInvokeAskInput");
6
7
  const performInCurrentThread_1 = require("../../logic/invoke/performInCurrentThread");
7
8
  const performInIsolatedThreads_1 = require("../../logic/invoke/performInIsolatedThreads");
8
9
  /**
@@ -48,11 +49,15 @@ const invokeAsk = ({ program, registries, ...input }) => {
48
49
  helpful_errors_1.UnexpectedCodePathError.throw('ask was not declared', { opts }),
49
50
  config: input.config.path, // required for isolated child threads when used with attempts
50
51
  };
52
+ // apply the onInvokeAskHooks
53
+ const argvWithHooks = input.hooks
54
+ ? (0, onInvokeAskInput_1.onInvokeAskInput)({ opts: argvWithAsk, hooks: input.hooks })
55
+ : argvWithAsk;
51
56
  // if attempts were requested, perform the skill in isolated threads per attempt
52
57
  if (opts.attempts)
53
- return await (0, performInIsolatedThreads_1.performInIsolatedThreads)({ opts: argvWithAsk });
58
+ return await (0, performInIsolatedThreads_1.performInIsolatedThreads)({ opts: argvWithHooks });
54
59
  // otherwise, perform in the main thread by default
55
- return await (0, performInCurrentThread_1.performInCurrentThread)({ opts: argvWithAsk, registries });
60
+ return await (0, performInCurrentThread_1.performInCurrentThread)({ opts: argvWithHooks, registries });
56
61
  });
57
62
  };
58
63
  exports.invokeAsk = invokeAsk;
@@ -1 +1 @@
1
- {"version":3,"file":"invokeAsk.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeAsk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invokeAsk.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeAsk.ts"],"names":[],"mappings":";;;AACA,mDAA0E;AAI1E,sEAAmE;AACnE,gFAA6E;AAC7E,sFAAmF;AACnF,0FAAuF;AAGvF;;;GAGG;AACI,MAAM,SAAS,GAAG,CAAC,EACxB,OAAO,EACP,UAAU,EACV,GAAG,KAAK,EAMT,EAAQ,EAAE;IACT,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,KAAK,CAAC;SACd,cAAc,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SACrD,cAAc,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC;SACrC,MAAM,CACL,kBAAkB,EAClB,sDAAsD,CACvD;SACA,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;SACtE,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE9B,oDAAoD;IACpD,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAEhC,MAAM,IAAI,GAAG,IAAA,+BAAc,EAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK;YACR,gCAAe,CAAC,KAAK,CACnB,mBAAmB,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,IAAI,GAAG,EAC1D;gBACE,IAAI;gBACJ,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aAClE,CACF,CAAC;QAEJ,8BAA8B;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC;YACrE,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,GAAG,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;QAED,2CAA2C;QAC3C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAA4B,EAAE,EAAE;QACvD,gCAAgC;QAChC,MAAM,WAAW,GAAgD;YAC/D,GAAG,IAAI;YACP,GAAG,EACD,IAAI,CAAC,GAAG;gBACR,wCAAuB,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC;YACjE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,8DAA8D;SAC1F,CAAC;QAEF,6BAA6B;QAC7B,MAAM,aAAa,GACjB,KAAK,CAAC,KAAK;YACT,CAAC,CAAC,IAAA,mCAAgB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7D,CAAC,CAAC,WAAW,CAAC;QAElB,gFAAgF;QAChF,IAAI,IAAI,CAAC,QAAQ;YACf,OAAO,MAAM,IAAA,mDAAwB,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAEjE,mDAAmD;QACnD,OAAO,MAAM,IAAA,+CAAsB,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA1EW,QAAA,SAAS,aA0EpB"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * .what = adds the "choose" command to the CLI
4
+ * .why = allows users to choose a specific attempt file, archive its peer files, and clean up unrelated ones
5
+ */
6
+ export declare const invokeChoose: ({ program }: {
7
+ program: Command;
8
+ }) => void;
@@ -0,0 +1,111 @@
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
+ const commander_1 = require("commander");
27
+ const promises_1 = require("node:fs/promises");
28
+ const path = __importStar(require("node:path"));
29
+ const test_fns_1 = require("test-fns");
30
+ const invokeChoose_1 = require("./invokeChoose");
31
+ // tiny fs helpers
32
+ const exists = async (p) => (0, promises_1.stat)(p)
33
+ .then(() => true)
34
+ .catch(() => false);
35
+ const read = async (p) => (await (0, promises_1.readFile)(p, 'utf8')).trim();
36
+ describe('invokeChoose (integration)', () => {
37
+ (0, test_fns_1.given)('a fixture directory with peer files', () => {
38
+ const fixtureRoot = path.resolve(__dirname + '/.temp/invokeChoose/');
39
+ const peerPrefix = 'provider.scene_6.loyalty_build.v1i2.[stories]';
40
+ const choiceDir = path.join(fixtureRoot);
41
+ const archiveDir = path.join(fixtureRoot, '.archive');
42
+ const peerNames = [
43
+ `${peerPrefix}._.md`,
44
+ `${peerPrefix}.v1._.md`,
45
+ `${peerPrefix}.v1.md`,
46
+ `${peerPrefix}.v1.i1.md`,
47
+ `${peerPrefix}.v1.i2.md`,
48
+ `${peerPrefix}.v1.i3.md`,
49
+ `${peerPrefix}.choice.v1.i3.md`,
50
+ `${peerPrefix}.v1.src`,
51
+ ];
52
+ const peerChosen = peerNames[3]; // lets say we're choosing this one
53
+ const unrelated = 'random.txt'; // lets include a non peer too
54
+ const prepareTheScene = async () => {
55
+ // refresh the fixture
56
+ await (0, promises_1.rm)(fixtureRoot, { recursive: true, force: true });
57
+ await (0, promises_1.mkdir)(choiceDir, { recursive: true });
58
+ await (0, promises_1.mkdir)(archiveDir, { recursive: true });
59
+ // write peers with recognizable contents
60
+ await Promise.all(peerNames.map((name, index) => (0, promises_1.writeFile)(path.join(choiceDir, name), `content-${index}`)));
61
+ // an unrelated file that should remain untouched
62
+ await (0, promises_1.writeFile)(path.join(choiceDir, unrelated), 'unrelated-content');
63
+ console.log('🧹 fixture prepared', fixtureRoot);
64
+ };
65
+ beforeAll(async () => {
66
+ await prepareTheScene();
67
+ });
68
+ (0, test_fns_1.when)('invoking choose with a valid chosen attempt', () => {
69
+ // register command
70
+ const program = new commander_1.Command();
71
+ (0, invokeChoose_1.invokeChoose)({ program });
72
+ // declare the choice
73
+ const choicePath = path.join(choiceDir, peerChosen);
74
+ (0, test_fns_1.then)('it should succeed', async () => {
75
+ await program.parseAsync(['choose', '--choice', choicePath, '--archive', '@choice/.archive'], { from: 'user' });
76
+ });
77
+ (0, test_fns_1.then)('it should archive the peers', async () => {
78
+ for (const name of peerNames) {
79
+ const archivedPath = path.join(archiveDir, path.basename(name));
80
+ expect(await exists(archivedPath)).toBe(true);
81
+ }
82
+ });
83
+ (0, test_fns_1.then)('it should archive the peer choice with label', async () => {
84
+ // it should have been archived directly already
85
+ const choiceArchived = path.join(archiveDir, path.basename(peerChosen));
86
+ expect(await exists(choiceArchived)).toBe(true);
87
+ // it should ALSO have been archived with .choice label
88
+ const choiceArchivedLabeled = path.join(archiveDir, path
89
+ .basename(peerChosen)
90
+ .replace(`${peerPrefix}`, `${peerPrefix}.choice`));
91
+ expect(await exists(choiceArchivedLabeled)).toBe(true);
92
+ expect(await read(choiceArchivedLabeled)).toBe(await read(path.join(choiceDir, peerChosen)));
93
+ });
94
+ (0, test_fns_1.then)('it should keep only the .src and choice in the choice directory', async () => {
95
+ // chosen remains in place
96
+ expect(await exists(choicePath)).toBe(true);
97
+ // .src peers remain in place
98
+ expect(await exists(path.join(choiceDir, `${peerPrefix}.v1.src`))).toBe(true);
99
+ // non-source, non-chosen peers should be deleted from workdir
100
+ const shouldBeDeleted = peerNames.filter((p) => !p.endsWith('.src') && p !== peerChosen);
101
+ for (const name of shouldBeDeleted) {
102
+ expect(await exists(path.join(choiceDir, name))).toBe(false);
103
+ }
104
+ // unrelated file should remain untouched
105
+ expect(await exists(path.join(choiceDir, unrelated))).toBe(true);
106
+ expect(await read(path.join(choiceDir, unrelated))).toBe('unrelated-content');
107
+ });
108
+ });
109
+ });
110
+ });
111
+ //# sourceMappingURL=invokeChoose.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invokeChoose.integration.test.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeChoose.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.invokeChoose = void 0;
30
+ const fast_glob_1 = __importDefault(require("fast-glob"));
31
+ const fs = __importStar(require("fs"));
32
+ const helpful_errors_1 = require("helpful-errors");
33
+ const path = __importStar(require("path"));
34
+ const rhachet_artifact_git_1 = require("rhachet-artifact-git");
35
+ const getPeerQualifiersOfOutputChoice_1 = require("../../logic/invoke/getPeerQualifiersOfOutputChoice");
36
+ /**
37
+ * .what = adds the "choose" command to the CLI
38
+ * .why = allows users to choose a specific attempt file, archive its peer files, and clean up unrelated ones
39
+ */
40
+ const invokeChoose = ({ program }) => {
41
+ program
42
+ .command('choose')
43
+ .requiredOption('--choice <path>', 'path to chosen attempt file (relative)')
44
+ .requiredOption('--archive <dir>', 'directory where peers will be archived')
45
+ .description('select one attempt file, archive its peer files, and remove unrelated ones')
46
+ .action(async (opts) => {
47
+ // standardize the path declarations
48
+ const choicePath = path.resolve(opts.choice);
49
+ const choiceFile = path.basename(choicePath);
50
+ const choiceDir = path.dirname(choicePath);
51
+ // resolve archive dir:
52
+ // - if starts with "@choice/", make it relative to choiceDir
53
+ // - otherwise, resolve relative to cwd as normal
54
+ const archiveDir = opts.archive.startsWith('@choice/')
55
+ ? path.join(choiceDir, opts.archive.replace(/^@choice\//, ''))
56
+ : path.resolve(opts.archive);
57
+ // verify choice exists and is valid
58
+ if (!fs.existsSync(choicePath))
59
+ helpful_errors_1.BadRequestError.throw(`choice file not found: ${choicePath}`, { opts });
60
+ if (choiceFile.endsWith('.src'))
61
+ helpful_errors_1.BadRequestError.throw(`--choice cannot be a .src file`, { opts });
62
+ // grab the peer qualifiers
63
+ const peerQualifier = (0, getPeerQualifiersOfOutputChoice_1.getPeerQualifiersOfOutputChoice)(choiceFile);
64
+ if (!peerQualifier.prefix)
65
+ helpful_errors_1.BadRequestError.throw(`unrecognized file naming pattern: ${choiceFile}`);
66
+ // build glob patterns
67
+ const globPeersByExt = path.join(choiceDir, `${peerQualifier.prefix}*.${peerQualifier.extension}`);
68
+ const globPeersBySrc = path.join(choiceDir, `${peerQualifier.prefix}*.src`);
69
+ // collect all peer paths
70
+ const peerPaths = await (0, fast_glob_1.default)([globPeersByExt, globPeersBySrc], {
71
+ cwd: choiceDir,
72
+ onlyFiles: true,
73
+ dot: false,
74
+ absolute: true,
75
+ });
76
+ // copy peer files to archive dir; remove the non.source and the non.chosen
77
+ await Promise.all(peerPaths.map(async (peerPath) => {
78
+ // declare the .into and .from archive files
79
+ const peerDetected = (0, rhachet_artifact_git_1.genArtifactGitFile)({ uri: peerPath });
80
+ const peerArchived = (0, rhachet_artifact_git_1.genArtifactGitFile)({
81
+ uri: path.join(archiveDir, path.basename(peerPath)),
82
+ });
83
+ // grab the detected content
84
+ const peerContent = (await peerDetected.get())?.content ??
85
+ helpful_errors_1.UnexpectedCodePathError.throw('how could a peer detected by prefix not have contents?', {
86
+ path,
87
+ peerQualifier,
88
+ });
89
+ // move into archive
90
+ await peerArchived.set({
91
+ content: peerContent,
92
+ });
93
+ // label the choice file and archive that too
94
+ const isChosen = peerPath.endsWith(opts.choice); // equal to choice (overlap by suffix)
95
+ if (isChosen) {
96
+ const peerArchivedAsChoice = (0, rhachet_artifact_git_1.genArtifactGitFile)({
97
+ uri: peerArchived.ref.uri.replace(peerQualifier.prefix, peerQualifier.prefix + '.choice'),
98
+ });
99
+ await peerArchivedAsChoice.set({ content: peerContent });
100
+ }
101
+ // drop if non source and non chosen .from files
102
+ const isSource = peerPath.endsWith('.src');
103
+ if (!isSource && !isChosen)
104
+ await peerDetected.del();
105
+ }));
106
+ console.log(``);
107
+ console.log(`🏆 choice assigned (${peerPaths.length} archived)`);
108
+ });
109
+ };
110
+ exports.invokeChoose = invokeChoose;
111
+ //# sourceMappingURL=invokeChoose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invokeChoose.js","sourceRoot":"","sources":["../../../src/contract/cli/invokeChoose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { InvokeOpts } from '.';
2
+ export interface InvokeHooks {
3
+ onInvokeAskInput: Array<(input: InvokeOpts<{
4
+ ask: string;
5
+ config: string;
6
+ }>) => InvokeOpts<{
7
+ ask: string;
8
+ config: string;
9
+ }>>;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=InvokeHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvokeHooks.js","sourceRoot":"","sources":["../../../src/domain/objects/InvokeHooks.ts"],"names":[],"mappings":""}
@@ -17,3 +17,4 @@ export * from './RoleSkillArgGetter';
17
17
  export * from './RoleTrait';
18
18
  export * from './Template';
19
19
  export * from './InvokeOpts';
20
+ export * from './InvokeHooks';
@@ -35,4 +35,5 @@ __exportStar(require("./RoleSkillArgGetter"), exports);
35
35
  __exportStar(require("./RoleTrait"), exports);
36
36
  __exportStar(require("./Template"), exports);
37
37
  __exportStar(require("./InvokeOpts"), exports);
38
+ __exportStar(require("./InvokeHooks"), exports);
38
39
  //# 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;AAE5B,yCAAuB;AACvB,gDAA8B;AAC9B,iDAA+B;AAC/B,8CAA4B;AAC5B,uDAAqC;AACrC,8CAA4B;AAE5B,6CAA2B;AAC3B,+CAA6B"}
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;AAC3B,+CAA6B;AAC7B,gDAA8B"}
@@ -0,0 +1,13 @@
1
+ import { InvokeHooks } from '../../domain/objects/InvokeHooks';
2
+ import { InvokeOpts } from '../../domain/objects/InvokeOpts';
3
+ /**
4
+ * .what = get invoke hooks from the invocation options declared
5
+ * .how =
6
+ * - lookup the config based on the options
7
+ * - grab the hooks from the config
8
+ */
9
+ export declare const getInvokeHooksByOpts: (input: {
10
+ opts: InvokeOpts<{
11
+ config: string;
12
+ }>;
13
+ }) => Promise<InvokeHooks | null>;
@@ -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.getInvokeHooksByOpts = void 0;
27
+ /**
28
+ * .what = get invoke hooks from the invocation options declared
29
+ * .how =
30
+ * - lookup the config based on the options
31
+ * - grab the hooks from the config
32
+ */
33
+ const getInvokeHooksByOpts = 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.getInvokeHooks?.()) ?? null;
38
+ };
39
+ exports.getInvokeHooksByOpts = getInvokeHooksByOpts;
40
+ //# sourceMappingURL=getInvokeHooksByOpts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getInvokeHooksByOpts.js","sourceRoot":"","sources":["../../../src/logic/invoke/getInvokeHooksByOpts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,KAAK,EAAE,KAE1C,EAA+B,EAAE;IAChC,oBAAoB;IACpB,MAAM,MAAM,GAAoD,yBAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,uCAClB,CAAC;IAEF,sBAAsB;IACtB,OAAO,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC,CAAC;AAVW,QAAA,oBAAoB,wBAU/B"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * .what = extracts the peer prefix and extension from a chosen file
3
+ * .why = used to identify all peer files sharing the same base name
4
+ *
5
+ * supports trailing qualifier tokens (zero or more) before the final extension:
6
+ * - .v{number}
7
+ * - .i{number}
8
+ * - ._
9
+ * - .{word} (e.g., .choice)
10
+ *
11
+ * examples (prefix ► extension):
12
+ * - foo.[stories]._.md ► foo.[stories] ► md
13
+ * - foo.[stories].v1._.md ► foo.[stories] ► md
14
+ * - foo.[stories].v1.i3.md ► foo.[stories] ► md
15
+ * - foo.[stories].choice.v1.i3.md ► foo.[stories] ► md
16
+ * - foo.[stories].src ► foo.[stories] ► src
17
+ * - foo.[stories].v1.src ► foo.[stories] ► src
18
+ * - foo.[notes].i2.txt ► foo.[notes] ► txt
19
+ */
20
+ export declare const getPeerQualifiersOfOutputChoice: (choice: string) => {
21
+ prefix: string;
22
+ extension: string;
23
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPeerQualifiersOfOutputChoice = void 0;
4
+ const helpful_errors_1 = require("helpful-errors");
5
+ /**
6
+ * .what = extracts the peer prefix and extension from a chosen file
7
+ * .why = used to identify all peer files sharing the same base name
8
+ *
9
+ * supports trailing qualifier tokens (zero or more) before the final extension:
10
+ * - .v{number}
11
+ * - .i{number}
12
+ * - ._
13
+ * - .{word} (e.g., .choice)
14
+ *
15
+ * examples (prefix ► extension):
16
+ * - foo.[stories]._.md ► foo.[stories] ► md
17
+ * - foo.[stories].v1._.md ► foo.[stories] ► md
18
+ * - foo.[stories].v1.i3.md ► foo.[stories] ► md
19
+ * - foo.[stories].choice.v1.i3.md ► foo.[stories] ► md
20
+ * - foo.[stories].src ► foo.[stories] ► src
21
+ * - foo.[stories].v1.src ► foo.[stories] ► src
22
+ * - foo.[notes].i2.txt ► foo.[notes] ► txt
23
+ */
24
+ const getPeerQualifiersOfOutputChoice = (choice) => {
25
+ // grab the last dotted segment as the extension
26
+ const extMatch = choice.match(/^(.+)\.([A-Za-z0-9]+)$/);
27
+ if (!extMatch)
28
+ helpful_errors_1.BadRequestError.throw(`unrecognized file naming pattern`, { choice });
29
+ // instantiate a mutable base
30
+ let base = extMatch[1] ??
31
+ helpful_errors_1.UnexpectedCodePathError.throw('how is there no base?', {
32
+ extMatch,
33
+ choice,
34
+ });
35
+ const extension = extMatch[2];
36
+ // strip trailing qualifier tokens like .v1, .i3, ._, .choice (in that order, repeatedly)
37
+ const QUALIFIER_RE = /\.(?:v\d+|i\d+|_|[a-z][a-z0-9_-]*)$/i;
38
+ while (QUALIFIER_RE.test(base)) {
39
+ base = base.replace(QUALIFIER_RE, '');
40
+ }
41
+ const prefix = base ??
42
+ helpful_errors_1.BadRequestError.throw('could not extract prefix from output choice', {
43
+ choice,
44
+ });
45
+ const ext = extension ??
46
+ helpful_errors_1.BadRequestError.throw('could not extract extension from output choice', {
47
+ choice,
48
+ });
49
+ return { prefix, extension: ext };
50
+ };
51
+ exports.getPeerQualifiersOfOutputChoice = getPeerQualifiersOfOutputChoice;
52
+ //# sourceMappingURL=getPeerQualifiersOfOutputChoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPeerQualifiersOfOutputChoice.js","sourceRoot":"","sources":["../../../src/logic/invoke/getPeerQualifiersOfOutputChoice.ts"],"names":[],"mappings":";;;AAAA,mDAA0E;AAE1E;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,+BAA+B,GAAG,CAC7C,MAAc,EACyB,EAAE;IACzC,gDAAgD;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QACX,gCAAe,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAExE,6BAA6B;IAC7B,IAAI,IAAI,GACN,QAAQ,CAAC,CAAC,CAAC;QACX,wCAAuB,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACrD,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9B,yFAAyF;IACzF,MAAM,YAAY,GAAG,sCAAsC,CAAC;IAC5D,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GACV,IAAI;QACJ,gCAAe,CAAC,KAAK,CAAC,6CAA6C,EAAE;YACnE,MAAM;SACP,CAAC,CAAC;IAEL,MAAM,GAAG,GACP,SAAS;QACT,gCAAe,CAAC,KAAK,CAAC,gDAAgD,EAAE;YACtE,MAAM;SACP,CAAC,CAAC;IAEL,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACpC,CAAC,CAAC;AApCW,QAAA,+BAA+B,mCAoC1C"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const helpful_errors_1 = require("helpful-errors");
4
+ const getPeerQualifiersOfOutputChoice_1 = require("./getPeerQualifiersOfOutputChoice");
5
+ const validCases = [
6
+ {
7
+ peers: [
8
+ 'provider.scene_6.loyalty_build.v1i2.[stories]._.md',
9
+ 'provider.scene_6.loyalty_build.v1i2.[stories].v1._.md',
10
+ 'provider.scene_6.loyalty_build.v1i2.[stories].v1.md',
11
+ 'provider.scene_6.loyalty_build.v1i2.[stories].v1.i1.md',
12
+ 'provider.scene_6.loyalty_build.v1i2.[stories].v1.i2.md',
13
+ 'provider.scene_6.loyalty_build.v1i2.[stories].v1.i3.md',
14
+ 'provider.scene_6.loyalty_build.v1i2.[stories].choice.v1.i3.md',
15
+ 'provider.scene_6.loyalty_build.v1i2.[stories].choice.i5.md',
16
+ ],
17
+ output: {
18
+ prefix: 'provider.scene_6.loyalty_build.v1i2.[stories]',
19
+ extension: 'md',
20
+ },
21
+ },
22
+ {
23
+ peers: [
24
+ 'provider.scene_6.loyalty_build.v1i2.[stories].src',
25
+ 'provider.scene_6.loyalty_build.v1i2.[stories].v1.src',
26
+ ],
27
+ output: {
28
+ prefix: 'provider.scene_6.loyalty_build.v1i2.[stories]',
29
+ extension: 'src',
30
+ },
31
+ },
32
+ {
33
+ peers: [
34
+ 'provider.scene_6.loyalty_build.v2i5.[notes].i1.txt',
35
+ 'provider.scene_6.loyalty_build.v2i5.[notes].i2.txt',
36
+ ],
37
+ output: {
38
+ prefix: 'provider.scene_6.loyalty_build.v2i5.[notes]',
39
+ extension: 'txt',
40
+ },
41
+ },
42
+ {
43
+ peers: [
44
+ 'provider.scene_6.loyalty_build.v1i0.[draft]._.md',
45
+ 'provider.scene_6.loyalty_build.v1i0.[draft].i1.md',
46
+ ],
47
+ output: {
48
+ prefix: 'provider.scene_6.loyalty_build.v1i0.[draft]',
49
+ extension: 'md',
50
+ },
51
+ },
52
+ ];
53
+ describe('getPeerQualifiersOfOutputChoice', () => {
54
+ validCases.forEach(({ peers, output }) => {
55
+ describe(`peers ${output.prefix}`, () => {
56
+ peers.forEach((choice) => {
57
+ test(`returns correct prefix and extension for choice "${choice}"`, () => {
58
+ expect((0, getPeerQualifiersOfOutputChoice_1.getPeerQualifiersOfOutputChoice)(choice)).toEqual(output);
59
+ });
60
+ });
61
+ });
62
+ });
63
+ const invalidCases = [
64
+ // 'provider.scene_6.loyalty_build.v1i2.[stories]', // no extension
65
+ // 'provider.scene_6.loyalty_build.v1i2.[stories]', // no extension
66
+ // 'just_something_random', // completely malformed
67
+ // 'file.without.any.structure', // another malformed
68
+ ];
69
+ describe('invalid input cases', () => {
70
+ invalidCases.forEach((input) => {
71
+ test(`throws BadRequestError for "${input}"`, () => {
72
+ expect(() => (0, getPeerQualifiersOfOutputChoice_1.getPeerQualifiersOfOutputChoice)(input)).toThrow(helpful_errors_1.BadRequestError);
73
+ });
74
+ });
75
+ });
76
+ });
77
+ //# sourceMappingURL=getPeerQualifiersOfOutputChoice.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPeerQualifiersOfOutputChoice.test.js","sourceRoot":"","sources":["../../../src/logic/invoke/getPeerQualifiersOfOutputChoice.test.ts"],"names":[],"mappings":";;AAAA,mDAAiD;AAEjD,uFAAoF;AAEpF,MAAM,UAAU,GAGV;IACJ;QACE,KAAK,EAAE;YACL,oDAAoD;YACpD,uDAAuD;YACvD,qDAAqD;YACrD,wDAAwD;YACxD,wDAAwD;YACxD,wDAAwD;YACxD,+DAA+D;YAC/D,4DAA4D;SAC7D;QACD,MAAM,EAAE;YACN,MAAM,EAAE,+CAA+C;YACvD,SAAS,EAAE,IAAI;SAChB;KACF;IACD;QACE,KAAK,EAAE;YACL,mDAAmD;YACnD,sDAAsD;SACvD;QACD,MAAM,EAAE;YACN,MAAM,EAAE,+CAA+C;YACvD,SAAS,EAAE,KAAK;SACjB;KACF;IACD;QACE,KAAK,EAAE;YACL,oDAAoD;YACpD,oDAAoD;SACrD;QACD,MAAM,EAAE;YACN,MAAM,EAAE,6CAA6C;YACrD,SAAS,EAAE,KAAK;SACjB;KACF;IACD;QACE,KAAK,EAAE;YACL,kDAAkD;YAClD,mDAAmD;SACpD;QACD,MAAM,EAAE;YACN,MAAM,EAAE,6CAA6C;YACrD,SAAS,EAAE,IAAI;SAChB;KACF;CACF,CAAC;AAEF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QACvC,QAAQ,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE;YACtC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvB,IAAI,CAAC,oDAAoD,MAAM,GAAG,EAAE,GAAG,EAAE;oBACvE,MAAM,CAAC,IAAA,iEAA+B,EAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAa;IAC7B,mEAAmE;IACnE,mEAAmE;IACnE,mDAAmD;IACnD,qDAAqD;KACtD,CAAC;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,IAAI,CAAC,+BAA+B,KAAK,GAAG,EAAE,GAAG,EAAE;gBACjD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iEAA+B,EAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAC1D,gCAAe,CAChB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { InvokeOpts } from '../../../domain/objects';
2
+ import { InvokeHooks } from '../../../domain/objects/InvokeHooks';
3
+ /**
4
+ * .what = hooks to call onInvokeAskInput
5
+ */
6
+ export declare const onInvokeAskInput: (input: {
7
+ opts: InvokeOpts<{
8
+ ask: string;
9
+ config: string;
10
+ }>;
11
+ hooks: InvokeHooks;
12
+ }) => InvokeOpts<{
13
+ ask: string;
14
+ config: string;
15
+ }>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onInvokeAskInput = void 0;
4
+ /**
5
+ * .what = hooks to call onInvokeAskInput
6
+ */
7
+ const onInvokeAskInput = (input) => {
8
+ // call each of the opts translators, one at a time
9
+ let after = input.opts;
10
+ for (const translate of input.hooks.onInvokeAskInput)
11
+ after = translate(after);
12
+ // then return the final translation
13
+ return after;
14
+ };
15
+ exports.onInvokeAskInput = onInvokeAskInput;
16
+ //# sourceMappingURL=onInvokeAskInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onInvokeAskInput.js","sourceRoot":"","sources":["../../../../src/logic/invoke/hooks/onInvokeAskInput.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,KAGhC,EAA+C,EAAE;IAChD,mDAAmD;IACnD,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,gBAAgB;QAClD,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAE3B,oCAAoC;IACpC,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "rhachet",
3
3
  "author": "ehmpathy",
4
4
  "description": "A framework for reliable, thorough thought. Weave threads of thought via stitches.",
5
- "version": "1.7.2",
5
+ "version": "1.9.0",
6
6
  "repository": "ehmpathy/rhachet",
7
7
  "homepage": "https://github.com/ehmpathy/rhachet",
8
8
  "keywords": [
@@ -57,6 +57,7 @@
57
57
  "chalk": "4.1.2",
58
58
  "commander": "14.0.0",
59
59
  "domain-objects": "0.25.2",
60
+ "fast-glob": "3.3.3",
60
61
  "flattie": "1.1.1",
61
62
  "helpful-errors": "1.3.8",
62
63
  "openai": "5.8.2",