kushi-agents 4.3.0 → 4.4.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.
- package/package.json +2 -4
- package/plugin/agents/kushi.agent.md +3 -3
- package/plugin/instructions/ado-engagement-tree.instructions.md +1 -1
- package/plugin/instructions/az-auth-conditional.instructions.md +2 -2
- package/plugin/instructions/azure-auth-patterns.instructions.md +8 -8
- package/plugin/instructions/bootstrap-status-format.instructions.md +37 -2
- package/plugin/instructions/cleanup-on-resolution.instructions.md +1 -1
- package/plugin/instructions/crm-bootstrap-discovery.instructions.md +1 -1
- package/plugin/instructions/deferred-retry-on-workiq-fail.instructions.md +155 -0
- package/plugin/instructions/engagement-root-resolution.instructions.md +16 -13
- package/plugin/instructions/evidence-layout-canonical.instructions.md +2 -2
- package/plugin/instructions/identity-resolution.instructions.md +19 -12
- package/plugin/instructions/m365-id-registry.instructions.md +1 -1
- package/plugin/instructions/multi-user-shared-files.instructions.md +87 -0
- package/plugin/instructions/run-reports.instructions.md +1 -1
- package/plugin/instructions/scope-boundaries.instructions.md +4 -4
- package/plugin/instructions/side-by-side-config.instructions.md +23 -17
- package/plugin/instructions/tracking.instructions.md +1 -1
- package/plugin/instructions/workiq-only.instructions.md +6 -4
- package/plugin/lib/Get-KushiConfig.ps1 +214 -0
- package/plugin/prompts/bootstrap.prompt.md +64 -35
- package/plugin/reference-packs/README.md +1 -1
- package/plugin/skills/apply-ado-update/SKILL.md +2 -2
- package/plugin/skills/ask-project/SKILL.md +1 -1
- package/plugin/skills/bootstrap-project/SKILL.md +18 -16
- package/plugin/skills/intro/SKILL.md +2 -2
- package/plugin/skills/propose-ado-update/SKILL.md +4 -4
- package/plugin/skills/pull-ado/SKILL.md +6 -6
- package/plugin/skills/pull-crm/SKILL.md +5 -5
- package/plugin/skills/pull-email/SKILL.md +2 -2
- package/plugin/skills/pull-meetings/SKILL.md +1 -1
- package/plugin/skills/pull-onenote/scripts/recapture-section-url.mjs +2 -1
- package/plugin/skills/pull-onenote/write-snapshot.mjs +2 -1
- package/plugin/skills/pull-sharepoint/SKILL.md +1 -1
- package/plugin/skills/pull-teams/SKILL.md +1 -1
- package/plugin/skills/refresh-project/SKILL.md +21 -1
- package/plugin/skills/self-check/run.ps1 +24 -1
- package/plugin/templates/ado-update/integrations-ado-writes.example.yml +1 -1
- package/plugin/templates/init/azuredevops.template.json +159 -0
- package/plugin/templates/init/dynamics365.template.json +412 -0
- package/plugin/templates/init/m365-auth.template.json +5 -5
- package/{.github/config/m365-mutable.json.example → plugin/templates/init/m365-mutable.example.json} +1 -1
- package/plugin/templates/init/project-integrations.template.yml +2 -2
- package/plugin/templates/init/rsi-program-catalog.template.json +107 -0
- package/plugin/templates/snapshot/onenote-page.template.md +3 -3
- package/src/config-loader.mjs +156 -0
- package/src/constants.mjs +54 -18
- package/src/copy-assets.mjs +0 -76
- package/src/main.mjs +30 -26
- package/src/seed-config.mjs +88 -23
- package/src/seed-config.test.mjs +150 -0
- package/plugin/templates/init/ado-config.template.yml +0 -21
- package/plugin/templates/init/crm-config.template.yml +0 -16
- /package/{.github/config/m365-auth.json.example → plugin/templates/init/m365-auth.example.json} +0 -0
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dynamics365": {
|
|
3
|
+
"baseUrl": "https://iscrm.crm.dynamics.com",
|
|
4
|
+
"entityType": "new_frontierengineeringtriage",
|
|
5
|
+
"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
|
|
6
|
+
"apiVersion": "v9.2",
|
|
7
|
+
"primaryIdAttribute": "new_frontierengineeringtriageid",
|
|
8
|
+
"primaryNameAttribute": "new_title",
|
|
9
|
+
"requestIdAttribute": "new_requestid",
|
|
10
|
+
"customerLookupAttribute": "_new_customer_value",
|
|
11
|
+
"defaultListUrl": "https://iscrm.crm.dynamics.com/main.aspx?appid=833534b8-5db0-4036-a029-4e4e4d7d4315&pagetype=entitylist&etn=new_frontierengineeringtriage&viewid=8d479be6-6561-4f88-8124-64d01647fa12&viewType=1039",
|
|
12
|
+
"allRecordsListUrl": "https://iscrm.crm.dynamics.com/main.aspx?appid=833534b8-5db0-4036-a029-4e4e4d7d4315&pagetype=entitylist&etn=new_frontierengineeringtriage&viewid=f437384f-0622-f111-88b1-00224803a273&viewType=4230",
|
|
13
|
+
"note_defaultListHasFilters": "defaultListUrl may show only active records. Always use Dataverse API with no statecode filter for record resolution to include inactive/withdrawn/closed records.",
|
|
14
|
+
"profileFieldMap": {
|
|
15
|
+
"title": "new_title",
|
|
16
|
+
"businessScenarioTechnicalBlocker": "new_businessscenariotechnicalblocker",
|
|
17
|
+
"technicalLandscape": "new_technicallandscape",
|
|
18
|
+
"workCompletedSoFar": "new_workcompletedsofar",
|
|
19
|
+
"successCriteria": "new_successcriteria",
|
|
20
|
+
"engagedWith": "new_engagedwith",
|
|
21
|
+
"currentSolutionsNotSuitable": "new_currentsolutionsnotsuitableforneeds",
|
|
22
|
+
"requestId": "new_requestid",
|
|
23
|
+
"submittedOn": "new_submittedon",
|
|
24
|
+
"createdOn": "createdon",
|
|
25
|
+
"modifiedOn": "modifiedon",
|
|
26
|
+
"industry": "new_industryalignment",
|
|
27
|
+
"offerSelected": "new_selectedoffer",
|
|
28
|
+
"ecifStatus": "new_ecifstatus",
|
|
29
|
+
"primaryTeamLeadLookup": "_new_fdelead_value",
|
|
30
|
+
"secondaryTeamLeadLookup": "_new_secondaryteamlead_value",
|
|
31
|
+
"serviceDeliveryLeadLookup": "_new_servicedeliverylead_value",
|
|
32
|
+
"preferredContactLookup": "_new_preferredcontact_value",
|
|
33
|
+
"submitterLookup": "_new_submitternew_value",
|
|
34
|
+
"customerLookup": "_new_customer_value",
|
|
35
|
+
"stateCode": "statecode",
|
|
36
|
+
"statusCode": "statuscode"
|
|
37
|
+
},
|
|
38
|
+
"crmSchema": {
|
|
39
|
+
"entity": {
|
|
40
|
+
"name": "new_frontierengineeringtriage",
|
|
41
|
+
"displayName": "Frontier Engineering Triage",
|
|
42
|
+
"description": "Customer engagement records tracking frontier technology initiatives"
|
|
43
|
+
},
|
|
44
|
+
"primaryFields": [
|
|
45
|
+
{
|
|
46
|
+
"crmField": "new_requestid",
|
|
47
|
+
"displayName": "Record Name/ID",
|
|
48
|
+
"type": "text",
|
|
49
|
+
"searchable": true,
|
|
50
|
+
"description": "Unique request identifier for the engagement record"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"crmField": "_new_customer_value",
|
|
54
|
+
"displayName": "Customer/Company",
|
|
55
|
+
"type": "lookup",
|
|
56
|
+
"targetEntity": "account",
|
|
57
|
+
"searchable": true,
|
|
58
|
+
"keywords": ["customer", "company", "account", "organization"],
|
|
59
|
+
"description": "Customer account lookup; use the formatted value for the display name when available"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"crmField": "_new_fdelead_value",
|
|
63
|
+
"displayName": "Primary Team Lead",
|
|
64
|
+
"type": "lookup",
|
|
65
|
+
"targetEntity": "systemuser",
|
|
66
|
+
"searchable": true,
|
|
67
|
+
"keywords": ["primary lead", "primary", "lead", "is primary", "primary for"],
|
|
68
|
+
"description": "Primary Microsoft account executive leading the engagement"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"crmField": "_new_secondaryteamlead_value",
|
|
72
|
+
"displayName": "Secondary Team Lead",
|
|
73
|
+
"type": "lookup",
|
|
74
|
+
"targetEntity": "systemuser",
|
|
75
|
+
"searchable": true,
|
|
76
|
+
"keywords": ["secondary lead", "secondary", "is secondary", "secondary for"],
|
|
77
|
+
"description": "Secondary lead supporting the primary"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"crmField": "_new_servicedeliverylead_value",
|
|
81
|
+
"displayName": "Service Delivery Lead",
|
|
82
|
+
"type": "lookup",
|
|
83
|
+
"targetEntity": "systemuser",
|
|
84
|
+
"searchable": true,
|
|
85
|
+
"keywords": ["service delivery lead", "service delivery", "delivery lead"],
|
|
86
|
+
"description": "Lead responsible for service delivery execution"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"crmField": "new_assignedteam",
|
|
90
|
+
"displayName": "Assigned Team",
|
|
91
|
+
"type": "text",
|
|
92
|
+
"searchable": true,
|
|
93
|
+
"description": "Team assigned to the engagement"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"crmField": "statuscode",
|
|
97
|
+
"displayName": "Status",
|
|
98
|
+
"type": "optionset",
|
|
99
|
+
"values": ["Active", "On Hold", "Completed", "Lost", "Discovered", "Pending Approval"],
|
|
100
|
+
"searchable": true,
|
|
101
|
+
"keywords": ["status", "statuses", "stage", "stages", "phase", "phases", "new", "intake review", "triage", "tech assessment", "is", "are"],
|
|
102
|
+
"description": "Current engagement status"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"crmField": "statecode",
|
|
106
|
+
"displayName": "State",
|
|
107
|
+
"type": "optionset",
|
|
108
|
+
"values": ["Active", "Inactive"],
|
|
109
|
+
"searchable": false,
|
|
110
|
+
"description": "Active/Inactive state (0=Active, 1=Inactive)"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"crmField": "new_selectedoffer",
|
|
114
|
+
"displayName": "Selected Service/Offer",
|
|
115
|
+
"type": "text",
|
|
116
|
+
"searchable": true,
|
|
117
|
+
"keywords": ["offer", "offering", "service", "service offering"],
|
|
118
|
+
"description": "Selected Microsoft service offering (e.g., CopilotPro, Copilot for Microsoft 365)"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"crmField": "new_deliverytype",
|
|
122
|
+
"displayName": "Delivery Type",
|
|
123
|
+
"type": "text",
|
|
124
|
+
"searchable": true,
|
|
125
|
+
"keywords": ["delivery type", "delivery"],
|
|
126
|
+
"description": "Type of delivery engagement"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"crmField": "new_industryalignment",
|
|
130
|
+
"displayName": "Industry Alignment",
|
|
131
|
+
"type": "text",
|
|
132
|
+
"searchable": true,
|
|
133
|
+
"keywords": ["industry", "vertical"],
|
|
134
|
+
"description": "Industry vertical alignment"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"crmField": "new_regionalignment",
|
|
138
|
+
"displayName": "Region Alignment",
|
|
139
|
+
"type": "text",
|
|
140
|
+
"searchable": true,
|
|
141
|
+
"keywords": ["region", "geography", "geographical"],
|
|
142
|
+
"description": "Geographic region for the engagement"
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"detailFields": [
|
|
146
|
+
{
|
|
147
|
+
"crmField": "new_customerexecutivesponsor",
|
|
148
|
+
"displayName": "Customer Executive Sponsor",
|
|
149
|
+
"type": "text",
|
|
150
|
+
"description": "Customer-side executive sponsor"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"crmField": "new_customerexecutivesponsortitle",
|
|
154
|
+
"displayName": "Customer Executive Sponsor Title",
|
|
155
|
+
"type": "text",
|
|
156
|
+
"description": "Title of the customer executive sponsor"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"crmField": "_new_preferredcontact_value",
|
|
160
|
+
"displayName": "Preferred Contact",
|
|
161
|
+
"type": "lookup",
|
|
162
|
+
"targetEntity": "contact",
|
|
163
|
+
"description": "Preferred customer contact person"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"crmField": "new_engagedwith",
|
|
167
|
+
"displayName": "Engaged With",
|
|
168
|
+
"type": "text",
|
|
169
|
+
"description": "Internal teams/people engaged on this opportunity"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"crmField": "new_businessscenariotechnicalblocker",
|
|
173
|
+
"displayName": "Business Scenario/Technical Blocker",
|
|
174
|
+
"type": "text",
|
|
175
|
+
"description": "Description of business scenario or technical challenges"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"crmField": "new_currentsolutionsnotsuitableforneeds",
|
|
179
|
+
"displayName": "Current Solutions Not Suitable",
|
|
180
|
+
"type": "text",
|
|
181
|
+
"description": "Why current solutions don't meet customer needs"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"crmField": "new_technicallandscape",
|
|
185
|
+
"displayName": "Technical Landscape",
|
|
186
|
+
"type": "text",
|
|
187
|
+
"description": "Summary of customer's current technical environment"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"crmField": "new_workcompletedsofar",
|
|
191
|
+
"displayName": "Work Completed So Far",
|
|
192
|
+
"type": "text",
|
|
193
|
+
"description": "Progress/work completed in this engagement"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"crmField": "new_successcriteria",
|
|
197
|
+
"displayName": "Success Criteria",
|
|
198
|
+
"type": "text",
|
|
199
|
+
"description": "Customer-defined success criteria for the engagement"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"crmField": "new_customergotoproductionplan",
|
|
203
|
+
"displayName": "Customer Go-To-Production Plan",
|
|
204
|
+
"type": "text",
|
|
205
|
+
"description": "Plan for moving to production"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"crmField": "new_customerdevelopmentteamready",
|
|
209
|
+
"displayName": "Customer Development Team Ready",
|
|
210
|
+
"type": "optionset",
|
|
211
|
+
"values": ["Yes", "No", "Partially Ready"],
|
|
212
|
+
"description": "Is customer's development team ready"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"crmField": "new_isfdeinvolvementneeded",
|
|
216
|
+
"displayName": "FDE Involvement Needed",
|
|
217
|
+
"type": "optionset",
|
|
218
|
+
"values": ["Yes", "No", "TBD"],
|
|
219
|
+
"description": "Whether Frontier Data Engineering involvement is needed"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"crmField": "new_followupscopingcall",
|
|
223
|
+
"displayName": "Follow-up Scoping Call",
|
|
224
|
+
"type": "optionset",
|
|
225
|
+
"values": ["Yes", "No", "Scheduled"],
|
|
226
|
+
"description": "Whether a follow-up scoping call is needed"
|
|
227
|
+
}
|
|
228
|
+
],
|
|
229
|
+
"systemFields": [
|
|
230
|
+
{
|
|
231
|
+
"crmField": "createdby",
|
|
232
|
+
"displayName": "Created By",
|
|
233
|
+
"type": "lookup",
|
|
234
|
+
"targetEntity": "systemuser",
|
|
235
|
+
"description": "User who created the record"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"crmField": "createdon",
|
|
239
|
+
"displayName": "Created On",
|
|
240
|
+
"type": "datetime",
|
|
241
|
+
"description": "Date and time record was created"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"crmField": "modifiedby",
|
|
245
|
+
"displayName": "Modified By",
|
|
246
|
+
"type": "lookup",
|
|
247
|
+
"targetEntity": "systemuser",
|
|
248
|
+
"description": "User who last modified the record"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"crmField": "modifiedon",
|
|
252
|
+
"displayName": "Modified On",
|
|
253
|
+
"type": "datetime",
|
|
254
|
+
"description": "Date and time record was last modified"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"crmField": "new_submittedon",
|
|
258
|
+
"displayName": "Submitted On",
|
|
259
|
+
"type": "datetime",
|
|
260
|
+
"description": "When the engagement was initially submitted"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"crmField": "new_laststatuschangedate",
|
|
264
|
+
"displayName": "Last Status Change Date",
|
|
265
|
+
"type": "datetime",
|
|
266
|
+
"description": "When the status was last changed"
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
"fieldMappings": {
|
|
270
|
+
"statuscode": {
|
|
271
|
+
"prop": "status",
|
|
272
|
+
"label": "Status",
|
|
273
|
+
"keywords": ["status", "statuses", "stage", "stages", "phase", "phases", "intake review", "triage", "tech assessment"]
|
|
274
|
+
},
|
|
275
|
+
"new_industryalignment": {
|
|
276
|
+
"prop": "industryAlignment",
|
|
277
|
+
"label": "Industry Alignment",
|
|
278
|
+
"keywords": ["industry", "vertical"]
|
|
279
|
+
},
|
|
280
|
+
"new_regionalignment": {
|
|
281
|
+
"prop": "regionAlignment",
|
|
282
|
+
"label": "Region Alignment",
|
|
283
|
+
"keywords": ["region", "geography", "geographical"]
|
|
284
|
+
},
|
|
285
|
+
"new_selectedoffer": {
|
|
286
|
+
"prop": "selectedOffer",
|
|
287
|
+
"label": "Selected Offer",
|
|
288
|
+
"keywords": ["offer", "offering", "service offer"]
|
|
289
|
+
},
|
|
290
|
+
"new_deliverytype": {
|
|
291
|
+
"prop": "deliveryType",
|
|
292
|
+
"label": "Delivery Type",
|
|
293
|
+
"keywords": ["delivery", "delivery type"]
|
|
294
|
+
},
|
|
295
|
+
"new_assignedteam": {
|
|
296
|
+
"prop": "assignedTeam",
|
|
297
|
+
"label": "Assigned Team",
|
|
298
|
+
"keywords": ["assigned team", "team"]
|
|
299
|
+
},
|
|
300
|
+
"_new_fdelead_value": {
|
|
301
|
+
"prop": "primaryTeamLead",
|
|
302
|
+
"label": "Primary Team Lead",
|
|
303
|
+
"keywords": ["primary lead", "primary team lead"]
|
|
304
|
+
},
|
|
305
|
+
"_new_secondaryteamlead_value": {
|
|
306
|
+
"prop": "secondaryTeamLead",
|
|
307
|
+
"label": "Secondary Team Lead",
|
|
308
|
+
"keywords": ["secondary lead", "secondary team lead"]
|
|
309
|
+
},
|
|
310
|
+
"_new_servicedeliverylead_value": {
|
|
311
|
+
"prop": "serviceDeliveryLead",
|
|
312
|
+
"label": "Service Delivery Lead",
|
|
313
|
+
"keywords": ["service delivery lead", "service lead"]
|
|
314
|
+
},
|
|
315
|
+
"isPrioritized": {
|
|
316
|
+
"prop": "isPrioritized",
|
|
317
|
+
"label": "FY26 Prioritized",
|
|
318
|
+
"keywords": ["prioritized", "priority", "fy26", "prioritization", "prioritised", "high priority", "strategic"]
|
|
319
|
+
},
|
|
320
|
+
"priorityIndustry": {
|
|
321
|
+
"prop": "priorityIndustry",
|
|
322
|
+
"label": "Priority Industry",
|
|
323
|
+
"keywords": []
|
|
324
|
+
},
|
|
325
|
+
"priorityRegion": {
|
|
326
|
+
"prop": "priorityRegion",
|
|
327
|
+
"label": "Priority Region",
|
|
328
|
+
"keywords": []
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
"intentPatterns": {
|
|
332
|
+
"count_records": {
|
|
333
|
+
"runtimeIntent": "ai",
|
|
334
|
+
"keywords": ["how many", "count", "total", "number of"],
|
|
335
|
+
"description": "User wants a count of records matching criteria"
|
|
336
|
+
},
|
|
337
|
+
"status_by_person": {
|
|
338
|
+
"runtimeIntent": "status_by_person",
|
|
339
|
+
"keywords": ["working on", "managing", "leading", "assigned to", "responsible for"],
|
|
340
|
+
"personField": "_new_fdelead_value|_new_secondaryteamlead_value|_new_servicedeliverylead_value",
|
|
341
|
+
"description": "User wants to know what a person is working on or their engagement count"
|
|
342
|
+
},
|
|
343
|
+
"engagement_details": {
|
|
344
|
+
"runtimeIntent": "ai",
|
|
345
|
+
"keywords": ["tell me about", "details on", "information about", "what is the", "describe"],
|
|
346
|
+
"description": "User wants detailed information about specific engagement(s)"
|
|
347
|
+
},
|
|
348
|
+
"engagement_by_lead": {
|
|
349
|
+
"runtimeIntent": "engagement_by_lead",
|
|
350
|
+
"keywords": ["who is", "who's", "who leads", "who is leading", "which lead"],
|
|
351
|
+
"description": "User wants to know who is leading an engagement"
|
|
352
|
+
},
|
|
353
|
+
"notes_today": {
|
|
354
|
+
"runtimeIntent": "notes_today",
|
|
355
|
+
"keywords": ["notes today", "added today", "update today", "notes added"],
|
|
356
|
+
"description": "User wants to see recent notes added today"
|
|
357
|
+
},
|
|
358
|
+
"customer_summary": {
|
|
359
|
+
"runtimeIntent": "customer_summary",
|
|
360
|
+
"keywords": ["customer", "company", "use case", "account"],
|
|
361
|
+
"description": "User wants summary of customer engagement information"
|
|
362
|
+
},
|
|
363
|
+
"ai_fallback": {
|
|
364
|
+
"runtimeIntent": "ai",
|
|
365
|
+
"description": "Question requires AI reasoning beyond structured queries"
|
|
366
|
+
},
|
|
367
|
+
"count_by_field": {
|
|
368
|
+
"runtimeIntent": "count_by_field",
|
|
369
|
+
"keywords": ["by industry", "by region", "by offer", "by delivery", "by status", "by stage", "in each", "per industry", "per region", "how many in", "how many by", "stage 1", "stage 2", "stage 3", "stage 4", "stages 1,2,3,4", "new", "intake review", "triage", "tech assessment"],
|
|
370
|
+
"description": "User wants a count grouped by a specific field (industry, region, offer, delivery type) or filtered to a specific field value such as 'how many in healthcare' or 'count by industry'"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
"deterministicRouting": {
|
|
374
|
+
"rules": [
|
|
375
|
+
{
|
|
376
|
+
"priority": 10,
|
|
377
|
+
"intent": "record_count_with_top_primary_lead",
|
|
378
|
+
"allKeywords": ["primary lead|primary team lead"],
|
|
379
|
+
"anyKeywords": ["in total", "total", "how many records", "record count"],
|
|
380
|
+
"anyAlsoRequired": ["most", "top"],
|
|
381
|
+
"groupByField": "_new_fdelead_value",
|
|
382
|
+
"aggregate": "count"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"priority": 20,
|
|
386
|
+
"intent": "top_primary_leads",
|
|
387
|
+
"allKeywords": ["primary lead|primary team lead"],
|
|
388
|
+
"anyKeywords": ["top", "most", "each", "working on", "engagements", "how many", "number", "count"],
|
|
389
|
+
"groupByField": "_new_fdelead_value",
|
|
390
|
+
"aggregate": "count"
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"priority": 5,
|
|
394
|
+
"intent": "count_by_field",
|
|
395
|
+
"anyKeywords": ["prioritized", "priority", "fy26", "prioritisation", "prioritised"],
|
|
396
|
+
"groupByField": "isPrioritized"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"priority": 30,
|
|
400
|
+
"intent": "status_table_by_person",
|
|
401
|
+
"allKeywords": ["status"],
|
|
402
|
+
"anyKeywords": ["table", "breakdown", "matrix", "group by", "by"],
|
|
403
|
+
"anyAlsoRequired": ["count", "number", "how many"],
|
|
404
|
+
"groupByField": "_new_fdelead_value",
|
|
405
|
+
"secondaryGroupByField": "statuscode",
|
|
406
|
+
"aggregate": "count"
|
|
407
|
+
}
|
|
408
|
+
]
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"dataverse": "https://iscrm.crm.dynamics.com"
|
|
16
16
|
},
|
|
17
17
|
"oneNote": {
|
|
18
|
-
"defaultNotebookName": "",
|
|
19
|
-
"defaultNotebookId": "",
|
|
18
|
+
"defaultNotebookName": "__FILL_ME_IN__",
|
|
19
|
+
"defaultNotebookId": "__FILL_ME_IN__",
|
|
20
20
|
"defaultSectionResolverUrl": "",
|
|
21
21
|
"defaultNotebookRootLink": "",
|
|
22
|
-
"defaultLinkOwner": ""
|
|
22
|
+
"defaultLinkOwner": "__FILL_ME_IN__"
|
|
23
23
|
},
|
|
24
24
|
"emailContext": {
|
|
25
25
|
"enabled": true,
|
|
26
26
|
"dateFloor": "",
|
|
27
|
-
"folders": [],
|
|
27
|
+
"folders": ["__FILL_ME_IN__"],
|
|
28
28
|
"includeSubfolders": true,
|
|
29
29
|
"sourceCoverageLabel": "",
|
|
30
30
|
"matchingPolicy": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
},
|
|
57
57
|
"sharePointContext": {
|
|
58
58
|
"enabled": true,
|
|
59
|
-
"localProjectsRoot": "",
|
|
59
|
+
"localProjectsRoot": "__FILL_ME_IN__",
|
|
60
60
|
"matchingPolicy": {
|
|
61
61
|
"mode": "fuzzy-folder-name",
|
|
62
62
|
"rankingOrder": ["exact", "prefix", "contains"],
|
package/{.github/config/m365-mutable.json.example → plugin/templates/init/m365-mutable.example.json}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"m365Mutable": {
|
|
3
3
|
"metadata": {
|
|
4
4
|
"description": "Mutable M365 operational mappings used to speed and stabilize context retrieval. Copy this file to m365-mutable.json for local use.",
|
|
5
|
-
"defaultNotebookRef": ".
|
|
5
|
+
"defaultNotebookRef": ".kushi/config/user/m365-auth.json -> m365Auth.oneNote.defaultNotebookId",
|
|
6
6
|
"matching": "case-insensitive by project key (exact/prefix/contains)",
|
|
7
7
|
"source": "Derived from project external-links.txt entries, mailbox discovery, and Teams thread discovery during bootstrap/refresh/retry runs."
|
|
8
8
|
},
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
# AND declares the explicit boundaries inside which Kushi is allowed to query.
|
|
4
4
|
#
|
|
5
5
|
# Connection / auth / field mappings are NOT here — those are global at:
|
|
6
|
-
# <
|
|
7
|
-
# <
|
|
6
|
+
# <workspace>/.kushi/config/shared/integrations.yml
|
|
7
|
+
# <workspace>/.kushi/config/shared/integrations.yml
|
|
8
8
|
#
|
|
9
9
|
# Boundaries doctrine: see plugin/instructions/scope-boundaries.instructions.md.
|
|
10
10
|
# Required boundary keys MUST be filled or the source is disabled (not silently widened).
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
{
|
|
2
|
+
"rsiProgramCatalog": {
|
|
3
|
+
"version": "2026-05-08",
|
|
4
|
+
"description": "Committed RSI program-name reference catalog for HLS-related classification during 6Q and report authoring.",
|
|
5
|
+
"classificationGuidance": {
|
|
6
|
+
"directMatch": "Use when the ask clearly aligns to one or more catalog program names.",
|
|
7
|
+
"remoteChance": "Use when the ask has only a weak or partial overlap and should be labeled as a remote chance rather than a direct fit.",
|
|
8
|
+
"none": "If no plausible direct or remote-chance program match exists, mark the classification as None."
|
|
9
|
+
},
|
|
10
|
+
"segments": [
|
|
11
|
+
{
|
|
12
|
+
"segment": "HLS MedTech",
|
|
13
|
+
"programNames": [
|
|
14
|
+
"RSI | [HLS MedTech] AI factory digital twins",
|
|
15
|
+
"RSI | [HLS MedTech] AI-enabled guided selling and customer service",
|
|
16
|
+
"RSI | [HLS MedTech] Augmented device research with optimized data & AI",
|
|
17
|
+
"RSI | [HLS MedTech] Care experience personalization through connected devices",
|
|
18
|
+
"RSI | [HLS MedTech] Connected Devices",
|
|
19
|
+
"RSI | [HLS MedTech] Emerging Use Case",
|
|
20
|
+
"RSI | [HLS MedTech] MedTech Sales and Field Service",
|
|
21
|
+
"RSI | [HLS MedTech] Optimized Supply chain Augmented end to end supply chain management",
|
|
22
|
+
"RSI | [HLS MedTech] Oracle Database on Azure",
|
|
23
|
+
"RSI | [HLS MedTech] SAP on Azure",
|
|
24
|
+
"RSI | [HLS MedTech] Unified Threat and Identity Protection"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"segment": "HLS Payor",
|
|
29
|
+
"programNames": [
|
|
30
|
+
"RSI | [HLS Payor] Accelerate claims administration, prior authorization, billing, and enrollment processes through automation",
|
|
31
|
+
"RSI | [HLS Payor] AI-Powered Contact Center",
|
|
32
|
+
"RSI | [HLS Payor] Care Management",
|
|
33
|
+
"RSI | [HLS Payor] Core Operations Modernization",
|
|
34
|
+
"RSI | [HLS Payor] Defend against ransomware and breaches",
|
|
35
|
+
"RSI | [HLS Payor] Differentiate with integrated and AI-powered cybersecurity",
|
|
36
|
+
"RSI | [HLS Payor] Digital Clinical Quality Measures",
|
|
37
|
+
"RSI | [HLS Payor] Emerging Use Case",
|
|
38
|
+
"RSI | [HLS Payor] Enhance team communication and collaboration across all functional areas (clinical/non-clinical)",
|
|
39
|
+
"RSI | [HLS Payor] Interoperability Platforms",
|
|
40
|
+
"RSI | [HLS Payor] M365 Copilot for Payors",
|
|
41
|
+
"RSI | [HLS Payor] Personalize the Member Experience",
|
|
42
|
+
"RSI | [HLS Payor] Prior Authorization",
|
|
43
|
+
"RSI | [HLS Payor] Protect identities and access",
|
|
44
|
+
"RSI | [HLS Payor] Revenue Cycle Management",
|
|
45
|
+
"RSI | [HLS Payor] TriZetto on Azure",
|
|
46
|
+
"RSI | [HLS Payor] Unify member, provider, and clinical data to enhance member outcomes and drive operational efficiency"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"segment": "HLS Pharma",
|
|
51
|
+
"programNames": [
|
|
52
|
+
"RSI | [HLS Pharma] Agentic Trials Execution",
|
|
53
|
+
"RSI | [HLS Pharma] AI factory digital twins",
|
|
54
|
+
"RSI | [HLS Pharma] AI-enabled guided selling and customer service",
|
|
55
|
+
"RSI | [HLS Pharma] Augmented end to end supply chain management",
|
|
56
|
+
"RSI | [HLS Pharma] Augmented research and drug discovery with optimized data and AI",
|
|
57
|
+
"RSI | [HLS Pharma] Clinical Trials Matching",
|
|
58
|
+
"RSI | [HLS Pharma] Custom Sales Agent",
|
|
59
|
+
"RSI | [HLS Pharma] Emerging Use Case",
|
|
60
|
+
"RSI | [HLS Pharma] Lab Automation",
|
|
61
|
+
"RSI | [HLS Pharma] Optimized Supply chain",
|
|
62
|
+
"RSI | [HLS Pharma] Oracle Database on Azure",
|
|
63
|
+
"RSI | [HLS Pharma] Pharmacovigilance & Drug Safety",
|
|
64
|
+
"RSI | [HLS Pharma] Real-World Evidence",
|
|
65
|
+
"RSI | [HLS Pharma] Regulated Documents Generation",
|
|
66
|
+
"RSI | [HLS Pharma] SAP on Azure",
|
|
67
|
+
"RSI | [HLS Pharma] Scientific Data Mining and Sharing",
|
|
68
|
+
"RSI | [HLS Pharma] Scientific Workflow Automation (MSFT Discovery)",
|
|
69
|
+
"RSI | [HLS Pharma] Streamlined clinical trial development & submission",
|
|
70
|
+
"RSI | [HLS Pharma] Study Protocols",
|
|
71
|
+
"RSI | [HLS Pharma] Trusted Research Environment",
|
|
72
|
+
"RSI | [HLS Pharma] Unified Threat and Identity Protection"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"segment": "HLS Provider",
|
|
77
|
+
"programNames": [
|
|
78
|
+
"RSI | [HLS Provider] Accelerate clinical research and patient care",
|
|
79
|
+
"RSI | [HLS Provider] AI Transformation: Smart Hospitals / Hospital of the Future (including Digital Twin)",
|
|
80
|
+
"RSI | [HLS Provider] Defend against ransomware, breaches, isolated protection",
|
|
81
|
+
"RSI | [HLS Provider] Differentiate with integrated and AI-powered cybersecurity",
|
|
82
|
+
"RSI | [HLS Provider] EHR on Azure: Cloud Migration",
|
|
83
|
+
"RSI | [HLS Provider] EHR on Azure: Developer and testing training environment",
|
|
84
|
+
"RSI | [HLS Provider] EHR on Azure: Isolated protection against ransomware attacks",
|
|
85
|
+
"RSI | [HLS Provider] EHR on Azure: Optimize Operations and Data Insights",
|
|
86
|
+
"RSI | [HLS Provider] Emerging Use Case",
|
|
87
|
+
"RSI | [HLS Provider] Enhance care management with actionable insights",
|
|
88
|
+
"RSI | [HLS Provider] Enhance care team communication and collaboration",
|
|
89
|
+
"RSI | [HLS Provider] Imaging: Accelerate radiology report creation and the discovery of medical insights",
|
|
90
|
+
"RSI | [HLS Provider] Imaging: Cloud Migration",
|
|
91
|
+
"RSI | [HLS Provider] Imaging: Transform image sharing and patient care coordination",
|
|
92
|
+
"RSI | [HLS Provider] Population Health Platforms",
|
|
93
|
+
"RSI | [HLS Provider] Protecting identities and access",
|
|
94
|
+
"RSI | [HLS Provider] Streamline clinical documentation and workflows (Dragon)",
|
|
95
|
+
"RSI | [HLS Provider] Trusted Research Environment"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"segment": "HLS Cross-Segment",
|
|
100
|
+
"programNames": [
|
|
101
|
+
"RSI | [HLS] Personalize patient engagement",
|
|
102
|
+
"RSI | [HLS] Emerging Use Case"
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -20,7 +20,7 @@ captured_at: "<ISO-8601 if captured/user-pasted, else empty>"
|
|
|
20
20
|
- **Capture status:** `<last_status>`
|
|
21
21
|
- **Attempts:** <int>
|
|
22
22
|
- **Last attempt:** <ts>
|
|
23
|
-
- **Source basis:** WorkIQ enumerate + per-page verbatim probe (pull-onenote v2.5.0). Graph `/me/onenote/*` skipped per workspace policy. Per-page retry registry: `.
|
|
23
|
+
- **Source basis:** WorkIQ enumerate + per-page verbatim probe (pull-onenote v2.5.0). Graph `/me/onenote/*` skipped per workspace policy. Per-page retry registry: `.kushi/config/user/m365-mutable.json#knownSections.<projectKey>.one_pages`.
|
|
24
24
|
|
|
25
25
|
<!-- IF last_status == "captured" or "user-pasted" -->
|
|
26
26
|
|
|
@@ -43,7 +43,7 @@ captured_at: "<ISO-8601 if captured/user-pasted, else empty>"
|
|
|
43
43
|
|
|
44
44
|
❌ **page-body-unavailable: WorkIQ returned BODY-NOT-EXPOSED on attempt <N>.**
|
|
45
45
|
|
|
46
|
-
> Per `pull-onenote` v2.5.0 § "Empirical contract": WorkIQ OneNote body retrieval is non-deterministic — the same page may return a body on a later refresh. This page IS registered for retry in `.
|
|
46
|
+
> Per `pull-onenote` v2.5.0 § "Empirical contract": WorkIQ OneNote body retrieval is non-deterministic — the same page may return a body on a later refresh. This page IS registered for retry in `.kushi/config/user/m365-mutable.json#knownSections.<projectKey>.one_pages` and will be re-attempted on every refresh until `last_status` becomes `captured` or `user-pasted`. Inferring the page contents from adjacent emails or chat traffic is forbidden.
|
|
47
47
|
|
|
48
48
|
### next_step
|
|
49
49
|
|
|
@@ -93,5 +93,5 @@ Per `thoroughness-detector.instructions.md`, the writer must tick all that apply
|
|
|
93
93
|
- [ ] If `last_status == captured` or `user-pasted`: AI Narrative Summary (3+ paragraphs) AND verbatim Body section are present and non-empty
|
|
94
94
|
- [ ] If `last_status == BODY-NOT-EXPOSED`: explicit marker, `next_step` block, and metadata table all present; NO inferred or paraphrased body content
|
|
95
95
|
- [ ] If `last_status == enumeration-only`: explicit transient marker present; NO body content of any kind
|
|
96
|
-
- [ ] Page is registered in `.
|
|
96
|
+
- [ ] Page is registered in `.kushi/config/user/m365-mutable.json#knownSections.<projectKey>.one_pages` with matching `last_status` and `attempts`
|
|
97
97
|
- [ ] No fabrication: nothing in this file came from adjacent emails, chats, or other sources to "fill in" what WorkIQ did not return
|