@loopstack/hitl 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -16
- package/dist/documents/ask-user-confirm-document.js +1 -1
- package/dist/documents/ask-user-confirm-document.js.map +1 -1
- package/dist/documents/ask-user-document.js +1 -1
- package/dist/documents/ask-user-document.js.map +1 -1
- package/dist/documents/ask-user-options-document.js +1 -1
- package/dist/documents/ask-user-options-document.js.map +1 -1
- package/dist/documents/confirm-user-document.js +1 -1
- package/dist/documents/confirm-user-document.js.map +1 -1
- package/dist/tools/ask-clarification.tool.d.ts +3 -3
- package/dist/tools/ask-clarification.tool.d.ts.map +1 -1
- package/dist/tools/ask-clarification.tool.js.map +1 -1
- package/dist/tools/ask-for-approval.tool.d.ts +3 -3
- package/dist/tools/ask-for-approval.tool.d.ts.map +1 -1
- package/dist/tools/ask-for-approval.tool.js.map +1 -1
- package/dist/workflows/ask-user/ask-user.workflow.d.ts +8 -10
- package/dist/workflows/ask-user/ask-user.workflow.d.ts.map +1 -1
- package/dist/workflows/ask-user/ask-user.workflow.js +13 -16
- package/dist/workflows/ask-user/ask-user.workflow.js.map +1 -1
- package/dist/workflows/confirm-user/confirm-user.workflow.d.ts +9 -12
- package/dist/workflows/confirm-user/confirm-user.workflow.d.ts.map +1 -1
- package/dist/workflows/confirm-user/confirm-user.workflow.js +13 -12
- package/dist/workflows/confirm-user/confirm-user.workflow.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -41,12 +41,10 @@ export class MyModule {}
|
|
|
41
41
|
|
|
42
42
|
```typescript
|
|
43
43
|
import { z } from 'zod';
|
|
44
|
-
import { BaseWorkflow,
|
|
44
|
+
import { BaseWorkflow, MessageDocument, Transition, type TransitionInput, Workflow } from '@loopstack/common';
|
|
45
45
|
import { AskUserWorkflow } from '@loopstack/hitl';
|
|
46
46
|
|
|
47
|
-
const
|
|
48
|
-
data: z.object({ answer: z.string() }),
|
|
49
|
-
});
|
|
47
|
+
const AnswerSchema = z.object({ answer: z.string() });
|
|
50
48
|
|
|
51
49
|
@Workflow({ title: 'My Workflow' })
|
|
52
50
|
export class MyWorkflow extends BaseWorkflow {
|
|
@@ -55,21 +53,19 @@ export class MyWorkflow extends BaseWorkflow {
|
|
|
55
53
|
}
|
|
56
54
|
|
|
57
55
|
@Transition({ to: 'waiting' })
|
|
58
|
-
async start(state: Record<string, unknown>)
|
|
56
|
+
async start(state: Record<string, unknown>) {
|
|
59
57
|
await this.askUser.run(
|
|
60
58
|
{ question: 'What is your name?' },
|
|
61
59
|
{ callback: { transition: 'answerReceived' }, show: 'inline', label: 'Waiting for answer...' },
|
|
62
60
|
);
|
|
63
|
-
return state;
|
|
64
61
|
}
|
|
65
62
|
|
|
66
|
-
@Transition({ from: 'waiting', to: 'end', wait: true, schema:
|
|
67
|
-
async answerReceived(state: Record<string, unknown>,
|
|
63
|
+
@Transition({ from: 'waiting', to: 'end', wait: true, schema: AnswerSchema })
|
|
64
|
+
async answerReceived(state: Record<string, unknown>, input: TransitionInput<{ answer: string }>) {
|
|
68
65
|
await this.documentStore.save(MessageDocument, {
|
|
69
66
|
role: 'assistant',
|
|
70
|
-
text: `Hello, ${
|
|
67
|
+
text: `Hello, ${input.data.answer}!`,
|
|
71
68
|
});
|
|
72
|
-
return {};
|
|
73
69
|
}
|
|
74
70
|
}
|
|
75
71
|
```
|
|
@@ -117,7 +113,11 @@ The `show_question` state uses guard-based routing to save the correct document
|
|
|
117
113
|
- **options** — saves `AskUserOptionsDocument`, renders a choice list
|
|
118
114
|
- **confirm** — saves `AskUserConfirmDocument`, renders yes/no buttons
|
|
119
115
|
|
|
120
|
-
**
|
|
116
|
+
**Immediate return from `.run()`:** `QueueResult` — `{ workflowId: string }`. `.run()` schedules the child and returns synchronously; it does **not** wait for the user. Use `workflowId` to embed the child in the parent's UI via `LinkDocument` (or pass `show: 'inline'` on `.run()` to do this automatically).
|
|
117
|
+
|
|
118
|
+
**Callback `input.data`:** `{ answer: string }` — delivered as the `data` field of a `TransitionInput<{ answer: string }>` to the wait transition named in `options.callback.transition`. The `schema:` on the wait transition validates `input.data` only; the surrounding envelope (`workflowId`, `status`, `hasError`, `errorMessage`) is added by the framework.
|
|
119
|
+
|
|
120
|
+
For the full sub-workflow callback pattern — typing `data` via the wait transition schema, branching on `input.hasError` / `input.status`, and embedding the child UI with `show: 'inline'` — see [`@loopstack/run-sub-workflow-example`](https://loopstack.ai/registry/loopstack-run-sub-workflow-example).
|
|
121
121
|
|
|
122
122
|
#### Multiple-choice and confirmation modes
|
|
123
123
|
|
|
@@ -153,7 +153,9 @@ start → waiting_for_confirmation → end
|
|
|
153
153
|
|
|
154
154
|
Two wait transitions (`userConfirmed` / `userDenied`) resolve to different results.
|
|
155
155
|
|
|
156
|
-
**
|
|
156
|
+
**Immediate return from `.run()`:** `QueueResult` — `{ workflowId: string }`.
|
|
157
|
+
|
|
158
|
+
**Callback `input.data`:** `{ confirmed: boolean, markdown: string }` — accessed as `input.data.confirmed` / `input.data.markdown` in the wait transition.
|
|
157
159
|
|
|
158
160
|
```typescript
|
|
159
161
|
import { ConfirmUserWorkflow } from '@loopstack/hitl';
|
|
@@ -179,7 +181,8 @@ Both tools follow the same pattern: launch the corresponding sub-workflow, retur
|
|
|
179
181
|
| `options` | `string[]` | no | Choices when mode is `'options'` |
|
|
180
182
|
| `allowCustomAnswer` | `boolean` | no | Show free-text input alongside options |
|
|
181
183
|
|
|
182
|
-
**
|
|
184
|
+
**Immediate return from `.run()`:** `QueueResult` — `{ workflowId: string }`
|
|
185
|
+
**Callback `input.data`:** `{ answer: string }`
|
|
183
186
|
|
|
184
187
|
### ConfirmUserWorkflow
|
|
185
188
|
|
|
@@ -187,7 +190,8 @@ Both tools follow the same pattern: launch the corresponding sub-workflow, retur
|
|
|
187
190
|
| ---------- | -------- | -------- | ----------------------------------- |
|
|
188
191
|
| `markdown` | `string` | yes | Markdown content to show for review |
|
|
189
192
|
|
|
190
|
-
**
|
|
193
|
+
**Immediate return from `.run()`:** `QueueResult` — `{ workflowId: string }`
|
|
194
|
+
**Callback `input.data`:** `{ confirmed: boolean, markdown: string }`
|
|
191
195
|
|
|
192
196
|
## Tools Reference
|
|
193
197
|
|
|
@@ -229,8 +233,7 @@ Present markdown content to the user for approval. Pauses the agent until the us
|
|
|
229
233
|
## Related
|
|
230
234
|
|
|
231
235
|
- [Human-in-the-Loop Patterns](https://loopstack.ai/docs/build/patterns/human-in-the-loop) — wait transitions, document actions, conditional widgets
|
|
232
|
-
- [hitl-
|
|
233
|
-
- [hitl-confirm-example-workflow](https://loopstack.ai/registry/loopstack-hitl-confirm-example-workflow) — ConfirmUserWorkflow example with confirm/deny
|
|
236
|
+
- [hitl-examples](https://loopstack.ai/registry/loopstack-hitl-examples) — comprehensive HITL examples: custom document with widget, AskUserWorkflow / ConfirmUserWorkflow shortcuts, and agent-tool flows
|
|
234
237
|
|
|
235
238
|
## About
|
|
236
239
|
|
|
@@ -18,7 +18,7 @@ let AskUserConfirmDocument = class AskUserConfirmDocument {
|
|
|
18
18
|
};
|
|
19
19
|
AskUserConfirmDocument = __decorate([
|
|
20
20
|
Document({
|
|
21
|
-
widget:
|
|
21
|
+
widget: './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,MAAM,EAAE,
|
|
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,kCAAkC;QAC1C,MAAM,EAAE,4BAA4B;KACrC,CAAC;GACW,sBAAsB,CAGlC"}
|
|
@@ -18,7 +18,7 @@ let AskUserDocument = class AskUserDocument {
|
|
|
18
18
|
};
|
|
19
19
|
AskUserDocument = __decorate([
|
|
20
20
|
Document({
|
|
21
|
-
widget:
|
|
21
|
+
widget: './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,MAAM,EAAE,
|
|
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,0BAA0B;QAClC,MAAM,EAAE,qBAAqB;KAC9B,CAAC;GACW,eAAe,CAG3B"}
|
|
@@ -22,7 +22,7 @@ let AskUserOptionsDocument = class AskUserOptionsDocument {
|
|
|
22
22
|
};
|
|
23
23
|
AskUserOptionsDocument = __decorate([
|
|
24
24
|
Document({
|
|
25
|
-
widget:
|
|
25
|
+
widget: './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,MAAM,EAAE,
|
|
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,kCAAkC;QAC1C,MAAM,EAAE,4BAA4B;KACrC,CAAC;GACW,sBAAsB,CAKlC"}
|
|
@@ -16,7 +16,7 @@ let ConfirmUserDocument = class ConfirmUserDocument {
|
|
|
16
16
|
};
|
|
17
17
|
ConfirmUserDocument = __decorate([
|
|
18
18
|
Document({
|
|
19
|
-
widget:
|
|
19
|
+
widget: './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,MAAM,EAAE,
|
|
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,8BAA8B;QACtC,MAAM,EAAE,yBAAyB;KAClC,CAAC;GACW,mBAAmB,CAE/B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { BaseTool, ToolCallOptions,
|
|
2
|
+
import { BaseTool, ToolCallOptions, ToolEnvelope } from '@loopstack/common';
|
|
3
3
|
import type { RunContext } from '@loopstack/common';
|
|
4
4
|
import { AskUserWorkflow } from '../workflows/ask-user/ask-user.workflow.js';
|
|
5
5
|
declare const AskClarificationInputSchema: z.ZodObject<{
|
|
@@ -19,8 +19,8 @@ export type AskClarificationResult = {
|
|
|
19
19
|
export declare class AskClarificationTool extends BaseTool<AskClarificationInput, object, AskClarificationResult> {
|
|
20
20
|
private readonly askUserWorkflow;
|
|
21
21
|
constructor(askUserWorkflow: AskUserWorkflow);
|
|
22
|
-
protected handle(args: AskClarificationInput, ctx: RunContext, options?: ToolCallOptions): Promise<
|
|
23
|
-
complete(result: Record<string, unknown>): Promise<
|
|
22
|
+
protected handle(args: AskClarificationInput, ctx: RunContext, options?: ToolCallOptions): Promise<ToolEnvelope<AskClarificationResult>>;
|
|
23
|
+
complete(result: Record<string, unknown>): Promise<ToolEnvelope<AskClarificationResult>>;
|
|
24
24
|
}
|
|
25
25
|
export {};
|
|
26
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,EAAQ,eAAe,EAAE,
|
|
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,EAAQ,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,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,UAAU,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAiB1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;CAI/F"}
|
|
@@ -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,IAAI,
|
|
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,IAAI,EAAiC,MAAM,mBAAmB,CAAC;AAElF,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,GAAe,EACf,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,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,4BAA4B,EAAE,CACrF,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YACvC,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;SAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,GAAG,MAAwC,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE,CAAC;IAC/C,CAAC;CACF,CAAA;AA9BY,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,CA8BhC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { BaseTool, ToolCallOptions,
|
|
2
|
+
import { BaseTool, ToolCallOptions, ToolEnvelope } from '@loopstack/common';
|
|
3
3
|
import type { RunContext } from '@loopstack/common';
|
|
4
4
|
import { ConfirmUserWorkflow } from '../workflows/confirm-user/confirm-user.workflow.js';
|
|
5
5
|
declare const AskForApprovalInputSchema: z.ZodObject<{
|
|
@@ -16,8 +16,8 @@ export type AskForApprovalResult = {
|
|
|
16
16
|
export declare class AskForApprovalTool extends BaseTool<AskForApprovalInput, object, AskForApprovalResult> {
|
|
17
17
|
private readonly confirmUserWorkflow;
|
|
18
18
|
constructor(confirmUserWorkflow: ConfirmUserWorkflow);
|
|
19
|
-
protected handle(args: AskForApprovalInput, ctx: RunContext, options?: ToolCallOptions): Promise<
|
|
20
|
-
complete(result: Record<string, unknown>): Promise<
|
|
19
|
+
protected handle(args: AskForApprovalInput, ctx: RunContext, options?: ToolCallOptions): Promise<ToolEnvelope<AskForApprovalResult>>;
|
|
20
|
+
complete(result: Record<string, unknown>): Promise<ToolEnvelope<AskForApprovalResult>>;
|
|
21
21
|
}
|
|
22
22
|
export {};
|
|
23
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,EAAQ,eAAe,EAAE,
|
|
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,EAAQ,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,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,UAAU,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAYxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;CAK7F"}
|
|
@@ -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,IAAI,
|
|
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,IAAI,EAAiC,MAAM,mBAAmB,CAAC;AAElF,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,GAAe,EACf,OAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC/C,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAC1B,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAClF,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YACvC,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;SAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,GAAG,MAA8D,CAAC;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC;QAC/C,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;AA1BY,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,CA0B9B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type { RunContext } from '@loopstack/common';
|
|
2
|
+
import type { RunContext, TransitionInput } from '@loopstack/common';
|
|
3
3
|
import { BaseWorkflow } from '@loopstack/common';
|
|
4
4
|
declare const AskUserArgsSchema: z.ZodObject<{
|
|
5
5
|
question: z.ZodString;
|
|
@@ -13,16 +13,14 @@ declare const AskUserArgsSchema: z.ZodObject<{
|
|
|
13
13
|
}, z.core.$strip>;
|
|
14
14
|
type AskUserArgs = z.infer<typeof AskUserArgsSchema>;
|
|
15
15
|
type AskUserState = AskUserArgs;
|
|
16
|
-
export declare class AskUserWorkflow extends BaseWorkflow<AskUserArgs
|
|
17
|
-
start(state: AskUserState, ctx: RunContext):
|
|
18
|
-
showQuestionOptions(state: AskUserState): Promise<
|
|
19
|
-
showQuestionConfirm(state: AskUserState): Promise<
|
|
20
|
-
showQuestionText(state: AskUserState): Promise<
|
|
21
|
-
userAnswered(state: AskUserState,
|
|
16
|
+
export declare class AskUserWorkflow extends BaseWorkflow<AskUserArgs> {
|
|
17
|
+
start(state: AskUserState, ctx: RunContext<AskUserArgs>): void;
|
|
18
|
+
showQuestionOptions(state: AskUserState): Promise<void>;
|
|
19
|
+
showQuestionConfirm(state: AskUserState): Promise<void>;
|
|
20
|
+
showQuestionText(state: AskUserState): Promise<void>;
|
|
21
|
+
userAnswered(state: AskUserState, input: TransitionInput<{
|
|
22
22
|
answer: string;
|
|
23
|
-
}): Promise<
|
|
24
|
-
answer: string;
|
|
25
|
-
}>;
|
|
23
|
+
}>): Promise<void>;
|
|
26
24
|
private isOptionsMode;
|
|
27
25
|
private isConfirmMode;
|
|
28
26
|
}
|
|
@@ -1 +1 @@
|
|
|
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,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
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,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,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,qBAOa,eAAgB,SAAQ,YAAY,CAAC,WAAW,CAAC;IAE5D,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC;IAMjD,mBAAmB,CAAC,KAAK,EAAE,YAAY;IAUvC,mBAAmB,CAAC,KAAK,EAAE,YAAY;IAKvC,gBAAgB,CAAC,KAAK,EAAE,YAAY;IAKpC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BlF,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;CAGtB"}
|
|
@@ -22,38 +22,34 @@ const AskUserAnswerSchema = z.object({
|
|
|
22
22
|
answer: z.string(),
|
|
23
23
|
});
|
|
24
24
|
let AskUserWorkflow = class AskUserWorkflow extends BaseWorkflow {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return { ...state, ...args };
|
|
25
|
+
start(state, ctx) {
|
|
26
|
+
this.assignState({ ...ctx.args });
|
|
28
27
|
}
|
|
29
28
|
async showQuestionOptions(state) {
|
|
30
|
-
await this.documentStore.save(AskUserOptionsDocument, { question: state.question, options: state.options ?? [], allowCustomAnswer: state.allowCustomAnswer }, {
|
|
31
|
-
return state;
|
|
29
|
+
await this.documentStore.save(AskUserOptionsDocument, { question: state.question, options: state.options ?? [], allowCustomAnswer: state.allowCustomAnswer }, { key: 'question' });
|
|
32
30
|
}
|
|
33
31
|
async showQuestionConfirm(state) {
|
|
34
|
-
await this.documentStore.save(AskUserConfirmDocument, { question: state.question }, {
|
|
35
|
-
return state;
|
|
32
|
+
await this.documentStore.save(AskUserConfirmDocument, { question: state.question }, { key: 'question' });
|
|
36
33
|
}
|
|
37
34
|
async showQuestionText(state) {
|
|
38
|
-
await this.documentStore.save(AskUserDocument, { question: state.question }, {
|
|
39
|
-
return state;
|
|
35
|
+
await this.documentStore.save(AskUserDocument, { question: state.question }, { key: 'question' });
|
|
40
36
|
}
|
|
41
|
-
async userAnswered(state,
|
|
37
|
+
async userAnswered(state, input) {
|
|
42
38
|
if (state.mode === 'options') {
|
|
43
39
|
await this.documentStore.save(AskUserOptionsDocument, {
|
|
44
40
|
question: state.question,
|
|
45
41
|
options: state.options ?? [],
|
|
46
42
|
allowCustomAnswer: state.allowCustomAnswer,
|
|
47
|
-
answer:
|
|
48
|
-
}, {
|
|
43
|
+
answer: input.data.answer,
|
|
44
|
+
}, { key: 'question' });
|
|
49
45
|
}
|
|
50
46
|
else if (state.mode === 'confirm') {
|
|
51
|
-
await this.documentStore.save(AskUserConfirmDocument, { question: state.question, answer:
|
|
47
|
+
await this.documentStore.save(AskUserConfirmDocument, { question: state.question, answer: input.data.answer }, { key: 'question' });
|
|
52
48
|
}
|
|
53
49
|
else {
|
|
54
|
-
await this.documentStore.save(AskUserDocument, { question: state.question, answer:
|
|
50
|
+
await this.documentStore.save(AskUserDocument, { question: state.question, answer: input.data.answer }, { key: 'question' });
|
|
55
51
|
}
|
|
56
|
-
|
|
52
|
+
this.setResult({ answer: input.data.answer });
|
|
57
53
|
}
|
|
58
54
|
isOptionsMode(state) {
|
|
59
55
|
return (state.mode === 'options' || (state.mode === undefined && Array.isArray(state.options) && state.options.length > 0));
|
|
@@ -66,7 +62,7 @@ __decorate([
|
|
|
66
62
|
Transition({ to: 'show_question' }),
|
|
67
63
|
__metadata("design:type", Function),
|
|
68
64
|
__metadata("design:paramtypes", [Object, Object]),
|
|
69
|
-
__metadata("design:returntype",
|
|
65
|
+
__metadata("design:returntype", void 0)
|
|
70
66
|
], AskUserWorkflow.prototype, "start", null);
|
|
71
67
|
__decorate([
|
|
72
68
|
Transition({ from: 'show_question', to: 'waiting_for_user', priority: 10 }),
|
|
@@ -96,6 +92,7 @@ __decorate([
|
|
|
96
92
|
], AskUserWorkflow.prototype, "userAnswered", null);
|
|
97
93
|
AskUserWorkflow = __decorate([
|
|
98
94
|
Workflow({
|
|
95
|
+
name: 'ask_user',
|
|
99
96
|
title: 'Ask User',
|
|
100
97
|
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
98
|
schema: AskUserArgsSchema,
|
|
@@ -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;AAExB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC9E,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,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAIH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;
|
|
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,20 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
import type { RunContext } from '@loopstack/common';
|
|
2
3
|
import { BaseWorkflow } from '@loopstack/common';
|
|
3
4
|
interface ConfirmUserState {
|
|
4
5
|
markdown: string;
|
|
5
6
|
}
|
|
6
|
-
|
|
7
|
-
markdown:
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
userDenied(state: ConfirmUserState): Promise<{
|
|
15
|
-
confirmed: boolean;
|
|
16
|
-
markdown: string;
|
|
17
|
-
}>;
|
|
7
|
+
declare const ConfirmUserArgsSchema: z.ZodObject<{
|
|
8
|
+
markdown: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
type ConfirmUserArgs = z.infer<typeof ConfirmUserArgsSchema>;
|
|
11
|
+
export declare class ConfirmUserWorkflow extends BaseWorkflow<ConfirmUserArgs> {
|
|
12
|
+
showContent(state: ConfirmUserState, ctx: RunContext<ConfirmUserArgs>): Promise<void>;
|
|
13
|
+
userConfirmed(state: ConfirmUserState): void;
|
|
14
|
+
userDenied(state: ConfirmUserState): void;
|
|
18
15
|
}
|
|
19
16
|
export {};
|
|
20
17
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"confirm-user.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/confirm-user/confirm-user.workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAwB,MAAM,mBAAmB,CAAC;AAGvE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,qBAAqB;;iBAEzB,CAAC;AAEH,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE7D,qBAOa,mBAAoB,SAAQ,YAAY,CAAC,eAAe,CAAC;IAE9D,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,UAAU,CAAC,eAAe,CAAC;IAM3E,aAAa,CAAC,KAAK,EAAE,gBAAgB;IAKrC,UAAU,CAAC,KAAK,EAAE,gBAAgB;CAGnC"}
|
|
@@ -10,17 +10,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
import { BaseWorkflow, Transition, Workflow } from '@loopstack/common';
|
|
12
12
|
import { ConfirmUserDocument } from '../../documents/confirm-user-document.js';
|
|
13
|
+
const ConfirmUserArgsSchema = z.object({
|
|
14
|
+
markdown: z.string(),
|
|
15
|
+
});
|
|
13
16
|
let ConfirmUserWorkflow = class ConfirmUserWorkflow extends BaseWorkflow {
|
|
14
17
|
async showContent(state, ctx) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return { ...state, markdown: args.markdown };
|
|
18
|
+
await this.documentStore.save(ConfirmUserDocument, { markdown: ctx.args.markdown }, { key: 'content' });
|
|
19
|
+
this.assignState({ markdown: ctx.args.markdown });
|
|
18
20
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
userConfirmed(state) {
|
|
22
|
+
this.setResult({ confirmed: true, markdown: state.markdown });
|
|
21
23
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
userDenied(state) {
|
|
25
|
+
this.setResult({ confirmed: false, markdown: state.markdown });
|
|
24
26
|
}
|
|
25
27
|
};
|
|
26
28
|
__decorate([
|
|
@@ -33,21 +35,20 @@ __decorate([
|
|
|
33
35
|
Transition({ from: 'waiting_for_confirmation', to: 'end', wait: true }),
|
|
34
36
|
__metadata("design:type", Function),
|
|
35
37
|
__metadata("design:paramtypes", [Object]),
|
|
36
|
-
__metadata("design:returntype",
|
|
38
|
+
__metadata("design:returntype", void 0)
|
|
37
39
|
], ConfirmUserWorkflow.prototype, "userConfirmed", null);
|
|
38
40
|
__decorate([
|
|
39
41
|
Transition({ from: 'waiting_for_confirmation', to: 'end', wait: true }),
|
|
40
42
|
__metadata("design:type", Function),
|
|
41
43
|
__metadata("design:paramtypes", [Object]),
|
|
42
|
-
__metadata("design:returntype",
|
|
44
|
+
__metadata("design:returntype", void 0)
|
|
43
45
|
], ConfirmUserWorkflow.prototype, "userDenied", null);
|
|
44
46
|
ConfirmUserWorkflow = __decorate([
|
|
45
47
|
Workflow({
|
|
48
|
+
name: 'confirm_user',
|
|
46
49
|
title: 'Confirm User',
|
|
47
50
|
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.',
|
|
48
|
-
schema:
|
|
49
|
-
markdown: z.string(),
|
|
50
|
-
}),
|
|
51
|
+
schema: ConfirmUserArgsSchema,
|
|
51
52
|
})
|
|
52
53
|
], ConfirmUserWorkflow);
|
|
53
54
|
export { ConfirmUserWorkflow };
|
|
@@ -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;AAExB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;
|
|
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;AAM/E,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAWI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,YAA6B;IAE9D,AAAN,KAAK,CAAC,WAAW,CAAC,KAAuB,EAAE,GAAgC;QACzE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACxG,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAGD,aAAa,CAAC,KAAuB;QACnC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAwC,CAAC,CAAC;IACtG,CAAC;IAGD,UAAU,CAAC,KAAuB;QAChC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAwC,CAAC,CAAC;IACvG,CAAC;CACF,CAAA;AAdO;IADL,UAAU,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC;;;;sDAI9C;AAGD;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;;;wDAGvE;AAGD;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;;;qDAGvE;AAfU,mBAAmB;IAP/B,QAAQ,CAAC;QACR,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,gLAAgL;QAClL,MAAM,EAAE,qBAAqB;KAC9B,CAAC;GACW,mBAAmB,CAgB/B"}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"workflow",
|
|
10
10
|
"user-input"
|
|
11
11
|
],
|
|
12
|
-
"version": "0.4.
|
|
12
|
+
"version": "0.4.5",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Jakob Klippel",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"watch": "nest build --watch"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@loopstack/common": "^0.
|
|
36
|
-
"@loopstack/core": "^0.
|
|
35
|
+
"@loopstack/common": "^0.36.0",
|
|
36
|
+
"@loopstack/core": "^0.36.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@nestjs/common": "^11.1.19",
|