@elizaos/plugin-form 2.0.0-alpha.8 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/auto-enable.ts +24 -0
  2. package/dist/actions/restore.d.ts +25 -0
  3. package/dist/actions/restore.d.ts.map +1 -0
  4. package/dist/actions/restore.js +176 -0
  5. package/dist/actions/restore.js.map +1 -0
  6. package/dist/builder.d.ts +320 -0
  7. package/dist/builder.d.ts.map +1 -0
  8. package/dist/builder.js +458 -0
  9. package/dist/builder.js.map +1 -0
  10. package/dist/builtins.d.ts +128 -0
  11. package/dist/builtins.d.ts.map +1 -0
  12. package/dist/builtins.js +233 -0
  13. package/dist/builtins.js.map +1 -0
  14. package/dist/defaults.d.ts +95 -0
  15. package/dist/defaults.d.ts.map +1 -0
  16. package/dist/defaults.js +79 -0
  17. package/dist/defaults.js.map +1 -0
  18. package/dist/evaluators/extractor.d.ts +28 -0
  19. package/dist/evaluators/extractor.d.ts.map +1 -0
  20. package/dist/evaluators/extractor.js +247 -0
  21. package/dist/evaluators/extractor.js.map +1 -0
  22. package/dist/extraction.d.ts +55 -0
  23. package/dist/extraction.d.ts.map +1 -0
  24. package/dist/extraction.js +331 -0
  25. package/dist/extraction.js.map +1 -0
  26. package/dist/index.d.ts +31 -2
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +119 -3361
  29. package/dist/index.js.map +1 -30
  30. package/dist/providers/context.d.ts +56 -0
  31. package/dist/providers/context.d.ts.map +1 -0
  32. package/dist/providers/context.js +206 -0
  33. package/dist/providers/context.js.map +1 -0
  34. package/dist/service.d.ts +402 -0
  35. package/dist/service.d.ts.map +1 -0
  36. package/dist/service.js +1158 -0
  37. package/dist/service.js.map +1 -0
  38. package/dist/storage.d.ts +228 -0
  39. package/dist/storage.d.ts.map +1 -0
  40. package/dist/storage.js +218 -0
  41. package/dist/storage.js.map +1 -0
  42. package/dist/template.d.ts +10 -0
  43. package/dist/template.d.ts.map +1 -0
  44. package/dist/template.js +60 -0
  45. package/dist/template.js.map +1 -0
  46. package/dist/ttl.d.ts +144 -0
  47. package/dist/ttl.d.ts.map +1 -0
  48. package/dist/ttl.js +85 -0
  49. package/dist/ttl.js.map +1 -0
  50. package/dist/types.d.ts +1213 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +39 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/validation.d.ts +156 -0
  55. package/dist/validation.d.ts.map +1 -0
  56. package/dist/validation.js +289 -0
  57. package/dist/validation.js.map +1 -0
  58. package/package.json +39 -42
@@ -0,0 +1,402 @@
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 → form 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 { type IAgentRuntime, type JsonValue, Service, type UUID } from "@elizaos/core";
97
+ import type { ControlType, ExternalActivation, FieldState, FormContextState, FormControl, FormDefinition, FormSession, FormSubmission } 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
+ * Built-in types are registered on start.
129
+ * Plugins can register custom types.
130
+ */
131
+ private controlTypes;
132
+ /**
133
+ * Start the FormService
134
+ */
135
+ static start(runtime: IAgentRuntime): Promise<Service>;
136
+ /**
137
+ * Stop the FormService
138
+ */
139
+ stop(): Promise<void>;
140
+ /**
141
+ * Register a form definition
142
+ */
143
+ registerForm(definition: FormDefinition): void;
144
+ /**
145
+ * Get a form definition by ID
146
+ */
147
+ getForm(formId: string): FormDefinition | undefined;
148
+ /**
149
+ * Get all registered forms
150
+ */
151
+ listForms(): FormDefinition[];
152
+ /**
153
+ * Register a control type.
154
+ *
155
+ * Control types define how a field type behaves:
156
+ * - Simple types: validate/parse/format
157
+ * - Composite types: have subcontrols
158
+ * - External types: have activate/deactivate for async processes
159
+ *
160
+ * Built-in types (text, number, email, etc.) are registered at startup
161
+ * and protected from override unless explicitly allowed.
162
+ *
163
+ * @param type - The ControlType definition
164
+ * @param options - Registration options
165
+ * @param options.allowOverride - Allow overriding built-in types (default: false)
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * formService.registerControlType({
170
+ * id: 'payment',
171
+ * getSubControls: () => [
172
+ * { key: 'amount', type: 'number', label: 'Amount', required: true },
173
+ * { key: 'currency', type: 'select', label: 'Currency', required: true },
174
+ * ],
175
+ * activate: async (ctx) => {
176
+ * const paymentService = ctx.runtime.getService('PAYMENT');
177
+ * return paymentService.createPending(ctx.subValues);
178
+ * },
179
+ * });
180
+ * ```
181
+ */
182
+ registerControlType(type: ControlType, options?: {
183
+ allowOverride?: boolean;
184
+ }): void;
185
+ /**
186
+ * Get a control type by ID.
187
+ *
188
+ * @param typeId - The type ID to look up
189
+ * @returns The ControlType or undefined if not found
190
+ */
191
+ getControlType(typeId: string): ControlType | undefined;
192
+ /**
193
+ * List all registered control types.
194
+ *
195
+ * @returns Array of all registered ControlTypes
196
+ */
197
+ listControlTypes(): ControlType[];
198
+ /**
199
+ * Check if a control type has subcontrols.
200
+ *
201
+ * @param typeId - The type ID to check
202
+ * @returns true if the type has getSubControls method
203
+ */
204
+ isCompositeType(typeId: string): boolean;
205
+ /**
206
+ * Check if a control type is an external type.
207
+ *
208
+ * @param typeId - The type ID to check
209
+ * @returns true if the type has activate method
210
+ */
211
+ isExternalType(typeId: string): boolean;
212
+ /**
213
+ * Get subcontrols for a composite type.
214
+ *
215
+ * @param control - The parent control
216
+ * @returns Array of subcontrols or empty array if not composite
217
+ */
218
+ getSubControls(control: FormControl): FormControl[];
219
+ /**
220
+ * Start a new form session
221
+ */
222
+ startSession(formId: string, entityId: UUID, roomId: UUID, options?: {
223
+ context?: Record<string, JsonValue>;
224
+ initialValues?: Record<string, JsonValue>;
225
+ locale?: string;
226
+ }): Promise<FormSession>;
227
+ /**
228
+ * Get active session for entity in room
229
+ */
230
+ getActiveSession(entityId: UUID, roomId: UUID): Promise<FormSession | null>;
231
+ /**
232
+ * Get all active sessions for entity (across all rooms)
233
+ */
234
+ getAllActiveSessions(entityId: UUID): Promise<FormSession[]>;
235
+ /**
236
+ * Get stashed sessions for entity
237
+ */
238
+ getStashedSessions(entityId: UUID): Promise<FormSession[]>;
239
+ /**
240
+ * Save a session
241
+ */
242
+ saveSession(session: FormSession): Promise<void>;
243
+ /**
244
+ * Update a field value
245
+ */
246
+ updateField(sessionId: string, entityId: UUID, field: string, value: JsonValue, confidence: number, source: FieldState["source"], messageId?: string): Promise<void>;
247
+ /**
248
+ * Undo the last field change
249
+ */
250
+ undoLastChange(sessionId: string, entityId: UUID): Promise<{
251
+ field: string;
252
+ restoredValue: JsonValue;
253
+ } | null>;
254
+ /**
255
+ * Skip an optional field
256
+ */
257
+ skipField(sessionId: string, entityId: UUID, field: string): Promise<boolean>;
258
+ /**
259
+ * Confirm an uncertain field value
260
+ */
261
+ confirmField(sessionId: string, entityId: UUID, field: string, accepted: boolean): Promise<void>;
262
+ /**
263
+ * Update a subfield value for a composite control type.
264
+ *
265
+ * Composite types (like payment, address) have subcontrols that must
266
+ * all be filled before the parent field is complete.
267
+ *
268
+ * WHY separate from updateField:
269
+ * - Subfields are stored in fieldState.subFields, not session.fields
270
+ * - Parent field status depends on all subfields being filled
271
+ * - Allows tracking subfield confidence/status independently
272
+ *
273
+ * @param sessionId - The session ID
274
+ * @param entityId - The entity/user ID
275
+ * @param parentField - The parent control key (e.g., "payment")
276
+ * @param subField - The subcontrol key (e.g., "amount")
277
+ * @param value - The extracted value
278
+ * @param confidence - LLM confidence (0-1)
279
+ * @param messageId - Optional message ID for audit
280
+ */
281
+ updateSubField(sessionId: string, entityId: UUID, parentField: string, subField: string, value: JsonValue, confidence: number, messageId?: string): Promise<void>;
282
+ /**
283
+ * Check if all subfields of a composite field are filled.
284
+ *
285
+ * @param session - The form session
286
+ * @param parentField - The parent control key
287
+ * @returns true if all required subfields are filled
288
+ */
289
+ areSubFieldsFilled(session: FormSession, parentField: string): boolean;
290
+ /**
291
+ * Get the current subfield values for a composite field.
292
+ *
293
+ * @param session - The form session
294
+ * @param parentField - The parent control key
295
+ * @returns Record of subfield key to value
296
+ */
297
+ getSubFieldValues(session: FormSession, parentField: string): Record<string, JsonValue>;
298
+ /**
299
+ * Activate an external field.
300
+ *
301
+ * External types (payment, signature) require an async activation process.
302
+ * This is called when all subcontrols are filled and the external process
303
+ * should begin (e.g., generate payment address, show signing instructions).
304
+ *
305
+ * WHY this method:
306
+ * - Decouples activation trigger from the widget itself
307
+ * - Stores activation state in the session
308
+ * - Provides a clear API for the evaluator to call
309
+ *
310
+ * @param sessionId - The session ID
311
+ * @param entityId - The entity/user ID
312
+ * @param field - The field key
313
+ * @returns The activation details (instructions, reference, etc.)
314
+ */
315
+ activateExternalField(sessionId: string, entityId: UUID, field: string): Promise<ExternalActivation>;
316
+ /**
317
+ * Confirm an external field.
318
+ *
319
+ * Called by external services (payment, blockchain, etc.) when the
320
+ * external process is complete (e.g., payment received, signature verified).
321
+ *
322
+ * WHY separate from confirmField:
323
+ * - External confirmation includes external data (txId, etc.)
324
+ * - Updates externalState, not just field status
325
+ * - Emits events for other systems to react
326
+ *
327
+ * @param sessionId - The session ID
328
+ * @param entityId - The entity/user ID
329
+ * @param field - The field key
330
+ * @param value - The final value to store (usually the confirmed data)
331
+ * @param externalData - Additional data from the external source (txId, etc.)
332
+ */
333
+ confirmExternalField(sessionId: string, entityId: UUID, field: string, value: JsonValue, externalData?: Record<string, JsonValue>): Promise<void>;
334
+ /**
335
+ * Cancel an external field activation.
336
+ *
337
+ * Called when the external process fails, times out, or user cancels.
338
+ *
339
+ * @param sessionId - The session ID
340
+ * @param entityId - The entity/user ID
341
+ * @param field - The field key
342
+ * @param reason - Reason for cancellation
343
+ */
344
+ cancelExternalField(sessionId: string, entityId: UUID, field: string, reason: string): Promise<void>;
345
+ /**
346
+ * Submit a form session
347
+ */
348
+ submit(sessionId: string, entityId: UUID): Promise<FormSubmission>;
349
+ /**
350
+ * Stash a session for later
351
+ */
352
+ stash(sessionId: string, entityId: UUID): Promise<void>;
353
+ /**
354
+ * Restore a stashed session
355
+ */
356
+ restore(sessionId: string, entityId: UUID): Promise<FormSession>;
357
+ /**
358
+ * Cancel a session
359
+ */
360
+ cancel(sessionId: string, entityId: UUID, force?: boolean): Promise<boolean>;
361
+ /**
362
+ * Get submissions for entity, optionally filtered by form ID
363
+ */
364
+ getSubmissions(entityId: UUID, formId?: string): Promise<FormSubmission[]>;
365
+ /**
366
+ * Get autofill data for a form
367
+ */
368
+ getAutofill(entityId: UUID, formId: string): Promise<Record<string, JsonValue> | null>;
369
+ /**
370
+ * Apply autofill to a session
371
+ */
372
+ applyAutofill(session: FormSession): Promise<string[]>;
373
+ /**
374
+ * Get session context for provider
375
+ */
376
+ getSessionContext(session: FormSession): FormContextState;
377
+ /**
378
+ * Get current values from session
379
+ */
380
+ getValues(session: FormSession): Record<string, JsonValue>;
381
+ /**
382
+ * Get mapped values (using dbbind)
383
+ */
384
+ getMappedValues(session: FormSession): Record<string, JsonValue>;
385
+ /**
386
+ * Calculate TTL based on effort
387
+ */
388
+ calculateTTL(session: FormSession): number;
389
+ /**
390
+ * Check if cancel should require confirmation
391
+ */
392
+ shouldConfirmCancel(session: FormSession): boolean;
393
+ /**
394
+ * Execute a form hook
395
+ */
396
+ private executeHook;
397
+ /**
398
+ * Check if all required fields are filled
399
+ */
400
+ private checkAllRequiredFilled;
401
+ }
402
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}