mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 22:56:55 +01:00
* feat(community/agents): add AL agent quality guidance - add 20 agent knowledge rules with good and bad AL samples - clarify setup dialog shape, temporary persistence, permissions, profiles, instructions, capability registration, and interface wiring - add the community-owned AL agents review skill - make review fixture discovery layer-aware with custom, community, and Microsoft precedence - document layer-aware evaluation behavior * fix(community/agents): align setup and permission samples - mark agent setup pages as non-extensible where required - narrow the agent profile by hiding an unrelated sales-order field - define a dedicated read-only permission set for the sales review agent - assign AL-defined permission sets with system scope and the owning app ID - clarify the permission scope guidance for default access controls * Address agent review feedback
41 lines
1.7 KiB
AL
41 lines
1.7 KiB
AL
codeunit 50100 "Sales Review Agent Task"
|
|
{
|
|
procedure AnalyzeAgentTaskMessage(AgentTaskMessage: Record "Agent Task Message"; var Annotations: Record "Agent Annotation")
|
|
var
|
|
AgentMessage: Codeunit "Agent Message";
|
|
EmptyMessageMsg: Label 'Message is empty.';
|
|
EmptyMessageDetailsTxt: Label 'Provide a sales order task before running the agent.';
|
|
NotRelevantMsg: Label 'Message is not a sales order task.';
|
|
NotRelevantDetailsTxt: Label 'Provide a message related to sales order review.';
|
|
MessageText: Text;
|
|
begin
|
|
if AgentTaskMessage.Type = AgentTaskMessage.Type::Output then begin
|
|
AgentMessage.UpdateText(AgentTaskMessage, AgentMessage.GetText(AgentTaskMessage) + #13#10 + #13#10 + 'Written with the help of AI');
|
|
exit;
|
|
end;
|
|
|
|
MessageText := AgentMessage.GetText(AgentTaskMessage);
|
|
if MessageText = '' then begin
|
|
Clear(Annotations);
|
|
Annotations.Code := 'MESSAGE001';
|
|
Annotations.Severity := Annotations.Severity::Error;
|
|
Annotations.Message := EmptyMessageMsg;
|
|
Annotations.Details := EmptyMessageDetailsTxt;
|
|
Annotations.Insert();
|
|
exit;
|
|
end;
|
|
if not IsRelevant(MessageText) then begin
|
|
Clear(Annotations);
|
|
Annotations.Code := 'RELEVANCE001';
|
|
Annotations.Severity := Annotations.Severity::Warning;
|
|
Annotations.Message := NotRelevantMsg;
|
|
Annotations.Details := NotRelevantDetailsTxt;
|
|
Annotations.Insert();
|
|
end;
|
|
end;
|
|
|
|
local procedure IsRelevant(MessageText: Text): Boolean
|
|
begin
|
|
exit(StrPos(LowerCase(MessageText), 'sales order') > 0);
|
|
end;
|
|
}
|