@cossistant/types 0.1.0 → 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.
- package/analytics.d.ts +31 -0
- package/analytics.d.ts.map +1 -0
- package/analytics.js +41 -0
- package/analytics.js.map +1 -0
- package/api/ai-agent-capabilities.d.ts +16 -19
- package/api/ai-agent-capabilities.d.ts.map +1 -1
- package/api/ai-agent-capabilities.js +215 -286
- package/api/ai-agent-capabilities.js.map +1 -1
- package/api/ai-agent-defaults.d.ts +6 -0
- package/api/ai-agent-defaults.d.ts.map +1 -0
- package/api/ai-agent-defaults.js +33 -0
- package/api/ai-agent-defaults.js.map +1 -0
- package/api/ai-agent.d.ts +314 -207
- package/api/ai-agent.d.ts.map +1 -1
- package/api/ai-agent.js +175 -111
- package/api/ai-agent.js.map +1 -1
- package/api/conversation.d.ts +79 -56
- package/api/conversation.d.ts.map +1 -1
- package/api/conversation.js +7 -2
- package/api/conversation.js.map +1 -1
- package/api/feedback.d.ts +5 -0
- package/api/feedback.d.ts.map +1 -1
- package/api/feedback.js +2 -0
- package/api/feedback.js.map +1 -1
- package/api/index.d.ts +7 -6
- package/api/index.js +7 -6
- package/api/link-source.d.ts +4 -4
- package/api/link-source.d.ts.map +1 -1
- package/api/link-source.js +1 -1
- package/api/link-source.js.map +1 -1
- package/api/timeline-item.d.ts +79 -67
- package/api/timeline-item.d.ts.map +1 -1
- package/api/timeline-item.js +3 -1
- package/api/timeline-item.js.map +1 -1
- package/api/user.d.ts +1 -1
- package/api/user.d.ts.map +1 -1
- package/api/user.js +2 -2
- package/api/user.js.map +1 -1
- package/api/visitor.d.ts +225 -1
- package/api/visitor.d.ts.map +1 -1
- package/api/visitor.js +142 -1
- package/api/visitor.js.map +1 -1
- package/api/website.d.ts +16 -7
- package/api/website.d.ts.map +1 -1
- package/api/website.js +16 -2
- package/api/website.js.map +1 -1
- package/enums.d.ts +2 -0
- package/enums.d.ts.map +1 -1
- package/enums.js +3 -1
- package/enums.js.map +1 -1
- package/index.d.ts +10 -8
- package/index.d.ts.map +1 -1
- package/index.js +10 -8
- package/package.json +1 -1
- package/realtime-events.d.ts +106 -36
- package/realtime-events.d.ts.map +1 -1
- package/realtime-events.js +6 -2
- package/realtime-events.js.map +1 -1
- package/schemas.d.ts +13 -11
- package/schemas.d.ts.map +1 -1
- package/tool-timeline-policy.d.ts +19 -2
- package/tool-timeline-policy.d.ts.map +1 -1
- package/tool-timeline-policy.js +29 -6
- package/tool-timeline-policy.js.map +1 -1
- package/trpc/conversation-hard-limit.d.ts +30 -0
- package/trpc/conversation-hard-limit.d.ts.map +1 -0
- package/trpc/conversation-hard-limit.js +43 -0
- package/trpc/conversation-hard-limit.js.map +1 -0
- package/trpc/conversation.d.ts +84 -44
- package/trpc/conversation.d.ts.map +1 -1
- package/trpc/conversation.js +6 -0
- package/trpc/conversation.js.map +1 -1
- package/trpc/visitor.d.ts +73 -15
- package/trpc/visitor.d.ts.map +1 -1
- package/trpc/visitor.js +15 -8
- package/trpc/visitor.js.map +1 -1
|
@@ -8,12 +8,14 @@ const AI_AGENT_TOOL_CATEGORIES = [
|
|
|
8
8
|
"context",
|
|
9
9
|
"analysis"
|
|
10
10
|
];
|
|
11
|
+
const AI_AGENT_TOOL_GROUPS = ["behavior", "actions"];
|
|
11
12
|
const AI_AGENT_TOOL_IDS = [
|
|
12
13
|
"searchKnowledgeBase",
|
|
13
14
|
"identifyVisitor",
|
|
14
15
|
"updateConversationTitle",
|
|
15
16
|
"updateSentiment",
|
|
16
17
|
"setPriority",
|
|
18
|
+
"categorizeConversation",
|
|
17
19
|
"sendMessage",
|
|
18
20
|
"sendPrivateMessage",
|
|
19
21
|
"respond",
|
|
@@ -27,406 +29,333 @@ const AI_AGENT_BEHAVIOR_SETTING_KEYS = [
|
|
|
27
29
|
"canMarkSpam",
|
|
28
30
|
"canSetPriority",
|
|
29
31
|
"canEscalate",
|
|
32
|
+
"autoCategorize",
|
|
30
33
|
"autoGenerateTitle",
|
|
31
34
|
"autoAnalyzeSentiment"
|
|
32
35
|
];
|
|
33
|
-
const
|
|
36
|
+
const AI_AGENT_TOOL_CATALOG_RAW = [
|
|
34
37
|
{
|
|
35
38
|
id: "searchKnowledgeBase",
|
|
36
39
|
label: "Search Knowledge Base",
|
|
37
|
-
description: "
|
|
40
|
+
description: "Retrieve relevant knowledge snippets by keyword query.",
|
|
38
41
|
category: "context",
|
|
42
|
+
group: "behavior",
|
|
43
|
+
order: 1,
|
|
39
44
|
isSystem: true,
|
|
40
45
|
isRequired: true,
|
|
41
46
|
isToggleable: false,
|
|
42
47
|
behaviorSettingKey: null,
|
|
43
|
-
|
|
48
|
+
defaultSkill: {
|
|
49
|
+
name: "search-knowledge-base.md",
|
|
50
|
+
label: "Search Knowledge Base",
|
|
51
|
+
description: "Keyword query patterns and result interpretation.",
|
|
52
|
+
content: `## Query Tactics
|
|
53
|
+
|
|
54
|
+
- Use short keyword queries (2-6 words).
|
|
55
|
+
- Retry with synonyms when results are weak.
|
|
56
|
+
- Prefer specific product/feature terms over full sentences.
|
|
57
|
+
|
|
58
|
+
## Result Use
|
|
59
|
+
|
|
60
|
+
- Prioritize high-similarity results that directly answer the request.
|
|
61
|
+
- Use title/source metadata when it clarifies confidence.`
|
|
62
|
+
}
|
|
44
63
|
},
|
|
45
64
|
{
|
|
46
65
|
id: "identifyVisitor",
|
|
47
66
|
label: "Identify Visitor",
|
|
48
|
-
description: "
|
|
67
|
+
description: "Attach visitor name/email to the conversation record.",
|
|
49
68
|
category: "context",
|
|
69
|
+
group: "behavior",
|
|
70
|
+
order: 2,
|
|
50
71
|
isSystem: true,
|
|
51
72
|
isRequired: true,
|
|
52
73
|
isToggleable: false,
|
|
53
74
|
behaviorSettingKey: null,
|
|
54
|
-
|
|
75
|
+
defaultSkill: {
|
|
76
|
+
name: "identify-visitor.md",
|
|
77
|
+
label: "Identify Visitor",
|
|
78
|
+
description: "Input hygiene for profile linking.",
|
|
79
|
+
content: `## Input Hygiene
|
|
80
|
+
|
|
81
|
+
- Pass clean name/email values without extra text.
|
|
82
|
+
- Use the latest visitor-provided values if they correct earlier info.
|
|
83
|
+
- Avoid duplicate calls when identity is already up to date.`
|
|
84
|
+
}
|
|
55
85
|
},
|
|
56
86
|
{
|
|
57
87
|
id: "updateConversationTitle",
|
|
58
88
|
label: "Update Conversation Title",
|
|
59
|
-
description: "
|
|
89
|
+
description: "Set a concise title for the conversation topic.",
|
|
60
90
|
category: "analysis",
|
|
91
|
+
group: "behavior",
|
|
92
|
+
order: 3,
|
|
61
93
|
isSystem: false,
|
|
62
94
|
isRequired: false,
|
|
63
95
|
isToggleable: true,
|
|
64
96
|
behaviorSettingKey: "autoGenerateTitle",
|
|
65
|
-
|
|
97
|
+
defaultSkill: {
|
|
98
|
+
name: "update-conversation-title.md",
|
|
99
|
+
label: "Update Conversation Title",
|
|
100
|
+
description: "Title formatting conventions.",
|
|
101
|
+
content: `## Title Formatting
|
|
102
|
+
|
|
103
|
+
- Keep titles short and issue-focused.
|
|
104
|
+
- Use concrete nouns (feature, error, account area).
|
|
105
|
+
- Update only when the conversation topic is clear and stable across recent messages.
|
|
106
|
+
- Skip vague, transitional, or generic titles.
|
|
107
|
+
- Do not replace a title unless the newer title is meaningfully better.`
|
|
108
|
+
}
|
|
66
109
|
},
|
|
67
110
|
{
|
|
68
111
|
id: "updateSentiment",
|
|
69
112
|
label: "Update Sentiment",
|
|
70
|
-
description: "
|
|
113
|
+
description: "Record meaningful sentiment changes for conversation analytics.",
|
|
71
114
|
category: "analysis",
|
|
115
|
+
group: "behavior",
|
|
116
|
+
order: 4,
|
|
72
117
|
isSystem: false,
|
|
73
118
|
isRequired: false,
|
|
74
119
|
isToggleable: true,
|
|
75
120
|
behaviorSettingKey: "autoAnalyzeSentiment",
|
|
76
|
-
|
|
121
|
+
defaultSkill: {
|
|
122
|
+
name: "update-sentiment.md",
|
|
123
|
+
label: "Update Sentiment",
|
|
124
|
+
description: "When sentiment updates add signal.",
|
|
125
|
+
content: `## Sentiment Updates
|
|
126
|
+
|
|
127
|
+
- Update only for clear tone shifts.
|
|
128
|
+
- Keep rationale short and evidence-based.
|
|
129
|
+
- Skip minor wording changes with no practical impact.`
|
|
130
|
+
}
|
|
77
131
|
},
|
|
78
132
|
{
|
|
79
133
|
id: "setPriority",
|
|
80
134
|
label: "Set Priority",
|
|
81
|
-
description: "
|
|
135
|
+
description: "Set operational urgency for the conversation.",
|
|
82
136
|
category: "analysis",
|
|
137
|
+
group: "behavior",
|
|
138
|
+
order: 5,
|
|
83
139
|
isSystem: false,
|
|
84
140
|
isRequired: false,
|
|
85
141
|
isToggleable: true,
|
|
86
142
|
behaviorSettingKey: "canSetPriority",
|
|
87
|
-
|
|
143
|
+
defaultSkill: {
|
|
144
|
+
name: "set-priority.md",
|
|
145
|
+
label: "Set Priority",
|
|
146
|
+
description: "Priority mapping by impact and urgency.",
|
|
147
|
+
content: `## Priority Mapping
|
|
148
|
+
|
|
149
|
+
- Urgent: outage, security, or severe business impact.
|
|
150
|
+
- High: blocked workflow with no practical workaround.
|
|
151
|
+
- Normal: standard support work.
|
|
152
|
+
- Low: informational, non-blocking requests.`
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: "categorizeConversation",
|
|
157
|
+
label: "Categorize Conversation",
|
|
158
|
+
description: "Add the conversation to one matching saved view.",
|
|
159
|
+
category: "analysis",
|
|
160
|
+
group: "behavior",
|
|
161
|
+
order: 6,
|
|
162
|
+
isSystem: false,
|
|
163
|
+
isRequired: false,
|
|
164
|
+
isToggleable: true,
|
|
165
|
+
behaviorSettingKey: "autoCategorize",
|
|
166
|
+
defaultSkill: {
|
|
167
|
+
name: "categorize-conversation.md",
|
|
168
|
+
label: "Categorize Conversation",
|
|
169
|
+
description: "How to choose the best matching saved view.",
|
|
170
|
+
content: `## Categorization Rules
|
|
171
|
+
|
|
172
|
+
- Use only one saved view when the match is clear.
|
|
173
|
+
- Match the conversation to the closest existing view prompt and description.
|
|
174
|
+
- Skip when no view clearly fits.
|
|
175
|
+
- Prefer stable themes over one-off phrases from a single message.`
|
|
176
|
+
}
|
|
88
177
|
},
|
|
89
178
|
{
|
|
90
179
|
id: "sendMessage",
|
|
91
|
-
label: "Send
|
|
92
|
-
description: "
|
|
180
|
+
label: "Send Chat Message",
|
|
181
|
+
description: "Send one short customer-visible chat message. Use up to 3 when shorter bubbles read better.",
|
|
93
182
|
category: "messaging",
|
|
183
|
+
group: "behavior",
|
|
184
|
+
order: 7,
|
|
94
185
|
isSystem: true,
|
|
95
186
|
isRequired: true,
|
|
96
187
|
isToggleable: false,
|
|
97
188
|
behaviorSettingKey: null,
|
|
98
|
-
|
|
189
|
+
defaultSkill: {
|
|
190
|
+
name: "send-message.md",
|
|
191
|
+
label: "Send Chat Message",
|
|
192
|
+
description: "Short chat-bubble reply rules.",
|
|
193
|
+
content: `## Role
|
|
194
|
+
|
|
195
|
+
- Use this for every visitor-facing reply.
|
|
196
|
+
- Prefer short chat bubbles over one dense block of text.
|
|
197
|
+
- Use 2 or 3 separate calls when splitting improves readability.
|
|
198
|
+
- Do not exceed 3 public chat messages in one run.`
|
|
199
|
+
}
|
|
99
200
|
},
|
|
100
201
|
{
|
|
101
202
|
id: "sendPrivateMessage",
|
|
102
203
|
label: "Send Private Note",
|
|
103
|
-
description: "
|
|
204
|
+
description: "Send internal notes to teammates that visitors cannot see.",
|
|
104
205
|
category: "messaging",
|
|
206
|
+
group: "behavior",
|
|
207
|
+
order: 8,
|
|
105
208
|
isSystem: true,
|
|
106
209
|
isRequired: true,
|
|
107
210
|
isToggleable: false,
|
|
108
211
|
behaviorSettingKey: null,
|
|
109
|
-
|
|
212
|
+
defaultSkill: {
|
|
213
|
+
name: "send-private-message.md",
|
|
214
|
+
label: "Send Private Note",
|
|
215
|
+
description: "Internal-note structure for handoff quality.",
|
|
216
|
+
content: `## Internal Note Structure
|
|
217
|
+
|
|
218
|
+
- Include issue summary, key facts, and actions already attempted.
|
|
219
|
+
- Keep notes scannable for fast teammate handoff.
|
|
220
|
+
- Use internal operational tone (not customer-facing copy).`
|
|
221
|
+
}
|
|
110
222
|
},
|
|
111
223
|
{
|
|
112
224
|
id: "respond",
|
|
113
225
|
label: "Finish: Respond",
|
|
114
|
-
description: "
|
|
226
|
+
description: "Finish the run after sending a complete public response.",
|
|
115
227
|
category: "action",
|
|
228
|
+
group: "actions",
|
|
229
|
+
order: 1,
|
|
116
230
|
isSystem: true,
|
|
117
231
|
isRequired: true,
|
|
118
232
|
isToggleable: false,
|
|
119
233
|
behaviorSettingKey: null,
|
|
120
|
-
|
|
234
|
+
defaultSkill: {
|
|
235
|
+
name: "respond.md",
|
|
236
|
+
label: "Finish Respond",
|
|
237
|
+
description: "When to select the respond finish action.",
|
|
238
|
+
content: `## Finish Semantics
|
|
239
|
+
|
|
240
|
+
- Choose this when the turn is complete and no escalation/closure state change is required.
|
|
241
|
+
- Use this as the terminal action for normal reply flows.`
|
|
242
|
+
}
|
|
121
243
|
},
|
|
122
244
|
{
|
|
123
245
|
id: "escalate",
|
|
124
246
|
label: "Finish: Escalate",
|
|
125
|
-
description: "
|
|
247
|
+
description: "Escalate to a human when AI should not complete the request.",
|
|
126
248
|
category: "action",
|
|
249
|
+
group: "actions",
|
|
250
|
+
order: 2,
|
|
127
251
|
isSystem: false,
|
|
128
252
|
isRequired: false,
|
|
129
253
|
isToggleable: true,
|
|
130
254
|
behaviorSettingKey: "canEscalate",
|
|
131
|
-
|
|
255
|
+
defaultSkill: {
|
|
256
|
+
name: "escalate.md",
|
|
257
|
+
label: "Finish Escalate",
|
|
258
|
+
description: "When to select the escalate finish action.",
|
|
259
|
+
content: `## Finish Semantics
|
|
260
|
+
|
|
261
|
+
- Choose this when human intervention is required.
|
|
262
|
+
- Include a clear escalation reason payload for teammate routing.`
|
|
263
|
+
}
|
|
132
264
|
},
|
|
133
265
|
{
|
|
134
266
|
id: "resolve",
|
|
135
267
|
label: "Finish: Resolve",
|
|
136
|
-
description: "
|
|
268
|
+
description: "Mark conversation resolved once the issue is fully handled.",
|
|
137
269
|
category: "action",
|
|
270
|
+
group: "actions",
|
|
271
|
+
order: 3,
|
|
138
272
|
isSystem: false,
|
|
139
273
|
isRequired: false,
|
|
140
274
|
isToggleable: true,
|
|
141
275
|
behaviorSettingKey: "canResolve",
|
|
142
|
-
|
|
276
|
+
defaultSkill: {
|
|
277
|
+
name: "resolve.md",
|
|
278
|
+
label: "Finish Resolve",
|
|
279
|
+
description: "When to select the resolve finish action.",
|
|
280
|
+
content: `## Finish Semantics
|
|
281
|
+
|
|
282
|
+
- Choose this when the issue is closed and the conversation can be marked resolved.
|
|
283
|
+
- Use resolution-oriented reasoning in the payload.`
|
|
284
|
+
}
|
|
143
285
|
},
|
|
144
286
|
{
|
|
145
287
|
id: "markSpam",
|
|
146
288
|
label: "Finish: Mark Spam",
|
|
147
|
-
description: "
|
|
289
|
+
description: "Mark obvious abuse/spam and close quickly.",
|
|
148
290
|
category: "action",
|
|
291
|
+
group: "actions",
|
|
292
|
+
order: 4,
|
|
149
293
|
isSystem: false,
|
|
150
294
|
isRequired: false,
|
|
151
295
|
isToggleable: true,
|
|
152
296
|
behaviorSettingKey: "canMarkSpam",
|
|
153
|
-
|
|
297
|
+
defaultSkill: {
|
|
298
|
+
name: "mark-spam.md",
|
|
299
|
+
label: "Finish Mark Spam",
|
|
300
|
+
description: "When to select the spam finish action.",
|
|
301
|
+
content: `## Finish Semantics
|
|
302
|
+
|
|
303
|
+
- Choose this for clear spam/abuse/bot traffic.
|
|
304
|
+
- Capture concise evidence in reasoning for auditability.`
|
|
305
|
+
}
|
|
154
306
|
},
|
|
155
307
|
{
|
|
156
308
|
id: "skip",
|
|
157
309
|
label: "Finish: Skip",
|
|
158
|
-
description: "
|
|
310
|
+
description: "Finish without a public response when silence is better.",
|
|
159
311
|
category: "action",
|
|
312
|
+
group: "actions",
|
|
313
|
+
order: 5,
|
|
160
314
|
isSystem: true,
|
|
161
315
|
isRequired: true,
|
|
162
316
|
isToggleable: false,
|
|
163
317
|
behaviorSettingKey: null,
|
|
164
|
-
|
|
318
|
+
defaultSkill: {
|
|
319
|
+
name: "skip.md",
|
|
320
|
+
label: "Finish Skip",
|
|
321
|
+
description: "When to select the skip finish action.",
|
|
322
|
+
content: `## Finish Semantics
|
|
323
|
+
|
|
324
|
+
- Choose this when no additional assistant output is needed for this run.
|
|
325
|
+
- Use reasoning that explains why silence is intentional.`
|
|
326
|
+
}
|
|
165
327
|
}
|
|
166
328
|
];
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
- If unsure whether to reply, prefer one short helpful message over multiple partial replies.
|
|
177
|
-
|
|
178
|
-
## Tool Notes
|
|
179
|
-
|
|
180
|
-
- Use [@Send Public Message](mention:tool:sendMessage) only when a reply adds value.
|
|
181
|
-
- Finish with [@Finish: Respond](mention:tool:respond) after replying.
|
|
182
|
-
- Use [@Finish: Skip](mention:tool:skip) when no reply is required.`,
|
|
183
|
-
suggestedToolIds: [
|
|
184
|
-
"sendMessage",
|
|
185
|
-
"respond",
|
|
186
|
-
"skip"
|
|
187
|
-
]
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
name: "tone-and-voice.md",
|
|
191
|
-
label: "Tone And Voice",
|
|
192
|
-
description: "Keeps replies concise, empathetic, and aligned with a support tone.",
|
|
193
|
-
content: `## Tone
|
|
194
|
-
|
|
195
|
-
- Be concise, direct, and calm.
|
|
196
|
-
- Prefer plain language over jargon.
|
|
197
|
-
- Keep messages to 1-2 short sentences when possible.
|
|
198
|
-
|
|
199
|
-
## Empathy
|
|
200
|
-
|
|
201
|
-
- Acknowledge frustration without over-apologizing.
|
|
202
|
-
- Focus on the next useful action.
|
|
203
|
-
|
|
204
|
-
## Tool Notes
|
|
205
|
-
|
|
206
|
-
- Send customer-visible text through [@Send Public Message](mention:tool:sendMessage).`,
|
|
207
|
-
suggestedToolIds: ["sendMessage"]
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
name: "short-clear-replies.md",
|
|
211
|
-
label: "Short Clear Replies",
|
|
212
|
-
description: "Enforces short, structured customer-facing responses.",
|
|
213
|
-
content: `## Message Shape
|
|
214
|
-
|
|
215
|
-
- First sentence: direct answer.
|
|
216
|
-
- Optional second sentence: next step or clarifying question.
|
|
217
|
-
- Avoid multi-paragraph replies unless the question is complex.
|
|
218
|
-
|
|
219
|
-
## Tool Notes
|
|
220
|
-
|
|
221
|
-
- Send the final customer reply with [@Send Public Message](mention:tool:sendMessage).`,
|
|
222
|
-
suggestedToolIds: ["sendMessage"]
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
name: "deep-research.md",
|
|
226
|
-
label: "Deep Research",
|
|
227
|
-
description: "Guides multi-pass retrieval before giving factual or policy answers.",
|
|
228
|
-
content: `## Research Workflow
|
|
229
|
-
|
|
230
|
-
- For factual/product/policy questions, search before answering.
|
|
231
|
-
- Start with a short focused query, then broaden if needed.
|
|
232
|
-
- Use at least one follow-up search if confidence is low.
|
|
233
|
-
|
|
234
|
-
## Tool Notes
|
|
235
|
-
|
|
236
|
-
- Use [@Search Knowledge Base](mention:tool:searchKnowledgeBase) for retrieval.
|
|
237
|
-
- Only send final claims after grounding them in retrieved context.`,
|
|
238
|
-
suggestedToolIds: ["searchKnowledgeBase"]
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
name: "grounded-answers.md",
|
|
242
|
-
label: "Grounded Answers",
|
|
243
|
-
description: "Prevents hallucinations and enforces transparent uncertainty.",
|
|
244
|
-
content: `## Grounding Rules
|
|
245
|
-
|
|
246
|
-
- Do not invent product, policy, or pricing details.
|
|
247
|
-
- If information is missing, say so clearly and offer escalation.
|
|
248
|
-
- Prefer partial certainty over confident guessing.
|
|
249
|
-
|
|
250
|
-
## Tool Notes
|
|
251
|
-
|
|
252
|
-
- Validate facts with [@Search Knowledge Base](mention:tool:searchKnowledgeBase).
|
|
253
|
-
- If unsupported, use [@Finish: Escalate](mention:tool:escalate) when available.`,
|
|
254
|
-
suggestedToolIds: ["searchKnowledgeBase", "escalate"]
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
name: "visitor-identification.md",
|
|
258
|
-
label: "Visitor Identification",
|
|
259
|
-
description: "Controls when and how to request name/email and identify the visitor.",
|
|
260
|
-
content: `## Identification Policy
|
|
261
|
-
|
|
262
|
-
- Ask for name and email only when needed for account-specific help.
|
|
263
|
-
- Validate that the name field contains a name and email field contains an email.
|
|
264
|
-
- Update details if the visitor corrects their information.
|
|
265
|
-
|
|
266
|
-
## Tool Notes
|
|
267
|
-
|
|
268
|
-
- Link identity with [@Identify Visitor](mention:tool:identifyVisitor).`,
|
|
269
|
-
suggestedToolIds: ["identifyVisitor"]
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
name: "escalation-playbook.md",
|
|
273
|
-
label: "Escalation Playbook",
|
|
274
|
-
description: "Defines when escalation is mandatory and what to include in handoff.",
|
|
275
|
-
content: `## Escalate When
|
|
276
|
-
|
|
277
|
-
- The visitor asks for a human.
|
|
278
|
-
- You cannot find reliable information.
|
|
279
|
-
- Legal, compliance, billing, or high-risk judgment is required.
|
|
280
|
-
|
|
281
|
-
## Handoff Quality
|
|
282
|
-
|
|
283
|
-
- Tell the visitor what happens next.
|
|
284
|
-
- Leave concise internal context for teammates.
|
|
285
|
-
|
|
286
|
-
## Tool Notes
|
|
287
|
-
|
|
288
|
-
- Notify visitor with [@Send Public Message](mention:tool:sendMessage).
|
|
289
|
-
- Add handoff context via [@Send Private Note](mention:tool:sendPrivateMessage).
|
|
290
|
-
- Finish with [@Finish: Escalate](mention:tool:escalate).`,
|
|
291
|
-
suggestedToolIds: [
|
|
292
|
-
"sendMessage",
|
|
293
|
-
"sendPrivateMessage",
|
|
294
|
-
"escalate"
|
|
295
|
-
]
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
name: "resolution-checklist.md",
|
|
299
|
-
label: "Resolution Checklist",
|
|
300
|
-
description: "Ensures conversations are only resolved after clear completion criteria.",
|
|
301
|
-
content: `## Resolve Criteria
|
|
302
|
-
|
|
303
|
-
- The visitor's request is fully addressed.
|
|
304
|
-
- No unresolved dependency remains.
|
|
305
|
-
- The final response includes a clear closure.
|
|
306
|
-
|
|
307
|
-
## Tool Notes
|
|
308
|
-
|
|
309
|
-
- Send closure text with [@Send Public Message](mention:tool:sendMessage).
|
|
310
|
-
- Finish with [@Finish: Resolve](mention:tool:resolve).`,
|
|
311
|
-
suggestedToolIds: ["sendMessage", "resolve"]
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
name: "spam-detection.md",
|
|
315
|
-
label: "Spam Detection",
|
|
316
|
-
description: "Sets strict criteria for spam classification.",
|
|
317
|
-
content: `## Spam Heuristics
|
|
318
|
-
|
|
319
|
-
- Mark as spam only for obvious bot, phishing, or abusive noise.
|
|
320
|
-
- Do not mark difficult but valid customer requests as spam.
|
|
321
|
-
|
|
322
|
-
## Tool Notes
|
|
323
|
-
|
|
324
|
-
- Use [@Finish: Mark Spam](mention:tool:markSpam) only when highly confident.`,
|
|
325
|
-
suggestedToolIds: ["markSpam"]
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
name: "priority-triage.md",
|
|
329
|
-
label: "Priority Triage",
|
|
330
|
-
description: "Standardizes urgency assignment for incoming issues.",
|
|
331
|
-
content: `## Priority Rules
|
|
332
|
-
|
|
333
|
-
- Urgent: outages, security incidents, severe business impact.
|
|
334
|
-
- High: blocked workflow with no workaround.
|
|
335
|
-
- Normal: standard product support requests.
|
|
336
|
-
- Low: informational or minor questions.
|
|
337
|
-
|
|
338
|
-
## Tool Notes
|
|
339
|
-
|
|
340
|
-
- Set urgency with [@Set Priority](mention:tool:setPriority).`,
|
|
341
|
-
suggestedToolIds: ["setPriority"]
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
name: "sentiment-tracking.md",
|
|
345
|
-
label: "Sentiment Tracking",
|
|
346
|
-
description: "Encourages sentiment updates when tone changes.",
|
|
347
|
-
content: `## Sentiment Updates
|
|
348
|
-
|
|
349
|
-
- Update sentiment when tone shifts meaningfully.
|
|
350
|
-
- Keep reason short and factual.
|
|
351
|
-
- Avoid over-updating on minor wording changes.
|
|
352
|
-
|
|
353
|
-
## Tool Notes
|
|
354
|
-
|
|
355
|
-
- Record tone with [@Update Sentiment](mention:tool:updateSentiment).`,
|
|
356
|
-
suggestedToolIds: ["updateSentiment"]
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
name: "title-hygiene.md",
|
|
360
|
-
label: "Title Hygiene",
|
|
361
|
-
description: "Keeps conversation titles clear and actionable.",
|
|
362
|
-
content: `## Title Standards
|
|
363
|
-
|
|
364
|
-
- Keep titles short and specific.
|
|
365
|
-
- Reflect the primary issue, not generic phrases.
|
|
366
|
-
- Update title if topic changes significantly.
|
|
367
|
-
|
|
368
|
-
## Tool Notes
|
|
369
|
-
|
|
370
|
-
- Use [@Update Conversation Title](mention:tool:updateConversationTitle).`,
|
|
371
|
-
suggestedToolIds: ["updateConversationTitle"]
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
name: "handoff-notes.md",
|
|
375
|
-
label: "Handoff Notes",
|
|
376
|
-
description: "Improves private notes shared with human teammates.",
|
|
377
|
-
content: `## Private Note Checklist
|
|
378
|
-
|
|
379
|
-
- Include issue summary, key facts, and what was already tried.
|
|
380
|
-
- Add urgency and expected next action.
|
|
381
|
-
- Keep notes scannable and concise.
|
|
382
|
-
|
|
383
|
-
## Tool Notes
|
|
384
|
-
|
|
385
|
-
- Send internal details with [@Send Private Note](mention:tool:sendPrivateMessage).`,
|
|
386
|
-
suggestedToolIds: ["sendPrivateMessage"]
|
|
329
|
+
const AI_AGENT_TOOL_CATALOG = AI_AGENT_TOOL_CATALOG_RAW.map((tool) => ({
|
|
330
|
+
...tool,
|
|
331
|
+
defaultSkill: {
|
|
332
|
+
...tool.defaultSkill,
|
|
333
|
+
content: serializeSkillFileContent({
|
|
334
|
+
name: stripSkillMarkdownExtension(tool.defaultSkill.name),
|
|
335
|
+
description: tool.defaultSkill.description,
|
|
336
|
+
body: tool.defaultSkill.content
|
|
337
|
+
})
|
|
387
338
|
}
|
|
388
|
-
];
|
|
389
|
-
const AI_AGENT_DEFAULT_SKILL_TEMPLATES = AI_AGENT_DEFAULT_SKILL_TEMPLATE_DEFINITIONS.map((template) => ({
|
|
390
|
-
...template,
|
|
391
|
-
content: serializeSkillFileContent({
|
|
392
|
-
name: stripSkillMarkdownExtension(template.name),
|
|
393
|
-
description: template.description,
|
|
394
|
-
body: template.content
|
|
395
|
-
})
|
|
396
339
|
}));
|
|
397
|
-
const
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
name: "participation.md",
|
|
415
|
-
label: "Participation Policy",
|
|
416
|
-
description: "Rules for when AI should participate versus intentionally stay silent."
|
|
417
|
-
},
|
|
418
|
-
{
|
|
419
|
-
name: "grounding.md",
|
|
420
|
-
label: "Grounding Policy",
|
|
421
|
-
description: "Instructions for factual grounding and knowledge retrieval discipline."
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
name: "capabilities.md",
|
|
425
|
-
label: "Capabilities Contract",
|
|
426
|
-
description: "Capability boundaries and references to optional behavior skills."
|
|
427
|
-
}
|
|
340
|
+
const AI_AGENT_RESERVED_TOOL_SKILL_TEMPLATE_NAMES = [...new Set(AI_AGENT_TOOL_CATALOG.map((tool) => tool.defaultSkill.name))];
|
|
341
|
+
const AI_AGENT_DROPPED_SKILL_TEMPLATE_NAMES = [
|
|
342
|
+
"reply-or-stay-silent.md",
|
|
343
|
+
"send-message-behavior.md",
|
|
344
|
+
"deep-research.md",
|
|
345
|
+
"grounded-answers.md",
|
|
346
|
+
"visitor-identification.md",
|
|
347
|
+
"escalation-playbook.md",
|
|
348
|
+
"resolution-checklist.md",
|
|
349
|
+
"spam-detection.md",
|
|
350
|
+
"priority-triage.md",
|
|
351
|
+
"sentiment-tracking.md",
|
|
352
|
+
"title-hygiene.md",
|
|
353
|
+
"handoff-notes.md",
|
|
354
|
+
"tone-and-voice.md",
|
|
355
|
+
"short-clear-replies.md",
|
|
356
|
+
"wait.md"
|
|
428
357
|
];
|
|
429
358
|
|
|
430
359
|
//#endregion
|
|
431
|
-
export { AI_AGENT_BEHAVIOR_SETTING_KEYS,
|
|
360
|
+
export { AI_AGENT_BEHAVIOR_SETTING_KEYS, AI_AGENT_DROPPED_SKILL_TEMPLATE_NAMES, AI_AGENT_RESERVED_TOOL_SKILL_TEMPLATE_NAMES, AI_AGENT_TOOL_CATALOG, AI_AGENT_TOOL_CATEGORIES, AI_AGENT_TOOL_GROUPS, AI_AGENT_TOOL_IDS };
|
|
432
361
|
//# sourceMappingURL=ai-agent-capabilities.js.map
|