@oneuptime/common 9.2.18 → 9.2.21
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/Server/Services/AIService.ts +1 -1
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +78 -1
- package/Server/Utils/Workspace/Slack/Slack.ts +80 -1
- package/Tests/Server/API/BaseAPI.test.ts +9 -4
- package/Tests/Server/Middleware/ProjectAuthorization.test.ts +133 -162
- package/Tests/Server/Services/ProbeService.test.ts +91 -784
- package/Tests/Server/Services/ScheduledMaintenanceService.test.ts +131 -112
- package/Tests/Server/Services/TeamMemberService.test.ts +87 -1343
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +18 -9
- package/Tests/Server/Utils/Cookie.test.ts +10 -2
- package/Tests/Types/HashedString.test.ts +52 -8
- package/Tests/UI/Components/404.test.tsx +10 -15
- package/Tests/UI/Components/Breadcrumbs.test.tsx +6 -2
- package/Tests/UI/Components/Button.test.tsx +12 -12
- package/Tests/UI/Components/Card.test.tsx +4 -2
- package/Tests/UI/Components/ConfirmModal.test.tsx +1 -1
- package/Tests/UI/Components/Dropdown.test.tsx +37 -4
- package/Tests/UI/Components/DuplicateModel.test.tsx +49 -45
- package/Tests/UI/Components/FilePicker.test.tsx +258 -178
- package/Tests/UI/Components/List.test.tsx +3 -1
- package/Tests/UI/Components/MarkdownEditor.test.tsx +6 -5
- package/Tests/UI/Components/MasterPage.test.tsx +1 -1
- package/Tests/UI/Components/Modal.test.tsx +5 -5
- package/Tests/UI/Components/NavBar.test.tsx +14 -1
- package/Tests/UI/Components/OrderedStatesList.test.tsx +1 -1
- package/Tests/UI/Components/Pagination.test.tsx +6 -2
- package/Tests/Utils/API.test.ts +133 -11
- package/Tests/__mocks__/azure.js +2 -0
- package/Tests/__mocks__/botbuilder-stdlib.js +2 -0
- package/Tests/__mocks__/botbuilder.js +10 -0
- package/Tests/__mocks__/locter.js +5 -0
- package/Tests/__mocks__/otpauth.js +30 -0
- package/Tests/__mocks__/simplewebauthn.js +34 -0
- package/Tests/__mocks__/styleMock.js +1 -0
- package/Tests/__mocks__/uuid.js +31 -0
- package/Tests/__mocks__/yaml.js +11 -0
- package/Tests/jest.setup.ts +14 -0
- package/UI/Components/AI/AITemplates.ts +226 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +21 -270
- package/build/dist/Server/Services/AIService.js +1 -1
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +59 -2
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +61 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Tests/Server/API/BaseAPI.test.js +7 -2
- package/build/dist/Tests/Server/API/BaseAPI.test.js.map +1 -1
- package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +89 -101
- package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +1 -1
- package/build/dist/Tests/Server/Services/ProbeService.test.js +95 -687
- package/build/dist/Tests/Server/Services/ProbeService.test.js.map +1 -1
- package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +108 -89
- package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +1 -1
- package/build/dist/Tests/Server/Services/TeamMemberService.test.js +85 -924
- package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +1 -1
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +14 -9
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
- package/build/dist/Tests/Server/Utils/Cookie.test.js +10 -4
- package/build/dist/Tests/Server/Utils/Cookie.test.js.map +1 -1
- package/build/dist/Tests/Types/HashedString.test.js +39 -6
- package/build/dist/Tests/Types/HashedString.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/404.test.js +10 -10
- package/build/dist/Tests/UI/Components/404.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +6 -2
- package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Button.test.js +12 -12
- package/build/dist/Tests/UI/Components/Card.test.js +4 -2
- package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/ConfirmModal.test.js +1 -1
- package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Dropdown.test.js +19 -3
- package/build/dist/Tests/UI/Components/Dropdown.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js +46 -41
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/FilePicker.test.js +210 -117
- package/build/dist/Tests/UI/Components/FilePicker.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/List.test.js +3 -1
- package/build/dist/Tests/UI/Components/List.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +6 -5
- package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/MasterPage.test.js +1 -1
- package/build/dist/Tests/UI/Components/MasterPage.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Modal.test.js +5 -5
- package/build/dist/Tests/UI/Components/Modal.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/NavBar.test.js +13 -1
- package/build/dist/Tests/UI/Components/NavBar.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +1 -1
- package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Pagination.test.js +6 -2
- package/build/dist/Tests/UI/Components/Pagination.test.js.map +1 -1
- package/build/dist/Tests/Utils/API.test.js +100 -9
- package/build/dist/Tests/Utils/API.test.js.map +1 -1
- package/build/dist/Tests/jest.setup.js +13 -0
- package/build/dist/Tests/jest.setup.js.map +1 -0
- package/build/dist/UI/Components/AI/AITemplates.js +218 -0
- package/build/dist/UI/Components/AI/AITemplates.js.map +1 -0
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +5 -238
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/jest.config.json +18 -1
- package/package.json +1 -1
|
@@ -6,21 +6,26 @@ import React, {
|
|
|
6
6
|
} from "react";
|
|
7
7
|
import Modal, { ModalWidth } from "../Modal/Modal";
|
|
8
8
|
import AILoader from "./AILoader";
|
|
9
|
-
import
|
|
9
|
+
import Alert, { AlertType } from "../Alerts/Alert";
|
|
10
10
|
import ButtonType from "../Button/ButtonTypes";
|
|
11
11
|
import { ButtonStyleType } from "../Button/Button";
|
|
12
12
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
13
13
|
import Dropdown, { DropdownOption, DropdownValue } from "../Dropdown/Dropdown";
|
|
14
14
|
import MarkdownEditor from "../Markdown.tsx/MarkdownEditor";
|
|
15
15
|
|
|
16
|
+
export interface AITemplate {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
content?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
export interface GenerateFromAIModalProps {
|
|
17
23
|
title: string;
|
|
18
24
|
description?: string;
|
|
19
25
|
onClose: () => void;
|
|
20
26
|
onGenerate: (data: GenerateAIRequestData) => Promise<string>;
|
|
21
27
|
onSuccess: (generatedContent: string) => void;
|
|
22
|
-
templates
|
|
23
|
-
noteType?: NoteType; // Type of note being generated (determines default templates)
|
|
28
|
+
templates: Array<AITemplate>;
|
|
24
29
|
}
|
|
25
30
|
|
|
26
31
|
export interface GenerateAIRequestData {
|
|
@@ -28,278 +33,19 @@ export interface GenerateAIRequestData {
|
|
|
28
33
|
templateId?: string;
|
|
29
34
|
}
|
|
30
35
|
|
|
31
|
-
// Template categories for different note types
|
|
32
|
-
export type NoteType = "postmortem" | "public-note" | "internal-note";
|
|
33
|
-
|
|
34
|
-
// Default hardcoded templates for incident postmortem
|
|
35
|
-
const POSTMORTEM_TEMPLATES: Array<{
|
|
36
|
-
id: string;
|
|
37
|
-
name: string;
|
|
38
|
-
content: string;
|
|
39
|
-
}> = [
|
|
40
|
-
{
|
|
41
|
-
id: "default-standard",
|
|
42
|
-
name: "Standard Postmortem",
|
|
43
|
-
content: `## Executive Summary
|
|
44
|
-
[Brief overview of the incident, its impact, and resolution]
|
|
45
|
-
|
|
46
|
-
## Incident Timeline
|
|
47
|
-
| Time | Event |
|
|
48
|
-
|------|-------|
|
|
49
|
-
| [Time] | [Event description] |
|
|
50
|
-
|
|
51
|
-
## Root Cause Analysis
|
|
52
|
-
[Detailed analysis of what caused the incident]
|
|
53
|
-
|
|
54
|
-
## Impact Assessment
|
|
55
|
-
- **Duration**: [How long the incident lasted]
|
|
56
|
-
- **Users Affected**: [Number or percentage of affected users]
|
|
57
|
-
- **Services Affected**: [List of affected services]
|
|
58
|
-
|
|
59
|
-
## Resolution
|
|
60
|
-
[Steps taken to resolve the incident]
|
|
61
|
-
|
|
62
|
-
## Action Items
|
|
63
|
-
- [ ] [Action item 1]
|
|
64
|
-
- [ ] [Action item 2]
|
|
65
|
-
- [ ] [Action item 3]
|
|
66
|
-
|
|
67
|
-
## Lessons Learned
|
|
68
|
-
[Key takeaways and improvements identified]`,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
id: "default-detailed",
|
|
72
|
-
name: "Detailed Technical Postmortem",
|
|
73
|
-
content: `## Incident Overview
|
|
74
|
-
**Incident Title**: [Title]
|
|
75
|
-
**Severity**: [P1/P2/P3/P4]
|
|
76
|
-
**Duration**: [Start time] - [End time]
|
|
77
|
-
**Authors**: [Names]
|
|
78
|
-
|
|
79
|
-
## Summary
|
|
80
|
-
[2-3 sentence summary of the incident]
|
|
81
|
-
|
|
82
|
-
## Detection
|
|
83
|
-
- **How was the incident detected?** [Monitoring alert / Customer report / etc.]
|
|
84
|
-
- **Time to detection**: [Duration from start to detection]
|
|
85
|
-
|
|
86
|
-
## Timeline
|
|
87
|
-
| Timestamp | Action | Owner |
|
|
88
|
-
|-----------|--------|-------|
|
|
89
|
-
| [Time] | [What happened] | [Who did it] |
|
|
90
|
-
|
|
91
|
-
## Root Cause
|
|
92
|
-
### Primary Cause
|
|
93
|
-
[Detailed explanation of the root cause]
|
|
94
|
-
|
|
95
|
-
### Contributing Factors
|
|
96
|
-
1. [Factor 1]
|
|
97
|
-
2. [Factor 2]
|
|
98
|
-
|
|
99
|
-
## Impact
|
|
100
|
-
### Customer Impact
|
|
101
|
-
[Description of how customers were affected]
|
|
102
|
-
|
|
103
|
-
### Business Impact
|
|
104
|
-
[Description of business consequences]
|
|
105
|
-
|
|
106
|
-
### Technical Impact
|
|
107
|
-
[Systems and services affected]
|
|
108
|
-
|
|
109
|
-
## Mitigation & Resolution
|
|
110
|
-
### Immediate Actions
|
|
111
|
-
[Steps taken to stop the bleeding]
|
|
112
|
-
|
|
113
|
-
### Permanent Fix
|
|
114
|
-
[Long-term solution implemented]
|
|
115
|
-
|
|
116
|
-
## Prevention
|
|
117
|
-
### What Went Well
|
|
118
|
-
- [Item 1]
|
|
119
|
-
- [Item 2]
|
|
120
|
-
|
|
121
|
-
### What Went Wrong
|
|
122
|
-
- [Item 1]
|
|
123
|
-
- [Item 2]
|
|
124
|
-
|
|
125
|
-
### Where We Got Lucky
|
|
126
|
-
- [Item 1]
|
|
127
|
-
|
|
128
|
-
## Action Items
|
|
129
|
-
| Action | Owner | Priority | Due Date |
|
|
130
|
-
|--------|-------|----------|----------|
|
|
131
|
-
| [Action] | [Name] | [High/Medium/Low] | [Date] |
|
|
132
|
-
|
|
133
|
-
## Appendix
|
|
134
|
-
[Any additional technical details, logs, or graphs]`,
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
id: "default-brief",
|
|
138
|
-
name: "Brief Postmortem",
|
|
139
|
-
content: `## What Happened
|
|
140
|
-
[Concise description of the incident]
|
|
141
|
-
|
|
142
|
-
## Why It Happened
|
|
143
|
-
[Root cause explanation]
|
|
144
|
-
|
|
145
|
-
## How We Fixed It
|
|
146
|
-
[Resolution steps]
|
|
147
|
-
|
|
148
|
-
## How We Prevent It
|
|
149
|
-
- [ ] [Prevention action 1]
|
|
150
|
-
- [ ] [Prevention action 2]`,
|
|
151
|
-
},
|
|
152
|
-
];
|
|
153
|
-
|
|
154
|
-
// Default templates for public notes (customer-facing)
|
|
155
|
-
const PUBLIC_NOTE_TEMPLATES: Array<{
|
|
156
|
-
id: string;
|
|
157
|
-
name: string;
|
|
158
|
-
content: string;
|
|
159
|
-
}> = [
|
|
160
|
-
{
|
|
161
|
-
id: "public-status-update",
|
|
162
|
-
name: "Status Update",
|
|
163
|
-
content: `## Current Status
|
|
164
|
-
[Brief description of the current situation]
|
|
165
|
-
|
|
166
|
-
## What We're Doing
|
|
167
|
-
[Actions being taken to resolve the issue]
|
|
168
|
-
|
|
169
|
-
## Next Update
|
|
170
|
-
[Expected time for next update or resolution]`,
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
id: "public-resolution",
|
|
174
|
-
name: "Resolution Notice",
|
|
175
|
-
content: `## Issue Resolved
|
|
176
|
-
[Brief description of what was resolved]
|
|
177
|
-
|
|
178
|
-
## Summary
|
|
179
|
-
[What happened and how it was fixed]
|
|
180
|
-
|
|
181
|
-
## Prevention
|
|
182
|
-
[Steps taken to prevent recurrence]
|
|
183
|
-
|
|
184
|
-
Thank you for your patience.`,
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
id: "public-maintenance",
|
|
188
|
-
name: "Maintenance Update",
|
|
189
|
-
content: `## Maintenance Status
|
|
190
|
-
[Current phase of the maintenance]
|
|
191
|
-
|
|
192
|
-
## Progress
|
|
193
|
-
[What has been completed]
|
|
194
|
-
|
|
195
|
-
## Remaining Work
|
|
196
|
-
[What still needs to be done]
|
|
197
|
-
|
|
198
|
-
## Expected Completion
|
|
199
|
-
[Estimated completion time]`,
|
|
200
|
-
},
|
|
201
|
-
];
|
|
202
|
-
|
|
203
|
-
// Default templates for internal notes (team-facing)
|
|
204
|
-
const INTERNAL_NOTE_TEMPLATES: Array<{
|
|
205
|
-
id: string;
|
|
206
|
-
name: string;
|
|
207
|
-
content: string;
|
|
208
|
-
}> = [
|
|
209
|
-
{
|
|
210
|
-
id: "internal-investigation",
|
|
211
|
-
name: "Investigation Update",
|
|
212
|
-
content: `## Current Investigation Status
|
|
213
|
-
[What we're looking at]
|
|
214
|
-
|
|
215
|
-
## Findings So Far
|
|
216
|
-
- [Finding 1]
|
|
217
|
-
- [Finding 2]
|
|
218
|
-
|
|
219
|
-
## Hypothesis
|
|
220
|
-
[Current theory about the root cause]
|
|
221
|
-
|
|
222
|
-
## Next Steps
|
|
223
|
-
- [ ] [Action 1]
|
|
224
|
-
- [ ] [Action 2]`,
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
id: "internal-technical",
|
|
228
|
-
name: "Technical Analysis",
|
|
229
|
-
content: `## Technical Details
|
|
230
|
-
[Detailed technical observations]
|
|
231
|
-
|
|
232
|
-
## Metrics/Logs
|
|
233
|
-
[Relevant metrics or log entries]
|
|
234
|
-
|
|
235
|
-
## Impact Assessment
|
|
236
|
-
[Technical impact analysis]
|
|
237
|
-
|
|
238
|
-
## Recommendations
|
|
239
|
-
[Technical recommendations for resolution]`,
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
id: "internal-handoff",
|
|
243
|
-
name: "Shift Handoff",
|
|
244
|
-
content: `## Current State
|
|
245
|
-
[Where things stand now]
|
|
246
|
-
|
|
247
|
-
## Actions Taken
|
|
248
|
-
[What has been done so far]
|
|
249
|
-
|
|
250
|
-
## Open Questions
|
|
251
|
-
[Things that still need investigation]
|
|
252
|
-
|
|
253
|
-
## Immediate Priorities
|
|
254
|
-
- [ ] [Priority 1]
|
|
255
|
-
- [ ] [Priority 2]
|
|
256
|
-
|
|
257
|
-
## Contacts
|
|
258
|
-
[Key people involved or to contact]`,
|
|
259
|
-
},
|
|
260
|
-
];
|
|
261
|
-
|
|
262
|
-
// Function to get default templates based on note type
|
|
263
|
-
const getDefaultTemplates: (
|
|
264
|
-
noteType: NoteType,
|
|
265
|
-
) => Array<{ id: string; name: string; content: string }> = (
|
|
266
|
-
noteType: NoteType,
|
|
267
|
-
): Array<{ id: string; name: string; content: string }> => {
|
|
268
|
-
switch (noteType) {
|
|
269
|
-
case "postmortem":
|
|
270
|
-
return POSTMORTEM_TEMPLATES;
|
|
271
|
-
case "public-note":
|
|
272
|
-
return PUBLIC_NOTE_TEMPLATES;
|
|
273
|
-
case "internal-note":
|
|
274
|
-
return INTERNAL_NOTE_TEMPLATES;
|
|
275
|
-
default:
|
|
276
|
-
return POSTMORTEM_TEMPLATES;
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
|
|
280
36
|
const GenerateFromAIModal: FunctionComponent<GenerateFromAIModalProps> = (
|
|
281
37
|
props: GenerateFromAIModalProps,
|
|
282
38
|
): ReactElement => {
|
|
283
|
-
// Get default templates based on note type
|
|
284
|
-
const defaultTemplates: Array<{ id: string; name: string; content: string }> =
|
|
285
|
-
getDefaultTemplates(props.noteType || "postmortem");
|
|
286
|
-
|
|
287
39
|
const [isGenerating, setIsGenerating] = useState<boolean>(false);
|
|
288
40
|
const [error, setError] = useState<string>("");
|
|
289
41
|
const [selectedTemplateId, setSelectedTemplateId] = useState<string>(
|
|
290
|
-
|
|
42
|
+
props.templates[0]?.id || "",
|
|
291
43
|
);
|
|
292
44
|
const [templateContent, setTemplateContent] = useState<string>("");
|
|
293
45
|
|
|
294
|
-
// Combine default templates with custom templates
|
|
295
|
-
const allTemplates: Array<{ id: string; name: string; content?: string }> = [
|
|
296
|
-
...defaultTemplates,
|
|
297
|
-
...(props.templates || []),
|
|
298
|
-
];
|
|
299
|
-
|
|
300
46
|
// Build dropdown options
|
|
301
|
-
const templateOptions: Array<DropdownOption> =
|
|
302
|
-
(template:
|
|
47
|
+
const templateOptions: Array<DropdownOption> = props.templates.map(
|
|
48
|
+
(template: AITemplate) => {
|
|
303
49
|
return {
|
|
304
50
|
label: template.name,
|
|
305
51
|
value: template.id,
|
|
@@ -310,10 +56,8 @@ const GenerateFromAIModal: FunctionComponent<GenerateFromAIModalProps> = (
|
|
|
310
56
|
// Update template content when selection changes
|
|
311
57
|
useEffect(() => {
|
|
312
58
|
if (selectedTemplateId) {
|
|
313
|
-
const selectedTemplate:
|
|
314
|
-
|
|
315
|
-
| undefined = allTemplates.find(
|
|
316
|
-
(t: { id: string; name: string; content?: string }) => {
|
|
59
|
+
const selectedTemplate: AITemplate | undefined = props.templates.find(
|
|
60
|
+
(t: AITemplate) => {
|
|
317
61
|
return t.id === selectedTemplateId;
|
|
318
62
|
},
|
|
319
63
|
);
|
|
@@ -371,7 +115,14 @@ const GenerateFromAIModal: FunctionComponent<GenerateFromAIModalProps> = (
|
|
|
371
115
|
icon={IconProp.Bolt}
|
|
372
116
|
>
|
|
373
117
|
<>
|
|
374
|
-
{error &&
|
|
118
|
+
{error && (
|
|
119
|
+
<Alert
|
|
120
|
+
type={AlertType.DANGER}
|
|
121
|
+
strongTitle="Error"
|
|
122
|
+
title={error}
|
|
123
|
+
className="mb-4"
|
|
124
|
+
/>
|
|
125
|
+
)}
|
|
375
126
|
|
|
376
127
|
{isGenerating && <AILoader />}
|
|
377
128
|
|
|
@@ -89,7 +89,7 @@ export class Service extends BaseService {
|
|
|
89
89
|
data: logEntry,
|
|
90
90
|
props: { isRoot: true },
|
|
91
91
|
});
|
|
92
|
-
throw new BadDataException("Insufficient AI balance. Please recharge your AI balance in Project Settings >
|
|
92
|
+
throw new BadDataException("Insufficient AI balance. Please recharge your AI balance in Project Settings > AI Credits.");
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIService.js","sourceRoot":"","sources":["../../../../Server/Services/AIService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AIService.js","sourceRoot":"","sources":["../../../../Server/Services/AIService.ts"],"names":[],"mappings":"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"}
|
|
@@ -261,13 +261,70 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
|
|
|
261
261
|
}
|
|
262
262
|
return { actionType: actionType, actionValue };
|
|
263
263
|
}
|
|
264
|
+
/**
|
|
265
|
+
* Converts markdown tables to HTML tables for Teams MessageCard.
|
|
266
|
+
* Teams MessageCard supports HTML in the text field.
|
|
267
|
+
*/
|
|
268
|
+
static convertMarkdownTablesToHtml(markdown) {
|
|
269
|
+
// Regular expression to match markdown tables
|
|
270
|
+
const tableRegex = /(?:^|\n)((?:\|[^\n]+\|\n)+(?:\|[-:\s|]+\|\n)(?:\|[^\n]+\|\n?)+)/g;
|
|
271
|
+
return markdown.replace(tableRegex, (_match, table) => {
|
|
272
|
+
const lines = table.trim().split("\n");
|
|
273
|
+
if (lines.length < 2) {
|
|
274
|
+
return table;
|
|
275
|
+
}
|
|
276
|
+
// Parse header row
|
|
277
|
+
const headerLine = lines[0] || "";
|
|
278
|
+
const headers = headerLine
|
|
279
|
+
.split("|")
|
|
280
|
+
.map((cell) => {
|
|
281
|
+
return cell.trim();
|
|
282
|
+
})
|
|
283
|
+
.filter((cell) => {
|
|
284
|
+
return cell.length > 0;
|
|
285
|
+
});
|
|
286
|
+
// Skip separator line (line with dashes) and get data rows
|
|
287
|
+
const dataRows = lines.slice(2);
|
|
288
|
+
// Build HTML table
|
|
289
|
+
let html = '<table style="border-collapse: collapse; width: 100%;">';
|
|
290
|
+
// Header row
|
|
291
|
+
html += "<tr>";
|
|
292
|
+
for (const header of headers) {
|
|
293
|
+
html += `<th style="border: 1px solid #ddd; padding: 8px; background-color: #f2f2f2; text-align: left;"><strong>${header}</strong></th>`;
|
|
294
|
+
}
|
|
295
|
+
html += "</tr>";
|
|
296
|
+
// Data rows
|
|
297
|
+
for (const row of dataRows) {
|
|
298
|
+
const cells = row
|
|
299
|
+
.split("|")
|
|
300
|
+
.map((cell) => {
|
|
301
|
+
return cell.trim();
|
|
302
|
+
})
|
|
303
|
+
.filter((cell) => {
|
|
304
|
+
return cell.length > 0;
|
|
305
|
+
});
|
|
306
|
+
if (cells.length === 0) {
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
html += "<tr>";
|
|
310
|
+
for (const cell of cells) {
|
|
311
|
+
html += `<td style="border: 1px solid #ddd; padding: 8px;">${cell}</td>`;
|
|
312
|
+
}
|
|
313
|
+
html += "</tr>";
|
|
314
|
+
}
|
|
315
|
+
html += "</table>";
|
|
316
|
+
return "\n" + html + "\n";
|
|
317
|
+
});
|
|
318
|
+
}
|
|
264
319
|
static buildMessageCardFromMarkdown(markdown) {
|
|
265
|
-
var _a, _b, _c, _d, _e;
|
|
266
320
|
/*
|
|
267
321
|
* Teams MessageCard has limited markdown support. Headings like '##' are not supported
|
|
268
322
|
* and single newlines can collapse. Convert common patterns to a structured card.
|
|
269
323
|
*/
|
|
270
|
-
|
|
324
|
+
var _a, _b, _c, _d, _e;
|
|
325
|
+
// First, convert markdown tables to HTML
|
|
326
|
+
const markdownWithHtmlTables = this.convertMarkdownTablesToHtml(markdown);
|
|
327
|
+
const lines = markdownWithHtmlTables
|
|
271
328
|
.split("\n")
|
|
272
329
|
.map((l) => {
|
|
273
330
|
return l.trim();
|