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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/auto-enable.ts +24 -0
  2. package/dist/actions/restore.d.ts +25 -0
  3. package/dist/actions/restore.d.ts.map +1 -0
  4. package/dist/actions/restore.js +176 -0
  5. package/dist/actions/restore.js.map +1 -0
  6. package/dist/builder.d.ts +320 -0
  7. package/dist/builder.d.ts.map +1 -0
  8. package/dist/builder.js +458 -0
  9. package/dist/builder.js.map +1 -0
  10. package/dist/builtins.d.ts +128 -0
  11. package/dist/builtins.d.ts.map +1 -0
  12. package/dist/builtins.js +233 -0
  13. package/dist/builtins.js.map +1 -0
  14. package/dist/defaults.d.ts +95 -0
  15. package/dist/defaults.d.ts.map +1 -0
  16. package/dist/defaults.js +79 -0
  17. package/dist/defaults.js.map +1 -0
  18. package/dist/evaluators/extractor.d.ts +28 -0
  19. package/dist/evaluators/extractor.d.ts.map +1 -0
  20. package/dist/evaluators/extractor.js +247 -0
  21. package/dist/evaluators/extractor.js.map +1 -0
  22. package/dist/extraction.d.ts +55 -0
  23. package/dist/extraction.d.ts.map +1 -0
  24. package/dist/extraction.js +331 -0
  25. package/dist/extraction.js.map +1 -0
  26. package/dist/index.d.ts +31 -2
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +119 -3284
  29. package/dist/index.js.map +1 -30
  30. package/dist/providers/context.d.ts +56 -0
  31. package/dist/providers/context.d.ts.map +1 -0
  32. package/dist/providers/context.js +206 -0
  33. package/dist/providers/context.js.map +1 -0
  34. package/dist/service.d.ts +402 -0
  35. package/dist/service.d.ts.map +1 -0
  36. package/dist/service.js +1158 -0
  37. package/dist/service.js.map +1 -0
  38. package/dist/storage.d.ts +228 -0
  39. package/dist/storage.d.ts.map +1 -0
  40. package/dist/storage.js +218 -0
  41. package/dist/storage.js.map +1 -0
  42. package/dist/template.d.ts +10 -0
  43. package/dist/template.d.ts.map +1 -0
  44. package/dist/template.js +60 -0
  45. package/dist/template.js.map +1 -0
  46. package/dist/ttl.d.ts +144 -0
  47. package/dist/ttl.d.ts.map +1 -0
  48. package/dist/ttl.js +85 -0
  49. package/dist/ttl.js.map +1 -0
  50. package/dist/types.d.ts +1213 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +39 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/validation.d.ts +156 -0
  55. package/dist/validation.d.ts.map +1 -0
  56. package/dist/validation.js +289 -0
  57. package/dist/validation.js.map +1 -0
  58. package/package.json +39 -42
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extraction.ts"],"sourcesContent":["/**\n * @module extraction\n * @description LLM-based field extraction from natural language.\n *\n * Exposes prompt/schema/parse helpers consumed by the form Evaluator and\n * runs the LLM call directly only for the targeted single-field and\n * correction-detection helpers.\n */\n\nimport type { IAgentRuntime, JSONSchema, JsonValue } from \"@elizaos/core\";\nimport { ModelType } 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\nconst FORM_INTENTS: 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\nconst INTENT_MEANINGS: Record<FormIntent, string> = {\n fill_form: \"user is providing field values\",\n submit: \"user wants to submit or finish the form\",\n stash: \"user wants to save or pause the form for later\",\n restore: \"user wants to resume a saved form\",\n cancel: \"user wants to cancel or abandon the form\",\n undo: \"user wants to undo the last change\",\n skip: \"user wants to skip the current field\",\n explain: \"user wants an explanation\",\n example: \"user wants an example value\",\n progress: \"user wants a progress update\",\n autofill: \"user wants to use saved values\",\n other: \"none of the above\",\n};\n\ntype SingleFieldJsonResponse = {\n found?: string | boolean;\n value?: JsonValue;\n confidence?: string | number;\n reasoning?: string;\n};\n\ntype CorrectionJsonField = {\n field?: string;\n old_value?: JsonValue;\n new_value?: JsonValue;\n confidence?: string | number;\n};\n\ntype CorrectionJsonResponse = {\n has_correction?: string | boolean;\n corrections?: CorrectionJsonField[];\n};\n\nfunction parseJsonObjectResponse<T>(response: string): T | null {\n try {\n const trimmed = response.trim();\n const fenced = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/i);\n const candidate = (fenced?.[1] ?? trimmed).trim();\n const firstBrace = candidate.indexOf(\"{\");\n const lastBrace = candidate.lastIndexOf(\"}\");\n if (firstBrace < 0 || lastBrace <= firstBrace) return null;\n const parsed = JSON.parse(candidate.slice(firstBrace, lastBrace + 1));\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n return parsed as T;\n } catch {\n return null;\n }\n}\n\nfunction parseBoolean(value: unknown): boolean {\n return (\n String(value ?? \"\")\n .trim()\n .toLowerCase() === \"true\"\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isValidIntent(str: string): str is FormIntent {\n return (FORM_INTENTS as string[]).includes(str);\n}\n\n// ============================================================================\n// EVALUATOR HELPERS — schema, prompt, parse for the unified evaluator pass\n// ============================================================================\n\n/**\n * Build the JSON Schema fragment for the form-extractor evaluator section.\n *\n * Returned shape:\n * { formIntent: <enum>, formExtractions: [{ field, value, confidence, isCorrection }] }\n */\nexport function buildFormExtractorSchema(): JSONSchema {\n return {\n type: \"object\",\n properties: {\n formIntent: {\n type: \"string\",\n enum: [...FORM_INTENTS],\n },\n formExtractions: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n field: { type: \"string\" },\n value: {},\n confidence: { type: \"number\" },\n isCorrection: { type: \"boolean\" },\n reasoning: { type: \"string\" },\n },\n required: [\"field\", \"confidence\"],\n additionalProperties: false,\n },\n },\n },\n required: [\"formIntent\", \"formExtractions\"],\n additionalProperties: false,\n };\n}\n\n/**\n * Build the prompt section for the form-extractor evaluator.\n *\n * The unified evaluator prompt inlines this string and asks the model to\n * populate `{ formIntent, formExtractions }` for the active form.\n */\nexport function buildFormExtractorPromptSection(params: {\n text: string;\n form: FormDefinition;\n controls: FormControl[];\n templateValues?: TemplateValues;\n}): string {\n const { text, form, controls, templateValues } = params;\n\n const resolvedControls = templateValues\n ? controls.map((control) =>\n resolveControlTemplates(control, templateValues),\n )\n : controls;\n\n const visibleControls = resolvedControls.filter((c) => !c.hidden);\n const fieldsDescription = visibleControls.map((c) => {\n const handler = getTypeHandler(c.type);\n const typeHint = handler?.extractionPrompt || c.type;\n return {\n key: c.key,\n label: c.label,\n type: typeHint,\n description: c.description || typeHint,\n hints: c.extractHints ?? [],\n options: c.options?.map((o) => o.value) ?? [],\n };\n });\n\n return `Extract form intent and field values for the active form session.\n\nContext JSON:\n${JSON.stringify(\n {\n form: {\n name: form.name,\n description: form.description,\n },\n fields: fieldsDescription,\n user_message: text,\n intent_options: FORM_INTENTS,\n intent_meanings: INTENT_MEANINGS,\n },\n null,\n 2,\n)}\n\nPopulate this evaluator's section as:\n{\n \"formIntent\": \"one of intent_options\",\n \"formExtractions\": [\n { \"field\": \"<key>\", \"value\": <extracted>, \"confidence\": 0.0-1.0, \"isCorrection\": false, \"reasoning\": \"brief\" }\n ]\n}\n\nRules:\n- Choose exactly one intent.\n- For fill_form, extract every mentioned field value.\n- Use an empty formExtractions array when no fields were extracted.\n- Confidence is a number from 0.0 to 1.0.`;\n}\n\n/**\n * Parse the raw `{ formIntent, formExtractions }` object produced by the\n * unified evaluator pass into a typed `IntentResult`. Type coercion and\n * validation against control rules happen later (in the processor) where\n * the form definition is in scope.\n */\nexport function parseFormExtractorOutput(raw: unknown): IntentResult | null {\n if (!isRecord(raw)) return null;\n\n const intentStr =\n typeof raw.formIntent === \"string\"\n ? raw.formIntent.toLowerCase()\n : \"other\";\n const intent: FormIntent = isValidIntent(intentStr) ? intentStr : \"other\";\n\n const rawExtractions = Array.isArray(raw.formExtractions)\n ? raw.formExtractions\n : [];\n\n const extractions: ExtractionResult[] = [];\n const seen = new Set<string>();\n\n for (const entry of rawExtractions) {\n if (!isRecord(entry)) continue;\n const fieldKey = typeof entry.field === \"string\" ? entry.field : \"\";\n if (!fieldKey) continue;\n\n const dedupeKey = `${fieldKey}\\0${String(entry.value ?? \"\")}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n\n const value: JsonValue =\n (entry.value as JsonValue | undefined) ?? null;\n\n let confidence =\n typeof entry.confidence === \"number\"\n ? entry.confidence\n : parseFloat(String(entry.confidence ?? \"\"));\n if (!Number.isFinite(confidence)) confidence = 0.5;\n\n const reasoning =\n typeof entry.reasoning === \"string\" ? entry.reasoning : undefined;\n\n extractions.push({\n field: fieldKey,\n value,\n confidence,\n reasoning,\n isCorrection: parseBoolean(entry.isCorrection),\n });\n }\n\n return { intent, extractions };\n}\n\n/**\n * Apply type coercion + validation to a parsed extractions list against the\n * resolved form controls. Lowers confidence to 0.3 when a value fails the\n * control's validator (so downstream confirmation flow kicks in).\n */\nexport function coerceExtractionsAgainstControls(\n extractions: ExtractionResult[],\n controls: FormControl[],\n templateValues?: TemplateValues,\n): ExtractionResult[] {\n const resolvedControls = templateValues\n ? controls.map((control) =>\n resolveControlTemplates(control, templateValues),\n )\n : controls;\n\n return extractions.map((extraction) => {\n if (extraction.field.includes(\".\")) return extraction;\n\n const control = resolvedControls.find((c) => c.key === extraction.field);\n if (!control) return extraction;\n\n let value = extraction.value;\n if (typeof value === \"string\") {\n value = parseValue(value, control);\n }\n\n const validation = validateField(value, control);\n if (!validation.valid) {\n const reasoning = `${extraction.reasoning ?? \"\"} (Validation failed: ${validation.error})`.trim();\n return {\n ...extraction,\n value,\n confidence: Math.min(extraction.confidence, 0.3),\n reasoning,\n };\n }\n\n return { ...extraction, value };\n });\n}\n\n// ============================================================================\n// SINGLE-FIELD EXTRACTION (still owns its LLM call — narrow targeted use)\n// ============================================================================\n\n/**\n * Extract a specific field value from a user message with a focused prompt.\n *\n * Used when the agent has just asked for a specific field and expects a\n * direct answer. Independent of the unified evaluator pass.\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 const prompt = `Extract a single form field value from the user message.\n\nContext JSON:\n${JSON.stringify(\n {\n field: {\n key: resolvedControl.key,\n label: resolvedControl.label,\n type: typeHint,\n description: resolvedControl.description,\n hints: resolvedControl.extractHints ?? [],\n options: resolvedControl.options?.map((o) => o.value) ?? [],\n example: resolvedControl.example,\n },\n user_message: text,\n },\n null,\n 2,\n)}\n\nReturn only a valid JSON object with this schema:\n{\n \"found\": true,\n \"value\": \"extracted value or null if not found\",\n \"confidence\": 0.95,\n \"reasoning\": \"brief explanation\"\n}`;\n\n const runModel = runtime.useModel.bind(runtime);\n const response = await runModel(ModelType.TEXT_SMALL, {\n prompt,\n temperature: 0.1,\n });\n\n const parsed = parseJsonObjectResponse<SingleFieldJsonResponse>(response);\n const found = parsed?.found === true || parsed?.found === \"true\";\n if (!found || !parsed) return null;\n\n let value = parsed.value;\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\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(\n \"[FormExtraction] Single field extraction:\",\n JSON.stringify(result),\n );\n }\n\n return result;\n}\n\n// ============================================================================\n// CORRECTION DETECTION (still owns its LLM call — narrow targeted use)\n// ============================================================================\n\n/**\n * Detect whether the user is correcting a previously filled value.\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) =>\n resolveControlTemplates(control, templateValues),\n )\n : controls;\n\n const currentValueEntries = resolvedControls.filter(\n (c) => currentValues[c.key] !== undefined,\n );\n if (currentValueEntries.length === 0) return [];\n\n const currentValueRows = currentValueEntries.map((c) => ({\n key: c.key,\n label: c.label,\n value: currentValues[c.key],\n }));\n\n const prompt = `Detect whether the user is correcting a previous form value.\n\nContext JSON:\n${JSON.stringify(\n {\n current_values: currentValueRows,\n user_message: text,\n },\n null,\n 2,\n)}\n\nReturn only a valid JSON object with this schema:\n{\n \"has_correction\": true,\n \"corrections\": [\n {\n \"field\": \"email\",\n \"old_value\": \"old@example.com\",\n \"new_value\": \"new@example.com\",\n \"confidence\": 0.9\n }\n ]\n}\n\nRules:\n- Decide whether the user is correcting a previous value.\n- When correcting, extract the replacement value.\n- Use an empty corrections array when no corrections were found.`;\n\n const runModel = runtime.useModel.bind(runtime);\n const response = await runModel(ModelType.TEXT_SMALL, {\n prompt,\n temperature: 0.1,\n });\n\n const parsed = parseJsonObjectResponse<CorrectionJsonResponse>(response);\n const hasCorrection =\n parsed?.has_correction === true || parsed?.has_correction === \"true\";\n if (!parsed || !hasCorrection || !parsed.corrections) return [];\n\n const corrections: ExtractionResult[] = [];\n const correctionList = Array.isArray(parsed.corrections)\n ? parsed.corrections\n : [];\n const seen = new Set<string>();\n\n for (const correction of correctionList) {\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 if (!control) continue;\n\n const dedupeKey = `${control.key}\\0${String(correction.new_value ?? \"\")}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n\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\n corrections.push({\n field: control.key,\n value: value ?? null,\n confidence: Number.isFinite(confidence) ? confidence : 0.8,\n isCorrection: true,\n });\n }\n\n return corrections;\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,31 @@
1
- export * from "./index";
2
- export { default } from "./index";
1
+ /**
2
+ * @module @elizaos/plugin-form
3
+ * @description Guardrails for agent-guided user journeys
4
+ *
5
+ * @author Odilitime
6
+ * @copyright 2025 Odilitime
7
+ * @license MIT
8
+ */
9
+ import type { Plugin } from "@elizaos/core";
10
+ export * from "./types";
11
+ export { BUILTIN_TYPE_MAP, BUILTIN_TYPES, getBuiltinType, isBuiltinType, registerBuiltinTypes, } from "./builtins";
12
+ export { clearTypeHandlers, formatValue, getTypeHandler, matchesMimeType, parseValue, registerTypeHandler, validateField, } from "./validation";
13
+ export { deleteSession, getActiveSession, getAllActiveSessions, getAutofillData, getStashedSessions, getSubmissions, saveAutofillData, saveSession, saveSubmission, } from "./storage";
14
+ export { buildFormExtractorPromptSection, buildFormExtractorSchema, coerceExtractionsAgainstControls, detectCorrection, extractSingleField, parseFormExtractorOutput, } from "./extraction";
15
+ export { calculateTTL, formatEffort, formatTimeRemaining, isExpired, isExpiringSoon, shouldConfirmCancel, shouldNudge, } from "./ttl";
16
+ export { applyControlDefaults, applyFormDefaults, prettify } from "./defaults";
17
+ export { C, ControlBuilder, Form, FormBuilder } from "./builder";
18
+ export { FormService } from "./service";
19
+ export { formRestoreAction } from "./actions/restore";
20
+ export { formEvaluator } from "./evaluators/extractor";
21
+ export { formContextProvider } from "./providers/context";
22
+ /**
23
+ * Form Plugin
24
+ *
25
+ * Infrastructure plugin for collecting structured data through natural conversation.
26
+ */
27
+ export declare const formPlugin: Plugin & {
28
+ descriptionCompressed?: string;
29
+ };
30
+ export default formPlugin;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEV,MAAM,EAEP,MAAM,eAAe,CAAC;AAGvB,cAAc,SAAS,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,aAAa,EACb,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,WAAW,GACZ,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/E,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,UAAU,EA4ClB,MAAM,GAAG;IAAE,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,eAAe,UAAU,CAAC"}