Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — include maker routing in the feature's CI coverage.

This adds the existing foundation/setup-router suite to the announcements job. That suite now checks the command, skill, menu, dependency-install guidance, and separate-provider routing introduced by this slice.

The job already exists from earlier chunks; this is one additional test selector, not another workflow or branch-policy change.

-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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — route announcement intent to its own workflow.

These instructions tell the chat agent to read the announcement skill for announcement requests and calls to ess-org-announcements. They also add the command to the kit's grounding sources and routing table.

The important boundary is explicit: missing deployed titleId values are resolved through the announcement provider's own read-only tools. Announcements does not start or call the landing-page MCP process, even though both providers share Python discovery code underneath. Landing-page configuration remains a separate flow.

This Markdown affects runtime agent behavior; it is not merely a feature-design document. The explicit target identifies the deployed agent, while tenant context and authorization remain with the authenticated service path.

`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 |

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — expose the command in the maker's menu.

This adds /org-announcements and a short description scoped to the selected deployed ESS agent. It makes the new flow discoverable alongside /landing-page without combining the two workflows.

The menu is an entry point only; the dedicated prompt and skill own the behavior after the maker chooses it.

| `/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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — a thin slash-command entry point.

This new prompt gives /org-announcements an agent-mode entry point and delegates directly to src/skills/org-announcements/SKILL.md.

It deliberately does not duplicate configuration reading, authentication, or announcement logic here. Those rules live in the skill so slash-command use and natural-language announcement intent follow the same instructions.

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": {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — tell setup how to launch the announcement provider.

The new ess-org-announcements entry starts server.py from the announcement MCP folder using the active Python executable substituted by the existing materializer.

This registers a separate provider beside landing-page configuration. It does not contain a tenant, agent ID, token, or environment-specific endpoint. Those are resolved at runtime; existing user configuration is handled by the shared materialization logic rather than by writing a hand-built mcp.json here.

"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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — explain how to start the feature and what it depends on.

The new README section describes the command, natural-language request, and Quick Action; the command table gains the same entry. It explains announcement forms, audience lookup, scheduling, and management at a user-facing level.

It also records the important operational boundaries: announcements belong to the selected tenant/agent pair; discovery runs through the announcement provider; Graph uses a separate resource token for the intended authoring account; and a matching scoped widget/backend is required. The readable tid/oid credential limitation is disclosed rather than hidden.

This is usage and dependency documentation, not evidence that a particular tenant has the feature enabled or that live integration is complete.


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
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This is the single integration-neutral `/setup` entry point. It owns only:
- preferred unmanaged solution configuration;
- HR and/or IT ESS starter installation;
- baseline readiness;
- the handoff to `/connect`.
- the handoff to the available maker entry points.

Workday, ServiceNow, SAP SuccessFactors, authentication, extension packs, and topics
are explicitly outside this skill.
Expand Down Expand Up @@ -43,8 +43,8 @@ overwrite corrupt state silently.
If `connect_ready` is true, inspect `.local/config.json`:

- If its `setup` value is `"complete"`, show that foundation and workspace setup
are complete. Tell the maker they can run `/landing-page` or `/connect`, or
type `/menu` to see every capability.
are complete. Tell the maker they can run `/landing-page`,
`/org-announcements`, or `/connect`, or type `/menu` to see every capability.
- Otherwise read `src/skills/onboarding/foundation-bootstrap.md` and follow it.
The bootstrap must reuse `environment.tenant_endpoint`, must not render
another setup checklist, and must proceed directly to the installed-agent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ checklist. When it completes:
Your ESS foundation and local workspace are complete.

Run `/landing-page` to configure branding and the content employees see. Run
`/connect` to choose an integration. Topic creation remains a separate
`/create` workflow.
`/org-announcements` to post an announcement for your selected deployed agent,
or run `/connect` to choose an integration. Topic creation remains a separate
`/create` workflow. Type `/menu` to see every capability.

**End message.**
5 changes: 4 additions & 1 deletion solutions/ess-maker-skills/src/skills/onboarding/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,17 @@ Before showing the message, run this command without showing it to the user:

```powershell
python -m pip install -r scripts/requirements.txt
python -m pip install -r src/mcp/agentconfig_landing_page/requirements.txt
python -m pip install -r src/mcp/agentconfig_org_announcements/requirements.txt
```

If dependency installation fails, show the error and stop.

**Message:**

Setup is already complete! Run `/landing-page` to configure the branding and
content employees see, or type `/menu` to see everything you can do.
content employees see, `/org-announcements` to post an announcement for your

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — mention announcements when setup is already complete.

The existing completion message now points makers to /org-announcements as well as /landing-page and /menu.

This does not add a new onboarding branch or an announcement write. It keeps the already-set-up user's next-step guidance consistent with the available commands.

selected deployed agent, or type `/menu` to see everything you can do.
Comment thread
SophieS0ng marked this conversation as resolved.

**End message.**

Expand Down
1 change: 1 addition & 0 deletions solutions/ess-maker-skills/src/skills/onboarding/step1.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ Run this command in the terminal without showing it to the user:

```powershell
python -m pip install -r src/mcp/agentconfig_landing_page/requirements.txt
python -m pip install -r src/mcp/agentconfig_org_announcements/requirements.txt

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — install the provider's own dependencies during setup.

Setup guidance now installs agentconfig_org_announcements/requirements.txt alongside the landing-page requirements. The existing instruction to stop and surface an installation failure remains.

This follows the sibling-feature arrangement: announcements owns its runtime requirements while reusing the shared core underneath. Adding the server to defaults alone would not ensure its Python dependencies were installed.

```

If installation fails, show the error and stop.
Expand Down
4 changes: 4 additions & 0 deletions solutions/ess-maker-skills/src/skills/onboarding/step2.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,13 @@ You can customize the active agent's landing page from chat, including accent
colors, categorized starter prompts, quick links, Stay up to date cards, and
Quick Access cards. Run `/landing-page` whenever you're ready.

You can also post announcements for the selected deployed ESS agent and its

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough — advertise announcements at the end of onboarding.

The completion text and command table now explain that the maker can create/manage announcements for the selected deployed agent and its chosen audiences.

These are pointers into the existing dedicated flow, not automatic feature initialization or publishing. They keep the first-run experience consistent with the menu and the already-complete setup message.

chosen audiences. Run `/org-announcements` to create or manage them.

| Command | What it does |
|---------|-------------|
| `/landing-page` | Configure landing-page branding and content |
| `/org-announcements` | Create and manage announcements for the selected ESS agent |
| `/create` | Create a new topic or workflow |
| `/connect` | Set up ServiceNow or Workday integration |
| `/scan` | Scan for compile errors |
Expand Down
Loading
Loading