@elizaos/plugin-form 2.0.0-alpha.8 → 2.0.0-alpha.9

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/index.js CHANGED
@@ -2052,7 +2052,7 @@ var init_restore = __esm(() => {
2052
2052
  const __avKeywords = ["form", "restore"];
2053
2053
  const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
2054
2054
  const __avRegex = /\b(?:form|restore)\b/i;
2055
- const __avRegexOk = __avRegex.test(__avText);
2055
+ const __avRegexOk = Boolean(__avText.match(__avRegex));
2056
2056
  const __avSource = String(message?.content?.source ?? message?.source ?? "");
2057
2057
  const __avExpectedSource = "";
2058
2058
  const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
@@ -2429,7 +2429,7 @@ __export(exports_context, {
2429
2429
  formContextProvider: () => formContextProvider,
2430
2430
  default: () => context_default
2431
2431
  });
2432
- import { logger as logger4, validateActionKeywords, validateActionRegex } from "@elizaos/core";
2432
+ import { logger as logger4 } from "@elizaos/core";
2433
2433
  var formContextProvider, context_default;
2434
2434
  var init_context = __esm(() => {
2435
2435
  init_template();
@@ -2437,45 +2437,7 @@ var init_context = __esm(() => {
2437
2437
  name: "FORM_CONTEXT",
2438
2438
  description: "Provides context about active form sessions",
2439
2439
  dynamic: true,
2440
- relevanceKeywords: [
2441
- "form",
2442
- "context",
2443
- "formcontextprovider",
2444
- "plugin",
2445
- "status",
2446
- "state",
2447
- "info",
2448
- "details",
2449
- "chat",
2450
- "conversation",
2451
- "agent",
2452
- "room",
2453
- "channel",
2454
- "user"
2455
- ],
2456
2440
  get: async (runtime, message, _state) => {
2457
- const __providerKeywords = [
2458
- "form",
2459
- "context",
2460
- "formcontextprovider",
2461
- "plugin",
2462
- "status",
2463
- "state",
2464
- "info",
2465
- "details",
2466
- "chat",
2467
- "conversation",
2468
- "agent",
2469
- "room",
2470
- "channel",
2471
- "user"
2472
- ];
2473
- const __providerRegex = new RegExp(`\\b(${__providerKeywords.join("|")})\\b`, "i");
2474
- const __recentMessages = Array.isArray(_state?.recentMessagesData) ? _state.recentMessagesData : [];
2475
- const __isRelevant = validateActionKeywords(message, __recentMessages, __providerKeywords) || validateActionRegex(message, __recentMessages, __providerRegex);
2476
- if (!__isRelevant) {
2477
- return { text: "" };
2478
- }
2479
2441
  try {
2480
2442
  const formService = runtime.getService("FORM");
2481
2443
  if (!formService) {
@@ -2682,7 +2644,6 @@ init_validation();
2682
2644
  init_storage();
2683
2645
  init_extraction();
2684
2646
  init_types();
2685
- import { validateActionKeywords as validateActionKeywords2, validateActionRegex as validateActionRegex2 } from "@elizaos/core";
2686
2647
 
2687
2648
  // src/ttl.ts
2688
2649
  init_types();
@@ -3234,45 +3195,7 @@ var formPlugin = {
3234
3195
  name: "FORM_CONTEXT",
3235
3196
  description: "Provides context about active form sessions",
3236
3197
  dynamic: true,
3237
- relevanceKeywords: [
3238
- "form",
3239
- "context",
3240
- "inlineprovider1",
3241
- "plugin",
3242
- "status",
3243
- "state",
3244
- "info",
3245
- "details",
3246
- "chat",
3247
- "conversation",
3248
- "agent",
3249
- "room",
3250
- "channel",
3251
- "user"
3252
- ],
3253
3198
  get: async (runtime, message, state) => {
3254
- const __providerKeywords = [
3255
- "form",
3256
- "context",
3257
- "inlineprovider1",
3258
- "plugin",
3259
- "status",
3260
- "state",
3261
- "info",
3262
- "details",
3263
- "chat",
3264
- "conversation",
3265
- "agent",
3266
- "room",
3267
- "channel",
3268
- "user"
3269
- ];
3270
- const __providerRegex = new RegExp(`\\b(${__providerKeywords.join("|")})\\b`, "i");
3271
- const __recentMessages = Array.isArray(state?.recentMessagesData) ? state.recentMessagesData : [];
3272
- const __isRelevant = validateActionKeywords2(message, __recentMessages, __providerKeywords) || validateActionRegex2(message, __recentMessages, __providerRegex);
3273
- if (!__isRelevant) {
3274
- return { text: "" };
3275
- }
3276
3199
  const { formContextProvider: formContextProvider2 } = await Promise.resolve().then(() => (init_context(), exports_context));
3277
3200
  return formContextProvider2.get(runtime, message, state);
3278
3201
  }
@@ -3383,4 +3306,4 @@ export {
3383
3306
  BUILTIN_TYPES
3384
3307
  };
3385
3308
 
3386
- //# debugId=B1811CEC0857E66F64756E2164756E21
3309
+ //# debugId=DC90FD3CDE2C7E4764756E2164756E21
package/dist/index.js.map CHANGED
@@ -15,16 +15,16 @@
15
15
  "/**\n * @module template\n * @description Simple template resolution for form-controlled prompts\n */\n\nimport type { FormControl, FormSession } from \"./types\";\n\nexport type TemplateValues = Record<string, string>;\n\nconst TEMPLATE_PATTERN = /\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g;\n\nexport function buildTemplateValues(session: FormSession): TemplateValues {\n const values: TemplateValues = {};\n\n for (const [key, state] of Object.entries(session.fields)) {\n const value = state.value;\n if (typeof value === \"string\") {\n values[key] = value;\n } else if (typeof value === \"number\" || typeof value === \"boolean\") {\n values[key] = String(value);\n }\n }\n\n const context = session.context;\n if (context && typeof context === \"object\" && !Array.isArray(context)) {\n for (const [key, value] of Object.entries(context)) {\n if (typeof value === \"string\") {\n values[key] = value;\n } else if (typeof value === \"number\" || typeof value === \"boolean\") {\n values[key] = String(value);\n }\n }\n }\n\n return values;\n}\n\nexport function renderTemplate(\n template: string | undefined,\n values: TemplateValues\n): string | undefined {\n if (!template) {\n return template;\n }\n\n return template.replace(TEMPLATE_PATTERN, (match, key) => {\n const replacement = values[key];\n return replacement !== undefined ? replacement : match;\n });\n}\n\nexport function resolveControlTemplates(control: FormControl, values: TemplateValues): FormControl {\n const resolvedOptions = control.options?.map((option) => ({\n ...option,\n label: renderTemplate(option.label, values) ?? option.label,\n description: renderTemplate(option.description, values),\n }));\n\n const resolvedFields = control.fields?.map((field) => resolveControlTemplates(field, values));\n\n return {\n ...control,\n label: renderTemplate(control.label, values) ?? control.label,\n description: renderTemplate(control.description, values),\n askPrompt: renderTemplate(control.askPrompt, values),\n example: renderTemplate(control.example, values),\n extractHints: control.extractHints?.map((hint) => renderTemplate(hint, values) ?? hint),\n options: resolvedOptions,\n fields: resolvedFields ?? control.fields,\n };\n}\n",
16
16
  "/**\n * @module extraction\n * @description LLM-based field extraction from natural language\n *\n * ## Design Philosophy\n *\n * Unlike traditional forms where users fill in specific fields, agent-native\n * forms let users provide information naturally. The user might say:\n *\n * \"I'm John, 25 years old, and my email is john@example.com\"\n *\n * This module extracts: { name: \"John\", age: 25, email: \"john@example.com\" }\n *\n * ## Why LLM Extraction\n *\n * 1. **Natural Language**: Users don't think in form fields\n * 2. **Babble Support**: One message can fill multiple fields\n * 3. **Correction Handling**: \"Actually, my name is Jon not John\"\n * 4. **Ambiguity Resolution**: LLM can ask for clarification\n *\n * ## Extraction Flow\n *\n * 1. Build a prompt with field definitions and user message\n * 2. Ask LLM to extract values and assess confidence\n * 3. Parse LLM's structured response\n * 4. Validate extracted values against control rules\n * 5. Return results with confidence scores\n *\n * ## Confidence Scores\n *\n * Each extraction has a confidence score (0-1):\n * - 0.9-1.0: High confidence, auto-accept\n * - 0.7-0.9: Medium confidence, might auto-accept\n * - 0.5-0.7: Low confidence, ask for confirmation\n * - 0.0-0.5: Very low, probably wrong\n *\n * The threshold is configurable per-field (FormControl.confirmThreshold).\n *\n * ## Bundled Intent + Extraction\n *\n * We detect intent AND extract values in a single LLM call because:\n * - Reduces latency (one call vs two)\n * - Context helps with both tasks\n * - Intent affects what to extract\n */\n\nimport type { IAgentRuntime, JsonValue } from \"@elizaos/core\";\nimport { ModelType, parseKeyValueXml } from \"@elizaos/core\";\nimport type { TemplateValues } from \"./template\";\nimport { resolveControlTemplates } from \"./template\";\nimport type {\n ExtractionResult,\n FormControl,\n FormDefinition,\n FormIntent,\n IntentResult,\n} from \"./types\";\nimport { getTypeHandler, parseValue, validateField } from \"./validation\";\n\ntype ExtractionXmlField = {\n key?: string;\n value?: JsonValue;\n confidence?: string | number;\n reasoning?: string;\n is_correction?: boolean | string;\n};\n\ntype ExtractionXmlResponse = {\n intent?: string;\n extractions?: { field?: ExtractionXmlField | ExtractionXmlField[] } | ExtractionXmlField[];\n};\n\ntype SingleFieldXmlResponse = {\n found?: string | boolean;\n value?: JsonValue;\n confidence?: string | number;\n reasoning?: string;\n};\n\ntype CorrectionXmlField = {\n field?: string;\n old_value?: JsonValue;\n new_value?: JsonValue;\n confidence?: string | number;\n};\n\ntype CorrectionXmlResponse = {\n has_correction?: string | boolean;\n corrections?: { correction?: CorrectionXmlField | CorrectionXmlField[] } | CorrectionXmlField[];\n};\n\n// ============================================================================\n// LLM-BASED EXTRACTION\n// ============================================================================\n\n/**\n * Extract field values and detect intent from user message using LLM.\n *\n * This is the main extraction function called by the evaluator.\n * It combines intent detection with field extraction in a single call.\n *\n * WHY single call:\n * - LLM calls are expensive (latency and cost)\n * - Intent and extraction share context\n * - More accurate when done together\n *\n * @param runtime - Agent runtime for model access\n * @param text - User message text\n * @param form - Form definition for context\n * @param controls - Fields to extract\n * @returns Intent result with extractions\n */\nexport async function llmIntentAndExtract(\n runtime: IAgentRuntime,\n text: string,\n form: FormDefinition,\n controls: FormControl[],\n templateValues?: TemplateValues\n): Promise<IntentResult> {\n const resolvedControls = templateValues\n ? controls.map((control) => resolveControlTemplates(control, templateValues))\n : controls;\n\n // Build the extraction prompt\n // WHY detailed field descriptions: LLM needs context to extract correctly\n const fieldsDescription = resolvedControls\n .filter((c) => !c.hidden) // Hidden fields are extracted silently\n .map((c) => {\n const handler = getTypeHandler(c.type);\n const typeHint = handler?.extractionPrompt || c.type;\n const hints = c.extractHints?.join(\", \") || \"\";\n const options = c.options?.map((o) => o.value).join(\", \") || \"\";\n\n // Build a rich field description for the LLM\n return `- ${c.key} (${c.label}): ${c.description || typeHint}${hints ? ` [hints: ${hints}]` : \"\"}${options ? ` [options: ${options}]` : \"\"}`;\n })\n .join(\"\\n\");\n\n // The prompt instructs LLM on what to do\n // WHY explicit intent list: Constrains LLM to known intents\n // WHY confidence scores: Enables confirmation flow for uncertain values\n const prompt = `You are extracting structured data from a user's natural language message.\n\nFORM: ${form.name}\n${form.description ? `DESCRIPTION: ${form.description}` : \"\"}\n\nFIELDS TO EXTRACT:\n${fieldsDescription}\n\nUSER MESSAGE:\n\"${text}\"\n\nINSTRUCTIONS:\n1. Determine the user's intent:\n - fill_form: They are providing information for form fields\n - submit: They want to submit/complete the form (\"done\", \"submit\", \"finish\", \"that's all\")\n - stash: They want to save for later (\"save for later\", \"pause\", \"hold on\")\n - restore: They want to resume a saved form (\"resume\", \"continue\", \"pick up where\")\n - cancel: They want to cancel (\"cancel\", \"abort\", \"nevermind\", \"forget it\")\n - undo: They want to undo last change (\"undo\", \"go back\", \"wait no\")\n - skip: They want to skip current field (\"skip\", \"pass\", \"don't know\")\n - explain: They want explanation (\"why?\", \"what's that for?\")\n - example: They want an example (\"example?\", \"like what?\")\n - progress: They want progress update (\"how far?\", \"status\")\n - autofill: They want to use saved values (\"same as last time\")\n - other: None of the above\n\n2. For fill_form intent, extract all field values mentioned.\n - For each extracted value, provide a confidence score (0.0-1.0)\n - Note if this appears to be a correction to a previous value\n\nRespond in this exact XML format:\n<response>\n <intent>fill_form|submit|stash|restore|cancel|undo|skip|explain|example|progress|autofill|other</intent>\n <extractions>\n <field>\n <key>field_key</key>\n <value>extracted_value</value>\n <confidence>0.0-1.0</confidence>\n <reasoning>why this value was extracted</reasoning>\n <is_correction>true|false</is_correction>\n </field>\n <!-- more fields if applicable -->\n </extractions>\n</response>`;\n\n try {\n // Use TEXT_SMALL for faster extraction\n // WHY low temperature: Want deterministic, consistent extraction\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n temperature: 0.1,\n });\n\n // Parse the XML response\n const parsed = parseExtractionResponse(response);\n\n // Validate and parse extracted values\n // WHY post-validation: LLM might extract invalid values\n for (const extraction of parsed.extractions) {\n const control = resolvedControls.find((c) => c.key === extraction.field);\n if (control) {\n // Parse the value to the correct type\n if (typeof extraction.value === \"string\") {\n extraction.value = parseValue(extraction.value, control);\n }\n\n // Validate the extracted value\n const validation = validateField(extraction.value, control);\n if (!validation.valid) {\n // Reduce confidence for invalid values\n // WHY: Low confidence triggers re-ask, not auto-accept\n extraction.confidence = Math.min(extraction.confidence, 0.3);\n extraction.reasoning = `${extraction.reasoning || \"\"} (Validation failed: ${validation.error})`;\n }\n }\n }\n\n // Log if debug mode\n if (form.debug) {\n runtime.logger.debug(\"[FormExtraction] LLM extraction result:\", JSON.stringify(parsed));\n }\n\n return parsed;\n } catch (error) {\n runtime.logger.error(\"[FormExtraction] LLM extraction failed:\", String(error));\n return { intent: \"other\", extractions: [] };\n }\n}\n\n/**\n * Parse the XML extraction response.\n *\n * WHY XML parsing:\n * - Structured output is easier to parse than free text\n * - ElizaOS has parseKeyValueXml helper\n * - Falls back to regex if parsing fails\n *\n * @param response - LLM's XML response string\n * @returns Parsed intent and extractions\n */\nfunction parseExtractionResponse(response: string): IntentResult {\n const result: IntentResult = {\n intent: \"other\",\n extractions: [],\n };\n\n try {\n // Try to parse as XML\n const parsed = parseKeyValueXml<ExtractionXmlResponse>(response);\n\n if (parsed) {\n // Get intent\n const intentStr = parsed.intent?.toLowerCase() ?? \"other\";\n result.intent = isValidIntent(intentStr) ? intentStr : \"other\";\n\n // Get extractions - handle various XML structures\n // WHY flexible parsing: LLM might format arrays differently\n if (parsed.extractions) {\n const fields = Array.isArray(parsed.extractions)\n ? parsed.extractions\n : parsed.extractions.field\n ? Array.isArray(parsed.extractions.field)\n ? parsed.extractions.field\n : [parsed.extractions.field]\n : [];\n\n for (const field of fields) {\n if (field?.key) {\n const extraction: ExtractionResult = {\n field: String(field.key),\n value: field.value ?? null,\n confidence: parseFloat(String(field.confidence ?? \"\")) || 0.5,\n reasoning: field.reasoning ? String(field.reasoning) : undefined,\n isCorrection: field.is_correction === \"true\" || field.is_correction === true,\n };\n result.extractions.push(extraction);\n }\n }\n }\n }\n } catch (_error) {\n // Fallback: try regex extraction\n // WHY fallback: LLM might produce slightly malformed XML\n const intentMatch = response.match(/<intent>([^<]+)<\\/intent>/);\n if (intentMatch) {\n const intentStr = intentMatch[1].toLowerCase().trim();\n result.intent = isValidIntent(intentStr) ? intentStr : \"other\";\n }\n\n // Extract fields with regex as fallback\n const fieldMatches = response.matchAll(\n /<field>\\s*<key>([^<]+)<\\/key>\\s*<value>([^<]*)<\\/value>\\s*<confidence>([^<]+)<\\/confidence>/g\n );\n for (const match of fieldMatches) {\n result.extractions.push({\n field: match[1].trim(),\n value: match[2].trim(),\n confidence: parseFloat(match[3]) || 0.5,\n });\n }\n }\n\n return result;\n}\n\n/**\n * Check if string is a valid intent.\n *\n * WHY type guard:\n * - TypeScript can't know LLM output is valid\n * - Ensures only known intents are used\n * - Fallback to 'other' for unknown\n */\nfunction isValidIntent(str: string): str is FormIntent {\n const validIntents: FormIntent[] = [\n \"fill_form\",\n \"submit\",\n \"stash\",\n \"restore\",\n \"cancel\",\n \"undo\",\n \"skip\",\n \"explain\",\n \"example\",\n \"progress\",\n \"autofill\",\n \"other\",\n ];\n return validIntents.includes(str as FormIntent);\n}\n\n// ============================================================================\n// SIMPLE EXTRACTION (for single-field targeted extraction)\n// ============================================================================\n\n/**\n * Extract a specific field value from user message.\n *\n * Used when asking for a specific field and expecting direct answer.\n * Simpler prompt than full intent+extraction.\n *\n * WHY separate function:\n * - When context is clear, full extraction is overkill\n * - \"What's your email?\" -> \"john@example.com\" is simple\n * - Faster, more focused extraction\n *\n * @param runtime - Agent runtime for model access\n * @param text - User message text\n * @param control - The field to extract\n * @param debug - Enable debug logging\n * @returns Extraction result or null if not found\n */\nexport async function extractSingleField(\n runtime: IAgentRuntime,\n text: string,\n control: FormControl,\n debug?: boolean,\n templateValues?: TemplateValues\n): Promise<ExtractionResult | null> {\n const resolvedControl = templateValues\n ? resolveControlTemplates(control, templateValues)\n : control;\n const handler = getTypeHandler(resolvedControl.type);\n const typeHint = handler?.extractionPrompt || resolvedControl.type;\n\n // Focused prompt for single field extraction\n const prompt = `Extract the ${resolvedControl.label} (${typeHint}) from this message:\n\n\"${text}\"\n\n${resolvedControl.description ? `Context: ${resolvedControl.description}` : \"\"}\n${resolvedControl.extractHints?.length ? `Look for: ${resolvedControl.extractHints.join(\", \")}` : \"\"}\n${resolvedControl.options?.length ? `Valid options: ${resolvedControl.options.map((o) => o.value).join(\", \")}` : \"\"}\n${resolvedControl.example ? `Example: ${resolvedControl.example}` : \"\"}\n\nRespond in XML:\n<response>\n <found>true|false</found>\n <value>extracted_value or empty if not found</value>\n <confidence>0.0-1.0</confidence>\n <reasoning>brief explanation</reasoning>\n</response>`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n temperature: 0.1,\n });\n\n const parsed = parseKeyValueXml<SingleFieldXmlResponse>(response);\n\n const found = parsed?.found === true || parsed?.found === \"true\";\n if (found) {\n let value = parsed.value;\n\n // Parse value to correct type\n if (typeof value === \"string\") {\n value = parseValue(value, resolvedControl);\n }\n\n const confidence =\n typeof parsed?.confidence === \"number\"\n ? parsed.confidence\n : parseFloat(String(parsed?.confidence ?? \"\"));\n const result: ExtractionResult = {\n field: resolvedControl.key,\n value: value ?? null,\n confidence: Number.isFinite(confidence) ? confidence : 0.5,\n reasoning: parsed.reasoning ? String(parsed.reasoning) : undefined,\n };\n\n if (debug) {\n runtime.logger.debug(\"[FormExtraction] Single field extraction:\", JSON.stringify(result));\n }\n\n return result;\n }\n\n return null;\n } catch (error) {\n runtime.logger.error(\"[FormExtraction] Single field extraction failed:\", String(error));\n return null;\n }\n}\n\n// ============================================================================\n// CORRECTION DETECTION\n// ============================================================================\n\n/**\n * Detect if user is correcting a previous value.\n *\n * Looks for patterns like:\n * - \"Actually, my name is Jon not John\"\n * - \"Sorry, I meant jon@gmail.com\"\n * - \"Change my age to 26\"\n *\n * WHY separate from main extraction:\n * - Correction detection needs current values as context\n * - More focused prompt for better accuracy\n * - Can be skipped if no values exist\n *\n * @param runtime - Agent runtime for model access\n * @param text - User message text\n * @param currentValues - Currently filled values\n * @param controls - Field definitions\n * @returns Array of corrections (empty if no corrections)\n */\nexport async function detectCorrection(\n runtime: IAgentRuntime,\n text: string,\n currentValues: Record<string, JsonValue>,\n controls: FormControl[],\n templateValues?: TemplateValues\n): Promise<ExtractionResult[]> {\n const resolvedControls = templateValues\n ? controls.map((control) => resolveControlTemplates(control, templateValues))\n : controls;\n\n // Build context of current values\n const currentValuesStr = resolvedControls\n .filter((c) => currentValues[c.key] !== undefined)\n .map((c) => `- ${c.label}: ${currentValues[c.key]}`)\n .join(\"\\n\");\n\n // If nothing to correct, return early\n if (!currentValuesStr) {\n return [];\n }\n\n const prompt = `Is the user correcting any of these previously provided values?\n\nCurrent values:\n${currentValuesStr}\n\nUser message:\n\"${text}\"\n\nIf they are correcting a value, extract the new value. Otherwise respond with no corrections.\n\nRespond in XML:\n<response>\n <has_correction>true|false</has_correction>\n <corrections>\n <correction>\n <field>field_label</field>\n <old_value>previous value</old_value>\n <new_value>corrected value</new_value>\n <confidence>0.0-1.0</confidence>\n </correction>\n </corrections>\n</response>`;\n\n try {\n const response = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n temperature: 0.1,\n });\n\n const parsed = parseKeyValueXml<CorrectionXmlResponse>(response);\n const hasCorrection = parsed?.has_correction === true || parsed?.has_correction === \"true\";\n\n if (parsed && hasCorrection && parsed.corrections) {\n const corrections: ExtractionResult[] = [];\n\n // Handle various XML structures\n const correctionList = Array.isArray(parsed.corrections)\n ? parsed.corrections\n : parsed.corrections.correction\n ? Array.isArray(parsed.corrections.correction)\n ? parsed.corrections.correction\n : [parsed.corrections.correction]\n : [];\n\n for (const correction of correctionList) {\n // Find the control by label (LLM might use label not key)\n // WHY label matching: User sees labels, LLM extracts what user sees\n const fieldName = correction.field ? String(correction.field) : \"\";\n const control = resolvedControls.find(\n (c) =>\n c.label.toLowerCase() === fieldName.toLowerCase() ||\n c.key.toLowerCase() === fieldName.toLowerCase()\n );\n\n if (control) {\n let value = correction.new_value;\n if (typeof value === \"string\") {\n value = parseValue(value, control);\n }\n\n const confidence =\n typeof correction.confidence === \"number\"\n ? correction.confidence\n : parseFloat(String(correction.confidence ?? \"\"));\n const extraction: ExtractionResult = {\n field: control.key,\n value: value ?? null,\n confidence: Number.isFinite(confidence) ? confidence : 0.8,\n isCorrection: true,\n };\n corrections.push(extraction);\n }\n }\n\n return corrections;\n }\n\n return [];\n } catch (error) {\n runtime.logger.error(\"[FormExtraction] Correction detection failed:\", String(error));\n return [];\n }\n}\n",
17
17
  "/**\n * @module service\n * @description Central service for managing agent-guided user journeys\n *\n * ## The Core Role\n *\n * The FormService is the **journey controller**. It ensures agents stay on\n * the path defined by form definitions, guiding users reliably to outcomes.\n *\n * Without this service, agents would:\n * - Forget what information they've collected\n * - Miss required fields\n * - Lose progress when users switch topics\n * - Have no way to resume interrupted journeys\n *\n * ## What It Does\n *\n * 1. **Defines Journeys**: Register form definitions (the maps)\n * 2. **Tracks Progress**: Manage sessions (where users are)\n * 3. **Validates Stops**: Ensure collected data meets requirements\n * 4. **Enables Pausing**: Stash journeys for later resumption\n * 5. **Records Completions**: Store submissions (outcomes achieved)\n * 6. **Guides Agents**: Provide context about what to do next\n * 7. **Manages Control Types**: Widget registry for simple, composite, external types\n *\n * ## Widget Registry (ControlType System)\n *\n * The FormService manages a registry of control types:\n *\n * - **Simple types** (text, number, email): Just validate/parse/format\n * - **Composite types** (address, payment setup): Have subcontrols\n * - **External types** (payment, signature): Require async confirmation\n *\n * Built-in types are registered at startup. Plugins can register custom types.\n *\n * WHY a registry:\n * - Decouples type definitions from form definitions\n * - Plugins can add domain-specific types (blockchain addresses, etc.)\n * - Override protection prevents accidental shadowing of built-ins\n *\n * ## Service Lifecycle\n *\n * ```\n * Plugin Init → FormService.start() → Register Builtins → Register Forms → Ready\n *\n * User Message → Evaluator → FormService.updateField() → Session Updated\n * → FormService.updateSubField() → Subfield Updated\n * → FormService.activateExternalField() → External Process Started\n * → FormService.submit() → Submission Created\n * → FormService.stash() → Session Stashed\n *\n * External Event → PaymentService → FormService.confirmExternalField() → Field Filled\n * ```\n *\n * ## State Management\n *\n * The service maintains two types of state:\n *\n * 1. **In-Memory**: Form definitions, control types (loaded at startup)\n * 2. **Persistent**: Sessions, submissions, autofill (via storage.ts)\n *\n * ## Consuming Plugin Pattern\n *\n * Plugins that use forms typically:\n *\n * ```typescript\n * // 1. Register form at plugin init\n * const formService = runtime.getService('FORM') as FormService;\n * formService.registerForm(myFormDefinition);\n *\n * // 2. Optionally register custom control types\n * formService.registerControlType({\n * id: 'payment',\n * getSubControls: () => [...],\n * activate: async (ctx) => {...},\n * });\n *\n * // 3. Start session when needed\n * await formService.startSession('my-form', entityId, roomId);\n *\n * // 4. Register hook workers for submission handling\n * runtime.registerTaskWorker({\n * name: 'handle_my_form_submission',\n * execute: async (runtime, options) => {\n * const { submission } = options;\n * // Process the submitted data\n * }\n * });\n * ```\n *\n * ## Error Handling\n *\n * Most methods throw on invalid state (e.g., session not found).\n * Callers should handle errors appropriately.\n */\n\nimport {\n type EventPayload,\n type IAgentRuntime,\n type JsonValue,\n logger,\n Service,\n type Task,\n type UUID,\n} from \"@elizaos/core\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { registerBuiltinTypes } from \"./builtins\";\nimport {\n getAutofillData,\n getSessionById,\n saveAutofillData,\n saveSubmission,\n getActiveSession as storageGetActiveSession,\n getAllActiveSessions as storageGetAllActiveSessions,\n getStashedSessions as storageGetStashedSessions,\n getSubmissions as storageGetSubmissions,\n saveSession as storageSaveSession,\n} from \"./storage\";\nimport type {\n ActivationContext,\n ControlType,\n ExternalActivation,\n FieldHistoryEntry,\n FieldState,\n FilledFieldSummary,\n FormContextState,\n FormControl,\n FormDefinition,\n FormSession,\n FormSubmission,\n MissingFieldSummary,\n PendingExternalFieldSummary,\n UncertainFieldSummary,\n} from \"./types\";\nimport { FORM_CONTROL_DEFAULTS, FORM_DEFINITION_DEFAULTS } from \"./types\";\nimport { formatValue, validateField } from \"./validation\";\n\n// ============================================================================\n// FORM SERVICE\n// ============================================================================\n\n/**\n * FormService - Central service for managing conversational forms.\n *\n * WHY a service:\n * - Services are singletons, one per agent\n * - Persist across conversations\n * - Accessible from actions, evaluators, providers\n *\n * WHY static `start` method:\n * - ElizaOS service lifecycle pattern\n * - Async initialization support\n * - Returns Service interface\n */\nexport class FormService extends Service {\n /** Service type identifier for runtime.getService() */\n static serviceType = \"FORM\";\n\n /** Description shown in agent capabilities */\n capabilityDescription = \"Manages conversational forms for data collection\";\n\n /**\n * In-memory storage of form definitions.\n *\n * WHY Map:\n * - O(1) lookup by ID\n * - Forms are static after registration\n * - No persistence needed (re-registered on startup)\n */\n private forms: Map<string, FormDefinition> = new Map();\n\n /**\n * Control type registry.\n *\n * Built-in types are registered on start.\n * Plugins can register custom types.\n */\n private controlTypes: Map<string, ControlType> = new Map();\n\n /**\n * Start the FormService\n */\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new FormService(runtime);\n\n // Register built-in control types\n registerBuiltinTypes((type, options) => service.registerControlType(type, options));\n\n logger.info(\"[FormService] Started with built-in types\");\n return service;\n }\n\n /**\n * Stop the FormService\n */\n async stop(): Promise<void> {\n logger.info(\"[FormService] Stopped\");\n }\n\n // ============================================================================\n // FORM DEFINITION MANAGEMENT\n // ============================================================================\n\n /**\n * Register a form definition\n */\n registerForm(definition: FormDefinition): void {\n // Apply defaults\n const form: FormDefinition = {\n ...definition,\n version: definition.version ?? FORM_DEFINITION_DEFAULTS.version,\n status: definition.status ?? FORM_DEFINITION_DEFAULTS.status,\n ux: { ...FORM_DEFINITION_DEFAULTS.ux, ...definition.ux },\n ttl: { ...FORM_DEFINITION_DEFAULTS.ttl, ...definition.ttl },\n nudge: { ...FORM_DEFINITION_DEFAULTS.nudge, ...definition.nudge },\n debug: definition.debug ?? FORM_DEFINITION_DEFAULTS.debug,\n controls: definition.controls.map((control) => ({\n ...control,\n type: control.type || FORM_CONTROL_DEFAULTS.type,\n required: control.required ?? FORM_CONTROL_DEFAULTS.required,\n confirmThreshold: control.confirmThreshold ?? FORM_CONTROL_DEFAULTS.confirmThreshold,\n label: control.label || prettify(control.key),\n })),\n };\n\n this.forms.set(form.id, form);\n logger.debug(`[FormService] Registered form: ${form.id}`);\n }\n\n /**\n * Get a form definition by ID\n */\n getForm(formId: string): FormDefinition | undefined {\n return this.forms.get(formId);\n }\n\n /**\n * Get all registered forms\n */\n listForms(): FormDefinition[] {\n return Array.from(this.forms.values());\n }\n\n // ============================================================================\n // CONTROL TYPE REGISTRY\n // ============================================================================\n\n /**\n * Register a control type.\n *\n * Control types define how a field type behaves:\n * - Simple types: validate/parse/format\n * - Composite types: have subcontrols\n * - External types: have activate/deactivate for async processes\n *\n * Built-in types (text, number, email, etc.) are registered at startup\n * and protected from override unless explicitly allowed.\n *\n * @param type - The ControlType definition\n * @param options - Registration options\n * @param options.allowOverride - Allow overriding built-in types (default: false)\n *\n * @example\n * ```typescript\n * formService.registerControlType({\n * id: 'payment',\n * getSubControls: () => [\n * { key: 'amount', type: 'number', label: 'Amount', required: true },\n * { key: 'currency', type: 'select', label: 'Currency', required: true },\n * ],\n * activate: async (ctx) => {\n * const paymentService = ctx.runtime.getService('PAYMENT');\n * return paymentService.createPending(ctx.subValues);\n * },\n * });\n * ```\n */\n registerControlType(type: ControlType, options?: { allowOverride?: boolean }): void {\n const existing = this.controlTypes.get(type.id);\n\n if (existing) {\n if (existing.builtin && !options?.allowOverride) {\n logger.warn(\n `[FormService] Cannot override builtin type '${type.id}' without allowOverride: true`\n );\n return;\n }\n logger.warn(`[FormService] Overriding control type: ${type.id}`);\n }\n\n this.controlTypes.set(type.id, type);\n logger.debug(`[FormService] Registered control type: ${type.id}`);\n }\n\n /**\n * Get a control type by ID.\n *\n * @param typeId - The type ID to look up\n * @returns The ControlType or undefined if not found\n */\n getControlType(typeId: string): ControlType | undefined {\n return this.controlTypes.get(typeId);\n }\n\n /**\n * List all registered control types.\n *\n * @returns Array of all registered ControlTypes\n */\n listControlTypes(): ControlType[] {\n return Array.from(this.controlTypes.values());\n }\n\n /**\n * Check if a control type has subcontrols.\n *\n * @param typeId - The type ID to check\n * @returns true if the type has getSubControls method\n */\n isCompositeType(typeId: string): boolean {\n const type = this.controlTypes.get(typeId);\n return !!type?.getSubControls;\n }\n\n /**\n * Check if a control type is an external type.\n *\n * @param typeId - The type ID to check\n * @returns true if the type has activate method\n */\n isExternalType(typeId: string): boolean {\n const type = this.controlTypes.get(typeId);\n return !!type?.activate;\n }\n\n /**\n * Get subcontrols for a composite type.\n *\n * @param control - The parent control\n * @returns Array of subcontrols or empty array if not composite\n */\n getSubControls(control: FormControl): FormControl[] {\n const type = this.controlTypes.get(control.type);\n if (!type?.getSubControls) {\n return [];\n }\n return type.getSubControls(control, this.runtime);\n }\n\n // ============================================================================\n // SESSION MANAGEMENT\n // ============================================================================\n\n /**\n * Start a new form session\n */\n async startSession(\n formId: string,\n entityId: UUID,\n roomId: UUID,\n options?: {\n context?: Record<string, JsonValue>;\n initialValues?: Record<string, JsonValue>;\n locale?: string;\n }\n ): Promise<FormSession> {\n const form = this.getForm(formId);\n if (!form) {\n throw new Error(`Form not found: ${formId}`);\n }\n\n // Check for existing active session\n const existing = await storageGetActiveSession(this.runtime, entityId, roomId);\n if (existing) {\n throw new Error(`Active session already exists for this user/room: ${existing.id}`);\n }\n\n const now = Date.now();\n\n // Initialize field states\n const fields: Record<string, FieldState> = {};\n for (const control of form.controls) {\n if (options?.initialValues?.[control.key] !== undefined) {\n fields[control.key] = {\n status: \"filled\",\n value: options.initialValues[control.key],\n source: \"manual\",\n updatedAt: now,\n };\n } else if (control.defaultValue !== undefined) {\n fields[control.key] = {\n status: \"filled\",\n value: control.defaultValue,\n source: \"default\",\n updatedAt: now,\n };\n } else {\n fields[control.key] = { status: \"empty\" };\n }\n }\n\n // Calculate initial TTL\n const ttlDays = form.ttl?.minDays ?? 14;\n const expiresAt = now + ttlDays * 24 * 60 * 60 * 1000;\n\n const session: FormSession = {\n id: uuidv4(),\n formId,\n formVersion: form.version,\n entityId,\n roomId,\n status: \"active\",\n fields,\n history: [],\n context: options?.context,\n locale: options?.locale,\n effort: {\n interactionCount: 0,\n timeSpentMs: 0,\n firstInteractionAt: now,\n lastInteractionAt: now,\n },\n expiresAt,\n createdAt: now,\n updatedAt: now,\n };\n\n await storageSaveSession(this.runtime, session);\n\n // Execute onStart hook\n if (form.hooks?.onStart) {\n await this.executeHook(session, \"onStart\");\n }\n\n logger.debug(`[FormService] Started session ${session.id} for form ${formId}`);\n\n return session;\n }\n\n /**\n * Get active session for entity in room\n */\n async getActiveSession(entityId: UUID, roomId: UUID): Promise<FormSession | null> {\n return storageGetActiveSession(this.runtime, entityId, roomId);\n }\n\n /**\n * Get all active sessions for entity (across all rooms)\n */\n async getAllActiveSessions(entityId: UUID): Promise<FormSession[]> {\n return storageGetAllActiveSessions(this.runtime, entityId);\n }\n\n /**\n * Get stashed sessions for entity\n */\n async getStashedSessions(entityId: UUID): Promise<FormSession[]> {\n return storageGetStashedSessions(this.runtime, entityId);\n }\n\n /**\n * Save a session\n */\n async saveSession(session: FormSession): Promise<void> {\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n }\n\n // ============================================================================\n // FIELD UPDATES\n // ============================================================================\n\n /**\n * Update a field value\n */\n async updateField(\n sessionId: string,\n entityId: UUID,\n field: string,\n value: JsonValue,\n confidence: number,\n source: FieldState[\"source\"],\n messageId?: string\n ): Promise<void> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n if (!form) {\n throw new Error(`Form not found: ${session.formId}`);\n }\n\n const control = form.controls.find((c) => c.key === field);\n if (!control) {\n throw new Error(`Field not found: ${field}`);\n }\n\n // Get old value for history\n const oldValue = session.fields[field]?.value;\n\n // Validate the value\n const validation = validateField(value, control);\n\n // Determine status based on confidence and validation\n let status: FieldState[\"status\"];\n if (!validation.valid) {\n status = \"invalid\";\n } else if (confidence < (control.confirmThreshold ?? 0.8)) {\n status = \"uncertain\";\n } else {\n status = \"filled\";\n }\n\n const now = Date.now();\n\n // Add to history for undo\n if (oldValue !== undefined) {\n const historyEntry: FieldHistoryEntry = {\n field,\n oldValue,\n newValue: value,\n timestamp: now,\n };\n session.history.push(historyEntry);\n\n // Limit history size\n const maxUndo = form.ux?.maxUndoSteps ?? 5;\n if (session.history.length > maxUndo) {\n session.history = session.history.slice(-maxUndo);\n }\n }\n\n // Update field state\n session.fields[field] = {\n status,\n value,\n confidence,\n source,\n messageId,\n updatedAt: now,\n error: !validation.valid ? validation.error : undefined,\n };\n\n // Update effort tracking\n session.effort.interactionCount++;\n session.effort.lastInteractionAt = now;\n session.effort.timeSpentMs = now - session.effort.firstInteractionAt;\n\n // Recalculate TTL\n session.expiresAt = this.calculateTTL(session);\n\n // Check if all required fields are filled\n const allRequiredFilled = this.checkAllRequiredFilled(session, form);\n if (allRequiredFilled && session.status === \"active\") {\n session.status = \"ready\";\n if (form.hooks?.onReady) {\n await this.executeHook(session, \"onReady\");\n }\n }\n\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n\n // Execute onFieldChange hook\n if (form.hooks?.onFieldChange) {\n const hookPayload: Record<string, JsonValue> = { field, value };\n if (oldValue !== undefined) {\n hookPayload.oldValue = oldValue;\n }\n await this.executeHook(session, \"onFieldChange\", hookPayload);\n }\n }\n\n /**\n * Undo the last field change\n */\n async undoLastChange(\n sessionId: string,\n entityId: UUID\n ): Promise<{ field: string; restoredValue: JsonValue } | null> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n if (!form?.ux?.allowUndo) {\n return null;\n }\n\n const lastChange = session.history.pop();\n if (!lastChange) {\n return null;\n }\n\n // Restore the old value\n if (lastChange.oldValue !== undefined) {\n session.fields[lastChange.field] = {\n status: \"filled\",\n value: lastChange.oldValue,\n source: \"correction\",\n updatedAt: Date.now(),\n };\n } else {\n session.fields[lastChange.field] = { status: \"empty\" };\n }\n\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n\n return { field: lastChange.field, restoredValue: lastChange.oldValue };\n }\n\n /**\n * Skip an optional field\n */\n async skipField(sessionId: string, entityId: UUID, field: string): Promise<boolean> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n if (!form?.ux?.allowSkip) {\n return false;\n }\n\n const control = form.controls.find((c) => c.key === field);\n if (!control) {\n return false;\n }\n\n // Can't skip required fields\n if (control.required) {\n return false;\n }\n\n session.fields[field] = {\n status: \"skipped\",\n updatedAt: Date.now(),\n };\n\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n\n return true;\n }\n\n /**\n * Confirm an uncertain field value\n */\n async confirmField(\n sessionId: string,\n entityId: UUID,\n field: string,\n accepted: boolean\n ): Promise<void> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const fieldState = session.fields[field];\n if (!fieldState || fieldState.status !== \"uncertain\") {\n return;\n }\n\n const now = Date.now();\n\n if (accepted) {\n fieldState.status = \"filled\";\n fieldState.confirmedAt = now;\n } else {\n // Reset the field\n fieldState.status = \"empty\";\n fieldState.value = undefined;\n fieldState.confidence = undefined;\n }\n\n fieldState.updatedAt = now;\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n }\n\n // ============================================================================\n // SUBFIELD UPDATES (for composite types)\n // ============================================================================\n\n /**\n * Update a subfield value for a composite control type.\n *\n * Composite types (like payment, address) have subcontrols that must\n * all be filled before the parent field is complete.\n *\n * WHY separate from updateField:\n * - Subfields are stored in fieldState.subFields, not session.fields\n * - Parent field status depends on all subfields being filled\n * - Allows tracking subfield confidence/status independently\n *\n * @param sessionId - The session ID\n * @param entityId - The entity/user ID\n * @param parentField - The parent control key (e.g., \"payment\")\n * @param subField - The subcontrol key (e.g., \"amount\")\n * @param value - The extracted value\n * @param confidence - LLM confidence (0-1)\n * @param messageId - Optional message ID for audit\n */\n async updateSubField(\n sessionId: string,\n entityId: UUID,\n parentField: string,\n subField: string,\n value: JsonValue,\n confidence: number,\n messageId?: string\n ): Promise<void> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n if (!form) {\n throw new Error(`Form not found: ${session.formId}`);\n }\n\n const parentControl = form.controls.find((c) => c.key === parentField);\n if (!parentControl) {\n throw new Error(`Parent field not found: ${parentField}`);\n }\n\n const controlType = this.getControlType(parentControl.type);\n if (!controlType?.getSubControls) {\n throw new Error(`Control type '${parentControl.type}' is not a composite type`);\n }\n\n // Get subcontrols to find the subcontrol definition\n const subControls = controlType.getSubControls(parentControl, this.runtime);\n const subControl = subControls.find((c) => c.key === subField);\n if (!subControl) {\n throw new Error(`Subfield not found: ${subField} in ${parentField}`);\n }\n\n const now = Date.now();\n\n // Initialize parent field state if needed\n if (!session.fields[parentField]) {\n session.fields[parentField] = { status: \"empty\" };\n }\n if (!session.fields[parentField].subFields) {\n session.fields[parentField].subFields = {};\n }\n\n // Validate the subfield value\n let subFieldStatus: FieldState[\"status\"];\n let error: string | undefined;\n\n // Use control type's validate if available\n if (controlType.validate) {\n const result = controlType.validate(value, subControl);\n if (!result.valid) {\n subFieldStatus = \"invalid\";\n error = result.error;\n } else if (confidence < (subControl.confirmThreshold ?? 0.8)) {\n subFieldStatus = \"uncertain\";\n } else {\n subFieldStatus = \"filled\";\n }\n } else {\n // Fallback to basic validation\n const validation = validateField(value, subControl);\n if (!validation.valid) {\n subFieldStatus = \"invalid\";\n error = validation.error;\n } else if (confidence < (subControl.confirmThreshold ?? 0.8)) {\n subFieldStatus = \"uncertain\";\n } else {\n subFieldStatus = \"filled\";\n }\n }\n\n // Update the subfield state\n session.fields[parentField].subFields[subField] = {\n status: subFieldStatus,\n value,\n confidence,\n source: \"extraction\",\n messageId,\n updatedAt: now,\n error,\n };\n\n // Update effort tracking\n session.effort.interactionCount++;\n session.effort.lastInteractionAt = now;\n session.effort.timeSpentMs = now - session.effort.firstInteractionAt;\n\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n\n logger.debug(`[FormService] Updated subfield ${parentField}.${subField}`);\n }\n\n /**\n * Check if all subfields of a composite field are filled.\n *\n * @param session - The form session\n * @param parentField - The parent control key\n * @returns true if all required subfields are filled\n */\n areSubFieldsFilled(session: FormSession, parentField: string): boolean {\n const form = this.getForm(session.formId);\n if (!form) return false;\n\n const parentControl = form.controls.find((c) => c.key === parentField);\n if (!parentControl) return false;\n\n const controlType = this.getControlType(parentControl.type);\n if (!controlType?.getSubControls) return false;\n\n const subControls = controlType.getSubControls(parentControl, this.runtime);\n const subFields = session.fields[parentField]?.subFields || {};\n\n // Check if all required subfields are filled\n for (const subControl of subControls) {\n if (!subControl.required) continue;\n const subField = subFields[subControl.key];\n if (!subField || subField.status !== \"filled\") {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get the current subfield values for a composite field.\n *\n * @param session - The form session\n * @param parentField - The parent control key\n * @returns Record of subfield key to value\n */\n getSubFieldValues(session: FormSession, parentField: string): Record<string, JsonValue> {\n const subFields = session.fields[parentField]?.subFields || {};\n const values: Record<string, JsonValue> = {};\n for (const [key, state] of Object.entries(subFields)) {\n if (state.value !== undefined) {\n values[key] = state.value;\n }\n }\n return values;\n }\n\n // ============================================================================\n // EXTERNAL FIELD ACTIVATION\n // ============================================================================\n\n /**\n * Activate an external field.\n *\n * External types (payment, signature) require an async activation process.\n * This is called when all subcontrols are filled and the external process\n * should begin (e.g., generate payment address, show signing instructions).\n *\n * WHY this method:\n * - Decouples activation trigger from the widget itself\n * - Stores activation state in the session\n * - Provides a clear API for the evaluator to call\n *\n * @param sessionId - The session ID\n * @param entityId - The entity/user ID\n * @param field - The field key\n * @returns The activation details (instructions, reference, etc.)\n */\n async activateExternalField(\n sessionId: string,\n entityId: UUID,\n field: string\n ): Promise<ExternalActivation> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n if (!form) {\n throw new Error(`Form not found: ${session.formId}`);\n }\n\n const control = form.controls.find((c) => c.key === field);\n if (!control) {\n throw new Error(`Field not found: ${field}`);\n }\n\n const controlType = this.getControlType(control.type);\n if (!controlType?.activate) {\n throw new Error(`Control type '${control.type}' does not support activation`);\n }\n\n // Gather subfield values\n const subValues = this.getSubFieldValues(session, field);\n\n // Create activation context\n const context: ActivationContext = {\n runtime: this.runtime,\n session,\n control,\n subValues,\n };\n\n // Call widget's activate method\n const activation = await controlType.activate(context);\n\n const now = Date.now();\n\n // Store activation state in the field\n if (!session.fields[field]) {\n session.fields[field] = { status: \"empty\" };\n }\n\n session.fields[field].status = \"pending\";\n session.fields[field].externalState = {\n status: \"pending\",\n reference: activation.reference,\n instructions: activation.instructions,\n address: activation.address,\n activatedAt: now,\n };\n\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n\n logger.info(\n `[FormService] Activated external field ${field} with reference ${activation.reference}`\n );\n\n return activation;\n }\n\n /**\n * Confirm an external field.\n *\n * Called by external services (payment, blockchain, etc.) when the\n * external process is complete (e.g., payment received, signature verified).\n *\n * WHY separate from confirmField:\n * - External confirmation includes external data (txId, etc.)\n * - Updates externalState, not just field status\n * - Emits events for other systems to react\n *\n * @param sessionId - The session ID\n * @param entityId - The entity/user ID\n * @param field - The field key\n * @param value - The final value to store (usually the confirmed data)\n * @param externalData - Additional data from the external source (txId, etc.)\n */\n async confirmExternalField(\n sessionId: string,\n entityId: UUID,\n field: string,\n value: JsonValue,\n externalData?: Record<string, JsonValue>\n ): Promise<void> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const fieldState = session.fields[field];\n if (!fieldState || fieldState.status !== \"pending\") {\n logger.warn(`[FormService] Cannot confirm field ${field}: not in pending state`);\n return;\n }\n\n const now = Date.now();\n\n // Update field state\n fieldState.status = \"filled\";\n fieldState.value = value;\n fieldState.source = \"external\";\n fieldState.updatedAt = now;\n\n // Update external state\n if (fieldState.externalState) {\n fieldState.externalState.status = \"confirmed\";\n fieldState.externalState.confirmedAt = now;\n fieldState.externalState.externalData = externalData;\n }\n\n // Check if form is now ready\n const form = this.getForm(session.formId);\n if (form && this.checkAllRequiredFilled(session, form)) {\n if (session.status === \"active\") {\n session.status = \"ready\";\n if (form.hooks?.onReady) {\n await this.executeHook(session, \"onReady\");\n }\n }\n }\n\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n\n // Emit event for listeners\n try {\n await this.runtime.emitEvent(\"FORM_FIELD_CONFIRMED\", {\n runtime: this.runtime,\n sessionId,\n entityId,\n field,\n value,\n externalData,\n } as EventPayload);\n } catch (_error) {\n logger.debug(`[FormService] No event handler for FORM_FIELD_CONFIRMED`);\n }\n\n logger.info(`[FormService] Confirmed external field ${field}`);\n }\n\n /**\n * Cancel an external field activation.\n *\n * Called when the external process fails, times out, or user cancels.\n *\n * @param sessionId - The session ID\n * @param entityId - The entity/user ID\n * @param field - The field key\n * @param reason - Reason for cancellation\n */\n async cancelExternalField(\n sessionId: string,\n entityId: UUID,\n field: string,\n reason: string\n ): Promise<void> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n const control = form?.controls.find((c) => c.key === field);\n const controlType = control ? this.getControlType(control.type) : undefined;\n\n // Call widget's deactivate if exists\n if (controlType?.deactivate && control) {\n try {\n await controlType.deactivate({\n runtime: this.runtime,\n session,\n control,\n subValues: this.getSubFieldValues(session, field),\n });\n } catch (error) {\n logger.error(`[FormService] Deactivate failed for ${field}: ${String(error)}`);\n }\n }\n\n const fieldState = session.fields[field];\n if (fieldState) {\n // Keep subfields but reset external state\n fieldState.status = \"empty\";\n fieldState.error = reason;\n if (fieldState.externalState) {\n fieldState.externalState.status = \"failed\";\n }\n }\n\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n\n // Emit event for listeners\n try {\n await this.runtime.emitEvent(\"FORM_FIELD_CANCELLED\", {\n runtime: this.runtime,\n sessionId,\n entityId,\n field,\n reason,\n } as EventPayload);\n } catch (_error) {\n logger.debug(`[FormService] No event handler for FORM_FIELD_CANCELLED`);\n }\n\n logger.info(`[FormService] Cancelled external field ${field}: ${reason}`);\n }\n\n // ============================================================================\n // LIFECYCLE\n // ============================================================================\n\n /**\n * Submit a form session\n */\n async submit(sessionId: string, entityId: UUID): Promise<FormSubmission> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n if (!form) {\n throw new Error(`Form not found: ${session.formId}`);\n }\n\n // Check all required fields are filled\n if (!this.checkAllRequiredFilled(session, form)) {\n throw new Error(\"Not all required fields are filled\");\n }\n\n const now = Date.now();\n\n // Build submission values\n const values: Record<string, JsonValue> = {};\n const mappedValues: Record<string, JsonValue> = {};\n const files: Record<string, NonNullable<FieldState[\"files\"]>> = {};\n\n for (const control of form.controls) {\n const fieldState = session.fields[control.key];\n if (fieldState?.value !== undefined) {\n values[control.key] = fieldState.value;\n const dbKey = control.dbbind || control.key;\n mappedValues[dbKey] = fieldState.value;\n }\n if (fieldState?.files) {\n files[control.key] = fieldState.files;\n }\n }\n\n const submission: FormSubmission = {\n id: uuidv4(),\n formId: session.formId,\n formVersion: session.formVersion,\n sessionId: session.id,\n entityId: session.entityId,\n values,\n mappedValues,\n files: Object.keys(files).length > 0 ? files : undefined,\n submittedAt: now,\n meta: session.meta,\n };\n\n // Save submission\n await saveSubmission(this.runtime, submission);\n\n // Update autofill data\n await saveAutofillData(this.runtime, entityId, session.formId, values);\n\n // Update session status\n session.status = \"submitted\";\n session.submittedAt = now;\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n\n // Execute onSubmit hook\n if (form.hooks?.onSubmit) {\n const submissionPayload = JSON.parse(JSON.stringify(submission)) as JsonValue;\n await this.executeHook(session, \"onSubmit\", {\n submission: submissionPayload,\n });\n }\n\n logger.debug(`[FormService] Submitted session ${sessionId}`);\n\n return submission;\n }\n\n /**\n * Stash a session for later\n */\n async stash(sessionId: string, entityId: UUID): Promise<void> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const form = this.getForm(session.formId);\n\n session.status = \"stashed\";\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n\n // Execute onStash hook\n if (form?.hooks?.onCancel) {\n // Using onCancel for stash as well, could add separate hook\n }\n\n logger.debug(`[FormService] Stashed session ${sessionId}`);\n }\n\n /**\n * Restore a stashed session\n */\n async restore(sessionId: string, entityId: UUID): Promise<FormSession> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n if (session.status !== \"stashed\") {\n throw new Error(`Session is not stashed: ${session.status}`);\n }\n\n // Check for existing active session in the same room\n const existing = await storageGetActiveSession(this.runtime, entityId, session.roomId);\n if (existing && existing.id !== sessionId) {\n throw new Error(`Active session already exists in room: ${existing.id}`);\n }\n\n session.status = \"active\";\n session.updatedAt = Date.now();\n\n // Recalculate TTL on restore\n session.expiresAt = this.calculateTTL(session);\n\n await storageSaveSession(this.runtime, session);\n\n logger.debug(`[FormService] Restored session ${sessionId}`);\n\n return session;\n }\n\n /**\n * Cancel a session\n */\n async cancel(sessionId: string, entityId: UUID, force = false): Promise<boolean> {\n const session = await getSessionById(this.runtime, entityId, sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n // Check if we should confirm cancellation\n if (!force && this.shouldConfirmCancel(session) && !session.cancelConfirmationAsked) {\n session.cancelConfirmationAsked = true;\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n return false; // Needs confirmation\n }\n\n const form = this.getForm(session.formId);\n\n session.status = \"cancelled\";\n session.updatedAt = Date.now();\n await storageSaveSession(this.runtime, session);\n\n // Execute onCancel hook\n if (form?.hooks?.onCancel) {\n await this.executeHook(session, \"onCancel\");\n }\n\n logger.debug(`[FormService] Cancelled session ${sessionId}`);\n\n return true;\n }\n\n // ============================================================================\n // SUBMISSIONS\n // ============================================================================\n\n /**\n * Get submissions for entity, optionally filtered by form ID\n */\n async getSubmissions(entityId: UUID, formId?: string): Promise<FormSubmission[]> {\n return storageGetSubmissions(this.runtime, entityId, formId);\n }\n\n // ============================================================================\n // AUTOFILL\n // ============================================================================\n\n /**\n * Get autofill data for a form\n */\n async getAutofill(entityId: UUID, formId: string): Promise<Record<string, JsonValue> | null> {\n const data = await getAutofillData(this.runtime, entityId, formId);\n return data?.values || null;\n }\n\n /**\n * Apply autofill to a session\n */\n async applyAutofill(session: FormSession): Promise<string[]> {\n const form = this.getForm(session.formId);\n if (!form?.ux?.allowAutofill) {\n return [];\n }\n\n const autofill = await getAutofillData(this.runtime, session.entityId, session.formId);\n if (!autofill) {\n return [];\n }\n\n const appliedFields: string[] = [];\n const now = Date.now();\n\n for (const control of form.controls) {\n // Only autofill empty fields\n if (session.fields[control.key]?.status !== \"empty\") {\n continue;\n }\n\n const value = autofill.values[control.key];\n if (value !== undefined) {\n session.fields[control.key] = {\n status: \"filled\",\n value,\n source: \"autofill\",\n updatedAt: now,\n };\n appliedFields.push(control.key);\n }\n }\n\n if (appliedFields.length > 0) {\n session.updatedAt = now;\n await storageSaveSession(this.runtime, session);\n }\n\n return appliedFields;\n }\n\n // ============================================================================\n // CONTEXT HELPERS\n // ============================================================================\n\n /**\n * Get session context for provider\n */\n getSessionContext(session: FormSession): FormContextState {\n const form = this.getForm(session.formId);\n if (!form) {\n return {\n hasActiveForm: false,\n progress: 0,\n filledFields: [],\n missingRequired: [],\n uncertainFields: [],\n nextField: null,\n pendingExternalFields: [],\n };\n }\n\n const filledFields: FilledFieldSummary[] = [];\n const missingRequired: MissingFieldSummary[] = [];\n const uncertainFields: UncertainFieldSummary[] = [];\n const pendingExternalFields: PendingExternalFieldSummary[] = [];\n let nextField: FormControl | null = null;\n\n let filledCount = 0;\n let totalRequired = 0;\n\n for (const control of form.controls) {\n if (control.hidden) continue;\n\n const fieldState = session.fields[control.key];\n\n if (control.required) {\n totalRequired++;\n }\n\n if (fieldState?.status === \"filled\") {\n filledCount++;\n filledFields.push({\n key: control.key,\n label: control.label,\n displayValue: formatValue(fieldState.value ?? null, control),\n });\n } else if (fieldState?.status === \"pending\") {\n // External field waiting for confirmation\n if (fieldState.externalState) {\n pendingExternalFields.push({\n key: control.key,\n label: control.label,\n instructions: fieldState.externalState.instructions || \"Waiting for confirmation...\",\n reference: fieldState.externalState.reference || \"\",\n activatedAt: fieldState.externalState.activatedAt || Date.now(),\n address: fieldState.externalState.address,\n });\n }\n // Don't set as nextField - we're waiting for external confirmation\n } else if (fieldState?.status === \"uncertain\") {\n uncertainFields.push({\n key: control.key,\n label: control.label,\n value: fieldState.value ?? null,\n confidence: fieldState.confidence ?? 0,\n });\n } else if (fieldState?.status === \"invalid\") {\n missingRequired.push({\n key: control.key,\n label: control.label,\n description: control.description,\n askPrompt: control.askPrompt,\n });\n if (!nextField) nextField = control;\n } else if (control.required && fieldState?.status !== \"skipped\") {\n missingRequired.push({\n key: control.key,\n label: control.label,\n description: control.description,\n askPrompt: control.askPrompt,\n });\n if (!nextField) nextField = control;\n } else if (!nextField && fieldState?.status === \"empty\") {\n nextField = control;\n }\n }\n\n const progress = totalRequired > 0 ? Math.round((filledCount / totalRequired) * 100) : 100;\n\n return {\n hasActiveForm: true,\n formId: session.formId,\n formName: form.name,\n progress,\n filledFields,\n missingRequired,\n uncertainFields,\n nextField,\n status: session.status,\n pendingCancelConfirmation: session.cancelConfirmationAsked && session.status === \"active\",\n pendingExternalFields,\n };\n }\n\n /**\n * Get current values from session\n */\n getValues(session: FormSession): Record<string, JsonValue> {\n const values: Record<string, JsonValue> = {};\n for (const [key, state] of Object.entries(session.fields)) {\n if (state.value !== undefined) {\n values[key] = state.value;\n }\n }\n return values;\n }\n\n /**\n * Get mapped values (using dbbind)\n */\n getMappedValues(session: FormSession): Record<string, JsonValue> {\n const form = this.getForm(session.formId);\n if (!form) return {};\n\n const values: Record<string, JsonValue> = {};\n for (const control of form.controls) {\n const state = session.fields[control.key];\n if (state?.value !== undefined) {\n const key = control.dbbind || control.key;\n values[key] = state.value;\n }\n }\n return values;\n }\n\n // ============================================================================\n // TTL & EFFORT\n // ============================================================================\n\n /**\n * Calculate TTL based on effort\n */\n calculateTTL(session: FormSession): number {\n const form = this.getForm(session.formId);\n const config = form?.ttl || {};\n\n const minDays = config.minDays ?? 14;\n const maxDays = config.maxDays ?? 90;\n const multiplier = config.effortMultiplier ?? 0.5;\n\n const minutesSpent = session.effort.timeSpentMs / 60000;\n const effortDays = minutesSpent * multiplier;\n\n const ttlDays = Math.min(maxDays, Math.max(minDays, effortDays));\n return Date.now() + ttlDays * 24 * 60 * 60 * 1000;\n }\n\n /**\n * Check if cancel should require confirmation\n */\n shouldConfirmCancel(session: FormSession): boolean {\n const minEffortMs = 5 * 60 * 1000; // 5 minutes\n return session.effort.timeSpentMs > minEffortMs;\n }\n\n // ============================================================================\n // HOOKS\n // ============================================================================\n\n /**\n * Execute a form hook\n */\n private async executeHook(\n session: FormSession,\n hookName: keyof NonNullable<FormDefinition[\"hooks\"]>,\n options?: Record<string, JsonValue>\n ): Promise<void> {\n const form = this.getForm(session.formId);\n const workerName = form?.hooks?.[hookName];\n\n if (!workerName) return;\n\n const worker = this.runtime.getTaskWorker(workerName);\n if (!worker) {\n logger.warn(`[FormService] Hook worker not found: ${workerName}`);\n return;\n }\n\n try {\n // Create a minimal task object for hook execution\n const task: Task = {\n id: session.id as UUID,\n name: workerName,\n roomId: session.roomId,\n entityId: session.entityId,\n tags: [\"form-hook\", hookName],\n };\n await worker.execute(\n this.runtime,\n {\n session,\n form,\n ...options,\n },\n task\n );\n } catch (error) {\n logger.error(`[FormService] Hook execution failed: ${hookName}`, String(error));\n }\n }\n\n // ============================================================================\n // HELPERS\n // ============================================================================\n\n /**\n * Check if all required fields are filled\n */\n private checkAllRequiredFilled(session: FormSession, form: FormDefinition): boolean {\n for (const control of form.controls) {\n if (!control.required) continue;\n\n const fieldState = session.fields[control.key];\n if (!fieldState || fieldState.status === \"empty\" || fieldState.status === \"invalid\") {\n return false;\n }\n }\n return true;\n }\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS\n// ============================================================================\n\n/**\n * Convert snake_case or kebab-case to Title Case\n */\nfunction prettify(key: string): string {\n return key.replace(/[-_]/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n",
18
- "/**\n * @module actions/restore\n * @description Action for restoring stashed form sessions\n *\n * ## Why an Action (Not Evaluator)\n *\n * The restore operation is unique among form intents because:\n *\n * 1. **Timing Matters**: The restored form context must be available\n * to the agent BEFORE it generates a response. Evaluators run\n * AFTER response generation.\n *\n * 2. **Preemption**: When user says \"resume my form\", the FORM_RESTORE\n * action should preempt REPLY, generate its own response with the\n * restored context, and let the agent continue naturally.\n *\n * 3. **Immediate Context**: After restore, the provider runs and gives\n * the agent the restored form context for its response.\n *\n * ## Flow Comparison\n *\n * ### Other Intents (via Evaluator):\n * ```\n * Message → Provider (no context) → REPLY → Evaluator (updates state)\n * ↓\n * Next message has updated context\n * ```\n *\n * ### Restore Intent (via Action):\n * ```\n * Message → FORM_RESTORE.validate() → true\n * ↓\n * FORM_RESTORE.handler() → Restore session → Generate response\n * ↓\n * Next message has restored context immediately\n * ```\n *\n * ## Handling Multiple Stashed Forms\n *\n * If user has multiple stashed forms, this action restores the most recent.\n * Future enhancement: Let user choose which form to restore.\n *\n * ## Conflicts with Active Forms\n *\n * If user has an active form in the current room and tries to restore,\n * the action asks them to either continue or stash the current one.\n */\n\nimport {\n type Action,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n type UUID,\n} from \"@elizaos/core\";\nimport { quickIntentDetect } from \"../intent\";\nimport type { FormService } from \"../service\";\n\n/**\n * Form Restore Action\n *\n * Fast-path action for restoring stashed forms.\n * Preempts REPLY to provide immediate restoration with summary.\n *\n * WHY action:\n * - Needs to run BEFORE provider\n * - Must generate immediate response\n * - Context needed for next message\n */\nexport const formRestoreAction: Action = {\n name: \"FORM_RESTORE\",\n similes: [\"RESUME_FORM\", \"CONTINUE_FORM\"],\n description: \"Restore a previously stashed form session\",\n\n /**\n * Validate: Only trigger for restore intent with stashed sessions.\n *\n * Fast path: Uses quickIntentDetect for English keywords.\n * Evaluator handles non-English via LLM.\n *\n * @returns true if action should run\n */\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"form\", \"restore\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:form|restore)\\b/i;\n const __avRegexOk = __avRegex.test(__avText);\n const __avSource = String(message?.content?.source ?? message?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State\n ): Promise<boolean> => {\n try {\n const text = message.content?.text || \"\";\n\n // Quick check for restore intent\n // WHY quick path: Avoid LLM call for simple English phrases\n const intent = quickIntentDetect(text);\n if (intent !== \"restore\") {\n return false;\n }\n\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n return false;\n }\n\n // Check for stashed sessions\n // WHY check stashed: No point restoring if nothing to restore\n const entityId = message.entityId as UUID;\n if (!entityId) return false;\n const stashed = await formService.getStashedSessions(entityId);\n\n return stashed.length > 0;\n } catch (error) {\n logger.error(\"[FormRestoreAction] Validation error:\", String(error));\n return false;\n }\n };\n try {\n return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n } catch {\n return false;\n }\n },\n\n /**\n * Handler: Restore the most recent stashed session.\n *\n * 1. Check for conflicts (active session in room)\n * 2. Restore the session\n * 3. Generate summary response\n *\n * @returns ActionResult with success status and session data\n */\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n try {\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n await callback?.({\n text: \"Sorry, I couldn't find the form service.\",\n });\n return { success: false };\n }\n\n const entityId = message.entityId as UUID;\n const roomId = message.roomId as UUID;\n\n if (!entityId || !roomId) {\n await callback?.({\n text: \"Sorry, I couldn't identify you.\",\n });\n return { success: false };\n }\n\n // Check for existing active session in this room\n // WHY check: Can't have two active sessions in same room\n const existing = await formService.getActiveSession(entityId, roomId);\n if (existing) {\n const form = formService.getForm(existing.formId);\n await callback?.({\n text: `You already have an active form: \"${form?.name || existing.formId}\". Would you like to continue with that one, or should I save it and restore your other form?`,\n });\n return { success: false };\n }\n\n // Get stashed sessions\n const stashed = await formService.getStashedSessions(entityId);\n\n if (stashed.length === 0) {\n await callback?.({\n text: \"You don't have any saved forms to resume.\",\n });\n return { success: false };\n }\n\n // Restore the most recent stashed session\n // WHY most recent: User likely wants what they just stashed\n // TODO: Let user choose if multiple\n const sessionToRestore = stashed.sort((a, b) => b.updatedAt - a.updatedAt)[0];\n const session = await formService.restore(sessionToRestore.id, entityId);\n\n const form = formService.getForm(session.formId);\n const context = formService.getSessionContext(session);\n\n // Generate response with restored context\n // WHY immediate response: User knows what happened\n let responseText = `I've restored your \"${form?.name || session.formId}\" form. `;\n responseText += `You're ${context.progress}% complete. `;\n\n if (context.filledFields.length > 0) {\n responseText += `\\n\\nHere's what I have so far:\\n`;\n for (const field of context.filledFields) {\n responseText += `• ${field.label}: ${field.displayValue}\\n`;\n }\n }\n\n if (context.nextField) {\n responseText += `\\nLet's continue with ${context.nextField.label}.`;\n if (context.nextField.askPrompt) {\n responseText += ` ${context.nextField.askPrompt}`;\n }\n } else if (context.status === \"ready\") {\n responseText += `\\nEverything looks complete! Ready to submit?`;\n }\n\n await callback?.({\n text: responseText,\n });\n\n return {\n success: true,\n data: {\n sessionId: session.id,\n formId: session.formId,\n progress: context.progress,\n },\n };\n } catch (error) {\n logger.error(\"[FormRestoreAction] Handler error:\", String(error));\n await callback?.({\n text: \"Sorry, I couldn't restore your form. Please try again.\",\n });\n return { success: false };\n }\n },\n\n // Example conversations for training/documentation\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Resume my form\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your form. Let's continue where you left off.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Continue with my registration\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your Registration form. You're 60% complete.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Pick up where I left off\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your form. Here's what you have so far...\",\n },\n },\n ],\n ],\n};\n\nexport default formRestoreAction;\n",
18
+ "/**\n * @module actions/restore\n * @description Action for restoring stashed form sessions\n *\n * ## Why an Action (Not Evaluator)\n *\n * The restore operation is unique among form intents because:\n *\n * 1. **Timing Matters**: The restored form context must be available\n * to the agent BEFORE it generates a response. Evaluators run\n * AFTER response generation.\n *\n * 2. **Preemption**: When user says \"resume my form\", the FORM_RESTORE\n * action should preempt REPLY, generate its own response with the\n * restored context, and let the agent continue naturally.\n *\n * 3. **Immediate Context**: After restore, the provider runs and gives\n * the agent the restored form context for its response.\n *\n * ## Flow Comparison\n *\n * ### Other Intents (via Evaluator):\n * ```\n * Message → Provider (no context) → REPLY → Evaluator (updates state)\n * ↓\n * Next message has updated context\n * ```\n *\n * ### Restore Intent (via Action):\n * ```\n * Message → FORM_RESTORE.validate() → true\n * ↓\n * FORM_RESTORE.handler() → Restore session → Generate response\n * ↓\n * Next message has restored context immediately\n * ```\n *\n * ## Handling Multiple Stashed Forms\n *\n * If user has multiple stashed forms, this action restores the most recent.\n * Future enhancement: Let user choose which form to restore.\n *\n * ## Conflicts with Active Forms\n *\n * If user has an active form in the current room and tries to restore,\n * the action asks them to either continue or stash the current one.\n */\n\nimport {\n type Action,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n type UUID,\n} from \"@elizaos/core\";\nimport { quickIntentDetect } from \"../intent\";\nimport type { FormService } from \"../service\";\n\n/**\n * Form Restore Action\n *\n * Fast-path action for restoring stashed forms.\n * Preempts REPLY to provide immediate restoration with summary.\n *\n * WHY action:\n * - Needs to run BEFORE provider\n * - Must generate immediate response\n * - Context needed for next message\n */\nexport const formRestoreAction: Action = {\n name: \"FORM_RESTORE\",\n similes: [\"RESUME_FORM\", \"CONTINUE_FORM\"],\n description: \"Restore a previously stashed form session\",\n\n /**\n * Validate: Only trigger for restore intent with stashed sessions.\n *\n * Fast path: Uses quickIntentDetect for English keywords.\n * Evaluator handles non-English via LLM.\n *\n * @returns true if action should run\n */\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"form\", \"restore\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:form|restore)\\b/i;\n const __avRegexOk = Boolean(__avText.match(__avRegex));\n const __avSource = String(message?.content?.source ?? message?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State\n ): Promise<boolean> => {\n try {\n const text = message.content?.text || \"\";\n\n // Quick check for restore intent\n // WHY quick path: Avoid LLM call for simple English phrases\n const intent = quickIntentDetect(text);\n if (intent !== \"restore\") {\n return false;\n }\n\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n return false;\n }\n\n // Check for stashed sessions\n // WHY check stashed: No point restoring if nothing to restore\n const entityId = message.entityId as UUID;\n if (!entityId) return false;\n const stashed = await formService.getStashedSessions(entityId);\n\n return stashed.length > 0;\n } catch (error) {\n logger.error(\"[FormRestoreAction] Validation error:\", String(error));\n return false;\n }\n };\n try {\n return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n } catch {\n return false;\n }\n },\n\n /**\n * Handler: Restore the most recent stashed session.\n *\n * 1. Check for conflicts (active session in room)\n * 2. Restore the session\n * 3. Generate summary response\n *\n * @returns ActionResult with success status and session data\n */\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n try {\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n await callback?.({\n text: \"Sorry, I couldn't find the form service.\",\n });\n return { success: false };\n }\n\n const entityId = message.entityId as UUID;\n const roomId = message.roomId as UUID;\n\n if (!entityId || !roomId) {\n await callback?.({\n text: \"Sorry, I couldn't identify you.\",\n });\n return { success: false };\n }\n\n // Check for existing active session in this room\n // WHY check: Can't have two active sessions in same room\n const existing = await formService.getActiveSession(entityId, roomId);\n if (existing) {\n const form = formService.getForm(existing.formId);\n await callback?.({\n text: `You already have an active form: \"${form?.name || existing.formId}\". Would you like to continue with that one, or should I save it and restore your other form?`,\n });\n return { success: false };\n }\n\n // Get stashed sessions\n const stashed = await formService.getStashedSessions(entityId);\n\n if (stashed.length === 0) {\n await callback?.({\n text: \"You don't have any saved forms to resume.\",\n });\n return { success: false };\n }\n\n // Restore the most recent stashed session\n // WHY most recent: User likely wants what they just stashed\n // TODO: Let user choose if multiple\n const sessionToRestore = stashed.sort((a, b) => b.updatedAt - a.updatedAt)[0];\n const session = await formService.restore(sessionToRestore.id, entityId);\n\n const form = formService.getForm(session.formId);\n const context = formService.getSessionContext(session);\n\n // Generate response with restored context\n // WHY immediate response: User knows what happened\n let responseText = `I've restored your \"${form?.name || session.formId}\" form. `;\n responseText += `You're ${context.progress}% complete. `;\n\n if (context.filledFields.length > 0) {\n responseText += `\\n\\nHere's what I have so far:\\n`;\n for (const field of context.filledFields) {\n responseText += `• ${field.label}: ${field.displayValue}\\n`;\n }\n }\n\n if (context.nextField) {\n responseText += `\\nLet's continue with ${context.nextField.label}.`;\n if (context.nextField.askPrompt) {\n responseText += ` ${context.nextField.askPrompt}`;\n }\n } else if (context.status === \"ready\") {\n responseText += `\\nEverything looks complete! Ready to submit?`;\n }\n\n await callback?.({\n text: responseText,\n });\n\n return {\n success: true,\n data: {\n sessionId: session.id,\n formId: session.formId,\n progress: context.progress,\n },\n };\n } catch (error) {\n logger.error(\"[FormRestoreAction] Handler error:\", String(error));\n await callback?.({\n text: \"Sorry, I couldn't restore your form. Please try again.\",\n });\n return { success: false };\n }\n },\n\n // Example conversations for training/documentation\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Resume my form\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your form. Let's continue where you left off.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Continue with my registration\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your Registration form. You're 60% complete.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Pick up where I left off\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your form. Here's what you have so far...\",\n },\n },\n ],\n ],\n};\n\nexport default formRestoreAction;\n",
19
19
  "/**\n * @module evaluators/extractor\n * @description Form evaluator for field extraction and intent handling\n *\n * ## Role in Form Plugin\n *\n * The evaluator is the \"brain\" of the form plugin. It runs AFTER\n * each user message and:\n *\n * 1. Detects user intent (submit, cancel, undo, etc.)\n * 2. Extracts field values from natural language\n * 3. Updates session state accordingly\n * 4. Triggers lifecycle transitions\n * 5. **Emits events** for widgets and other listeners\n *\n * ## Event Emission\n *\n * The evaluator emits standardized events as it processes messages:\n *\n * - `FORM_FIELD_EXTRACTED`: Value extracted for a simple field\n * - `FORM_SUBFIELD_UPDATED`: Value extracted for a composite subfield\n * - `FORM_SUBCONTROLS_FILLED`: All subcontrols of composite type filled\n * - `FORM_EXTERNAL_ACTIVATED`: External type activated\n *\n * Widgets DON'T parse messages - they react to these events.\n * This keeps parsing logic centralized in the evaluator.\n *\n * ## Processing Flow\n *\n * ```\n * User Message → Evaluator.validate() → Should we run?\n * ↓ Yes\n * Evaluator.handler() →\n * ↓\n * quickIntentDetect() → Fast path for English\n * ↓ No match\n * llmIntentAndExtract() → LLM fallback\n * ↓\n * Handle intent (submit, stash, cancel, undo, etc.)\n * ↓\n * Process extractions (update fields OR subfields)\n * ↓\n * Emit events (FORM_FIELD_EXTRACTED, etc.)\n * ↓\n * Check composite types → Activate if all subfields filled\n * ↓\n * Save session\n * ```\n *\n * ## Why Evaluator (Not Action)\n *\n * We use an evaluator because:\n *\n * 1. **Runs Always**: Evaluators run on every message, not just when\n * explicitly invoked. Form extraction should happen automatically.\n *\n * 2. **Post-Processing**: Evaluators run after actions, allowing the\n * provider to set context and REPLY action to generate response.\n *\n * 3. **No Response Generation**: Evaluators don't generate responses,\n * they just update state. The agent (REPLY) handles responses.\n *\n * ## Intent Handling\n *\n * Different intents are handled differently:\n *\n * - **Lifecycle** (submit, stash, cancel): Change session status\n * - **UX** (undo, skip, autofill): Modify session without status change\n * - **Info** (explain, example, progress): No state change, just context\n * - **Data** (fill_form): Extract and update field values\n *\n * ## FORM_RESTORE Exception\n *\n * The 'restore' intent is handled by FORM_RESTORE action, not here.\n * This is because restore needs to happen BEFORE the provider runs,\n * so the agent has the restored form context for its response.\n */\n\nimport type {\n ActionResult,\n Evaluator,\n EventPayload,\n IAgentRuntime,\n JsonValue,\n Memory,\n State,\n UUID,\n} from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { llmIntentAndExtract } from \"../extraction\";\nimport { quickIntentDetect } from \"../intent\";\nimport type { FormService } from \"../service\";\nimport { buildTemplateValues } from \"../template\";\nimport type { ExtractionResult, FormDefinition, FormIntent, FormSession } from \"../types\";\n\n/**\n * Form Evaluator\n *\n * Runs after each message to:\n * 1. Detect user intent (fast path for English, LLM fallback for other languages)\n * 2. Extract field values from natural language\n * 3. Handle lifecycle intents (submit, stash, cancel)\n * 4. Handle UX intents (undo, skip, explain, example, progress, autofill)\n * 5. Update session state\n */\nexport const formEvaluator: Evaluator = {\n name: \"form_evaluator\",\n description: \"Extracts form fields and handles form intents from user messages\",\n similes: [\"FORM_EXTRACTION\", \"FORM_HANDLER\"],\n examples: [], // No examples needed for evaluators\n\n /**\n * Validate: Should this evaluator run?\n *\n * Only runs if there's an active form session OR stashed sessions\n * (to handle restore intent).\n *\n * WHY check stashed:\n * - User might say \"resume my form\"\n * - Need to detect restore intent even without active session\n * - Note: Actual restore is handled by FORM_RESTORE action\n *\n * @returns true if evaluator should run\n */\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n try {\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) return false;\n\n const entityId = message.entityId as UUID;\n const roomId = message.roomId as UUID;\n\n if (!entityId || !roomId) return false;\n\n // Run if there's an active session OR if there are stashed sessions\n // (to handle restore intent)\n const session = await formService.getActiveSession(entityId, roomId);\n const stashed = await formService.getStashedSessions(entityId);\n\n return session !== null || stashed.length > 0;\n } catch (error) {\n logger.error(\"[FormEvaluator] Validation error:\", String(error));\n return false;\n }\n },\n\n /**\n * Handler: Process the message and update form state.\n *\n * This is the main logic loop:\n * 1. Try fast-path intent detection\n * 2. Fall back to LLM if no match\n * 3. Handle the detected intent\n * 4. Process any field extractions\n *\n * @param runtime - Agent runtime for service access\n * @param message - The user message to process\n * @param state - Current agent state (optional)\n */\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State\n ): Promise<ActionResult | undefined> => {\n try {\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) return undefined;\n\n const entityId = message.entityId as UUID;\n const roomId = message.roomId as UUID;\n const text = message.content?.text || \"\";\n\n if (!entityId || !roomId) return undefined;\n\n // Skip empty messages\n if (!text.trim()) return undefined;\n\n // Get active session\n let session = await formService.getActiveSession(entityId, roomId);\n\n // === TIER 1: Fast Path Intent Detection ===\n // Try English keyword matching first (no LLM call)\n let intent: FormIntent | null = quickIntentDetect(text);\n let extractions: ExtractionResult[] = [];\n\n // Handle restore intent when no active session\n // WHY early return: Restore is handled by FORM_RESTORE action\n if (intent === \"restore\" && !session) {\n logger.debug(\"[FormEvaluator] Restore intent detected, deferring to action\");\n return undefined;\n }\n\n // If no active session after restore check, nothing else to do\n if (!session) {\n return undefined;\n }\n\n // Get the form definition\n const form = formService.getForm(session.formId);\n if (!form) {\n logger.warn(\"[FormEvaluator] Form not found for session:\", session.formId);\n return undefined;\n }\n const templateValues = buildTemplateValues(session);\n\n // === TIER 2: LLM Fallback ===\n // If fast path didn't match, use LLM for:\n // - Non-English phrases\n // - Ambiguous messages\n // - Field extraction\n if (!intent) {\n const result = await llmIntentAndExtract(\n runtime,\n text,\n form,\n form.controls,\n templateValues\n );\n intent = result.intent;\n extractions = result.extractions;\n\n if (form.debug) {\n logger.debug(\n \"[FormEvaluator] LLM extraction result:\",\n JSON.stringify({ intent, extractions })\n );\n }\n }\n\n // === INTENT HANDLING ===\n // Different intents require different handling\n switch (intent) {\n // --- Lifecycle Intents ---\n\n case \"submit\":\n // User wants to complete the form\n await handleSubmit(formService, session, entityId);\n break;\n\n case \"stash\":\n // User wants to save for later\n await formService.stash(session.id, entityId);\n break;\n\n case \"cancel\":\n // User wants to abandon the form\n // Note: cancel() handles confirmation for high-effort forms\n await formService.cancel(session.id, entityId);\n break;\n\n // --- UX Intents ---\n\n case \"undo\":\n // Revert the last field change\n await handleUndo(formService, session, entityId, form);\n break;\n\n case \"skip\":\n // Skip the current optional field\n await handleSkip(formService, session, entityId, form);\n break;\n\n case \"autofill\":\n // Apply saved values from previous submissions\n await formService.applyAutofill(session);\n break;\n\n // --- Info Intents ---\n // These don't change state - the provider gives context for response\n\n case \"explain\":\n case \"example\":\n case \"progress\":\n // These are info intents - the provider will give context\n // The agent (REPLY) will respond based on provider context\n // We just log that we got an info request\n logger.debug(`[FormEvaluator] Info intent: ${intent}`);\n break;\n\n // --- Special Cases ---\n\n case \"restore\":\n // Handled by FORM_RESTORE action, should not reach here\n // WHY here: Just in case it does, log and skip\n logger.debug(\"[FormEvaluator] Restore intent - deferring to action\");\n break;\n default:\n // Process extractions - update field values\n // This handles both simple fields and subfields for composite types\n await processExtractions(\n runtime,\n formService,\n session,\n form,\n entityId,\n extractions,\n message.id\n );\n break;\n }\n\n // Update last message ID for tracking\n // WHY: Helps with deduplication and debugging\n session = await formService.getActiveSession(entityId, roomId);\n if (session) {\n session.lastMessageId = message.id;\n await formService.saveSession(session);\n }\n } catch (error) {\n logger.error(\"[FormEvaluator] Handler error:\", String(error));\n return undefined;\n }\n return undefined;\n },\n};\n\n// ============================================================================\n// EXTRACTION PROCESSING\n// ============================================================================\n\n/**\n * Process field extractions, handling both simple and composite types.\n *\n * This is the central extraction handler that:\n * 1. Determines if each extraction is for a simple field or subfield\n * 2. Updates the appropriate field/subfield state\n * 3. Emits events for listeners (widgets, analytics)\n * 4. Triggers activation for external types when subcontrols are filled\n *\n * WHY centralized:\n * - Single point of message parsing → event emission\n * - Widgets don't parse, they react to events\n * - Consistent event flow for all field types\n *\n * WHY event emission:\n * - Decouples extraction from widget logic\n * - Widgets can be in separate plugins\n * - Enables analytics/logging without code changes\n * - Reactive pattern: events flow, state changes automatically\n *\n * WHY track updatedParents:\n * - Need to check if composite types are now ready for activation\n * - Only check parents that had subfield updates this turn\n * - Avoids redundant activation checks\n */\nasync function processExtractions(\n runtime: IAgentRuntime,\n formService: FormService,\n session: FormSession,\n form: FormDefinition,\n entityId: UUID,\n extractions: ExtractionResult[],\n messageId?: string\n): Promise<void> {\n // Track which parent fields had subfields updated (for activation check)\n const updatedParents: Set<string> = new Set();\n\n for (const extraction of extractions) {\n // Check if this is a subfield (e.g., \"payment.amount\")\n if (extraction.field.includes(\".\")) {\n const [parentKey, subKey] = extraction.field.split(\".\");\n\n // Update subfield\n await formService.updateSubField(\n session.id,\n entityId,\n parentKey,\n subKey,\n extraction.value,\n extraction.confidence,\n messageId\n );\n\n // Emit FORM_SUBFIELD_UPDATED event\n await emitEvent(runtime, \"FORM_SUBFIELD_UPDATED\", {\n sessionId: session.id,\n parentField: parentKey,\n subField: subKey,\n value: extraction.value,\n confidence: extraction.confidence,\n });\n\n updatedParents.add(parentKey);\n\n if (form.debug) {\n logger.debug(`[FormEvaluator] Updated subfield ${parentKey}.${subKey}`);\n }\n } else {\n // Simple field update\n await formService.updateField(\n session.id,\n entityId,\n extraction.field,\n extraction.value,\n extraction.confidence,\n extraction.isCorrection ? \"correction\" : \"extraction\",\n messageId\n );\n\n // Emit FORM_FIELD_EXTRACTED event\n await emitEvent(runtime, \"FORM_FIELD_EXTRACTED\", {\n sessionId: session.id,\n field: extraction.field,\n value: extraction.value,\n confidence: extraction.confidence,\n });\n\n if (form.debug) {\n logger.debug(`[FormEvaluator] Updated field ${extraction.field}`);\n }\n }\n }\n\n // Check if any parent fields are now ready for activation\n // (all subcontrols filled for composite/external types)\n for (const parentKey of updatedParents) {\n await checkAndActivateExternalField(runtime, formService, session, form, entityId, parentKey);\n }\n}\n\n/**\n * Check if a composite field is ready for external activation.\n *\n * Called after subfield updates to see if all subcontrols are now filled.\n * If so, and the type has an activate method, we activate it.\n *\n * WHY automatic activation:\n * - User fills subcontrols naturally (\"$50 in SOL\")\n * - When all filled, we immediately start the external process\n * - No need for explicit \"activate\" command\n *\n * WHY refresh session:\n * - Session in memory might be stale after subfield updates\n * - Need latest subfield states for accurate check\n *\n * WHY emit events before AND after activation:\n * - FORM_SUBCONTROLS_FILLED: Widget knows subcontrols ready\n * - FORM_EXTERNAL_ACTIVATED: Widget knows activation succeeded\n * - Allows different handlers for each stage\n *\n * WHY try/catch activation:\n * - External services might fail (network, validation)\n * - Failure shouldn't crash the evaluator\n * - User can retry by providing values again\n */\nasync function checkAndActivateExternalField(\n runtime: IAgentRuntime,\n formService: FormService,\n session: FormSession,\n form: FormDefinition,\n entityId: UUID,\n field: string\n): Promise<void> {\n // Refresh session to get latest subfield states\n const freshSession = await formService.getActiveSession(entityId, session.roomId);\n if (!freshSession) return;\n\n // Check if this is an external type with all subcontrols filled\n if (!formService.isExternalType(form.controls.find((c) => c.key === field)?.type || \"\")) {\n return;\n }\n\n if (!formService.areSubFieldsFilled(freshSession, field)) {\n return;\n }\n\n // Get subfield values\n const subValues = formService.getSubFieldValues(freshSession, field);\n\n // Emit FORM_SUBCONTROLS_FILLED event\n await emitEvent(runtime, \"FORM_SUBCONTROLS_FILLED\", {\n sessionId: session.id,\n field,\n subValues,\n });\n\n logger.debug(`[FormEvaluator] All subcontrols filled for ${field}, activating...`);\n\n try {\n // Activate the external field\n const activation = await formService.activateExternalField(session.id, entityId, field);\n const activationPayload = JSON.parse(JSON.stringify(activation)) as JsonValue;\n\n // Emit FORM_EXTERNAL_ACTIVATED event\n await emitEvent(runtime, \"FORM_EXTERNAL_ACTIVATED\", {\n sessionId: session.id,\n field,\n activation: activationPayload,\n });\n\n logger.info(`[FormEvaluator] Activated external field ${field}: ${activation.instructions}`);\n } catch (error) {\n logger.error(`[FormEvaluator] Failed to activate external field ${field}:`, String(error));\n }\n}\n\n/**\n * Emit an event to the runtime.\n *\n * Wraps runtime.emitEvent with error handling since not all runtimes\n * may have event handlers registered.\n *\n * WHY wrap instead of direct call:\n * - runtime.emitEvent might not exist (older runtimes)\n * - No listeners is normal, not an error\n * - Evaluator should keep running regardless\n *\n * WHY debug log on error:\n * - Helps diagnose missing handlers during development\n * - Doesn't spam logs in production (debug level)\n */\nasync function emitEvent(\n runtime: IAgentRuntime,\n eventType: string,\n payload: Record<string, JsonValue>\n): Promise<void> {\n try {\n if (typeof runtime.emitEvent === \"function\") {\n const eventPayload: EventPayload = { runtime, ...payload };\n await runtime.emitEvent(eventType, eventPayload);\n }\n } catch (error) {\n // Event handlers might not be registered, that's OK\n logger.debug(`[FormEvaluator] Event emission (${eventType}):`, String(error));\n }\n}\n\n// ============================================================================\n// INTENT HANDLERS\n// ============================================================================\n\n/**\n * Handle submit intent.\n *\n * Attempts to submit the form. May fail if required fields are missing,\n * in which case the provider will show what's missing.\n *\n * WHY separate function:\n * - Encapsulates error handling\n * - Easy to add logging/analytics\n */\nasync function handleSubmit(\n formService: FormService,\n session: { id: string; status: string },\n entityId: UUID\n): Promise<void> {\n try {\n await formService.submit(session.id, entityId);\n } catch (error) {\n // Submit may fail if required fields are missing\n // The provider will show what's missing, agent will ask\n logger.debug(\"[FormEvaluator] Submit failed:\", String(error));\n }\n}\n\n/**\n * Handle undo intent.\n *\n * Reverts the last field change if undo is allowed.\n *\n * WHY check allowUndo:\n * - Some forms disable undo (legal forms, etc.)\n */\nasync function handleUndo(\n formService: FormService,\n session: { id: string; lastAskedField?: string },\n entityId: UUID,\n form: { ux?: { allowUndo?: boolean } }\n): Promise<void> {\n if (!form.ux?.allowUndo) {\n return;\n }\n\n const result = await formService.undoLastChange(session.id, entityId);\n if (result) {\n logger.debug(\"[FormEvaluator] Undid field:\", result.field);\n }\n}\n\n/**\n * Handle skip intent.\n *\n * Marks the last-asked field as skipped if it's optional.\n *\n * WHY lastAskedField:\n * - \"Skip\" refers to the current question\n * - We track which field was last asked\n *\n * WHY not skip required:\n * - Required fields can't be skipped\n * - Agent should explain this to user\n */\nasync function handleSkip(\n formService: FormService,\n session: { id: string; lastAskedField?: string },\n entityId: UUID,\n form: { ux?: { allowSkip?: boolean } }\n): Promise<void> {\n if (!form.ux?.allowSkip) {\n return;\n }\n\n // Skip the last asked field if known\n if (session.lastAskedField) {\n const skipped = await formService.skipField(session.id, entityId, session.lastAskedField);\n if (skipped) {\n logger.debug(\"[FormEvaluator] Skipped field:\", session.lastAskedField);\n }\n }\n}\n\nexport default formEvaluator;\n",
20
- "/**\n * @module providers/context\n * @description Form context provider for agent awareness\n *\n * ## Purpose\n *\n * This provider injects form state into the agent's context BEFORE\n * the agent generates a response. This allows the agent to:\n *\n * 1. Know if a form is active\n * 2. Know what fields have been filled\n * 3. Know what fields are missing\n * 4. Know what needs confirmation\n * 5. Know what to ask next\n *\n * ## How It Works\n *\n * ```\n * User Message → Provider Runs → Agent Gets Context → Agent Responds\n * ↓\n * FormContextState\n * ↓\n * - hasActiveForm: true\n * - progress: 60%\n * - nextField: \"email\"\n * - uncertainFields: [...]\n * ```\n *\n * ## Context Output\n *\n * The provider outputs:\n *\n * - `data`: Full FormContextState object (for programmatic access)\n * - `values`: String values for template substitution\n * - `text`: Human-readable summary for agent\n *\n * The `text` output is structured markdown that the agent can use\n * to understand the form state and craft appropriate responses.\n *\n * ## Agent Guidance\n *\n * The provider includes \"Agent Guidance\" in the text output, giving\n * the agent explicit suggestions:\n *\n * - \"Ask for their email\"\n * - \"Confirm: 'I understood X as Y. Is that correct?'\"\n * - \"All fields collected! Nudge user to submit.\"\n *\n * ## Stashed Forms\n *\n * If the user has stashed forms, the provider mentions this so\n * the agent can remind the user they have unfinished work.\n */\n\nimport type {\n IAgentRuntime,\n JsonValue,\n Memory,\n Provider,\n ProviderResult,\n State,\n UUID,\n} from \"@elizaos/core\";\nimport { logger, validateActionKeywords, validateActionRegex } from \"@elizaos/core\";\nimport type { FormService } from \"../service\";\nimport { buildTemplateValues, renderTemplate, resolveControlTemplates } from \"../template\";\nimport type { FormContextState } from \"../types\";\n\n/**\n * Form Context Provider\n *\n * Injects the current form state into the agent's context,\n * allowing the agent to respond naturally about form progress\n * and ask for missing fields.\n *\n * WHY a provider (not evaluator):\n * - Providers run BEFORE response generation\n * - Agent needs context to generate appropriate response\n * - Evaluator runs AFTER, too late for response\n */\nexport const formContextProvider: Provider = {\n name: \"FORM_CONTEXT\",\n description: \"Provides context about active form sessions\",\n\n /**\n * Get form context for the current message.\n *\n * @param runtime - Agent runtime for service access\n * @param message - The user message being processed\n * @param _state - Current agent state (unused)\n * @returns Provider result with form context\n */\n dynamic: true,\n relevanceKeywords: [\n \"form\",\n \"context\",\n \"formcontextprovider\",\n \"plugin\",\n \"status\",\n \"state\",\n \"info\",\n \"details\",\n \"chat\",\n \"conversation\",\n \"agent\",\n \"room\",\n \"channel\",\n \"user\",\n ],\n get: async (runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> => {\n const __providerKeywords = [\n \"form\",\n \"context\",\n \"formcontextprovider\",\n \"plugin\",\n \"status\",\n \"state\",\n \"info\",\n \"details\",\n \"chat\",\n \"conversation\",\n \"agent\",\n \"room\",\n \"channel\",\n \"user\",\n ];\n const __providerRegex = new RegExp(`\\\\b(${__providerKeywords.join(\"|\")})\\\\b`, \"i\");\n const __recentMessages = Array.isArray(_state?.recentMessagesData)\n ? (_state.recentMessagesData as Memory[])\n : [];\n const __isRelevant =\n validateActionKeywords(message, __recentMessages, __providerKeywords) ||\n validateActionRegex(message, __recentMessages, __providerRegex);\n if (!__isRelevant) {\n return { text: \"\" };\n }\n\n try {\n // Get form service\n // WHY type cast: Runtime returns unknown, we know it's FormService\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n return {\n data: { hasActiveForm: false },\n values: { formContext: \"\" },\n text: \"\",\n };\n }\n\n // Get entity and room IDs\n // WHY UUID cast: Memory has these as unknown, we need proper typing\n const entityId = message.entityId as UUID;\n const roomId = message.roomId as UUID;\n\n if (!entityId || !roomId) {\n return {\n data: { hasActiveForm: false },\n values: { formContext: \"\" },\n text: \"\",\n };\n }\n\n // Get active session for this room\n const session = await formService.getActiveSession(entityId, roomId);\n\n // Get stashed sessions (for \"you have saved forms\" prompt)\n const stashed = await formService.getStashedSessions(entityId);\n\n // If no active session and no stashed, nothing to provide\n if (!session && stashed.length === 0) {\n return {\n data: { hasActiveForm: false, stashedCount: 0 },\n values: { formContext: \"\" },\n text: \"\",\n };\n }\n\n // Build context for active session\n let contextText = \"\";\n let contextState: FormContextState;\n\n if (session) {\n // Get session context from service\n contextState = formService.getSessionContext(session);\n const form = formService.getForm(session.formId);\n const templateValues = buildTemplateValues(session);\n const resolveText = (value?: string): string | undefined =>\n renderTemplate(value, templateValues);\n\n contextState = {\n ...contextState,\n filledFields: contextState.filledFields.map((field) => ({\n ...field,\n label: resolveText(field.label) ?? field.label,\n })),\n missingRequired: contextState.missingRequired.map((field) => ({\n ...field,\n label: resolveText(field.label) ?? field.label,\n description: resolveText(field.description),\n askPrompt: resolveText(field.askPrompt),\n })),\n uncertainFields: contextState.uncertainFields.map((field) => ({\n ...field,\n label: resolveText(field.label) ?? field.label,\n })),\n nextField: contextState.nextField\n ? resolveControlTemplates(contextState.nextField, templateValues)\n : null,\n };\n\n // Build human-readable context for agent\n // WHY markdown: Agent can parse and use structure\n contextText = `# Active Form: ${form?.name || session.formId}\\n\\n`;\n\n // Progress indicator\n contextText += `Progress: ${contextState.progress}%\\n\\n`;\n\n // Filled fields - what we already have\n // WHY show filled: Agent can reference in conversation\n if (contextState.filledFields.length > 0) {\n contextText += `## Collected Information\\n`;\n for (const field of contextState.filledFields) {\n contextText += `- ${field.label}: ${field.displayValue}\\n`;\n }\n contextText += \"\\n\";\n }\n\n // Missing required fields - what we still need\n // WHY show missing: Agent knows what to ask for\n if (contextState.missingRequired.length > 0) {\n contextText += `## Still Needed\\n`;\n for (const field of contextState.missingRequired) {\n contextText += `- ${field.label}${field.description ? ` (${field.description})` : \"\"}\\n`;\n }\n contextText += \"\\n\";\n }\n\n // Uncertain fields needing confirmation\n // WHY show uncertain: Agent should ask user to confirm\n if (contextState.uncertainFields.length > 0) {\n contextText += `## Needs Confirmation\\n`;\n for (const field of contextState.uncertainFields) {\n contextText += `- ${field.label}: \"${field.value}\" (${Math.round(field.confidence * 100)}% confident)\\n`;\n }\n contextText += \"\\n\";\n }\n\n // Pending external fields (payments, signatures, etc.)\n // WHY show pending: Agent should remind user of outstanding actions\n if (contextState.pendingExternalFields.length > 0) {\n contextText += `## Waiting For External Action\\n`;\n for (const field of contextState.pendingExternalFields) {\n const ageMs = Date.now() - field.activatedAt;\n const ageMin = Math.floor(ageMs / 60000);\n const ageText = ageMin < 1 ? \"just now\" : `${ageMin}m ago`;\n contextText += `- ${field.label}: ${field.instructions} (started ${ageText})\\n`;\n if (field.address) {\n contextText += ` Address: ${field.address}\\n`;\n }\n }\n contextText += \"\\n\";\n }\n\n // Explicit agent guidance\n // WHY guidance: Tells agent exactly what to do next\n contextText += `## Agent Guidance\\n`;\n\n if (contextState.pendingExternalFields.length > 0) {\n // We're waiting for external confirmation (payment, signature, etc.)\n const pending = contextState.pendingExternalFields[0];\n contextText += `Waiting for external action. Remind user: \"${pending.instructions}\"\\n`;\n } else if (contextState.pendingCancelConfirmation) {\n // User wants to cancel a high-effort form\n contextText += `User is trying to cancel. Confirm: \"You've spent time on this. Are you sure you want to cancel?\"\\n`;\n } else if (contextState.uncertainFields.length > 0) {\n // Need to confirm an uncertain value\n const uncertain = contextState.uncertainFields[0];\n contextText += `Ask user to confirm: \"I understood your ${uncertain.label} as '${uncertain.value}'. Is that correct?\"\\n`;\n } else if (contextState.nextField) {\n // Ask for the next field\n const next = contextState.nextField;\n const prompt = next.askPrompt || `Ask for their ${next.label}`;\n contextText += `Next: ${prompt}\\n`;\n if (next.example) {\n contextText += `Example: \"${next.example}\"\\n`;\n }\n } else if (contextState.status === \"ready\") {\n // All required fields done, suggest submit\n contextText += `All fields collected! Nudge user to submit: \"I have everything I need. Ready to submit?\"\\n`;\n }\n\n contextText += \"\\n\";\n\n // User commands reference\n // WHY: Agent should know what user can say\n contextText += `## User Can Say\\n`;\n contextText += `- Provide information for any field\\n`;\n contextText += `- \"undo\" or \"go back\" to revert last change\\n`;\n contextText += `- \"skip\" to skip optional fields\\n`;\n contextText += `- \"why?\" to get explanation about a field\\n`;\n contextText += `- \"how far?\" to check progress\\n`;\n contextText += `- \"submit\" or \"done\" when ready\\n`;\n contextText += `- \"save for later\" to stash the form\\n`;\n contextText += `- \"cancel\" to abandon the form\\n`;\n } else {\n // No active session, just stashed info\n contextState = {\n hasActiveForm: false,\n progress: 0,\n filledFields: [],\n missingRequired: [],\n uncertainFields: [],\n nextField: null,\n stashedCount: stashed.length,\n pendingExternalFields: [],\n };\n }\n\n // Stashed forms reminder\n // WHY: User might have forgotten about saved forms\n if (stashed.length > 0) {\n contextText += `\\n## Saved Forms\\n`;\n contextText += `User has ${stashed.length} saved form(s). They can say \"resume\" or \"continue\" to restore one.\\n`;\n for (const s of stashed) {\n const form = formService.getForm(s.formId);\n const ctx = formService.getSessionContext(s);\n contextText += `- ${form?.name || s.formId} (${ctx.progress}% complete)\\n`;\n }\n }\n\n return {\n // Full context object for programmatic access\n data: JSON.parse(JSON.stringify(contextState)) as Record<string, JsonValue>,\n // String values for template substitution\n values: {\n formContext: contextText,\n hasActiveForm: String(contextState.hasActiveForm),\n formProgress: String(contextState.progress),\n formStatus: contextState.status || \"\",\n stashedCount: String(stashed.length),\n },\n // Human-readable text for agent\n text: contextText,\n };\n } catch (error) {\n logger.error(\"[FormContextProvider] Error:\", String(error));\n return {\n data: { hasActiveForm: false, error: true },\n values: { formContext: \"Error loading form context.\" },\n text: \"Error loading form context.\",\n };\n }\n },\n};\n\nexport default formContextProvider;\n",
21
- "/**\n * @module @elizaos/plugin-form\n * @description Guardrails for agent-guided user journeys\n *\n * @author Odilitime\n * @copyright 2025 Odilitime\n * @license MIT\n */\n\nimport type { IAgentRuntime, Memory, Plugin } from \"@elizaos/core\";\nimport { validateActionKeywords, validateActionRegex } from \"@elizaos/core\";\n\n// ============================================================================\n// TYPE EXPORTS\n// ============================================================================\n\n// Types - all interfaces and type definitions\nexport * from \"./src/types\";\n\n// ============================================================================\n// BUILT-IN TYPES EXPORTS\n// Pre-registered control types (text, number, email, etc.)\n// ============================================================================\n\nexport {\n BUILTIN_TYPE_MAP,\n BUILTIN_TYPES,\n getBuiltinType,\n isBuiltinType,\n registerBuiltinTypes,\n} from \"./src/builtins\";\n\n// ============================================================================\n// VALIDATION EXPORTS\n// Field validation, type coercion, and custom type registration\n// ============================================================================\n\nexport {\n clearTypeHandlers,\n formatValue,\n getTypeHandler,\n matchesMimeType,\n parseValue,\n registerTypeHandler,\n validateField,\n} from \"./src/validation\";\n\n// ============================================================================\n// INTENT DETECTION EXPORTS\n// Two-tier intent detection (fast path + LLM fallback)\n// ============================================================================\n\nexport {\n hasDataToExtract,\n isLifecycleIntent,\n isUXIntent,\n quickIntentDetect,\n} from \"./src/intent\";\n\n// ============================================================================\n// STORAGE EXPORTS\n// Component-based persistence for sessions, submissions, autofill\n// ============================================================================\n\nexport {\n deleteSession,\n getActiveSession,\n getAllActiveSessions,\n getAutofillData,\n getStashedSessions,\n getSubmissions,\n saveAutofillData,\n saveSession,\n saveSubmission,\n} from \"./src/storage\";\n\n// ============================================================================\n// EXTRACTION EXPORTS\n// LLM-based field extraction from natural language\n// ============================================================================\n\nexport {\n detectCorrection,\n extractSingleField,\n llmIntentAndExtract,\n} from \"./src/extraction\";\n\n// ============================================================================\n// TTL & EFFORT EXPORTS\n// Smart retention based on user effort\n// ============================================================================\n\nexport {\n calculateTTL,\n formatEffort,\n formatTimeRemaining,\n isExpired,\n isExpiringSoon,\n shouldConfirmCancel,\n shouldNudge,\n} from \"./src/ttl\";\n\n// ============================================================================\n// DEFAULTS EXPORTS\n// Sensible default value application\n// ============================================================================\n\nexport {\n applyControlDefaults,\n applyFormDefaults,\n prettify,\n} from \"./src/defaults\";\n\n// ============================================================================\n// BUILDER API EXPORTS\n// Fluent API for defining forms and controls\n// ============================================================================\n\nexport { C, ControlBuilder, Form, FormBuilder } from \"./src/builder\";\n\n// ============================================================================\n// SERVICE EXPORT\n// Central form management service\n// ============================================================================\n\nexport { FormService } from \"./src/service\";\n\n// ============================================================================\n// COMPONENT EXPORTS\n// Provider, Evaluator, Action, Tasks\n// ============================================================================\n\n// Action - fast-path restore for stashed forms\nexport { formRestoreAction } from \"./src/actions/restore\";\n\n// Evaluator - extracts fields and handles intents\nexport { formEvaluator } from \"./src/evaluators/extractor\";\n// Provider - injects form context into agent state\nexport { formContextProvider } from \"./src/providers/context\";\n\n// Tasks - background processing for nudges and cleanup\nexport { formNudgeWorker, processEntityNudges } from \"./src/tasks/nudge\";\n\n// ============================================================================\n// PLUGIN DEFINITION\n// ============================================================================\n\n/**\n * Form Plugin\n *\n * Infrastructure plugin for collecting structured data through natural conversation.\n */\nexport const formPlugin: Plugin = {\n name: \"form\",\n description: \"Agent-native conversational forms for data collection\",\n\n // Service for form management\n services: [\n {\n serviceType: \"FORM\",\n start: async (runtime: IAgentRuntime) => {\n const { FormService } = await import(\"./src/service\");\n return FormService.start(runtime);\n },\n } as any,\n ],\n\n // Provider for form context\n providers: [\n {\n name: \"FORM_CONTEXT\",\n description: \"Provides context about active form sessions\",\n dynamic: true,\n relevanceKeywords: [\n \"form\",\n \"context\",\n \"inlineprovider1\",\n \"plugin\",\n \"status\",\n \"state\",\n \"info\",\n \"details\",\n \"chat\",\n \"conversation\",\n \"agent\",\n \"room\",\n \"channel\",\n \"user\",\n ],\n get: async (runtime, message, state) => {\n const __providerKeywords = [\n \"form\",\n \"context\",\n \"inlineprovider1\",\n \"plugin\",\n \"status\",\n \"state\",\n \"info\",\n \"details\",\n \"chat\",\n \"conversation\",\n \"agent\",\n \"room\",\n \"channel\",\n \"user\",\n ];\n const __providerRegex = new RegExp(`\\\\b(${__providerKeywords.join(\"|\")})\\\\b`, \"i\");\n const __recentMessages = Array.isArray(state?.recentMessagesData)\n ? (state.recentMessagesData as Memory[])\n : [];\n const __isRelevant =\n validateActionKeywords(message, __recentMessages, __providerKeywords) ||\n validateActionRegex(message, __recentMessages, __providerRegex);\n if (!__isRelevant) {\n return { text: \"\" };\n }\n\n const { formContextProvider } = await import(\"./src/providers/context\");\n return formContextProvider.get(runtime, message, state);\n },\n },\n ],\n\n // Evaluator for field extraction\n evaluators: [\n {\n name: \"form_evaluator\",\n description: \"Extracts form fields and handles form intents\",\n similes: [\"FORM_EXTRACTION\", \"FORM_HANDLER\"],\n examples: [],\n validate: async (runtime, message, state) => {\n const { formEvaluator } = await import(\"./src/evaluators/extractor\");\n return formEvaluator.validate(runtime, message, state);\n },\n handler: async (runtime, message, state) => {\n const { formEvaluator } = await import(\"./src/evaluators/extractor\");\n return formEvaluator.handler(runtime, message, state);\n },\n },\n ],\n\n // Action for restoring stashed forms\n actions: [\n {\n name: \"FORM_RESTORE\",\n similes: [\"RESUME_FORM\", \"CONTINUE_FORM\"],\n description: \"Restore a previously stashed form session\",\n validate: async (runtime, message, state) => {\n const { formRestoreAction } = await import(\"./src/actions/restore\");\n return formRestoreAction.validate(runtime, message, state);\n },\n handler: async (runtime, message, state, options, callback) => {\n const { formRestoreAction } = await import(\"./src/actions/restore\");\n return formRestoreAction.handler(runtime, message, state, options, callback);\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Resume my form\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your form. Let's continue where you left off.\",\n },\n },\n ],\n ],\n },\n ],\n};\n\nexport default formPlugin;\n",
20
+ "/**\n * @module providers/context\n * @description Form context provider for agent awareness\n *\n * ## Purpose\n *\n * This provider injects form state into the agent's context BEFORE\n * the agent generates a response. This allows the agent to:\n *\n * 1. Know if a form is active\n * 2. Know what fields have been filled\n * 3. Know what fields are missing\n * 4. Know what needs confirmation\n * 5. Know what to ask next\n *\n * ## How It Works\n *\n * ```\n * User Message → Provider Runs → Agent Gets Context → Agent Responds\n * ↓\n * FormContextState\n * ↓\n * - hasActiveForm: true\n * - progress: 60%\n * - nextField: \"email\"\n * - uncertainFields: [...]\n * ```\n *\n * ## Context Output\n *\n * The provider outputs:\n *\n * - `data`: Full FormContextState object (for programmatic access)\n * - `values`: String values for template substitution\n * - `text`: Human-readable summary for agent\n *\n * The `text` output is structured markdown that the agent can use\n * to understand the form state and craft appropriate responses.\n *\n * ## Agent Guidance\n *\n * The provider includes \"Agent Guidance\" in the text output, giving\n * the agent explicit suggestions:\n *\n * - \"Ask for their email\"\n * - \"Confirm: 'I understood X as Y. Is that correct?'\"\n * - \"All fields collected! Nudge user to submit.\"\n *\n * ## Stashed Forms\n *\n * If the user has stashed forms, the provider mentions this so\n * the agent can remind the user they have unfinished work.\n */\n\nimport type {\n IAgentRuntime,\n JsonValue,\n Memory,\n Provider,\n ProviderResult,\n State,\n UUID,\n} from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { FormService } from \"../service\";\nimport { buildTemplateValues, renderTemplate, resolveControlTemplates } from \"../template\";\nimport type { FormContextState } from \"../types\";\n\n/**\n * Form Context Provider\n *\n * Injects the current form state into the agent's context,\n * allowing the agent to respond naturally about form progress\n * and ask for missing fields.\n *\n * WHY a provider (not evaluator):\n * - Providers run BEFORE response generation\n * - Agent needs context to generate appropriate response\n * - Evaluator runs AFTER, too late for response\n */\nexport const formContextProvider: Provider = {\n name: \"FORM_CONTEXT\",\n description: \"Provides context about active form sessions\",\n\n /**\n * Get form context for the current message.\n *\n * @param runtime - Agent runtime for service access\n * @param message - The user message being processed\n * @param _state - Current agent state (unused)\n * @returns Provider result with form context\n */\n dynamic: true,\n get: async (runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> => {\n try {\n // Get form service\n // WHY type cast: Runtime returns unknown, we know it's FormService\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n return {\n data: { hasActiveForm: false },\n values: { formContext: \"\" },\n text: \"\",\n };\n }\n\n // Get entity and room IDs\n // WHY UUID cast: Memory has these as unknown, we need proper typing\n const entityId = message.entityId as UUID;\n const roomId = message.roomId as UUID;\n\n if (!entityId || !roomId) {\n return {\n data: { hasActiveForm: false },\n values: { formContext: \"\" },\n text: \"\",\n };\n }\n\n // Get active session for this room\n const session = await formService.getActiveSession(entityId, roomId);\n\n // Get stashed sessions (for \"you have saved forms\" prompt)\n const stashed = await formService.getStashedSessions(entityId);\n\n // If no active session and no stashed, nothing to provide\n if (!session && stashed.length === 0) {\n return {\n data: { hasActiveForm: false, stashedCount: 0 },\n values: { formContext: \"\" },\n text: \"\",\n };\n }\n\n // Build context for active session\n let contextText = \"\";\n let contextState: FormContextState;\n\n if (session) {\n // Get session context from service\n contextState = formService.getSessionContext(session);\n const form = formService.getForm(session.formId);\n const templateValues = buildTemplateValues(session);\n const resolveText = (value?: string): string | undefined =>\n renderTemplate(value, templateValues);\n\n contextState = {\n ...contextState,\n filledFields: contextState.filledFields.map((field) => ({\n ...field,\n label: resolveText(field.label) ?? field.label,\n })),\n missingRequired: contextState.missingRequired.map((field) => ({\n ...field,\n label: resolveText(field.label) ?? field.label,\n description: resolveText(field.description),\n askPrompt: resolveText(field.askPrompt),\n })),\n uncertainFields: contextState.uncertainFields.map((field) => ({\n ...field,\n label: resolveText(field.label) ?? field.label,\n })),\n nextField: contextState.nextField\n ? resolveControlTemplates(contextState.nextField, templateValues)\n : null,\n };\n\n // Build human-readable context for agent\n // WHY markdown: Agent can parse and use structure\n contextText = `# Active Form: ${form?.name || session.formId}\\n\\n`;\n\n // Progress indicator\n contextText += `Progress: ${contextState.progress}%\\n\\n`;\n\n // Filled fields - what we already have\n // WHY show filled: Agent can reference in conversation\n if (contextState.filledFields.length > 0) {\n contextText += `## Collected Information\\n`;\n for (const field of contextState.filledFields) {\n contextText += `- ${field.label}: ${field.displayValue}\\n`;\n }\n contextText += \"\\n\";\n }\n\n // Missing required fields - what we still need\n // WHY show missing: Agent knows what to ask for\n if (contextState.missingRequired.length > 0) {\n contextText += `## Still Needed\\n`;\n for (const field of contextState.missingRequired) {\n contextText += `- ${field.label}${field.description ? ` (${field.description})` : \"\"}\\n`;\n }\n contextText += \"\\n\";\n }\n\n // Uncertain fields needing confirmation\n // WHY show uncertain: Agent should ask user to confirm\n if (contextState.uncertainFields.length > 0) {\n contextText += `## Needs Confirmation\\n`;\n for (const field of contextState.uncertainFields) {\n contextText += `- ${field.label}: \"${field.value}\" (${Math.round(field.confidence * 100)}% confident)\\n`;\n }\n contextText += \"\\n\";\n }\n\n // Pending external fields (payments, signatures, etc.)\n // WHY show pending: Agent should remind user of outstanding actions\n if (contextState.pendingExternalFields.length > 0) {\n contextText += `## Waiting For External Action\\n`;\n for (const field of contextState.pendingExternalFields) {\n const ageMs = Date.now() - field.activatedAt;\n const ageMin = Math.floor(ageMs / 60000);\n const ageText = ageMin < 1 ? \"just now\" : `${ageMin}m ago`;\n contextText += `- ${field.label}: ${field.instructions} (started ${ageText})\\n`;\n if (field.address) {\n contextText += ` Address: ${field.address}\\n`;\n }\n }\n contextText += \"\\n\";\n }\n\n // Explicit agent guidance\n // WHY guidance: Tells agent exactly what to do next\n contextText += `## Agent Guidance\\n`;\n\n if (contextState.pendingExternalFields.length > 0) {\n // We're waiting for external confirmation (payment, signature, etc.)\n const pending = contextState.pendingExternalFields[0];\n contextText += `Waiting for external action. Remind user: \"${pending.instructions}\"\\n`;\n } else if (contextState.pendingCancelConfirmation) {\n // User wants to cancel a high-effort form\n contextText += `User is trying to cancel. Confirm: \"You've spent time on this. Are you sure you want to cancel?\"\\n`;\n } else if (contextState.uncertainFields.length > 0) {\n // Need to confirm an uncertain value\n const uncertain = contextState.uncertainFields[0];\n contextText += `Ask user to confirm: \"I understood your ${uncertain.label} as '${uncertain.value}'. Is that correct?\"\\n`;\n } else if (contextState.nextField) {\n // Ask for the next field\n const next = contextState.nextField;\n const prompt = next.askPrompt || `Ask for their ${next.label}`;\n contextText += `Next: ${prompt}\\n`;\n if (next.example) {\n contextText += `Example: \"${next.example}\"\\n`;\n }\n } else if (contextState.status === \"ready\") {\n // All required fields done, suggest submit\n contextText += `All fields collected! Nudge user to submit: \"I have everything I need. Ready to submit?\"\\n`;\n }\n\n contextText += \"\\n\";\n\n // User commands reference\n // WHY: Agent should know what user can say\n contextText += `## User Can Say\\n`;\n contextText += `- Provide information for any field\\n`;\n contextText += `- \"undo\" or \"go back\" to revert last change\\n`;\n contextText += `- \"skip\" to skip optional fields\\n`;\n contextText += `- \"why?\" to get explanation about a field\\n`;\n contextText += `- \"how far?\" to check progress\\n`;\n contextText += `- \"submit\" or \"done\" when ready\\n`;\n contextText += `- \"save for later\" to stash the form\\n`;\n contextText += `- \"cancel\" to abandon the form\\n`;\n } else {\n // No active session, just stashed info\n contextState = {\n hasActiveForm: false,\n progress: 0,\n filledFields: [],\n missingRequired: [],\n uncertainFields: [],\n nextField: null,\n stashedCount: stashed.length,\n pendingExternalFields: [],\n };\n }\n\n // Stashed forms reminder\n // WHY: User might have forgotten about saved forms\n if (stashed.length > 0) {\n contextText += `\\n## Saved Forms\\n`;\n contextText += `User has ${stashed.length} saved form(s). They can say \"resume\" or \"continue\" to restore one.\\n`;\n for (const s of stashed) {\n const form = formService.getForm(s.formId);\n const ctx = formService.getSessionContext(s);\n contextText += `- ${form?.name || s.formId} (${ctx.progress}% complete)\\n`;\n }\n }\n\n return {\n // Full context object for programmatic access\n data: JSON.parse(JSON.stringify(contextState)) as Record<string, JsonValue>,\n // String values for template substitution\n values: {\n formContext: contextText,\n hasActiveForm: String(contextState.hasActiveForm),\n formProgress: String(contextState.progress),\n formStatus: contextState.status || \"\",\n stashedCount: String(stashed.length),\n },\n // Human-readable text for agent\n text: contextText,\n };\n } catch (error) {\n logger.error(\"[FormContextProvider] Error:\", String(error));\n return {\n data: { hasActiveForm: false, error: true },\n values: { formContext: \"Error loading form context.\" },\n text: \"Error loading form context.\",\n };\n }\n },\n};\n\nexport default formContextProvider;\n",
21
+ "/**\n * @module @elizaos/plugin-form\n * @description Guardrails for agent-guided user journeys\n *\n * @author Odilitime\n * @copyright 2025 Odilitime\n * @license MIT\n */\n\nimport type { IAgentRuntime, Plugin } from \"@elizaos/core\";\n\n// ============================================================================\n// TYPE EXPORTS\n// ============================================================================\n\n// Types - all interfaces and type definitions\nexport * from \"./src/types\";\n\n// ============================================================================\n// BUILT-IN TYPES EXPORTS\n// Pre-registered control types (text, number, email, etc.)\n// ============================================================================\n\nexport {\n BUILTIN_TYPE_MAP,\n BUILTIN_TYPES,\n getBuiltinType,\n isBuiltinType,\n registerBuiltinTypes,\n} from \"./src/builtins\";\n\n// ============================================================================\n// VALIDATION EXPORTS\n// Field validation, type coercion, and custom type registration\n// ============================================================================\n\nexport {\n clearTypeHandlers,\n formatValue,\n getTypeHandler,\n matchesMimeType,\n parseValue,\n registerTypeHandler,\n validateField,\n} from \"./src/validation\";\n\n// ============================================================================\n// INTENT DETECTION EXPORTS\n// Two-tier intent detection (fast path + LLM fallback)\n// ============================================================================\n\nexport {\n hasDataToExtract,\n isLifecycleIntent,\n isUXIntent,\n quickIntentDetect,\n} from \"./src/intent\";\n\n// ============================================================================\n// STORAGE EXPORTS\n// Component-based persistence for sessions, submissions, autofill\n// ============================================================================\n\nexport {\n deleteSession,\n getActiveSession,\n getAllActiveSessions,\n getAutofillData,\n getStashedSessions,\n getSubmissions,\n saveAutofillData,\n saveSession,\n saveSubmission,\n} from \"./src/storage\";\n\n// ============================================================================\n// EXTRACTION EXPORTS\n// LLM-based field extraction from natural language\n// ============================================================================\n\nexport {\n detectCorrection,\n extractSingleField,\n llmIntentAndExtract,\n} from \"./src/extraction\";\n\n// ============================================================================\n// TTL & EFFORT EXPORTS\n// Smart retention based on user effort\n// ============================================================================\n\nexport {\n calculateTTL,\n formatEffort,\n formatTimeRemaining,\n isExpired,\n isExpiringSoon,\n shouldConfirmCancel,\n shouldNudge,\n} from \"./src/ttl\";\n\n// ============================================================================\n// DEFAULTS EXPORTS\n// Sensible default value application\n// ============================================================================\n\nexport {\n applyControlDefaults,\n applyFormDefaults,\n prettify,\n} from \"./src/defaults\";\n\n// ============================================================================\n// BUILDER API EXPORTS\n// Fluent API for defining forms and controls\n// ============================================================================\n\nexport { C, ControlBuilder, Form, FormBuilder } from \"./src/builder\";\n\n// ============================================================================\n// SERVICE EXPORT\n// Central form management service\n// ============================================================================\n\nexport { FormService } from \"./src/service\";\n\n// ============================================================================\n// COMPONENT EXPORTS\n// Provider, Evaluator, Action, Tasks\n// ============================================================================\n\n// Action - fast-path restore for stashed forms\nexport { formRestoreAction } from \"./src/actions/restore\";\n\n// Evaluator - extracts fields and handles intents\nexport { formEvaluator } from \"./src/evaluators/extractor\";\n// Provider - injects form context into agent state\nexport { formContextProvider } from \"./src/providers/context\";\n\n// Tasks - background processing for nudges and cleanup\nexport { formNudgeWorker, processEntityNudges } from \"./src/tasks/nudge\";\n\n// ============================================================================\n// PLUGIN DEFINITION\n// ============================================================================\n\n/**\n * Form Plugin\n *\n * Infrastructure plugin for collecting structured data through natural conversation.\n */\nexport const formPlugin: Plugin = {\n name: \"form\",\n description: \"Agent-native conversational forms for data collection\",\n\n // Service for form management\n services: [\n {\n serviceType: \"FORM\",\n start: async (runtime: IAgentRuntime) => {\n const { FormService } = await import(\"./src/service\");\n return FormService.start(runtime);\n },\n } as any,\n ],\n\n // Provider for form context\n providers: [\n {\n name: \"FORM_CONTEXT\",\n description: \"Provides context about active form sessions\",\n dynamic: true,\n get: async (runtime, message, state) => {\n const { formContextProvider } = await import(\"./src/providers/context\");\n return formContextProvider.get(runtime, message, state);\n },\n },\n ],\n\n // Evaluator for field extraction\n evaluators: [\n {\n name: \"form_evaluator\",\n description: \"Extracts form fields and handles form intents\",\n similes: [\"FORM_EXTRACTION\", \"FORM_HANDLER\"],\n examples: [],\n validate: async (runtime, message, state) => {\n const { formEvaluator } = await import(\"./src/evaluators/extractor\");\n return formEvaluator.validate(runtime, message, state);\n },\n handler: async (runtime, message, state) => {\n const { formEvaluator } = await import(\"./src/evaluators/extractor\");\n return formEvaluator.handler(runtime, message, state);\n },\n },\n ],\n\n // Action for restoring stashed forms\n actions: [\n {\n name: \"FORM_RESTORE\",\n similes: [\"RESUME_FORM\", \"CONTINUE_FORM\"],\n description: \"Restore a previously stashed form session\",\n validate: async (runtime, message, state) => {\n const { formRestoreAction } = await import(\"./src/actions/restore\");\n return formRestoreAction.validate(runtime, message, state);\n },\n handler: async (runtime, message, state, options, callback) => {\n const { formRestoreAction } = await import(\"./src/actions/restore\");\n return formRestoreAction.handler(runtime, message, state, options, callback);\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Resume my form\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've restored your form. Let's continue where you left off.\",\n },\n },\n ],\n ],\n },\n ],\n};\n\nexport default formPlugin;\n",
22
22
  "/**\n * @module ttl\n * @description Smart TTL (Time-To-Live) management for form sessions\n *\n * ## Design Philosophy\n *\n * Traditional form systems delete abandoned forms after a fixed time.\n * This fails users who invest significant effort:\n *\n * - User A: Opens form, immediately abandons → 24h retention is fine\n * - User B: Spends 2 hours filling complex form → 24h retention loses their work!\n *\n * ## Effort-Based TTL\n *\n * This module calculates TTL based on user effort:\n *\n * ```\n * TTL = clamp(minDays, effortDays, maxDays)\n *\n * where:\n * effortDays = minutesSpent * effortMultiplier\n * ```\n *\n * Default values:\n * - minDays: 14 (two weeks minimum)\n * - maxDays: 90 (three months maximum)\n * - effortMultiplier: 0.5 (10 minutes = 5 extra days)\n *\n * ## Examples\n *\n * | Time Spent | Extra Days | Total TTL |\n * |------------|------------|-----------|\n * | 0 min | 0 | 14 days |\n * | 10 min | 5 | 14 days |\n * | 30 min | 15 | 15 days |\n * | 2 hours | 60 | 60 days |\n * | 4 hours | 120 | 90 days |\n *\n * ## Nudge System\n *\n * The nudge system sends reminders for stale forms:\n *\n * 1. After 48 hours of inactivity (configurable)\n * 2. Maximum 3 nudges (configurable)\n * 3. At least 24 hours between nudges\n *\n * ## Expiration Warnings\n *\n * Before a session expires, we warn the user:\n *\n * - 24 hours before expiration\n * - \"Your form will expire in 1 day. Say 'resume' to keep working.\"\n *\n * This gives users a chance to save their work.\n */\n\nimport type { FormDefinition, FormSession } from \"./types\";\nimport { FORM_DEFINITION_DEFAULTS } from \"./types\";\n\n/**\n * Calculate TTL based on user effort.\n *\n * The more time a user spends on a form, the longer we keep it.\n * This prevents losing significant work while still cleaning up abandoned forms.\n *\n * WHY effort-based:\n * - Respects user investment\n * - Automatic cleanup of abandoned forms\n * - No manual expiration management needed\n *\n * @param session - Current session with effort tracking\n * @param form - Form definition with TTL configuration\n * @returns Expiration timestamp (milliseconds since epoch)\n */\nexport function calculateTTL(session: FormSession, form?: FormDefinition): number {\n const config = form?.ttl || {};\n\n // Get configuration with defaults\n const minDays = config.minDays ?? FORM_DEFINITION_DEFAULTS.ttl.minDays;\n const maxDays = config.maxDays ?? FORM_DEFINITION_DEFAULTS.ttl.maxDays;\n const multiplier = config.effortMultiplier ?? FORM_DEFINITION_DEFAULTS.ttl.effortMultiplier;\n\n // Calculate effort in minutes\n const minutesSpent = session.effort.timeSpentMs / 60000;\n\n // Calculate TTL in days based on effort\n // WHY this formula: Simple linear scaling, easy to understand\n // Example: 10 min work with 0.5 multiplier = 5 extra days\n const effortDays = minutesSpent * multiplier;\n\n // Clamp to [minDays, maxDays]\n // WHY clamp: Prevents both too-short and too-long retention\n const ttlDays = Math.min(maxDays, Math.max(minDays, effortDays));\n\n // Return expiration timestamp\n // WHY from Date.now(): Session might be restored, recalculate from now\n return Date.now() + ttlDays * 24 * 60 * 60 * 1000;\n}\n\n/**\n * Check if session should be nudged.\n *\n * Nudges are gentle reminders for stashed or inactive forms.\n *\n * WHY nudge:\n * - Users forget about forms they started\n * - Gentle reminders increase completion\n * - But too many nudges are annoying\n *\n * @param session - Session to check\n * @param form - Form definition with nudge configuration\n * @returns true if a nudge should be sent\n */\nexport function shouldNudge(session: FormSession, form?: FormDefinition): boolean {\n const nudgeConfig = form?.nudge;\n\n // Nudging disabled\n if (nudgeConfig?.enabled === false) {\n return false;\n }\n\n // Already at max nudges\n // WHY limit: Don't annoy users with endless reminders\n const maxNudges = nudgeConfig?.maxNudges ?? FORM_DEFINITION_DEFAULTS.nudge.maxNudges;\n if ((session.nudgeCount || 0) >= maxNudges) {\n return false;\n }\n\n // Check if enough time has passed since last interaction\n // WHY time check: Don't nudge active users\n const afterInactiveHours =\n nudgeConfig?.afterInactiveHours ?? FORM_DEFINITION_DEFAULTS.nudge.afterInactiveHours;\n const inactiveMs = afterInactiveHours * 60 * 60 * 1000;\n\n const timeSinceInteraction = Date.now() - session.effort.lastInteractionAt;\n if (timeSinceInteraction < inactiveMs) {\n return false;\n }\n\n // Check if we already nudged recently (at least 24h between nudges)\n // WHY 24h minimum: Prevents daily spam, gives user time to respond\n if (session.lastNudgeAt) {\n const timeSinceNudge = Date.now() - session.lastNudgeAt;\n if (timeSinceNudge < 24 * 60 * 60 * 1000) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Check if session is expiring soon.\n *\n * Used to send expiration warnings before session is deleted.\n *\n * @param session - Session to check\n * @param withinMs - Time window in milliseconds\n * @returns true if session expires within the window\n */\nexport function isExpiringSoon(session: FormSession, withinMs: number): boolean {\n return session.expiresAt - Date.now() < withinMs;\n}\n\n/**\n * Check if session has expired.\n *\n * @param session - Session to check\n * @returns true if session has passed its expiration time\n */\nexport function isExpired(session: FormSession): boolean {\n return session.expiresAt < Date.now();\n}\n\n/**\n * Check if we should confirm before canceling.\n *\n * High-effort sessions deserve a confirmation before abandonment.\n *\n * WHY confirm:\n * - Prevent accidental loss of significant work\n * - \"Are you sure?\" for forms user invested in\n *\n * @param session - Session to check\n * @returns true if cancel should require confirmation\n */\nexport function shouldConfirmCancel(session: FormSession): boolean {\n // 5 minutes is the threshold for \"significant effort\"\n // WHY 5 minutes: Enough time to have done real work\n const minEffortMs = 5 * 60 * 1000;\n return session.effort.timeSpentMs > minEffortMs;\n}\n\n/**\n * Format remaining time for user display.\n *\n * Produces human-readable strings like:\n * - \"14 days\"\n * - \"3 hours\"\n * - \"45 minutes\"\n * - \"expired\"\n *\n * @param session - Session to format\n * @returns Human-readable time remaining\n */\nexport function formatTimeRemaining(session: FormSession): string {\n const remaining = session.expiresAt - Date.now();\n\n if (remaining <= 0) {\n return \"expired\";\n }\n\n const hours = Math.floor(remaining / (60 * 60 * 1000));\n const days = Math.floor(hours / 24);\n\n // Show days if more than 24 hours\n if (days > 0) {\n return `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n\n // Show hours if more than 1 hour\n if (hours > 0) {\n return `${hours} hour${hours > 1 ? \"s\" : \"\"}`;\n }\n\n // Show minutes for less than 1 hour\n const minutes = Math.floor(remaining / (60 * 1000));\n return `${minutes} minute${minutes > 1 ? \"s\" : \"\"}`;\n}\n\n/**\n * Format effort for user display.\n *\n * Produces human-readable strings like:\n * - \"just started\"\n * - \"5 minutes\"\n * - \"2 hours\"\n * - \"1h 30m\"\n *\n * @param session - Session to format\n * @returns Human-readable effort description\n */\nexport function formatEffort(session: FormSession): string {\n const minutes = Math.floor(session.effort.timeSpentMs / 60000);\n\n if (minutes < 1) {\n return \"just started\";\n }\n\n if (minutes < 60) {\n return `${minutes} minute${minutes > 1 ? \"s\" : \"\"}`;\n }\n\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n\n if (remainingMinutes === 0) {\n return `${hours} hour${hours > 1 ? \"s\" : \"\"}`;\n }\n\n return `${hours}h ${remainingMinutes}m`;\n}\n",
23
23
  "/**\n * @module defaults\n * @description Default value application for forms and controls\n *\n * ## Purpose\n *\n * Form definitions can be quite minimal:\n *\n * ```typescript\n * { id: 'contact', controls: [{ key: 'email' }] }\n * ```\n *\n * This module fills in sensible defaults:\n *\n * ```typescript\n * {\n * id: 'contact',\n * name: 'Contact', // Prettified from id\n * version: 1, // Default version\n * status: 'active', // Default status\n * controls: [{\n * key: 'email',\n * label: 'Email', // Prettified from key\n * type: 'text', // Default type\n * required: false, // Default required\n * confirmThreshold: 0.8, // Default confidence threshold\n * }],\n * ux: { ... }, // All UX defaults\n * ttl: { ... }, // All TTL defaults\n * nudge: { ... }, // All nudge defaults\n * debug: false, // Default debug off\n * }\n * ```\n *\n * ## When Defaults Apply\n *\n * Defaults are applied:\n *\n * 1. **At Registration**: When a form is registered via FormService\n * 2. **At Build**: When using FormBuilder.build()\n *\n * This ensures:\n * - Minimal definitions work correctly\n * - All optional fields have values\n * - Code can rely on values being present\n *\n * ## Default Values Philosophy\n *\n * Default values were chosen to be:\n *\n * - **Safe**: Won't cause unexpected behavior\n * - **User-Friendly**: Enable features users expect\n * - **Minimal**: Don't add unnecessary restrictions\n *\n * For example:\n * - TTL defaults are generous (14-90 days)\n * - UX features are enabled by default\n * - Required defaults to false (explicit opt-in)\n */\n\nimport type { FormControl, FormDefinition } from \"./types\";\nimport { FORM_CONTROL_DEFAULTS, FORM_DEFINITION_DEFAULTS } from \"./types\";\n\n/**\n * Apply defaults to a FormControl.\n *\n * Ensures all optional fields have values.\n *\n * @param control - Partial control to complete\n * @returns Complete FormControl with all defaults applied\n */\nexport function applyControlDefaults(control: Partial<FormControl>): FormControl {\n return {\n // Required field (must be present)\n key: control.key!,\n // Derive label from key if not provided\n // WHY: User sees labels, default should be readable\n label: control.label || prettify(control.key!),\n // Default type is text (most common)\n type: control.type || FORM_CONTROL_DEFAULTS.type,\n // Default not required (explicit opt-in)\n // WHY: Safer to require opt-in for required fields\n required: control.required ?? FORM_CONTROL_DEFAULTS.required,\n // Default confidence threshold for auto-acceptance\n // WHY 0.8: High enough to be confident, low enough to be useful\n confirmThreshold: control.confirmThreshold ?? FORM_CONTROL_DEFAULTS.confirmThreshold,\n // Spread remaining properties (override defaults)\n ...control,\n };\n}\n\n/**\n * Apply defaults to a FormDefinition.\n *\n * Ensures all optional fields have values and applies\n * defaults to all controls.\n *\n * @param form - Partial form to complete\n * @returns Complete FormDefinition with all defaults applied\n */\nexport function applyFormDefaults(form: Partial<FormDefinition>): FormDefinition {\n return {\n // Required fields\n id: form.id!,\n // Derive name from id if not provided\n name: form.name || prettify(form.id!),\n // Default version for schema tracking\n version: form.version ?? FORM_DEFINITION_DEFAULTS.version,\n // Default status is active\n status: form.status ?? FORM_DEFINITION_DEFAULTS.status,\n // Apply defaults to all controls\n controls: (form.controls || []).map(applyControlDefaults),\n\n // UX defaults - enable helpful features by default\n // WHY enable by default: Better user experience out of the box\n ux: {\n allowUndo: form.ux?.allowUndo ?? FORM_DEFINITION_DEFAULTS.ux.allowUndo,\n allowSkip: form.ux?.allowSkip ?? FORM_DEFINITION_DEFAULTS.ux.allowSkip,\n maxUndoSteps: form.ux?.maxUndoSteps ?? FORM_DEFINITION_DEFAULTS.ux.maxUndoSteps,\n showExamples: form.ux?.showExamples ?? FORM_DEFINITION_DEFAULTS.ux.showExamples,\n showExplanations: form.ux?.showExplanations ?? FORM_DEFINITION_DEFAULTS.ux.showExplanations,\n allowAutofill: form.ux?.allowAutofill ?? FORM_DEFINITION_DEFAULTS.ux.allowAutofill,\n },\n\n // TTL defaults - generous retention\n // WHY generous: Better to keep data too long than lose user work\n ttl: {\n minDays: form.ttl?.minDays ?? FORM_DEFINITION_DEFAULTS.ttl.minDays,\n maxDays: form.ttl?.maxDays ?? FORM_DEFINITION_DEFAULTS.ttl.maxDays,\n effortMultiplier: form.ttl?.effortMultiplier ?? FORM_DEFINITION_DEFAULTS.ttl.effortMultiplier,\n },\n\n // Nudge defaults - helpful but not annoying\n nudge: {\n enabled: form.nudge?.enabled ?? FORM_DEFINITION_DEFAULTS.nudge.enabled,\n afterInactiveHours:\n form.nudge?.afterInactiveHours ?? FORM_DEFINITION_DEFAULTS.nudge.afterInactiveHours,\n maxNudges: form.nudge?.maxNudges ?? FORM_DEFINITION_DEFAULTS.nudge.maxNudges,\n message: form.nudge?.message,\n },\n\n // Debug defaults to off for performance\n debug: form.debug ?? FORM_DEFINITION_DEFAULTS.debug,\n\n // Spread remaining properties (override defaults)\n ...form,\n };\n}\n\n/**\n * Convert snake_case or kebab-case to Title Case.\n *\n * Used to generate human-readable labels from field keys\n * and form names from form IDs.\n *\n * @example\n * prettify('first_name') // \"First Name\"\n * prettify('email-address') // \"Email Address\"\n * prettify('userId') // \"UserId\" (camelCase preserved)\n *\n * @param key - The key to prettify\n * @returns Human-readable title case string\n */\nexport function prettify(key: string): string {\n return (\n key\n // Replace underscores and hyphens with spaces\n .replace(/[-_]/g, \" \")\n // Capitalize first letter of each word\n .replace(/\\b\\w/g, (c) => c.toUpperCase())\n );\n}\n",
24
24
  "/**\n * @module builder\n * @description Fluent builder API for defining forms and controls\n *\n * ## Why a Builder API\n *\n * Form definitions can be verbose with many optional fields. The builder\n * API provides:\n *\n * 1. **Type Safety**: Method chaining with TypeScript gives autocomplete\n * 2. **Readability**: Intent is clear from method names\n * 3. **Defaults**: Builder applies sensible defaults\n * 4. **Validation**: Build-time checks for common mistakes\n *\n * ## Usage Examples\n *\n * ### Simple Form\n *\n * ```typescript\n * const form = Form.create('contact')\n * .name('Contact Form')\n * .control(C.email('email').required())\n * .control(C.text('message').required())\n * .build();\n * ```\n *\n * ### Complex Form\n *\n * ```typescript\n * const registrationForm = Form.create('registration')\n * .name('User Registration')\n * .description('Create your account')\n * .control(\n * C.email('email')\n * .required()\n * .ask('What email should we use for your account?')\n * .example('user@example.com')\n * )\n * .control(\n * C.text('username')\n * .required()\n * .minLength(3)\n * .maxLength(20)\n * .pattern('^[a-z0-9_]+$')\n * .ask('Choose a username (letters, numbers, underscore)')\n * )\n * .control(\n * C.number('age')\n * .min(13)\n * .ask('How old are you?')\n * )\n * .onSubmit('handle_registration')\n * .ttl({ minDays: 7, maxDays: 30 })\n * .build();\n * ```\n *\n * ### Custom Type\n *\n * ```typescript\n * // Register custom type first\n * FormService.registerType('solana_address', {\n * validate: (v) => ({\n * valid: /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(String(v)),\n * error: 'Invalid Solana address'\n * }),\n * extractionPrompt: 'a Solana wallet address (Base58 encoded)'\n * });\n *\n * // Use in form\n * const form = Form.create('wallet')\n * .control(\n * C.field('walletAddress')\n * .type('solana_address')\n * .required()\n * .label('Wallet Address')\n * .ask('What is your Solana wallet address?')\n * )\n * .build();\n * ```\n *\n * ## Shorthand Exports\n *\n * For convenience:\n * - `Form` is an alias for `FormBuilder`\n * - `C` is an alias for `ControlBuilder`\n *\n * This enables the concise syntax shown in examples.\n */\n\nimport type { JsonValue } from \"@elizaos/core\";\nimport type {\n FormControl,\n FormControlDependency,\n FormControlOption,\n FormDefinition,\n FormDefinitionHooks,\n} from \"./types\";\n\n// ============================================================================\n// CONTROL BUILDER\n// ============================================================================\n\n/**\n * Fluent builder for FormControl.\n *\n * Create controls with readable, chainable syntax:\n *\n * ```typescript\n * ControlBuilder.email('email').required().ask('What is your email?')\n * ```\n *\n * All methods return `this` for chaining except `build()` which returns\n * the final FormControl.\n */\nexport class ControlBuilder {\n /** Partial control being built */\n private control: Partial<FormControl>;\n\n /**\n * Create a new ControlBuilder.\n *\n * @param key - The unique key for this control\n */\n constructor(key: string) {\n this.control = { key };\n }\n\n // ═══ STATIC FACTORIES ═══\n // WHY static factories: Cleaner than `new ControlBuilder(key).type('text')`\n\n /** Create a generic field builder */\n static field(key: string): ControlBuilder {\n return new ControlBuilder(key);\n }\n\n /** Create a text field */\n static text(key: string): ControlBuilder {\n return new ControlBuilder(key).type(\"text\");\n }\n\n /** Create an email field */\n static email(key: string): ControlBuilder {\n return new ControlBuilder(key).type(\"email\");\n }\n\n /** Create a number field */\n static number(key: string): ControlBuilder {\n return new ControlBuilder(key).type(\"number\");\n }\n\n /** Create a boolean (yes/no) field */\n static boolean(key: string): ControlBuilder {\n return new ControlBuilder(key).type(\"boolean\");\n }\n\n /** Create a select field with options */\n static select(key: string, options: FormControlOption[]): ControlBuilder {\n return new ControlBuilder(key).type(\"select\").options(options);\n }\n\n /** Create a date field */\n static date(key: string): ControlBuilder {\n return new ControlBuilder(key).type(\"date\");\n }\n\n /** Create a file upload field */\n static file(key: string): ControlBuilder {\n return new ControlBuilder(key).type(\"file\");\n }\n\n // ═══ TYPE ═══\n\n /** Set the field type */\n type(type: string): this {\n this.control.type = type;\n return this;\n }\n\n // ═══ BEHAVIOR ═══\n\n /** Mark field as required */\n required(): this {\n this.control.required = true;\n return this;\n }\n\n /** Mark field as optional (default) */\n optional(): this {\n this.control.required = false;\n return this;\n }\n\n /** Mark field as hidden (extract silently, never ask) */\n hidden(): this {\n this.control.hidden = true;\n return this;\n }\n\n /** Mark field as sensitive (don't echo value back) */\n sensitive(): this {\n this.control.sensitive = true;\n return this;\n }\n\n /** Mark field as readonly (can't change after set) */\n readonly(): this {\n this.control.readonly = true;\n return this;\n }\n\n /** Mark field as accepting multiple values */\n multiple(): this {\n this.control.multiple = true;\n return this;\n }\n\n // ═══ VALIDATION ═══\n\n /** Set regex pattern for validation */\n pattern(regex: string): this {\n this.control.pattern = regex;\n return this;\n }\n\n /** Set minimum value (for numbers) or minimum length (via minLength) */\n min(n: number): this {\n this.control.min = n;\n return this;\n }\n\n /** Set maximum value (for numbers) or maximum length (via maxLength) */\n max(n: number): this {\n this.control.max = n;\n return this;\n }\n\n /** Set minimum string length */\n minLength(n: number): this {\n this.control.minLength = n;\n return this;\n }\n\n /** Set maximum string length */\n maxLength(n: number): this {\n this.control.maxLength = n;\n return this;\n }\n\n /** Set allowed values (enum) */\n enum(values: string[]): this {\n this.control.enum = values;\n return this;\n }\n\n /** Set select options */\n options(opts: FormControlOption[]): this {\n this.control.options = opts;\n return this;\n }\n\n // ═══ AGENT HINTS ═══\n // WHY agent hints: Help LLM extract values correctly\n\n /** Set human-readable label */\n label(label: string): this {\n this.control.label = label;\n return this;\n }\n\n /** Set custom prompt for asking this field */\n ask(prompt: string): this {\n this.control.askPrompt = prompt;\n return this;\n }\n\n /** Set description for LLM context */\n description(desc: string): this {\n this.control.description = desc;\n return this;\n }\n\n /** Add extraction hints (keywords to look for) */\n hint(...hints: string[]): this {\n this.control.extractHints = hints;\n return this;\n }\n\n /** Set example value for \"give me an example\" */\n example(value: string): this {\n this.control.example = value;\n return this;\n }\n\n /** Set confidence threshold for auto-acceptance */\n confirmThreshold(n: number): this {\n this.control.confirmThreshold = n;\n return this;\n }\n\n // ═══ FILE OPTIONS ═══\n\n /** Set accepted MIME types for file upload */\n accept(mimeTypes: string[]): this {\n this.control.file = { ...this.control.file, accept: mimeTypes };\n return this;\n }\n\n /** Set maximum file size in bytes */\n maxSize(bytes: number): this {\n this.control.file = { ...this.control.file, maxSize: bytes };\n return this;\n }\n\n /** Set maximum number of files */\n maxFiles(n: number): this {\n this.control.file = { ...this.control.file, maxFiles: n };\n return this;\n }\n\n // ═══ ACCESS ═══\n\n /** Set roles that can see/fill this field */\n roles(...roles: string[]): this {\n this.control.roles = roles;\n return this;\n }\n\n // ═══ DEFAULTS & CONDITIONS ═══\n\n /** Set default value */\n default(value: JsonValue): this {\n this.control.defaultValue = value;\n return this;\n }\n\n /** Set dependency on another field */\n dependsOn(\n field: string,\n condition: FormControlDependency[\"condition\"] = \"exists\",\n value?: JsonValue\n ): this {\n this.control.dependsOn = { field, condition, value };\n return this;\n }\n\n // ═══ DATABASE ═══\n\n /** Set database column name (defaults to key) */\n dbbind(columnName: string): this {\n this.control.dbbind = columnName;\n return this;\n }\n\n // ═══ UI ═══\n\n /** Set section name for grouping */\n section(name: string): this {\n this.control.ui = { ...this.control.ui, section: name };\n return this;\n }\n\n /** Set display order within section */\n order(n: number): this {\n this.control.ui = { ...this.control.ui, order: n };\n return this;\n }\n\n /** Set placeholder text */\n placeholder(text: string): this {\n this.control.ui = { ...this.control.ui, placeholder: text };\n return this;\n }\n\n /** Set help text */\n helpText(text: string): this {\n this.control.ui = { ...this.control.ui, helpText: text };\n return this;\n }\n\n /** Set custom widget type */\n widget(type: string): this {\n this.control.ui = { ...this.control.ui, widget: type };\n return this;\n }\n\n // ═══ I18N ═══\n\n /** Add localized text for a locale */\n i18n(\n locale: string,\n translations: {\n label?: string;\n description?: string;\n askPrompt?: string;\n helpText?: string;\n }\n ): this {\n this.control.i18n = { ...this.control.i18n, [locale]: translations };\n return this;\n }\n\n // ═══ META ═══\n\n /** Add custom metadata */\n meta(key: string, value: JsonValue): this {\n this.control.meta = { ...this.control.meta, [key]: value };\n return this;\n }\n\n // ═══ BUILD ═══\n\n /**\n * Build the final FormControl.\n *\n * Applies defaults and validates the control.\n *\n * @returns Complete FormControl object\n */\n build(): FormControl {\n // Apply defaults\n const control: FormControl = {\n key: this.control.key!,\n label: this.control.label || prettify(this.control.key!),\n type: this.control.type || \"text\",\n ...this.control,\n };\n\n return control;\n }\n}\n\n// ============================================================================\n// FORM BUILDER\n// ============================================================================\n\n/**\n * Fluent builder for FormDefinition.\n *\n * Create forms with readable, chainable syntax:\n *\n * ```typescript\n * Form.create('contact')\n * .name('Contact Form')\n * .control(C.email('email').required())\n * .onSubmit('handle_contact')\n * .build();\n * ```\n */\nexport class FormBuilder {\n /** Partial form being built */\n private form: Partial<FormDefinition>;\n\n /**\n * Create a new FormBuilder.\n *\n * @param id - Unique form identifier\n */\n constructor(id: string) {\n this.form = { id, controls: [] };\n }\n\n // ═══ STATIC FACTORY ═══\n\n /** Create a new form builder */\n static create(id: string): FormBuilder {\n return new FormBuilder(id);\n }\n\n // ═══ METADATA ═══\n\n /** Set form name */\n name(name: string): this {\n this.form.name = name;\n return this;\n }\n\n /** Set form description */\n description(desc: string): this {\n this.form.description = desc;\n return this;\n }\n\n /** Set form version */\n version(v: number): this {\n this.form.version = v;\n return this;\n }\n\n // ═══ CONTROLS ═══\n\n /**\n * Add a control to the form.\n *\n * Accepts either a ControlBuilder (calls .build()) or a FormControl.\n */\n control(builder: ControlBuilder | FormControl): this {\n const ctrl = builder instanceof ControlBuilder ? builder.build() : builder;\n this.form.controls?.push(ctrl);\n return this;\n }\n\n /** Add multiple controls */\n controls(...builders: (ControlBuilder | FormControl)[]): this {\n for (const builder of builders) {\n this.control(builder);\n }\n return this;\n }\n\n // ═══ SHORTHAND CONTROLS ═══\n // WHY shorthands: Quick form prototyping\n\n /** Add required text fields */\n required(...keys: string[]): this {\n for (const key of keys) {\n this.control(ControlBuilder.field(key).required());\n }\n return this;\n }\n\n /** Add optional text fields */\n optional(...keys: string[]): this {\n for (const key of keys) {\n this.control(ControlBuilder.field(key));\n }\n return this;\n }\n\n // ═══ PERMISSIONS ═══\n\n /** Set roles that can start this form */\n roles(...roles: string[]): this {\n this.form.roles = roles;\n return this;\n }\n\n /** Allow multiple submissions per user */\n allowMultiple(): this {\n this.form.allowMultiple = true;\n return this;\n }\n\n // ═══ UX ═══\n\n /** Disable undo functionality */\n noUndo(): this {\n this.form.ux = { ...this.form.ux, allowUndo: false };\n return this;\n }\n\n /** Disable skip functionality */\n noSkip(): this {\n this.form.ux = { ...this.form.ux, allowSkip: false };\n return this;\n }\n\n /** Disable autofill */\n noAutofill(): this {\n this.form.ux = { ...this.form.ux, allowAutofill: false };\n return this;\n }\n\n /** Set maximum undo steps */\n maxUndoSteps(n: number): this {\n this.form.ux = { ...this.form.ux, maxUndoSteps: n };\n return this;\n }\n\n // ═══ TTL ═══\n\n /** Configure TTL (time-to-live) settings */\n ttl(config: { minDays?: number; maxDays?: number; effortMultiplier?: number }): this {\n this.form.ttl = { ...this.form.ttl, ...config };\n return this;\n }\n\n // ═══ NUDGE ═══\n\n /** Disable nudge messages */\n noNudge(): this {\n this.form.nudge = { ...this.form.nudge, enabled: false };\n return this;\n }\n\n /** Set inactivity hours before nudge */\n nudgeAfter(hours: number): this {\n this.form.nudge = { ...this.form.nudge, afterInactiveHours: hours };\n return this;\n }\n\n /** Set custom nudge message */\n nudgeMessage(message: string): this {\n this.form.nudge = { ...this.form.nudge, message };\n return this;\n }\n\n // ═══ HOOKS ═══\n // WHY hooks: Allow consuming plugins to handle form events\n\n /** Set task worker to call on session start */\n onStart(workerName: string): this {\n this.form.hooks = { ...this.form.hooks, onStart: workerName };\n return this;\n }\n\n /** Set task worker to call on field change */\n onFieldChange(workerName: string): this {\n this.form.hooks = { ...this.form.hooks, onFieldChange: workerName };\n return this;\n }\n\n /** Set task worker to call when form is ready to submit */\n onReady(workerName: string): this {\n this.form.hooks = { ...this.form.hooks, onReady: workerName };\n return this;\n }\n\n /** Set task worker to call on submission */\n onSubmit(workerName: string): this {\n this.form.hooks = { ...this.form.hooks, onSubmit: workerName };\n return this;\n }\n\n /** Set task worker to call on cancellation */\n onCancel(workerName: string): this {\n this.form.hooks = { ...this.form.hooks, onCancel: workerName };\n return this;\n }\n\n /** Set task worker to call on expiration */\n onExpire(workerName: string): this {\n this.form.hooks = { ...this.form.hooks, onExpire: workerName };\n return this;\n }\n\n /** Set multiple hooks at once */\n hooks(hooks: FormDefinitionHooks): this {\n this.form.hooks = { ...this.form.hooks, ...hooks };\n return this;\n }\n\n // ═══ DEBUG ═══\n\n /** Enable debug mode (logs extraction reasoning) */\n debug(): this {\n this.form.debug = true;\n return this;\n }\n\n // ═══ I18N ═══\n\n /** Add localized form text */\n i18n(locale: string, translations: { name?: string; description?: string }): this {\n this.form.i18n = { ...this.form.i18n, [locale]: translations };\n return this;\n }\n\n // ═══ META ═══\n\n /** Add custom metadata */\n meta(key: string, value: JsonValue): this {\n this.form.meta = { ...this.form.meta, [key]: value };\n return this;\n }\n\n // ═══ BUILD ═══\n\n /**\n * Build the final FormDefinition.\n *\n * Applies defaults and validates the form.\n *\n * @returns Complete FormDefinition object\n */\n build(): FormDefinition {\n const form: FormDefinition = {\n id: this.form.id!,\n name: this.form.name || prettify(this.form.id!),\n controls: this.form.controls || [],\n ...this.form,\n };\n\n return form;\n }\n}\n\n// ============================================================================\n// SHORTHAND EXPORTS\n// ============================================================================\n\n/**\n * Shorthand for FormBuilder.create\n *\n * Usage: `Form.create('myForm')...`\n */\nexport const Form = FormBuilder;\n\n/**\n * Shorthand for ControlBuilder factories\n *\n * Usage: `C.email('email').required()`\n */\nexport const C = ControlBuilder;\n\n// ============================================================================\n// UTILITY\n// ============================================================================\n\n/**\n * Convert snake_case or kebab-case to Title Case.\n *\n * Used to generate human-readable labels from field keys.\n *\n * @example prettify('first_name') // \"First Name\"\n * @example prettify('email-address') // \"Email Address\"\n */\nfunction prettify(key: string): string {\n return key.replace(/[-_]/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n",
25
25
  "/**\n * @module tasks/nudge\n * @description Background task for nudging stale form sessions\n *\n * ## Purpose\n *\n * Users start forms and forget about them. The nudge system sends\n * gentle reminders:\n *\n * 1. **Stale Sessions**: \"You have an unfinished registration form...\"\n * 2. **Expiring Sessions**: \"Your form will expire in 24 hours...\"\n * 3. **Expired Sessions**: Mark as expired, trigger onExpire hook\n *\n * ## Architecture\n *\n * The nudge system has two components:\n *\n * ### 1. Task Worker (formNudgeWorker)\n *\n * A background task that periodically checks for stale sessions.\n *\n * **Limitation**: The current ElizaOS component system doesn't support\n * efficient cross-entity queries. The worker needs to know which entities\n * to check.\n *\n * ### 2. Per-Entity Processing (processEntityNudges)\n *\n * Called with a specific entity ID to process that user's sessions.\n * This can be triggered:\n * - After any form interaction (opportunistic)\n * - By a scheduled job with known entity IDs\n * - By admin action\n *\n * ## Nudge Rules\n *\n * 1. Only nudge stashed sessions (not active ones)\n * 2. Wait configurable hours before first nudge (default: 48)\n * 3. Maximum nudges per session (default: 3)\n * 4. At least 24 hours between nudges\n *\n * ## Expiration Warnings\n *\n * Before a session expires, we warn the user:\n * - 24 hours before expiration\n * - Only warn once per session (expirationWarned flag)\n *\n * ## Sending Messages\n *\n * The nudge system uses `runtime.sendMessageToRoom` if available.\n * Not all runtimes support this - it's a best-effort feature.\n *\n * ## Future Improvements\n *\n * 1. Database-level query for stale sessions\n * 2. Integration with notification system\n * 3. User preferences for nudge frequency\n */\n\nimport type { IAgentRuntime, TaskWorker } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { FormService } from \"../service\";\nimport { formatTimeRemaining, isExpiringSoon, shouldNudge } from \"../ttl\";\n\n/**\n * Nudge Task Worker\n *\n * Periodically checks for stale form sessions and:\n * 1. Sends nudge messages for inactive sessions\n * 2. Sends expiration warnings for sessions about to expire\n * 3. Cleans up expired sessions\n *\n * WHY a task worker:\n * - Runs independently of user interaction\n * - Can be scheduled to run periodically\n * - Handles multiple entities efficiently\n */\nexport const formNudgeWorker: TaskWorker = {\n name: \"form_nudge_check\",\n\n /**\n * Validate: Always run.\n *\n * WHY always true: Background task, not triggered by user.\n */\n validate: async (_runtime, _message, _state) => {\n return true;\n },\n\n /**\n * Execute: Check for stale sessions.\n *\n * LIMITATION: Can't efficiently query across all entities.\n * This is noted for future improvement.\n *\n * Current implementation just logs that a cycle completed.\n * Actual nudging happens via processEntityNudges() when\n * we have entity context.\n */\n execute: async (runtime: IAgentRuntime, _options, _task) => {\n try {\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) {\n logger.debug(\"[FormNudge] Form service not available\");\n return;\n }\n\n // Note: In a real implementation, we would need a way to iterate over all\n // active sessions across all entities. The current storage model doesn't\n // support this efficiently. For now, this task will only work if we have\n // a list of known entity IDs or if we extend the storage to support\n // cross-entity queries.\n\n // This is a limitation noted in storage.ts - in production, this would\n // need a database-level query for sessions.\n\n logger.debug(\"[FormNudge] Nudge check cycle completed\");\n } catch (error) {\n logger.error(\"[FormNudge] Error during nudge check:\", String(error));\n }\n },\n};\n\n/**\n * Process nudges and expirations for a specific entity.\n *\n * This function can be called when we have an entity context.\n * For example, it could be triggered after any form interaction.\n *\n * WHY separate function:\n * - Can be called opportunistically\n * - Avoids cross-entity query limitation\n * - Easy to test with specific entity\n *\n * @param runtime - Agent runtime for service access\n * @param entityId - The entity to process\n */\nexport async function processEntityNudges(runtime: IAgentRuntime, entityId: string): Promise<void> {\n const formService = runtime.getService(\"FORM\") as FormService;\n if (!formService) return;\n\n // Get all sessions for this entity (active and stashed)\n const activeSessions = await formService.getAllActiveSessions(entityId as any);\n const stashedSessions = await formService.getStashedSessions(entityId as any);\n const allSessions = [...activeSessions, ...stashedSessions];\n\n const now = Date.now();\n // Warn 24 hours before expiration\n const expirationWarningMs = 24 * 60 * 60 * 1000;\n\n for (const session of allSessions) {\n const form = formService.getForm(session.formId);\n\n // === Check for Expiration ===\n if (session.expiresAt < now) {\n // Mark as expired\n session.status = \"expired\";\n await formService.saveSession(session);\n\n // Execute onExpire hook if defined\n // WHY hook: Let consuming plugins handle cleanup\n if (form?.hooks?.onExpire) {\n const worker = runtime.getTaskWorker(form.hooks.onExpire);\n if (worker) {\n try {\n await worker.execute(runtime, { session, form }, {} as any);\n } catch (error) {\n logger.error(\"[FormNudge] onExpire hook failed:\", String(error));\n }\n }\n }\n\n logger.debug(`[FormNudge] Session ${session.id} expired`);\n continue;\n }\n\n // === Check for Expiration Warning ===\n // Send warning 24 hours before expiration (only once)\n if (isExpiringSoon(session, expirationWarningMs) && !session.expirationWarned) {\n await sendExpirationWarning(runtime, session, form);\n session.expirationWarned = true;\n await formService.saveSession(session);\n continue;\n }\n\n // === Check for Nudge ===\n // Only nudge stashed sessions (user explicitly saved for later)\n // Don't nudge active sessions (user might be mid-conversation)\n if (session.status === \"stashed\" && shouldNudge(session, form)) {\n await sendNudge(runtime, session, form);\n session.nudgeCount = (session.nudgeCount || 0) + 1;\n session.lastNudgeAt = now;\n await formService.saveSession(session);\n }\n }\n}\n\n/**\n * Send a nudge message for a stale session.\n *\n * @param runtime - Agent runtime\n * @param session - The session to nudge\n * @param form - The form definition\n */\nasync function sendNudge(\n runtime: IAgentRuntime,\n session: { roomId: string; formId: string },\n form?: { name?: string; nudge?: { message?: string } }\n): Promise<void> {\n // Use custom message if configured, otherwise default\n const message =\n form?.nudge?.message ||\n `You have an unfinished \"${form?.name || \"form\"}\". Would you like to continue?`;\n\n try {\n // Note: sendMessageToRoom may not be available on all runtimes\n // This is a best-effort attempt\n // WHY type cast: Runtime might not have sendMessageToRoom\n if (typeof (runtime as any).sendMessageToRoom === \"function\") {\n await (runtime as any).sendMessageToRoom(session.roomId, {\n text: message,\n });\n logger.debug(`[FormNudge] Sent nudge for session in room ${session.roomId}`);\n }\n } catch (error) {\n logger.error(\"[FormNudge] Failed to send nudge:\", String(error));\n }\n}\n\n/**\n * Send an expiration warning for a session about to expire.\n *\n * @param runtime - Agent runtime\n * @param session - The session about to expire\n * @param form - The form definition\n */\nasync function sendExpirationWarning(\n runtime: IAgentRuntime,\n session: { roomId: string; formId: string; expiresAt: number },\n form?: { name?: string }\n): Promise<void> {\n const remaining = formatTimeRemaining(session as any);\n const message = `Your \"${form?.name || \"form\"}\" form will expire in ${remaining}. Say \"resume\" to keep working on it.`;\n\n try {\n if (typeof (runtime as any).sendMessageToRoom === \"function\") {\n await (runtime as any).sendMessageToRoom(session.roomId, {\n text: message,\n });\n logger.debug(`[FormNudge] Sent expiration warning for session in room ${session.roomId}`);\n }\n } catch (error) {\n logger.error(\"[FormNudge] Failed to send expiration warning:\", String(error));\n }\n}\n\nexport default formNudgeWorker;\n"
26
26
  ],
27
- "mappings": "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",
28
- "debugId": "B1811CEC0857E66F64756E2164756E21",
27
+ "mappings": "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",
28
+ "debugId": "DC90FD3CDE2C7E4764756E2164756E21",
29
29
  "names": []
30
30
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-form",
3
3
  "description": "Guardrails for agent-guided user journeys - forms as agent guidance rails for ElizaOS",
4
- "version": "2.0.0-alpha.8",
4
+ "version": "2.0.0-alpha.9",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",