@elizaos/plugin-form 2.0.0-alpha.1 → 2.0.0-alpha.2

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/dist/intent.d.ts DELETED
@@ -1,116 +0,0 @@
1
- /**
2
- * @module intent
3
- * @description Two-tier intent detection for form interactions
4
- *
5
- * ## Design Rationale
6
- *
7
- * Intent detection determines what the user wants to do:
8
- * - Fill form fields? Submit? Cancel? Undo?
9
- *
10
- * We use a two-tier approach:
11
- *
12
- * ### Tier 1: Fast Path (English Keywords)
13
- *
14
- * Simple regex matching for common English phrases. This is:
15
- * - **Fast**: No LLM call, instant response
16
- * - **Reliable**: Simple patterns rarely fail
17
- * - **Limited**: Only works for English, explicit commands
18
- *
19
- * Used for: "submit", "undo", "cancel", "skip", etc.
20
- *
21
- * ### Tier 2: LLM Fallback
22
- *
23
- * When fast path returns null, we use LLM for:
24
- * - **Non-English**: "enviar" (Spanish for "submit")
25
- * - **Ambiguous**: "I think I'm done?" (submit or just commenting?)
26
- * - **Complex**: Multi-part messages with intent + data
27
- *
28
- * The LLM call also extracts field values, so we bundle
29
- * intent detection with extraction to save latency.
30
- *
31
- * ## Why Fast Path First
32
- *
33
- * 1. **Latency**: LLM calls take 500ms-2s. Fast path is <1ms.
34
- * 2. **Cost**: Each LLM call has token cost. Fast path is free.
35
- * 3. **Reliability**: Regex patterns are deterministic. LLM can be unpredictable.
36
- *
37
- * ## Intent Categories
38
- *
39
- * **Lifecycle Intents** - Change session state:
40
- * - submit, stash, restore, cancel
41
- *
42
- * **UX Intents** - Helper actions:
43
- * - undo, skip, explain, example, progress, autofill
44
- *
45
- * **Data Intents** - Provide information:
46
- * - fill_form (with extractions)
47
- *
48
- * **Fallback**:
49
- * - other (unknown intent, may still have data)
50
- */
51
- import type { FormIntent } from "./types";
52
- /**
53
- * Quick intent detection using English keywords.
54
- *
55
- * Fast path for common English phrases - avoids LLM call for obvious intents.
56
- * Returns null if no match found, triggering LLM fallback.
57
- *
58
- * WHY regex-based:
59
- * - Deterministic - same input always gives same output
60
- * - Fast - no API calls, no parsing
61
- * - Easy to add patterns
62
- *
63
- * WHY word boundaries (\b):
64
- * - Prevents false matches ("undoing" matching "undo")
65
- * - Allows matching in context ("I want to cancel")
66
- *
67
- * @param text - User message text
68
- * @returns Detected intent or null if no fast-path match
69
- */
70
- export declare function quickIntentDetect(text: string): FormIntent | null;
71
- /**
72
- * Check if intent is a lifecycle intent (affects session state).
73
- *
74
- * Lifecycle intents:
75
- * - submit: Completes the form
76
- * - stash: Saves for later
77
- * - restore: Resumes a saved form
78
- * - cancel: Abandons the form
79
- *
80
- * WHY this helper:
81
- * - Lifecycle intents need special handling
82
- * - Often preempt normal message processing
83
- * - May need confirmation (e.g., cancel)
84
- */
85
- export declare function isLifecycleIntent(intent: FormIntent): boolean;
86
- /**
87
- * Check if intent is a UX intent (doesn't directly provide data).
88
- *
89
- * UX intents:
90
- * - undo: Revert last change
91
- * - skip: Skip optional field
92
- * - explain: "Why do you need this?"
93
- * - example: "Give me an example"
94
- * - progress: "How far am I?"
95
- * - autofill: "Use my saved values"
96
- *
97
- * WHY this helper:
98
- * - UX intents are helper actions
99
- * - Don't extract data, just modify session or provide info
100
- * - Agent response is informational
101
- */
102
- export declare function isUXIntent(intent: FormIntent): boolean;
103
- /**
104
- * Check if intent likely contains data to extract.
105
- *
106
- * Data intents:
107
- * - fill_form: User is providing field values
108
- * - other: Unknown intent, may have data
109
- *
110
- * WHY this helper:
111
- * - Determines if we should run extraction
112
- * - fill_form and other may have inline data
113
- * - Lifecycle and UX intents don't have data
114
- */
115
- export declare function hasDataToExtract(intent: FormIntent): boolean;
116
- //# sourceMappingURL=intent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../src/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAgIjE;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE7D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAStD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE5D"}
@@ -1,69 +0,0 @@
1
- /**
2
- * @module providers/context
3
- * @description Form context provider for agent awareness
4
- *
5
- * ## Purpose
6
- *
7
- * This provider injects form state into the agent's context BEFORE
8
- * the agent generates a response. This allows the agent to:
9
- *
10
- * 1. Know if a form is active
11
- * 2. Know what fields have been filled
12
- * 3. Know what fields are missing
13
- * 4. Know what needs confirmation
14
- * 5. Know what to ask next
15
- *
16
- * ## How It Works
17
- *
18
- * ```
19
- * User Message → Provider Runs → Agent Gets Context → Agent Responds
20
- * ↓
21
- * FormContextState
22
- * ↓
23
- * - hasActiveForm: true
24
- * - progress: 60%
25
- * - nextField: "email"
26
- * - uncertainFields: [...]
27
- * ```
28
- *
29
- * ## Context Output
30
- *
31
- * The provider outputs:
32
- *
33
- * - `data`: Full FormContextState object (for programmatic access)
34
- * - `values`: String values for template substitution
35
- * - `text`: Human-readable summary for agent
36
- *
37
- * The `text` output is structured markdown that the agent can use
38
- * to understand the form state and craft appropriate responses.
39
- *
40
- * ## Agent Guidance
41
- *
42
- * The provider includes "Agent Guidance" in the text output, giving
43
- * the agent explicit suggestions:
44
- *
45
- * - "Ask for their email"
46
- * - "Confirm: 'I understood X as Y. Is that correct?'"
47
- * - "All fields collected! Nudge user to submit."
48
- *
49
- * ## Stashed Forms
50
- *
51
- * If the user has stashed forms, the provider mentions this so
52
- * the agent can remind the user they have unfinished work.
53
- */
54
- import type { Provider } from "@elizaos/core";
55
- /**
56
- * Form Context Provider
57
- *
58
- * Injects the current form state into the agent's context,
59
- * allowing the agent to respond naturally about form progress
60
- * and ask for missing fields.
61
- *
62
- * WHY a provider (not evaluator):
63
- * - Providers run BEFORE response generation
64
- * - Agent needs context to generate appropriate response
65
- * - Evaluator runs AFTER, too late for response
66
- */
67
- export declare const formContextProvider: Provider;
68
- export default formContextProvider;
69
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/providers/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,KAAK,EAIV,QAAQ,EAIT,MAAM,eAAe,CAAC;AAUvB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,QA4OjC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
package/dist/service.d.ts DELETED
@@ -1,417 +0,0 @@
1
- /**
2
- * @module service
3
- * @description Central service for managing agent-guided user journeys
4
- *
5
- * ## The Core Role
6
- *
7
- * The FormService is the **journey controller**. It ensures agents stay on
8
- * the path defined by form definitions, guiding users reliably to outcomes.
9
- *
10
- * Without this service, agents would:
11
- * - Forget what information they've collected
12
- * - Miss required fields
13
- * - Lose progress when users switch topics
14
- * - Have no way to resume interrupted journeys
15
- *
16
- * ## What It Does
17
- *
18
- * 1. **Defines Journeys**: Register form definitions (the maps)
19
- * 2. **Tracks Progress**: Manage sessions (where users are)
20
- * 3. **Validates Stops**: Ensure collected data meets requirements
21
- * 4. **Enables Pausing**: Stash journeys for later resumption
22
- * 5. **Records Completions**: Store submissions (outcomes achieved)
23
- * 6. **Guides Agents**: Provide context about what to do next
24
- * 7. **Manages Control Types**: Widget registry for simple, composite, external types
25
- *
26
- * ## Widget Registry (ControlType System)
27
- *
28
- * The FormService manages a registry of control types:
29
- *
30
- * - **Simple types** (text, number, email): Just validate/parse/format
31
- * - **Composite types** (address, payment setup): Have subcontrols
32
- * - **External types** (payment, signature): Require async confirmation
33
- *
34
- * Built-in types are registered at startup. Plugins can register custom types.
35
- *
36
- * WHY a registry:
37
- * - Decouples type definitions from form definitions
38
- * - Plugins can add domain-specific types (blockchain addresses, etc.)
39
- * - Override protection prevents accidental shadowing of built-ins
40
- *
41
- * ## Service Lifecycle
42
- *
43
- * ```
44
- * Plugin Init → FormService.start() → Register Builtins → Register Forms → Ready
45
- *
46
- * User Message → Evaluator → FormService.updateField() → Session Updated
47
- * → FormService.updateSubField() → Subfield Updated
48
- * → FormService.activateExternalField() → External Process Started
49
- * → FormService.submit() → Submission Created
50
- * → FormService.stash() → Session Stashed
51
- *
52
- * External Event → PaymentService → FormService.confirmExternalField() → Field Filled
53
- * ```
54
- *
55
- * ## State Management
56
- *
57
- * The service maintains two types of state:
58
- *
59
- * 1. **In-Memory**: Form definitions, control types (loaded at startup)
60
- * 2. **Persistent**: Sessions, submissions, autofill (via storage.ts)
61
- *
62
- * ## Consuming Plugin Pattern
63
- *
64
- * Plugins that use forms typically:
65
- *
66
- * ```typescript
67
- * // 1. Register form at plugin init
68
- * const formService = runtime.getService('FORM') as FormService;
69
- * formService.registerForm(myFormDefinition);
70
- *
71
- * // 2. Optionally register custom control types
72
- * formService.registerControlType({
73
- * id: 'payment',
74
- * getSubControls: () => [...],
75
- * activate: async (ctx) => {...},
76
- * });
77
- *
78
- * // 3. Start session when needed
79
- * await formService.startSession('my-form', entityId, roomId);
80
- *
81
- * // 4. Register hook workers for submission handling
82
- * runtime.registerTaskWorker({
83
- * name: 'handle_my_form_submission',
84
- * execute: async (runtime, options) => {
85
- * const { submission } = options;
86
- * // Process the submitted data
87
- * }
88
- * });
89
- * ```
90
- *
91
- * ## Error Handling
92
- *
93
- * Most methods throw on invalid state (e.g., session not found).
94
- * Callers should handle errors appropriately.
95
- */
96
- import { Service, type IAgentRuntime, type JsonValue, type UUID } from "@elizaos/core";
97
- import type { FormDefinition, FormSession, FormSubmission, FormControl, FieldState, TypeHandler, FormContextState, ControlType, ExternalActivation } from "./types";
98
- /**
99
- * FormService - Central service for managing conversational forms.
100
- *
101
- * WHY a service:
102
- * - Services are singletons, one per agent
103
- * - Persist across conversations
104
- * - Accessible from actions, evaluators, providers
105
- *
106
- * WHY static `start` method:
107
- * - ElizaOS service lifecycle pattern
108
- * - Async initialization support
109
- * - Returns Service interface
110
- */
111
- export declare class FormService extends Service {
112
- /** Service type identifier for runtime.getService() */
113
- static serviceType: string;
114
- /** Description shown in agent capabilities */
115
- capabilityDescription: string;
116
- /**
117
- * In-memory storage of form definitions.
118
- *
119
- * WHY Map:
120
- * - O(1) lookup by ID
121
- * - Forms are static after registration
122
- * - No persistence needed (re-registered on startup)
123
- */
124
- private forms;
125
- /**
126
- * Control type registry.
127
- *
128
- * WHY separate from TypeHandler:
129
- * - ControlType is the new unified interface
130
- * - Supports simple, composite, and external types
131
- * - TypeHandler is legacy but still supported
132
- *
133
- * Built-in types are registered on start.
134
- * Plugins can register custom types.
135
- */
136
- private controlTypes;
137
- /**
138
- * Start the FormService
139
- */
140
- static start(runtime: IAgentRuntime): Promise<Service>;
141
- /**
142
- * Stop the FormService
143
- */
144
- stop(): Promise<void>;
145
- /**
146
- * Register a form definition
147
- */
148
- registerForm(definition: FormDefinition): void;
149
- /**
150
- * Get a form definition by ID
151
- */
152
- getForm(formId: string): FormDefinition | undefined;
153
- /**
154
- * Get all registered forms
155
- */
156
- listForms(): FormDefinition[];
157
- /**
158
- * Register a custom type handler (legacy API)
159
- * @deprecated Use registerControlType instead
160
- */
161
- registerType(type: string, handler: TypeHandler): void;
162
- /**
163
- * Get a type handler (legacy API)
164
- * @deprecated Use getControlType instead
165
- */
166
- getTypeHandler(type: string): TypeHandler | undefined;
167
- /**
168
- * Register a control type.
169
- *
170
- * Control types define how a field type behaves:
171
- * - Simple types: validate/parse/format
172
- * - Composite types: have subcontrols
173
- * - External types: have activate/deactivate for async processes
174
- *
175
- * Built-in types (text, number, email, etc.) are registered at startup
176
- * and protected from override unless explicitly allowed.
177
- *
178
- * @param type - The ControlType definition
179
- * @param options - Registration options
180
- * @param options.allowOverride - Allow overriding built-in types (default: false)
181
- *
182
- * @example
183
- * ```typescript
184
- * formService.registerControlType({
185
- * id: 'payment',
186
- * getSubControls: () => [
187
- * { key: 'amount', type: 'number', label: 'Amount', required: true },
188
- * { key: 'currency', type: 'select', label: 'Currency', required: true },
189
- * ],
190
- * activate: async (ctx) => {
191
- * const paymentService = ctx.runtime.getService('PAYMENT');
192
- * return paymentService.createPending(ctx.subValues);
193
- * },
194
- * });
195
- * ```
196
- */
197
- registerControlType(type: ControlType, options?: {
198
- allowOverride?: boolean;
199
- }): void;
200
- /**
201
- * Get a control type by ID.
202
- *
203
- * @param typeId - The type ID to look up
204
- * @returns The ControlType or undefined if not found
205
- */
206
- getControlType(typeId: string): ControlType | undefined;
207
- /**
208
- * List all registered control types.
209
- *
210
- * @returns Array of all registered ControlTypes
211
- */
212
- listControlTypes(): ControlType[];
213
- /**
214
- * Check if a control type has subcontrols.
215
- *
216
- * @param typeId - The type ID to check
217
- * @returns true if the type has getSubControls method
218
- */
219
- isCompositeType(typeId: string): boolean;
220
- /**
221
- * Check if a control type is an external type.
222
- *
223
- * @param typeId - The type ID to check
224
- * @returns true if the type has activate method
225
- */
226
- isExternalType(typeId: string): boolean;
227
- /**
228
- * Get subcontrols for a composite type.
229
- *
230
- * @param control - The parent control
231
- * @returns Array of subcontrols or empty array if not composite
232
- */
233
- getSubControls(control: FormControl): FormControl[];
234
- /**
235
- * Start a new form session
236
- */
237
- startSession(formId: string, entityId: UUID, roomId: UUID, options?: {
238
- context?: Record<string, JsonValue>;
239
- initialValues?: Record<string, JsonValue>;
240
- locale?: string;
241
- }): Promise<FormSession>;
242
- /**
243
- * Get active session for entity in room
244
- */
245
- getActiveSession(entityId: UUID, roomId: UUID): Promise<FormSession | null>;
246
- /**
247
- * Get all active sessions for entity (across all rooms)
248
- */
249
- getAllActiveSessions(entityId: UUID): Promise<FormSession[]>;
250
- /**
251
- * Get stashed sessions for entity
252
- */
253
- getStashedSessions(entityId: UUID): Promise<FormSession[]>;
254
- /**
255
- * Save a session
256
- */
257
- saveSession(session: FormSession): Promise<void>;
258
- /**
259
- * Update a field value
260
- */
261
- updateField(sessionId: string, entityId: UUID, field: string, value: JsonValue, confidence: number, source: FieldState["source"], messageId?: string): Promise<void>;
262
- /**
263
- * Undo the last field change
264
- */
265
- undoLastChange(sessionId: string, entityId: UUID): Promise<{
266
- field: string;
267
- restoredValue: JsonValue;
268
- } | null>;
269
- /**
270
- * Skip an optional field
271
- */
272
- skipField(sessionId: string, entityId: UUID, field: string): Promise<boolean>;
273
- /**
274
- * Confirm an uncertain field value
275
- */
276
- confirmField(sessionId: string, entityId: UUID, field: string, accepted: boolean): Promise<void>;
277
- /**
278
- * Update a subfield value for a composite control type.
279
- *
280
- * Composite types (like payment, address) have subcontrols that must
281
- * all be filled before the parent field is complete.
282
- *
283
- * WHY separate from updateField:
284
- * - Subfields are stored in fieldState.subFields, not session.fields
285
- * - Parent field status depends on all subfields being filled
286
- * - Allows tracking subfield confidence/status independently
287
- *
288
- * @param sessionId - The session ID
289
- * @param entityId - The entity/user ID
290
- * @param parentField - The parent control key (e.g., "payment")
291
- * @param subField - The subcontrol key (e.g., "amount")
292
- * @param value - The extracted value
293
- * @param confidence - LLM confidence (0-1)
294
- * @param messageId - Optional message ID for audit
295
- */
296
- updateSubField(sessionId: string, entityId: UUID, parentField: string, subField: string, value: JsonValue, confidence: number, messageId?: string): Promise<void>;
297
- /**
298
- * Check if all subfields of a composite field are filled.
299
- *
300
- * @param session - The form session
301
- * @param parentField - The parent control key
302
- * @returns true if all required subfields are filled
303
- */
304
- areSubFieldsFilled(session: FormSession, parentField: string): boolean;
305
- /**
306
- * Get the current subfield values for a composite field.
307
- *
308
- * @param session - The form session
309
- * @param parentField - The parent control key
310
- * @returns Record of subfield key to value
311
- */
312
- getSubFieldValues(session: FormSession, parentField: string): Record<string, JsonValue>;
313
- /**
314
- * Activate an external field.
315
- *
316
- * External types (payment, signature) require an async activation process.
317
- * This is called when all subcontrols are filled and the external process
318
- * should begin (e.g., generate payment address, show signing instructions).
319
- *
320
- * WHY this method:
321
- * - Decouples activation trigger from the widget itself
322
- * - Stores activation state in the session
323
- * - Provides a clear API for the evaluator to call
324
- *
325
- * @param sessionId - The session ID
326
- * @param entityId - The entity/user ID
327
- * @param field - The field key
328
- * @returns The activation details (instructions, reference, etc.)
329
- */
330
- activateExternalField(sessionId: string, entityId: UUID, field: string): Promise<ExternalActivation>;
331
- /**
332
- * Confirm an external field.
333
- *
334
- * Called by external services (payment, blockchain, etc.) when the
335
- * external process is complete (e.g., payment received, signature verified).
336
- *
337
- * WHY separate from confirmField:
338
- * - External confirmation includes external data (txId, etc.)
339
- * - Updates externalState, not just field status
340
- * - Emits events for other systems to react
341
- *
342
- * @param sessionId - The session ID
343
- * @param entityId - The entity/user ID
344
- * @param field - The field key
345
- * @param value - The final value to store (usually the confirmed data)
346
- * @param externalData - Additional data from the external source (txId, etc.)
347
- */
348
- confirmExternalField(sessionId: string, entityId: UUID, field: string, value: JsonValue, externalData?: Record<string, JsonValue>): Promise<void>;
349
- /**
350
- * Cancel an external field activation.
351
- *
352
- * Called when the external process fails, times out, or user cancels.
353
- *
354
- * @param sessionId - The session ID
355
- * @param entityId - The entity/user ID
356
- * @param field - The field key
357
- * @param reason - Reason for cancellation
358
- */
359
- cancelExternalField(sessionId: string, entityId: UUID, field: string, reason: string): Promise<void>;
360
- /**
361
- * Submit a form session
362
- */
363
- submit(sessionId: string, entityId: UUID): Promise<FormSubmission>;
364
- /**
365
- * Stash a session for later
366
- */
367
- stash(sessionId: string, entityId: UUID): Promise<void>;
368
- /**
369
- * Restore a stashed session
370
- */
371
- restore(sessionId: string, entityId: UUID): Promise<FormSession>;
372
- /**
373
- * Cancel a session
374
- */
375
- cancel(sessionId: string, entityId: UUID, force?: boolean): Promise<boolean>;
376
- /**
377
- * Get submissions for entity, optionally filtered by form ID
378
- */
379
- getSubmissions(entityId: UUID, formId?: string): Promise<FormSubmission[]>;
380
- /**
381
- * Get autofill data for a form
382
- */
383
- getAutofill(entityId: UUID, formId: string): Promise<Record<string, JsonValue> | null>;
384
- /**
385
- * Apply autofill to a session
386
- */
387
- applyAutofill(session: FormSession): Promise<string[]>;
388
- /**
389
- * Get session context for provider
390
- */
391
- getSessionContext(session: FormSession): FormContextState;
392
- /**
393
- * Get current values from session
394
- */
395
- getValues(session: FormSession): Record<string, JsonValue>;
396
- /**
397
- * Get mapped values (using dbbind)
398
- */
399
- getMappedValues(session: FormSession): Record<string, JsonValue>;
400
- /**
401
- * Calculate TTL based on effort
402
- */
403
- calculateTTL(session: FormSession): number;
404
- /**
405
- * Check if cancel should require confirmation
406
- */
407
- shouldConfirmCancel(session: FormSession): boolean;
408
- /**
409
- * Execute a form hook
410
- */
411
- private executeHook;
412
- /**
413
- * Check if all required fields are filled
414
- */
415
- private checkAllRequiredFilled;
416
- }
417
- //# sourceMappingURL=service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}