@loopstack/hitl 0.3.0 → 0.4.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/README.md +6 -4
  2. package/dist/documents/ask-user-confirm-document.js +1 -1
  3. package/dist/documents/ask-user-confirm-document.js.map +1 -1
  4. package/dist/documents/ask-user-confirm-document.yaml +3 -6
  5. package/dist/documents/ask-user-document.js +1 -1
  6. package/dist/documents/ask-user-document.js.map +1 -1
  7. package/dist/documents/ask-user-document.yaml +3 -6
  8. package/dist/documents/ask-user-options-document.js +1 -1
  9. package/dist/documents/ask-user-options-document.js.map +1 -1
  10. package/dist/documents/ask-user-options-document.yaml +3 -6
  11. package/dist/documents/confirm-user-document.js +1 -1
  12. package/dist/documents/confirm-user-document.js.map +1 -1
  13. package/dist/documents/confirm-user-document.yaml +13 -16
  14. package/dist/tools/ask-clarification.tool.d.ts +10 -4
  15. package/dist/tools/ask-clarification.tool.d.ts.map +1 -1
  16. package/dist/tools/ask-clarification.tool.js +17 -17
  17. package/dist/tools/ask-clarification.tool.js.map +1 -1
  18. package/dist/tools/ask-for-approval.tool.d.ts +14 -4
  19. package/dist/tools/ask-for-approval.tool.d.ts.map +1 -1
  20. package/dist/tools/ask-for-approval.tool.js +16 -16
  21. package/dist/tools/ask-for-approval.tool.js.map +1 -1
  22. package/dist/workflows/ask-user/ask-user.workflow.d.ts +21 -6
  23. package/dist/workflows/ask-user/ask-user.workflow.d.ts.map +1 -1
  24. package/dist/workflows/ask-user/ask-user.workflow.js +46 -38
  25. package/dist/workflows/ask-user/ask-user.workflow.js.map +1 -1
  26. package/dist/workflows/confirm-user/confirm-user.workflow.d.ts +11 -7
  27. package/dist/workflows/confirm-user/confirm-user.workflow.d.ts.map +1 -1
  28. package/dist/workflows/confirm-user/confirm-user.workflow.js +17 -16
  29. package/dist/workflows/confirm-user/confirm-user.workflow.js.map +1 -1
  30. package/package.json +3 -3
  31. package/dist/workflows/ask-user/ask-user.ui.yaml +0 -6
  32. package/dist/workflows/confirm-user/confirm-user.ui.yaml +0 -5
package/README.md CHANGED
@@ -35,15 +35,17 @@ export class AppModule {}
35
35
 
36
36
  ### Asking a text question as a sub-workflow
37
37
 
38
- Use `@InjectWorkflow()` to launch `AskUserWorkflow` from a parent workflow. The call resolves with the user's answer once they respond in the UI:
38
+ Inject `AskUserWorkflow` via the constructor and launch it from a parent workflow. The call resolves with the user's answer once they respond in the UI:
39
39
 
40
40
  ```ts
41
- import { BaseWorkflow, InjectWorkflow, Transition, Workflow } from '@loopstack/common';
41
+ import { BaseWorkflow, Transition, Workflow } from '@loopstack/common';
42
42
  import { AskUserWorkflow } from '@loopstack/hitl';
43
43
 
44
- @Workflow({ uiConfig: __dirname + '/my.ui.yaml' })
44
+ @Workflow({ widget: __dirname + '/my.ui.yaml' })
45
45
  export class MyWorkflow extends BaseWorkflow {
46
- @InjectWorkflow() askUser: AskUserWorkflow;
46
+ constructor(private readonly askUser: AskUserWorkflow) {
47
+ super();
48
+ }
47
49
 
48
50
  @Transition({ from: 'ready', to: 'done' })
49
51
  async collectName() {
@@ -18,7 +18,7 @@ let AskUserConfirmDocument = class AskUserConfirmDocument {
18
18
  };
19
19
  AskUserConfirmDocument = __decorate([
20
20
  Document({
21
- uiConfig: import.meta.dirname + '/ask-user-confirm-document.yaml',
21
+ widget: import.meta.dirname + '/ask-user-confirm-document.yaml',
22
22
  schema: AskUserConfirmDocumentSchema,
23
23
  })
24
24
  ], AskUserConfirmDocument);
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user-confirm-document.js","sourceRoot":"","sources":["../../src/documents/ask-user-confirm-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,QAAQ,CAAS;IACjB,MAAM,CAAU;CACjB,CAAA;AAHY,sBAAsB;IAJlC,QAAQ,CAAC;QACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,iCAAiC;QACjE,MAAM,EAAE,4BAA4B;KACrC,CAAC;GACW,sBAAsB,CAGlC"}
1
+ {"version":3,"file":"ask-user-confirm-document.js","sourceRoot":"","sources":["../../src/documents/ask-user-confirm-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,QAAQ,CAAS;IACjB,MAAM,CAAU;CACjB,CAAA;AAHY,sBAAsB;IAJlC,QAAQ,CAAC;QACR,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,iCAAiC;QAC/D,MAAM,EAAE,4BAA4B;KACrC,CAAC;GACW,sBAAsB,CAGlC"}
@@ -1,6 +1,3 @@
1
- type: document
2
- ui:
3
- widgets:
4
- - widget: confirm-prompt
5
- options:
6
- transition: userAnswered
1
+ widget: confirm-prompt
2
+ options:
3
+ transition: userAnswered
@@ -18,7 +18,7 @@ let AskUserDocument = class AskUserDocument {
18
18
  };
19
19
  AskUserDocument = __decorate([
20
20
  Document({
21
- uiConfig: import.meta.dirname + '/ask-user-document.yaml',
21
+ widget: import.meta.dirname + '/ask-user-document.yaml',
22
22
  schema: AskUserDocumentSchema,
23
23
  })
24
24
  ], AskUserDocument);
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user-document.js","sourceRoot":"","sources":["../../src/documents/ask-user-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,QAAQ,CAAS;IACjB,MAAM,CAAU;CACjB,CAAA;AAHY,eAAe;IAJ3B,QAAQ,CAAC;QACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,yBAAyB;QACzD,MAAM,EAAE,qBAAqB;KAC9B,CAAC;GACW,eAAe,CAG3B"}
1
+ {"version":3,"file":"ask-user-document.js","sourceRoot":"","sources":["../../src/documents/ask-user-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,QAAQ,CAAS;IACjB,MAAM,CAAU;CACjB,CAAA;AAHY,eAAe;IAJ3B,QAAQ,CAAC;QACR,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,yBAAyB;QACvD,MAAM,EAAE,qBAAqB;KAC9B,CAAC;GACW,eAAe,CAG3B"}
@@ -1,6 +1,3 @@
1
- type: document
2
- ui:
3
- widgets:
4
- - widget: text-prompt
5
- options:
6
- transition: userAnswered
1
+ widget: text-prompt
2
+ options:
3
+ transition: userAnswered
@@ -22,7 +22,7 @@ let AskUserOptionsDocument = class AskUserOptionsDocument {
22
22
  };
23
23
  AskUserOptionsDocument = __decorate([
24
24
  Document({
25
- uiConfig: import.meta.dirname + '/ask-user-options-document.yaml',
25
+ widget: import.meta.dirname + '/ask-user-options-document.yaml',
26
26
  schema: AskUserOptionsDocumentSchema,
27
27
  })
28
28
  ], AskUserOptionsDocument);
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user-options-document.js","sourceRoot":"","sources":["../../src/documents/ask-user-options-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,QAAQ,CAAS;IACjB,OAAO,CAAW;IAClB,iBAAiB,CAAW;IAC5B,MAAM,CAAU;CACjB,CAAA;AALY,sBAAsB;IAJlC,QAAQ,CAAC;QACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,iCAAiC;QACjE,MAAM,EAAE,4BAA4B;KACrC,CAAC;GACW,sBAAsB,CAKlC"}
1
+ {"version":3,"file":"ask-user-options-document.js","sourceRoot":"","sources":["../../src/documents/ask-user-options-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,QAAQ,CAAS;IACjB,OAAO,CAAW;IAClB,iBAAiB,CAAW;IAC5B,MAAM,CAAU;CACjB,CAAA;AALY,sBAAsB;IAJlC,QAAQ,CAAC;QACR,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,iCAAiC;QAC/D,MAAM,EAAE,4BAA4B;KACrC,CAAC;GACW,sBAAsB,CAKlC"}
@@ -1,6 +1,3 @@
1
- type: document
2
- ui:
3
- widgets:
4
- - widget: choices
5
- options:
6
- transition: userAnswered
1
+ widget: choices
2
+ options:
3
+ transition: userAnswered
@@ -16,7 +16,7 @@ let ConfirmUserDocument = class ConfirmUserDocument {
16
16
  };
17
17
  ConfirmUserDocument = __decorate([
18
18
  Document({
19
- uiConfig: import.meta.dirname + '/confirm-user-document.yaml',
19
+ widget: import.meta.dirname + '/confirm-user-document.yaml',
20
20
  schema: ConfirmUserDocumentSchema,
21
21
  })
22
22
  ], ConfirmUserDocument);
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-user-document.js","sourceRoot":"","sources":["../../src/documents/confirm-user-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,QAAQ,CAAS;CAClB,CAAA;AAFY,mBAAmB;IAJ/B,QAAQ,CAAC;QACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,6BAA6B;QAC7D,MAAM,EAAE,yBAAyB;KAClC,CAAC;GACW,mBAAmB,CAE/B"}
1
+ {"version":3,"file":"confirm-user-document.js","sourceRoot":"","sources":["../../src/documents/confirm-user-document.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC;KACD,MAAM,EAAE,CAAC;AAQL,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,QAAQ,CAAS;CAClB,CAAA;AAFY,mBAAmB;IAJ/B,QAAQ,CAAC;QACR,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,6BAA6B;QAC3D,MAAM,EAAE,yBAAyB;KAClC,CAAC;GACW,mBAAmB,CAE/B"}
@@ -1,16 +1,13 @@
1
- type: document
2
- ui:
3
- widgets:
4
- - widget: form
5
- options:
6
- properties:
7
- markdown:
8
- widget: markdown-view
9
- actions:
10
- - type: button
11
- transition: userDenied
12
- label: 'Deny'
13
- variant: outline
14
- - type: button
15
- transition: userConfirmed
16
- label: 'Confirm'
1
+ widget: form
2
+ options:
3
+ properties:
4
+ markdown:
5
+ widget: markdown-view
6
+ actions:
7
+ - type: button
8
+ transition: userDenied
9
+ label: 'Deny'
10
+ variant: outline
11
+ - type: button
12
+ transition: userConfirmed
13
+ label: 'Confirm'
@@ -1,5 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { BaseTool, ToolCallOptions, ToolResult } from '@loopstack/common';
3
+ import type { LoopstackContext } from '@loopstack/common';
4
+ import { AskUserWorkflow } from '../workflows/ask-user/ask-user.workflow.js';
3
5
  declare const AskClarificationInputSchema: z.ZodObject<{
4
6
  question: z.ZodString;
5
7
  mode: z.ZodOptional<z.ZodEnum<{
@@ -11,10 +13,14 @@ declare const AskClarificationInputSchema: z.ZodObject<{
11
13
  allowCustomAnswer: z.ZodOptional<z.ZodBoolean>;
12
14
  }, z.core.$strict>;
13
15
  type AskClarificationInput = z.infer<typeof AskClarificationInputSchema>;
14
- export declare class AskClarificationTool extends BaseTool {
15
- private askUser;
16
- call(args: AskClarificationInput, options?: ToolCallOptions): Promise<ToolResult>;
17
- complete(result: Record<string, unknown>): Promise<ToolResult>;
16
+ export type AskClarificationResult = {
17
+ workflowId: string;
18
+ } | string | Record<string, unknown>;
19
+ export declare class AskClarificationTool extends BaseTool<AskClarificationInput, object, AskClarificationResult> {
20
+ private readonly askUserWorkflow;
21
+ constructor(askUserWorkflow: AskUserWorkflow);
22
+ protected handle(args: AskClarificationInput, ctx: LoopstackContext, options?: ToolCallOptions): Promise<ToolResult<AskClarificationResult>>;
23
+ complete(result: Record<string, unknown>): Promise<ToolResult<AskClarificationResult>>;
18
24
  }
19
25
  export {};
20
26
  //# sourceMappingURL=ask-clarification.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask-clarification.tool.d.ts","sourceRoot":"","sources":["../../src/tools/ask-clarification.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAsC,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9G,QAAA,MAAM,2BAA2B;;;;;;;;;kBAyBtB,CAAC;AAEZ,KAAK,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEzE,qBASa,oBAAqB,SAAQ,QAAQ;IAC9B,OAAO,CAAC,OAAO,CAAkB;IAE7C,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAWrE"}
1
+ {"version":3,"file":"ask-clarification.tool.d.ts","sourceRoot":"","sources":["../../src/tools/ask-clarification.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAsB,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,QAAA,MAAM,2BAA2B;;;;;;;;;kBAyBtB,CAAC;AAEZ,KAAK,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/F,qBAQa,oBAAqB,SAAQ,QAAQ,CAAC,qBAAqB,EAAE,MAAM,EAAE,sBAAsB,CAAC;IAC3F,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;cAI7C,MAAM,CACpB,IAAI,EAAE,qBAAqB,EAC3B,GAAG,EAAE,gBAAgB,EACrB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAyBxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;CAW7F"}
@@ -8,7 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { z } from 'zod';
11
- import { BaseTool, InjectWorkflow, LinkDocument, Tool } from '@loopstack/common';
11
+ import { BaseTool, LinkDocument, Tool } from '@loopstack/common';
12
12
  import { AskUserWorkflow } from '../workflows/ask-user/ask-user.workflow.js';
13
13
  const AskClarificationInputSchema = z
14
14
  .object({
@@ -33,16 +33,20 @@ const AskClarificationInputSchema = z
33
33
  })
34
34
  .strict();
35
35
  let AskClarificationTool = class AskClarificationTool extends BaseTool {
36
- askUser;
37
- async call(args, options) {
38
- const result = await this.askUser.run({
36
+ askUserWorkflow;
37
+ constructor(askUserWorkflow) {
38
+ super();
39
+ this.askUserWorkflow = askUserWorkflow;
40
+ }
41
+ async handle(args, ctx, options) {
42
+ const result = await this.askUserWorkflow.run({
39
43
  question: args.question,
40
44
  mode: args.mode,
41
45
  options: args.options,
42
46
  allowCustomAnswer: args.allowCustomAnswer,
43
- }, { alias: 'askUser', callback: options?.callback });
47
+ }, { callback: options?.callback });
44
48
  const workflowId = result.workflowId;
45
- await this.repository.save(LinkDocument, { status: 'pending', label: 'Waiting for user answer...', workflowId, embed: true, expanded: true }, { id: `ask_clarification_link_${workflowId}` });
49
+ await this.documentStore.save(LinkDocument, { status: 'pending', label: 'Waiting for user answer...', workflowId, embed: true, expanded: true }, { id: `ask_clarification_link_${workflowId}` });
46
50
  return {
47
51
  data: { workflowId },
48
52
  pending: { workflowId },
@@ -50,23 +54,19 @@ let AskClarificationTool = class AskClarificationTool extends BaseTool {
50
54
  }
51
55
  async complete(result) {
52
56
  const data = result;
53
- await this.repository.save(LinkDocument, { status: 'success', label: 'User answered', workflowId: data.workflowId, embed: true, expanded: false }, { id: `ask_clarification_link_${data.workflowId}` });
57
+ await this.documentStore.save(LinkDocument, { status: 'success', label: 'User answered', workflowId: data.workflowId, embed: true, expanded: false }, { id: `ask_clarification_link_${data.workflowId}` });
54
58
  return { data: data.data?.answer ?? result };
55
59
  }
56
60
  };
57
- __decorate([
58
- InjectWorkflow(),
59
- __metadata("design:type", AskUserWorkflow)
60
- ], AskClarificationTool.prototype, "askUser", void 0);
61
61
  AskClarificationTool = __decorate([
62
62
  Tool({
63
- uiConfig: {
64
- description: 'Ask the user a clarification question and wait for their answer. ' +
65
- 'Use this when you need more information from the user before you can proceed. ' +
66
- 'IMPORTANT: This must be the only tool call in your response.',
67
- },
63
+ name: 'ask_clarification',
64
+ description: 'Ask the user a clarification question and wait for their answer. ' +
65
+ 'Use this when you need more information from the user before you can proceed. ' +
66
+ 'IMPORTANT: This must be the only tool call in your response.',
68
67
  schema: AskClarificationInputSchema,
69
- })
68
+ }),
69
+ __metadata("design:paramtypes", [AskUserWorkflow])
70
70
  ], AskClarificationTool);
71
71
  export { AskClarificationTool };
72
72
  //# sourceMappingURL=ask-clarification.tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask-clarification.tool.js","sourceRoot":"","sources":["../../src/tools/ask-clarification.tool.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAA+B,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,kGAAkG,CAAC;IAC/G,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,QAAQ,CACP,2EAA2E;QACzE,+DAA+D;QAC/D,mCAAmC,CACtC;IACH,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,4EAA4E;QAC1E,0DAA0D,CAC7D;CACJ,CAAC;KACD,MAAM,EAAE,CAAC;AAaL,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,QAAQ;IACtB,OAAO,CAAkB;IAEnD,KAAK,CAAC,IAAI,CAAC,IAA2B,EAAE,OAAyB;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACnC;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,EACD,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAClD,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAErC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACxB,YAAY,EACZ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EACnG,EAAE,EAAE,EAAE,0BAA0B,UAAU,EAAE,EAAE,CAC/C,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE;YACpB,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,GAAG,MAA6D,CAAC;QAE3E,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACxB,YAAY,EACZ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,UAAW,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EACzG,EAAE,EAAE,EAAE,0BAA0B,IAAI,CAAC,UAAU,EAAE,EAAE,CACpD,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE,CAAC;IAC/C,CAAC;CACF,CAAA;AAtC2B;IAAzB,cAAc,EAAE;8BAAkB,eAAe;qDAAC;AADxC,oBAAoB;IAThC,IAAI,CAAC;QACJ,QAAQ,EAAE;YACR,WAAW,EACT,mEAAmE;gBACnE,gFAAgF;gBAChF,8DAA8D;SACjE;QACD,MAAM,EAAE,2BAA2B;KACpC,CAAC;GACW,oBAAoB,CAuChC"}
1
+ {"version":3,"file":"ask-clarification.tool.js","sourceRoot":"","sources":["../../src/tools/ask-clarification.tool.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAA+B,MAAM,mBAAmB,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,kGAAkG,CAAC;IAC/G,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,QAAQ,CACP,2EAA2E;QACzE,+DAA+D;QAC/D,mCAAmC,CACtC;IACH,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,4EAA4E;QAC1E,0DAA0D,CAC7D;CACJ,CAAC;KACD,MAAM,EAAE,CAAC;AAcL,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,QAA+D;IAC1E;IAA7B,YAA6B,eAAgC;QAC3D,KAAK,EAAE,CAAC;QADmB,oBAAe,GAAf,eAAe,CAAiB;IAE7D,CAAC;IAES,KAAK,CAAC,MAAM,CACpB,IAA2B,EAC3B,GAAqB,EACrB,OAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAC3C;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,EACD,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAChC,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAErC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3B,YAAY,EACZ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EACnG,EAAE,EAAE,EAAE,0BAA0B,UAAU,EAAE,EAAE,CAC/C,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE;YACpB,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,GAAG,MAA6D,CAAC;QAE3E,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3B,YAAY,EACZ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,UAAW,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EACzG,EAAE,EAAE,EAAE,0BAA0B,IAAI,CAAC,UAAU,EAAE,EAAE,CACpD,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE,CAAC;IAC/C,CAAC;CACF,CAAA;AA7CY,oBAAoB;IARhC,IAAI,CAAC;QACJ,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,mEAAmE;YACnE,gFAAgF;YAChF,8DAA8D;QAChE,MAAM,EAAE,2BAA2B;KACpC,CAAC;qCAE8C,eAAe;GADlD,oBAAoB,CA6ChC"}
@@ -1,13 +1,23 @@
1
1
  import { z } from 'zod';
2
2
  import { BaseTool, ToolCallOptions, ToolResult } from '@loopstack/common';
3
+ import type { LoopstackContext } from '@loopstack/common';
4
+ import { ConfirmUserWorkflow } from '../workflows/confirm-user/confirm-user.workflow.js';
3
5
  declare const AskForApprovalInputSchema: z.ZodObject<{
4
6
  concept: z.ZodString;
5
7
  }, z.core.$strict>;
6
8
  type AskForApprovalInput = z.infer<typeof AskForApprovalInputSchema>;
7
- export declare class AskForApprovalTool extends BaseTool {
8
- private confirmUser;
9
- call(args: AskForApprovalInput, options?: ToolCallOptions): Promise<ToolResult>;
10
- complete(result: Record<string, unknown>): Promise<ToolResult>;
9
+ export type AskForApprovalResult = {
10
+ workflowId: string;
11
+ } | {
12
+ concept: string | undefined;
13
+ } | {
14
+ denied: true;
15
+ };
16
+ export declare class AskForApprovalTool extends BaseTool<AskForApprovalInput, object, AskForApprovalResult> {
17
+ private readonly confirmUserWorkflow;
18
+ constructor(confirmUserWorkflow: ConfirmUserWorkflow);
19
+ protected handle(args: AskForApprovalInput, ctx: LoopstackContext, options?: ToolCallOptions): Promise<ToolResult<AskForApprovalResult>>;
20
+ complete(result: Record<string, unknown>): Promise<ToolResult<AskForApprovalResult>>;
11
21
  }
12
22
  export {};
13
23
  //# sourceMappingURL=ask-for-approval.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask-for-approval.tool.d.ts","sourceRoot":"","sources":["../../src/tools/ask-for-approval.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAsC,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9G,QAAA,MAAM,yBAAyB;;kBAIpB,CAAC;AAEZ,KAAK,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAErE,qBASa,kBAAmB,SAAQ,QAAQ;IAC5B,OAAO,CAAC,WAAW,CAAsB;IAErD,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAoB/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAkBrE"}
1
+ {"version":3,"file":"ask-for-approval.tool.d.ts","sourceRoot":"","sources":["../../src/tools/ask-for-approval.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAsB,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAEzF,QAAA,MAAM,yBAAyB;;kBAIpB,CAAC;AAEZ,KAAK,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAE/G,qBAQa,kBAAmB,SAAQ,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,CAAC;IACrF,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,mBAAmB;cAIrD,MAAM,CACpB,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,gBAAgB,EACrB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAiBtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;CAkB3F"}
@@ -8,7 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { z } from 'zod';
11
- import { BaseTool, InjectWorkflow, LinkDocument, Tool } from '@loopstack/common';
11
+ import { BaseTool, LinkDocument, Tool } from '@loopstack/common';
12
12
  import { ConfirmUserWorkflow } from '../workflows/confirm-user/confirm-user.workflow.js';
13
13
  const AskForApprovalInputSchema = z
14
14
  .object({
@@ -16,11 +16,15 @@ const AskForApprovalInputSchema = z
16
16
  })
17
17
  .strict();
18
18
  let AskForApprovalTool = class AskForApprovalTool extends BaseTool {
19
- confirmUser;
20
- async call(args, options) {
21
- const result = await this.confirmUser.run({ markdown: args.concept }, { alias: 'confirmUser', callback: options?.callback });
19
+ confirmUserWorkflow;
20
+ constructor(confirmUserWorkflow) {
21
+ super();
22
+ this.confirmUserWorkflow = confirmUserWorkflow;
23
+ }
24
+ async handle(args, ctx, options) {
25
+ const result = await this.confirmUserWorkflow.run({ markdown: args.concept }, { callback: options?.callback });
22
26
  const workflowId = result.workflowId;
23
- await this.repository.save(LinkDocument, { status: 'pending', label: 'Waiting for approval...', workflowId, embed: true, expanded: true }, { id: `ask_for_approval_link_${workflowId}` });
27
+ await this.documentStore.save(LinkDocument, { status: 'pending', label: 'Waiting for approval...', workflowId, embed: true, expanded: true }, { id: `ask_for_approval_link_${workflowId}` });
24
28
  return {
25
29
  data: { workflowId },
26
30
  pending: { workflowId },
@@ -29,7 +33,7 @@ let AskForApprovalTool = class AskForApprovalTool extends BaseTool {
29
33
  async complete(result) {
30
34
  const data = result;
31
35
  const approved = data.data?.confirmed ?? false;
32
- await this.repository.save(LinkDocument, {
36
+ await this.documentStore.save(LinkDocument, {
33
37
  status: approved ? 'success' : 'failure',
34
38
  label: approved ? 'Concept approved' : 'Concept denied',
35
39
  workflowId: data.workflowId,
@@ -39,19 +43,15 @@ let AskForApprovalTool = class AskForApprovalTool extends BaseTool {
39
43
  return { data: approved ? { concept: data.data?.markdown } : { denied: true } };
40
44
  }
41
45
  };
42
- __decorate([
43
- InjectWorkflow(),
44
- __metadata("design:type", ConfirmUserWorkflow)
45
- ], AskForApprovalTool.prototype, "confirmUser", void 0);
46
46
  AskForApprovalTool = __decorate([
47
47
  Tool({
48
- uiConfig: {
49
- description: 'Present the final concept to the user for approval. The concept is shown as formatted markdown ' +
50
- 'with a confirm button. Call this when the user indicates the concept is complete. ' +
51
- 'IMPORTANT: This must be the only tool call in your response.',
52
- },
48
+ name: 'ask_for_approval',
49
+ description: 'Present the final concept to the user for approval. The concept is shown as formatted markdown ' +
50
+ 'with a confirm button. Call this when the user indicates the concept is complete. ' +
51
+ 'IMPORTANT: This must be the only tool call in your response.',
53
52
  schema: AskForApprovalInputSchema,
54
- })
53
+ }),
54
+ __metadata("design:paramtypes", [ConfirmUserWorkflow])
55
55
  ], AskForApprovalTool);
56
56
  export { AskForApprovalTool };
57
57
  //# sourceMappingURL=ask-for-approval.tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask-for-approval.tool.js","sourceRoot":"","sources":["../../src/tools/ask-for-approval.tool.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAA+B,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAEzF,MAAM,yBAAyB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;CACrG,CAAC;KACD,MAAM,EAAE,CAAC;AAaL,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,QAAQ;IACpB,WAAW,CAAsB;IAE3D,KAAK,CAAC,IAAI,CAAC,IAAyB,EAAE,OAAyB;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CACvC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAC1B,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CACtD,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAErC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACxB,YAAY,EACZ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAChG,EAAE,EAAE,EAAE,yBAAyB,UAAU,EAAE,EAAE,CAC9C,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE;YACpB,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,GAAG,MAAmF,CAAC;QACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC;QAE/C,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACxB,YAAY,EACZ;YACE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACxC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB;YACvD,UAAU,EAAE,IAAI,CAAC,UAAW;YAC5B,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;SAChB,EACD,EAAE,EAAE,EAAE,yBAAyB,IAAI,CAAC,UAAU,EAAE,EAAE,CACnD,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;CACF,CAAA;AAxC2B;IAAzB,cAAc,EAAE;8BAAsB,mBAAmB;uDAAC;AADhD,kBAAkB;IAT9B,IAAI,CAAC;QACJ,QAAQ,EAAE;YACR,WAAW,EACT,iGAAiG;gBACjG,oFAAoF;gBACpF,8DAA8D;SACjE;QACD,MAAM,EAAE,yBAAyB;KAClC,CAAC;GACW,kBAAkB,CAyC9B"}
1
+ {"version":3,"file":"ask-for-approval.tool.js","sourceRoot":"","sources":["../../src/tools/ask-for-approval.tool.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAA+B,MAAM,mBAAmB,CAAC;AAE9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAEzF,MAAM,yBAAyB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;CACrG,CAAC;KACD,MAAM,EAAE,CAAC;AAcL,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,QAA2D;IACpE;IAA7B,YAA6B,mBAAwC;QACnE,KAAK,EAAE,CAAC;QADmB,wBAAmB,GAAnB,mBAAmB,CAAqB;IAErE,CAAC;IAES,KAAK,CAAC,MAAM,CACpB,IAAyB,EACzB,GAAqB,EACrB,OAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE/G,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAErC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3B,YAAY,EACZ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAChG,EAAE,EAAE,EAAE,yBAAyB,UAAU,EAAE,EAAE,CAC9C,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE;YACpB,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,GAAG,MAAmF,CAAC;QACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC;QAE/C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3B,YAAY,EACZ;YACE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACxC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB;YACvD,UAAU,EAAE,IAAI,CAAC,UAAW;YAC5B,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;SAChB,EACD,EAAE,EAAE,EAAE,yBAAyB,IAAI,CAAC,UAAU,EAAE,EAAE,CACnD,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;CACF,CAAA;AA5CY,kBAAkB;IAR9B,IAAI,CAAC;QACJ,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,iGAAiG;YACjG,oFAAoF;YACpF,8DAA8D;QAChE,MAAM,EAAE,yBAAyB;KAClC,CAAC;qCAEkD,mBAAmB;GAD1D,kBAAkB,CA4C9B"}
@@ -1,10 +1,24 @@
1
+ import { z } from 'zod';
2
+ import type { LoopstackContext } from '@loopstack/common';
1
3
  import { BaseWorkflow } from '@loopstack/common';
2
- export declare class AskUserWorkflow extends BaseWorkflow {
3
- start(): void;
4
- showQuestionOptions(): Promise<void>;
5
- showQuestionConfirm(): Promise<void>;
6
- showQuestionText(): Promise<void>;
7
- userAnswered(payload: {
4
+ declare const AskUserArgsSchema: z.ZodObject<{
5
+ question: z.ZodString;
6
+ mode: z.ZodOptional<z.ZodEnum<{
7
+ options: "options";
8
+ text: "text";
9
+ confirm: "confirm";
10
+ }>>;
11
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ allowCustomAnswer: z.ZodOptional<z.ZodBoolean>;
13
+ }, z.core.$strip>;
14
+ type AskUserArgs = z.infer<typeof AskUserArgsSchema>;
15
+ type AskUserState = AskUserArgs;
16
+ export declare class AskUserWorkflow extends BaseWorkflow<AskUserArgs, AskUserState> {
17
+ start(state: AskUserState, ctx: LoopstackContext): Promise<AskUserState>;
18
+ showQuestionOptions(state: AskUserState): Promise<AskUserState>;
19
+ showQuestionConfirm(state: AskUserState): Promise<AskUserState>;
20
+ showQuestionText(state: AskUserState): Promise<AskUserState>;
21
+ userAnswered(state: AskUserState, payload: {
8
22
  answer: string;
9
23
  }): Promise<{
10
24
  answer: string;
@@ -12,4 +26,5 @@ export declare class AskUserWorkflow extends BaseWorkflow {
12
26
  private isOptionsMode;
13
27
  private isConfirmMode;
14
28
  }
29
+ export {};
15
30
  //# sourceMappingURL=ask-user.workflow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/ask-user/ask-user.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA+C,MAAM,mBAAmB,CAAC;AAS9F,qBASa,eAAgB,SAAQ,YAAY;IAE/C,KAAK;IAIC,mBAAmB;IAenB,mBAAmB;IAMnB,gBAAgB;IAMhB,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAuB5E,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;CAGtB"}
1
+ {"version":3,"file":"ask-user.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/ask-user/ask-user.workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AAK9E,QAAA,MAAM,iBAAiB;;;;;;;;;iBAKrB,CAAC;AAEH,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAMrD,KAAK,YAAY,GAAG,WAAW,CAAC;AAEhC,qBAMa,eAAgB,SAAQ,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC;IAEpE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOxE,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAW/D,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/D,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAM5D,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BjG,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;CAGtB"}
@@ -8,89 +8,97 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { z } from 'zod';
11
- import { BaseWorkflow, Final, Guard, Initial, Transition, Workflow } from '@loopstack/common';
11
+ import { BaseWorkflow, Guard, Transition, Workflow } from '@loopstack/common';
12
12
  import { AskUserConfirmDocument } from '../../documents/ask-user-confirm-document.js';
13
13
  import { AskUserDocument } from '../../documents/ask-user-document.js';
14
14
  import { AskUserOptionsDocument } from '../../documents/ask-user-options-document.js';
15
+ const AskUserArgsSchema = z.object({
16
+ question: z.string(),
17
+ mode: z.enum(['text', 'options', 'confirm']).optional(),
18
+ options: z.array(z.string()).optional(),
19
+ allowCustomAnswer: z.boolean().optional(),
20
+ });
15
21
  const AskUserAnswerSchema = z.object({
16
22
  answer: z.string(),
17
23
  });
18
24
  let AskUserWorkflow = class AskUserWorkflow extends BaseWorkflow {
19
- start() { }
20
- async showQuestionOptions() {
21
- const { question, options, allowCustomAnswer } = this.ctx.args;
22
- await this.repository.save(AskUserOptionsDocument, { question, options: options ?? [], allowCustomAnswer }, { id: 'question' });
25
+ async start(state, ctx) {
26
+ const args = ctx.args;
27
+ return { ...state, ...args };
28
+ }
29
+ async showQuestionOptions(state) {
30
+ await this.documentStore.save(AskUserOptionsDocument, { question: state.question, options: state.options ?? [], allowCustomAnswer: state.allowCustomAnswer }, { id: 'question' });
31
+ return state;
23
32
  }
24
- async showQuestionConfirm() {
25
- const { question } = this.ctx.args;
26
- await this.repository.save(AskUserConfirmDocument, { question }, { id: 'question' });
33
+ async showQuestionConfirm(state) {
34
+ await this.documentStore.save(AskUserConfirmDocument, { question: state.question }, { id: 'question' });
35
+ return state;
27
36
  }
28
- async showQuestionText() {
29
- const { question } = this.ctx.args;
30
- await this.repository.save(AskUserDocument, { question }, { id: 'question' });
37
+ async showQuestionText(state) {
38
+ await this.documentStore.save(AskUserDocument, { question: state.question }, { id: 'question' });
39
+ return state;
31
40
  }
32
- async userAnswered(payload) {
33
- const { question, mode, options, allowCustomAnswer } = this.ctx.args;
34
- if (mode === 'options') {
35
- await this.repository.save(AskUserOptionsDocument, { question, options: options ?? [], allowCustomAnswer, answer: payload.answer }, { id: 'question' });
41
+ async userAnswered(state, payload) {
42
+ if (state.mode === 'options') {
43
+ await this.documentStore.save(AskUserOptionsDocument, {
44
+ question: state.question,
45
+ options: state.options ?? [],
46
+ allowCustomAnswer: state.allowCustomAnswer,
47
+ answer: payload.answer,
48
+ }, { id: 'question' });
36
49
  }
37
- else if (mode === 'confirm') {
38
- await this.repository.save(AskUserConfirmDocument, { question, answer: payload.answer }, { id: 'question' });
50
+ else if (state.mode === 'confirm') {
51
+ await this.documentStore.save(AskUserConfirmDocument, { question: state.question, answer: payload.answer }, { id: 'question' });
39
52
  }
40
53
  else {
41
- await this.repository.save(AskUserDocument, { question, answer: payload.answer }, { id: 'question' });
54
+ await this.documentStore.save(AskUserDocument, { question: state.question, answer: payload.answer }, { id: 'question' });
42
55
  }
43
56
  return { answer: payload.answer };
44
57
  }
45
- isOptionsMode() {
46
- const args = this.ctx.args;
47
- return (args?.mode === 'options' || (args?.mode === undefined && Array.isArray(args?.options) && args.options.length > 0));
58
+ isOptionsMode(state) {
59
+ return (state.mode === 'options' || (state.mode === undefined && Array.isArray(state.options) && state.options.length > 0));
48
60
  }
49
- isConfirmMode() {
50
- return this.ctx.args?.mode === 'confirm';
61
+ isConfirmMode(state) {
62
+ return state.mode === 'confirm';
51
63
  }
52
64
  };
53
65
  __decorate([
54
- Initial({ to: 'show_question' }),
66
+ Transition({ to: 'show_question' }),
55
67
  __metadata("design:type", Function),
56
- __metadata("design:paramtypes", []),
57
- __metadata("design:returntype", void 0)
68
+ __metadata("design:paramtypes", [Object, Object]),
69
+ __metadata("design:returntype", Promise)
58
70
  ], AskUserWorkflow.prototype, "start", null);
59
71
  __decorate([
60
72
  Transition({ from: 'show_question', to: 'waiting_for_user', priority: 10 }),
61
73
  Guard('isOptionsMode'),
62
74
  __metadata("design:type", Function),
63
- __metadata("design:paramtypes", []),
75
+ __metadata("design:paramtypes", [Object]),
64
76
  __metadata("design:returntype", Promise)
65
77
  ], AskUserWorkflow.prototype, "showQuestionOptions", null);
66
78
  __decorate([
67
79
  Transition({ from: 'show_question', to: 'waiting_for_user', priority: 10 }),
68
80
  Guard('isConfirmMode'),
69
81
  __metadata("design:type", Function),
70
- __metadata("design:paramtypes", []),
82
+ __metadata("design:paramtypes", [Object]),
71
83
  __metadata("design:returntype", Promise)
72
84
  ], AskUserWorkflow.prototype, "showQuestionConfirm", null);
73
85
  __decorate([
74
86
  Transition({ from: 'show_question', to: 'waiting_for_user' }),
75
87
  __metadata("design:type", Function),
76
- __metadata("design:paramtypes", []),
88
+ __metadata("design:paramtypes", [Object]),
77
89
  __metadata("design:returntype", Promise)
78
90
  ], AskUserWorkflow.prototype, "showQuestionText", null);
79
91
  __decorate([
80
- Final({ from: 'waiting_for_user', wait: true, schema: AskUserAnswerSchema }),
92
+ Transition({ from: 'waiting_for_user', to: 'end', wait: true, schema: AskUserAnswerSchema }),
81
93
  __metadata("design:type", Function),
82
- __metadata("design:paramtypes", [Object]),
94
+ __metadata("design:paramtypes", [Object, Object]),
83
95
  __metadata("design:returntype", Promise)
84
96
  ], AskUserWorkflow.prototype, "userAnswered", null);
85
97
  AskUserWorkflow = __decorate([
86
98
  Workflow({
87
- uiConfig: import.meta.dirname + '/ask-user.ui.yaml',
88
- schema: z.object({
89
- question: z.string(),
90
- mode: z.enum(['text', 'options', 'confirm']).optional(),
91
- options: z.array(z.string()).optional(),
92
- allowCustomAnswer: z.boolean().optional(),
93
- }),
99
+ title: 'Ask User',
100
+ description: 'Generic sub-workflow that presents a question to the user and waits for their answer.\nUsed by async tool calls (e.g. askClarification) to interrupt an agent loop for user input.\nSupports three modes: text (default), options (pick from a list), and confirm (yes/no).',
101
+ schema: AskUserArgsSchema,
94
102
  })
95
103
  ], AskUserWorkflow);
96
104
  export { AskUserWorkflow };
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user.workflow.js","sourceRoot":"","sources":["../../../src/workflows/ask-user/ask-user.workflow.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAEtF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAWI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,YAAY;IAE/C,KAAK,KAAI,CAAC;IAIJ,AAAN,KAAK,CAAC,mBAAmB;QACvB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAIzD,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACxB,sBAAsB,EACtB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,iBAAiB,EAAE,EACvD,EAAE,EAAE,EAAE,UAAU,EAAE,CACnB,CAAC;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,mBAAmB;QACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAA4B,CAAC;QAC3D,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACvF,CAAC;IAGK,AAAN,KAAK,CAAC,gBAAgB;QACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAA4B,CAAC;QAC3D,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAChF,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAC,OAA2B;QAC5C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAK/D,CAAC;QAEF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACxB,sBAAsB,EACtB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAC/E,EAAE,EAAE,EAAE,UAAU,EAAE,CACnB,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/G,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC;IAEO,aAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAA6C,CAAC;QACpE,OAAO,CACL,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAClH,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,OAAQ,IAAI,CAAC,GAAG,CAAC,IAA0B,EAAE,IAAI,KAAK,SAAS,CAAC;IAClE,CAAC;CACF,CAAA;AAhEC;IADC,OAAO,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;;;;4CACvB;AAIJ;IAFL,UAAU,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3E,KAAK,CAAC,eAAe,CAAC;;;;0DAYtB;AAIK;IAFL,UAAU,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3E,KAAK,CAAC,eAAe,CAAC;;;;0DAItB;AAGK;IADL,UAAU,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC;;;;uDAI7D;AAGK;IADL,KAAK,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;;;;mDAsB5E;AAtDU,eAAe;IAT3B,QAAQ,CAAC;QACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,mBAAmB;QACnD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;YACvD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACvC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAC1C,CAAC;KACH,CAAC;GACW,eAAe,CAkE3B"}
1
+ {"version":3,"file":"ask-user.workflow.js","sourceRoot":"","sources":["../../../src/workflows/ask-user/ask-user.workflow.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,20 @@
1
+ import type { LoopstackContext } from '@loopstack/common';
1
2
  import { BaseWorkflow } from '@loopstack/common';
2
- export declare class ConfirmUserWorkflow extends BaseWorkflow {
3
- markdown?: string;
4
- showContent(args: {
5
- markdown: string;
6
- }): Promise<void>;
7
- userConfirmed(): Promise<{
3
+ interface ConfirmUserState {
4
+ markdown: string;
5
+ }
6
+ export declare class ConfirmUserWorkflow extends BaseWorkflow<{
7
+ markdown: string;
8
+ }, ConfirmUserState> {
9
+ showContent(state: ConfirmUserState, ctx: LoopstackContext): Promise<ConfirmUserState>;
10
+ userConfirmed(state: ConfirmUserState): Promise<{
8
11
  confirmed: boolean;
9
12
  markdown: string;
10
13
  }>;
11
- userDenied(): Promise<{
14
+ userDenied(state: ConfirmUserState): Promise<{
12
15
  confirmed: boolean;
13
16
  markdown: string;
14
17
  }>;
15
18
  }
19
+ export {};
16
20
  //# sourceMappingURL=confirm-user.workflow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-user.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/confirm-user/confirm-user.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAG3E,qBAMa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGZ,WAAW,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAMtC,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAKlE,UAAU,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAGtE"}
1
+ {"version":3,"file":"confirm-user.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/confirm-user/confirm-user.workflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAwB,MAAM,mBAAmB,CAAC;AAGvE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAQa,mBAAoB,SAAQ,YAAY,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,gBAAgB,CAAC;IAErF,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOtF,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAKzF,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAG7F"}
@@ -8,42 +8,43 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { z } from 'zod';
11
- import { BaseWorkflow, Final, Initial, Workflow } from '@loopstack/common';
11
+ import { BaseWorkflow, Transition, Workflow } from '@loopstack/common';
12
12
  import { ConfirmUserDocument } from '../../documents/confirm-user-document.js';
13
13
  let ConfirmUserWorkflow = class ConfirmUserWorkflow extends BaseWorkflow {
14
- markdown;
15
- async showContent(args) {
16
- this.markdown = args.markdown;
17
- await this.repository.save(ConfirmUserDocument, { markdown: args.markdown }, { id: 'content' });
14
+ async showContent(state, ctx) {
15
+ const args = ctx.args;
16
+ await this.documentStore.save(ConfirmUserDocument, { markdown: args.markdown }, { id: 'content' });
17
+ return { ...state, markdown: args.markdown };
18
18
  }
19
- async userConfirmed() {
20
- return Promise.resolve({ confirmed: true, markdown: this.markdown });
19
+ async userConfirmed(state) {
20
+ return Promise.resolve({ confirmed: true, markdown: state.markdown });
21
21
  }
22
- async userDenied() {
23
- return Promise.resolve({ confirmed: false, markdown: this.markdown });
22
+ async userDenied(state) {
23
+ return Promise.resolve({ confirmed: false, markdown: state.markdown });
24
24
  }
25
25
  };
26
26
  __decorate([
27
- Initial({ to: 'waiting_for_confirmation' }),
27
+ Transition({ to: 'waiting_for_confirmation' }),
28
28
  __metadata("design:type", Function),
29
- __metadata("design:paramtypes", [Object]),
29
+ __metadata("design:paramtypes", [Object, Object]),
30
30
  __metadata("design:returntype", Promise)
31
31
  ], ConfirmUserWorkflow.prototype, "showContent", null);
32
32
  __decorate([
33
- Final({ from: 'waiting_for_confirmation', wait: true }),
33
+ Transition({ from: 'waiting_for_confirmation', to: 'end', wait: true }),
34
34
  __metadata("design:type", Function),
35
- __metadata("design:paramtypes", []),
35
+ __metadata("design:paramtypes", [Object]),
36
36
  __metadata("design:returntype", Promise)
37
37
  ], ConfirmUserWorkflow.prototype, "userConfirmed", null);
38
38
  __decorate([
39
- Final({ from: 'waiting_for_confirmation', wait: true }),
39
+ Transition({ from: 'waiting_for_confirmation', to: 'end', wait: true }),
40
40
  __metadata("design:type", Function),
41
- __metadata("design:paramtypes", []),
41
+ __metadata("design:paramtypes", [Object]),
42
42
  __metadata("design:returntype", Promise)
43
43
  ], ConfirmUserWorkflow.prototype, "userDenied", null);
44
44
  ConfirmUserWorkflow = __decorate([
45
45
  Workflow({
46
- uiConfig: import.meta.dirname + '/confirm-user.ui.yaml',
46
+ title: 'Confirm User',
47
+ description: 'Generic sub-workflow that presents markdown content to the user and waits for confirmation.\nUsed by async tool calls (e.g. askForApproval) to get explicit user confirmation.',
47
48
  schema: z.object({
48
49
  markdown: z.string(),
49
50
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-user.workflow.js","sourceRoot":"","sources":["../../../src/workflows/confirm-user/confirm-user.workflow.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAQxE,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAU;IAGZ,AAAN,KAAK,CAAC,WAAW,CAAC,IAA0B;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAClG,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU;QACd,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAS,EAAE,CAAC,CAAC;IACzE,CAAC;CACF,CAAA;AAdO;IADL,OAAO,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC;;;;sDAI3C;AAGK;IADL,KAAK,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;;;wDAGvD;AAGK;IADL,KAAK,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;;;qDAGvD;AAjBU,mBAAmB;IAN/B,QAAQ,CAAC;QACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,uBAAuB;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CAAC;GACW,mBAAmB,CAkB/B"}
1
+ {"version":3,"file":"confirm-user.workflow.js","sourceRoot":"","sources":["../../../src/workflows/confirm-user/confirm-user.workflow.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAcxE,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,YAAoD;IAErF,AAAN,KAAK,CAAC,WAAW,CAAC,KAAuB,EAAE,GAAqB;QAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,IAA4B,CAAC;QAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACnG,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CAAC,KAAuB;QACzC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAC,KAAuB;QACtC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzE,CAAC;CACF,CAAA;AAfO;IADL,UAAU,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC;;;;sDAK9C;AAGK;IADL,UAAU,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;;;wDAGvE;AAGK;IADL,UAAU,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;;;qDAGvE;AAhBU,mBAAmB;IAR/B,QAAQ,CAAC;QACR,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,gLAAgL;QAClL,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CAAC;GACW,mBAAmB,CAiB/B"}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "workflow",
10
10
  "user-input"
11
11
  ],
12
- "version": "0.3.0",
12
+ "version": "0.4.0",
13
13
  "license": "MIT",
14
14
  "author": {
15
15
  "name": "Jakob Klippel",
@@ -32,8 +32,7 @@
32
32
  "watch": "nest build --watch"
33
33
  },
34
34
  "dependencies": {
35
- "@loopstack/common": "^0.30.0",
36
- "@loopstack/core": "^0.30.0",
35
+ "@loopstack/common": "^0.32.0",
37
36
  "@nestjs/common": "^11.1.19",
38
37
  "zod": "^4.3.6"
39
38
  },
@@ -42,6 +41,7 @@
42
41
  ],
43
42
  "type": "module",
44
43
  "devDependencies": {
44
+ "@loopstack/core": "^0.32.0",
45
45
  "vitest": "^4.1.6",
46
46
  "@swc/core": "^1.15.33",
47
47
  "unplugin-swc": "^1.5.9"
@@ -1,6 +0,0 @@
1
- title: 'Ask User'
2
-
3
- description: |
4
- Generic sub-workflow that presents a question to the user and waits for their answer.
5
- Used by async tool calls (e.g. askClarification) to interrupt an agent loop for user input.
6
- Supports three modes: text (default), options (pick from a list), and confirm (yes/no).
@@ -1,5 +0,0 @@
1
- title: 'Confirm User'
2
-
3
- description: |
4
- Generic sub-workflow that presents markdown content to the user and waits for confirmation.
5
- Used by async tool calls (e.g. askForApproval) to get explicit user confirmation.