@leanmcp/elicitation 0.1.4-alpha.6.6dae082 → 0.1.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 +70 -76
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,32 +52,32 @@ npm install @leanmcp/elicitation @leanmcp/core
|
|
|
52
52
|
### Simple Form Elicitation
|
|
53
53
|
|
|
54
54
|
```typescript
|
|
55
|
-
import { Tool } from
|
|
56
|
-
import { Elicitation } from
|
|
55
|
+
import { Tool } from "@leanmcp/core";
|
|
56
|
+
import { Elicitation } from "@leanmcp/elicitation";
|
|
57
57
|
|
|
58
58
|
class SlackService {
|
|
59
|
-
@Tool({ description:
|
|
59
|
+
@Tool({ description: "Create a new Slack channel" })
|
|
60
60
|
@Elicitation({
|
|
61
|
-
title:
|
|
62
|
-
description:
|
|
61
|
+
title: "Create Channel",
|
|
62
|
+
description: "Please provide channel details",
|
|
63
63
|
fields: [
|
|
64
64
|
{
|
|
65
|
-
name:
|
|
66
|
-
label:
|
|
67
|
-
type:
|
|
65
|
+
name: "channelName",
|
|
66
|
+
label: "Channel Name",
|
|
67
|
+
type: "text",
|
|
68
68
|
required: true,
|
|
69
69
|
validation: {
|
|
70
|
-
pattern:
|
|
71
|
-
errorMessage:
|
|
72
|
-
}
|
|
70
|
+
pattern: "^[a-z0-9-]+$",
|
|
71
|
+
errorMessage: "Must be lowercase alphanumeric with hyphens"
|
|
72
|
+
}
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
|
-
name:
|
|
76
|
-
label:
|
|
77
|
-
type:
|
|
78
|
-
defaultValue: false
|
|
79
|
-
}
|
|
80
|
-
]
|
|
75
|
+
name: "isPrivate",
|
|
76
|
+
label: "Private Channel",
|
|
77
|
+
type: "boolean",
|
|
78
|
+
defaultValue: false
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
81
|
})
|
|
82
82
|
async createChannel(args: { channelName: string; isPrivate: boolean }) {
|
|
83
83
|
return { success: true, channelName: args.channelName };
|
|
@@ -101,26 +101,29 @@ class SlackService {
|
|
|
101
101
|
For more complex forms, use `ElicitationFormBuilder`:
|
|
102
102
|
|
|
103
103
|
```typescript
|
|
104
|
-
import { Tool } from
|
|
105
|
-
import { Elicitation, ElicitationFormBuilder, validation } from
|
|
104
|
+
import { Tool } from "@leanmcp/core";
|
|
105
|
+
import { Elicitation, ElicitationFormBuilder, validation } from "@leanmcp/elicitation";
|
|
106
106
|
|
|
107
107
|
class UserService {
|
|
108
|
-
@Tool({ description:
|
|
108
|
+
@Tool({ description: "Create user account" })
|
|
109
109
|
@Elicitation({
|
|
110
|
-
builder: () =>
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
110
|
+
builder: () => new ElicitationFormBuilder()
|
|
111
|
+
.title("User Registration")
|
|
112
|
+
.description("Create a new user account")
|
|
113
|
+
.addEmailField("email", "Email Address", { required: true })
|
|
114
|
+
.addTextField("username", "Username", {
|
|
115
|
+
required: true,
|
|
116
|
+
validation: validation()
|
|
117
|
+
.minLength(3)
|
|
118
|
+
.maxLength(20)
|
|
119
|
+
.pattern("^[a-zA-Z0-9_]+$")
|
|
120
|
+
.build()
|
|
121
|
+
})
|
|
122
|
+
.addSelectField("role", "Role", [
|
|
123
|
+
{ label: "Admin", value: "admin" },
|
|
124
|
+
{ label: "User", value: "user" }
|
|
125
|
+
])
|
|
126
|
+
.build()
|
|
124
127
|
})
|
|
125
128
|
async createUser(args: any) {
|
|
126
129
|
return { success: true, email: args.email };
|
|
@@ -130,22 +133,22 @@ class UserService {
|
|
|
130
133
|
|
|
131
134
|
### Builder Methods
|
|
132
135
|
|
|
133
|
-
| Method
|
|
134
|
-
|
|
135
|
-
| `title(string)`
|
|
136
|
-
| `description(string)`
|
|
137
|
-
| `condition(fn)`
|
|
138
|
-
| `addTextField(name, label, opts?)`
|
|
139
|
-
| `addTextAreaField(name, label, opts?)`
|
|
140
|
-
| `addNumberField(name, label, opts?)`
|
|
141
|
-
| `addBooleanField(name, label, opts?)`
|
|
142
|
-
| `addSelectField(name, label, options, opts?)`
|
|
143
|
-
| `addMultiSelectField(name, label, options, opts?)` | Add multi-select
|
|
144
|
-
| `addEmailField(name, label, opts?)`
|
|
145
|
-
| `addUrlField(name, label, opts?)`
|
|
146
|
-
| `addDateField(name, label, opts?)`
|
|
147
|
-
| `addCustomField(field)`
|
|
148
|
-
| `build()`
|
|
136
|
+
| Method | Description |
|
|
137
|
+
|--------|-------------|
|
|
138
|
+
| `title(string)` | Set form title |
|
|
139
|
+
| `description(string)` | Set form description |
|
|
140
|
+
| `condition(fn)` | Set condition for elicitation |
|
|
141
|
+
| `addTextField(name, label, opts?)` | Add text input |
|
|
142
|
+
| `addTextAreaField(name, label, opts?)` | Add textarea |
|
|
143
|
+
| `addNumberField(name, label, opts?)` | Add number input |
|
|
144
|
+
| `addBooleanField(name, label, opts?)` | Add checkbox |
|
|
145
|
+
| `addSelectField(name, label, options, opts?)` | Add dropdown |
|
|
146
|
+
| `addMultiSelectField(name, label, options, opts?)` | Add multi-select |
|
|
147
|
+
| `addEmailField(name, label, opts?)` | Add email input |
|
|
148
|
+
| `addUrlField(name, label, opts?)` | Add URL input |
|
|
149
|
+
| `addDateField(name, label, opts?)` | Add date picker |
|
|
150
|
+
| `addCustomField(field)` | Add custom field |
|
|
151
|
+
| `build()` | Build final config |
|
|
149
152
|
|
|
150
153
|
---
|
|
151
154
|
|
|
@@ -225,17 +228,17 @@ async deployApp(args: any) {
|
|
|
225
228
|
|
|
226
229
|
## Field Types
|
|
227
230
|
|
|
228
|
-
| Type
|
|
229
|
-
|
|
230
|
-
| `text`
|
|
231
|
-
| `textarea`
|
|
232
|
-
| `number`
|
|
233
|
-
| `boolean`
|
|
234
|
-
| `select`
|
|
235
|
-
| `multiselect` | Multi-select
|
|
236
|
-
| `email`
|
|
237
|
-
| `url`
|
|
238
|
-
| `date`
|
|
231
|
+
| Type | Description |
|
|
232
|
+
|------|-------------|
|
|
233
|
+
| `text` | Single-line text input |
|
|
234
|
+
| `textarea` | Multi-line text area |
|
|
235
|
+
| `number` | Numeric input |
|
|
236
|
+
| `boolean` | Checkbox |
|
|
237
|
+
| `select` | Dropdown (single choice) |
|
|
238
|
+
| `multiselect` | Multi-select |
|
|
239
|
+
| `email` | Email input |
|
|
240
|
+
| `url` | URL input |
|
|
241
|
+
| `date` | Date picker |
|
|
239
242
|
|
|
240
243
|
---
|
|
241
244
|
|
|
@@ -260,15 +263,15 @@ async deployApp(args: any) {
|
|
|
260
263
|
### Using ValidationBuilder
|
|
261
264
|
|
|
262
265
|
```typescript
|
|
263
|
-
import { validation } from
|
|
266
|
+
import { validation } from "@leanmcp/elicitation";
|
|
264
267
|
|
|
265
268
|
validation()
|
|
266
269
|
.minLength(8)
|
|
267
270
|
.maxLength(100)
|
|
268
|
-
.pattern(
|
|
269
|
-
.customValidator((value) => value !==
|
|
270
|
-
.errorMessage(
|
|
271
|
-
.build()
|
|
271
|
+
.pattern("^[a-zA-Z0-9]+$")
|
|
272
|
+
.customValidator((value) => value !== "admin")
|
|
273
|
+
.errorMessage("Invalid input")
|
|
274
|
+
.build()
|
|
272
275
|
```
|
|
273
276
|
|
|
274
277
|
---
|
|
@@ -294,16 +297,7 @@ interface ElicitationConfig {
|
|
|
294
297
|
interface ElicitationField {
|
|
295
298
|
name: string;
|
|
296
299
|
label: string;
|
|
297
|
-
type:
|
|
298
|
-
| 'text'
|
|
299
|
-
| 'number'
|
|
300
|
-
| 'boolean'
|
|
301
|
-
| 'select'
|
|
302
|
-
| 'multiselect'
|
|
303
|
-
| 'date'
|
|
304
|
-
| 'email'
|
|
305
|
-
| 'url'
|
|
306
|
-
| 'textarea';
|
|
300
|
+
type: 'text' | 'number' | 'boolean' | 'select' | 'multiselect' | 'date' | 'email' | 'url' | 'textarea';
|
|
307
301
|
description?: string;
|
|
308
302
|
required?: boolean;
|
|
309
303
|
defaultValue?: any;
|
package/package.json
CHANGED