house-lights 1.1.0 → 1.2.0

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 (98) hide show
  1. package/README.md +7 -3
  2. package/cli.mjs +3 -2
  3. package/package.json +4 -3
  4. package/skills/cast-list/assets/VERSION +2 -0
  5. package/skills/cast-list/assets/lesson.html +182 -0
  6. package/skills/cast-list/assets/map.html +244 -0
  7. package/skills/cast-list/examples/LICENSE-microsoft-skills-for-copilot-studio +21 -0
  8. package/skills/cast-list/examples/NOTICE.md +27 -0
  9. package/skills/cast-list/examples/agents/bodega-cupons/actions/ConsultarCuponsAtivos.mcs.yml +34 -0
  10. package/skills/cast-list/examples/agents/bodega-cupons/actions/EnviarCupomEmail.mcs.yml +34 -0
  11. package/skills/cast-list/examples/agents/bodega-cupons/actions/PromocoesMCP.mcs.yml +20 -0
  12. package/skills/cast-list/examples/agents/bodega-cupons/agent.mcs.yml +27 -0
  13. package/skills/cast-list/examples/agents/bodega-cupons/connectionreferences.mcs.yml +17 -0
  14. package/skills/cast-list/examples/agents/bodega-cupons/knowledge/RegulamentoCupons.knowledge.mcs.yml +7 -0
  15. package/skills/cast-list/examples/agents/bodega-cupons/settings.mcs.yml +13 -0
  16. package/skills/cast-list/examples/agents/bodega-cupons/topics/ConsultarRegulamentoCupons.topic.mcs.yml +56 -0
  17. package/skills/cast-list/examples/agents/bodega-cupons/topics/Escalate.topic.mcs.yml +20 -0
  18. package/skills/cast-list/examples/agents/bodega-cupons/topics/Fallback.topic.mcs.yml +32 -0
  19. package/skills/cast-list/examples/agents/bodega-cupons/topics/Greeting.topic.mcs.yml +14 -0
  20. package/skills/cast-list/examples/agents/bodega-cupons/topics/OnError.topic.mcs.yml +48 -0
  21. package/skills/cast-list/examples/agents/bodega-cupons/topics/RecebimentoOrquestrador.topic.mcs.yml +16 -0
  22. package/skills/cast-list/examples/agents/bodega-cupons/variables/CategoriaSolicitacao.mcs.yml +10 -0
  23. package/skills/cast-list/examples/agents/bodega-devolucoes/actions/AbrirSolicitacaoDevolucao.mcs.yml +32 -0
  24. package/skills/cast-list/examples/agents/bodega-devolucoes/agent.mcs.yml +26 -0
  25. package/skills/cast-list/examples/agents/bodega-devolucoes/connectionreferences.mcs.yml +6 -0
  26. package/skills/cast-list/examples/agents/bodega-devolucoes/knowledge/PoliticaTrocasDevolucoes.knowledge.mcs.yml +7 -0
  27. package/skills/cast-list/examples/agents/bodega-devolucoes/settings.mcs.yml +13 -0
  28. package/skills/cast-list/examples/agents/bodega-devolucoes/topics/ConsultarPoliticaDevolucoes.topic.mcs.yml +56 -0
  29. package/skills/cast-list/examples/agents/bodega-devolucoes/topics/Escalate.topic.mcs.yml +20 -0
  30. package/skills/cast-list/examples/agents/bodega-devolucoes/topics/Fallback.topic.mcs.yml +32 -0
  31. package/skills/cast-list/examples/agents/bodega-devolucoes/topics/Greeting.topic.mcs.yml +14 -0
  32. package/skills/cast-list/examples/agents/bodega-devolucoes/topics/OnError.topic.mcs.yml +48 -0
  33. package/skills/cast-list/examples/agents/bodega-devolucoes/topics/RecebimentoOrquestrador.topic.mcs.yml +16 -0
  34. package/skills/cast-list/examples/agents/bodega-devolucoes/variables/CategoriaSolicitacao.mcs.yml +10 -0
  35. package/skills/cast-list/examples/agents/bodega-frete/actions/EnviarOpcoesFrete.mcs.yml +34 -0
  36. package/skills/cast-list/examples/agents/bodega-frete/agent.mcs.yml +26 -0
  37. package/skills/cast-list/examples/agents/bodega-frete/connectionreferences.mcs.yml +6 -0
  38. package/skills/cast-list/examples/agents/bodega-frete/knowledge/TabelaFreteEntregas.knowledge.mcs.yml +7 -0
  39. package/skills/cast-list/examples/agents/bodega-frete/settings.mcs.yml +13 -0
  40. package/skills/cast-list/examples/agents/bodega-frete/topics/ConsultarTabelaFrete.topic.mcs.yml +56 -0
  41. package/skills/cast-list/examples/agents/bodega-frete/topics/Fallback.topic.mcs.yml +31 -0
  42. package/skills/cast-list/examples/agents/bodega-frete/topics/Greeting.topic.mcs.yml +14 -0
  43. package/skills/cast-list/examples/agents/bodega-frete/topics/OnError.topic.mcs.yml +48 -0
  44. package/skills/cast-list/examples/agents/bodega-frete/topics/RecebimentoOrquestrador.topic.mcs.yml +16 -0
  45. package/skills/cast-list/examples/agents/bodega-frete/variables/CategoriaSolicitacao.mcs.yml +10 -0
  46. package/skills/cast-list/examples/agents/bodega-loja-fisica/actions/EnviarInstrucoesRetirada.mcs.yml +34 -0
  47. package/skills/cast-list/examples/agents/bodega-loja-fisica/agent.mcs.yml +27 -0
  48. package/skills/cast-list/examples/agents/bodega-loja-fisica/connectionreferences.mcs.yml +6 -0
  49. package/skills/cast-list/examples/agents/bodega-loja-fisica/knowledge/GuiaLojaFisica.knowledge.mcs.yml +8 -0
  50. package/skills/cast-list/examples/agents/bodega-loja-fisica/settings.mcs.yml +13 -0
  51. package/skills/cast-list/examples/agents/bodega-loja-fisica/topics/ConsultarGuiaLojaFisica.topic.mcs.yml +56 -0
  52. package/skills/cast-list/examples/agents/bodega-loja-fisica/topics/Escalate.topic.mcs.yml +20 -0
  53. package/skills/cast-list/examples/agents/bodega-loja-fisica/topics/Fallback.topic.mcs.yml +32 -0
  54. package/skills/cast-list/examples/agents/bodega-loja-fisica/topics/Greeting.topic.mcs.yml +14 -0
  55. package/skills/cast-list/examples/agents/bodega-loja-fisica/topics/OnError.topic.mcs.yml +43 -0
  56. package/skills/cast-list/examples/agents/bodega-loja-fisica/topics/RecebimentoOrquestrador.topic.mcs.yml +16 -0
  57. package/skills/cast-list/examples/agents/bodega-loja-fisica/variables/CategoriaSolicitacao.mcs.yml +10 -0
  58. package/skills/cast-list/examples/agents/bodega-orquestrador/actions/AgenteCupons.mcs.yml +24 -0
  59. package/skills/cast-list/examples/agents/bodega-orquestrador/actions/AgenteDevolucoes.mcs.yml +24 -0
  60. package/skills/cast-list/examples/agents/bodega-orquestrador/actions/AgenteFrete.mcs.yml +24 -0
  61. package/skills/cast-list/examples/agents/bodega-orquestrador/actions/AgenteLojaFisica.mcs.yml +24 -0
  62. package/skills/cast-list/examples/agents/bodega-orquestrador/actions/AgentePedidos.mcs.yml +24 -0
  63. package/skills/cast-list/examples/agents/bodega-orquestrador/agent.mcs.yml +35 -0
  64. package/skills/cast-list/examples/agents/bodega-orquestrador/agents/SobreBodegaAzul/agent.mcs.yml +32 -0
  65. package/skills/cast-list/examples/agents/bodega-orquestrador/settings.mcs.yml +12 -0
  66. package/skills/cast-list/examples/agents/bodega-orquestrador/topics/ClassificarSolicitacao.topic.mcs.yml +35 -0
  67. package/skills/cast-list/examples/agents/bodega-orquestrador/topics/Escalate.topic.mcs.yml +20 -0
  68. package/skills/cast-list/examples/agents/bodega-orquestrador/topics/Fallback.topic.mcs.yml +32 -0
  69. package/skills/cast-list/examples/agents/bodega-orquestrador/topics/Greeting.topic.mcs.yml +14 -0
  70. package/skills/cast-list/examples/agents/bodega-orquestrador/topics/OnError.topic.mcs.yml +48 -0
  71. package/skills/cast-list/examples/agents/bodega-orquestrador/variables/CategoriaSolicitacao.mcs.yml +9 -0
  72. package/skills/cast-list/examples/agents/bodega-pedidos/actions/EnviarResumoPedido.mcs.yml +34 -0
  73. package/skills/cast-list/examples/agents/bodega-pedidos/agent.mcs.yml +26 -0
  74. package/skills/cast-list/examples/agents/bodega-pedidos/connectionreferences.mcs.yml +6 -0
  75. package/skills/cast-list/examples/agents/bodega-pedidos/knowledge/PoliticasPedidos.knowledge.mcs.yml +7 -0
  76. package/skills/cast-list/examples/agents/bodega-pedidos/settings.mcs.yml +13 -0
  77. package/skills/cast-list/examples/agents/bodega-pedidos/topics/ConsultarPoliticasPedidos.topic.mcs.yml +56 -0
  78. package/skills/cast-list/examples/agents/bodega-pedidos/topics/Escalate.topic.mcs.yml +20 -0
  79. package/skills/cast-list/examples/agents/bodega-pedidos/topics/Fallback.topic.mcs.yml +32 -0
  80. package/skills/cast-list/examples/agents/bodega-pedidos/topics/Greeting.topic.mcs.yml +14 -0
  81. package/skills/cast-list/examples/agents/bodega-pedidos/topics/OnError.topic.mcs.yml +48 -0
  82. package/skills/cast-list/examples/agents/bodega-pedidos/topics/RecebimentoOrquestrador.topic.mcs.yml +16 -0
  83. package/skills/cast-list/examples/agents/bodega-pedidos/variables/CategoriaSolicitacao.mcs.yml +10 -0
  84. package/skills/cast-list/examples/demo.cast.yaml +10 -0
  85. package/skills/cast-list/examples/profile.cast.yaml +15 -0
  86. package/skills/cast-list/references/format.md +50 -0
  87. package/skills/cast-list/references/keys.md +107 -0
  88. package/skills/cast-list/references/profile.md +32 -0
  89. package/skills/cast-list/scripts/browser.mjs +198 -0
  90. package/skills/cast-list/scripts/build.mjs +179 -0
  91. package/skills/cast-list/scripts/engine.mjs +155 -0
  92. package/skills/cast-list/scripts/page.mjs +15 -0
  93. package/skills/cast-list/scripts/read-xlsx.mjs +67 -0
  94. package/skills/cast-list/vendor/microsoft/LICENSE +21 -0
  95. package/skills/cast-list/vendor/microsoft/NOTICE +9 -0
  96. package/skills/cast-list/vendor/microsoft/package.json +1 -0
  97. package/skills/cast-list/vendor/microsoft/reference/bot.schema.yaml-authoring.json +27605 -0
  98. package/skills/cast-list/vendor/microsoft/scripts/schema-lookup.bundle.js +3495 -0
@@ -0,0 +1,244 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="generator" content="cast-list (engine v0.259.0)">
7
+ <meta name="robots" content="noindex">
8
+ <title>cast-list</title>
9
+ <style>/* The cast map: tokens on .cl (not :root) so the PNG, drawn apart, carries them too. */
10
+ .cl {
11
+ --bg: #f6f6f3; --card: #ffffff; --ink: #1d2330; --muted: #5f6878; --line: #e2e4e8; --soft: #f3f4f1;
12
+ --has: #2e7d55; --off: #c8442c; --off-bg: #fde8e3; --said: #b7791f;
13
+ --platform: #2e7d55; --platform-bg: #e3f3ea; --specialist: #3b5bdb; --specialist-bg: #e8edff; --orchestrator: #7b4fc9; --orchestrator-bg: #efe8fb;
14
+ --amber: #8a5a00; --amber-bg: #fff6dc; --amber-line: #f0dca4; --focus: #2f5bea; --active: #1d2330; --on-active: #fff;
15
+ font: 14px/1.45 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; color: var(--ink); background: var(--bg);
16
+ min-height: 100vh; box-sizing: border-box; padding: 24px 16px 40px;
17
+ }
18
+ @media (prefers-color-scheme: dark) {
19
+ .cl:not(.light) {
20
+ --bg: #14171c; --card: #1d2129; --ink: #e8ebf0; --muted: #9aa3b2; --line: #313744; --soft: #23272f;
21
+ --has: #6fcf9a; --off: #ff8a70; --off-bg: #3a221d; --said: #f2c46b;
22
+ --platform: #6fcf9a; --platform-bg: #1c3328; --specialist: #9db0ff; --specialist-bg: #232c4a; --orchestrator: #c6a8ff; --orchestrator-bg: #2e2445;
23
+ --amber: #f2c46b; --amber-bg: #2f2716; --amber-line: #5a4a22; --focus: #8fb0ff; --active: #e8ebf0; --on-active: #14171c;
24
+ }
25
+ }
26
+ body { margin: 0; }
27
+ .cl *, .cl *::before, .cl *::after { box-sizing: border-box; }
28
+ .cl button { font: inherit; color: inherit; cursor: pointer; }
29
+ .cl :focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
30
+ .cl-wrap { max-width: 1280px; margin: 0 auto; display: flex; flex-direction: column; gap: 16px; }
31
+ .cl-wrap > * { min-width: 0; }
32
+ .cl-title { margin: 0; font-size: 24px; line-height: 1.2; }
33
+ .cl-sub { margin: 4px 0 0; color: var(--muted); font-size: 13px; }
34
+ .cl-private { margin: 6px 0 0; font-size: 12px; color: var(--off); }
35
+ .cl-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
36
+ .cl-tab { padding: 6px 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--card); font-size: 13px; }
37
+ .cl-tab[aria-selected="true"] { background: var(--active); color: var(--on-active); border-color: var(--active); }
38
+ .cl-space { flex: 1; }
39
+ .cl-get { padding: 6px 12px; border-radius: 8px; border: 1px solid var(--line); background: var(--card); font-size: 13px; }
40
+ .cl-look { background: var(--amber-bg); border: 1px solid var(--amber-line); border-radius: 12px; padding: 12px 16px; }
41
+ .cl-look h2 { margin: 0 0 6px; font-size: 12px; color: var(--amber); letter-spacing: .06em; text-transform: uppercase; }
42
+ .cl-look ul { margin: 0; padding-left: 18px; }
43
+ .cl-look li { padding: 1px 0; }
44
+ .cl-look button { background: none; border: 0; padding: 0; text-align: left; }
45
+ .cl-look button:hover { text-decoration: underline; }
46
+ .cl-card { background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 16px; }
47
+ .cl-card h2 { margin: 0 0 12px; font-size: 16px; }
48
+ .cl-body { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; align-items: start; }
49
+ @media (min-width: 1180px) { .cl-body.with-detail { grid-template-columns: minmax(0, 1fr) 320px; } }
50
+ .cl-filters { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-bottom: 10px; font-size: 12px; color: var(--muted); }
51
+ .cl-chip { padding: 3px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--card); font-size: 12px; }
52
+ .cl-chip[aria-pressed="true"] { background: var(--active); color: var(--on-active); border-color: var(--active); }
53
+ .cl-scroll { overflow-x: auto; }
54
+ .cl-matrix { border-collapse: collapse; width: 100%; font-size: 13px; background: var(--card); }
55
+ .cl-matrix th, .cl-matrix td { border-bottom: 1px solid var(--line); padding: 7px 8px; }
56
+ .cl-matrix thead th { font-size: 13px; text-align: center; vertical-align: bottom; font-weight: 700; white-space: nowrap; }
57
+ .cl-matrix thead small { display: block; font-weight: 400; color: var(--muted); font-size: 11px; }
58
+ .cl-matrix .cl-dim td { background: var(--soft); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
59
+ .cl-fact { text-align: left; background: none; border: 0; padding: 0; }
60
+ .cl-fact:hover { text-decoration: underline; }
61
+ .cl-fact.picked { color: var(--focus); font-weight: 600; }
62
+ .cl-mark { text-align: center; width: 92px; }
63
+ .cl-mark button { background: none; border: 0; padding: 2px 8px; font-size: 15px; line-height: 1; }
64
+ .cl-mark.has button { color: var(--has); }
65
+ .cl-mark.said button { color: var(--said); }
66
+ .cl-mark.off { background: var(--off-bg); }
67
+ .cl-mark.off button { color: var(--off); font-weight: 700; }
68
+ .cl-badge { display: inline-block; margin-left: 8px; padding: 0 7px; border-radius: 999px; font-size: 11px; border: 1px solid currentColor; white-space: nowrap; }
69
+ .cl-badge.platform { color: var(--platform); background: var(--platform-bg); }
70
+ .cl-badge.specialist { color: var(--specialist); background: var(--specialist-bg); }
71
+ .cl-badge.orchestrator { color: var(--orchestrator); background: var(--orchestrator-bg); }
72
+ .cl-badge.accepted { color: var(--has); }
73
+ .cl-badge.rejected { color: var(--muted); text-decoration: line-through; }
74
+ .cl-legend { margin: 10px 0 0; font-size: 12px; color: var(--muted); }
75
+ .cl-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 10px; }
76
+ .cl-pattern { text-align: left; background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 4px; }
77
+ .cl-pattern:hover, .cl-pattern.picked { border-color: var(--focus); }
78
+ .cl-pattern b { font-size: 14px; }
79
+ .cl-pattern span { font-size: 12.5px; color: var(--muted); }
80
+ .cl-pattern .cl-badge { margin-left: 0; margin-right: 6px; }
81
+ .cl-pattern .cl-lack { color: var(--off); }
82
+ .cl-everyone { margin-top: 14px; font-size: 13px; color: var(--muted); }
83
+ .cl-everyone summary { cursor: pointer; }
84
+ .cl-everyone ul { margin: 8px 0 0; padding-left: 18px; columns: 2 280px; }
85
+ .cl-detail { position: sticky; top: 12px; display: flex; flex-direction: column; gap: 8px; font-size: 13px; }
86
+ .cl-detail h3 { margin: 0; font-size: 17px; }
87
+ .cl-detail code, .cl-agent code { font-size: 12px; color: var(--muted); }
88
+ .cl-detail ul { margin: 0; padding-left: 18px; }
89
+ .cl-detail .cl-file { color: var(--muted); font-size: 12px; word-break: break-all; }
90
+ .cl-kicker { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
91
+ .cl-close { align-self: flex-end; background: none; border: 0; color: var(--muted); }
92
+ .cl-agents { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
93
+ .cl-agent { display: flex; flex-direction: column; gap: 6px; }
94
+ .cl-agent h3 { margin: 0; font-size: 16px; }
95
+ .cl-agent dl { margin: 0; display: grid; grid-template-columns: max-content 1fr; gap: 4px 10px; font-size: 13px; }
96
+ .cl-agent dt { font-weight: 700; color: var(--muted); }
97
+ .cl-agent dd { margin: 0; }
98
+ .cl-agent .cl-lack { color: var(--off); }
99
+ .cl-table { overflow-x: auto; }
100
+ .cl-table table { border-collapse: collapse; font-size: 13px; min-width: 100%; }
101
+ .cl-table th, .cl-table td { border-bottom: 1px solid var(--line); padding: 6px 10px; text-align: left; vertical-align: top; }
102
+ .cl-table th { background: var(--soft); }
103
+ .cl-table a { color: var(--focus); }
104
+ .cl-empty { color: var(--muted); font-style: italic; margin: 0; }
105
+ .cl-foot { font-size: 12px; color: var(--muted); margin: 0; }
106
+ </style>
107
+ </head>
108
+ <body>
109
+ <div class="cl" id="app"></div>
110
+ <script type="application/json" id="cast">{{CAST}}</script>
111
+ <script>(()=>{var B="https://github.com/microsoft/skills-for-copilot-studio/blob/main/patterns",N=[{id:"orchestrator-variables",name:"Orchestrator-Generated Variables",sign:"an OnRecognizedIntent topic with an AutomaticTaskInput that has shouldPromptUser: false"},{id:"rai-error-handling",name:"RAI Error Handling",sign:"the OnError topic reads System.Error.SubCode"},{id:"knowledge-hold-message",name:"Knowledge Hold Message",sign:"an OnKnowledgeRequested topic that sends a message"},{id:"prevent-tool-call-leaks",name:"Prevent Tool Call Leaks",sign:"an OnGeneratedResponse topic that sets System.ContinueResponse"},{id:"dynamic-topic-redirect",name:"Dynamic Topic Redirect",sign:"a BeginDialog whose dialog is a =Switch( expression"},{id:"channel-aware-behavior",name:"Channel-Aware Behavior",sign:"a condition or SetVariable that reads System.Activity.ChannelId (not a tool input)"},{id:"date-context",name:"Date Context",sign:"the instructions use Today() or Now()"},{id:"line-breaks-in-messages",name:"Line Breaks in Messages",sign:"<br /> inside a SendActivity or Question"},{id:"conversation-history-variable",name:"Conversation History Variable"},{id:"chain-of-thought-logging",name:"Chain of Thought Logging"},{id:"deterministic-mcp-calls",name:"Deterministic MCP Calls"},{id:"prevent-child-agent-responses",name:"Prevent Child Agent Responses"},{id:"jit-glossary",name:"JIT Glossary"},{id:"jit-user-context",name:"JIT User Context"},{id:"teams-production-hardening",name:"Teams Production Hardening"}];var R={conversation:{en:"A. Conversation",pt:"A. Conversa"},integrations:{en:"B. Integrations",pt:"B. Integra\xE7\xF5es"},knowledge:{en:"C. Knowledge",pt:"C. Conhecimento"},orchestration:{en:"D. Orchestrator",pt:"D. Orquestrador"},governance:{en:"E. Governance",pt:"E. Governan\xE7a"},microsoft:{en:"Microsoft patterns",pt:"Padr\xF5es Microsoft"},declared:{en:"Declared",pt:"Declarado"}},X={"trigger:OnConversationStart":{dim:"conversation",en:"Greeting",pt:"Boas-vindas"},"trigger:OnUnknownIntent":{dim:"conversation",en:"Fallback (when it does not understand)",pt:"Fallback (quando n\xE3o entende)"},"trigger:OnEscalate":{dim:"conversation",en:"Escalation to a person",pt:"Escalonamento para humano",lacks:{en:["does not escalate to a person","do not escalate to a person"],pt:["n\xE3o escala para humano","n\xE3o escalam para humano"]}},"trigger:OnError":{dim:"conversation",en:"Error handling",pt:"Tratamento de erro",lacks:{en:["does not handle errors","do not handle errors"],pt:["n\xE3o trata erro","n\xE3o tratam erro"]}},"trigger:OnRecognizedIntent":{dim:"conversation",en:"A topic of its own, by intent",pt:"T\xF3pico pr\xF3prio, por inten\xE7\xE3o"},"trigger:OnRedirect":{dim:"orchestration",en:"Takes a call from the orchestrator",pt:"Recebe chamada do orquestrador",lacks:{en:["takes no call from the orchestrator","take no call from the orchestrator"],pt:["n\xE3o recebe chamada do orquestrador","n\xE3o recebem chamada do orquestrador"]}},"trigger:OnSelectIntent":{dim:"conversation",en:"Disambiguation (\xABdid you mean\u2026\xBB)",pt:"Desambigua\xE7\xE3o (\xABvoc\xEA quis dizer\u2026\xBB)"},"trigger:OnSignIn":{dim:"conversation",en:"Sign-in",pt:"Login"},"trigger:OnGeneratedResponse":{dim:"conversation",en:"Reviews the generated answer",pt:"Revisa a resposta gerada"},"trigger:OnKnowledgeRequested":{dim:"knowledge",en:"Before searching knowledge",pt:"Antes de buscar no conhecimento"},"trigger:OnToolSelected":{dim:"orchestration",en:"Child chosen as a tool",pt:"Filho escolhido como ferramenta"},"trigger:OnActivity":{dim:"conversation",en:"On every message",pt:"Em toda mensagem"},"setting:generative=on":{dim:"conversation",en:"Generative orchestration on",pt:"Orquestra\xE7\xE3o generativa ligada"},"setting:generative=off":{dim:"conversation",en:"Generative orchestration off",pt:"Orquestra\xE7\xE3o generativa desligada"},"setting:connectable":{dim:"orchestration",en:"Can be called by an orchestrator",pt:"Pode ser chamado por um orquestrador"},"topics:with-model-description":{dim:"conversation",en:"Topics described for the model",pt:"T\xF3picos descritos para o modelo"},"instructions:present":{dim:"governance",en:"Has instructions",pt:"Tem instru\xE7\xF5es",lacks:{en:["has no instructions","have no instructions"],pt:["n\xE3o tem instru\xE7\xF5es","n\xE3o t\xEAm instru\xE7\xF5es"]}},"node:LogCustomTelemetryEvent":{dim:"governance",en:"Logs telemetry",pt:"Registra telemetria",lacks:{en:["logs no telemetry","log no telemetry"],pt:["n\xE3o registra telemetria","n\xE3o registram telemetria"]}},"node:CSATQuestion":{dim:"governance",en:"Asks for satisfaction (CSAT)",pt:"Pergunta a satisfa\xE7\xE3o (CSAT)",lacks:{en:["does not ask for satisfaction","do not ask for satisfaction"],pt:["n\xE3o pergunta a satisfa\xE7\xE3o","n\xE3o perguntam a satisfa\xE7\xE3o"]}},"node:SearchAndSummarizeContent":{dim:"knowledge",en:"Generative answers from knowledge",pt:"Respostas generativas sobre o conhecimento"},"node:SearchKnowledgeSources":{dim:"knowledge",en:"Searches the knowledge sources",pt:"Busca nas fontes de conhecimento"},"yaml-only:triggerCondition":{dim:"knowledge",en:"Search condition only in YAML (the editor may erase it)",pt:"Condi\xE7\xE3o de busca s\xF3 no YAML (a tela pode apagar)"},"knowledge:SharePointSearchSource":{dim:"knowledge",en:"Knowledge in SharePoint",pt:"Conhecimento no SharePoint"},"declared:kpi":{dim:"declared",en:"KPI declared",pt:"KPI declarado",lacks:{en:["has no KPI declared","have no KPI declared"],pt:["n\xE3o tem KPI declarado","n\xE3o t\xEAm KPI declarado"]}},"declared:owner":{dim:"declared",en:"Owner declared",pt:"Dono declarado",lacks:{en:["has no owner declared","have no owner declared"],pt:["n\xE3o tem dono declarado","n\xE3o t\xEAm dono declarado"]}}},he=Object.fromEntries(N.map(e=>[e.id,e.name])),ge=[["calls:topic:","conversation","Calls the topic","Chama o t\xF3pico"],["trigger:","conversation","Trigger","Gatilho"],["setting:","conversation","Setting","Configura\xE7\xE3o"],["connector:","integrations","Connector","Conector"],["operation:","integrations","Operation","Opera\xE7\xE3o"],["connref:","integrations","Connection reference","Refer\xEAncia de conex\xE3o"],["mcp:","integrations","MCP server","Servidor MCP"],["flow:","integrations","Flow","Fluxo"],["knowledge:","knowledge","Knowledge","Conhecimento"],["node:","governance","Node","N\xF3"],["calls:","orchestration","Calls","Chama"],["child:","orchestration","Child","Filho"],["var-in:","orchestration","Receives from the orchestrator","Recebe do orquestrador"],["var:","orchestration","Global variable","Vari\xE1vel global"],["model:","governance","Model","Modelo"],["auth:","governance","Sign-in","Login"],["ms:","microsoft","Microsoft pattern:","Padr\xE3o Microsoft:"],["declared:","declared","Declared:","Declarado:"]],J=e=>ge.find(([n])=>e.startsWith(n));function A(e){return X[e]?.dim??J(e)?.[1]??"governance"}function j(e,n){let o=X[e];if(o)return o[n];let a=/^knowledge:count=(\d+)$/.exec(e);if(a){let l=Number(a[1]);return n==="pt"?`${l} ${l===1?"fonte":"fontes"} de conhecimento`:`${l} knowledge ${l===1?"source":"sources"}`}let t=J(e);if(!t)return e;let i=e.slice(t[0].length);return t[0]==="ms:"&&(i=he[i]??i),t[0]==="auth:"&&i==="None"?n==="pt"?"Sem login":"No sign-in":`${t[n==="pt"?3:2]} ${i}`}var ue={specialist:{en:["specialist","specialists"],pt:["especialista","especialistas"]},orchestrator:{en:["orchestrator","orchestrators"],pt:["orquestrador","orquestradores"]}},z=(e,n,o)=>ue[e][n][o===1?0:1],U={en:{summary:"Summary",matrix:"Matrix",patterns:"Patterns",off:"Off pattern",gaps:"Gaps",conflicts:"Conflicts",agents:"Cast",evidence:"Evidence",declared:"Declared",unknown:"Not understood",dimension:"Dimension",fact:"Fact",key:"Key",agent:"Who",name:"Name",role:"Role",scope:"Scope",share:"Share",have:"Who has it",lack:"Who lacks it",decision:"Decision",why:"Why",missing:"Missing",accepted:"Accepted pattern",rule:"Rule",says:"Says",notMet:"Who does not meet it",value:"Value",source:"Source",inYaml:"In the YAML",file:"File",line:"Line",facts:"Facts",alone:"Only it has",children:"Children",kind:"Kind",yes:"yes",no:"no",accept:"accepted",reject:"rejected",platform:"platform",specialist:"specialist",orchestrator:"orchestrator",title:"The cast, compared",look:"To look at",nothing:"Nothing to look at",privacy:"This file holds the client\u2019s data: keep it in the client\u2019s environment.",count:{agents:"In the cast",orchestrators:"Orchestrators",specialists:"Specialists",patterns:"Patterns",off:"Off a pattern",gaps:"Rules not met",conflicts:"Conflicts",solos:"Only one has it"},why_:{yaml:"YAML that does not read",empty:"empty",kind:"a kind Copilot Studio does not have",file:"not a Copilot Studio file"}},pt:{summary:"Resumo",matrix:"Matriz",patterns:"Padr\xF5es",off:"Fora do padr\xE3o",gaps:"Lacunas",conflicts:"Conflitos",agents:"Elenco",evidence:"Evid\xEAncias",declared:"Declarado",unknown:"N\xE3o entendeu",dimension:"Dimens\xE3o",fact:"Fato",key:"Chave",agent:"Quem",name:"Nome",role:"Papel",scope:"Escopo",share:"Quantos",have:"Quem tem",lack:"Quem falta",decision:"Decis\xE3o",why:"Por qu\xEA",missing:"Falta",accepted:"Padr\xE3o aceito",rule:"Regra",says:"Diz",notMet:"Quem n\xE3o cumpre",value:"Valor",source:"Fonte",inYaml:"No YAML",file:"Arquivo",line:"Linha",facts:"Fatos",alone:"S\xF3 ele tem",children:"Filhos",kind:"Kind",yes:"sim",no:"n\xE3o",accept:"aceito",reject:"rejeitado",platform:"plataforma",specialist:"especialista",orchestrator:"orquestrador",title:"Elenco comparado",look:"Para olhar",nothing:"Nada para olhar",privacy:"Este arquivo tem dados do cliente: deixe-o no ambiente dele.",count:{agents:"No elenco",orchestrators:"Orquestradores",specialists:"Especialistas",patterns:"Padr\xF5es",off:"Fora do padr\xE3o",gaps:"Regras n\xE3o cumpridas",conflicts:"Conflitos",solos:"S\xF3 um tem"},why_:{yaml:"YAML que n\xE3o se l\xEA",empty:"vazio",kind:"um kind que o Copilot Studio n\xE3o tem",file:"n\xE3o \xE9 arquivo do Copilot Studio"}}};function q(e){let n=o=>o.share===1&&!o.decision&&!e.offPattern.some(a=>a.key===o.key);return{look:e.patterns.filter(o=>!n(o)),everyone:e.patterns.filter(n)}}var Z=new TextEncoder,K=e=>e.replace(/[&<>"]/g,n=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[n]).replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,""),M=e=>e<26?String.fromCharCode(65+e):M(Math.floor(e/26)-1)+String.fromCharCode(65+e%26),ye=e=>e.replace(/[:\\/?*[\]]/g," ").slice(0,31)||"Sheet";function $e(e){let n=[{}],o=f=>JSON.stringify([f.bold??!1,f.fill??"",f.color??"",f.center??!1,f.wrap??!1]),a=new Map([[o({}),0]]);for(let f of e)for(let y of f.rows)for(let u of y){if(typeof u!="object")continue;let{v:P,...C}=u,L=o(C);a.has(L)||(a.set(L,n.length),n.push(C))}let t=new Map([["|",0]]),i=new Map([["",0]]),l=f=>{let y=`${f.bold?"b":""}|${f.color??""}`;return t.has(y)||t.set(y,t.size),t.get(y)},r=f=>f.fill?(i.has(f.fill)||i.set(f.fill,i.size+1),i.get(f.fill)):0,m=n.map(f=>{let y=f.center||f.wrap?`<alignment${f.center?' horizontal="center"':""}${f.wrap?' wrapText="1"':""} vertical="top"/>`:'<alignment vertical="top"/>';return`<xf numFmtId="0" fontId="${l(f)}" fillId="${r(f)}" borderId="${f.fill||f.bold?1:0}" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">${y}</xf>`}),c=[...t.keys()].map(f=>{let[y,u]=f.split("|");return`<font>${y?"<b/>":""}<sz val="11"/>${u?`<color rgb="FF${u}"/>`:""}<name val="Calibri"/><family val="2"/></font>`}),g=['<fill><patternFill patternType="none"/></fill>','<fill><patternFill patternType="gray125"/></fill>',...[...i.keys()].filter(Boolean).map(f=>`<fill><patternFill patternType="solid"><fgColor rgb="FF${f}"/><bgColor indexed="64"/></patternFill></fill>`)];return{xml:`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
112
+ <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
113
+ <fonts count="${c.length}">${c.join("")}</fonts>
114
+ <fills count="${g.length}">${g.join("")}</fills>
115
+ <borders count="2"><border><left/><right/><top/><bottom/><diagonal/></border><border><left style="thin"><color rgb="FFD0D7E2"/></left><right style="thin"><color rgb="FFD0D7E2"/></right><top style="thin"><color rgb="FFD0D7E2"/></top><bottom style="thin"><color rgb="FFD0D7E2"/></bottom><diagonal/></border></borders>
116
+ <cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>
117
+ <cellXfs count="${m.length}">${m.join("")}</cellXfs>
118
+ <cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>
119
+ </styleSheet>`,styleOf:f=>typeof f=="object"?a.get(o((({v:y,...u})=>u)(f)))??0:0}}function ke(e,n){let o=Math.max(e.columns.length,...e.rows.map(m=>m.length),1),a=e.rows.map((m,c)=>{let g=m.map((k,f)=>{let y=`${M(f)}${c+1}`,u=typeof k=="object"?k.v:k,P=n(k),C=P?` s="${P}"`:"";return u===""||u===void 0||u===null?P?`<c r="${y}"${C}/>`:"":typeof u=="number"?`<c r="${y}"${C}><v>${u}</v></c>`:`<c r="${y}"${C} t="inlineStr"><is><t xml:space="preserve">${K(String(u))}</t></is></c>`}).join("");return`<row r="${c+1}">${g}</row>`}),t=`${M(o-1)}${Math.max(1,e.rows.length)}`,i=e.header?'<pane ySplit="1" topLeftCell="A2" activePane="bottomLeft" state="frozen"/><selection pane="bottomLeft" activeCell="A2" sqref="A2"/>':"",l=e.columns.length?`<cols>${e.columns.map((m,c)=>`<col min="${c+1}" max="${c+1}" width="${m.width}" customWidth="1"/>`).join("")}</cols>`:"",r=e.header&&e.rows.length>1?`<autoFilter ref="A1:${M(Math.max(0,e.columns.length-1))}${e.rows.length}"/>`:"";return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
120
+ <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
121
+ <dimension ref="A1:${t}"/><sheetViews><sheetView workbookViewId="0">${i}</sheetView></sheetViews><sheetFormatPr defaultRowHeight="15"/>${l}<sheetData>${a.join("")}</sheetData>${r}
122
+ </worksheet>`}function ee(e){let{xml:n,styleOf:o}=$e(e),a=e.map(l=>ye(l.name)),t=e.map((l,r)=>l.header&&l.rows.length>1?`<definedName name="_xlnm._FilterDatabase" localSheetId="${r}" hidden="1">'${K(a[r]).replace(/'/g,"''")}'!$A$1:$${M(Math.max(0,l.columns.length-1))}$${l.rows.length}</definedName>`:"").join(""),i=[["[Content_Types].xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
123
+ <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>${e.map((l,r)=>`<Override PartName="/xl/worksheets/sheet${r+1}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`).join("")}</Types>`],["_rels/.rels",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
124
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>`],["xl/workbook.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
125
+ <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><bookViews><workbookView/></bookViews><sheets>${a.map((l,r)=>`<sheet name="${K(l)}" sheetId="${r+1}" r:id="rId${r+1}"/>`).join("")}</sheets>${t?`<definedNames>${t}</definedNames>`:""}</workbook>`],["xl/_rels/workbook.xml.rels",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
126
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">${e.map((l,r)=>`<Relationship Id="rId${r+1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet${r+1}.xml"/>`).join("")}<Relationship Id="rId${e.length+1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>`],["xl/styles.xml",n],...e.map((l,r)=>[`xl/worksheets/sheet${r+1}.xml`,ke(l,o)])];return ve(i.map(([l,r])=>[l,Z.encode(r)]))}var be=(()=>{let e=new Uint32Array(256);for(let n=0;n<256;n++){let o=n;for(let a=0;a<8;a++)o=o&1?3988292384^o>>>1:o>>>1;e[n]=o>>>0}return e})();function we(e){let n=4294967295;for(let o=0;o<e.length;o++)n=be[(n^e[o])&255]^n>>>8;return(n^4294967295)>>>0}function ve(e){let n=[],o=[],a=0;for(let[c,g]of e){let k=Z.encode(c),f=we(g),y=new DataView(new ArrayBuffer(30));y.setUint32(0,67324752,!0),y.setUint16(4,20,!0),y.setUint16(6,2048,!0),y.setUint16(8,0,!0),y.setUint32(14,f,!0),y.setUint32(18,g.length,!0),y.setUint32(22,g.length,!0),y.setUint16(26,k.length,!0),n.push(new Uint8Array(y.buffer),k,g);let u=new DataView(new ArrayBuffer(46));u.setUint32(0,33639248,!0),u.setUint16(4,20,!0),u.setUint16(6,20,!0),u.setUint16(8,2048,!0),u.setUint32(16,f,!0),u.setUint32(20,g.length,!0),u.setUint32(24,g.length,!0),u.setUint16(28,k.length,!0),u.setUint32(42,a,!0),o.push(new Uint8Array(u.buffer),k),a+=30+k.length+g.length}let t=o.reduce((c,g)=>c+g.length,0),i=new DataView(new ArrayBuffer(22));i.setUint32(0,101010256,!0),i.setUint16(8,e.length,!0),i.setUint16(10,e.length,!0),i.setUint32(12,t,!0),i.setUint32(16,a,!0);let l=[...n,...o,new Uint8Array(i.buffer)],r=new Uint8Array(l.reduce((c,g)=>c+g.length,0)),m=0;for(let c of l)r.set(c,m),m+=c.length;return r}var ne=e=>ee(e),xe={bold:!0,fill:"E8EEF7"},Se={v:"\u25CF",fill:"DDF3E6",center:!0},Oe={v:"\xD7",fill:"FFD5CC",center:!0,bold:!0},Ce={v:"\u25D0",fill:"FFF3C4",center:!0},te=Object.keys(R);function oe(e,n,o,a="en"){let t=U[a],i=(s,h,S)=>({key:s,name:t[s],header:!0,columns:h.map(([D,I])=>({title:D,width:I})),rows:[h.map(([D])=>({v:D,...xe})),...S]}),l=s=>t[e.roles[s]],r=s=>t[s],m=s=>j(s,a),c=[...e.agents].sort((s,h)=>s.role===h.role?s.id.localeCompare(h.id):s.role==="orchestrator"?-1:1),g=[...new Set([...c.flatMap(s=>Object.keys(s.facts)),...e.patterns.map(s=>s.key)])].sort((s,h)=>te.indexOf(A(s))-te.indexOf(A(h))||s.localeCompare(h)),k=new Set(e.offPattern.map(s=>`${s.agent} ${s.key}`)),f=s=>e.agents.filter(h=>h.role===s).length,y={key:"summary",name:t.summary,header:!1,columns:[{title:"",width:28},{title:"",width:100}],rows:[[{v:e.name??t.title,bold:!0},""],[{v:t.privacy,color:"B42318"},""],[t.count.agents,e.agents.length],[t.count.orchestrators,f("orchestrator")],[t.count.specialists,f("specialist")],[t.count.patterns,e.patterns.length],[t.count.off,new Set(e.offPattern.map(s=>s.agent)).size],[t.count.gaps,e.gaps.length],[t.count.conflicts,e.conflicts.length],[t.count.solos,n.filter(s=>s.key==="solo").length],["",""],[{v:n.length?t.look:t.nothing,bold:!0},""],...n.map(s=>["",{v:s[a],wrap:!0}])]},u=i("matrix",[[t.dimension,18],[t.fact,40],[t.key,34],...c.map(s=>[s.id,14])],g.map(s=>[R[A(s)][a],m(s),s,...c.map(h=>s in h.facts?s.startsWith("declared:")?Ce:Se:k.has(`${h.id} ${s}`)?Oe:"")])),{look:P,everyone:C}=q(e),L=i("patterns",[[t.key,34],[t.fact,40],[t.scope,14],[t.role,14],[t.share,10],[t.have,50],[t.lack,40],[t.decision,12],[t.why,50]],[...P,...C].map(s=>{let h=e.offPattern.filter(S=>S.key===s.key).map(S=>S.agent);return[s.key,m(s.key),r(s.scope),t[s.role],`${Math.round(s.share*100)}%`,s.agents.join(", "),h.join(", "),s.decision?t[s.decision.status==="accepted"?"accept":"reject"]:"",s.decision?.why??""]})),le=i("off",[[t.agent,24],[t.role,14],[t.missing,44],[t.key,34],[t.scope,14],[t.accepted,14]],e.offPattern.map(s=>[s.agent,l(s.agent),m(s.key),s.key,r(s.scope),e.patterns.find(h=>h.key===s.key)?.decision?.status==="accepted"?t.yes:""])),ce=i("gaps",[[t.rule,16],[t.says,50],[t.role,14],[t.notMet,60]],e.gaps.map(s=>[s.rule.id,s.rule.says,t[s.rule.role],s.agents.join(", ")])),de=i("conflicts",[[t.agent,24],[t.fact,40],[t.key,34],[t.declared,20],[t.source,40],[t.inYaml,12]],e.conflicts.map(s=>[s.agent,m(s.key),s.key,s.declared,s.source,s.observed?t.yes:t.no])),pe=i("agents",[[t.agent,24],[t.name,32],[t.role,14],[t.facts,8],[t.off,44],[t.alone,44],[t.children,24],[t.unknown,12]],c.map(s=>[s.id,s.displayName??"",t[s.role],Object.keys(s.facts).length,e.offPattern.filter(h=>h.agent===s.id).map(h=>m(h.key)).join("; "),e.solos.filter(h=>h.agents[0]===s.id).map(h=>m(h.key)).join("; "),s.children.map(h=>h.name).join(", "),e.unknown.filter(h=>h.agent===s.id).length||""])),me=i("evidence",[[t.agent,30],[t.fact,40],[t.key,34],[t.file,50],[t.line,8]],c.flatMap(s=>[{who:s.id,facts:s.facts},...s.children.map(h=>({who:`${s.id} \u203A ${h.name}`,facts:h.facts}))]).flatMap(({who:s,facts:h})=>Object.entries(h).sort(([S],[D])=>S.localeCompare(D)).flatMap(([S,D])=>D.map(I=>[s,m(S),S,I.file,I.line??""])))),fe=i("declared",[[t.agent,24],[t.key,34],[t.value,40],[t.source,40]],o.declared.map(s=>[s.agent,s.key,s.value,s.source])),Q=[y,u,L,le,ce,de,pe,me,fe];return e.unknown.length&&Q.push(i("unknown",[[t.agent,24],[t.file,50],[t.why,40],[t.kind,24]],e.unknown.map(s=>[s.agent,s.file,t.why_[s.why],s.kind??""]))),Q}var Te={en:{map:"Map",patterns:"Patterns",cast:"Cast",microsoft:"Microsoft",unknown:e=>`What the analysis did not understand (${e})`,matrix:"Who has what",candidates:"Patterns to decide",everyone:e=>`Everybody already does it (${e})`,all:"All",role:"Role",focus:"Focus",legend:"\u25CF has it (click for the file) \xB7 \xD7 off a pattern of its role \xB7 \u25D0 declared by people",pattern:"pattern",of:(e,n,o)=>`${e} of ${n} ${o}`,who:"Who has it",lacks:"Off it",none:"nobody",decision:"Decision",toDecide:"to decide \u2014 in the workbook or the cast file",alone:"Only one has it: innovation or debt?",orchestratorDoes:"Only the orchestrator does it",sign:"How cast-list knows",follows:"Who follows it",declaredOnly:"only declared",nothingUnknown:"Everything was understood.",facts:"Facts",off:"Off a pattern",solo:"Only it has",children:"Children",close:"Close \u2715",foot:"The facts come from the YAML files; nothing was made up.",summary:(e,n,o,a,t)=>`${e} in the cast \xB7 ${n} patterns \xB7 ${o} off a pattern \xB7 ${a} only one has \xB7 threshold ${t}% of each role`,excel:"\u2B07 Excel",yaml:"\u2B07 cast.yaml",png:"\u2B07 PNG",name:"Name",said:"declared"},pt:{map:"Mapa",patterns:"Padr\xF5es",cast:"Elenco",microsoft:"Microsoft",unknown:e=>`O que a an\xE1lise n\xE3o entendeu (${e})`,matrix:"Quem tem o qu\xEA",candidates:"Padr\xF5es para decidir",everyone:e=>`Todos j\xE1 fazem (${e})`,all:"Todos",role:"Papel",focus:"Foco",legend:"\u25CF tem (clique para ver o arquivo) \xB7 \xD7 fora de um padr\xE3o do seu papel \xB7 \u25D0 declarado por pessoas",pattern:"padr\xE3o",of:(e,n,o)=>`${e} de ${n} ${o}`,who:"Quem tem",lacks:"Fora",none:"ningu\xE9m",decision:"Decis\xE3o",toDecide:"a decidir \u2014 na planilha ou no cast.yaml",alone:"S\xF3 um tem: inova\xE7\xE3o ou d\xEDvida?",orchestratorDoes:"S\xF3 o orquestrador faz",sign:"Como a cast-list sabe",follows:"Quem segue",declaredOnly:"s\xF3 declarado",nothingUnknown:"Tudo foi entendido.",facts:"Fatos",off:"Fora do padr\xE3o",solo:"S\xF3 ele tem",children:"Filhos",close:"Fechar \u2715",foot:"Os fatos v\xEAm dos arquivos YAML; nada foi inventado.",summary:(e,n,o,a,t)=>`${e} no elenco \xB7 ${n} padr\xF5es \xB7 ${o} fora do padr\xE3o \xB7 ${a} s\xF3 um tem \xB7 limite ${t}% de cada papel`,excel:"\u2B07 Excel",yaml:"\u2B07 cast.yaml",png:"\u2B07 PNG",name:"Nome",said:"declarado"}},b=JSON.parse(document.getElementById("cast").textContent),{result:$,lang:x,looks:F}=b,d=Te[x],v=U[x],Y=oe($,F,b.cast,x);document.documentElement.lang=x==="pt"?"pt-BR":"en";document.title=$.name??b.id;var p=e=>String(e??"").replace(/[&<>"']/g,n=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[n]),T=e=>p(j(e,x)),se=[...$.agents].sort((e,n)=>e.role===n.role?e.id.localeCompare(n.id):e.role==="orchestrator"?-1:1),G=e=>$.patterns.find(n=>n.key===e),ae=e=>$.offPattern.filter(n=>n.key===e).map(n=>n.agent),H=e=>{let n=G(e);if(!n)return"";let o=n.decision?`<span class="cl-badge ${n.decision.status}">${p(v[n.decision.status==="accepted"?"accept":"reject"])}</span>`:"";return`<span class="cl-badge ${n.scope}">${d.pattern} \xB7 ${p(v[n.scope])}</span>${o}`},O="map",w,E="all",_,V=document.getElementById("app");function re(){let e=[["map",d.map],["patterns",d.patterns],["cast",d.cast],["microsoft",d.microsoft],["unknown",d.unknown($.unknown.length)]],n=new Set($.offPattern.map(o=>o.agent)).size;V.innerHTML=`<div class="cl-wrap">
127
+ <header><h1 class="cl-title">${p($.name??b.id)}</h1><p class="cl-sub">${d.summary($.agents.length,$.patterns.length,n,F.filter(o=>o.key==="solo").length,Math.round(b.threshold*100))}</p><p class="cl-private">${p(v.privacy)}</p></header>
128
+ <div class="cl-bar" role="tablist">${e.map(([o,a])=>`<button class="cl-tab" role="tab" aria-selected="${o===O}" data-tab="${o}">${p(a)}</button>`).join("")}
129
+ <span class="cl-space"></span><button class="cl-get" data-get="xlsx">${d.excel}</button><button class="cl-get" data-get="yaml">${d.yaml}</button>${O==="map"?`<button class="cl-get" data-get="png">${d.png}</button>`:""}</div>
130
+ ${O==="map"?De():O==="patterns"?ie(Y.find(o=>o.key==="patterns")):O==="cast"?Pe():O==="microsoft"?Ee():Me()}
131
+ <p class="cl-foot">${d.foot}</p>
132
+ </div>`}function De(){return`${F.length?`<section class="cl-look"><h2>${p(v.look)}</h2><ul>${F.map((n,o)=>`<li><button data-look="${o}">${p(n[x])}</button></li>`).join("")}</ul></section>`:""}<div class="cl-body${w?" with-detail":""}"><div class="cl-wrap" style="gap:16px">${Re()}${Ae()}</div>${w?`<aside class="cl-card cl-detail" aria-live="polite">${je()}</aside>`:""}</div>`}function Re(){let e=se.filter(r=>E==="all"||r.role===E),n=b.focusAreas.find(r=>r.id===_),o=[...new Set([...$.agents.flatMap(r=>Object.keys(r.facts)),...$.patterns.map(r=>r.key)])].filter(r=>!n||n.facts.includes(r)),a=new Set($.offPattern.map(r=>`${r.agent} ${r.key}`)),t=(r,m,c,g)=>`<button class="cl-chip" ${r}="${p(m)}" aria-pressed="${c}">${p(g)}</button>`,i=`<div class="cl-filters">${d.role}: ${t("data-role","all",E==="all",d.all)}${t("data-role","specialist",E==="specialist",v.specialist)}${t("data-role","orchestrator",E==="orchestrator",v.orchestrator)}
133
+ ${b.focusAreas.length?`<span style="margin-left:10px">${d.focus}:</span> ${t("data-focus","",!_,d.all)}${b.focusAreas.map(r=>t("data-focus",r.id,_===r.id,r.name)).join("")}`:""}</div>`,l="";for(let r of Object.keys(R)){let m=o.filter(c=>A(c)===r).sort((c,g)=>j(c,x).localeCompare(j(g,x)));m.length&&(l+=`<tr class="cl-dim"><td colspan="${e.length+1}">${p(R[r][x])}</td></tr>`,l+=m.map(c=>`<tr><th scope="row" style="text-align:left;font-weight:400"><button class="cl-fact${w?.key===c&&!w.agent?" picked":""}" data-key="${p(c)}">${T(c)}</button>${H(c)}</th>${e.map(g=>{let k=c in g.facts?c.startsWith("declared:")?["said","\u25D0"]:["has","\u25CF"]:a.has(`${g.id} ${c}`)?["off","\xD7"]:void 0;return`<td class="cl-mark${k?` ${k[0]}`:""}">${k?`<button data-key="${p(c)}" data-agent="${p(g.id)}" aria-label="${p(g.id)}: ${T(c)}">${k[1]}</button>`:""}</td>`}).join("")}</tr>`).join(""))}return`<section class="cl-card"><h2>${d.matrix}</h2>${i}<div class="cl-scroll"><table class="cl-matrix"><thead><tr><th></th>${e.map(r=>`<th scope="col">${p(r.id)}<small>${p(v[r.role])}</small></th>`).join("")}</tr></thead><tbody>${l}</tbody></table></div><p class="cl-legend">${d.legend}</p></section>`}function Ae(){let{look:e,everyone:n}=q($),o=a=>{let t=G(a),i=$.agents.filter(r=>r.role===t.role).length,l=ae(a);return`<button class="cl-pattern${w?.key===a?" picked":""}" data-pattern="${p(a)}"><b>${T(a)}</b><span>${H(a)} ${d.of(t.agents.filter(r=>$.roles[r]===t.role).length,i,z(t.role,x,i))}</span>
134
+ ${l.length?`<span class="cl-lack">${d.lacks}: ${p(l.join(", "))}</span>`:""}<span>${d.decision}: ${t.decision?`${p(v[t.decision.status==="accepted"?"accept":"reject"])}${t.decision.why?` \u2014 ${p(t.decision.why)}`:""}`:`<i>${d.toDecide}</i>`}</span></button>`};return`<section class="cl-card"><h2>${d.candidates}</h2>${e.length?`<div class="cl-cards">${e.map(a=>o(a.key)).join("")}</div>`:'<p class="cl-empty">\u2014</p>'}
135
+ ${n.length?`<details class="cl-everyone"><summary>${d.everyone(n.length)}</summary><ul>${n.map(a=>`<li><button class="cl-fact" data-pattern="${p(a.key)}">${T(a.key)}</button> <span class="cl-badge ${a.scope}">${p(v[a.scope])}</span></li>`).join("")}</ul></details>`:""}</section>`}function je(){let{key:e,agent:n}=w,o=G(e),t=$.agents.filter(m=>e in m.facts&&(!n||m.id===n)).map(m=>`<li><b>${p(m.id)}</b>${m.facts[e].map(c=>`<div class="cl-file">${p(c.file)}${c.line?`:${c.line}`:""}</div>`).join("")}</li>`).join(""),i=ae(e).filter(m=>!n||m===n),l=$.solos.some(m=>m.key===e),r=$.orchestratorDoes.some(m=>m.key===e);return`<button class="cl-close" data-close="1">${d.close}</button><span class="cl-kicker">${p(R[A(e)][x])}</span><h3>${T(e)}</h3><code>${p(e)}</code>
136
+ ${o?`<div>${H(e)}</div><div>${d.decision}: ${o.decision?`${p(v[o.decision.status==="accepted"?"accept":"reject"])}${o.decision.why?` \u2014 ${p(o.decision.why)}`:""}`:`<i>${d.toDecide}</i>`}</div>`:""}
137
+ ${l?`<div>${d.alone}</div>`:r?`<div>${d.orchestratorDoes}</div>`:""}
138
+ <div><b>${d.who}</b>${t?`<ul>${t}</ul>`:` \u2014 ${d.none}`}</div>
139
+ ${i.length?`<div><b>${d.lacks}</b>: <span style="color:var(--off)">${p(i.join(", "))}</span></div>`:""}`}function Pe(){return`<div class="cl-agents">${se.map(e=>{let n=$.offPattern.filter(t=>t.agent===e.id),o=$.solos.filter(t=>t.agents[0]===e.id),a=$.unknown.filter(t=>t.agent===e.id);return`<section class="cl-card cl-agent"><span class="cl-kicker">${p(v[e.role])}</span><h3>${p(e.id)}</h3>${e.displayName?`<code>${p(e.displayName)}</code>`:""}<dl>
140
+ <dt>${d.facts}</dt><dd>${Object.keys(e.facts).length}</dd>
141
+ ${n.length?`<dt>${d.off}</dt><dd class="cl-lack">${n.map(t=>T(t.key)).join("<br>")}</dd>`:""}
142
+ ${o.length?`<dt>${d.solo}</dt><dd>${o.map(t=>T(t.key)).join("<br>")}</dd>`:""}
143
+ ${e.children.length?`<dt>${d.children}</dt><dd>${e.children.map(t=>`${p(t.name)} <span class="cl-sub">(${Object.keys(t.facts).map(T).join(", ")})</span>`).join("<br>")}</dd>`:""}
144
+ ${a.length?`<dt>${p(v.unknown)}</dt><dd>${a.map(t=>p(t.file)).join("<br>")}</dd>`:""}</dl></section>`}).join("")}</div>`}function Ee(){let e=N.map(n=>{let o=$.agents.filter(a=>`ms:${n.id}`in a.facts||`declared:ms:${n.id}`in a.facts).map(a=>a.id);return`<tr><td><a href="${B}/${n.id}.md" target="_blank" rel="noopener">${p(n.name)}</a></td><td>${p(n.sign??d.declaredOnly)}</td><td>${o.length?p(o.join(", ")):`<span class="cl-sub">${d.none}</span>`}</td></tr>`}).join("");return`<section class="cl-card cl-table"><table><thead><tr><th>${d.microsoft}</th><th>${d.sign}</th><th>${d.follows}</th></tr></thead><tbody>${e}</tbody></table></section>`}function Me(){let e=Y.find(n=>n.key==="unknown");return e?ie(e):`<section class="cl-card"><p class="cl-empty">${d.nothingUnknown}</p></section>`}function ie(e){let n=(t,i)=>{let l=typeof t=="object"&&t?t:{v:t},r=i?"th":"td";return`<${r}${l.fill&&!i?` style="background:#${l.fill};color:#1d2330"`:""}>${p(l.v)}</${r}>`},[o,...a]=e.rows;return`<section class="cl-card cl-table" role="tabpanel"><table><thead><tr>${o.map(t=>n(t,!0)).join("")}</tr></thead><tbody>${a.map(t=>`<tr>${t.map(i=>n(i,!1)).join("")}</tr>`).join("")}</tbody></table></section>`}function W(e,n){let o=document.createElement("a");o.href=URL.createObjectURL(e),o.download=n,o.click(),setTimeout(()=>URL.revokeObjectURL(o.href),1e3)}async function Fe(){let e=V.querySelector(".cl-matrix"),[n,o]=[e.scrollWidth+32,e.scrollHeight+32],a=new XMLSerializer().serializeToString(e).replace(/ picked/g,""),t=`<svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${o}"><foreignObject width="100%" height="100%"><div xmlns="http://www.w3.org/1999/xhtml" class="cl light" style="min-height:0;padding:16px;background:#fff;width:${n}px"><style>/* The cast map: tokens on .cl (not :root) so the PNG, drawn apart, carries them too. */
145
+ .cl {
146
+ --bg: #f6f6f3; --card: #ffffff; --ink: #1d2330; --muted: #5f6878; --line: #e2e4e8; --soft: #f3f4f1;
147
+ --has: #2e7d55; --off: #c8442c; --off-bg: #fde8e3; --said: #b7791f;
148
+ --platform: #2e7d55; --platform-bg: #e3f3ea; --specialist: #3b5bdb; --specialist-bg: #e8edff; --orchestrator: #7b4fc9; --orchestrator-bg: #efe8fb;
149
+ --amber: #8a5a00; --amber-bg: #fff6dc; --amber-line: #f0dca4; --focus: #2f5bea; --active: #1d2330; --on-active: #fff;
150
+ font: 14px/1.45 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; color: var(--ink); background: var(--bg);
151
+ min-height: 100vh; box-sizing: border-box; padding: 24px 16px 40px;
152
+ }
153
+ @media (prefers-color-scheme: dark) {
154
+ .cl:not(.light) {
155
+ --bg: #14171c; --card: #1d2129; --ink: #e8ebf0; --muted: #9aa3b2; --line: #313744; --soft: #23272f;
156
+ --has: #6fcf9a; --off: #ff8a70; --off-bg: #3a221d; --said: #f2c46b;
157
+ --platform: #6fcf9a; --platform-bg: #1c3328; --specialist: #9db0ff; --specialist-bg: #232c4a; --orchestrator: #c6a8ff; --orchestrator-bg: #2e2445;
158
+ --amber: #f2c46b; --amber-bg: #2f2716; --amber-line: #5a4a22; --focus: #8fb0ff; --active: #e8ebf0; --on-active: #14171c;
159
+ }
160
+ }
161
+ body { margin: 0; }
162
+ .cl *, .cl *::before, .cl *::after { box-sizing: border-box; }
163
+ .cl button { font: inherit; color: inherit; cursor: pointer; }
164
+ .cl :focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
165
+ .cl-wrap { max-width: 1280px; margin: 0 auto; display: flex; flex-direction: column; gap: 16px; }
166
+ .cl-wrap > * { min-width: 0; }
167
+ .cl-title { margin: 0; font-size: 24px; line-height: 1.2; }
168
+ .cl-sub { margin: 4px 0 0; color: var(--muted); font-size: 13px; }
169
+ .cl-private { margin: 6px 0 0; font-size: 12px; color: var(--off); }
170
+ .cl-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
171
+ .cl-tab { padding: 6px 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--card); font-size: 13px; }
172
+ .cl-tab[aria-selected="true"] { background: var(--active); color: var(--on-active); border-color: var(--active); }
173
+ .cl-space { flex: 1; }
174
+ .cl-get { padding: 6px 12px; border-radius: 8px; border: 1px solid var(--line); background: var(--card); font-size: 13px; }
175
+ .cl-look { background: var(--amber-bg); border: 1px solid var(--amber-line); border-radius: 12px; padding: 12px 16px; }
176
+ .cl-look h2 { margin: 0 0 6px; font-size: 12px; color: var(--amber); letter-spacing: .06em; text-transform: uppercase; }
177
+ .cl-look ul { margin: 0; padding-left: 18px; }
178
+ .cl-look li { padding: 1px 0; }
179
+ .cl-look button { background: none; border: 0; padding: 0; text-align: left; }
180
+ .cl-look button:hover { text-decoration: underline; }
181
+ .cl-card { background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 16px; }
182
+ .cl-card h2 { margin: 0 0 12px; font-size: 16px; }
183
+ .cl-body { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; align-items: start; }
184
+ @media (min-width: 1180px) { .cl-body.with-detail { grid-template-columns: minmax(0, 1fr) 320px; } }
185
+ .cl-filters { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-bottom: 10px; font-size: 12px; color: var(--muted); }
186
+ .cl-chip { padding: 3px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--card); font-size: 12px; }
187
+ .cl-chip[aria-pressed="true"] { background: var(--active); color: var(--on-active); border-color: var(--active); }
188
+ .cl-scroll { overflow-x: auto; }
189
+ .cl-matrix { border-collapse: collapse; width: 100%; font-size: 13px; background: var(--card); }
190
+ .cl-matrix th, .cl-matrix td { border-bottom: 1px solid var(--line); padding: 7px 8px; }
191
+ .cl-matrix thead th { font-size: 13px; text-align: center; vertical-align: bottom; font-weight: 700; white-space: nowrap; }
192
+ .cl-matrix thead small { display: block; font-weight: 400; color: var(--muted); font-size: 11px; }
193
+ .cl-matrix .cl-dim td { background: var(--soft); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
194
+ .cl-fact { text-align: left; background: none; border: 0; padding: 0; }
195
+ .cl-fact:hover { text-decoration: underline; }
196
+ .cl-fact.picked { color: var(--focus); font-weight: 600; }
197
+ .cl-mark { text-align: center; width: 92px; }
198
+ .cl-mark button { background: none; border: 0; padding: 2px 8px; font-size: 15px; line-height: 1; }
199
+ .cl-mark.has button { color: var(--has); }
200
+ .cl-mark.said button { color: var(--said); }
201
+ .cl-mark.off { background: var(--off-bg); }
202
+ .cl-mark.off button { color: var(--off); font-weight: 700; }
203
+ .cl-badge { display: inline-block; margin-left: 8px; padding: 0 7px; border-radius: 999px; font-size: 11px; border: 1px solid currentColor; white-space: nowrap; }
204
+ .cl-badge.platform { color: var(--platform); background: var(--platform-bg); }
205
+ .cl-badge.specialist { color: var(--specialist); background: var(--specialist-bg); }
206
+ .cl-badge.orchestrator { color: var(--orchestrator); background: var(--orchestrator-bg); }
207
+ .cl-badge.accepted { color: var(--has); }
208
+ .cl-badge.rejected { color: var(--muted); text-decoration: line-through; }
209
+ .cl-legend { margin: 10px 0 0; font-size: 12px; color: var(--muted); }
210
+ .cl-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 10px; }
211
+ .cl-pattern { text-align: left; background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 4px; }
212
+ .cl-pattern:hover, .cl-pattern.picked { border-color: var(--focus); }
213
+ .cl-pattern b { font-size: 14px; }
214
+ .cl-pattern span { font-size: 12.5px; color: var(--muted); }
215
+ .cl-pattern .cl-badge { margin-left: 0; margin-right: 6px; }
216
+ .cl-pattern .cl-lack { color: var(--off); }
217
+ .cl-everyone { margin-top: 14px; font-size: 13px; color: var(--muted); }
218
+ .cl-everyone summary { cursor: pointer; }
219
+ .cl-everyone ul { margin: 8px 0 0; padding-left: 18px; columns: 2 280px; }
220
+ .cl-detail { position: sticky; top: 12px; display: flex; flex-direction: column; gap: 8px; font-size: 13px; }
221
+ .cl-detail h3 { margin: 0; font-size: 17px; }
222
+ .cl-detail code, .cl-agent code { font-size: 12px; color: var(--muted); }
223
+ .cl-detail ul { margin: 0; padding-left: 18px; }
224
+ .cl-detail .cl-file { color: var(--muted); font-size: 12px; word-break: break-all; }
225
+ .cl-kicker { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
226
+ .cl-close { align-self: flex-end; background: none; border: 0; color: var(--muted); }
227
+ .cl-agents { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
228
+ .cl-agent { display: flex; flex-direction: column; gap: 6px; }
229
+ .cl-agent h3 { margin: 0; font-size: 16px; }
230
+ .cl-agent dl { margin: 0; display: grid; grid-template-columns: max-content 1fr; gap: 4px 10px; font-size: 13px; }
231
+ .cl-agent dt { font-weight: 700; color: var(--muted); }
232
+ .cl-agent dd { margin: 0; }
233
+ .cl-agent .cl-lack { color: var(--off); }
234
+ .cl-table { overflow-x: auto; }
235
+ .cl-table table { border-collapse: collapse; font-size: 13px; min-width: 100%; }
236
+ .cl-table th, .cl-table td { border-bottom: 1px solid var(--line); padding: 6px 10px; text-align: left; vertical-align: top; }
237
+ .cl-table th { background: var(--soft); }
238
+ .cl-table a { color: var(--focus); }
239
+ .cl-empty { color: var(--muted); font-style: italic; margin: 0; }
240
+ .cl-foot { font-size: 12px; color: var(--muted); margin: 0; }
241
+ </style>${a}</div></foreignObject></svg>`;try{let i=new Image;i.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`,await i.decode();let l=document.createElement("canvas");l.width=n*2,l.height=o*2;let r=l.getContext("2d");r.scale(2,2),r.drawImage(i,0,0);let m=await new Promise(c=>l.toBlob(c,"image/png"));if(!m)throw new Error("no PNG");W(m,`${b.id}.png`)}catch{W(new Blob([t],{type:"image/svg+xml"}),`${b.id}.svg`)}}V.addEventListener("click",e=>{let n=e.target.closest("button");if(!n)return;let o=n.dataset;if(o.tab)O=o.tab;else if(o.role)E=o.role;else if(o.focus!==void 0)_=o.focus||void 0;else if(o.key)w={key:o.key,...o.agent?{agent:o.agent}:{}};else if(o.pattern)w={key:o.pattern};else if(o.close)w=void 0;else if(o.look){let a=F[Number(o.look)];O="map",a.fact&&(w={key:a.fact,...a.agents.length===1?{agent:a.agents[0]}:{}}),(a.key==="off"||a.key==="gap"||a.key==="conflict")&&(w=a.fact?{key:a.fact}:w),a.key==="unknown"&&(O="unknown")}else{if(o.get==="xlsx")return W(new Blob([ne(Y)],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),`${b.id}.xlsx`);if(o.get==="yaml")return W(new Blob([b.castYaml],{type:"text/yaml"}),`${b.id}.cast.yaml`);if(o.get==="png")return void Fe()}re(),(o.key||o.pattern||o.look)&&V.querySelector(".cl-detail")?.scrollIntoView({block:"nearest"})});re();})();
242
+ </script>
243
+ </body>
244
+ </html>
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Microsoft Corporation
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,27 @@
1
+ # Fixtures da cast-list — agentes fictícios
2
+
3
+ Seis agentes do Copilot Studio de uma loja **fictícia** ("Bodega Azul"), no formato de um clone da extensão do
4
+ VS Code, para testar a cast-list. Nenhum dado real de cliente.
5
+
6
+ - Gerados pelo sub-agente Author do plugin **microsoft/skills-for-copilot-studio** (MIT, commit 9c42d3a), a partir dos
7
+ modelos e das fixtures desse repositório (`templates/`, `evals/fixtures/`). Licença em
8
+ `LICENSE-microsoft-skills-for-copilot-studio`.
9
+ - `gen_fixtures.py` regera o conjunto.
10
+ - `EXPECTED.md` é o gabarito: o que cada agente tem. Os testes do extrator devem bater com ele.
11
+
12
+ ## Validação (schema-lookup validate do plugin)
13
+
14
+ - 69 de 75 arquivos passam sem falha.
15
+ - Os 6 `settings.mcs.yml` falham com "No 'kind' property found at root level" — **igual à fixture da própria
16
+ Microsoft** (`evals/fixtures/basic-agent/settings.mcs.yml`). Lição para o extrator: identificar `settings` pelo
17
+ nome do arquivo, não pelo `kind`.
18
+ - O validador completo (o da extensão do VS Code) exige conexão com um ambiente real e não foi rodado.
19
+
20
+ ## Formatos inferidos (não vistos num clone real) — conferir com agentes de um ambiente de teste próprio, fora do cliente
21
+
22
+ Ver a seção de incertezas do `EXPECTED.md`. As principais:
23
+ 1. Orquestrador → especialista conectado: `actions/*.mcs.yml` com `TaskDialog` + `InvokeConnectedAgentTaskAction`.
24
+ 2. Lado do especialista: tópico `OnRedirect` + `isExternalInitializationAllowed` / `isAgentConnectable`.
25
+ 3. Variáveis globais: forma "plana" do modelo do plugin, não a aninhada do esquema.
26
+ 4. `connectionreferences.mcs.yml`: montado pelo esquema, sem exemplo real.
27
+ 5. Sem a pasta oculta `.mcs/` (um clone real tem `.mcs/conn.json` com IDs do ambiente).
@@ -0,0 +1,34 @@
1
+ mcs.metadata:
2
+ componentName: Consultar cupons ativos
3
+ description: Consulta a lista de cupons ativos no SharePoint de Marketing.
4
+ kind: TaskDialog
5
+ inputs:
6
+ - kind: ManualTaskInput
7
+ propertyName: dataset
8
+ value: https://bodegaazul.sharepoint.com/sites/Marketing
9
+
10
+ - kind: ManualTaskInput
11
+ propertyName: table
12
+ value: Cupons
13
+
14
+ - kind: AutomaticTaskInput
15
+ propertyName: "'$filter'"
16
+ description: "Filtro OData pela coluna Codigo com o código informado pelo cliente, em maiúsculas. Exemplo: Codigo eq 'AZUL10'"
17
+ entity: StringPrebuiltEntity
18
+ shouldPromptUser: false
19
+
20
+ - kind: ManualTaskInput
21
+ propertyName: "'$top'"
22
+ value: "10"
23
+
24
+ modelDisplayName: Consultar cupons ativos
25
+ modelDescription: Verifica na lista Cupons do SharePoint se um código de cupom existe, se está ativo e qual a validade. Use quando o cliente informar um código de cupom.
26
+ action:
27
+ kind: InvokeConnectorTaskAction
28
+ connectionReference: cr7b2_bodegaCupons.shared_sharepointonline.shared-sharepointonline-5dc0aa0a-6edf-4fc4-a7d5-cbbfc5636a85
29
+ connectionProperties:
30
+ mode: Maker
31
+
32
+ operationId: GetItems
33
+
34
+ outputMode: All
@@ -0,0 +1,34 @@
1
+ mcs.metadata:
2
+ componentName: Enviar cupom por e-mail
3
+ description: "Envia ao cliente um e-mail com o código do cupom e as regras de uso."
4
+ kind: TaskDialog
5
+ inputs:
6
+ - kind: AutomaticTaskInput
7
+ propertyName: To
8
+ description: "Endereço de e-mail do cliente que vai receber o cupom."
9
+ entity: EmailPrebuiltEntity
10
+ shouldPromptUser: true
11
+
12
+ - kind: AutomaticTaskInput
13
+ propertyName: Subject
14
+ description: Assunto do e-mail, curto e em português.
15
+ entity: StringPrebuiltEntity
16
+ shouldPromptUser: false
17
+
18
+ - kind: AutomaticTaskInput
19
+ propertyName: Body
20
+ description: Corpo do e-mail em HTML simples, em português, com o resumo do que foi tratado na conversa.
21
+ entity: StringPrebuiltEntity
22
+ shouldPromptUser: false
23
+
24
+ modelDisplayName: Enviar cupom por e-mail
25
+ modelDescription: "Envia ao cliente, pelo Outlook, um e-mail com um código de cupom já validado e as regras de uso. Use somente quando o cliente pedir."
26
+ action:
27
+ kind: InvokeConnectorTaskAction
28
+ connectionReference: cr7b2_bodegaCupons.shared_office365.shared-office365-3b988145-3785-4cc1-8a12-16e80746419d
29
+ connectionProperties:
30
+ mode: Maker
31
+
32
+ operationId: SendEmailV2
33
+
34
+ outputMode: All
@@ -0,0 +1,20 @@
1
+ mcs.metadata:
2
+ componentName: Servidor MCP de Promoções
3
+ description: Servidor MCP interno com as campanhas promocionais vigentes da Bodega Azul.
4
+ kind: TaskDialog
5
+ inputs:
6
+ - kind: ManualTaskInput
7
+ propertyName: canal
8
+ value: =System.Activity.ChannelId
9
+
10
+ modelDisplayName: Servidor MCP de Promoções
11
+ modelDescription: Servidor MCP que lista as campanhas promocionais e os cupons vigentes da Bodega Azul.
12
+ action:
13
+ kind: InvokeExternalAgentTaskAction
14
+ connectionReference: cr7b2_bodegaCupons.shared_bodegapromocoesmcp.fio2ta
15
+ connectionProperties:
16
+ mode: Maker
17
+
18
+ operationDetails:
19
+ kind: ModelContextProtocolMetadata
20
+ operationId: InvokeMCP
@@ -0,0 +1,27 @@
1
+ mcs.metadata:
2
+ componentName: Bodega Azul - Cupons
3
+ kind: GptComponentMetadata
4
+ displayName: Bodega Azul - Cupons
5
+ instructions: |
6
+ Você é o especialista em cupons e promoções da Bodega Azul, uma loja online.
7
+
8
+ Responsabilidades:
9
+ - Explicar as regras de uso de cupons com base no "Regulamento de Cupons"
10
+ - Consultar a lista de cupons ativos no SharePoint para verificar se um código existe e está válido
11
+ - Usar o servidor MCP de promoções para buscar as campanhas vigentes
12
+ - Enviar ao cliente, quando ele pedir, um e-mail com o cupom e as regras de uso
13
+
14
+ Regras:
15
+ - Responda sempre em português do Brasil
16
+ - Nunca crie, invente ou altere códigos de cupom
17
+ - Cupons não são cumulativos, salvo quando o regulamento disser o contrário
18
+ conversationStarters:
19
+ - title: "Cupom não funciona"
20
+ text: "Meu cupom não está funcionando"
21
+
22
+ - title: "Promoções"
23
+ text: "Quais promoções estão ativas hoje?"
24
+
25
+ aISettings:
26
+ model:
27
+ modelNameHint: GPT5Chat
@@ -0,0 +1,17 @@
1
+ kind: ConnectionReferencesSourceFile
2
+ connectionReferences:
3
+ - id: 85ffe9e7-df95-4834-95c1-74e4d16daf3d
4
+ connectionReferenceLogicalName: cr7b2_bodegaCupons.shared_office365.shared-office365-3b988145-3785-4cc1-8a12-16e80746419d
5
+ connectorId: /providers/Microsoft.PowerApps/apis/shared_office365
6
+ displayName: Office 365 Outlook
7
+
8
+ - id: 80009100-efc7-49b3-b008-08903fa748c4
9
+ connectionReferenceLogicalName: cr7b2_bodegaCupons.shared_sharepointonline.shared-sharepointonline-5dc0aa0a-6edf-4fc4-a7d5-cbbfc5636a85
10
+ connectorId: /providers/Microsoft.PowerApps/apis/shared_sharepointonline
11
+ displayName: SharePoint
12
+
13
+ - id: 8a5ef90d-d584-47ca-b2a1-5c87d8fc6ede
14
+ connectionReferenceLogicalName: cr7b2_bodegaCupons.shared_bodegapromocoesmcp.fio2ta
15
+ connectorId: /providers/Microsoft.PowerApps/apis/shared_bodegapromocoesmcp
16
+ displayName: Bodega Azul Promocoes MCP
17
+ customConnectorId: 3dd0e6c5-57c7-4a73-a6a5-926cf68cb981
@@ -0,0 +1,7 @@
1
+ mcs.metadata:
2
+ componentName: Regulamento de Cupons
3
+ description: "Regras de uso, validade e acúmulo de cupons de desconto da Bodega Azul."
4
+ kind: KnowledgeSourceConfiguration
5
+ source:
6
+ kind: SharePointSearchSource
7
+ site: https://bodegaazul.sharepoint.com/sites/Marketing/Shared%20Documents/Cupons
@@ -0,0 +1,13 @@
1
+ displayName: Bodega Azul - Cupons
2
+ schemaName: cr7b2_bodegaCupons
3
+ accessControlPolicy: ChatbotReaders
4
+ authenticationMode: None
5
+ configuration:
6
+ isAgentConnectable: true
7
+ settings:
8
+ GenerativeActionsEnabled: true
9
+
10
+ recognizer:
11
+ kind: GenerativeAIRecognizer
12
+
13
+ language: 1046
@@ -0,0 +1,56 @@
1
+ mcs.metadata:
2
+ componentName: Consultar Regulamento de Cupons
3
+ description: "Responde dúvidas sobre regras de cupons com base no regulamento publicado no SharePoint."
4
+ kind: AdaptiveDialog
5
+ inputs:
6
+ - kind: AutomaticTaskInput
7
+ propertyName: PerguntaCliente
8
+ description: "A pergunta do cliente sobre regras de cupom ou desconto."
9
+ shouldPromptUser: true
10
+
11
+ modelDescription: "Responde perguntas sobre regras de uso de cupons, validade, valor mínimo de compra e acúmulo de descontos na Bodega Azul."
12
+ beginDialog:
13
+ kind: OnRecognizedIntent
14
+ id: main
15
+ intent: {}
16
+ actions:
17
+ - kind: CreateSearchQuery
18
+ id: createSearchQuery_J5Bv7D
19
+ userInput: =Topic.PerguntaCliente
20
+ result: Topic.SearchQuery
21
+
22
+ - kind: SearchAndSummarizeContent
23
+ id: searchContent_G56Tte
24
+ autoSend: false
25
+ variable: Topic.SearchResult
26
+ userInput: =Topic.SearchQuery.SearchQuery
27
+ fileSearchDataSource:
28
+ searchFilesMode:
29
+ kind: DoNotSearchFiles
30
+
31
+ knowledgeSources:
32
+ kind: SearchSpecificKnowledgeSources
33
+ knowledgeSources:
34
+ - cr7b2_bodegaCupons.knowledge.RegulamentoCupons
35
+
36
+ applyModelKnowledgeSetting: false
37
+ responseCaptureType: FullResponse
38
+
39
+ - kind: SetVariable
40
+ id: setVariable_v0bST4
41
+ variable: Topic.Resposta
42
+ value: =Topic.SearchResult.Text.Content
43
+
44
+ inputType:
45
+ properties:
46
+ PerguntaCliente:
47
+ displayName: PerguntaCliente
48
+ description: "A pergunta do cliente sobre regras de cupom ou desconto."
49
+ type: String
50
+
51
+ outputType:
52
+ properties:
53
+ Resposta:
54
+ displayName: Resposta
55
+ description: Resposta fundamentada na base de conhecimento do agente.
56
+ type: String
@@ -0,0 +1,20 @@
1
+ mcs.metadata:
2
+ componentName: Escalar
3
+ description: Acionado quando o cliente pede para falar com uma pessoa.
4
+ kind: AdaptiveDialog
5
+ beginDialog:
6
+ kind: OnEscalate
7
+ id: main
8
+ intent:
9
+ displayName: Escalar
10
+ includeInOnSelectIntent: false
11
+ triggerQueries:
12
+ - Falar com um atendente
13
+ - Quero falar com uma pessoa
14
+ - Atendimento humano
15
+ - Me transfere para alguém
16
+
17
+ actions:
18
+ - kind: SendActivity
19
+ id: sendMessage_7tt58m
20
+ activity: "A transferência para um atendente ainda não está disponível neste canal. Fale com a nossa equipe pelo e-mail promocoes@bodegaazul.example, de segunda a sábado, das 9h às 18h."