@cossistant/types 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/api/ai-agent-capabilities.d.ts +16 -19
  2. package/api/ai-agent-capabilities.d.ts.map +1 -1
  3. package/api/ai-agent-capabilities.js +215 -286
  4. package/api/ai-agent-capabilities.js.map +1 -1
  5. package/api/ai-agent-defaults.d.ts +6 -0
  6. package/api/ai-agent-defaults.d.ts.map +1 -0
  7. package/api/ai-agent-defaults.js +33 -0
  8. package/api/ai-agent-defaults.js.map +1 -0
  9. package/api/ai-agent.d.ts +311 -204
  10. package/api/ai-agent.d.ts.map +1 -1
  11. package/api/ai-agent.js +175 -111
  12. package/api/ai-agent.js.map +1 -1
  13. package/api/conversation.d.ts +29 -6
  14. package/api/conversation.d.ts.map +1 -1
  15. package/api/conversation.js +7 -2
  16. package/api/conversation.js.map +1 -1
  17. package/api/feedback.d.ts +5 -0
  18. package/api/feedback.d.ts.map +1 -1
  19. package/api/feedback.js +2 -0
  20. package/api/feedback.js.map +1 -1
  21. package/api/index.d.ts +7 -6
  22. package/api/index.js +7 -6
  23. package/api/knowledge.d.ts.map +1 -1
  24. package/api/link-source.d.ts +4 -4
  25. package/api/link-source.d.ts.map +1 -1
  26. package/api/link-source.js +1 -1
  27. package/api/link-source.js.map +1 -1
  28. package/api/timeline-item.d.ts +18 -6
  29. package/api/timeline-item.d.ts.map +1 -1
  30. package/api/timeline-item.js +3 -1
  31. package/api/timeline-item.js.map +1 -1
  32. package/api/user.d.ts +1 -1
  33. package/api/user.d.ts.map +1 -1
  34. package/api/user.js +2 -2
  35. package/api/user.js.map +1 -1
  36. package/api/visitor.d.ts +225 -1
  37. package/api/visitor.d.ts.map +1 -1
  38. package/api/visitor.js +142 -1
  39. package/api/visitor.js.map +1 -1
  40. package/api/website.d.ts +12 -3
  41. package/api/website.d.ts.map +1 -1
  42. package/api/website.js +16 -2
  43. package/api/website.js.map +1 -1
  44. package/enums.d.ts +2 -0
  45. package/enums.d.ts.map +1 -1
  46. package/enums.js +3 -1
  47. package/enums.js.map +1 -1
  48. package/index.d.ts +9 -8
  49. package/index.d.ts.map +1 -1
  50. package/index.js +9 -8
  51. package/package.json +1 -1
  52. package/realtime-events.d.ts +74 -4
  53. package/realtime-events.d.ts.map +1 -1
  54. package/realtime-events.js +6 -2
  55. package/realtime-events.js.map +1 -1
  56. package/schemas.d.ts +3 -1
  57. package/schemas.d.ts.map +1 -1
  58. package/tool-timeline-policy.d.ts +19 -2
  59. package/tool-timeline-policy.d.ts.map +1 -1
  60. package/tool-timeline-policy.js +29 -6
  61. package/tool-timeline-policy.js.map +1 -1
  62. package/trpc/conversation-hard-limit.d.ts +30 -0
  63. package/trpc/conversation-hard-limit.d.ts.map +1 -0
  64. package/trpc/conversation-hard-limit.js +43 -0
  65. package/trpc/conversation-hard-limit.js.map +1 -0
  66. package/trpc/conversation.d.ts +44 -4
  67. package/trpc/conversation.d.ts.map +1 -1
  68. package/trpc/conversation.js +6 -0
  69. package/trpc/conversation.js.map +1 -1
  70. package/trpc/visitor.d.ts +73 -15
  71. package/trpc/visitor.d.ts.map +1 -1
  72. package/trpc/visitor.js +15 -8
  73. package/trpc/visitor.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-capabilities.js","names":["AI_AGENT_TOOL_CATALOG: readonly AiAgentToolCatalogEntry[]","AI_AGENT_DEFAULT_SKILL_TEMPLATES: readonly AiAgentDefaultSkillTemplateEntry[]","AI_AGENT_SYSTEM_SKILL_METADATA: readonly AiAgentSystemSkillMetadataEntry[]"],"sources":["../../src/api/ai-agent-capabilities.ts"],"sourcesContent":["import {\n\tserializeSkillFileContent,\n\tstripSkillMarkdownExtension,\n} from \"../skill-file-format\";\n\nexport const AI_AGENT_TOOL_CATEGORIES = [\n\t\"system\",\n\t\"messaging\",\n\t\"action\",\n\t\"context\",\n\t\"analysis\",\n] as const;\n\nexport type AiAgentToolCategory = (typeof AI_AGENT_TOOL_CATEGORIES)[number];\n\nexport const AI_AGENT_TOOL_IDS = [\n\t\"searchKnowledgeBase\",\n\t\"identifyVisitor\",\n\t\"updateConversationTitle\",\n\t\"updateSentiment\",\n\t\"setPriority\",\n\t\"sendMessage\",\n\t\"sendPrivateMessage\",\n\t\"respond\",\n\t\"escalate\",\n\t\"resolve\",\n\t\"markSpam\",\n\t\"skip\",\n] as const;\n\nexport type AiAgentToolId = (typeof AI_AGENT_TOOL_IDS)[number];\n\nexport const AI_AGENT_BEHAVIOR_SETTING_KEYS = [\n\t\"canResolve\",\n\t\"canMarkSpam\",\n\t\"canSetPriority\",\n\t\"canEscalate\",\n\t\"autoGenerateTitle\",\n\t\"autoAnalyzeSentiment\",\n] as const;\n\nexport type AiAgentBehaviorSettingKey =\n\t(typeof AI_AGENT_BEHAVIOR_SETTING_KEYS)[number];\n\nexport type AiAgentToolCatalogEntry = {\n\tid: AiAgentToolId;\n\tlabel: string;\n\tdescription: string;\n\tcategory: AiAgentToolCategory;\n\tisSystem: boolean;\n\tisRequired: boolean;\n\tisToggleable: boolean;\n\tbehaviorSettingKey: AiAgentBehaviorSettingKey | null;\n\tdefaultTemplateNames: string[];\n};\n\nexport const AI_AGENT_TOOL_CATALOG: readonly AiAgentToolCatalogEntry[] = [\n\t{\n\t\tid: \"searchKnowledgeBase\",\n\t\tlabel: \"Search Knowledge Base\",\n\t\tdescription:\n\t\t\t\"Looks up product or policy facts in your trained knowledge before answering.\",\n\t\tcategory: \"context\",\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultTemplateNames: [\"deep-research.md\", \"grounded-answers.md\"],\n\t},\n\t{\n\t\tid: \"identifyVisitor\",\n\t\tlabel: \"Identify Visitor\",\n\t\tdescription:\n\t\t\t\"Links visitor details to a contact record when name and email are collected.\",\n\t\tcategory: \"context\",\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultTemplateNames: [\"visitor-identification.md\"],\n\t},\n\t{\n\t\tid: \"updateConversationTitle\",\n\t\tlabel: \"Update Conversation Title\",\n\t\tdescription:\n\t\t\t\"Sets or refreshes the conversation title once the topic is clear.\",\n\t\tcategory: \"analysis\",\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"autoGenerateTitle\",\n\t\tdefaultTemplateNames: [\"title-hygiene.md\"],\n\t},\n\t{\n\t\tid: \"updateSentiment\",\n\t\tlabel: \"Update Sentiment\",\n\t\tdescription:\n\t\t\t\"Tracks tone shifts and keeps conversation sentiment metadata up to date.\",\n\t\tcategory: \"analysis\",\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"autoAnalyzeSentiment\",\n\t\tdefaultTemplateNames: [\"sentiment-tracking.md\"],\n\t},\n\t{\n\t\tid: \"setPriority\",\n\t\tlabel: \"Set Priority\",\n\t\tdescription:\n\t\t\t\"Adjusts urgency level for critical issues so teams can triage quickly.\",\n\t\tcategory: \"analysis\",\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canSetPriority\",\n\t\tdefaultTemplateNames: [\"priority-triage.md\"],\n\t},\n\t{\n\t\tid: \"sendMessage\",\n\t\tlabel: \"Send Public Message\",\n\t\tdescription: \"Sends a visible reply to the visitor.\",\n\t\tcategory: \"messaging\",\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultTemplateNames: [\"tone-and-voice.md\", \"short-clear-replies.md\"],\n\t},\n\t{\n\t\tid: \"sendPrivateMessage\",\n\t\tlabel: \"Send Private Note\",\n\t\tdescription:\n\t\t\t\"Adds internal-only notes for teammates that visitors cannot see.\",\n\t\tcategory: \"messaging\",\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultTemplateNames: [\"handoff-notes.md\"],\n\t},\n\t{\n\t\tid: \"respond\",\n\t\tlabel: \"Finish: Respond\",\n\t\tdescription: \"Marks turn complete after responding to the visitor.\",\n\t\tcategory: \"action\",\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultTemplateNames: [\"reply-or-stay-silent.md\"],\n\t},\n\t{\n\t\tid: \"escalate\",\n\t\tlabel: \"Finish: Escalate\",\n\t\tdescription: \"Hands off the conversation to a human agent when needed.\",\n\t\tcategory: \"action\",\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canEscalate\",\n\t\tdefaultTemplateNames: [\"escalation-playbook.md\"],\n\t},\n\t{\n\t\tid: \"resolve\",\n\t\tlabel: \"Finish: Resolve\",\n\t\tdescription: \"Marks the conversation as resolved when it is fully handled.\",\n\t\tcategory: \"action\",\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canResolve\",\n\t\tdefaultTemplateNames: [\"resolution-checklist.md\"],\n\t},\n\t{\n\t\tid: \"markSpam\",\n\t\tlabel: \"Finish: Mark Spam\",\n\t\tdescription: \"Flags obvious spam or abuse and closes the conversation.\",\n\t\tcategory: \"action\",\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canMarkSpam\",\n\t\tdefaultTemplateNames: [\"spam-detection.md\"],\n\t},\n\t{\n\t\tid: \"skip\",\n\t\tlabel: \"Finish: Skip\",\n\t\tdescription:\n\t\t\t\"Intentionally stays silent when no response is needed from AI.\",\n\t\tcategory: \"action\",\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultTemplateNames: [\"reply-or-stay-silent.md\"],\n\t},\n] as const;\n\nconst AI_AGENT_DEFAULT_SKILL_TEMPLATE_DEFINITIONS = [\n\t{\n\t\tname: \"reply-or-stay-silent.md\",\n\t\tlabel: \"Reply Or Stay Silent\",\n\t\tdescription:\n\t\t\t\"Defines when the AI should answer and when it should intentionally stay silent.\",\n\t\tcontent: `## Reply Decision\n\n- Reply when the visitor still needs a clear, concrete answer.\n- Stay silent when a human already answered well or when the message is only acknowledgement.\n- If unsure whether to reply, prefer one short helpful message over multiple partial replies.\n\n## Tool Notes\n\n- Use [@Send Public Message](mention:tool:sendMessage) only when a reply adds value.\n- Finish with [@Finish: Respond](mention:tool:respond) after replying.\n- Use [@Finish: Skip](mention:tool:skip) when no reply is required.`,\n\t\tsuggestedToolIds: [\"sendMessage\", \"respond\", \"skip\"] as const,\n\t},\n\t{\n\t\tname: \"tone-and-voice.md\",\n\t\tlabel: \"Tone And Voice\",\n\t\tdescription:\n\t\t\t\"Keeps replies concise, empathetic, and aligned with a support tone.\",\n\t\tcontent: `## Tone\n\n- Be concise, direct, and calm.\n- Prefer plain language over jargon.\n- Keep messages to 1-2 short sentences when possible.\n\n## Empathy\n\n- Acknowledge frustration without over-apologizing.\n- Focus on the next useful action.\n\n## Tool Notes\n\n- Send customer-visible text through [@Send Public Message](mention:tool:sendMessage).`,\n\t\tsuggestedToolIds: [\"sendMessage\"] as const,\n\t},\n\t{\n\t\tname: \"short-clear-replies.md\",\n\t\tlabel: \"Short Clear Replies\",\n\t\tdescription: \"Enforces short, structured customer-facing responses.\",\n\t\tcontent: `## Message Shape\n\n- First sentence: direct answer.\n- Optional second sentence: next step or clarifying question.\n- Avoid multi-paragraph replies unless the question is complex.\n\n## Tool Notes\n\n- Send the final customer reply with [@Send Public Message](mention:tool:sendMessage).`,\n\t\tsuggestedToolIds: [\"sendMessage\"] as const,\n\t},\n\t{\n\t\tname: \"deep-research.md\",\n\t\tlabel: \"Deep Research\",\n\t\tdescription:\n\t\t\t\"Guides multi-pass retrieval before giving factual or policy answers.\",\n\t\tcontent: `## Research Workflow\n\n- For factual/product/policy questions, search before answering.\n- Start with a short focused query, then broaden if needed.\n- Use at least one follow-up search if confidence is low.\n\n## Tool Notes\n\n- Use [@Search Knowledge Base](mention:tool:searchKnowledgeBase) for retrieval.\n- Only send final claims after grounding them in retrieved context.`,\n\t\tsuggestedToolIds: [\"searchKnowledgeBase\"] as const,\n\t},\n\t{\n\t\tname: \"grounded-answers.md\",\n\t\tlabel: \"Grounded Answers\",\n\t\tdescription:\n\t\t\t\"Prevents hallucinations and enforces transparent uncertainty.\",\n\t\tcontent: `## Grounding Rules\n\n- Do not invent product, policy, or pricing details.\n- If information is missing, say so clearly and offer escalation.\n- Prefer partial certainty over confident guessing.\n\n## Tool Notes\n\n- Validate facts with [@Search Knowledge Base](mention:tool:searchKnowledgeBase).\n- If unsupported, use [@Finish: Escalate](mention:tool:escalate) when available.`,\n\t\tsuggestedToolIds: [\"searchKnowledgeBase\", \"escalate\"] as const,\n\t},\n\t{\n\t\tname: \"visitor-identification.md\",\n\t\tlabel: \"Visitor Identification\",\n\t\tdescription:\n\t\t\t\"Controls when and how to request name/email and identify the visitor.\",\n\t\tcontent: `## Identification Policy\n\n- Ask for name and email only when needed for account-specific help.\n- Validate that the name field contains a name and email field contains an email.\n- Update details if the visitor corrects their information.\n\n## Tool Notes\n\n- Link identity with [@Identify Visitor](mention:tool:identifyVisitor).`,\n\t\tsuggestedToolIds: [\"identifyVisitor\"] as const,\n\t},\n\t{\n\t\tname: \"escalation-playbook.md\",\n\t\tlabel: \"Escalation Playbook\",\n\t\tdescription:\n\t\t\t\"Defines when escalation is mandatory and what to include in handoff.\",\n\t\tcontent: `## Escalate When\n\n- The visitor asks for a human.\n- You cannot find reliable information.\n- Legal, compliance, billing, or high-risk judgment is required.\n\n## Handoff Quality\n\n- Tell the visitor what happens next.\n- Leave concise internal context for teammates.\n\n## Tool Notes\n\n- Notify visitor with [@Send Public Message](mention:tool:sendMessage).\n- Add handoff context via [@Send Private Note](mention:tool:sendPrivateMessage).\n- Finish with [@Finish: Escalate](mention:tool:escalate).`,\n\t\tsuggestedToolIds: [\n\t\t\t\"sendMessage\",\n\t\t\t\"sendPrivateMessage\",\n\t\t\t\"escalate\",\n\t\t] as const,\n\t},\n\t{\n\t\tname: \"resolution-checklist.md\",\n\t\tlabel: \"Resolution Checklist\",\n\t\tdescription:\n\t\t\t\"Ensures conversations are only resolved after clear completion criteria.\",\n\t\tcontent: `## Resolve Criteria\n\n- The visitor's request is fully addressed.\n- No unresolved dependency remains.\n- The final response includes a clear closure.\n\n## Tool Notes\n\n- Send closure text with [@Send Public Message](mention:tool:sendMessage).\n- Finish with [@Finish: Resolve](mention:tool:resolve).`,\n\t\tsuggestedToolIds: [\"sendMessage\", \"resolve\"] as const,\n\t},\n\t{\n\t\tname: \"spam-detection.md\",\n\t\tlabel: \"Spam Detection\",\n\t\tdescription: \"Sets strict criteria for spam classification.\",\n\t\tcontent: `## Spam Heuristics\n\n- Mark as spam only for obvious bot, phishing, or abusive noise.\n- Do not mark difficult but valid customer requests as spam.\n\n## Tool Notes\n\n- Use [@Finish: Mark Spam](mention:tool:markSpam) only when highly confident.`,\n\t\tsuggestedToolIds: [\"markSpam\"] as const,\n\t},\n\t{\n\t\tname: \"priority-triage.md\",\n\t\tlabel: \"Priority Triage\",\n\t\tdescription: \"Standardizes urgency assignment for incoming issues.\",\n\t\tcontent: `## Priority Rules\n\n- Urgent: outages, security incidents, severe business impact.\n- High: blocked workflow with no workaround.\n- Normal: standard product support requests.\n- Low: informational or minor questions.\n\n## Tool Notes\n\n- Set urgency with [@Set Priority](mention:tool:setPriority).`,\n\t\tsuggestedToolIds: [\"setPriority\"] as const,\n\t},\n\t{\n\t\tname: \"sentiment-tracking.md\",\n\t\tlabel: \"Sentiment Tracking\",\n\t\tdescription: \"Encourages sentiment updates when tone changes.\",\n\t\tcontent: `## Sentiment Updates\n\n- Update sentiment when tone shifts meaningfully.\n- Keep reason short and factual.\n- Avoid over-updating on minor wording changes.\n\n## Tool Notes\n\n- Record tone with [@Update Sentiment](mention:tool:updateSentiment).`,\n\t\tsuggestedToolIds: [\"updateSentiment\"] as const,\n\t},\n\t{\n\t\tname: \"title-hygiene.md\",\n\t\tlabel: \"Title Hygiene\",\n\t\tdescription: \"Keeps conversation titles clear and actionable.\",\n\t\tcontent: `## Title Standards\n\n- Keep titles short and specific.\n- Reflect the primary issue, not generic phrases.\n- Update title if topic changes significantly.\n\n## Tool Notes\n\n- Use [@Update Conversation Title](mention:tool:updateConversationTitle).`,\n\t\tsuggestedToolIds: [\"updateConversationTitle\"] as const,\n\t},\n\t{\n\t\tname: \"handoff-notes.md\",\n\t\tlabel: \"Handoff Notes\",\n\t\tdescription: \"Improves private notes shared with human teammates.\",\n\t\tcontent: `## Private Note Checklist\n\n- Include issue summary, key facts, and what was already tried.\n- Add urgency and expected next action.\n- Keep notes scannable and concise.\n\n## Tool Notes\n\n- Send internal details with [@Send Private Note](mention:tool:sendPrivateMessage).`,\n\t\tsuggestedToolIds: [\"sendPrivateMessage\"] as const,\n\t},\n] as const;\n\ntype AiAgentDefaultSkillTemplateEntry = {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\tcontent: string;\n\tsuggestedToolIds: readonly AiAgentToolId[];\n};\n\nexport const AI_AGENT_DEFAULT_SKILL_TEMPLATES: readonly AiAgentDefaultSkillTemplateEntry[] =\n\tAI_AGENT_DEFAULT_SKILL_TEMPLATE_DEFINITIONS.map((template) => ({\n\t\t...template,\n\t\tcontent: serializeSkillFileContent({\n\t\t\tname: stripSkillMarkdownExtension(template.name),\n\t\t\tdescription: template.description,\n\t\t\tbody: template.content,\n\t\t}),\n\t}));\n\nexport type AiAgentDefaultSkillTemplate =\n\t(typeof AI_AGENT_DEFAULT_SKILL_TEMPLATES)[number];\n\nexport type AiAgentSystemSkillMetadataEntry = {\n\tname:\n\t\t| \"agent.md\"\n\t\t| \"security.md\"\n\t\t| \"behaviour.md\"\n\t\t| \"participation.md\"\n\t\t| \"grounding.md\"\n\t\t| \"capabilities.md\";\n\tlabel: string;\n\tdescription: string;\n};\n\nexport const AI_AGENT_SYSTEM_SKILL_METADATA: readonly AiAgentSystemSkillMetadataEntry[] =\n\t[\n\t\t{\n\t\t\tname: \"agent.md\",\n\t\t\tlabel: \"Agent Identity\",\n\t\t\tdescription: \"Core role, persona, and mission of the assistant.\",\n\t\t},\n\t\t{\n\t\t\tname: \"security.md\",\n\t\t\tlabel: \"Security Guardrails\",\n\t\t\tdescription:\n\t\t\t\t\"Critical safety and confidentiality rules that should stay strict.\",\n\t\t},\n\t\t{\n\t\t\tname: \"behaviour.md\",\n\t\t\tlabel: \"Behavior Policy\",\n\t\t\tdescription: \"Runtime behavior and mode-specific operating guidance.\",\n\t\t},\n\t\t{\n\t\t\tname: \"participation.md\",\n\t\t\tlabel: \"Participation Policy\",\n\t\t\tdescription:\n\t\t\t\t\"Rules for when AI should participate versus intentionally stay silent.\",\n\t\t},\n\t\t{\n\t\t\tname: \"grounding.md\",\n\t\t\tlabel: \"Grounding Policy\",\n\t\t\tdescription:\n\t\t\t\t\"Instructions for factual grounding and knowledge retrieval discipline.\",\n\t\t},\n\t\t{\n\t\t\tname: \"capabilities.md\",\n\t\t\tlabel: \"Capabilities Contract\",\n\t\t\tdescription:\n\t\t\t\t\"Capability boundaries and references to optional behavior skills.\",\n\t\t},\n\t];\n"],"mappings":"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"}
1
+ {"version":3,"file":"ai-agent-capabilities.js","names":["AI_AGENT_TOOL_CATALOG_RAW: readonly RawToolCatalogEntry[]","AI_AGENT_TOOL_CATALOG: readonly AiAgentToolCatalogEntry[]"],"sources":["../../src/api/ai-agent-capabilities.ts"],"sourcesContent":["import {\n\tserializeSkillFileContent,\n\tstripSkillMarkdownExtension,\n} from \"../skill-file-format\";\n\nexport const AI_AGENT_TOOL_CATEGORIES = [\n\t\"system\",\n\t\"messaging\",\n\t\"action\",\n\t\"context\",\n\t\"analysis\",\n] as const;\n\nexport type AiAgentToolCategory = (typeof AI_AGENT_TOOL_CATEGORIES)[number];\n\nexport const AI_AGENT_TOOL_GROUPS = [\"behavior\", \"actions\"] as const;\nexport type AiAgentToolGroup = (typeof AI_AGENT_TOOL_GROUPS)[number];\n\nexport const AI_AGENT_TOOL_IDS = [\n\t\"searchKnowledgeBase\",\n\t\"identifyVisitor\",\n\t\"updateConversationTitle\",\n\t\"updateSentiment\",\n\t\"setPriority\",\n\t\"categorizeConversation\",\n\t\"sendMessage\",\n\t\"sendPrivateMessage\",\n\t\"respond\",\n\t\"escalate\",\n\t\"resolve\",\n\t\"markSpam\",\n\t\"skip\",\n] as const;\n\nexport type AiAgentToolId = (typeof AI_AGENT_TOOL_IDS)[number];\n\nexport const AI_AGENT_BEHAVIOR_SETTING_KEYS = [\n\t\"canResolve\",\n\t\"canMarkSpam\",\n\t\"canSetPriority\",\n\t\"canEscalate\",\n\t\"autoCategorize\",\n\t\"autoGenerateTitle\",\n\t\"autoAnalyzeSentiment\",\n] as const;\n\nexport type AiAgentBehaviorSettingKey =\n\t(typeof AI_AGENT_BEHAVIOR_SETTING_KEYS)[number];\n\nexport type AiAgentToolDefaultSkill = {\n\tname: string;\n\tlabel: string;\n\tdescription: string;\n\tcontent: string;\n};\n\nexport type AiAgentToolCatalogEntry = {\n\tid: AiAgentToolId;\n\tlabel: string;\n\tdescription: string;\n\tcategory: AiAgentToolCategory;\n\tgroup: AiAgentToolGroup;\n\torder: number;\n\tisSystem: boolean;\n\tisRequired: boolean;\n\tisToggleable: boolean;\n\tbehaviorSettingKey: AiAgentBehaviorSettingKey | null;\n\tdefaultSkill: AiAgentToolDefaultSkill;\n};\n\ntype RawToolCatalogEntry = Omit<AiAgentToolCatalogEntry, \"defaultSkill\"> & {\n\tdefaultSkill: Omit<AiAgentToolDefaultSkill, \"content\"> & {\n\t\tcontent: string;\n\t};\n};\n\nconst AI_AGENT_TOOL_CATALOG_RAW: readonly RawToolCatalogEntry[] = [\n\t{\n\t\tid: \"searchKnowledgeBase\",\n\t\tlabel: \"Search Knowledge Base\",\n\t\tdescription: \"Retrieve relevant knowledge snippets by keyword query.\",\n\t\tcategory: \"context\",\n\t\tgroup: \"behavior\",\n\t\torder: 1,\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultSkill: {\n\t\t\tname: \"search-knowledge-base.md\",\n\t\t\tlabel: \"Search Knowledge Base\",\n\t\t\tdescription: \"Keyword query patterns and result interpretation.\",\n\t\t\tcontent: `## Query Tactics\n\n- Use short keyword queries (2-6 words).\n- Retry with synonyms when results are weak.\n- Prefer specific product/feature terms over full sentences.\n\n## Result Use\n\n- Prioritize high-similarity results that directly answer the request.\n- Use title/source metadata when it clarifies confidence.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"identifyVisitor\",\n\t\tlabel: \"Identify Visitor\",\n\t\tdescription: \"Attach visitor name/email to the conversation record.\",\n\t\tcategory: \"context\",\n\t\tgroup: \"behavior\",\n\t\torder: 2,\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultSkill: {\n\t\t\tname: \"identify-visitor.md\",\n\t\t\tlabel: \"Identify Visitor\",\n\t\t\tdescription: \"Input hygiene for profile linking.\",\n\t\t\tcontent: `## Input Hygiene\n\n- Pass clean name/email values without extra text.\n- Use the latest visitor-provided values if they correct earlier info.\n- Avoid duplicate calls when identity is already up to date.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"updateConversationTitle\",\n\t\tlabel: \"Update Conversation Title\",\n\t\tdescription: \"Set a concise title for the conversation topic.\",\n\t\tcategory: \"analysis\",\n\t\tgroup: \"behavior\",\n\t\torder: 3,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"autoGenerateTitle\",\n\t\tdefaultSkill: {\n\t\t\tname: \"update-conversation-title.md\",\n\t\t\tlabel: \"Update Conversation Title\",\n\t\t\tdescription: \"Title formatting conventions.\",\n\t\t\tcontent: `## Title Formatting\n\n- Keep titles short and issue-focused.\n- Use concrete nouns (feature, error, account area).\n- Update only when the conversation topic is clear and stable across recent messages.\n- Skip vague, transitional, or generic titles.\n- Do not replace a title unless the newer title is meaningfully better.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"updateSentiment\",\n\t\tlabel: \"Update Sentiment\",\n\t\tdescription:\n\t\t\t\"Record meaningful sentiment changes for conversation analytics.\",\n\t\tcategory: \"analysis\",\n\t\tgroup: \"behavior\",\n\t\torder: 4,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"autoAnalyzeSentiment\",\n\t\tdefaultSkill: {\n\t\t\tname: \"update-sentiment.md\",\n\t\t\tlabel: \"Update Sentiment\",\n\t\t\tdescription: \"When sentiment updates add signal.\",\n\t\t\tcontent: `## Sentiment Updates\n\n- Update only for clear tone shifts.\n- Keep rationale short and evidence-based.\n- Skip minor wording changes with no practical impact.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"setPriority\",\n\t\tlabel: \"Set Priority\",\n\t\tdescription: \"Set operational urgency for the conversation.\",\n\t\tcategory: \"analysis\",\n\t\tgroup: \"behavior\",\n\t\torder: 5,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canSetPriority\",\n\t\tdefaultSkill: {\n\t\t\tname: \"set-priority.md\",\n\t\t\tlabel: \"Set Priority\",\n\t\t\tdescription: \"Priority mapping by impact and urgency.\",\n\t\t\tcontent: `## Priority Mapping\n\n- Urgent: outage, security, or severe business impact.\n- High: blocked workflow with no practical workaround.\n- Normal: standard support work.\n- Low: informational, non-blocking requests.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"categorizeConversation\",\n\t\tlabel: \"Categorize Conversation\",\n\t\tdescription: \"Add the conversation to one matching saved view.\",\n\t\tcategory: \"analysis\",\n\t\tgroup: \"behavior\",\n\t\torder: 6,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"autoCategorize\",\n\t\tdefaultSkill: {\n\t\t\tname: \"categorize-conversation.md\",\n\t\t\tlabel: \"Categorize Conversation\",\n\t\t\tdescription: \"How to choose the best matching saved view.\",\n\t\t\tcontent: `## Categorization Rules\n\n- Use only one saved view when the match is clear.\n- Match the conversation to the closest existing view prompt and description.\n- Skip when no view clearly fits.\n- Prefer stable themes over one-off phrases from a single message.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"sendMessage\",\n\t\tlabel: \"Send Chat Message\",\n\t\tdescription:\n\t\t\t\"Send one short customer-visible chat message. Use up to 3 when shorter bubbles read better.\",\n\t\tcategory: \"messaging\",\n\t\tgroup: \"behavior\",\n\t\torder: 7,\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultSkill: {\n\t\t\tname: \"send-message.md\",\n\t\t\tlabel: \"Send Chat Message\",\n\t\t\tdescription: \"Short chat-bubble reply rules.\",\n\t\t\tcontent: `## Role\n\n- Use this for every visitor-facing reply.\n- Prefer short chat bubbles over one dense block of text.\n- Use 2 or 3 separate calls when splitting improves readability.\n- Do not exceed 3 public chat messages in one run.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"sendPrivateMessage\",\n\t\tlabel: \"Send Private Note\",\n\t\tdescription: \"Send internal notes to teammates that visitors cannot see.\",\n\t\tcategory: \"messaging\",\n\t\tgroup: \"behavior\",\n\t\torder: 8,\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultSkill: {\n\t\t\tname: \"send-private-message.md\",\n\t\t\tlabel: \"Send Private Note\",\n\t\t\tdescription: \"Internal-note structure for handoff quality.\",\n\t\t\tcontent: `## Internal Note Structure\n\n- Include issue summary, key facts, and actions already attempted.\n- Keep notes scannable for fast teammate handoff.\n- Use internal operational tone (not customer-facing copy).`,\n\t\t},\n\t},\n\t{\n\t\tid: \"respond\",\n\t\tlabel: \"Finish: Respond\",\n\t\tdescription: \"Finish the run after sending a complete public response.\",\n\t\tcategory: \"action\",\n\t\tgroup: \"actions\",\n\t\torder: 1,\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultSkill: {\n\t\t\tname: \"respond.md\",\n\t\t\tlabel: \"Finish Respond\",\n\t\t\tdescription: \"When to select the respond finish action.\",\n\t\t\tcontent: `## Finish Semantics\n\n- Choose this when the turn is complete and no escalation/closure state change is required.\n- Use this as the terminal action for normal reply flows.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"escalate\",\n\t\tlabel: \"Finish: Escalate\",\n\t\tdescription: \"Escalate to a human when AI should not complete the request.\",\n\t\tcategory: \"action\",\n\t\tgroup: \"actions\",\n\t\torder: 2,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canEscalate\",\n\t\tdefaultSkill: {\n\t\t\tname: \"escalate.md\",\n\t\t\tlabel: \"Finish Escalate\",\n\t\t\tdescription: \"When to select the escalate finish action.\",\n\t\t\tcontent: `## Finish Semantics\n\n- Choose this when human intervention is required.\n- Include a clear escalation reason payload for teammate routing.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"resolve\",\n\t\tlabel: \"Finish: Resolve\",\n\t\tdescription: \"Mark conversation resolved once the issue is fully handled.\",\n\t\tcategory: \"action\",\n\t\tgroup: \"actions\",\n\t\torder: 3,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canResolve\",\n\t\tdefaultSkill: {\n\t\t\tname: \"resolve.md\",\n\t\t\tlabel: \"Finish Resolve\",\n\t\t\tdescription: \"When to select the resolve finish action.\",\n\t\t\tcontent: `## Finish Semantics\n\n- Choose this when the issue is closed and the conversation can be marked resolved.\n- Use resolution-oriented reasoning in the payload.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"markSpam\",\n\t\tlabel: \"Finish: Mark Spam\",\n\t\tdescription: \"Mark obvious abuse/spam and close quickly.\",\n\t\tcategory: \"action\",\n\t\tgroup: \"actions\",\n\t\torder: 4,\n\t\tisSystem: false,\n\t\tisRequired: false,\n\t\tisToggleable: true,\n\t\tbehaviorSettingKey: \"canMarkSpam\",\n\t\tdefaultSkill: {\n\t\t\tname: \"mark-spam.md\",\n\t\t\tlabel: \"Finish Mark Spam\",\n\t\t\tdescription: \"When to select the spam finish action.\",\n\t\t\tcontent: `## Finish Semantics\n\n- Choose this for clear spam/abuse/bot traffic.\n- Capture concise evidence in reasoning for auditability.`,\n\t\t},\n\t},\n\t{\n\t\tid: \"skip\",\n\t\tlabel: \"Finish: Skip\",\n\t\tdescription: \"Finish without a public response when silence is better.\",\n\t\tcategory: \"action\",\n\t\tgroup: \"actions\",\n\t\torder: 5,\n\t\tisSystem: true,\n\t\tisRequired: true,\n\t\tisToggleable: false,\n\t\tbehaviorSettingKey: null,\n\t\tdefaultSkill: {\n\t\t\tname: \"skip.md\",\n\t\t\tlabel: \"Finish Skip\",\n\t\t\tdescription: \"When to select the skip finish action.\",\n\t\t\tcontent: `## Finish Semantics\n\n- Choose this when no additional assistant output is needed for this run.\n- Use reasoning that explains why silence is intentional.`,\n\t\t},\n\t},\n] as const;\n\nexport const AI_AGENT_TOOL_CATALOG: readonly AiAgentToolCatalogEntry[] =\n\tAI_AGENT_TOOL_CATALOG_RAW.map((tool) => ({\n\t\t...tool,\n\t\tdefaultSkill: {\n\t\t\t...tool.defaultSkill,\n\t\t\tcontent: serializeSkillFileContent({\n\t\t\t\tname: stripSkillMarkdownExtension(tool.defaultSkill.name),\n\t\t\t\tdescription: tool.defaultSkill.description,\n\t\t\t\tbody: tool.defaultSkill.content,\n\t\t\t}),\n\t\t},\n\t}));\n\nexport const AI_AGENT_RESERVED_TOOL_SKILL_TEMPLATE_NAMES = [\n\t...new Set(AI_AGENT_TOOL_CATALOG.map((tool) => tool.defaultSkill.name)),\n] as const;\n\nexport const AI_AGENT_DROPPED_SKILL_TEMPLATE_NAMES = [\n\t\"reply-or-stay-silent.md\",\n\t\"send-message-behavior.md\",\n\t\"deep-research.md\",\n\t\"grounded-answers.md\",\n\t\"visitor-identification.md\",\n\t\"escalation-playbook.md\",\n\t\"resolution-checklist.md\",\n\t\"spam-detection.md\",\n\t\"priority-triage.md\",\n\t\"sentiment-tracking.md\",\n\t\"title-hygiene.md\",\n\t\"handoff-notes.md\",\n\t\"tone-and-voice.md\",\n\t\"short-clear-replies.md\",\n\t\"wait.md\",\n] as const;\n"],"mappings":";;;AAKA,MAAa,2BAA2B;CACvC;CACA;CACA;CACA;CACA;CACA;AAID,MAAa,uBAAuB,CAAC,YAAY,UAAU;AAG3D,MAAa,oBAAoB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAID,MAAa,iCAAiC;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAgCD,MAAMA,4BAA4D;CACjE;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;;;;;;GAUT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;GAKT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;;;GAOT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aACC;EACD,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;GAKT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;;GAMT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;;GAMT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aACC;EACD,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;;GAMT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;;GAKT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;GAIT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;GAIT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;GAIT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;GAIT;EACD;CACD;EACC,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,cAAc;GACb,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;;;GAIT;EACD;CACD;AAED,MAAaC,wBACZ,0BAA0B,KAAK,UAAU;CACxC,GAAG;CACH,cAAc;EACb,GAAG,KAAK;EACR,SAAS,0BAA0B;GAClC,MAAM,4BAA4B,KAAK,aAAa,KAAK;GACzD,aAAa,KAAK,aAAa;GAC/B,MAAM,KAAK,aAAa;GACxB,CAAC;EACF;CACD,EAAE;AAEJ,MAAa,8CAA8C,CAC1D,GAAG,IAAI,IAAI,sBAAsB,KAAK,SAAS,KAAK,aAAa,KAAK,CAAC,CACvE;AAED,MAAa,wCAAwC;CACpD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
@@ -0,0 +1,6 @@
1
+ //#region src/api/ai-agent-defaults.d.ts
2
+ declare const DEFAULT_AGENT_BASE_PROMPT = "You are a support assistant. Your job is to solve visitor requests quickly and clearly.\n\n## How to Assist\n- Answer clearly and concisely\n- Focus on what the visitor needs next\n- Ask one clarifying question when required\n- Keep tone human and professional\n\n## Boundaries\n- Use only available knowledge. If you are unsure, say so and offer human help.\n- Stay on support-relevant topics.\n- Never reference your training data, knowledge sources, or how you were built.\n- Do not add filler or overlong replies.";
3
+ declare function createDefaultPromptWithCompany(companyName: string): string;
4
+ //#endregion
5
+ export { DEFAULT_AGENT_BASE_PROMPT, createDefaultPromptWithCompany };
6
+ //# sourceMappingURL=ai-agent-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-agent-defaults.d.ts","names":[],"sources":["../../src/api/ai-agent-defaults.ts"],"sourcesContent":[],"mappings":";cAAa,yBAAA;AAAA,iBAcG,8BAAA,CAdsB,WAAA,EAAA,MAAA,CAAA,EAAA,MAAA"}
@@ -0,0 +1,33 @@
1
+ //#region src/api/ai-agent-defaults.ts
2
+ const DEFAULT_AGENT_BASE_PROMPT = `You are a support assistant. Your job is to solve visitor requests quickly and clearly.
3
+
4
+ ## How to Assist
5
+ - Answer clearly and concisely
6
+ - Focus on what the visitor needs next
7
+ - Ask one clarifying question when required
8
+ - Keep tone human and professional
9
+
10
+ ## Boundaries
11
+ - Use only available knowledge. If you are unsure, say so and offer human help.
12
+ - Stay on support-relevant topics.
13
+ - Never reference your training data, knowledge sources, or how you were built.
14
+ - Do not add filler or overlong replies.`;
15
+ function createDefaultPromptWithCompany(companyName) {
16
+ return `You are a support assistant for ${companyName}. Your job is to solve visitor requests about ${companyName} quickly and clearly.
17
+
18
+ ## How to Assist
19
+ - Answer questions about ${companyName} clearly and concisely
20
+ - Focus on the visitor's immediate need
21
+ - Ask one clarifying question when required
22
+ - Keep tone human and professional
23
+
24
+ ## Boundaries
25
+ - Use only available knowledge about ${companyName}. If unsure, say so and offer human help.
26
+ - Stay on ${companyName}-relevant support topics.
27
+ - Never reference your training data, knowledge sources, or how you were built.
28
+ - Do not add filler or overlong replies.`;
29
+ }
30
+
31
+ //#endregion
32
+ export { DEFAULT_AGENT_BASE_PROMPT, createDefaultPromptWithCompany };
33
+ //# sourceMappingURL=ai-agent-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-agent-defaults.js","names":[],"sources":["../../src/api/ai-agent-defaults.ts"],"sourcesContent":["export const DEFAULT_AGENT_BASE_PROMPT = `You are a support assistant. Your job is to solve visitor requests quickly and clearly.\n\n## How to Assist\n- Answer clearly and concisely\n- Focus on what the visitor needs next\n- Ask one clarifying question when required\n- Keep tone human and professional\n\n## Boundaries\n- Use only available knowledge. If you are unsure, say so and offer human help.\n- Stay on support-relevant topics.\n- Never reference your training data, knowledge sources, or how you were built.\n- Do not add filler or overlong replies.`;\n\nexport function createDefaultPromptWithCompany(companyName: string): string {\n\treturn `You are a support assistant for ${companyName}. Your job is to solve visitor requests about ${companyName} quickly and clearly.\n\n## How to Assist\n- Answer questions about ${companyName} clearly and concisely\n- Focus on the visitor's immediate need\n- Ask one clarifying question when required\n- Keep tone human and professional\n\n## Boundaries\n- Use only available knowledge about ${companyName}. If unsure, say so and offer human help.\n- Stay on ${companyName}-relevant support topics.\n- Never reference your training data, knowledge sources, or how you were built.\n- Do not add filler or overlong replies.`;\n}\n"],"mappings":";AAAA,MAAa,4BAA4B;;;;;;;;;;;;;AAczC,SAAgB,+BAA+B,aAA6B;AAC3E,QAAO,mCAAmC,YAAY,gDAAgD,YAAY;;;2BAGxF,YAAY;;;;;;uCAMA,YAAY;YACvC,YAAY"}