Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ For everything that isn't an attempt to use the kit (general questions, code exp
- `/menu`
- `/troubleshoot`
- `/flightcheck`
- `/org-announcements`

2. **Intent hint — natural-language equivalent.** The user isn't typing a slash-command but is unambiguously asking to *run* the kit from this workspace. Examples:
- "How do I set up the kit?" / "How do I run setup?" / "Start the ESS Maker Kit"
- "Run flightcheck" / "Run the readiness check on my agent"
- "Create a topic" / "Connect ServiceNow" / "Scan my agent for errors" — when phrased as a request to *do it now* in this workspace, not as a general "how does this work?" question.
- "Create an organization announcement" / "Post an announcement" / "Manage organization announcements" — when phrased as a request to act in this workspace.

When in doubt, prefer the default behavior (answer normally) over firing the redirect. A user asking "what does /flightcheck do?" is asking a documentation question — answer it from the README and `solutions/ess-maker-skills/` files; do **not** redirect.

Expand All @@ -49,7 +51,7 @@ When (and only when) the trigger conditions above are met, respond with **only**
> 2. Navigate **inside** this folder, then **into** `solutions`, and select `ess-maker-skills`
> 3. Click `Select Folder`
> 4. VS Code will reopen with the kit loaded
> 5. Type `/setup` again — it will work this time
> 5. Type your command again — use `/setup` for setup or `/org-announcements` for announcements
>
> See the [README](README.md) for the full getting-started walkthrough.
>
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ jobs:
tests/mcp/agentconfig
tests/scripts/test_setup_preserves_title_id.py
tests/scripts/test_validate_branding.py
tests/scripts/test_maker_profile_vsix.py
-q

- name: Test ESS Maker Quick Actions
Expand Down Expand Up @@ -165,6 +166,7 @@ jobs:
run: >-
python -m pytest
tests/mcp/agentconfig_org_announcements
tests/setup/test_foundation_setup_router.py
-q

flightcheck-tests:
Expand Down
2 changes: 1 addition & 1 deletion setup/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ iex (irm https://raw.githubusercontent.com/microsoft/Employee-Self-Service-Agent

This installs everything the standard installer does, plus the **ESS Maker Profile** extension which provides:
- A chat-only layout with all developer surfaces hidden
- Big-button "Quick Actions" rail for common tasks (Connect, Customize landing page, Create, Scan, FlightCheck, Push)
- Big-button "Quick Actions" rail for common tasks (Setup, Customize landing page, Post an announcement, Create, Scan, FlightCheck, Push)
- A built-in tutorial explaining each button

You can switch between lite mode and standard VS Code at any time using the toggle buttons in the Quick Actions panel.
Expand Down
18 changes: 16 additions & 2 deletions solutions/ess-maker-skills/.github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ Order of grounding sources (highest to lowest):
microsoft/CopilotStudioSamples Employee Self-Service Agent samples.
3. `src/skills/` - kit-shipped skill instructions for /create, /update,
/delete, /test, /scan, /evaluate, /push, /flightcheck,
/backup-template-configs, /restore-template-configs, and landing-page
configuration.
/backup-template-configs, /restore-template-configs, /org-announcements,
and landing-page configuration.
4. `src/reference/` (other subfolders) - additional kit-shipped guidance.
5. Web fetch / general knowledge - only when none of the above answer the
question and only after telling the user you're falling back.
Expand Down Expand Up @@ -323,6 +323,8 @@ After a successful push, `.baseline/` is updated to match the new state.
| Re-apply / put back Workday reference-data customisations | `src/skills/restore-template-configs/SKILL.md` |
| View or configure ESS landing-page branding, quick links, starter prompts, insight cards, name, or icon | `src/skills/landing-page-config/SKILL.md` |
| Invoke any tool from the `ess-landing-page-config` MCP server | `src/skills/landing-page-config/SKILL.md` |
| Create, edit, republish, archive, or manage organization announcements or bulletins | `src/skills/org-announcements/SKILL.md` |
| Invoke any tool from the `ess-org-announcements` MCP server | `src/skills/org-announcements/SKILL.md` |

**Trigger phrases for connect:** "connect ServiceNow", "set up ServiceNow",
"integrate ServiceNow", "connect Workday", "set up Workday", "add ServiceNow",
Expand All @@ -346,6 +348,18 @@ links, starter prompts, Stay Up to Date, Quick Access, the agent name, or the
agent icon, or asks what any landing-page setting controls for employees. Do
not call an AgentConfiguration MCP tool from a generic flow.

**Org Announcements invocation:** Before invoking ANY tool from the
`ess-org-announcements` MCP server, read and follow
`src/skills/org-announcements/SKILL.md`. Its own `list_agent_configs` and
`search_agents` tools resolve missing deployed titleIds; do not start or call
the landing-page server for announcement discovery. This applies whether the user asks to
see, create, edit, republish, archive, or delete an announcement, mentions
announcements, org announcements, bulletins, or alerts, or asks who an
announcement reaches. Org Announcements are scoped to the authenticated tenant
and selected deployed agent's required `titleId`. The tenant is token-derived;
the title is not an audience group or author permission. Do not call an Org
Announcements MCP tool from a generic flow.

**FlightCheck results rendering:** When presenting `/flightcheck` results (Step 3
of `src/skills/flightcheck/SKILL.md`), read `workspace/flightcheck/results.json`
with your file-reading tool and format the summary banner and tables **yourself,
Expand Down
1 change: 1 addition & 0 deletions solutions/ess-maker-skills/.github/prompts/menu.prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Here's what I can help you with:
| Command | What it does |
|---------|-------------|
| `/landing-page` | Configure the branding and content employees see when they open the ESS agent |
| `/org-announcements` | Create and manage announcements for the selected deployed ESS agent |
| `/connect` | Type Enter to connect ServiceNow or Workday to your agent |
| `/create` | Create a simple topic with evals, a workflow, or an evaluation test set |
| `/update` | Update a simple topic with evals, a workflow, or an evaluation test set |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
mode: agent
description: "Create and manage announcements for the selected ESS agent"
---

# Org Announcements

Read `src/skills/org-announcements/SKILL.md` and follow it.
5 changes: 5 additions & 0 deletions solutions/ess-maker-skills/.vscode/mcp.defaults.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"command": "{pythonExecutable}",
"args": ["server.py"],
"cwd": "${workspaceFolder}/src/mcp/agentconfig_landing_page"
},
"ess-org-announcements": {
"command": "{pythonExecutable}",
"args": ["server.py"],
"cwd": "${workspaceFolder}/src/mcp/agentconfig_org_announcements"
}
}
}
42 changes: 42 additions & 0 deletions solutions/ess-maker-skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,47 @@ Copilot Studio and deployed to the organization. `/setup` installs and extracts
the Power Platform agent; publication, admin approval, and Integrated apps
deployment are separate steps.

### 📢 Post Organization Announcements

Publish announcements for the selected deployed ESS agent and its audiences. Run
`/org-announcements`, ask `Create an announcement`, or use the **Post an
announcement** Quick Action.

- **Standard announcements** carry a title, description, priority, and up to two
actions.
- **Alerts** carry a single link action for time-sensitive notices.
- **Audiences** are security groups, mail-enabled security groups, or classic
distribution groups, searched by name or email in one combined query.
- **Scheduling** publishes an announcement for a start/end window, and expired
announcements can be published again through the normal editor after reviewing
and updating their schedule.
- **Lifecycle** actions archive, unarchive, move back to draft, duplicate, or
delete an announcement.

Describe the announcement in chat and the kit opens a pre-filled editor for you
to review — nothing is saved until you publish or save a draft in that editor.

Org Announcements are **scoped to the authenticated tenant and selected agent's
`titleId`**, not shared across agents. The current 100 limit and latest 50
archive window apply per tenant-and-agent pair. There is no tenant-wide fallback.
The title is resolved using `list_agent_configs` and `search_agents` on the
`ess-org-announcements` provider. Discovery shares neutral Python code with the
landing-page provider, but does not require its MCP process or initialize its
configuration. Announcement authoring
requires the Org Announcements feature to be enabled for your tenant, and
audience search requires the `Directory.Read.All` Microsoft Graph permission to
be consented in your tenant.

Graph uses a separate resource token for the same authoring tenant and account.
The current account-context check requires readable `tid` and `oid` claims;
opaque tokens or credentials missing those claims return an explicit
authentication failure rather than using a different account. The API still
validates tokens and authorizes every request.

This development surface requires the matching agent-qualified v1.1 backend
and scoped widget. The MCP rejects unscoped canonical responses instead of
silently consuming records from an older backend.

### 📖 Pre-Loaded ESS Documentation, Samples & Best Practices

The kit ships with a complete reference library that the AI agent reads at task time — you don't need to look anything up yourself.
Expand Down Expand Up @@ -332,6 +373,7 @@ Then **run `/setup`** in GitHub Copilot Chat to configure your environment.
|---------|-------------|
| `/setup` | First-time environment setup — authenticate, discover agent, extract, configure |
| `/landing-page` | Configure landing-page branding and content |
| `/org-announcements` | Create and manage announcements for the selected ESS agent |
| `/connect` | Connect an external system (ServiceNow, Workday) — guided setup with MCP verification |
| `/create` | Create an eval-driven topic, workflow, or evaluation test set |
| `/update` | Update a simple topic with evals, a workflow, or an evaluation test set |
Expand Down
Loading
Loading