@loopstack/hitl-examples 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +165 -0
  2. package/dist/hitl-examples.module.d.ts +3 -0
  3. package/dist/hitl-examples.module.d.ts.map +1 -0
  4. package/dist/hitl-examples.module.js +52 -0
  5. package/dist/hitl-examples.module.js.map +1 -0
  6. package/dist/index.d.ts +12 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +28 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.d.ts +9 -0
  11. package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.d.ts.map +1 -0
  12. package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.js +69 -0
  13. package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.js.map +1 -0
  14. package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.d.ts +9 -0
  15. package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.d.ts.map +1 -0
  16. package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.js +67 -0
  17. package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.js.map +1 -0
  18. package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.d.ts +11 -0
  19. package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.d.ts.map +1 -0
  20. package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.js +61 -0
  21. package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.js.map +1 -0
  22. package/dist/workflows/ask-user-options/ask-user-options-example.workflow.d.ts +11 -0
  23. package/dist/workflows/ask-user-options/ask-user-options-example.workflow.d.ts.map +1 -0
  24. package/dist/workflows/ask-user-options/ask-user-options-example.workflow.js +68 -0
  25. package/dist/workflows/ask-user-options/ask-user-options-example.workflow.js.map +1 -0
  26. package/dist/workflows/ask-user-text/ask-user-text-example.workflow.d.ts +11 -0
  27. package/dist/workflows/ask-user-text/ask-user-text-example.workflow.d.ts.map +1 -0
  28. package/dist/workflows/ask-user-text/ask-user-text-example.workflow.js +60 -0
  29. package/dist/workflows/ask-user-text/ask-user-text-example.workflow.js.map +1 -0
  30. package/dist/workflows/confirm-content/confirm-content-example.workflow.d.ts +16 -0
  31. package/dist/workflows/confirm-content/confirm-content-example.workflow.d.ts.map +1 -0
  32. package/dist/workflows/confirm-content/confirm-content-example.workflow.js +68 -0
  33. package/dist/workflows/confirm-content/confirm-content-example.workflow.js.map +1 -0
  34. package/dist/workflows/inline-form/feedback-form-document.d.ts +10 -0
  35. package/dist/workflows/inline-form/feedback-form-document.d.ts.map +1 -0
  36. package/dist/workflows/inline-form/feedback-form-document.js +27 -0
  37. package/dist/workflows/inline-form/feedback-form-document.js.map +1 -0
  38. package/dist/workflows/inline-form/feedback-form-document.yaml +13 -0
  39. package/dist/workflows/inline-form/inline-form-example.workflow.d.ts +11 -0
  40. package/dist/workflows/inline-form/inline-form-example.workflow.d.ts.map +1 -0
  41. package/dist/workflows/inline-form/inline-form-example.workflow.js +54 -0
  42. package/dist/workflows/inline-form/inline-form-example.workflow.js.map +1 -0
  43. package/dist/workflows/meeting-notes/documents/meeting-notes-document.d.ts +8 -0
  44. package/dist/workflows/meeting-notes/documents/meeting-notes-document.d.ts.map +1 -0
  45. package/dist/workflows/meeting-notes/documents/meeting-notes-document.js +25 -0
  46. package/dist/workflows/meeting-notes/documents/meeting-notes-document.js.map +1 -0
  47. package/dist/workflows/meeting-notes/documents/meeting-notes-document.yaml +10 -0
  48. package/dist/workflows/meeting-notes/documents/optimized-notes-document.d.ts +16 -0
  49. package/dist/workflows/meeting-notes/documents/optimized-notes-document.d.ts.map +1 -0
  50. package/dist/workflows/meeting-notes/documents/optimized-notes-document.js +33 -0
  51. package/dist/workflows/meeting-notes/documents/optimized-notes-document.js.map +1 -0
  52. package/dist/workflows/meeting-notes/documents/optimized-notes-document.yaml +33 -0
  53. package/dist/workflows/meeting-notes/meeting-notes-example.workflow.d.ts +24 -0
  54. package/dist/workflows/meeting-notes/meeting-notes-example.workflow.d.ts.map +1 -0
  55. package/dist/workflows/meeting-notes/meeting-notes-example.workflow.js +86 -0
  56. package/dist/workflows/meeting-notes/meeting-notes-example.workflow.js.map +1 -0
  57. package/dist/workflows/meeting-notes/templates/extract-notes.md +5 -0
  58. package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.d.ts +8 -0
  59. package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.d.ts.map +1 -0
  60. package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.js +56 -0
  61. package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.js.map +1 -0
  62. package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.yaml +6 -0
  63. package/package.json +55 -0
  64. package/src/hitl-examples.module.ts +40 -0
  65. package/src/index.ts +16 -0
  66. package/src/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.ts +48 -0
  67. package/src/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.ts +47 -0
  68. package/src/workflows/ask-user-confirm/ask-user-confirm-example.workflow.ts +40 -0
  69. package/src/workflows/ask-user-options/ask-user-options-example.workflow.ts +48 -0
  70. package/src/workflows/ask-user-text/ask-user-text-example.workflow.ts +39 -0
  71. package/src/workflows/confirm-content/confirm-content-example.workflow.ts +49 -0
  72. package/src/workflows/inline-form/feedback-form-document.ts +16 -0
  73. package/src/workflows/inline-form/feedback-form-document.yaml +13 -0
  74. package/src/workflows/inline-form/inline-form-example.workflow.ts +37 -0
  75. package/src/workflows/meeting-notes/documents/meeting-notes-document.ts +14 -0
  76. package/src/workflows/meeting-notes/documents/meeting-notes-document.yaml +10 -0
  77. package/src/workflows/meeting-notes/documents/optimized-notes-document.ts +22 -0
  78. package/src/workflows/meeting-notes/documents/optimized-notes-document.yaml +33 -0
  79. package/src/workflows/meeting-notes/meeting-notes-example.workflow.ts +75 -0
  80. package/src/workflows/meeting-notes/templates/extract-notes.md +5 -0
  81. package/src/workflows/prompt-input-chat/prompt-input-chat-example.workflow.ts +30 -0
  82. package/src/workflows/prompt-input-chat/prompt-input-chat-example.workflow.yaml +6 -0
package/README.md ADDED
@@ -0,0 +1,165 @@
1
+ ---
2
+ title: HITL Examples
3
+ description: Workflow examples for Human-in-the-Loop patterns in Loopstack — custom Document with a form widget, AskUserWorkflow / ConfirmUserWorkflow sub-workflow shortcuts, LLM agent loops with ask_clarification / ask_for_approval, and an end-to-end meeting-notes review flow.
4
+ ---
5
+
6
+ # @loopstack/hitl-examples
7
+
8
+ > Human-in-the-Loop workflow examples for the [Loopstack](https://loopstack.ai) automation framework.
9
+
10
+ Side-by-side examples of every way to pause a Loopstack workflow for the user. The point of this package is to answer one question: **when do I design a custom document with a widget, vs. delegate to a HITL sub-workflow, vs. let an LLM agent ask the user?**
11
+
12
+ ## Decision matrix
13
+
14
+ | You are building... | Use | Examples |
15
+ | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
16
+ | A predefined workflow with known user-input steps — form fields, structured data, a record the user edits | **Custom document with a widget** — your workflow owns the document and the `wait: true` transition | Inline Form, Prompt Input Chat, Meeting Notes |
17
+ | An LLM agent loop where the LLM dynamically decides to ask the user something or request approval | **Agent tools** `ask_clarification` / `ask_for_approval` from `@loopstack/hitl` | Agent Ask Clarification, Agent Ask For Approval |
18
+ | A predefined workflow that just needs a quick generic ask — one free-text field, yes/no, pick-one — and you don't want to design a form | **Sub-workflow shortcut** — `AskUserWorkflow` / `ConfirmUserWorkflow` from `@loopstack/hitl` | Ask User Text, Ask User Options, Ask User Confirm, Confirm Content |
19
+
20
+ ## Install as Source (Recommended)
21
+
22
+ ```bash
23
+ npx giget@latest gh:loopstack-ai/loopstack/registry/examples/hitl-examples src/hitl-examples
24
+ ```
25
+
26
+ Then register the module in your app:
27
+
28
+ ```typescript
29
+ import { Module } from '@nestjs/common';
30
+ import { LoopstackModule } from '@loopstack/loopstack-module';
31
+ import { HitlExamplesModule } from './hitl-examples/hitl-examples.module';
32
+
33
+ @Module({
34
+ imports: [LoopstackModule.forRoot(), HitlExamplesModule],
35
+ })
36
+ export class AppModule {}
37
+ ```
38
+
39
+ ## Install as a Dependency
40
+
41
+ ```bash
42
+ npm install @loopstack/hitl-examples
43
+ ```
44
+
45
+ ```typescript
46
+ import { HitlExamplesModule } from '@loopstack/hitl-examples';
47
+ ```
48
+
49
+ ## Environment
50
+
51
+ The agent and meeting-notes examples require Claude credentials:
52
+
53
+ ```bash
54
+ ANTHROPIC_API_KEY=sk-ant-...
55
+ ```
56
+
57
+ The non-agent examples (Inline Form, Prompt Input Chat, Ask User \*, Confirm Content) work without any LLM provider.
58
+
59
+ ## Examples
60
+
61
+ | Example | Studio title | Description |
62
+ | --------------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------- |
63
+ | [Inline Form](#inline-form) | `HITL - Inline Form Example` | Custom Document with a form widget, `wait: true` payload typed by the document schema |
64
+ | [Prompt Input Chat](#prompt-input-chat) | `HITL - Prompt Input Chat Example` | Workflow-level prompt-input widget; loops on user messages without an LLM |
65
+ | [Ask User Text](#ask-user-text) | `HITL - Ask User Text Example` | `AskUserWorkflow` for a generic free-text question |
66
+ | [Ask User Options](#ask-user-options) | `HITL - Ask User Options Example` | `AskUserWorkflow` with `mode: 'options'` and `allowCustomAnswer` |
67
+ | [Ask User Confirm](#ask-user-confirm) | `HITL - Ask User Confirm Example` | `AskUserWorkflow` with `mode: 'confirm'` for yes/no decisions |
68
+ | [Confirm Content](#confirm-content) | `HITL - Confirm Content Example` | `ConfirmUserWorkflow` to show a pre-rendered markdown blob for explicit approval |
69
+ | [Agent Ask Clarification](#agent-ask-clarification) | `HITL - Agent Ask Clarification Example` | LLM agent with `ask_clarification` tool — pauses to request missing info |
70
+ | [Agent Ask For Approval](#agent-ask-for-approval) | `HITL - Agent Ask For Approval Example` | LLM agent with `ask_for_approval` tool — drafts content and pauses for confirm/deny |
71
+ | [Meeting Notes](#meeting-notes) | `HITL - Meeting Notes Example` | End-to-end document-review flow: user notes → LLM-extracted structure → user approval |
72
+
73
+ ---
74
+
75
+ ## Inline Form
76
+
77
+ The workflow owns a `FeedbackFormDocument` whose schema doubles as the `wait: true` transition payload. The form's Submit button triggers the transition with typed data — no wrapping or unpacking.
78
+
79
+ ### Files
80
+
81
+ - `inline-form-example.workflow.ts` — workflow class
82
+ - `feedback-form-document.ts` — `@Document` with Zod schema
83
+ - `feedback-form-document.yaml` — form widget definition
84
+
85
+ ## Prompt Input Chat
86
+
87
+ Workflow-level `widget: prompt-input` with `enabledWhen: [waiting_for_user]`. Loops on user messages and echoes them back — no LLM and no sub-workflow involved. Demonstrates the chat-style entry pattern that LLM agent loops are built on.
88
+
89
+ ### Files
90
+
91
+ - `prompt-input-chat-example.workflow.ts` — workflow class
92
+ - `prompt-input-chat-example.workflow.yaml` — workflow-level prompt-input widget
93
+
94
+ ## Ask User Text
95
+
96
+ Delegate a generic free-text question to `AskUserWorkflow`. The parent workflow only owns the callback transition that receives the answer. Use the inline-form pattern instead when you need a structured form.
97
+
98
+ ### Files
99
+
100
+ - `ask-user-text-example.workflow.ts` — workflow class
101
+
102
+ ## Ask User Options
103
+
104
+ Delegate a "pick one from a list" question to `AskUserWorkflow` with `mode: 'options'`. `allowCustomAnswer: true` adds a free-text field next to the choices.
105
+
106
+ ### Files
107
+
108
+ - `ask-user-options-example.workflow.ts` — workflow class
109
+
110
+ ## Ask User Confirm
111
+
112
+ Delegate a yes/no decision to `AskUserWorkflow` with `mode: 'confirm'`. The answer comes back as the literal string `'yes'` or `'no'`.
113
+
114
+ ### Files
115
+
116
+ - `ask-user-confirm-example.workflow.ts` — workflow class
117
+
118
+ ## Confirm Content
119
+
120
+ Hand a pre-rendered markdown blob to `ConfirmUserWorkflow` for a user-facing review. The callback receives `{ confirmed: boolean, markdown: string }`. Useful for showing a release plan, summary, or diff for explicit approval.
121
+
122
+ ### Files
123
+
124
+ - `confirm-content-example.workflow.ts` — workflow class
125
+
126
+ ## Agent Ask Clarification
127
+
128
+ Launches `AgentWorkflow` with `tools: ['ask_clarification']`. When the LLM lacks information, it issues an `ask_clarification` tool call — the loop pauses and prompts the user, then the answer flows back into the agent context.
129
+
130
+ ### Files
131
+
132
+ - `agent-ask-clarification-example.workflow.ts` — workflow class
133
+
134
+ ## Agent Ask For Approval
135
+
136
+ Launches `AgentWorkflow` with `tools: ['ask_for_approval']`. The LLM drafts content (release notes, in this example), then calls `ask_for_approval` with the markdown — the loop pauses until the user explicitly confirms or denies.
137
+
138
+ ### Files
139
+
140
+ - `agent-ask-for-approval-example.workflow.ts` — workflow class
141
+
142
+ ## Meeting Notes
143
+
144
+ A complete HITL document-review flow:
145
+
146
+ 1. Save a `MeetingNotesDocument` with the user's raw notes (form widget for edits)
147
+ 2. User reviews/edits and submits via `wait: true` transition
148
+ 3. `LlmGenerateObjectTool` extracts structured data via Zod schema
149
+ 4. Save `OptimizedNotesDocument` for the user to review/approve
150
+ 5. Final approval via second `wait: true` transition
151
+
152
+ Combines custom documents, LLM-driven structured output, and two HITL review steps.
153
+
154
+ ### Files
155
+
156
+ - `meeting-notes-example.workflow.ts` — workflow class
157
+ - `documents/meeting-notes-document.{ts,yaml}` — input form document
158
+ - `documents/optimized-notes-document.{ts,yaml}` — structured output document
159
+ - `templates/extract-notes.md` — LLM prompt template
160
+
161
+ ## About
162
+
163
+ Author: [Jakob Klippel](https://www.linkedin.com/in/jakob-klippel/)
164
+
165
+ License: MIT
@@ -0,0 +1,3 @@
1
+ export declare class HitlExamplesModule {
2
+ }
3
+ //# sourceMappingURL=hitl-examples.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hitl-examples.module.d.ts","sourceRoot":"","sources":["../src/hitl-examples.module.ts"],"names":[],"mappings":"AA8BA,qBASa,kBAAkB;CAAG"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.HitlExamplesModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const agent_1 = require("@loopstack/agent");
12
+ const claude_module_1 = require("@loopstack/claude-module");
13
+ const common_2 = require("@loopstack/common");
14
+ const hitl_1 = require("@loopstack/hitl");
15
+ const agent_ask_clarification_example_workflow_1 = require("./workflows/agent-ask-clarification/agent-ask-clarification-example.workflow");
16
+ const agent_ask_for_approval_example_workflow_1 = require("./workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow");
17
+ const ask_user_confirm_example_workflow_1 = require("./workflows/ask-user-confirm/ask-user-confirm-example.workflow");
18
+ const ask_user_options_example_workflow_1 = require("./workflows/ask-user-options/ask-user-options-example.workflow");
19
+ const ask_user_text_example_workflow_1 = require("./workflows/ask-user-text/ask-user-text-example.workflow");
20
+ const confirm_content_example_workflow_1 = require("./workflows/confirm-content/confirm-content-example.workflow");
21
+ const feedback_form_document_1 = require("./workflows/inline-form/feedback-form-document");
22
+ const inline_form_example_workflow_1 = require("./workflows/inline-form/inline-form-example.workflow");
23
+ const meeting_notes_document_1 = require("./workflows/meeting-notes/documents/meeting-notes-document");
24
+ const optimized_notes_document_1 = require("./workflows/meeting-notes/documents/optimized-notes-document");
25
+ const meeting_notes_example_workflow_1 = require("./workflows/meeting-notes/meeting-notes-example.workflow");
26
+ const prompt_input_chat_example_workflow_1 = require("./workflows/prompt-input-chat/prompt-input-chat-example.workflow");
27
+ const WORKFLOWS = [
28
+ inline_form_example_workflow_1.InlineFormExampleWorkflow,
29
+ prompt_input_chat_example_workflow_1.PromptInputChatExampleWorkflow,
30
+ ask_user_text_example_workflow_1.AskUserTextExampleWorkflow,
31
+ ask_user_options_example_workflow_1.AskUserOptionsExampleWorkflow,
32
+ ask_user_confirm_example_workflow_1.AskUserConfirmExampleWorkflow,
33
+ confirm_content_example_workflow_1.ConfirmContentExampleWorkflow,
34
+ agent_ask_clarification_example_workflow_1.AgentAskClarificationExampleWorkflow,
35
+ agent_ask_for_approval_example_workflow_1.AgentAskForApprovalExampleWorkflow,
36
+ meeting_notes_example_workflow_1.MeetingNotesExampleWorkflow,
37
+ ];
38
+ let HitlExamplesModule = class HitlExamplesModule {
39
+ };
40
+ exports.HitlExamplesModule = HitlExamplesModule;
41
+ exports.HitlExamplesModule = HitlExamplesModule = __decorate([
42
+ (0, common_2.StudioApp)({
43
+ title: 'HITL Examples',
44
+ workflows: WORKFLOWS,
45
+ }),
46
+ (0, common_1.Module)({
47
+ imports: [hitl_1.HitlModule, agent_1.AgentModule, claude_module_1.ClaudeModule],
48
+ providers: [feedback_form_document_1.FeedbackFormDocument, meeting_notes_document_1.MeetingNotesDocument, optimized_notes_document_1.OptimizedNotesDocument, ...WORKFLOWS],
49
+ exports: WORKFLOWS,
50
+ })
51
+ ], HitlExamplesModule);
52
+ //# sourceMappingURL=hitl-examples.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hitl-examples.module.js","sourceRoot":"","sources":["../src/hitl-examples.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,4CAA+C;AAC/C,4DAAwD;AACxD,8CAA8C;AAC9C,0CAA6C;AAC7C,2IAAoI;AACpI,wIAAgI;AAChI,sHAA+G;AAC/G,sHAA+G;AAC/G,6GAAsG;AACtG,mHAA6G;AAC7G,2FAAsF;AACtF,uGAAiG;AACjG,uGAAkG;AAClG,2GAAsG;AACtG,6GAAuG;AACvG,yHAAkH;AAElH,MAAM,SAAS,GAAG;IAChB,wDAAyB;IACzB,mEAA8B;IAC9B,2DAA0B;IAC1B,iEAA6B;IAC7B,iEAA6B;IAC7B,gEAA6B;IAC7B,+EAAoC;IACpC,4EAAkC;IAClC,4DAA2B;CAC5B,CAAC;AAWK,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAAG,CAAA;AAArB,gDAAkB;6BAAlB,kBAAkB;IAT9B,IAAA,kBAAS,EAAC;QACT,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,SAAS;KACrB,CAAC;IACD,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,mBAAW,EAAE,4BAAY,CAAC;QAChD,SAAS,EAAE,CAAC,6CAAoB,EAAE,6CAAoB,EAAE,iDAAsB,EAAE,GAAG,SAAS,CAAC;QAC7F,OAAO,EAAE,SAAS;KACnB,CAAC;GACW,kBAAkB,CAAG"}
@@ -0,0 +1,12 @@
1
+ export * from './hitl-examples.module';
2
+ export * from './workflows/inline-form/inline-form-example.workflow';
3
+ export * from './workflows/inline-form/feedback-form-document';
4
+ export * from './workflows/prompt-input-chat/prompt-input-chat-example.workflow';
5
+ export * from './workflows/ask-user-text/ask-user-text-example.workflow';
6
+ export * from './workflows/ask-user-options/ask-user-options-example.workflow';
7
+ export * from './workflows/ask-user-confirm/ask-user-confirm-example.workflow';
8
+ export * from './workflows/confirm-content/confirm-content-example.workflow';
9
+ export * from './workflows/agent-ask-clarification/agent-ask-clarification-example.workflow';
10
+ export * from './workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow';
11
+ export * from './workflows/meeting-notes/meeting-notes-example.workflow';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AAEvC,cAAc,sDAAsD,CAAC;AACrE,cAAc,gDAAgD,CAAC;AAE/D,cAAc,kEAAkE,CAAC;AAEjF,cAAc,0DAA0D,CAAC;AACzE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,8DAA8D,CAAC;AAE7E,cAAc,8EAA8E,CAAC;AAC7F,cAAc,4EAA4E,CAAC;AAE3F,cAAc,0DAA0D,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./hitl-examples.module"), exports);
18
+ __exportStar(require("./workflows/inline-form/inline-form-example.workflow"), exports);
19
+ __exportStar(require("./workflows/inline-form/feedback-form-document"), exports);
20
+ __exportStar(require("./workflows/prompt-input-chat/prompt-input-chat-example.workflow"), exports);
21
+ __exportStar(require("./workflows/ask-user-text/ask-user-text-example.workflow"), exports);
22
+ __exportStar(require("./workflows/ask-user-options/ask-user-options-example.workflow"), exports);
23
+ __exportStar(require("./workflows/ask-user-confirm/ask-user-confirm-example.workflow"), exports);
24
+ __exportStar(require("./workflows/confirm-content/confirm-content-example.workflow"), exports);
25
+ __exportStar(require("./workflows/agent-ask-clarification/agent-ask-clarification-example.workflow"), exports);
26
+ __exportStar(require("./workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow"), exports);
27
+ __exportStar(require("./workflows/meeting-notes/meeting-notes-example.workflow"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AAEvC,uFAAqE;AACrE,iFAA+D;AAE/D,mGAAiF;AAEjF,2FAAyE;AACzE,iGAA+E;AAC/E,iGAA+E;AAC/E,+FAA6E;AAE7E,+GAA6F;AAC7F,6GAA2F;AAE3F,2FAAyE"}
@@ -0,0 +1,9 @@
1
+ import { type AgentResult, AgentWorkflow } from '@loopstack/agent';
2
+ import { BaseWorkflow, type TransitionInput } from '@loopstack/common';
3
+ export declare class AgentAskClarificationExampleWorkflow extends BaseWorkflow {
4
+ private readonly agentWorkflow;
5
+ constructor(agentWorkflow: AgentWorkflow);
6
+ start(_state: Record<string, unknown>): Promise<void>;
7
+ agentComplete(_state: Record<string, unknown>, input: TransitionInput<AgentResult>): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=agent-ask-clarification-example.workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ask-clarification-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAqB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,YAAY,EAA+B,KAAK,eAAe,EAAY,MAAM,mBAAmB,CAAC;AAU9G,qBAMa,oCAAqC,SAAQ,YAAY;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAKnD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBrC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC;CAOzF"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AgentAskClarificationExampleWorkflow = void 0;
13
+ const agent_1 = require("@loopstack/agent");
14
+ const common_1 = require("@loopstack/common");
15
+ const SYSTEM_PROMPT = `You are a trip-planning assistant.
16
+
17
+ CRITICAL RULES — your response MUST follow these:
18
+ - Before recommending a destination, you MUST know BOTH the user's budget AND their preferred climate.
19
+ - If EITHER is missing from the conversation, your response MUST be exactly ONE tool call to "ask_clarification".
20
+ - Do NOT guess. Do NOT recommend a destination based on partial info.
21
+ - Only after you have received BOTH pieces of information, recommend a single destination as a short paragraph.`;
22
+ let AgentAskClarificationExampleWorkflow = class AgentAskClarificationExampleWorkflow extends common_1.BaseWorkflow {
23
+ agentWorkflow;
24
+ constructor(agentWorkflow) {
25
+ super();
26
+ this.agentWorkflow = agentWorkflow;
27
+ }
28
+ async start(_state) {
29
+ await this.agentWorkflow.run({
30
+ system: SYSTEM_PROMPT,
31
+ tools: ['ask_clarification'],
32
+ userMessage: 'Where should I go on holiday next month?',
33
+ }, { callback: { transition: 'agentComplete' }, show: 'inline', label: 'Trip planner working...' });
34
+ }
35
+ async agentComplete(_state, input) {
36
+ await this.documentStore.save(common_1.MessageDocument, {
37
+ role: 'assistant',
38
+ text: input.data.response,
39
+ });
40
+ this.setResult(input.data);
41
+ }
42
+ };
43
+ exports.AgentAskClarificationExampleWorkflow = AgentAskClarificationExampleWorkflow;
44
+ __decorate([
45
+ (0, common_1.Transition)({ to: 'running' }),
46
+ __metadata("design:type", Function),
47
+ __metadata("design:paramtypes", [Object]),
48
+ __metadata("design:returntype", Promise)
49
+ ], AgentAskClarificationExampleWorkflow.prototype, "start", null);
50
+ __decorate([
51
+ (0, common_1.Transition)({
52
+ from: 'running',
53
+ to: 'end',
54
+ wait: true,
55
+ schema: agent_1.AgentResultSchema,
56
+ }),
57
+ __metadata("design:type", Function),
58
+ __metadata("design:paramtypes", [Object, Object]),
59
+ __metadata("design:returntype", Promise)
60
+ ], AgentAskClarificationExampleWorkflow.prototype, "agentComplete", null);
61
+ exports.AgentAskClarificationExampleWorkflow = AgentAskClarificationExampleWorkflow = __decorate([
62
+ (0, common_1.Workflow)({
63
+ title: 'HITL - Agent Ask Clarification Example',
64
+ description: 'Agent HITL: an LLM agent runs with the ask_clarification tool. When it lacks information, ' +
65
+ 'it pauses the loop and prompts the user; the answer flows back into the agent context.',
66
+ }),
67
+ __metadata("design:paramtypes", [agent_1.AgentWorkflow])
68
+ ], AgentAskClarificationExampleWorkflow);
69
+ //# sourceMappingURL=agent-ask-clarification-example.workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ask-clarification-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAsF;AACtF,8CAA8G;AAE9G,MAAM,aAAa,GAAG;;;;;;gHAM0F,CAAC;AAQ1G,IAAM,oCAAoC,GAA1C,MAAM,oCAAqC,SAAQ,qBAAY;IACvC;IAA7B,YAA6B,aAA4B;QACvD,KAAK,EAAE,CAAC;QADmB,kBAAa,GAAb,aAAa,CAAe;IAEzD,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAC,MAA+B;QACzC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAC1B;YACE,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,WAAW,EAAE,0CAA0C;SACxD,EACD,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAChG,CAAC;IACJ,CAAC;IAQK,AAAN,KAAK,CAAC,aAAa,CAAC,MAA+B,EAAE,KAAmC;QACtF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF,CAAA;AA9BY,oFAAoC;AAMzC;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;;;;iEAU7B;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,yBAAiB;KAC1B,CAAC;;;;yEAOD;+CA7BU,oCAAoC;IANhD,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,4FAA4F;YAC5F,wFAAwF;KAC3F,CAAC;qCAE4C,qBAAa;GAD9C,oCAAoC,CA8BhD"}
@@ -0,0 +1,9 @@
1
+ import { type AgentResult, AgentWorkflow } from '@loopstack/agent';
2
+ import { BaseWorkflow, type TransitionInput } from '@loopstack/common';
3
+ export declare class AgentAskForApprovalExampleWorkflow extends BaseWorkflow {
4
+ private readonly agentWorkflow;
5
+ constructor(agentWorkflow: AgentWorkflow);
6
+ start(_state: Record<string, unknown>): Promise<void>;
7
+ agentComplete(_state: Record<string, unknown>, input: TransitionInput<AgentResult>): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=agent-ask-for-approval-example.workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ask-for-approval-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAqB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAgC,KAAK,eAAe,EAAY,MAAM,mBAAmB,CAAC;AAW/G,qBAMa,kCAAmC,SAAQ,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAKnD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkBrC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC;CAIzF"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AgentAskForApprovalExampleWorkflow = void 0;
13
+ const agent_1 = require("@loopstack/agent");
14
+ const common_1 = require("@loopstack/common");
15
+ const SYSTEM_PROMPT = `You are a release-notes drafting assistant.
16
+
17
+ Your task: produce a concise release-notes markdown draft, get explicit user approval via the "ask_for_approval" tool, then output the approved markdown as your final response.
18
+
19
+ CRITICAL RULES — your response MUST follow these:
20
+ - First turn: respond with exactly ONE tool call to "ask_for_approval". The "concept" argument IS the markdown draft. Do NOT write the draft as plain text in this turn.
21
+ - After approval: your final text response MUST be the approved markdown verbatim, with no preamble, commentary, or trailing text.
22
+ - After denial: respond with a brief one-line note that the draft was rejected.`;
23
+ let AgentAskForApprovalExampleWorkflow = class AgentAskForApprovalExampleWorkflow extends common_1.BaseWorkflow {
24
+ agentWorkflow;
25
+ constructor(agentWorkflow) {
26
+ super();
27
+ this.agentWorkflow = agentWorkflow;
28
+ }
29
+ async start(_state) {
30
+ await this.agentWorkflow.run({
31
+ system: SYSTEM_PROMPT,
32
+ tools: ['ask_for_approval'],
33
+ userMessage: 'Draft release notes for v1.2.3: added webhook signature verification; fixed a date-parsing bug in the importer.',
34
+ }, { callback: { transition: 'agentComplete' }, show: 'inline', label: 'Drafting release notes...' });
35
+ }
36
+ async agentComplete(_state, input) {
37
+ await this.documentStore.save(common_1.MarkdownDocument, { markdown: input.data.response });
38
+ this.setResult(input.data);
39
+ }
40
+ };
41
+ exports.AgentAskForApprovalExampleWorkflow = AgentAskForApprovalExampleWorkflow;
42
+ __decorate([
43
+ (0, common_1.Transition)({ to: 'running' }),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", [Object]),
46
+ __metadata("design:returntype", Promise)
47
+ ], AgentAskForApprovalExampleWorkflow.prototype, "start", null);
48
+ __decorate([
49
+ (0, common_1.Transition)({
50
+ from: 'running',
51
+ to: 'end',
52
+ wait: true,
53
+ schema: agent_1.AgentResultSchema,
54
+ }),
55
+ __metadata("design:type", Function),
56
+ __metadata("design:paramtypes", [Object, Object]),
57
+ __metadata("design:returntype", Promise)
58
+ ], AgentAskForApprovalExampleWorkflow.prototype, "agentComplete", null);
59
+ exports.AgentAskForApprovalExampleWorkflow = AgentAskForApprovalExampleWorkflow = __decorate([
60
+ (0, common_1.Workflow)({
61
+ title: 'HITL - Agent Ask For Approval Example',
62
+ description: 'Agent HITL: an LLM agent drafts content, then calls the ask_for_approval tool to show the markdown ' +
63
+ 'to the user and pause until they confirm or deny.',
64
+ }),
65
+ __metadata("design:paramtypes", [agent_1.AgentWorkflow])
66
+ ], AgentAskForApprovalExampleWorkflow);
67
+ //# sourceMappingURL=agent-ask-for-approval-example.workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ask-for-approval-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAsF;AACtF,8CAA+G;AAE/G,MAAM,aAAa,GAAG;;;;;;;gFAO0D,CAAC;AAQ1E,IAAM,kCAAkC,GAAxC,MAAM,kCAAmC,SAAQ,qBAAY;IACrC;IAA7B,YAA6B,aAA4B;QACvD,KAAK,EAAE,CAAC;QADmB,kBAAa,GAAb,aAAa,CAAe;IAEzD,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAC,MAA+B;QACzC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAC1B;YACE,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,CAAC,kBAAkB,CAAC;YAC3B,WAAW,EACT,iHAAiH;SACpH,EACD,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAClG,CAAC;IACJ,CAAC;IAQK,AAAN,KAAK,CAAC,aAAa,CAAC,MAA+B,EAAE,KAAmC;QACtF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAgB,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF,CAAA;AA5BY,gFAAkC;AAMvC;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;;;;+DAW7B;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,yBAAiB;KAC1B,CAAC;;;;uEAID;6CA3BU,kCAAkC;IAN9C,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EACT,qGAAqG;YACrG,mDAAmD;KACtD,CAAC;qCAE4C,qBAAa;GAD9C,kCAAkC,CA4B9C"}
@@ -0,0 +1,11 @@
1
+ import { BaseWorkflow, type TransitionInput } from '@loopstack/common';
2
+ import { AskUserWorkflow } from '@loopstack/hitl';
3
+ export declare class AskUserConfirmExampleWorkflow extends BaseWorkflow {
4
+ private readonly askUserWorkflow;
5
+ constructor(askUserWorkflow: AskUserWorkflow);
6
+ askToSend(_state: Record<string, unknown>): Promise<void>;
7
+ decisionReceived(state: Record<string, unknown>, input: TransitionInput<{
8
+ answer: string;
9
+ }>): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=ask-user-confirm-example.workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user-confirm-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/ask-user-confirm/ask-user-confirm-example.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA+B,KAAK,eAAe,EAAY,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlD,qBAMa,6BAA8B,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAKvD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAazC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAQlG"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AskUserConfirmExampleWorkflow = void 0;
13
+ const zod_1 = require("zod");
14
+ const common_1 = require("@loopstack/common");
15
+ const hitl_1 = require("@loopstack/hitl");
16
+ const AnswerSchema = zod_1.z.object({ answer: zod_1.z.string() });
17
+ let AskUserConfirmExampleWorkflow = class AskUserConfirmExampleWorkflow extends common_1.BaseWorkflow {
18
+ askUserWorkflow;
19
+ constructor(askUserWorkflow) {
20
+ super();
21
+ this.askUserWorkflow = askUserWorkflow;
22
+ }
23
+ async askToSend(_state) {
24
+ await this.askUserWorkflow.run({ question: 'Send the email now?', mode: 'confirm' }, { callback: { transition: 'decisionReceived' }, show: 'inline', label: 'Waiting for yes/no...' });
25
+ }
26
+ async decisionReceived(state, input) {
27
+ const accepted = input.data.answer === 'yes';
28
+ await this.documentStore.save(common_1.MessageDocument, {
29
+ role: 'assistant',
30
+ text: accepted ? 'Sending the email now.' : 'Skipping — email was not sent.',
31
+ });
32
+ this.setResult({ sent: accepted });
33
+ }
34
+ };
35
+ exports.AskUserConfirmExampleWorkflow = AskUserConfirmExampleWorkflow;
36
+ __decorate([
37
+ (0, common_1.Transition)({ to: 'waiting_for_yes_no' }),
38
+ __metadata("design:type", Function),
39
+ __metadata("design:paramtypes", [Object]),
40
+ __metadata("design:returntype", Promise)
41
+ ], AskUserConfirmExampleWorkflow.prototype, "askToSend", null);
42
+ __decorate([
43
+ (0, common_1.Transition)({
44
+ from: 'waiting_for_yes_no',
45
+ to: 'end',
46
+ wait: true,
47
+ schema: AnswerSchema,
48
+ }),
49
+ __metadata("design:type", Function),
50
+ __metadata("design:paramtypes", [Object, Object]),
51
+ __metadata("design:returntype", Promise)
52
+ ], AskUserConfirmExampleWorkflow.prototype, "decisionReceived", null);
53
+ exports.AskUserConfirmExampleWorkflow = AskUserConfirmExampleWorkflow = __decorate([
54
+ (0, common_1.Workflow)({
55
+ title: 'HITL - Ask User Confirm Example',
56
+ description: 'Shortcut HITL: delegate a yes/no decision to AskUserWorkflow with mode "confirm". ' +
57
+ 'The answer comes back as the literal string "yes" or "no".',
58
+ }),
59
+ __metadata("design:paramtypes", [hitl_1.AskUserWorkflow])
60
+ ], AskUserConfirmExampleWorkflow);
61
+ //# sourceMappingURL=ask-user-confirm-example.workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user-confirm-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/ask-user-confirm/ask-user-confirm-example.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAwB;AACxB,8CAA8G;AAC9G,0CAAkD;AAElD,MAAM,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAQ/C,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,qBAAY;IAChC;IAA7B,YAA6B,eAAgC;QAC3D,KAAK,EAAE,CAAC;QADmB,oBAAe,GAAf,eAAe,CAAiB;IAE7D,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAC,MAA+B;QAC7C,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAC5B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,EACpD,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAuB,EAAE,CACjG,CAAC;IACJ,CAAC;IAQK,AAAN,KAAK,CAAC,gBAAgB,CAAC,KAA8B,EAAE,KAA0C;QAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;QAC7C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,gCAAgC;SAC7E,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAwC,CAAC,CAAC;IAC3E,CAAC;CACF,CAAA;AA3BY,sEAA6B;AAMlC;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC;;;;8DAMxC;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,oBAAoB;QAC1B,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,YAAY;KACrB,CAAC;;;;qEAQD;wCA1BU,6BAA6B;IANzC,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,oFAAoF;YACpF,4DAA4D;KAC/D,CAAC;qCAE8C,sBAAe;GADlD,6BAA6B,CA2BzC"}
@@ -0,0 +1,11 @@
1
+ import { BaseWorkflow, type TransitionInput } from '@loopstack/common';
2
+ import { AskUserWorkflow } from '@loopstack/hitl';
3
+ export declare class AskUserOptionsExampleWorkflow extends BaseWorkflow {
4
+ private readonly askUserWorkflow;
5
+ constructor(askUserWorkflow: AskUserWorkflow);
6
+ askEnvironment(_state: Record<string, unknown>): Promise<void>;
7
+ choiceReceived(state: Record<string, unknown>, input: TransitionInput<{
8
+ answer: string;
9
+ }>): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=ask-user-options-example.workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user-options-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/ask-user-options/ask-user-options-example.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA+B,KAAK,eAAe,EAAY,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMlD,qBAMa,6BAA8B,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAKvD,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB9C,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAShG"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AskUserOptionsExampleWorkflow = void 0;
13
+ const zod_1 = require("zod");
14
+ const common_1 = require("@loopstack/common");
15
+ const hitl_1 = require("@loopstack/hitl");
16
+ const AnswerSchema = zod_1.z.object({ answer: zod_1.z.string() });
17
+ const ENV_OPTIONS = ['staging', 'production'];
18
+ let AskUserOptionsExampleWorkflow = class AskUserOptionsExampleWorkflow extends common_1.BaseWorkflow {
19
+ askUserWorkflow;
20
+ constructor(askUserWorkflow) {
21
+ super();
22
+ this.askUserWorkflow = askUserWorkflow;
23
+ }
24
+ async askEnvironment(_state) {
25
+ await this.askUserWorkflow.run({
26
+ question: 'Which environment should we deploy to?',
27
+ mode: 'options',
28
+ options: ENV_OPTIONS,
29
+ allowCustomAnswer: true,
30
+ }, { callback: { transition: 'choiceReceived' }, show: 'inline', label: 'Waiting for choice...' });
31
+ }
32
+ async choiceReceived(state, input) {
33
+ const choice = input.data.answer;
34
+ const isCustom = !ENV_OPTIONS.includes(choice);
35
+ await this.documentStore.save(common_1.MessageDocument, {
36
+ role: 'assistant',
37
+ text: isCustom ? `Custom environment selected: ${choice}` : `Deploying to ${choice}.`,
38
+ });
39
+ this.setResult({ environment: choice, custom: isCustom });
40
+ }
41
+ };
42
+ exports.AskUserOptionsExampleWorkflow = AskUserOptionsExampleWorkflow;
43
+ __decorate([
44
+ (0, common_1.Transition)({ to: 'waiting_for_choice' }),
45
+ __metadata("design:type", Function),
46
+ __metadata("design:paramtypes", [Object]),
47
+ __metadata("design:returntype", Promise)
48
+ ], AskUserOptionsExampleWorkflow.prototype, "askEnvironment", null);
49
+ __decorate([
50
+ (0, common_1.Transition)({
51
+ from: 'waiting_for_choice',
52
+ to: 'end',
53
+ wait: true,
54
+ schema: AnswerSchema,
55
+ }),
56
+ __metadata("design:type", Function),
57
+ __metadata("design:paramtypes", [Object, Object]),
58
+ __metadata("design:returntype", Promise)
59
+ ], AskUserOptionsExampleWorkflow.prototype, "choiceReceived", null);
60
+ exports.AskUserOptionsExampleWorkflow = AskUserOptionsExampleWorkflow = __decorate([
61
+ (0, common_1.Workflow)({
62
+ title: 'HITL - Ask User Options Example',
63
+ description: 'Shortcut HITL: delegate a generic "pick from a list" ask to AskUserWorkflow with mode "options". ' +
64
+ 'allowCustomAnswer adds a free-text field next to the choices.',
65
+ }),
66
+ __metadata("design:paramtypes", [hitl_1.AskUserWorkflow])
67
+ ], AskUserOptionsExampleWorkflow);
68
+ //# sourceMappingURL=ask-user-options-example.workflow.js.map