@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.
- package/README.md +165 -0
- package/dist/hitl-examples.module.d.ts +3 -0
- package/dist/hitl-examples.module.d.ts.map +1 -0
- package/dist/hitl-examples.module.js +52 -0
- package/dist/hitl-examples.module.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.d.ts +9 -0
- package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.d.ts.map +1 -0
- package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.js +69 -0
- package/dist/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.js.map +1 -0
- package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.d.ts +9 -0
- package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.d.ts.map +1 -0
- package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.js +67 -0
- package/dist/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.js.map +1 -0
- package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.d.ts +11 -0
- package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.d.ts.map +1 -0
- package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.js +61 -0
- package/dist/workflows/ask-user-confirm/ask-user-confirm-example.workflow.js.map +1 -0
- package/dist/workflows/ask-user-options/ask-user-options-example.workflow.d.ts +11 -0
- package/dist/workflows/ask-user-options/ask-user-options-example.workflow.d.ts.map +1 -0
- package/dist/workflows/ask-user-options/ask-user-options-example.workflow.js +68 -0
- package/dist/workflows/ask-user-options/ask-user-options-example.workflow.js.map +1 -0
- package/dist/workflows/ask-user-text/ask-user-text-example.workflow.d.ts +11 -0
- package/dist/workflows/ask-user-text/ask-user-text-example.workflow.d.ts.map +1 -0
- package/dist/workflows/ask-user-text/ask-user-text-example.workflow.js +60 -0
- package/dist/workflows/ask-user-text/ask-user-text-example.workflow.js.map +1 -0
- package/dist/workflows/confirm-content/confirm-content-example.workflow.d.ts +16 -0
- package/dist/workflows/confirm-content/confirm-content-example.workflow.d.ts.map +1 -0
- package/dist/workflows/confirm-content/confirm-content-example.workflow.js +68 -0
- package/dist/workflows/confirm-content/confirm-content-example.workflow.js.map +1 -0
- package/dist/workflows/inline-form/feedback-form-document.d.ts +10 -0
- package/dist/workflows/inline-form/feedback-form-document.d.ts.map +1 -0
- package/dist/workflows/inline-form/feedback-form-document.js +27 -0
- package/dist/workflows/inline-form/feedback-form-document.js.map +1 -0
- package/dist/workflows/inline-form/feedback-form-document.yaml +13 -0
- package/dist/workflows/inline-form/inline-form-example.workflow.d.ts +11 -0
- package/dist/workflows/inline-form/inline-form-example.workflow.d.ts.map +1 -0
- package/dist/workflows/inline-form/inline-form-example.workflow.js +54 -0
- package/dist/workflows/inline-form/inline-form-example.workflow.js.map +1 -0
- package/dist/workflows/meeting-notes/documents/meeting-notes-document.d.ts +8 -0
- package/dist/workflows/meeting-notes/documents/meeting-notes-document.d.ts.map +1 -0
- package/dist/workflows/meeting-notes/documents/meeting-notes-document.js +25 -0
- package/dist/workflows/meeting-notes/documents/meeting-notes-document.js.map +1 -0
- package/dist/workflows/meeting-notes/documents/meeting-notes-document.yaml +10 -0
- package/dist/workflows/meeting-notes/documents/optimized-notes-document.d.ts +16 -0
- package/dist/workflows/meeting-notes/documents/optimized-notes-document.d.ts.map +1 -0
- package/dist/workflows/meeting-notes/documents/optimized-notes-document.js +33 -0
- package/dist/workflows/meeting-notes/documents/optimized-notes-document.js.map +1 -0
- package/dist/workflows/meeting-notes/documents/optimized-notes-document.yaml +33 -0
- package/dist/workflows/meeting-notes/meeting-notes-example.workflow.d.ts +24 -0
- package/dist/workflows/meeting-notes/meeting-notes-example.workflow.d.ts.map +1 -0
- package/dist/workflows/meeting-notes/meeting-notes-example.workflow.js +86 -0
- package/dist/workflows/meeting-notes/meeting-notes-example.workflow.js.map +1 -0
- package/dist/workflows/meeting-notes/templates/extract-notes.md +5 -0
- package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.d.ts +8 -0
- package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.d.ts.map +1 -0
- package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.js +56 -0
- package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.js.map +1 -0
- package/dist/workflows/prompt-input-chat/prompt-input-chat-example.workflow.yaml +6 -0
- package/package.json +55 -0
- package/src/hitl-examples.module.ts +40 -0
- package/src/index.ts +16 -0
- package/src/workflows/agent-ask-clarification/agent-ask-clarification-example.workflow.ts +48 -0
- package/src/workflows/agent-ask-for-approval/agent-ask-for-approval-example.workflow.ts +47 -0
- package/src/workflows/ask-user-confirm/ask-user-confirm-example.workflow.ts +40 -0
- package/src/workflows/ask-user-options/ask-user-options-example.workflow.ts +48 -0
- package/src/workflows/ask-user-text/ask-user-text-example.workflow.ts +39 -0
- package/src/workflows/confirm-content/confirm-content-example.workflow.ts +49 -0
- package/src/workflows/inline-form/feedback-form-document.ts +16 -0
- package/src/workflows/inline-form/feedback-form-document.yaml +13 -0
- package/src/workflows/inline-form/inline-form-example.workflow.ts +37 -0
- package/src/workflows/meeting-notes/documents/meeting-notes-document.ts +14 -0
- package/src/workflows/meeting-notes/documents/meeting-notes-document.yaml +10 -0
- package/src/workflows/meeting-notes/documents/optimized-notes-document.ts +22 -0
- package/src/workflows/meeting-notes/documents/optimized-notes-document.yaml +33 -0
- package/src/workflows/meeting-notes/meeting-notes-example.workflow.ts +75 -0
- package/src/workflows/meeting-notes/templates/extract-notes.md +5 -0
- package/src/workflows/prompt-input-chat/prompt-input-chat-example.workflow.ts +30 -0
- package/src/workflows/prompt-input-chat/prompt-input-chat-example.workflow.yaml +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-user-options-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/ask-user-options/ask-user-options-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;AAEtD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAQvC,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,cAAc,CAAC,MAA+B;QAClD,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAC5B;YACE,QAAQ,EAAE,wCAAwC;YAClD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,WAAW;YACpB,iBAAiB,EAAE,IAAI;SACxB,EACD,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAC/F,CAAC;IACJ,CAAC;IAQK,AAAN,KAAK,CAAC,cAAc,CAAC,KAA8B,EAAE,KAA0C;QAC7F,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,MAAM,GAAG;SACtF,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAwC,CAAC,CAAC;IAClG,CAAC;CACF,CAAA;AAjCY,sEAA6B;AAMlC;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC;;;;mEAWxC;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,oBAAoB;QAC1B,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,YAAY;KACrB,CAAC;;;;mEASD;wCAhCU,6BAA6B;IANzC,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,mGAAmG;YACnG,+DAA+D;KAClE,CAAC;qCAE8C,sBAAe;GADlD,6BAA6B,CAiCzC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseWorkflow, type TransitionInput } from '@loopstack/common';
|
|
2
|
+
import { AskUserWorkflow } from '@loopstack/hitl';
|
|
3
|
+
export declare class AskUserTextExampleWorkflow extends BaseWorkflow {
|
|
4
|
+
private readonly askUserWorkflow;
|
|
5
|
+
constructor(askUserWorkflow: AskUserWorkflow);
|
|
6
|
+
askName(_state: Record<string, unknown>): Promise<void>;
|
|
7
|
+
answerReceived(state: Record<string, unknown>, input: TransitionInput<{
|
|
8
|
+
answer: string;
|
|
9
|
+
}>): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ask-user-text-example.workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-user-text-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/ask-user-text/ask-user-text-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,0BAA2B,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAKvD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAavC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAOhG"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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.AskUserTextExampleWorkflow = 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 AskUserTextExampleWorkflow = class AskUserTextExampleWorkflow extends common_1.BaseWorkflow {
|
|
18
|
+
askUserWorkflow;
|
|
19
|
+
constructor(askUserWorkflow) {
|
|
20
|
+
super();
|
|
21
|
+
this.askUserWorkflow = askUserWorkflow;
|
|
22
|
+
}
|
|
23
|
+
async askName(_state) {
|
|
24
|
+
await this.askUserWorkflow.run({ question: 'What is your name?' }, { callback: { transition: 'answerReceived' }, show: 'inline', label: 'Waiting for answer...' });
|
|
25
|
+
}
|
|
26
|
+
async answerReceived(state, input) {
|
|
27
|
+
await this.documentStore.save(common_1.MessageDocument, {
|
|
28
|
+
role: 'assistant',
|
|
29
|
+
text: `Hello, ${input.data.answer}!`,
|
|
30
|
+
});
|
|
31
|
+
this.setResult({ name: input.data.answer });
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.AskUserTextExampleWorkflow = AskUserTextExampleWorkflow;
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, common_1.Transition)({ to: 'waiting_for_answer' }),
|
|
37
|
+
__metadata("design:type", Function),
|
|
38
|
+
__metadata("design:paramtypes", [Object]),
|
|
39
|
+
__metadata("design:returntype", Promise)
|
|
40
|
+
], AskUserTextExampleWorkflow.prototype, "askName", null);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, common_1.Transition)({
|
|
43
|
+
from: 'waiting_for_answer',
|
|
44
|
+
to: 'end',
|
|
45
|
+
wait: true,
|
|
46
|
+
schema: AnswerSchema,
|
|
47
|
+
}),
|
|
48
|
+
__metadata("design:type", Function),
|
|
49
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
50
|
+
__metadata("design:returntype", Promise)
|
|
51
|
+
], AskUserTextExampleWorkflow.prototype, "answerReceived", null);
|
|
52
|
+
exports.AskUserTextExampleWorkflow = AskUserTextExampleWorkflow = __decorate([
|
|
53
|
+
(0, common_1.Workflow)({
|
|
54
|
+
title: 'HITL - Ask User Text Example',
|
|
55
|
+
description: 'Shortcut HITL: delegate a generic free-text ask to AskUserWorkflow. The parent only owns the ' +
|
|
56
|
+
'callback transition. Use the inline-form pattern instead when you need a structured form.',
|
|
57
|
+
}),
|
|
58
|
+
__metadata("design:paramtypes", [hitl_1.AskUserWorkflow])
|
|
59
|
+
], AskUserTextExampleWorkflow);
|
|
60
|
+
//# sourceMappingURL=ask-user-text-example.workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-user-text-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/ask-user-text/ask-user-text-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,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,qBAAY;IAC7B;IAA7B,YAA6B,eAAgC;QAC3D,KAAK,EAAE,CAAC;QADmB,oBAAe,GAAf,eAAe,CAAiB;IAE7D,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAC,MAA+B;QAC3C,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAC5B,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAClC,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAC/F,CAAC;IACJ,CAAC;IAQK,AAAN,KAAK,CAAC,cAAc,CAAC,KAA8B,EAAE,KAA0C;QAC7F,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAwC,CAAC,CAAC;IACpF,CAAC;CACF,CAAA;AA1BY,gEAA0B;AAM/B;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC;;;;yDAMxC;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,oBAAoB;QAC1B,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,YAAY;KACrB,CAAC;;;;gEAOD;qCAzBU,0BAA0B;IANtC,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,+FAA+F;YAC/F,2FAA2F;KAC9F,CAAC;qCAE8C,sBAAe;GADlD,0BAA0B,CA0BtC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseWorkflow, type TransitionInput } from '@loopstack/common';
|
|
3
|
+
import { ConfirmUserWorkflow } from '@loopstack/hitl';
|
|
4
|
+
declare const ConfirmSchema: z.ZodObject<{
|
|
5
|
+
confirmed: z.ZodBoolean;
|
|
6
|
+
markdown: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
type ConfirmData = z.infer<typeof ConfirmSchema>;
|
|
9
|
+
export declare class ConfirmContentExampleWorkflow extends BaseWorkflow {
|
|
10
|
+
private readonly confirmUserWorkflow;
|
|
11
|
+
constructor(confirmUserWorkflow: ConfirmUserWorkflow);
|
|
12
|
+
showSummary(_state: Record<string, unknown>): Promise<void>;
|
|
13
|
+
decisionReceived(state: Record<string, unknown>, input: TransitionInput<ConfirmData>): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=confirm-content-example.workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-content-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/confirm-content/confirm-content-example.workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAA+B,KAAK,eAAe,EAAY,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,QAAA,MAAM,aAAa;;;iBAA6D,CAAC;AACjF,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAWjD,qBAMa,6BAA8B,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,mBAAmB;IAK/D,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAa3C,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC;CAO3F"}
|
|
@@ -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.ConfirmContentExampleWorkflow = void 0;
|
|
13
|
+
const zod_1 = require("zod");
|
|
14
|
+
const common_1 = require("@loopstack/common");
|
|
15
|
+
const hitl_1 = require("@loopstack/hitl");
|
|
16
|
+
const ConfirmSchema = zod_1.z.object({ confirmed: zod_1.z.boolean(), markdown: zod_1.z.string() });
|
|
17
|
+
const DEPLOY_SUMMARY = `## Ready to deploy?
|
|
18
|
+
|
|
19
|
+
We're about to deploy **v1.2.3** to production.
|
|
20
|
+
|
|
21
|
+
- 3 commits since last release
|
|
22
|
+
- Smoke tests passing
|
|
23
|
+
|
|
24
|
+
Proceed?`;
|
|
25
|
+
let ConfirmContentExampleWorkflow = class ConfirmContentExampleWorkflow extends common_1.BaseWorkflow {
|
|
26
|
+
confirmUserWorkflow;
|
|
27
|
+
constructor(confirmUserWorkflow) {
|
|
28
|
+
super();
|
|
29
|
+
this.confirmUserWorkflow = confirmUserWorkflow;
|
|
30
|
+
}
|
|
31
|
+
async showSummary(_state) {
|
|
32
|
+
await this.confirmUserWorkflow.run({ markdown: DEPLOY_SUMMARY }, { callback: { transition: 'decisionReceived' }, show: 'inline', label: 'Waiting for confirmation...' });
|
|
33
|
+
}
|
|
34
|
+
async decisionReceived(state, input) {
|
|
35
|
+
await this.documentStore.save(common_1.MessageDocument, {
|
|
36
|
+
role: 'assistant',
|
|
37
|
+
text: input.data.confirmed ? 'User confirmed — proceeding with deploy.' : 'User denied — aborting deploy.',
|
|
38
|
+
});
|
|
39
|
+
this.setResult({ confirmed: input.data.confirmed });
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.ConfirmContentExampleWorkflow = ConfirmContentExampleWorkflow;
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, common_1.Transition)({ to: 'waiting_for_confirmation' }),
|
|
45
|
+
__metadata("design:type", Function),
|
|
46
|
+
__metadata("design:paramtypes", [Object]),
|
|
47
|
+
__metadata("design:returntype", Promise)
|
|
48
|
+
], ConfirmContentExampleWorkflow.prototype, "showSummary", null);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, common_1.Transition)({
|
|
51
|
+
from: 'waiting_for_confirmation',
|
|
52
|
+
to: 'end',
|
|
53
|
+
wait: true,
|
|
54
|
+
schema: ConfirmSchema,
|
|
55
|
+
}),
|
|
56
|
+
__metadata("design:type", Function),
|
|
57
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
58
|
+
__metadata("design:returntype", Promise)
|
|
59
|
+
], ConfirmContentExampleWorkflow.prototype, "decisionReceived", null);
|
|
60
|
+
exports.ConfirmContentExampleWorkflow = ConfirmContentExampleWorkflow = __decorate([
|
|
61
|
+
(0, common_1.Workflow)({
|
|
62
|
+
title: 'HITL - Confirm Content Example',
|
|
63
|
+
description: 'Shortcut HITL: hand a pre-rendered markdown blob to ConfirmUserWorkflow for a user-facing review/confirm. ' +
|
|
64
|
+
'Useful for showing a release plan, a summary, or a code-diff for explicit approval.',
|
|
65
|
+
}),
|
|
66
|
+
__metadata("design:paramtypes", [hitl_1.ConfirmUserWorkflow])
|
|
67
|
+
], ConfirmContentExampleWorkflow);
|
|
68
|
+
//# sourceMappingURL=confirm-content-example.workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-content-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/confirm-content/confirm-content-example.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAwB;AACxB,8CAA8G;AAC9G,0CAAsD;AAEtD,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAGjF,MAAM,cAAc,GAAG;;;;;;;SAOd,CAAC;AAQH,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,qBAAY;IAChC;IAA7B,YAA6B,mBAAwC;QACnE,KAAK,EAAE,CAAC;QADmB,wBAAmB,GAAnB,mBAAmB,CAAqB;IAErE,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAC,MAA+B;QAC/C,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAChC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE,CACvG,CAAC;IACJ,CAAC;IAQK,AAAN,KAAK,CAAC,gBAAgB,CAAC,KAA8B,EAAE,KAAmC;QACxF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,gCAAgC;SAC3G,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAwC,CAAC,CAAC;IAC5F,CAAC;CACF,CAAA;AA1BY,sEAA6B;AAMlC;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,CAAC;;;;gEAM9C;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,0BAA0B;QAChC,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,aAAa;KACtB,CAAC;;;;qEAOD;wCAzBU,6BAA6B;IANzC,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,4GAA4G;YAC5G,qFAAqF;KACxF,CAAC;qCAEkD,0BAAmB;GAD1D,6BAA6B,CA0BzC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const FeedbackFormDocumentSchema: z.ZodObject<{
|
|
3
|
+
rating: z.ZodNumber;
|
|
4
|
+
comment: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export declare class FeedbackFormDocument {
|
|
7
|
+
rating: number;
|
|
8
|
+
comment: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=feedback-form-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-form-document.d.ts","sourceRoot":"","sources":["../../../src/workflows/inline-form/feedback-form-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B;;;iBAGrC,CAAC;AAEH,qBAIa,oBAAoB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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.FeedbackFormDocument = exports.FeedbackFormDocumentSchema = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const common_1 = require("@loopstack/common");
|
|
12
|
+
exports.FeedbackFormDocumentSchema = zod_1.z.object({
|
|
13
|
+
rating: zod_1.z.number().min(1).max(5),
|
|
14
|
+
comment: zod_1.z.string(),
|
|
15
|
+
});
|
|
16
|
+
let FeedbackFormDocument = class FeedbackFormDocument {
|
|
17
|
+
rating;
|
|
18
|
+
comment;
|
|
19
|
+
};
|
|
20
|
+
exports.FeedbackFormDocument = FeedbackFormDocument;
|
|
21
|
+
exports.FeedbackFormDocument = FeedbackFormDocument = __decorate([
|
|
22
|
+
(0, common_1.Document)({
|
|
23
|
+
schema: exports.FeedbackFormDocumentSchema,
|
|
24
|
+
widget: './feedback-form-document.yaml',
|
|
25
|
+
})
|
|
26
|
+
], FeedbackFormDocument);
|
|
27
|
+
//# sourceMappingURL=feedback-form-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-form-document.js","sourceRoot":"","sources":["../../../src/workflows/inline-form/feedback-form-document.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6BAAwB;AACxB,8CAA6C;AAEhC,QAAA,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAMI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,MAAM,CAAS;IACf,OAAO,CAAS;CACjB,CAAA;AAHY,oDAAoB;+BAApB,oBAAoB;IAJhC,IAAA,iBAAQ,EAAC;QACR,MAAM,EAAE,kCAA0B;QAClC,MAAM,EAAE,+BAA+B;KACxC,CAAC;GACW,oBAAoB,CAGhC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseWorkflow } from '@loopstack/common';
|
|
3
|
+
import type { TransitionInput } from '@loopstack/common';
|
|
4
|
+
import { FeedbackFormDocumentSchema } from './feedback-form-document.js';
|
|
5
|
+
type FeedbackPayload = z.infer<typeof FeedbackFormDocumentSchema>;
|
|
6
|
+
export declare class InlineFormExampleWorkflow extends BaseWorkflow {
|
|
7
|
+
showForm(_state: Record<string, unknown>): Promise<void>;
|
|
8
|
+
submitFeedback(state: Record<string, unknown>, input: TransitionInput<FeedbackPayload>): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=inline-form-example.workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-form-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/inline-form/inline-form-example.workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAyC,MAAM,mBAAmB,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAwB,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAE/F,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAElE,qBAMa,yBAA0B,SAAQ,YAAY;IAEnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUxC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,eAAe,CAAC;CAW7F"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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.InlineFormExampleWorkflow = void 0;
|
|
13
|
+
const common_1 = require("@loopstack/common");
|
|
14
|
+
const feedback_form_document_js_1 = require("./feedback-form-document.js");
|
|
15
|
+
let InlineFormExampleWorkflow = class InlineFormExampleWorkflow extends common_1.BaseWorkflow {
|
|
16
|
+
async showForm(_state) {
|
|
17
|
+
await this.documentStore.save(feedback_form_document_js_1.FeedbackFormDocument, { rating: 3, comment: '' }, { key: 'feedback' });
|
|
18
|
+
}
|
|
19
|
+
async submitFeedback(state, input) {
|
|
20
|
+
const payload = input.data;
|
|
21
|
+
await this.documentStore.save(feedback_form_document_js_1.FeedbackFormDocument, payload, { key: 'feedback' });
|
|
22
|
+
await this.documentStore.save(common_1.MessageDocument, {
|
|
23
|
+
role: 'assistant',
|
|
24
|
+
text: `Thanks for your feedback! Rating: ${payload.rating}/5. Comment: ${payload.comment}`,
|
|
25
|
+
});
|
|
26
|
+
this.setResult({ feedback: payload });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.InlineFormExampleWorkflow = InlineFormExampleWorkflow;
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, common_1.Transition)({ to: 'waiting_for_feedback' }),
|
|
32
|
+
__metadata("design:type", Function),
|
|
33
|
+
__metadata("design:paramtypes", [Object]),
|
|
34
|
+
__metadata("design:returntype", Promise)
|
|
35
|
+
], InlineFormExampleWorkflow.prototype, "showForm", null);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, common_1.Transition)({
|
|
38
|
+
from: 'waiting_for_feedback',
|
|
39
|
+
to: 'end',
|
|
40
|
+
wait: true,
|
|
41
|
+
schema: feedback_form_document_js_1.FeedbackFormDocumentSchema,
|
|
42
|
+
}),
|
|
43
|
+
__metadata("design:type", Function),
|
|
44
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
45
|
+
__metadata("design:returntype", Promise)
|
|
46
|
+
], InlineFormExampleWorkflow.prototype, "submitFeedback", null);
|
|
47
|
+
exports.InlineFormExampleWorkflow = InlineFormExampleWorkflow = __decorate([
|
|
48
|
+
(0, common_1.Workflow)({
|
|
49
|
+
title: 'HITL - Inline Form Example',
|
|
50
|
+
description: 'Predefined-workflow HITL: the workflow owns a custom Document with a form widget. ' +
|
|
51
|
+
'The form button triggers a wait:true transition on the same workflow with the form payload as its schema.',
|
|
52
|
+
})
|
|
53
|
+
], InlineFormExampleWorkflow);
|
|
54
|
+
//# sourceMappingURL=inline-form-example.workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-form-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/inline-form/inline-form-example.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAAwF;AAExF,2EAA+F;AAUxF,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,qBAAY;IAEnD,AAAN,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gDAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACvG,CAAC;IAQK,AAAN,KAAK,CAAC,cAAc,CAAC,KAA8B,EAAE,KAAuC;QAC1F,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gDAAoB,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAElF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAe,EAAE;YAC7C,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,qCAAqC,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,OAAO,EAAE;SAC3F,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAwC,CAAC,CAAC;IAC9E,CAAC;CACF,CAAA;AAvBY,8DAAyB;AAE9B;IADL,IAAA,mBAAU,EAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,CAAC;;;;yDAG1C;AAQK;IANL,IAAA,mBAAU,EAAC;QACV,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,sDAA0B;KACnC,CAAC;;;;+DAWD;oCAtBU,yBAAyB;IANrC,IAAA,iBAAQ,EAAC;QACR,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,oFAAoF;YACpF,2GAA2G;KAC9G,CAAC;GACW,yBAAyB,CAuBrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meeting-notes-document.d.ts","sourceRoot":"","sources":["../../../../src/workflows/meeting-notes/documents/meeting-notes-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B;;iBAErC,CAAC;AAEH,qBAIa,oBAAoB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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.MeetingNotesDocument = exports.MeetingNotesDocumentSchema = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const common_1 = require("@loopstack/common");
|
|
12
|
+
exports.MeetingNotesDocumentSchema = zod_1.z.object({
|
|
13
|
+
text: zod_1.z.string(),
|
|
14
|
+
});
|
|
15
|
+
let MeetingNotesDocument = class MeetingNotesDocument {
|
|
16
|
+
text;
|
|
17
|
+
};
|
|
18
|
+
exports.MeetingNotesDocument = MeetingNotesDocument;
|
|
19
|
+
exports.MeetingNotesDocument = MeetingNotesDocument = __decorate([
|
|
20
|
+
(0, common_1.Document)({
|
|
21
|
+
schema: exports.MeetingNotesDocumentSchema,
|
|
22
|
+
widget: './meeting-notes-document.yaml',
|
|
23
|
+
})
|
|
24
|
+
], MeetingNotesDocument);
|
|
25
|
+
//# sourceMappingURL=meeting-notes-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meeting-notes-document.js","sourceRoot":"","sources":["../../../../src/workflows/meeting-notes/documents/meeting-notes-document.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6BAAwB;AACxB,8CAA6C;AAEhC,QAAA,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAMI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,IAAI,CAAS;CACd,CAAA;AAFY,oDAAoB;+BAApB,oBAAoB;IAJhC,IAAA,iBAAQ,EAAC;QACR,MAAM,EAAE,kCAA0B;QAClC,MAAM,EAAE,+BAA+B;KACxC,CAAC;GACW,oBAAoB,CAEhC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const OptimizedMeetingNotesDocumentSchema: z.ZodObject<{
|
|
3
|
+
date: z.ZodString;
|
|
4
|
+
summary: z.ZodString;
|
|
5
|
+
participants: z.ZodArray<z.ZodString>;
|
|
6
|
+
decisions: z.ZodArray<z.ZodString>;
|
|
7
|
+
actionItems: z.ZodArray<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export declare class OptimizedNotesDocument {
|
|
10
|
+
date: string;
|
|
11
|
+
summary: string;
|
|
12
|
+
participants: string[];
|
|
13
|
+
decisions: string[];
|
|
14
|
+
actionItems: string[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=optimized-notes-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimized-notes-document.d.ts","sourceRoot":"","sources":["../../../../src/workflows/meeting-notes/documents/optimized-notes-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mCAAmC;;;;;;iBAM9C,CAAC;AAEH,qBAIa,sBAAsB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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.OptimizedNotesDocument = exports.OptimizedMeetingNotesDocumentSchema = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const common_1 = require("@loopstack/common");
|
|
12
|
+
exports.OptimizedMeetingNotesDocumentSchema = zod_1.z.object({
|
|
13
|
+
date: zod_1.z.string(),
|
|
14
|
+
summary: zod_1.z.string(),
|
|
15
|
+
participants: zod_1.z.array(zod_1.z.string()),
|
|
16
|
+
decisions: zod_1.z.array(zod_1.z.string()),
|
|
17
|
+
actionItems: zod_1.z.array(zod_1.z.string()),
|
|
18
|
+
});
|
|
19
|
+
let OptimizedNotesDocument = class OptimizedNotesDocument {
|
|
20
|
+
date;
|
|
21
|
+
summary;
|
|
22
|
+
participants;
|
|
23
|
+
decisions;
|
|
24
|
+
actionItems;
|
|
25
|
+
};
|
|
26
|
+
exports.OptimizedNotesDocument = OptimizedNotesDocument;
|
|
27
|
+
exports.OptimizedNotesDocument = OptimizedNotesDocument = __decorate([
|
|
28
|
+
(0, common_1.Document)({
|
|
29
|
+
schema: exports.OptimizedMeetingNotesDocumentSchema,
|
|
30
|
+
widget: './optimized-notes-document.yaml',
|
|
31
|
+
})
|
|
32
|
+
], OptimizedNotesDocument);
|
|
33
|
+
//# sourceMappingURL=optimized-notes-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimized-notes-document.js","sourceRoot":"","sources":["../../../../src/workflows/meeting-notes/documents/optimized-notes-document.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6BAAwB;AACxB,8CAA6C;AAEhC,QAAA,mCAAmC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1D,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AAMI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,YAAY,CAAW;IACvB,SAAS,CAAW;IACpB,WAAW,CAAW;CACvB,CAAA;AANY,wDAAsB;iCAAtB,sBAAsB;IAJlC,IAAA,iBAAQ,EAAC;QACR,MAAM,EAAE,2CAAmC;QAC3C,MAAM,EAAE,iCAAiC;KAC1C,CAAC;GACW,sBAAsB,CAMlC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
widget: form
|
|
2
|
+
options:
|
|
3
|
+
order:
|
|
4
|
+
- date
|
|
5
|
+
- summary
|
|
6
|
+
- participants
|
|
7
|
+
- decisions
|
|
8
|
+
- actionItems
|
|
9
|
+
properties:
|
|
10
|
+
date:
|
|
11
|
+
title: Date
|
|
12
|
+
summary:
|
|
13
|
+
title: Summary
|
|
14
|
+
widget: textarea
|
|
15
|
+
participants:
|
|
16
|
+
title: Participants
|
|
17
|
+
collapsed: true
|
|
18
|
+
items:
|
|
19
|
+
title: Participant
|
|
20
|
+
decisions:
|
|
21
|
+
title: Decisions
|
|
22
|
+
collapsed: true
|
|
23
|
+
items:
|
|
24
|
+
title: Decision
|
|
25
|
+
actionItems:
|
|
26
|
+
title: Action Items
|
|
27
|
+
collapsed: true
|
|
28
|
+
items:
|
|
29
|
+
title: Action Item
|
|
30
|
+
actions:
|
|
31
|
+
- type: button
|
|
32
|
+
transition: confirm
|
|
33
|
+
label: 'Confirm'
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseWorkflow } from '@loopstack/common';
|
|
3
|
+
import type { RunContext, TransitionInput } from '@loopstack/common';
|
|
4
|
+
import { LlmGenerateObjectTool } from '@loopstack/llm-provider-module';
|
|
5
|
+
import { MeetingNotesDocumentSchema } from './documents/meeting-notes-document';
|
|
6
|
+
import { OptimizedMeetingNotesDocumentSchema } from './documents/optimized-notes-document';
|
|
7
|
+
interface MeetingNotesState {
|
|
8
|
+
meetingNotes?: z.infer<typeof MeetingNotesDocumentSchema>;
|
|
9
|
+
optimizedNotes?: z.infer<typeof OptimizedMeetingNotesDocumentSchema>;
|
|
10
|
+
}
|
|
11
|
+
declare const MeetingNotesArgsSchema: z.ZodObject<{
|
|
12
|
+
inputText: z.ZodDefault<z.ZodString>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
type MeetingNotesArgs = z.infer<typeof MeetingNotesArgsSchema>;
|
|
15
|
+
export declare class MeetingNotesExampleWorkflow extends BaseWorkflow<MeetingNotesArgs> {
|
|
16
|
+
private readonly llmGenerateObject;
|
|
17
|
+
constructor(llmGenerateObject: LlmGenerateObjectTool);
|
|
18
|
+
createForm(state: MeetingNotesState, ctx: RunContext<MeetingNotesArgs>): Promise<void>;
|
|
19
|
+
userResponse(state: MeetingNotesState, input: TransitionInput<z.infer<typeof MeetingNotesDocumentSchema>>): Promise<void>;
|
|
20
|
+
optimizeNotes(state: MeetingNotesState): Promise<void>;
|
|
21
|
+
confirm(state: MeetingNotesState, input: TransitionInput<z.infer<typeof OptimizedMeetingNotesDocumentSchema>>): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=meeting-notes-example.workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meeting-notes-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/meeting-notes/meeting-notes-example.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAwB,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAwB,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACtG,OAAO,EAAE,mCAAmC,EAA0B,MAAM,sCAAsC,CAAC;AAEnH,UAAU,iBAAiB;IACzB,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;IAC1D,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;CACtE;AAED,QAAA,MAAM,sBAAsB;;iBAM1B,CAAC;AAEH,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE/D,qBAKa,2BAA4B,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IACjE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,qBAAqB;IAK/D,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,UAAU,CAAC,gBAAgB,CAAC;IAStE,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;IAMzG,aAAa,CAAC,KAAK,EAAE,iBAAiB;IAmBtC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;CAMpH"}
|
|
@@ -0,0 +1,86 @@
|
|
|
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.MeetingNotesExampleWorkflow = void 0;
|
|
13
|
+
const node_path_1 = require("node:path");
|
|
14
|
+
const zod_1 = require("zod");
|
|
15
|
+
const common_1 = require("@loopstack/common");
|
|
16
|
+
const llm_provider_module_1 = require("@loopstack/llm-provider-module");
|
|
17
|
+
const meeting_notes_document_1 = require("./documents/meeting-notes-document");
|
|
18
|
+
const optimized_notes_document_1 = require("./documents/optimized-notes-document");
|
|
19
|
+
const MeetingNotesArgsSchema = zod_1.z.object({
|
|
20
|
+
inputText: zod_1.z
|
|
21
|
+
.string()
|
|
22
|
+
.default('- meeting 1.1.2025\n- budget: need 2 cut costs sarah said\n- hire new person?? --> marketing\n- vendor pricing - follow up needed by anna'),
|
|
23
|
+
});
|
|
24
|
+
let MeetingNotesExampleWorkflow = class MeetingNotesExampleWorkflow extends common_1.BaseWorkflow {
|
|
25
|
+
llmGenerateObject;
|
|
26
|
+
constructor(llmGenerateObject) {
|
|
27
|
+
super();
|
|
28
|
+
this.llmGenerateObject = llmGenerateObject;
|
|
29
|
+
}
|
|
30
|
+
async createForm(state, ctx) {
|
|
31
|
+
await this.documentStore.save(meeting_notes_document_1.MeetingNotesDocument, { text: `Unstructured Notes:\n\n${ctx.args.inputText}` }, { key: 'input' });
|
|
32
|
+
}
|
|
33
|
+
async userResponse(state, input) {
|
|
34
|
+
const result = await this.documentStore.save(meeting_notes_document_1.MeetingNotesDocument, input.data, { key: 'input' });
|
|
35
|
+
this.assignState({ meetingNotes: result.content });
|
|
36
|
+
}
|
|
37
|
+
async optimizeNotes(state) {
|
|
38
|
+
const result = await this.llmGenerateObject.call({
|
|
39
|
+
outputSchema: optimized_notes_document_1.OptimizedMeetingNotesDocumentSchema,
|
|
40
|
+
prompt: this.render((0, node_path_1.join)(__dirname, 'templates', 'extract-notes.md'), {
|
|
41
|
+
text: state.meetingNotes?.text,
|
|
42
|
+
}),
|
|
43
|
+
}, { config: { provider: 'claude', model: 'claude-sonnet-4-6' } });
|
|
44
|
+
await this.documentStore.save(optimized_notes_document_1.OptimizedNotesDocument, result.data.data, { key: 'final' });
|
|
45
|
+
}
|
|
46
|
+
async confirm(state, input) {
|
|
47
|
+
const result = await this.documentStore.save(optimized_notes_document_1.OptimizedNotesDocument, input.data, { key: 'final' });
|
|
48
|
+
this.setResult({
|
|
49
|
+
optimizedNotes: result.content,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.MeetingNotesExampleWorkflow = MeetingNotesExampleWorkflow;
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, common_1.Transition)({ to: 'waiting_for_response' }),
|
|
56
|
+
__metadata("design:type", Function),
|
|
57
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
58
|
+
__metadata("design:returntype", Promise)
|
|
59
|
+
], MeetingNotesExampleWorkflow.prototype, "createForm", null);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, common_1.Transition)({ from: 'waiting_for_response', to: 'response_received', wait: true, schema: meeting_notes_document_1.MeetingNotesDocumentSchema }),
|
|
62
|
+
__metadata("design:type", Function),
|
|
63
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
64
|
+
__metadata("design:returntype", Promise)
|
|
65
|
+
], MeetingNotesExampleWorkflow.prototype, "userResponse", null);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, common_1.Transition)({ from: 'response_received', to: 'notes_optimized' }),
|
|
68
|
+
__metadata("design:type", Function),
|
|
69
|
+
__metadata("design:paramtypes", [Object]),
|
|
70
|
+
__metadata("design:returntype", Promise)
|
|
71
|
+
], MeetingNotesExampleWorkflow.prototype, "optimizeNotes", null);
|
|
72
|
+
__decorate([
|
|
73
|
+
(0, common_1.Transition)({ from: 'notes_optimized', to: 'end', wait: true, schema: optimized_notes_document_1.OptimizedMeetingNotesDocumentSchema }),
|
|
74
|
+
__metadata("design:type", Function),
|
|
75
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
76
|
+
__metadata("design:returntype", Promise)
|
|
77
|
+
], MeetingNotesExampleWorkflow.prototype, "confirm", null);
|
|
78
|
+
exports.MeetingNotesExampleWorkflow = MeetingNotesExampleWorkflow = __decorate([
|
|
79
|
+
(0, common_1.Workflow)({
|
|
80
|
+
title: 'HITL - Meeting Notes Example',
|
|
81
|
+
description: 'A demo workflow showing how to use AI to structure meeting notes, with HITL review steps.',
|
|
82
|
+
schema: MeetingNotesArgsSchema,
|
|
83
|
+
}),
|
|
84
|
+
__metadata("design:paramtypes", [llm_provider_module_1.LlmGenerateObjectTool])
|
|
85
|
+
], MeetingNotesExampleWorkflow);
|
|
86
|
+
//# sourceMappingURL=meeting-notes-example.workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meeting-notes-example.workflow.js","sourceRoot":"","sources":["../../../src/workflows/meeting-notes/meeting-notes-example.workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseWorkflow } from '@loopstack/common';
|
|
2
|
+
import type { TransitionInput } from '@loopstack/common';
|
|
3
|
+
export declare class PromptInputChatExampleWorkflow extends BaseWorkflow {
|
|
4
|
+
greet(_state: Record<string, unknown>): Promise<void>;
|
|
5
|
+
userMessage(state: Record<string, unknown>, input: TransitionInput<string>): Promise<void>;
|
|
6
|
+
loop(_state: Record<string, unknown>): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=prompt-input-chat-example.workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-input-chat-example.workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/prompt-input-chat/prompt-input-chat-example.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyC,MAAM,mBAAmB,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,qBAOa,8BAA+B,SAAQ,YAAY;IAExD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQrC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;IAOhF,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CACrC"}
|