commit 7f07084699bb52178cabe4edcbaa90fa0a1692e7 Author: Mark Kats Date: Mon Aug 24 23:39:10 2026 +0300 Publish SHD MCP plugin package diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json new file mode 100644 index 0000000..346194d --- /dev/null +++ b/.agents/plugins/marketplace.json @@ -0,0 +1,20 @@ +{ + "name": "shd-public", + "interface": { + "displayName": "SHD Public Plugins" + }, + "plugins": [ + { + "name": "shd-mcp-plugin", + "source": { + "source": "local", + "path": "./plugins/shd-mcp-plugin" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + } + ] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7163ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.env +.env.* +!.env.example +.DS_Store +.idea/ +.vscode/ +*.log +__pycache__/ +*.py[cod] diff --git a/CHATGPT-SETUP.md b/CHATGPT-SETUP.md new file mode 100644 index 0000000..ec7fbd6 --- /dev/null +++ b/CHATGPT-SETUP.md @@ -0,0 +1,93 @@ +# SHD MCP in ChatGPT + +This file describes the user-side connection. The repository cannot create an +app inside another person’s ChatGPT account and never stores OAuth tokens. + +## Custom app + +1. Open ChatGPT settings and enable Developer mode for Apps/Connectors. +2. Create a custom app with this MCP endpoint: + + `https://shd.xyz.su/mcp` + +3. Complete the SHD OAuth sign-in and consent screen. +4. Start a new chat or refresh the app connection. +5. Test with: `Покажи активные проекты с датой завершения и статусом.` + +The server publishes OAuth 2.1 discovery for the root resource and supports +ChatGPT Client ID Metadata Documents (CIMD), PKCE S256 and the +`private_key_jwt` token-endpoint authentication method. Keep the app URL as +`https://shd.xyz.su/mcp`; the retired `/mcp/system-data` resource is not a +valid replacement for the root MCP resource. + +The expected flow is: + +1. ChatGPT calls `shd_list_projects` with `archived: false`. +2. ChatGPT calls the corresponding module render tool after the list tool + before the final response when MCP Apps UI is supported: + `shd_render_projects_widget`, `shd_render_documents_widget`, + `shd_render_tasks_widget`, `shd_render_finance_widget`, + `shd_render_crm_widget`, `shd_render_discussions_widget`, + `shd_render_notifications_widget`, `shd_render_scheduling_widget`, + `shd_render_inventory_widget`, `shd_render_agents_widget`, + `shd_render_status_page_widget`, `shd_render_project_db_widget` or + `shd_render_notes_widget`, `shd_render_project_overview_widget`, + `shd_render_files_widget`, `shd_render_proposals_widget`, + `shd_render_terms_widget`, `shd_render_activity_widget`, + `shd_render_organizations_widget`, `shd_render_gitea_widget` or + `shd_render_schemes_widget`, `shd_render_task_kanban_widget`, + `shd_render_team_workload_widget`, `shd_render_project_timeline_widget`, + `shd_render_crm_funnel_widget`, `shd_render_finance_dashboard_widget`, + `shd_render_proposal_approvals_widget`, `shd_render_documents_completeness_widget`, + `shd_render_agents_health_widget`, `shd_render_schedule_calendar_widget`, + `shd_render_acl_matrix_widget`, `shd_render_inventory_warnings_widget`, + `shd_render_gitea_board_widget`, `shd_render_schemes_progress_widget`, + `shd_render_notes_tree_widget` or `shd_render_project_db_preview_widget`. +3. The selected widget renders a register, can call the matching detail tool for + one selected row and exposes controlled write actions when declared by the + render metadata. + +The widget resources are versioned at `ui://shd/active-projects/v1.html`, +`ui://shd/documents/v1.html`, `ui://shd/tasks/v1.html`, +`ui://shd/finance/v1.html`, `ui://shd/crm/v1.html`, +`ui://shd/discussions/v1.html`, `ui://shd/notifications/v1.html`, +`ui://shd/scheduling/v1.html`, `ui://shd/inventory/v1.html`, +`ui://shd/agents/v1.html`, `ui://shd/status-page/v1.html`, +`ui://shd/project-db/v1.html`, `ui://shd/notes/v1.html`, +`ui://shd/project-overview/v1.html`, `ui://shd/files/v1.html`, +`ui://shd/proposals/v1.html`, `ui://shd/terms/v1.html`, +`ui://shd/activity/v1.html`, `ui://shd/organizations/v1.html`, +`ui://shd/gitea/v1.html`, `ui://shd/schemes/v1.html`, +`ui://shd/task-kanban/v1.html`, `ui://shd/team-workload/v1.html`, +`ui://shd/project-timeline/v1.html`, `ui://shd/crm-funnel/v1.html`, +`ui://shd/finance-dashboard/v1.html`, `ui://shd/proposal-approvals/v1.html`, +`ui://shd/documents-completeness/v1.html`, `ui://shd/agents-health/v1.html`, +`ui://shd/schedule-calendar/v1.html`, `ui://shd/acl-matrix/v1.html`, +`ui://shd/inventory-warnings/v1.html`, `ui://shd/gitea-board/v1.html`, +`ui://shd/schemes-progress/v1.html`, `ui://shd/notes-tree/v1.html` and +`ui://shd/project-db-preview/v1.html`. + +The MCP tools remain usable without the widget. A failed OAuth connection is +an account/endpoint configuration problem, not a missing token in this repo. + +## Public directory + +Directory submission is a separate optional release step. It is needed for +public discovery and reviewed installation, not for internal use or a custom +app added manually in ChatGPT. Before submission, the owner must provide the +production HTTPS endpoint, OAuth metadata, privacy/support URLs, accurate app +metadata, test prompts and any review credentials requested by OpenAI. + +Use the official [submission guide](https://developers.openai.com/plugins/deploy/submission) +and [plugin guidelines](https://developers.openai.com/plugins/app-guidelines). + +## License choice + +This repository currently uses the proprietary SHD MCP Plugin License. Public +visibility means the source can be viewed; it does not grant permission to +redistribute, resell, modify or use it outside an authorized SHD account. + +MIT would grant anyone permission to use, copy, modify, publish, sublicense and +sell the plugin, including forks, while retaining only the copyright notice and +license text. Switching to MIT is a product/legal decision and is not done +implicitly by publishing the repository. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b964915 --- /dev/null +++ b/LICENSE @@ -0,0 +1,37 @@ +SHD MCP PLUGIN LICENSE + +Copyright (c) 2026 SHD + +This license applies to the SHD MCP Plugin package, its Skills, manifests, +documentation and SHD branding in this repository. The SHD MCP service and +its backend are separate systems and remain subject to their own terms. + +1. Permission + +SHD grants a limited, non-exclusive, non-transferable permission to install and +use an unmodified copy of this plugin with an authorized SHD account and a +compatible MCP client. + +2. Restrictions + +Unless SHD gives prior written permission, you may not sell, sublicense, +redistribute, publish modified versions of, remove notices from, or use this +package and its branding to provide a competing service. Public access to this +repository does not transfer copyright, trademark or other intellectual +property rights. + +3. No credentials or access grant + +This package contains no access token and grants no access to SHD data. Access +is controlled by SHD authentication, organization membership and server-side +permissions. + +4. Warranty and liability + +The package is provided "as is" to the maximum extent permitted by law, +without warranties of any kind. SHD is not liable for indirect, incidental or +consequential damages arising from its use. + +5. Third-party materials + +Third-party software and assets, if any, remain subject to their own licenses. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b481e6 --- /dev/null +++ b/README.md @@ -0,0 +1,162 @@ +# SHD MCP Plugin + +Public installable plugin package for SHD project workflows. It combines Codex +Skills with the authenticated SHD MCP server and keeps business logic, ACLs, +OAuth and persisted data in SHD itself. + +## What the user installs + +The package contains: + +- `.codex-plugin/plugin.json` — plugin metadata; +- `.mcp.json` — the official SHD Streamable HTTP MCP endpoint; +- `skills/` — routing, project, ProjectBase, task, file, finance, CRM, + analytics, estimates, scheduling, entity resolution, Wiki, discussions, + documents, organizations/ACL, notifications, inventory, agents, status-page, + realtime/activity, Terms/contracts and Gitea workflows; +- `assets/` — plugin branding; +- `widgets/` — versioned MCP Apps resources with manifest, checksum and + provenance metadata; +- `.agents/plugins/marketplace.json` — a ready local marketplace entry. + +It does not contain the SHD Laravel application, database code or credentials. + +## Install in Codex + +Clone this repository and register its marketplace: + +```bash +git clone https://github.com/bulava92/shd-mcp-plugin.git +cd shd-mcp-plugin +codex plugin marketplace add "$PWD" +codex plugin add shd-mcp-plugin@shd-public +``` + +After installation, start a new Codex thread so the plugin Skills are loaded. + +## ChatGPT custom app + +ChatGPT uses the same SHD MCP server connection, but it is added separately in +the ChatGPT account: open Settings → Apps/Connectors → Developer mode, create +a custom app and set the MCP URL to `https://shd.xyz.su/mcp`. Complete the SHD +OAuth flow and refresh the app after server metadata changes. + +The active-projects result can render an inline MCP Apps widget. It is a small +dashboard with: + +- `Проект → Дата завершения → Статус`; +- sorting by the nearest deadline; +- local search by project name/code; +- a refresh action, a project-details panel and controlled project actions. + +If the host does not support MCP Apps UI, the data tool and the plain Markdown +table remain fully usable. + +The backend serves the checked-in widget artifact at +`ui://shd/active-projects/v1.html`; its manifest and `SHA256SUMS` are kept next +to the HTML resource under `plugins/shd-mcp-plugin/widgets/active-projects/v1/`. + +The same data/render contract is available for Documents, Tasks, +Finance, CRM, Discussions, Notifications, Scheduling, Inventory, Agents, +Status Page, Project DB, Notes, Project overview, Files, Proposals, Terms, +Activity, Organizations and access, Gitea Issues and Schemes: + +- `shd_render_documents_widget` → `ui://shd/documents/v1.html`; +- `shd_render_tasks_widget` → `ui://shd/tasks/v1.html`; +- `shd_render_finance_widget` → `ui://shd/finance/v1.html`; +- `shd_render_crm_widget` → `ui://shd/crm/v1.html`; +- `shd_render_discussions_widget` → `ui://shd/discussions/v1.html`; +- `shd_render_notifications_widget` → `ui://shd/notifications/v1.html`; +- `shd_render_scheduling_widget` → `ui://shd/scheduling/v1.html`; +- `shd_render_inventory_widget` → `ui://shd/inventory/v1.html`; +- `shd_render_agents_widget` → `ui://shd/agents/v1.html`; +- `shd_render_status_page_widget` → `ui://shd/status-page/v1.html`; +- `shd_render_project_db_widget` → `ui://shd/project-db/v1.html`; +- `shd_render_notes_widget` → `ui://shd/notes/v1.html`. +- `shd_render_project_overview_widget` → `ui://shd/project-overview/v1.html`; +- `shd_render_files_widget` → `ui://shd/files/v1.html`; +- `shd_render_proposals_widget` → `ui://shd/proposals/v1.html`; +- `shd_render_terms_widget` → `ui://shd/terms/v1.html`; +- `shd_render_activity_widget` → `ui://shd/activity/v1.html`; +- `shd_render_organizations_widget` → `ui://shd/organizations/v1.html`; +- `shd_render_gitea_widget` → `ui://shd/gitea/v1.html`; +- `shd_render_schemes_widget` → `ui://shd/schemes/v1.html`; +- `shd_render_task_kanban_widget` → `ui://shd/task-kanban/v1.html`; +- `shd_render_team_workload_widget` → `ui://shd/team-workload/v1.html`; +- `shd_render_project_timeline_widget` → `ui://shd/project-timeline/v1.html`; +- `shd_render_crm_funnel_widget` → `ui://shd/crm-funnel/v1.html`; +- `shd_render_finance_dashboard_widget` → `ui://shd/finance-dashboard/v1.html`; +- `shd_render_proposal_approvals_widget` → `ui://shd/proposal-approvals/v1.html`; +- `shd_render_documents_completeness_widget` → `ui://shd/documents-completeness/v1.html`; +- `shd_render_agents_health_widget` → `ui://shd/agents-health/v1.html`; +- `shd_render_schedule_calendar_widget` → `ui://shd/schedule-calendar/v1.html`; +- `shd_render_acl_matrix_widget` → `ui://shd/acl-matrix/v1.html`; +- `shd_render_inventory_warnings_widget` → `ui://shd/inventory-warnings/v1.html`; +- `shd_render_gitea_board_widget` → `ui://shd/gitea-board/v1.html`; +- `shd_render_schemes_progress_widget` → `ui://shd/schemes-progress/v1.html`; +- `shd_render_notes_tree_widget` → `ui://shd/notes-tree/v1.html`; +- `shd_render_project_db_preview_widget` → `ui://shd/project-db-preview/v1.html`. + +Each widget accepts normalized records from its list tool, keeps the plain +structured response as a fallback and uses the MCP Apps bridge before the +`window.openai` compatibility API. + +The official OpenAI directory is optional. It is useful for public discovery, +one-click installation and review of a public app; it is not required for an +internal team or a manually added ChatGPT custom app. See the official +[MCP server guide](https://developers.openai.com/plugins/build/mcp-server), +[UI guide](https://developers.openai.com/plugins/build/chatgpt-ui), and +[submission guide](https://developers.openai.com/plugins/deploy/submission) +when public listing is the goal. + +## Connect SHD + +Installation and authorization are separate steps: + +1. The client reads `.mcp.json` and opens the SHD OAuth flow. +2. The user signs in to SHD and approves the requested MCP connection. +3. SHD issues the client an authorization; the client stores it securely. +4. Every tool call is checked again by SHD for organization, project and + module permissions. + +The user does not need to put a token in this repository. A personal access +token may be used only if the selected MCP client and SHD deployment +explicitly support it; enter it in that client's secure connection settings, +never in `.mcp.json`, Skills or an issue. + +SHD OAuth supports ChatGPT CIMD clients with PKCE S256 and +`private_key_jwt` client authentication. The server validates the client +assertion against ChatGPT's published JWKS; the plugin package never stores +the assertion, access token or refresh token. + +For ChatGPT or another MCP client without Codex plugin installation, add the +same HTTPS endpoint as a custom MCP app and complete OAuth there. The public +repository packages the workflows; it does not grant access to the server. + +## Troubleshooting + +- **Plugin installs but tools are unavailable:** reconnect SHD OAuth and start + a new thread. +- **Projects are missing:** the SHD account or organization lacks access, or + the project is archived; verify permissions in SHD. +- **A write is rejected:** the server ACL, required role, version or conflict + check rejected it. Do not bypass the error with a different token. +- **A module is not covered by a dedicated skill:** use `shd-routing`; the MCP + server still exposes the current authenticated tool catalog, while skills + provide focused workflow and safety guidance for common module operations. +- **Another SHD installation is required:** use its approved MCP URL and its + OAuth resource in the client's secure connection configuration. + +## Development + +Keep changes inside the plugin package. The authenticated MCP server, OAuth +deployment and runtime verification remain private server-side concerns. Do not +place credentials, private host details or backend implementation in Skills or +widget assets. + +## License + +The repository is public source, but the plugin and SHD branding are distributed +under the proprietary [SHD MCP Plugin License](LICENSE). Public visibility does +not grant rights to redistribute, resell, modify or reuse the package outside +the permitted SHD use. diff --git a/plugins/shd-mcp-plugin/.codex-plugin/plugin.json b/plugins/shd-mcp-plugin/.codex-plugin/plugin.json new file mode 100644 index 0000000..14e1af4 --- /dev/null +++ b/plugins/shd-mcp-plugin/.codex-plugin/plugin.json @@ -0,0 +1,49 @@ +{ + "name": "shd-mcp-plugin", + "version": "0.5.1", + "description": "Ready-to-install SHD workflows backed by the authenticated SHD MCP server.", + "author": { + "name": "SHD", + "url": "https://shd.xyz.su" + }, + "homepage": "https://shd.xyz.su", + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "license": "Proprietary", + "keywords": [ + "SHD", + "projects", + "ProjectBase", + "tasks", + "finance", + "CRM", + "documents", + "inventory", + "organizations", + "notifications", + "realtime", + "Gitea", + "MCP" + ], + "skills": "./skills/", + "interface": { + "displayName": "SHD MCP", + "shortDescription": "SHD projects and operations", + "longDescription": "Installable SHD MCP workflows for projects, ProjectBase, tasks, files, finance, CRM, documents, access control, inventory, notifications, realtime, status monitoring and linked Gitea operations.", + "developerName": "SHD", + "category": "Productivity", + "capabilities": [ + "Read", + "Write" + ], + "websiteURL": "https://shd.xyz.su", + "brandColor": "#1E88E5", + "composerIcon": "./assets/logo.png", + "logo": "./assets/logo.png", + "defaultPrompt": [ + "Покажи активные проекты с датой завершения и статусом.", + "Сделай сводку по проекту и его рискам.", + "Проверь ProjectBase без изменения данных." + ] + }, + "mcpServers": "./.mcp.json" +} diff --git a/plugins/shd-mcp-plugin/.mcp.json b/plugins/shd-mcp-plugin/.mcp.json new file mode 100644 index 0000000..4e7ada6 --- /dev/null +++ b/plugins/shd-mcp-plugin/.mcp.json @@ -0,0 +1,9 @@ +{ + "mcpServers": { + "shd": { + "type": "http", + "url": "https://shd.xyz.su/mcp", + "oauth_resource": "https://shd.xyz.su/mcp" + } + } +} diff --git a/plugins/shd-mcp-plugin/README.md b/plugins/shd-mcp-plugin/README.md new file mode 100644 index 0000000..c55abc7 --- /dev/null +++ b/plugins/shd-mcp-plugin/README.md @@ -0,0 +1,65 @@ +# SHD MCP plugin package + +This directory is the installable Codex plugin. It packages reusable SHD +workflow Skills and the official SHD MCP connection; it does not contain the +SHD backend or a second MCP server. + +The plugin requires an SHD account authorized for the requested projects and +modules. Skills do not grant permissions or bypass server-side ACLs. + +## Included workflows + +- active projects with completion dates and statuses; +- project status and risk summaries; +- ProjectBase schema and data-quality audits; +- guarded task workflows; +- project file inspection and actions; +- finance and CRM read/audit workflows; +- finance account, balance, payment and settlement audits; +- analytics, comparisons, reports and task/proposal metrics; +- entity resolution and duplicate-candidate analysis; +- estimates, proposals and estimate-document-contract workflows; +- scheduling events, slots and booking positions; +- Wiki, notes, revisions and note-database workflows; +- discussions, channels, topics, messages and attachments; +- documents, templates, PDFs, revisions and public-link workflows; +- organizations, members, invitations, ACL and two-factor policies; +- notifications, preferences and read-state workflows; +- inventory, assets, stock, procurement and stocktake workflows; +- agent/controller diagnostics, tunnels, endpoints and runtime actions; +- status-page monitors, groups, history and incidents; +- realtime sessions, event cursors and operational activity; +- Terms documents, revisions, completeness and contract discussions; +- linked Gitea issues, labels, comments and attachments; +- safe bulk-change planning and validation rules. + +When the connected MCP host supports MCP Apps UI, the 36 SHD render tools have +inline interactive widgets: active projects, module registers and specialized +Kanban, workload, timeline, funnel, dashboard, calendar, matrix, tree and +Project DB views. Each widget sorts or filters normalized records, shows +status/value fields, can load one selected record’s details where supported and +exposes only the write actions declared by its render metadata. A write always +requires an explicit form submission; destructive actions also require a +confirmation checkbox. After a successful mutation, the widget refreshes its +source list. +The same tools still return normal structured data for hosts that do not render +widgets. + +The active-projects widget is versioned in `widgets/active-projects/v1/` with a +manifest, SHA256 checksum and source/provenance note. The SHD MCP backend reads +that artifact for the `ui://shd/active-projects/v1.html` resource. + +The other versioned resources are stored under `widgets/` with a manifest, +SHA256 checksum and source/provenance note for each resource. Their render +tools are deliberately separate from the list tools so the server can keep +data access and UI rendering auditable. + +## MCP connection + +The package points to `https://shd.xyz.su/mcp` and requests OAuth for that MCP +resource. The client stores the resulting authorization; this repository never +contains an access token. + +If a client or SHD installation uses another official endpoint, change the +connection in `.mcp.json` in that client's secure configuration. Do not commit +tokens, cookies, client secrets or private host credentials. diff --git a/plugins/shd-mcp-plugin/assets/logo.png b/plugins/shd-mcp-plugin/assets/logo.png new file mode 100644 index 0000000..9318b99 Binary files /dev/null and b/plugins/shd-mcp-plugin/assets/logo.png differ diff --git a/plugins/shd-mcp-plugin/skills/shd-active-projects/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-active-projects/SKILL.md new file mode 100644 index 0000000..f0e0ba0 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-active-projects/SKILL.md @@ -0,0 +1,39 @@ +--- +name: shd-active-projects +description: Use when the user asks for all active SHD projects, project deadlines, project statuses, or a project register sorted by the nearest completion date. +--- + +# Active SHD projects + +## Workflow + +1. Call `shd_list_projects` once with `archived: false` and `limit: 100`. +2. If the user supplied a search term, pass it as `q`; otherwise do not add a + search filter. +3. Use the project fields returned by that tool. Do not call + `shd_get_project` once per row just to repeat list data. +4. Sort projects with a non-null `deadline` in ascending order. Put projects + without a deadline after dated projects; do not invent a date. +5. Return the compact table: + + `Проект | Дата завершения | Статус` + +6. If the user is in a UI-capable MCP host, call `shd_render_projects_widget` + after the data call, passing the returned `data` array as `projects` and the + returned `meta` object as `meta`. The widget is optional; the plain table + remains the fallback for hosts without MCP Apps UI. +7. Preserve the server's project name/code and status. If a deadline is a + datetime, format it with its returned timezone when available; otherwise + keep the value unmodified and state that timezone data was unavailable. + +## Boundaries + +- “Активные” defaults to non-archived projects (`archived: false`). If the user + means a particular business status rather than archive state, ask which + status or report the returned statuses without filtering them locally. +- Do not use task due dates as project completion dates. +- If the server indicates more records than the tool can return, report that + the current tool limit was reached; do not claim a complete list. +- This workflow is read-only and must not update, archive or delete projects. + +See `references/project-widget.md` for the data/render boundary. diff --git a/plugins/shd-mcp-plugin/skills/shd-active-projects/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-active-projects/agents/openai.yaml new file mode 100644 index 0000000..2ef4b53 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-active-projects/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: Active SHD projects + short_description: Project deadlines and statuses +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-active-projects/references/project-widget.md b/plugins/shd-mcp-plugin/skills/shd-active-projects/references/project-widget.md new file mode 100644 index 0000000..3d79bf2 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-active-projects/references/project-widget.md @@ -0,0 +1,5 @@ +# Project widget contract + +Call the data tool first. Pass only the returned project array and metadata to +the render tool. The widget is a presentation layer: it must not invent dates, +statuses or project rows and must keep the plain structured table as fallback. diff --git a/plugins/shd-mcp-plugin/skills/shd-agents-operations/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-agents-operations/SKILL.md new file mode 100644 index 0000000..6937ae6 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-agents-operations/SKILL.md @@ -0,0 +1,26 @@ +--- +name: shd-agents-operations +description: Use when the user asks to inspect SHD agents, controllers, diagnostics, tunnels, access rules, endpoints, monitoring or agent runtime actions. +--- + +# SHD agents operations + +See `references/agent-operations.md` before touching runtime, network or access +configuration. + +## Diagnose first + +- Resolve the controller, user agent or tunnel identity from + `shd_agents_overview`, status and diagnostic tools. +- Read current access policies, settings, history and async status before + proposing an action. +- Keep diagnostics, configuration, endpoint publication and network routing as + separate operations. Never expose credentials, private keys or tunnel data. + +## High-impact actions + +Creating/closing tunnels, publishing or revoking endpoints, replacing access +policies, rebooting an agent, changing exit-network routing or enabling +monitoring requires an explicit target and user request. For asynchronous +actions, return the operation ID, poll only as needed and report terminal +status. Do not retry a network or reboot action blindly. diff --git a/plugins/shd-mcp-plugin/skills/shd-agents-operations/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-agents-operations/agents/openai.yaml new file mode 100644 index 0000000..ed94667 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-agents-operations/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD agents operations" + short_description: "Diagnose agents and guarded runtime actions" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-agents-operations/references/agent-operations.md b/plugins/shd-mcp-plugin/skills/shd-agents-operations/references/agent-operations.md new file mode 100644 index 0000000..40eeb56 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-agents-operations/references/agent-operations.md @@ -0,0 +1,14 @@ +# Agent operations contract + +Start with `shd_agents_overview`, `shd_get_controller_status`, +`shd_agents_get_controller_diagnostics`, `shd_agents_get_diagnostics`, history +and the relevant access-policy tools. Use `shd_agents_get_async_status` for an +operation already returned by the server. + +Treat tunnels, endpoint publication/revocation, access-policy replacement, +agent reboot, exit-node/network routing and controller/user-agent settings as +high-impact mutations. Tools such as `shd_agents_create_tunnel`, +`shd_agents_close_tunnel`, `shd_agents_publish_controller_endpoint`, +`shd_agents_revoke_controller_endpoint`, `shd_agents_reboot_user_agent` and +`shd_agents_force_exit_network_route` require explicit authorization and exact +scope. Preserve audit/readback and never print secrets returned by diagnostics. diff --git a/plugins/shd-mcp-plugin/skills/shd-analytics/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-analytics/SKILL.md new file mode 100644 index 0000000..641c579 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-analytics/SKILL.md @@ -0,0 +1,33 @@ +--- +name: shd-analytics +description: Use when the user asks for SHD project or company analytics, trends, comparisons, metrics, charts, reports, or time summaries. +--- + +# SHD analytics and reports + +## Scope + +1. Resolve the organization or project scope before aggregating values. Use an + exact `project_code` when the user supplied one; otherwise resolve it with + `shd_list_projects`. +2. Use `shd_get_project_context` for a bounded cross-module summary and request + only the sections needed for the question. +3. For task effort use `shd_get_task_time_report`; use + `shd_export_task_time_report` only when the user asks for an export. +4. For proposal analytics use `shd_get_proposal_public_analytics` only for a + resolved proposal or public analytics scope accepted by its schema. +5. If the requested metric does not map to a known tool, call + `shd_capabilities` and report the unavailable capability instead of inventing + an endpoint or field. + +## Reporting rules + +- State the period, scope, currency and timezone returned by SHD. +- Distinguish totals returned by the server from calculations made from rows. +- Preserve null, unavailable and permission-denied sections as separate states. +- Do not infer profitability, completion, approval or trend direction from one + record or from a missing section. +- Present chart-ready data as a compact table with labels, units and source + fields. Use a UI resource only when the server advertises a matching widget. + +See `references/analytics-contract.md` before composing a multi-section report. diff --git a/plugins/shd-mcp-plugin/skills/shd-analytics/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-analytics/agents/openai.yaml new file mode 100644 index 0000000..cd517cf --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-analytics/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD analytics + short_description: Metrics, comparisons and reports +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-analytics/references/analytics-contract.md b/plugins/shd-mcp-plugin/skills/shd-analytics/references/analytics-contract.md new file mode 100644 index 0000000..a44ab7e --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-analytics/references/analytics-contract.md @@ -0,0 +1,9 @@ +# Analytics contract + +- Every metric has an explicit scope, period, unit and source operation. +- A server total is authoritative; a locally calculated total must be marked as + calculated and list the rows used. +- A comparison must use the same period boundaries and unit on both sides. +- Missing data, denied access and a zero value are different outcomes. +- Recommendations follow the evidence and are not written back to SHD unless a + separate mutation is explicitly requested. diff --git a/plugins/shd-mcp-plugin/skills/shd-discussions/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-discussions/SKILL.md new file mode 100644 index 0000000..394520a --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-discussions/SKILL.md @@ -0,0 +1,26 @@ +--- +name: shd-discussions +description: Use when the user asks to find, read, search, create or edit SHD discussion channels, topics, messages or attachments. +--- + +# SHD discussions + +See `references/discussion-contract.md` for the tool map and message safety +rules. + +## Resolve and read + +- Resolve the organization or project context before selecting a channel. +- Use `shd_list_discussion_channels` and `shd_list_discussion_topics` before + reading messages when an ID is not already known. +- Use bounded reads with `shd_list_discussion_messages` or + `shd_search_discussions`; preserve pagination and returned identifiers. +- Treat private channels and messages as server-authorized data. Do not infer + membership or quote content outside the returned scope. + +## Mutations + +Only create or edit a message, or upload an attachment, when the user asks for +that exact operation. Confirm the target topic, preserve the latest message +identity/version when available, and report the server result. Never delete or +rewrite discussion history by guessing a topic from its display name. diff --git a/plugins/shd-mcp-plugin/skills/shd-discussions/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-discussions/agents/openai.yaml new file mode 100644 index 0000000..e82db45 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-discussions/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD discussions" + short_description: "Search and manage discussion threads" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-discussions/references/discussion-contract.md b/plugins/shd-mcp-plugin/skills/shd-discussions/references/discussion-contract.md new file mode 100644 index 0000000..471058b --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-discussions/references/discussion-contract.md @@ -0,0 +1,14 @@ +# Discussion contract + +Use the narrowest tool for the request: + +- discovery: `shd_list_discussion_channels`, + `shd_list_discussion_topics`; +- content: `shd_list_discussion_messages`, `shd_search_discussions`; +- writes: `shd_add_discussion_message`, `shd_update_discussion_message`; +- files: `shd_upload_discussion_attachment`. + +Resolve the canonical channel/topic/message identifiers before a write. Keep +searches bounded, distinguish no results from denied scope, and retain the +server's pagination or conflict fields. A message edit or attachment upload is +a side effect: require explicit user intent and report the final server result. diff --git a/plugins/shd-mcp-plugin/skills/shd-documents/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-documents/SKILL.md new file mode 100644 index 0000000..94fc1c7 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-documents/SKILL.md @@ -0,0 +1,29 @@ +--- +name: shd-documents +description: Use when the user asks to inspect, generate, send, publish, revise or audit SHD documents, templates, comments or public links. +--- + +# SHD documents + +See `references/document-safety.md` before handling publication, PDF or +contract-related document actions. + +## Read and prepare + +- Resolve the project and document identifiers before reading content. +- Read the document, relevant template/configuration, revisions and comments + needed for the requested result; do not treat a filename as authorization. +- Keep document status, approval state, external links and public links + separate in the report. +- Use the document's returned revision or version when a write accepts one. +- In a UI-capable MCP host, pass normalized list records to + `shd_render_documents_widget`; keep the structured document list as the + fallback and use `shd_get_contract` only for an explicitly selected record. + +## Mutations and publication + +Generating a PDF, sending a document, saving a contract, publishing a public +link or changing document state requires an explicit request. Explain the +target and audience before publication, preserve the server's ACL and expiry +rules, and perform readback when the tool provides it. Never expose private +links, bearer values or document content outside the authorized result. diff --git a/plugins/shd-mcp-plugin/skills/shd-documents/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-documents/agents/openai.yaml new file mode 100644 index 0000000..6767f69 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-documents/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD documents" + short_description: "Inspect and safely manage documents" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-documents/references/document-safety.md b/plugins/shd-mcp-plugin/skills/shd-documents/references/document-safety.md new file mode 100644 index 0000000..accf4b1 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-documents/references/document-safety.md @@ -0,0 +1,14 @@ +# Document safety contract + +Useful read tools include `shd_list_contracts`, `shd_get_contract`, +`shd_list_document_revisions`, `shd_list_document_templates`, +`shd_list_document_comments`, `shd_list_document_external_links` and +`shd_list_document_public_links`. PDF inspection uses +`shd_download_document_pdf`; generation uses `shd_generate_document_pdf`. + +Treat these as separate side effects: `shd_send_document`, +`shd_publish_document_public_link`, `shd_save_document_contract` and +`shd_document_contract_workflow`. Before any of them, resolve the document, +read the current state and require the exact requested action. Report recipient, +visibility, expiry, revision and server validation when returned. A public link +is never a harmless preview and must not be created just to test access. diff --git a/plugins/shd-mcp-plugin/skills/shd-entity-resolution/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-entity-resolution/SKILL.md new file mode 100644 index 0000000..b954d0a --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-entity-resolution/SKILL.md @@ -0,0 +1,26 @@ +--- +name: shd-entity-resolution +description: Use when the user asks to find a CRM entity, resolve duplicate names, compare counterparties, or determine whether records refer to the same business object. +--- + +# SHD entity resolution + +## Resolve first + +1. Prefer an exact returned ID, code or external reference over a name. +2. Search with `shd_list_crm`, then read candidates with + `shd_get_crm_entity`. +3. Inspect `shd_list_crm_entity_links` when relationships, projects or deals + are part of the identity decision. +4. Compare only fields returned by SHD. Report candidate records, matching + evidence, conflicting evidence and unresolved fields separately. + +## Safety + +- A similar name is not proof of a duplicate. +- Do not merge, delete, reassign ownership or change a relationship while + resolving identity. +- A write requires an exact target, an explicit user request and the current + server validation contract. Read the record again after a permitted write. + +See `references/entity-resolution.md` for the candidate-report format. diff --git a/plugins/shd-mcp-plugin/skills/shd-entity-resolution/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-entity-resolution/agents/openai.yaml new file mode 100644 index 0000000..bb4289a --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-entity-resolution/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD entity resolution + short_description: Resolve CRM records and duplicates +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-entity-resolution/references/entity-resolution.md b/plugins/shd-mcp-plugin/skills/shd-entity-resolution/references/entity-resolution.md new file mode 100644 index 0000000..0577a30 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-entity-resolution/references/entity-resolution.md @@ -0,0 +1,8 @@ +# Entity-resolution report + +Report each candidate as: + +`candidate → identifiers → matching fields → conflicting fields → related records → confidence → next action` + +Confidence is an explanation of returned evidence, not a server permission or +an authorization to merge records. diff --git a/plugins/shd-mcp-plugin/skills/shd-estimate-management/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-estimate-management/SKILL.md new file mode 100644 index 0000000..0e4fee5 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-estimate-management/SKILL.md @@ -0,0 +1,28 @@ +--- +name: shd-estimate-management +description: Use when the user asks to inspect, compare, validate, create or update SHD estimates, proposals, terms or document contracts. +--- + +# SHD estimates and proposal documents + +## Read path + +1. Resolve the project, proposal, terms document or contract before acting. +2. Use `shd_list_proposals` and `shd_get_proposal` for proposal registers and + details. +3. Use `shd_list_terms_documents`, `shd_get_terms_document`, + `shd_get_terms_document_completeness` and `shd_validate_terms_document` for + terms and completeness checks. +4. Inspect template capabilities before proposing a template-driven change. +5. Report line items, versions, completeness, approvals and publication state + only when those fields are returned by the server. + +## Mutations + +- Creating, replacing items, requesting approval, publishing, restoring or + deleting a proposal/document requires an exact explicit request. +- Read the latest version and use the tool's concurrency and idempotency fields + before a write. +- Never publish or request approval as a side effect of an audit or comparison. + +See `references/estimate-safety.md` before a proposal or terms mutation. diff --git a/plugins/shd-mcp-plugin/skills/shd-estimate-management/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-estimate-management/agents/openai.yaml new file mode 100644 index 0000000..98ddf61 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-estimate-management/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD estimates and proposals + short_description: Estimate and document workflows +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-estimate-management/references/estimate-safety.md b/plugins/shd-mcp-plugin/skills/shd-estimate-management/references/estimate-safety.md new file mode 100644 index 0000000..41e0e8b --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-estimate-management/references/estimate-safety.md @@ -0,0 +1,7 @@ +# Estimate and proposal safety + +- Draft, validated, approved and published are separate states. +- A calculated total is not an approval and a generated PDF is not a + publication. +- Compare revisions before restoring or replacing a document. +- Keep the project, counterparty and version identifiers in the final report. diff --git a/plugins/shd-mcp-plugin/skills/shd-event-positions/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-event-positions/SKILL.md new file mode 100644 index 0000000..98093f3 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-event-positions/SKILL.md @@ -0,0 +1,25 @@ +--- +name: shd-event-positions +description: Use when the user asks about SHD events, booking availability, scheduling slots, event types or booking positions. +--- + +# SHD events and scheduling + +## Read path + +1. Start with `shd_get_scheduling_overview` when the scope is broad. +2. Use `shd_list_scheduling_event_types`, + `shd_list_scheduling_availability`, `shd_list_scheduling_slots` and + `shd_list_scheduling_bookings` for the exact requested view. +3. Preserve the returned timezone, slot state, booking state and integration + status. Do not turn an available slot into a confirmed booking. + +## Mutations + +`shd_hold_scheduling_slot`, `shd_create_scheduling_booking`, +`shd_confirm_scheduling_booking`, `shd_reschedule_scheduling_booking` and +`shd_cancel_scheduling_booking` are explicit writes. Read the current slot or +booking first, pass the current concurrency/idempotency values accepted by the +schema and report the final server state. + +See `references/scheduling-safety.md` for the state boundaries. diff --git a/plugins/shd-mcp-plugin/skills/shd-event-positions/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-event-positions/agents/openai.yaml new file mode 100644 index 0000000..c2d0cf6 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-event-positions/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD events and scheduling + short_description: Slots, bookings and event positions +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-event-positions/references/scheduling-safety.md b/plugins/shd-mcp-plugin/skills/shd-event-positions/references/scheduling-safety.md new file mode 100644 index 0000000..1016945 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-event-positions/references/scheduling-safety.md @@ -0,0 +1,7 @@ +# Scheduling state boundaries + +- Availability is not a hold. +- A hold is not a booking. +- A booking is not confirmed until SHD returns confirmation. +- A cancellation or reschedule must identify the exact booking and preserve + the server's conflict response. diff --git a/plugins/shd-mcp-plugin/skills/shd-finance-crm/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-finance-crm/SKILL.md new file mode 100644 index 0000000..bb0c149 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-finance-crm/SKILL.md @@ -0,0 +1,41 @@ +--- +name: shd-finance-crm +description: Use when the user asks for finance or CRM information, document/payment checks, customer records, deals, relationships, or a project business overview in SHD. +--- + +# SHD Finance and CRM + +For a high-level project overview, prefer `shd_get_project_context` and request +only the `finance` or `summary` sections needed. For a detailed request use +the module tools below. + +## Finance + +- Find documents with `shd_list_finance_documents`. +- Read one with `shd_get_finance_document`. +- Read payments with `shd_list_finance_payments` or + `shd_get_finance_payment`. +- Resolve allowed references with `shd_list_finance_refs`. +- In a UI-capable MCP host, pass normalized finance records to + `shd_render_finance_widget`; keep the structured list as the fallback. + +When auditing, compare document type, project/counterparty links, line items, +currency, totals, due dates, payment state and returned validation. Never infer +approval, payment or publication from a document's title or amount. + +## CRM + +- Find entities with `shd_list_crm` and read one with `shd_get_crm_entity`. +- In a UI-capable MCP host, pass normalized CRM records to + `shd_render_crm_widget`; keep the structured list as the fallback. +- Resolve relationships with `shd_list_crm_entity_links` and inspect available + pipelines/stages before a deal change. +- Use `shd_save_crm_entity` only for an explicitly requested create/update after + duplicate and relationship checks. + +Do not approve, publish, delete, merge, move a deal stage, create a payment or +change ownership unless the user explicitly requests that exact operation. +Report IDs, resolved links, changed fields and server validation separately from +recommendations. + +See `references/finance-crm-audit.md` for the finance/CRM audit boundary. diff --git a/plugins/shd-mcp-plugin/skills/shd-finance-crm/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-finance-crm/agents/openai.yaml new file mode 100644 index 0000000..e41e693 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-finance-crm/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD finance and CRM + short_description: Finance and customer workflows +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-finance-crm/references/finance-crm-audit.md b/plugins/shd-mcp-plugin/skills/shd-finance-crm/references/finance-crm-audit.md new file mode 100644 index 0000000..bfeaef8 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-finance-crm/references/finance-crm-audit.md @@ -0,0 +1,6 @@ +# Finance and CRM audit boundary + +Finance documents, payments, allocations, CRM entities, links and stages are +different objects. Report their identifiers and returned state separately. +Use the dedicated `shd-financial-account-audit` workflow for reconciliation, +balances, settlements or audit-log questions. diff --git a/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/SKILL.md new file mode 100644 index 0000000..68ed30e --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/SKILL.md @@ -0,0 +1,30 @@ +--- +name: shd-financial-account-audit +description: Use when the user asks to audit SHD finance accounts, balances, payments, documents, allocations, settlements or finance history. +--- + +# SHD financial audit + +## Read path + +1. Resolve project, legal entity, counterparty and period before reading. +2. Use `shd_list_finance_refs` for allowed categories, accounts and reference + values when the request depends on them. +3. Read documents and payments with `shd_list_finance_documents`, + `shd_get_finance_document`, `shd_list_finance_payments` and + `shd_get_finance_payment`. +4. Use `shd_get_finance_account_balance` and + `shd_list_finance_audit_log` when balances or history are requested. +5. Reconcile only records returned for the same scope and period. Mark missing + links, currency differences and permission gaps explicitly. + +## Settlement safety + +- Allocation, removal of allocation, payment creation, approval, deletion and + document replacement are writes; do not perform them during an audit. +- A document total is not proof of payment, and a payment is not proof of + allocation. +- For an explicitly requested write, read the latest payment/document and use + the server's idempotency and concurrency contract, then read back the result. + +See `references/finance-audit.md` for the reconciliation format. diff --git a/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/agents/openai.yaml new file mode 100644 index 0000000..342ddb5 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD financial audit + short_description: Balances, payments and settlements +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/references/finance-audit.md b/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/references/finance-audit.md new file mode 100644 index 0000000..a2546a9 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-financial-account-audit/references/finance-audit.md @@ -0,0 +1,8 @@ +# Finance audit format + +Report: + +`scope → period → currency → source record → observed amount/state → linked record → discrepancy → priority` + +Do not hide an unresolved counterparty, currency conversion, allocation or +permission boundary behind an aggregate number. diff --git a/plugins/shd-mcp-plugin/skills/shd-gitea/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-gitea/SKILL.md new file mode 100644 index 0000000..3657c7e --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-gitea/SKILL.md @@ -0,0 +1,24 @@ +--- +name: shd-gitea +description: Use when the user asks to inspect or manage SHD-linked Gitea issues, labels, comments or issue attachments. +--- + +# SHD Gitea + +See `references/gitea-contract.md` for repository and issue safety. + +## Read and resolve + +- Resolve the canonical repository and issue identifiers returned by SHD before + acting. +- Read the issue, labels and current state before creating a comment or + changing labels. +- Keep Gitea state separate from SHD project/task state; do not claim that a + label or issue update changed the SHD record unless the server says so. + +## Mutations + +Creating an issue, commenting, changing labels or uploading an attachment +requires an explicit request. Report repository, issue number, changed labels, +comment/attachment result and server validation. Never put credentials or +private attachment URLs in the response or repository. diff --git a/plugins/shd-mcp-plugin/skills/shd-gitea/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-gitea/agents/openai.yaml new file mode 100644 index 0000000..b3f6885 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-gitea/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD Gitea" + short_description: "Review and update linked Gitea issues" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-gitea/references/gitea-contract.md b/plugins/shd-mcp-plugin/skills/shd-gitea/references/gitea-contract.md new file mode 100644 index 0000000..d7d798f --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-gitea/references/gitea-contract.md @@ -0,0 +1,11 @@ +# Gitea contract + +Use `shd_list_gitea_issues` and `shd_list_gitea_labels` for discovery. Writes +are `shd_create_gitea_issue`, `shd_comment_gitea_issue`, +`shd_update_gitea_issue_labels` and `shd_upload_gitea_issue_attachment`. + +Resolve the repository and issue from returned server data, preserve the +current issue state before a label update, and use an idempotency key when the +tool schema offers one. A comment or attachment is an external side effect; +require exact user intent and report readback. Do not assume Gitea permissions +from SHD project permissions alone. diff --git a/plugins/shd-mcp-plugin/skills/shd-inventory/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-inventory/SKILL.md new file mode 100644 index 0000000..ef3a3f8 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-inventory/SKILL.md @@ -0,0 +1,26 @@ +--- +name: shd-inventory +description: Use when the user asks to inspect or change SHD inventory items, assets, stock, procurement, reservations, receipts or stocktakes. +--- + +# SHD inventory + +See `references/inventory-safety.md` before any stock, asset or procurement +mutation. + +## Inspect + +- Resolve the project, location, item, asset or procurement identity from + server results. +- Read current stock, lots, reservations, movements, receipts, maintenance, + assignments and audit data relevant to the question. +- Keep available, reserved, received, written-off and counted quantities + distinct. Do not calculate an authoritative balance from partial pages. + +## Mutations + +Reserve, release, receive, write off or close a stocktake only on an explicit +request. Creating/updating resources and generic inventory actions require the +same read-before-write and conflict/idempotency handling. Report quantities, +location, source document, server validation and readback; never silently +repair a discrepancy by changing stock. diff --git a/plugins/shd-mcp-plugin/skills/shd-inventory/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-inventory/agents/openai.yaml new file mode 100644 index 0000000..6c5e874 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-inventory/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD inventory" + short_description: "Audit stock, assets and procurement" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-inventory/references/inventory-safety.md b/plugins/shd-mcp-plugin/skills/shd-inventory/references/inventory-safety.md new file mode 100644 index 0000000..b9ab671 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-inventory/references/inventory-safety.md @@ -0,0 +1,14 @@ +# Inventory safety contract + +Read tools cover items/assets, procurement, locations, movements, lots, +reservations, receipts, stocktakes, labels, assignments, maintenance and the +inventory audit log. Use the narrowest `shd_list_inventory_*` or +`shd_get_inventory_*` tool and preserve pagination. + +Side-effecting operations include `shd_reserve_inventory_stock`, +`shd_release_inventory_stock`, `shd_receive_inventory_stock`, +`shd_write_off_inventory_stock`, `shd_close_inventory_stocktake`, +`shd_create_inventory_resource`, `shd_update_inventory_resource` and +`shd_inventory_action`. Resolve the exact target and latest quantity first; +require explicit confirmation for irreversible or bulk operations and verify +the resulting movement/audit record. diff --git a/plugins/shd-mcp-plugin/skills/shd-notifications/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-notifications/SKILL.md new file mode 100644 index 0000000..2122ae9 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-notifications/SKILL.md @@ -0,0 +1,25 @@ +--- +name: shd-notifications +description: Use when the user asks to inspect SHD notifications, notification modules, read state or preferences, or mark notifications read. +--- + +# SHD notifications + +See `references/notification-contract.md` for read-state and preference +boundaries. + +## Read + +- Use `shd_list_notifications` with bounded filters and preserve notification + IDs and timestamps. +- Use module, read-state and preference tools only for the authenticated user + or the explicitly authorized scope. +- Distinguish unread, read, muted and unavailable data; do not invent a missing + notification source. + +## State changes + +Marking one or more notifications read or changing preferences changes user +state. Do it only when explicitly requested, use the returned IDs, and report +the number and final state. Never mark a whole feed read merely because it was +displayed or summarized. diff --git a/plugins/shd-mcp-plugin/skills/shd-notifications/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-notifications/agents/openai.yaml new file mode 100644 index 0000000..5399f95 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-notifications/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD notifications" + short_description: "Review alerts and notification state" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-notifications/references/notification-contract.md b/plugins/shd-mcp-plugin/skills/shd-notifications/references/notification-contract.md new file mode 100644 index 0000000..8f73e2f --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-notifications/references/notification-contract.md @@ -0,0 +1,11 @@ +# Notification contract + +Read with `shd_list_notifications`, `shd_list_notification_modules`, +`shd_get_notification_read_state`, `shd_get_notification_preferences` and, +for document-specific items, `shd_list_document_notifications`. + +State-changing tools are `shd_update_notification_preferences`, +`shd_mark_notification_read`, `shd_mark_all_notifications_read` and +`shd_mark_notifications_read`. Require explicit scope for bulk marking, +prefer stable notification IDs, and report server readback. A list response is +not authorization to alter every item in it. diff --git a/plugins/shd-mcp-plugin/skills/shd-organizations-acl/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-organizations-acl/SKILL.md new file mode 100644 index 0000000..f6504a9 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-organizations-acl/SKILL.md @@ -0,0 +1,26 @@ +--- +name: shd-organizations-acl +description: Use when the user asks to inspect or change SHD organizations, members, invitations, roles, access audits or two-factor policies. +--- + +# SHD organizations and ACL + +See `references/organization-acl.md` for identity resolution and mutation +boundaries. + +## Inspect + +- Resolve the canonical organization ID; never use a guessed name as a write + target. +- Read members, invitations, audit entries and the current two-factor policy + before explaining access. +- Report organization, user, role, invitation state and policy as separate + facts. A denied or incomplete list is not proof that a member is absent. + +## Change access + +Inviting, adding, updating or removing a member, changing a two-factor policy, +or creating, archiving or restoring an organization requires explicit intent. +Show the exact organization and user scope before the mutation. Preserve server +authorization, conflict checks and audit readback; never broaden access to +make a failed request succeed. diff --git a/plugins/shd-mcp-plugin/skills/shd-organizations-acl/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-organizations-acl/agents/openai.yaml new file mode 100644 index 0000000..77aa4e1 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-organizations-acl/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD organizations and ACL" + short_description: "Audit members, roles and access policies" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-organizations-acl/references/organization-acl.md b/plugins/shd-mcp-plugin/skills/shd-organizations-acl/references/organization-acl.md new file mode 100644 index 0000000..4809d07 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-organizations-acl/references/organization-acl.md @@ -0,0 +1,13 @@ +# Organization and ACL contract + +Read with `shd_list_organization_members`, `shd_list_organization_invitations`, +`shd_list_organization_audit` and +`shd_get_organization_two_factor_policy`. Resolve users and organizations from +server-returned IDs. + +Mutations include invitation operations, member add/update/remove, +organization create/update/archive/restore and +`shd_update_organization_two_factor_policy`. Every mutation needs explicit +authorization, the latest relevant state, and final server/audit readback when +available. Do not disclose invitation secrets or use an email/name match as a +substitute for a returned user identity. diff --git a/plugins/shd-mcp-plugin/skills/shd-project-db-audit/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-project-db-audit/SKILL.md new file mode 100644 index 0000000..f9398f9 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-db-audit/SKILL.md @@ -0,0 +1,39 @@ +--- +name: shd-project-db-audit +description: Use when the user asks to inspect ProjectBase tables, validate project data, find duplicate or broken links, or audit ProjectBase quality without changing records. +--- + +# ProjectBase audit + +See `references/audit-contract.md` for the bounded read and evidence format. + +## Workflow + +1. Resolve the canonical Base identity. A supplied `project_code` is accepted + as the legacy alias only when the server accepts it; prefer the returned + Base identity for subsequent calls. +2. If no table is named, call `shd_project_db_tables` first and select only the + relevant tables. Do not load every table by default. +3. Call `shd_project_db_schema` for each selected table before reading its + records. Pass the table explicitly when a single-table audit is requested. +4. Call `shd_project_db_records` with bounded reads and the selected table. +5. Compare records with the returned schema and report only evidence visible in + the response. + +## Findings + +Check for duplicate business numbers, missing required values, invalid select +values, unresolved linked records, orphaned references, conflicting DALI or +electrical identifiers, formula/derived-field risks and incomplete source data +when the selected tables expose those fields. + +Report `table → record → field → observed value → reason → priority`. Distinguish +confirmed defects from data that could not be checked because the schema or +records were unavailable. + +## Safety + +This workflow is read-only. Do not call create, update, delete, import, bulk +upsert or generic action tools while auditing. If the user asks to repair +findings, first present the proposed records and then use the dedicated +validation/dry-run contract before any explicit write. diff --git a/plugins/shd-mcp-plugin/skills/shd-project-db-audit/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-project-db-audit/agents/openai.yaml new file mode 100644 index 0000000..3f629c0 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-db-audit/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: ProjectBase audit + short_description: Read-only schema and data audit +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-project-db-audit/references/audit-contract.md b/plugins/shd-mcp-plugin/skills/shd-project-db-audit/references/audit-contract.md new file mode 100644 index 0000000..877dc66 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-db-audit/references/audit-contract.md @@ -0,0 +1,20 @@ +# ProjectBase audit contract + +Use this contract for every read-only ProjectBase audit. + +1. Resolve the canonical Base identity before selecting tables. Treat a + user-provided project code as an alias until the server returns the + authoritative identity. +2. Discover tables only when the request does not name them. Do not load every + table just to find a possible issue. +3. Read the schema before records for every selected table. Keep the table + name explicit in each subsequent request. +4. Bound record reads with the smallest useful limit and preserve the server's + pagination or truncation metadata. +5. Report evidence as `table → record → field → observed value → reason → + priority`. Mark a finding as unverified when the schema or record needed to + prove it was unavailable. + +Never repair an audit finding inside the audit workflow. A repair requires a +separate proposal, an explicit mutation request, the current schema and +records, the server's validation/dry-run contract, and final readback. diff --git a/plugins/shd-mcp-plugin/skills/shd-project-files/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-project-files/SKILL.md new file mode 100644 index 0000000..d4ffe30 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-files/SKILL.md @@ -0,0 +1,30 @@ +--- +name: shd-project-files +description: Use when the user asks to inspect project files, obtain a file link, share or zip a file, rename or move a path, or delete project files. +--- + +# SHD project files + +## Resolve paths + +1. Call `shd_list_files` with the exact `project_code` and, when supplied, the + path. +2. Resolve the exact file or directory path and distinguish files from + directories before any action. +3. Use `shd_get_file_link` only when the user asks for a temporary file link or + download. + +## Actions + +`shd_create_file_action` supports the explicit actions `share-link`, `zip-link`, +`rename`, `move` and `delete`. Use the exact action matching the request. For +rename, move and delete, confirm the source/destination and replacement scope +from the current listing first. Mutating actions require a stable +`idempotency_key`; delete additionally requires `confirm: true` and the server +version/confirmation fields accepted by its schema. + +Do not expose bearer tokens or raw secret material in prose or logs. Return a +temporary URL only when the user explicitly asks for it. Do not overwrite, +publish, share or delete a path merely because the user asked to inspect it. + +See `references/file-actions.md` for the file-action boundary. diff --git a/plugins/shd-mcp-plugin/skills/shd-project-files/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-project-files/agents/openai.yaml new file mode 100644 index 0000000..06f6af2 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-files/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD project files + short_description: Inspect and safely manage files +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-project-files/references/file-actions.md b/plugins/shd-mcp-plugin/skills/shd-project-files/references/file-actions.md new file mode 100644 index 0000000..c335b47 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-files/references/file-actions.md @@ -0,0 +1,5 @@ +# File action boundary + +Resolve the exact project path first. Inspection, temporary link retrieval, +share/zip, rename/move and delete are separate intents. Mutating actions need +the server's current version, confirmation and idempotency fields. diff --git a/plugins/shd-mcp-plugin/skills/shd-project-status/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-project-status/SKILL.md new file mode 100644 index 0000000..4abdfa9 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-status/SKILL.md @@ -0,0 +1,41 @@ +--- +name: shd-project-status +description: Use when the user asks for a status report, operational summary, risks, blockers, next actions, or a cross-module overview of one SHD project. +--- + +# SHD project status + +## Resolve the project + +- If the user supplied an exact project code, use it directly. +- If the user supplied only a name, call `shd_list_projects` with `q` once, + choose only an unambiguous exact match, and ask for the project code when + multiple projects match. + +## Read the context + +For a full summary call `shd_get_project_context` with the resolved +`project_code`, `include` set to the requested sections, and +`limit_per_section: 100`. The available sections are: + +`summary`, `tasks`, `discussions`, `documents`, `finance`, `terms`, `agents`. + +Request only the sections needed for a narrow question. Do not pretend that a +section is empty when the server reported it unavailable or the user lacks +access. + +## Report + +Separate the result into: + +- confirmed project state; +- current deadlines or status values returned by SHD; +- blockers and risks supported by retrieved records; +- next actions, clearly marked as recommendations; +- unavailable or unresolved sections. + +Do not convert a task deadline into a project deadline, infer a completion date +from activity, or claim deployment success from a status field. This workflow is +read-only unless the user separately requests a specific change. + +See `references/context-sections.md` for section selection and unavailable data. diff --git a/plugins/shd-mcp-plugin/skills/shd-project-status/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-project-status/agents/openai.yaml new file mode 100644 index 0000000..0305dca --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-status/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD project status + short_description: Project summaries and risks +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-project-status/references/context-sections.md b/plugins/shd-mcp-plugin/skills/shd-project-status/references/context-sections.md new file mode 100644 index 0000000..116ac4c --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-project-status/references/context-sections.md @@ -0,0 +1,5 @@ +# Project context sections + +Use only the sections requested by the user. Available sections currently +include `summary`, `tasks`, `discussions`, `documents`, `finance`, `terms` and +`agents`; unavailable or denied sections must remain visible in the report. diff --git a/plugins/shd-mcp-plugin/skills/shd-realtime-activity/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-realtime-activity/SKILL.md new file mode 100644 index 0000000..b50d6b8 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-realtime-activity/SKILL.md @@ -0,0 +1,23 @@ +--- +name: shd-realtime-activity +description: Use when the user asks to inspect SHD realtime events, start or terminate a realtime session, or review operational activity and audit history. +--- + +# SHD realtime and activity + +See `references/realtime-contract.md` for session lifecycle and event handling. + +## Read and observe + +- Resolve the authorized project/module scope before reading events or audit + history. +- Use bounded event reads and preserve event IDs, cursors and timestamps. +- Distinguish historical audit records from a live realtime session; do not + claim that an event stream is complete when it was truncated or disconnected. + +## Session lifecycle + +Starting or terminating a realtime session is a stateful operation. Require an +explicit request, retain the returned session ID and scope, avoid duplicate +starts on retry, and terminate only the requested session. Report connection +or terminal state rather than fabricating an event. diff --git a/plugins/shd-mcp-plugin/skills/shd-realtime-activity/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-realtime-activity/agents/openai.yaml new file mode 100644 index 0000000..5368881 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-realtime-activity/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD realtime and activity" + short_description: "Inspect events and manage live sessions" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-realtime-activity/references/realtime-contract.md b/plugins/shd-mcp-plugin/skills/shd-realtime-activity/references/realtime-contract.md new file mode 100644 index 0000000..dc3b920 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-realtime-activity/references/realtime-contract.md @@ -0,0 +1,11 @@ +# Realtime and activity contract + +Use `shd_start_realtime_session`, `shd_get_realtime_events` and +`shd_terminate_realtime_session` for the session lifecycle. Use the relevant +read-only audit/activity tool for historical records, such as +`shd_get_audit_history`, when the request is about what already happened. + +Keep session IDs, scopes, cursors and last-seen timestamps separate. A retry +must not create a second session unless the server explicitly supports an +idempotency key. Termination requires the exact returned session ID and should +be confirmed by terminal readback. diff --git a/plugins/shd-mcp-plugin/skills/shd-routing/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-routing/SKILL.md new file mode 100644 index 0000000..f92ba4b --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-routing/SKILL.md @@ -0,0 +1,65 @@ +--- +name: shd-routing +description: Use for any request that asks SHD for data, a project operation, a module workflow, or a change to SHD records. Route the request to the narrowest existing SHD MCP tool and preserve server-side permissions. +--- + +# SHD routing and safety + +SHD MCP is the source of truth for live data, tool schemas, permissions, +organization/project scope, conflicts, idempotency, audit and persisted +readback. Do not invent fields, statuses, identifiers, routes or capabilities. + +## Route the request + +- Project list, project status, deadlines or project context: use the Projects + Core tools and the `shd-active-projects` or `shd-project-status` workflow. +- ProjectBase schema, records, links or data quality: use Project DB tools and + the `shd-project-db-audit` workflow. +- Tasks, task projects, task status or task dates: use Tasks tools and the + `shd-task-workflow` workflow. +- Project files and paths: use Files tools and the `shd-project-files` workflow. +- Discussions, channels, topics, messages or attachments: use Discussions tools and the `shd-discussions` workflow. +- Documents, templates, revisions, PDFs or publication links: use Documents tools and the `shd-documents` workflow. +- Organizations, members, invitations, roles or two-factor policy: use Organizations tools and the `shd-organizations-acl` workflow. +- Notifications, preferences or read state: use Notifications tools and the `shd-notifications` workflow. +- Inventory, stock, assets, procurement or stocktakes: use Inventory tools and the `shd-inventory` workflow. +- Agents, controllers, diagnostics, tunnels or network access: use Agents tools and the `shd-agents-operations` workflow. +- Status-page monitors, history, groups or incidents: use Status Page tools and the `shd-status-page` workflow. +- Realtime sessions, event cursors or historical activity: use Realtime tools and the `shd-realtime-activity` workflow. +- Terms documents, revisions, completeness or contract discussions: use Terms tools and the `shd-terms-contracts` workflow. +- Linked Gitea issues, labels, comments or attachments: use Gitea tools and the `shd-gitea` workflow. +- Finance or CRM records: use the specific module tools and the + `shd-finance-crm` workflow; use project context for a high-level overview. +- Finance reconciliation, balances, settlements or audit history: + `shd-financial-account-audit`. +- Proposals, estimates, quotes or estimate-document contracts: + `shd-estimate-management`. +- Scheduling, event types, slots or bookings: `shd-event-positions`. +- Wiki, notes, pages, revisions or note databases: `shd-wiki-management`. +- Entity matching or possible duplicates: `shd-entity-resolution`. +- Analytics, comparisons, trends or reports: `shd-analytics`. +- A multi-record change: use `shd-safe-bulk-change` before any mutation. + +Use `shd_capabilities` only when the available module or permission boundary is +unclear. If a tool or module is unavailable, report that fact instead of +falling back to an undocumented endpoint. + +## Read-first rule + +For every write, first read the target and its relevant schema or metadata. +Only perform a mutation when the user explicitly requested that mutation. A +request to inspect, summarize, compare, audit or suggest is not permission to +write. + +Preserve the exact server result. Separate confirmed values from inference, +and include affected identifiers, conflicts, validation errors and final +readback when the server returns them. + +## Scope and secrets + +Never ask for or expose access tokens, passwords, cookies, private keys, raw +public-link bearer tokens or integration secrets. Never use a user-provided +project name as an identifier when SHD has not resolved it to a returned +project code or ID. + +See `references/module-map.md` for the current high-level routing map. diff --git a/plugins/shd-mcp-plugin/skills/shd-routing/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-routing/agents/openai.yaml new file mode 100644 index 0000000..d3cfaec --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-routing/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD routing and safety + short_description: Route requests to safe MCP tools +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-routing/references/module-map.md b/plugins/shd-mcp-plugin/skills/shd-routing/references/module-map.md new file mode 100644 index 0000000..311e07a --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-routing/references/module-map.md @@ -0,0 +1,25 @@ +# SHD module map + +- Projects and project context → `shd_list_projects`, `shd_get_project`, + `shd_get_project_context`. +- ProjectBase → `shd_project_db_*`, `shd_project_base_*`. +- Tasks → `shd_list_tasks`, `shd_get_task`, task mutation tools. +- Files → `shd_list_files`, file action tools. +- Discussions → channel, topic, message search and attachment tools. +- Documents → document, template, revision, PDF and publication-link tools. +- Organizations and ACL → members, invitations, audit and two-factor policy + tools. +- Notifications → notification, preference and read-state tools. +- Inventory → stock, asset, procurement, reservation and stocktake tools. +- Agents → controller/user-agent status, diagnostics, tunnels, endpoints and + network-operation tools. +- Status Page → monitor, history, group and incident tools. +- Realtime and activity → session, event-cursor and audit/activity tools. +- Terms and contracts → Terms documents, completeness, revisions and point + discussion tools. +- Gitea → linked issue, label, comment and attachment tools. +- Finance and CRM → module-specific finance/CRM tools. +- Proposals, terms and document contracts → proposal/terms/document tools. +- Scheduling → `shd_get_scheduling_overview` and scheduling tools. +- Wiki and notes → note-space, page, revision and database tools. +- Unknown or permission-sensitive capability → `shd_capabilities` first. diff --git a/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/SKILL.md new file mode 100644 index 0000000..d764376 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/SKILL.md @@ -0,0 +1,30 @@ +--- +name: shd-safe-bulk-change +description: Use before any SHD bulk create, update, import, archive, delete, or other multi-record mutation, and whenever the user asks to plan a mass change. +--- + +# Safe SHD bulk changes + +## Plan first + +1. Confirm the target module, organization/project scope, exact match rule and + intended side effect. +2. Read current schemas and records. Estimate affected, skipped, invalid and + ambiguous rows. +3. Prefer a server validation or dry-run operation. For ProjectBase use + `shd_project_db_validate_records`, then + `shd_project_db_bulk_create_records` or + `shd_project_db_bulk_upsert_records` with `dry_run: true` when applicable. +4. Present the plan and stop unless the user explicitly authorized execution. + +## Execute safely + +Use stable idempotency keys, expected versions and exact match fields accepted +by the selected tool. Do not silently widen a project, organization, table or +record filter. Do not convert a failed or conflicting row into a new record. + +After execution, report created, updated, skipped, rejected and conflicted +rows, then use the server's persisted readback when available. Destructive +operations require explicit confirmation and remain subject to server ACL. + +See `references/write-preflight.md` for the required preflight record. diff --git a/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/agents/openai.yaml new file mode 100644 index 0000000..6a969e2 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD safe bulk changes + short_description: Plan and validate bulk mutations +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/references/write-preflight.md b/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/references/write-preflight.md new file mode 100644 index 0000000..9dd969d --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-safe-bulk-change/references/write-preflight.md @@ -0,0 +1,7 @@ +# Write preflight + +Before a multi-record write, record: + +`module → scope → match rule → current count → affected count → skipped/ambiguous count → validation result → idempotency key` + +Stop on an ambiguous match, validation failure, conflict or missing readback. diff --git a/plugins/shd-mcp-plugin/skills/shd-status-page/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-status-page/SKILL.md new file mode 100644 index 0000000..cb50a3d --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-status-page/SKILL.md @@ -0,0 +1,22 @@ +--- +name: shd-status-page +description: Use when the user asks to inspect SHD status-page monitors, history, groups or incidents, or to change public status monitoring. +--- + +# SHD status page + +See `references/status-page-safety.md` for monitor and incident boundaries. + +## Read + +- Resolve the status-page scope and monitor IDs before reporting health. +- Read current monitors and history; distinguish current state from historical + observations and from an incident declaration. +- Report unavailable, stale or unauthorized monitors explicitly. + +## Mutations + +Publishing an incident, creating/updating/deleting a group or monitor changes +an externally visible monitoring surface. Require an explicit request, exact +scope and current readback. Do not publish an incident to test the integration +and do not infer an outage from one missing response. diff --git a/plugins/shd-mcp-plugin/skills/shd-status-page/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-status-page/agents/openai.yaml new file mode 100644 index 0000000..6a56e6d --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-status-page/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD status page" + short_description: "Inspect monitors and publish incidents safely" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-status-page/references/status-page-safety.md b/plugins/shd-mcp-plugin/skills/shd-status-page/references/status-page-safety.md new file mode 100644 index 0000000..e9b8482 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-status-page/references/status-page-safety.md @@ -0,0 +1,14 @@ +# Status-page safety contract + +Read with `shd_get_status_page_monitors` and +`shd_get_status_page_monitor_history`. Mutations are +`shd_publish_status_page_incident`, `shd_create_status_page_group`, +`shd_update_status_page_group`, `shd_delete_status_page_group`, +`shd_create_status_page_monitor`, `shd_update_status_page_monitor` and +`shd_delete_status_page_monitor`. + +Before a mutation, resolve the canonical monitor/group IDs, read the latest +state and show the public scope, message, duration or target being changed. +Report server validation and final status. Deletion and incident publication +are consequential actions and must never be inferred from a question asking for +diagnosis. diff --git a/plugins/shd-mcp-plugin/skills/shd-task-workflow/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-task-workflow/SKILL.md new file mode 100644 index 0000000..b641250 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-task-workflow/SKILL.md @@ -0,0 +1,44 @@ +--- +name: shd-task-workflow +description: Use when the user asks to find, inspect, create, update, reschedule, archive, or delete SHD tasks or task-project data. +--- + +# SHD task workflow + +See `references/task-contract.md` for identifier resolution, conflict handling +and mutation readback requirements. + +## Read and resolve + +- Use `shd_list_task_projects` when the request concerns a task project or its + status. +- Use `shd_list_tasks` with `project_code`, `project_id`, `q`, `archived`, + `limit` or `offset` to find tasks. +- Use `shd_get_task` for one resolved task and + `shd_get_task_project_meta` for statuses, tags, sprints, views and custom + fields. +- Read comments or attachments only when they are relevant to the request. +- After `shd_list_tasks` returns, always pass normalized task records to + `shd_render_tasks_widget` before the final response when the host supports + MCP Apps UI. Use the structured task list or plain text only when the render + tool is unavailable or returns an error. + +Do not create a task from an ambiguous project name or duplicate a task that +already matches the request. + +## Mutations + +Only mutate when the user explicitly asks for the exact operation: + +- create with `shd_create_task`; +- update fields with `shd_update_task`; +- change status with `shd_update_task_status`; +- archive with `shd_archive_task`; +- delete with `shd_delete_task` and the server's explicit confirmation contract. + +Before updating, pass the latest `updated_at` when the tool accepts it. Use an +idempotency key when the tool schema accepts one. If the server reports a +conflict, stop and show the current state; do not overwrite it by guessing. + +Report the task ID, changed fields, server validation, conflict state and final +status. Never treat a suggested change as authorization to execute it. diff --git a/plugins/shd-mcp-plugin/skills/shd-task-workflow/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-task-workflow/agents/openai.yaml new file mode 100644 index 0000000..9c630ca --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-task-workflow/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD task workflow + short_description: Read and safely update tasks +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-task-workflow/references/task-contract.md b/plugins/shd-mcp-plugin/skills/shd-task-workflow/references/task-contract.md new file mode 100644 index 0000000..2442a29 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-task-workflow/references/task-contract.md @@ -0,0 +1,20 @@ +# Task workflow contract + +Resolve task context before acting: + +- use a canonical task-project identifier when the server returns one; +- search by explicit project, task ID or bounded query rather than guessing + from a display name; +- read task-project metadata before changing status, sprint, tags or custom + fields; +- retain `updated_at`, version or equivalent conflict data from the latest + read whenever the mutation schema supports it. + +For a write, report the exact operation, task ID, changed fields, idempotency +key when used, server validation, conflict result and readback state. A +conflict or ambiguous match is a stop condition: show the current state and +ask for a narrower target instead of overwriting it. + +Delete and archive operations require their server-side confirmation contract. +Never treat a proposed task change or a natural-language suggestion as write +authorization. diff --git a/plugins/shd-mcp-plugin/skills/shd-terms-contracts/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-terms-contracts/SKILL.md new file mode 100644 index 0000000..0638c1e --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-terms-contracts/SKILL.md @@ -0,0 +1,24 @@ +--- +name: shd-terms-contracts +description: Use when the user asks to inspect, compare, discuss, revise or restore SHD Terms documents and contract points. +--- + +# SHD Terms and contracts + +See `references/terms-contract.md` for revision, completeness and discussion +rules. + +## Inspect + +- Resolve the canonical Terms document and project context. +- Read completeness, current revision and relevant history before comparing or + summarizing contractual content. +- Keep document text, comments, point discussions and completeness findings + distinct; identify unavailable sections instead of filling them in. + +## Changes + +Restoring a revision or adding a contract comment/discussion point requires an +explicit request and the exact document/point scope. Preserve the latest +revision or conflict token where available, report the created comment or +restored revision, and never present a draft as an approved contract. diff --git a/plugins/shd-mcp-plugin/skills/shd-terms-contracts/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-terms-contracts/agents/openai.yaml new file mode 100644 index 0000000..8211180 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-terms-contracts/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "SHD Terms and contracts" + short_description: "Review revisions and contract completeness" +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-terms-contracts/references/terms-contract.md b/plugins/shd-mcp-plugin/skills/shd-terms-contracts/references/terms-contract.md new file mode 100644 index 0000000..8c61162 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-terms-contracts/references/terms-contract.md @@ -0,0 +1,11 @@ +# Terms and contract contract + +Read with `shd_list_terms_documents`, `shd_get_terms_document`, +`shd_get_terms_document_completeness`, `shd_list_terms_document_revisions` and +`shd_get_terms_document_revision`. Use `shd_terms_description_comment` and +`shd_terms_point_discussion` only for explicit comment/discussion requests. + +`shd_restore_terms_document_revision` is a mutation: resolve the document and +revision, read current state, require confirmation and report readback. Never +restore merely because an older revision looks cleaner, and never confuse +completeness analysis with legal approval. diff --git a/plugins/shd-mcp-plugin/skills/shd-wiki-management/SKILL.md b/plugins/shd-mcp-plugin/skills/shd-wiki-management/SKILL.md new file mode 100644 index 0000000..bbebed1 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-wiki-management/SKILL.md @@ -0,0 +1,26 @@ +--- +name: shd-wiki-management +description: Use when the user asks to search, read, compare, create or update SHD Wiki, notes, pages, collections, databases, revisions or attachments. +--- + +# SHD Wiki and notes + +## Read path + +1. Resolve the note space and page tree with `shd_list_note_spaces`, + `shd_get_note_space_tree` and `shd_list_note_pages`. +2. Search with `shd_search_note_blocks`, then read the selected page with + `shd_read_note_document` or `shd_get_note_page`. +3. Use revision and operation tools to compare versions before proposing a + replacement or restore. +4. Keep attachments, backlinks, comments, database records and page content as + separate objects in the report. + +## Mutations + +Creating, replacing, moving, archiving, deleting, importing, granting members +or changing review state requires an exact explicit request. Read the current +object first, preserve the latest revision/version and use the dedicated +operation contract. Read back the persisted result after a successful write. + +See `references/wiki-safety.md` for content and revision boundaries. diff --git a/plugins/shd-mcp-plugin/skills/shd-wiki-management/agents/openai.yaml b/plugins/shd-mcp-plugin/skills/shd-wiki-management/agents/openai.yaml new file mode 100644 index 0000000..08872fa --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-wiki-management/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: SHD Wiki and notes + short_description: Pages, revisions and note databases +policy: + allow_implicit_invocation: false diff --git a/plugins/shd-mcp-plugin/skills/shd-wiki-management/references/wiki-safety.md b/plugins/shd-mcp-plugin/skills/shd-wiki-management/references/wiki-safety.md new file mode 100644 index 0000000..e210295 --- /dev/null +++ b/plugins/shd-mcp-plugin/skills/shd-wiki-management/references/wiki-safety.md @@ -0,0 +1,7 @@ +# Wiki safety + +- A search result is not the full page. +- A revision diff is not a write proposal. +- A replacement must preserve the selected page and revision identifiers. +- Deleting a page, collection, database or attachment requires an exact target + and the server's explicit confirmation fields. diff --git a/plugins/shd-mcp-plugin/widgets/_shared/write-actions.css b/plugins/shd-mcp-plugin/widgets/_shared/write-actions.css new file mode 100644 index 0000000..d39a3d2 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/_shared/write-actions.css @@ -0,0 +1,20 @@ +.shd-widget-actions{margin-top:14px;padding:14px;border:1px solid var(--border,rgba(31,41,55,.16));border-radius:11px;background:var(--surface,#e8edf2);color:var(--text,#1d1f25)} +.shd-widget-actions[hidden]{display:none} +.shd-widget-actions-header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px} +.shd-widget-actions-selection{overflow:hidden;color:var(--muted,#616670);font-size:12px;text-overflow:ellipsis;white-space:nowrap} +.shd-widget-actions-select,.shd-widget-actions-input{width:100%;border:1px solid var(--border,rgba(31,41,55,.16));border-radius:8px;padding:8px 10px;background:var(--bg,#f8fafc);color:var(--text,#1d1f25)} +.shd-widget-actions-select:focus,.shd-widget-actions-input:focus{border-color:var(--accent,#535963);outline:0;box-shadow:0 0 0 3px var(--accent-soft,rgba(75,85,99,.12))} +.shd-widget-actions-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin-top:10px} +.shd-widget-actions-field{display:grid;gap:4px;color:var(--muted,#616670);font-size:11px} +.shd-widget-actions-field:has(textarea){grid-column:span 2} +.shd-widget-actions-field input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent,#535963)} +.shd-widget-actions-confirm{display:flex;grid-column:1/-1;align-items:center;gap:7px;color:var(--text,#1d1f25);font-size:12px} +.shd-widget-actions-warning,.shd-widget-actions-hint{grid-column:1/-1;color:var(--muted,#616670);font-size:12px} +.shd-widget-actions-danger{color:var(--danger,#b42318)} +.shd-widget-actions-status{min-height:18px;margin-top:9px;color:var(--muted,#616670);font-size:12px} +.shd-widget-actions-status-error{color:var(--danger,#b42318)} +.shd-widget-actions-buttons{display:flex;justify-content:flex-end;gap:8px;margin-top:10px} +.shd-widget-actions-buttons button{border:1px solid var(--border,rgba(31,41,55,.16));border-radius:8px;padding:8px 11px;background:var(--bg,#f8fafc);color:var(--text,#1d1f25);cursor:pointer} +.shd-widget-actions-buttons button:hover{background:var(--surface-hover,#e1e8ef)} +.shd-widget-actions-buttons button:disabled{cursor:wait;opacity:.62} +@media(max-width:600px){.shd-widget-actions-field:has(textarea){grid-column:auto}.shd-widget-actions-header{display:block}.shd-widget-actions-selection{display:block;margin-top:3px}} diff --git a/plugins/shd-mcp-plugin/widgets/_shared/write-actions.js b/plugins/shd-mcp-plugin/widgets/_shared/write-actions.js new file mode 100644 index 0000000..cbc4da2 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/_shared/write-actions.js @@ -0,0 +1,429 @@ +(function () { + 'use strict'; + + if (window.__SHD_WIDGET_WRITE_ACTIONS__) return; + window.__SHD_WIDGET_WRITE_ACTIONS__ = true; + + var copy = { + ru: { + actions: 'Действия', + chooseAction: 'Выберите действие', + selectRecord: 'Сначала выберите запись.', + submit: 'Сохранить', + cancel: 'Отмена', + confirm: 'Подтверждаю действие', + warning: 'Проверьте данные перед записью.', + destructive: 'Операция может изменить или удалить данные.', + required: 'Заполните обязательное поле.', + invalidJson: 'Введите корректный JSON.', + success: 'Изменения сохранены.', + failure: 'Не удалось сохранить изменения.', + loading: 'Сохраняю…', + noActions: 'Для этого виджета нет доступных действий.', + refreshed: 'Список обновлён.', + fieldValue: 'Значение', + }, + en: { + actions: 'Actions', + chooseAction: 'Choose an action', + selectRecord: 'Select a record first.', + submit: 'Save', + cancel: 'Cancel', + confirm: 'I confirm this action', + warning: 'Review the values before writing.', + destructive: 'This operation may change or remove data.', + required: 'Fill in the required field.', + invalidJson: 'Enter valid JSON.', + success: 'Changes saved.', + failure: 'Could not save changes.', + loading: 'Saving…', + noActions: 'No actions are available for this widget.', + refreshed: 'List refreshed.', + fieldValue: 'Value', + }, + }; + + var state = { + widget: {}, + records: [], + selected: null, + action: null, + inputs: {}, + busy: false, + lang: String(document.documentElement.lang || 'ru').toLowerCase().indexOf('ru') === 0 ? 'ru' : 'en', + }; + var pending = new Map(); + var nextRequestId = 1; + var elements = {}; + + function t(key) { + return (copy[state.lang] && copy[state.lang][key]) || copy.en[key] || key; + } + + function object(value) { + return Boolean(value && typeof value === 'object' && !Array.isArray(value)); + } + + function normalize(value) { + if (!value) return null; + if (value.structuredContent) return normalize(value.structuredContent); + if (value.toolOutput) return normalize(value.toolOutput); + if (value.toolInput) return normalize(value.toolInput); + if (value.arguments && !value.data && !value.items && !value.projects) return normalize(value.arguments); + return value; + } + + function widgetFrom(value) { + var payload = normalize(value) || {}; + var meta = object(payload.meta) ? payload.meta : {}; + return object(meta.widget) ? meta.widget : {}; + } + + function recordsFrom(value) { + var payload = normalize(value) || {}; + var data = Array.isArray(payload.items) ? payload.items : payload.projects; + if (!Array.isArray(data)) data = payload.data; + if (data && !Array.isArray(data) && Array.isArray(data.data)) data = data.data; + return Array.isArray(data) ? data.filter(function (item) { return object(item); }) : []; + } + + function readPath(value, path) { + if (!value || path === undefined || path === null) return undefined; + var parts = String(path).split('.'); + var current = value; + for (var index = 0; index < parts.length; index += 1) { + if (current === undefined || current === null) return undefined; + current = current[parts[index]]; + } + return current; + } + + function firstValue(paths) { + var list = Array.isArray(paths) ? paths : [paths]; + var sources = [state.selected, state.widget.sourceArgs, state.widget.listArgs]; + for (var sourceIndex = 0; sourceIndex < sources.length; sourceIndex += 1) { + var sourceObject = sources[sourceIndex]; + if (!sourceObject) continue; + for (var pathIndex = 0; pathIndex < list.length; pathIndex += 1) { + var value = readPath(sourceObject, list[pathIndex]); + if (value !== undefined && value !== null && value !== '') return value; + } + } + return undefined; + } + + function text(value) { + if (value === undefined || value === null) return ''; + if (typeof value === 'object') return JSON.stringify(value); + return String(value); + } + + function label(value) { + if (object(value)) return value[state.lang] || value.ru || value.en || t('fieldValue'); + return String(value || t('fieldValue')); + } + + function actionLabel(action) { + return label(action && action.label) || action.id || action.tool || t('actions'); + } + + function hasTargets(action) { + return Boolean(action && ((Array.isArray(action.targets) && action.targets.length) || action.target)); + } + + function actionList() { + return Array.isArray(state.widget.actions) ? state.widget.actions.filter(function (action) { + return action && action.tool; + }) : []; + } + + function request(method, params) { + var openai = typeof window !== 'undefined' ? window.openai : undefined; + if (method === 'tools/call' && openai && typeof openai.callTool === 'function') { + return openai.callTool(params.name, params.arguments || {}); + } + var id = nextRequestId++; + window.parent.postMessage({ jsonrpc: '2.0', id: id, method: method, params: params || {} }, '*'); + return new Promise(function (resolve, reject) { + var timeout = window.setTimeout(function () { + pending.delete(id); + reject(new Error(t('failure'))); + }, 15000); + pending.set(id, { resolve: resolve, reject: reject, timeout: timeout }); + }); + } + + function unwrap(value) { + var payload = normalize(value); + if (value && value.isError) throw new Error(payload && payload.error ? text(payload.error) : t('failure')); + if (payload && payload.error) throw new Error(text(payload.error)); + return payload || value; + } + + function make(tag, value, className) { + var node = document.createElement(tag); + if (className) node.className = className; + if (value !== undefined) node.textContent = value; + return node; + } + + function ensurePanel() { + if (elements.panel) return; + var root = document.querySelector('main') || document.body; + var panel = make('section', undefined, 'shd-widget-actions'); + panel.hidden = true; + panel.setAttribute('aria-live', 'polite'); + var header = make('div', undefined, 'shd-widget-actions-header'); + header.append(make('strong', t('actions')), make('span', '', 'shd-widget-actions-selection')); + var select = document.createElement('select'); + select.className = 'shd-widget-actions-select'; + select.setAttribute('aria-label', t('actions')); + var form = make('form', undefined, 'shd-widget-actions-form'); + var status = make('div', '', 'shd-widget-actions-status'); + var buttons = make('div', undefined, 'shd-widget-actions-buttons'); + var submit = make('button', t('submit'), 'shd-widget-actions-submit'); + submit.type = 'submit'; + var cancel = make('button', t('cancel'), 'shd-widget-actions-cancel'); + cancel.type = 'button'; + buttons.append(submit, cancel); + panel.append(header, select, form, status, buttons); + root.append(panel); + elements = { panel: panel, selection: header.lastChild, select: select, form: form, status: status, submit: submit, cancel: cancel }; + select.addEventListener('change', function () { + var selected = actionList().find(function (action) { return action.id === select.value; }); + state.action = selected || null; + renderForm(); + }); + cancel.addEventListener('click', function () { + state.action = null; + select.value = ''; + renderForm(); + }); + form.addEventListener('submit', function (event) { + event.preventDefault(); + submitAction(); + }); + } + + function inputValue(fieldConfig) { + var value = firstValue(fieldConfig.source || []); + if (value === undefined && fieldConfig.default !== undefined) value = fieldConfig.default; + return value; + } + + function createInput(fieldConfig) { + var type = fieldConfig.type || 'text'; + var input; + if (type === 'textarea' || type === 'json') { + input = document.createElement('textarea'); + input.rows = type === 'json' ? 4 : 3; + if (type === 'json') input.placeholder = '{ }'; + } else if (type === 'select') { + input = document.createElement('select'); + (fieldConfig.options || []).forEach(function (option) { + var item = document.createElement('option'); + item.value = String(option[0]); + item.textContent = state.lang === 'ru' ? String(option[1]) : String(option[2] || option[1]); + input.append(item); + }); + } else { + input = document.createElement('input'); + input.type = type === 'number' || type === 'email' ? type : 'text'; + } + input.className = 'shd-widget-actions-input'; + input.name = fieldConfig.name; + var value = inputValue(fieldConfig); + if (type === 'checkbox') { + input.type = 'checkbox'; + input.checked = value === true || value === 'true' || value === 1 || value === '1'; + } else if (value !== undefined && value !== null) { + input.value = type === 'json' && typeof value === 'object' ? JSON.stringify(value, null, 2) : String(value); + } + if (fieldConfig.required) input.required = true; + return input; + } + + function renderForm() { + ensurePanel(); + var selectedActionId = state.action ? state.action.id : ''; + elements.select.replaceChildren(); + var placeholder = document.createElement('option'); + placeholder.value = ''; + placeholder.textContent = t('chooseAction'); + elements.select.append(placeholder); + actionList().forEach(function (action) { + var option = document.createElement('option'); + option.value = action.id; + option.textContent = actionLabel(action); + elements.select.append(option); + }); + elements.select.value = selectedActionId; + elements.select.hidden = actionList().length === 0; + elements.form.replaceChildren(); + elements.status.textContent = ''; + elements.submit.disabled = state.busy; + var action = state.action; + if (!action) { + elements.selection.textContent = state.selected ? text(state.selected.title || state.selected.name || state.selected.id || '') : ''; + elements.submit.hidden = true; + elements.cancel.hidden = true; + if (actionList().length && !state.selected && actionList().every(hasTargets)) { + elements.form.append(make('div', t('selectRecord'), 'shd-widget-actions-hint')); + } + return; + } + elements.selection.textContent = state.selected ? text(state.selected.title || state.selected.name || state.selected.id || '') : ''; + elements.submit.hidden = false; + elements.cancel.hidden = false; + if (hasTargets(action) && !state.selected) elements.form.append(make('div', t('selectRecord'), 'shd-widget-actions-hint')); + (action.fields || []).forEach(function (fieldConfig) { + if (!fieldConfig || !fieldConfig.name || fieldConfig.generated || fieldConfig.type === 'hidden') return; + var wrapper = make('label', undefined, 'shd-widget-actions-field'); + wrapper.append(make('span', label(fieldConfig.label))); + wrapper.append(createInput(fieldConfig)); + elements.form.append(wrapper); + }); + if (action.confirm) { + var confirmLabel = make('label', undefined, 'shd-widget-actions-confirm'); + var confirm = document.createElement('input'); + confirm.type = 'checkbox'; + confirm.name = '__confirm'; + confirm.required = true; + confirmLabel.append(confirm, make('span', t('confirm'))); + elements.form.append(confirmLabel); + } + var notice = make('div', action.destructive ? t('destructive') : t('warning'), action.destructive ? 'shd-widget-actions-warning shd-widget-actions-danger' : 'shd-widget-actions-warning'); + elements.form.append(notice); + } + + function coerce(value, type) { + if (type === 'number') { + var number = Number(value); + return Number.isFinite(number) ? number : value; + } + if (type === 'checkbox') return Boolean(value); + if (type === 'json') { + try { return JSON.parse(value); } catch (error) { throw new Error(t('invalidJson')); } + } + return value; + } + + function targetType(name) { + return /^(task|document|contract|booking|item|monitor|proposal|approval|page|notification|topic|membership|organization|space|status|project)_?id$/.test(name) || name === 'issue_number' || name === 'number' ? 'number' : 'text'; + } + + function targetList(action) { + if (Array.isArray(action.targets)) return action.targets; + return action.target ? [action.target] : []; + } + + function collectArguments(action) { + var args = Object.assign({}, action.fixed || {}); + (action.context || []).forEach(function (name) { + var value = firstValue([name]); + if (value !== undefined && value !== null && value !== '') args[name] = value; + }); + targetList(action).forEach(function (targetConfig) { + var value = firstValue(targetConfig.source || targetConfig.name); + if (value === undefined || value === null || value === '') throw new Error(t('selectRecord')); + args[targetConfig.name] = coerce(value, targetConfig.type || targetType(targetConfig.name)); + }); + (action.fields || []).forEach(function (fieldConfig) { + if (!fieldConfig || !fieldConfig.name || fieldConfig.generated || fieldConfig.type === 'hidden') return; + var input = Array.prototype.find.call(elements.form.querySelectorAll('[name]'), function (node) { + return node.getAttribute('name') === fieldConfig.name; + }); + if (!input) return; + var raw = fieldConfig.type === 'checkbox' ? input.checked : input.value.trim(); + if (raw === '' && !input.checked && !fieldConfig.required) return; + if (raw === '' && fieldConfig.required) throw new Error(t('required')); + args[fieldConfig.name] = coerce(raw, fieldConfig.type || 'text'); + }); + if (action.idempotencyKey) args.idempotency_key = 'shd-widget-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 10); + if (action.confirmArg) args.confirm = true; + return args; + } + + function setStatus(message, error) { + elements.status.textContent = message || ''; + elements.status.className = 'shd-widget-actions-status' + (error ? ' shd-widget-actions-status-error' : ''); + } + + function submitAction() { + if (state.busy || !state.action) return; + var action = state.action; + var args; + try { args = collectArguments(action); } catch (error) { setStatus(error.message || t('failure'), true); return; } + state.busy = true; + elements.submit.disabled = true; + elements.cancel.disabled = true; + setStatus(t('loading'), false); + request('tools/call', { name: action.tool, arguments: args }).then(function (result) { + unwrap(result); + setStatus(t('success'), false); + var refresh = document.getElementById('refresh'); + if (refresh && typeof refresh.click === 'function') window.setTimeout(function () { refresh.click(); }, 250); + }).catch(function (error) { + setStatus(error && error.message ? error.message : t('failure'), true); + }).finally(function () { + state.busy = false; + elements.submit.disabled = false; + elements.cancel.disabled = false; + }); + } + + function recordFromNode(node) { + var content = String(node.textContent || '').toLowerCase(); + var exact = state.records.find(function (item) { + var id = text(item.id || item.code || item.key || item.number).toLowerCase(); + return id && content.indexOf(id) !== -1; + }); + if (exact) return exact; + return state.records.find(function (item) { + var title = text(item.title || item.name || item.display_name || item.number).toLowerCase(); + return title && content.indexOf(title) !== -1; + }) || null; + } + + function update(value) { + var payload = normalize(value) || {}; + var widget = widgetFrom(payload); + if (Object.keys(widget).length) state.widget = widget; + var records = recordsFrom(payload); + if (records.length || Array.isArray(payload.data) || Array.isArray(payload.items) || Array.isArray(payload.projects)) state.records = records; + ensurePanel(); + var actions = actionList(); + elements.panel.hidden = actions.length === 0; + if (actions.length && !state.action) renderForm(); + else if (actions.length) renderForm(); + } + + document.addEventListener('click', function (event) { + var node = event.target && event.target.closest ? event.target.closest('.record,.project-row,.visual-card,.progress-card,.preview-card,.calendar-card,.timeline-card,.kanban-card') : null; + if (!node || (elements.panel && elements.panel.contains(node))) return; + var item = recordFromNode(node); + if (!item) return; + state.selected = item; + ensurePanel(); + renderForm(); + }, true); + + window.addEventListener('message', function (event) { + if (event.source !== window.parent) return; + var message = event.data; + if (!message || message.jsonrpc !== '2.0') return; + if (message.id !== undefined && pending.has(message.id)) { + var requestState = pending.get(message.id); + pending.delete(message.id); + window.clearTimeout(requestState.timeout); + if (message.error) requestState.reject(new Error(message.error.message || t('failure'))); + else requestState.resolve(message.result); + return; + } + if (message.method === 'ui/notifications/tool-input' || message.method === 'ui/notifications/tool-result') update(message.params || {}); + }, { passive: true }); + + ensurePanel(); + var initial = typeof window !== 'undefined' && window.openai ? (window.openai.toolOutput || window.openai.toolInput) : null; + if (initial) update(initial); +}()); diff --git a/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/SHA256SUMS new file mode 100644 index 0000000..56c1d65 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/SHA256SUMS @@ -0,0 +1 @@ +818956bcece3e1a64a8f41f51a8bcc19ebcd0c95d1eb9bfa923166dca9660711 index.html diff --git a/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/UPSTREAM.md new file mode 100644 index 0000000..f91d1f0 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# ACL matrix widget + +This artifact is served by the SHD MCP backend as ui://shd/acl-matrix/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only organization membership and permission matrix. diff --git a/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/index.html b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/index.html new file mode 100644 index 0000000..747cec0 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/manifest.json new file mode 100644 index 0000000..2781d3c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/acl-matrix/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-acl-matrix", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69107, + "gzipBytes": 18847, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/acl-matrix/v1.html", + "sha256": "818956bcece3e1a64a8f41f51a8bcc19ebcd0c95d1eb9bfa923166dca9660711" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/acl-matrix/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/active-projects/v1/LICENSE b/plugins/shd-mcp-plugin/widgets/active-projects/v1/LICENSE new file mode 100644 index 0000000..a0ae51e --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/active-projects/v1/LICENSE @@ -0,0 +1,3 @@ +See the repository root LICENSE: the SHD MCP Plugin License applies to this +widget. +This file is a local provenance notice; it does not grant additional rights. diff --git a/plugins/shd-mcp-plugin/widgets/active-projects/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/active-projects/v1/SHA256SUMS new file mode 100644 index 0000000..0615209 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/active-projects/v1/SHA256SUMS @@ -0,0 +1 @@ +7c0ad632ddc013afd70ce80789a73c3b99aa3030d9d7b1d440ba1902aadae42d index.html diff --git a/plugins/shd-mcp-plugin/widgets/active-projects/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/active-projects/v1/UPSTREAM.md new file mode 100644 index 0000000..5882fe9 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/active-projects/v1/UPSTREAM.md @@ -0,0 +1,12 @@ +# SHD active-projects widget provenance + +This is an SHD-authored MCP Apps resource. It is not copied from an external +widget bundle and has no OpenAI upstream dependency. + +- Resource URI: `ui://shd/active-projects/v1.html` +- Media type: `text/html;profile=mcp-app` +- Source: `plugins/shd-mcp-plugin/widgets/active-projects/v1/index.html` +- Backend loader: `SHD_MCP_WIDGET_ROOT` or the repository path documented in + `scripts/mcp/mcp/resources/active-projects-widget.mjs` +- Integrity: verify `index.html` against `SHA256SUMS`. +- License: repository root `LICENSE`. diff --git a/plugins/shd-mcp-plugin/widgets/active-projects/v1/index.html b/plugins/shd-mcp-plugin/widgets/active-projects/v1/index.html new file mode 100644 index 0000000..e2e5b80 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/active-projects/v1/index.html @@ -0,0 +1,949 @@ + + + + + + + + + +
+
+
+

Активные проекты

+

Сроки завершения и текущие статусы

+
+ +
+
+ +
+
+
+
+ Проект + Дата завершения + Статус +
+
+ + +
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/active-projects/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/active-projects/v1/manifest.json new file mode 100644 index 0000000..aa54807 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/active-projects/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-active-projects", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 43172, + "gzipBytes": 10825, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/active-projects/v1.html", + "sha256": "7c0ad632ddc013afd70ce80789a73c3b99aa3030d9d7b1d440ba1902aadae42d" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/active-projects/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/activity/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/activity/v1/SHA256SUMS new file mode 100644 index 0000000..5cb8c6a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/activity/v1/SHA256SUMS @@ -0,0 +1 @@ +766b830b207f2929c16635f24081bf11e9e69f2c9a4cb261157a79a6cfd4dc63 index.html diff --git a/plugins/shd-mcp-plugin/widgets/activity/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/activity/v1/UPSTREAM.md new file mode 100644 index 0000000..dd0e90f --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/activity/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Activity widget + +This artifact is served by the SHD MCP backend as ui://shd/activity/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Authenticated realtime activity stream. diff --git a/plugins/shd-mcp-plugin/widgets/activity/v1/index.html b/plugins/shd-mcp-plugin/widgets/activity/v1/index.html new file mode 100644 index 0000000..1550d63 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/activity/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/activity/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/activity/v1/manifest.json new file mode 100644 index 0000000..720f989 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/activity/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-activity", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45934, + "gzipBytes": 13581, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/activity/v1.html", + "sha256": "766b830b207f2929c16635f24081bf11e9e69f2c9a4cb261157a79a6cfd4dc63" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/activity/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/agents-health/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/agents-health/v1/SHA256SUMS new file mode 100644 index 0000000..c5ebcfa --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents-health/v1/SHA256SUMS @@ -0,0 +1 @@ +d7042f24d6bce4b94db2726c252def333bb99c619295c85a8fb4855788c35373 index.html diff --git a/plugins/shd-mcp-plugin/widgets/agents-health/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/agents-health/v1/UPSTREAM.md new file mode 100644 index 0000000..7e43934 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents-health/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Agents health widget + +This artifact is served by the SHD MCP backend as ui://shd/agents-health/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only agent and controller health overview. diff --git a/plugins/shd-mcp-plugin/widgets/agents-health/v1/index.html b/plugins/shd-mcp-plugin/widgets/agents-health/v1/index.html new file mode 100644 index 0000000..546d00c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents-health/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/agents-health/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/agents-health/v1/manifest.json new file mode 100644 index 0000000..f281f62 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents-health/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-agents-health", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69113, + "gzipBytes": 18846, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/agents-health/v1.html", + "sha256": "d7042f24d6bce4b94db2726c252def333bb99c619295c85a8fb4855788c35373" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/agents-health/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/agents/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/agents/v1/SHA256SUMS new file mode 100644 index 0000000..77cb009 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents/v1/SHA256SUMS @@ -0,0 +1 @@ +9e502a2d867a52efbd71352cdacce359b95ade89a62b5974e67ff83d5921480b index.html diff --git a/plugins/shd-mcp-plugin/widgets/agents/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/agents/v1/UPSTREAM.md new file mode 100644 index 0000000..5748801 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Agents widget + +This artifact is served by the SHD MCP backend as `ui://shd/agents/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides agents and controllers with read-only status context. diff --git a/plugins/shd-mcp-plugin/widgets/agents/v1/index.html b/plugins/shd-mcp-plugin/widgets/agents/v1/index.html new file mode 100644 index 0000000..e8ad6db --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/agents/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/agents/v1/manifest.json new file mode 100644 index 0000000..5c84844 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/agents/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-agents", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41395, + "gzipBytes": 12426, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/agents/v1.html", + "sha256": "9e502a2d867a52efbd71352cdacce359b95ade89a62b5974e67ff83d5921480b" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/agents/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/SHA256SUMS new file mode 100644 index 0000000..555517b --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/SHA256SUMS @@ -0,0 +1 @@ +8aa0f61e0d1a87444c832d9de570faf4e7ffac715ca13a060379db21bac61edb index.html diff --git a/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/UPSTREAM.md new file mode 100644 index 0000000..156842d --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# CRM funnel widget + +This artifact is served by the SHD MCP backend as ui://shd/crm-funnel/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only CRM deal funnel grouped by stage. diff --git a/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/index.html b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/index.html new file mode 100644 index 0000000..6d541ad --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/manifest.json new file mode 100644 index 0000000..59b3b98 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm-funnel/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-crm-funnel", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69107, + "gzipBytes": 18847, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/crm-funnel/v1.html", + "sha256": "8aa0f61e0d1a87444c832d9de570faf4e7ffac715ca13a060379db21bac61edb" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/crm-funnel/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/crm/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/crm/v1/SHA256SUMS new file mode 100644 index 0000000..9ef1862 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm/v1/SHA256SUMS @@ -0,0 +1 @@ +f8f91a266320065738372c23e8376c370694ee9c0ec7f8283372ebf9f67cb364 index.html diff --git a/plugins/shd-mcp-plugin/widgets/crm/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/crm/v1/UPSTREAM.md new file mode 100644 index 0000000..11c6945 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# CRM widget + +This artifact is served by the SHD MCP backend as `ui://shd/crm/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. diff --git a/plugins/shd-mcp-plugin/widgets/crm/v1/index.html b/plugins/shd-mcp-plugin/widgets/crm/v1/index.html new file mode 100644 index 0000000..61a4716 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm/v1/index.html @@ -0,0 +1,735 @@ + + + + + + CRM — SHD MCP + + + + +
+
+
SHD MCP
+

CRM

+

Реестр CRM-сущностей с поиском и просмотром деталей.

+
+
+
+ + +
+
+
+ + + +
СущностьСтатусОбновленоТип
+ +
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/crm/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/crm/v1/manifest.json new file mode 100644 index 0000000..9ea8e14 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/crm/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-crm", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "uri": "ui://shd/crm/v1.html", + "mediaType": "text/html;profile=mcp-app", + "bytes": 35819, + "sha256": "f8f91a266320065738372c23e8376c370694ee9c0ec7f8283372ebf9f67cb364", + "gzipBytes": 9477 + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/crm/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/discussions/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/discussions/v1/SHA256SUMS new file mode 100644 index 0000000..266a803 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/discussions/v1/SHA256SUMS @@ -0,0 +1 @@ +9a5b3fd821139066be25a8b0ef920a94b38f4e1b0f9b71a290f9fc0fc7104897 index.html diff --git a/plugins/shd-mcp-plugin/widgets/discussions/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/discussions/v1/UPSTREAM.md new file mode 100644 index 0000000..ff8125c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/discussions/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Discussions widget + +This artifact is served by the SHD MCP backend as `ui://shd/discussions/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides topics and read-only message details. diff --git a/plugins/shd-mcp-plugin/widgets/discussions/v1/index.html b/plugins/shd-mcp-plugin/widgets/discussions/v1/index.html new file mode 100644 index 0000000..39f4b8b --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/discussions/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/discussions/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/discussions/v1/manifest.json new file mode 100644 index 0000000..83c7a69 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/discussions/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-discussions", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41405, + "gzipBytes": 12425, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/discussions/v1.html", + "sha256": "9a5b3fd821139066be25a8b0ef920a94b38f4e1b0f9b71a290f9fc0fc7104897" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/discussions/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/SHA256SUMS new file mode 100644 index 0000000..8db5e2d --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/SHA256SUMS @@ -0,0 +1 @@ +c22ee23ef323e9e0b076d17b75f4d74f42670657ff787fca950334b8e882b0a7 index.html diff --git a/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/UPSTREAM.md new file mode 100644 index 0000000..3e97ce2 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Documents completeness widget + +This artifact is served by the SHD MCP backend as ui://shd/documents-completeness/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only Terms and document completeness dashboard. diff --git a/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/index.html b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/index.html new file mode 100644 index 0000000..4e63804 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/manifest.json new file mode 100644 index 0000000..0e8a835 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents-completeness/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-documents-completeness", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69131, + "gzipBytes": 18846, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/documents-completeness/v1.html", + "sha256": "c22ee23ef323e9e0b076d17b75f4d74f42670657ff787fca950334b8e882b0a7" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/documents-completeness/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/documents/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/documents/v1/SHA256SUMS new file mode 100644 index 0000000..0a8bbb3 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents/v1/SHA256SUMS @@ -0,0 +1 @@ +9cf8dba408490f78756663d3593c27661fba941e63eaceb5b0576b98ae161c94 index.html diff --git a/plugins/shd-mcp-plugin/widgets/documents/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/documents/v1/UPSTREAM.md new file mode 100644 index 0000000..9093716 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Документы widget + +This artifact is served by the SHD MCP backend as `ui://shd/documents/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. diff --git a/plugins/shd-mcp-plugin/widgets/documents/v1/index.html b/plugins/shd-mcp-plugin/widgets/documents/v1/index.html new file mode 100644 index 0000000..3b24704 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents/v1/index.html @@ -0,0 +1,735 @@ + + + + + + Документы — SHD MCP + + + + +
+
+
SHD MCP
+

Документы

+

Реестр документов с поиском и просмотром деталей.

+
+
+
+ + +
+
+
+ + + +
ДокументСтатусОбновленоСумма
+ +
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/documents/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/documents/v1/manifest.json new file mode 100644 index 0000000..4e81f92 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/documents/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-documents", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "uri": "ui://shd/documents/v1.html", + "mediaType": "text/html;profile=mcp-app", + "bytes": 35844, + "sha256": "9cf8dba408490f78756663d3593c27661fba941e63eaceb5b0576b98ae161c94", + "gzipBytes": 9468 + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/documents/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/files/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/files/v1/SHA256SUMS new file mode 100644 index 0000000..f5cf536 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/files/v1/SHA256SUMS @@ -0,0 +1 @@ +6091dc2361901d2f15b2cb19ef6bf5ce0c955f79a6017838cbe9b2d55da027ae index.html diff --git a/plugins/shd-mcp-plugin/widgets/files/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/files/v1/UPSTREAM.md new file mode 100644 index 0000000..d899de0 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/files/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Files widget + +This artifact is served by the SHD MCP backend as ui://shd/files/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Project file register with safe read-only links. diff --git a/plugins/shd-mcp-plugin/widgets/files/v1/index.html b/plugins/shd-mcp-plugin/widgets/files/v1/index.html new file mode 100644 index 0000000..5f58042 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/files/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/files/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/files/v1/manifest.json new file mode 100644 index 0000000..e37a66c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/files/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-files", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45931, + "gzipBytes": 13579, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/files/v1.html", + "sha256": "6091dc2361901d2f15b2cb19ef6bf5ce0c955f79a6017838cbe9b2d55da027ae" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/files/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/SHA256SUMS new file mode 100644 index 0000000..1814da6 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/SHA256SUMS @@ -0,0 +1 @@ +7b461816e3482390408daf834faef083686f9d0fe567fc4ca9e808f56343ab67 index.html diff --git a/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/UPSTREAM.md new file mode 100644 index 0000000..bca4c01 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Finance dashboard widget + +This artifact is served by the SHD MCP backend as ui://shd/finance-dashboard/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only finance totals, statuses and records. diff --git a/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/index.html b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/index.html new file mode 100644 index 0000000..b61011b --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/manifest.json new file mode 100644 index 0000000..0d27ea0 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-finance-dashboard", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69121, + "gzipBytes": 18845, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/finance-dashboard/v1.html", + "sha256": "7b461816e3482390408daf834faef083686f9d0fe567fc4ca9e808f56343ab67" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/finance-dashboard/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/finance/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/finance/v1/SHA256SUMS new file mode 100644 index 0000000..0d06ab7 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance/v1/SHA256SUMS @@ -0,0 +1 @@ +bcd1e3b07ccb8bdb9a28d884d01a64c473fb7ca079271eadb062446cf81174c6 index.html diff --git a/plugins/shd-mcp-plugin/widgets/finance/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/finance/v1/UPSTREAM.md new file mode 100644 index 0000000..893a3f9 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Финансы widget + +This artifact is served by the SHD MCP backend as `ui://shd/finance/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. diff --git a/plugins/shd-mcp-plugin/widgets/finance/v1/index.html b/plugins/shd-mcp-plugin/widgets/finance/v1/index.html new file mode 100644 index 0000000..ebc3048 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance/v1/index.html @@ -0,0 +1,735 @@ + + + + + + Финансы — SHD MCP + + + + +
+
+
SHD MCP
+

Финансы

+

Реестр финансовых документов с поиском и просмотром деталей.

+
+
+
+ + +
+
+
+ + + +
ДокументСтатусСрокСумма
+ +
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/finance/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/finance/v1/manifest.json new file mode 100644 index 0000000..64aed3d --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/finance/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-finance", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "uri": "ui://shd/finance/v1.html", + "mediaType": "text/html;profile=mcp-app", + "bytes": 35866, + "sha256": "bcd1e3b07ccb8bdb9a28d884d01a64c473fb7ca079271eadb062446cf81174c6", + "gzipBytes": 9488 + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/finance/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/gitea-board/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/SHA256SUMS new file mode 100644 index 0000000..6fa5c4c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/SHA256SUMS @@ -0,0 +1 @@ +02b97b4308f0d7a8e3a3c2337d60b6ae0a442480851fd3926fad7e204302e81f index.html diff --git a/plugins/shd-mcp-plugin/widgets/gitea-board/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/UPSTREAM.md new file mode 100644 index 0000000..5f3100c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Gitea board widget + +This artifact is served by the SHD MCP backend as ui://shd/gitea-board/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only Gitea issues grouped by state. diff --git a/plugins/shd-mcp-plugin/widgets/gitea-board/v1/index.html b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/index.html new file mode 100644 index 0000000..c03fda2 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/gitea-board/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/manifest.json new file mode 100644 index 0000000..f814514 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea-board/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-gitea-board", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69109, + "gzipBytes": 18846, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/gitea-board/v1.html", + "sha256": "02b97b4308f0d7a8e3a3c2337d60b6ae0a442480851fd3926fad7e204302e81f" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/gitea-board/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/gitea/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/gitea/v1/SHA256SUMS new file mode 100644 index 0000000..34d51c4 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea/v1/SHA256SUMS @@ -0,0 +1 @@ +505ea4f334275478da05b4444da93f7e7c89163eeb1880825b2c37d275678fa1 index.html diff --git a/plugins/shd-mcp-plugin/widgets/gitea/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/gitea/v1/UPSTREAM.md new file mode 100644 index 0000000..5f4c2e9 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Gitea Issues widget + +This artifact is served by the SHD MCP backend as ui://shd/gitea/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Read-only issue register for allowed targets. diff --git a/plugins/shd-mcp-plugin/widgets/gitea/v1/index.html b/plugins/shd-mcp-plugin/widgets/gitea/v1/index.html new file mode 100644 index 0000000..8631b06 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/gitea/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/gitea/v1/manifest.json new file mode 100644 index 0000000..5b8e800 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/gitea/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-gitea", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45931, + "gzipBytes": 13579, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/gitea/v1.html", + "sha256": "505ea4f334275478da05b4444da93f7e7c89163eeb1880825b2c37d275678fa1" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/gitea/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/SHA256SUMS new file mode 100644 index 0000000..f587d31 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/SHA256SUMS @@ -0,0 +1 @@ +01c17190678fb59ec142c4c5356558d8946ee2200169557035d329fb100022d1 index.html diff --git a/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/UPSTREAM.md new file mode 100644 index 0000000..cb66efa --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Inventory warnings widget + +This artifact is served by the SHD MCP backend as ui://shd/inventory-warnings/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only low-stock and critical inventory dashboard. diff --git a/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/index.html b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/index.html new file mode 100644 index 0000000..89b88c3 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/manifest.json new file mode 100644 index 0000000..5fd6528 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-inventory-warnings", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69123, + "gzipBytes": 18847, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/inventory-warnings/v1.html", + "sha256": "01c17190678fb59ec142c4c5356558d8946ee2200169557035d329fb100022d1" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/inventory-warnings/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/inventory/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/inventory/v1/SHA256SUMS new file mode 100644 index 0000000..3cc8d84 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory/v1/SHA256SUMS @@ -0,0 +1 @@ +d61402f07b1f56b5e0680b783367286b60801b835aa20e190cec4e19a091ddfe index.html diff --git a/plugins/shd-mcp-plugin/widgets/inventory/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/inventory/v1/UPSTREAM.md new file mode 100644 index 0000000..b57c8a4 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Inventory widget + +This artifact is served by the SHD MCP backend as `ui://shd/inventory/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides stock quantities and read-only item details. diff --git a/plugins/shd-mcp-plugin/widgets/inventory/v1/index.html b/plugins/shd-mcp-plugin/widgets/inventory/v1/index.html new file mode 100644 index 0000000..3c9a634 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/inventory/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/inventory/v1/manifest.json new file mode 100644 index 0000000..9993e8c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/inventory/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-inventory", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41401, + "gzipBytes": 12425, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/inventory/v1.html", + "sha256": "d61402f07b1f56b5e0680b783367286b60801b835aa20e190cec4e19a091ddfe" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/inventory/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/notes-tree/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/SHA256SUMS new file mode 100644 index 0000000..de945bc --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/SHA256SUMS @@ -0,0 +1 @@ +aa953f233c4783e336f88a8680e37e0f124a2abd4d4d9ee6bd9c433ba0ee284b index.html diff --git a/plugins/shd-mcp-plugin/widgets/notes-tree/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/UPSTREAM.md new file mode 100644 index 0000000..6e8414f --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Notes tree widget + +This artifact is served by the SHD MCP backend as ui://shd/notes-tree/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only Notes spaces and hierarchy tree. diff --git a/plugins/shd-mcp-plugin/widgets/notes-tree/v1/index.html b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/index.html new file mode 100644 index 0000000..095244b --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/notes-tree/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/manifest.json new file mode 100644 index 0000000..2bb9099 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes-tree/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-notes-tree", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69107, + "gzipBytes": 18849, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/notes-tree/v1.html", + "sha256": "aa953f233c4783e336f88a8680e37e0f124a2abd4d4d9ee6bd9c433ba0ee284b" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/notes-tree/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/notes/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/notes/v1/SHA256SUMS new file mode 100644 index 0000000..7db48d6 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes/v1/SHA256SUMS @@ -0,0 +1 @@ +f90f27e3ca3cb80aee68e1e35d37eb2d664b5055cd0d0075c3f532a811db60ff index.html diff --git a/plugins/shd-mcp-plugin/widgets/notes/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/notes/v1/UPSTREAM.md new file mode 100644 index 0000000..d5ab9fd --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Notes widget + +This artifact is served by the SHD MCP backend as `ui://shd/notes/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides page register and read-only page details. diff --git a/plugins/shd-mcp-plugin/widgets/notes/v1/index.html b/plugins/shd-mcp-plugin/widgets/notes/v1/index.html new file mode 100644 index 0000000..c362be3 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/notes/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/notes/v1/manifest.json new file mode 100644 index 0000000..60060af --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notes/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-notes", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41393, + "gzipBytes": 12426, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/notes/v1.html", + "sha256": "f90f27e3ca3cb80aee68e1e35d37eb2d664b5055cd0d0075c3f532a811db60ff" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/notes/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/notifications/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/notifications/v1/SHA256SUMS new file mode 100644 index 0000000..e282756 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notifications/v1/SHA256SUMS @@ -0,0 +1 @@ +4404502bb5202bba271baf2fbdbabcbe400d563aee46d0ebde01bafcc14ca983 index.html diff --git a/plugins/shd-mcp-plugin/widgets/notifications/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/notifications/v1/UPSTREAM.md new file mode 100644 index 0000000..3fafd34 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notifications/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Notifications widget + +This artifact is served by the SHD MCP backend as `ui://shd/notifications/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides notifications and read-only event details. diff --git a/plugins/shd-mcp-plugin/widgets/notifications/v1/index.html b/plugins/shd-mcp-plugin/widgets/notifications/v1/index.html new file mode 100644 index 0000000..77069f4 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notifications/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/notifications/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/notifications/v1/manifest.json new file mode 100644 index 0000000..e7017cf --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/notifications/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-notifications", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41409, + "gzipBytes": 12425, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/notifications/v1.html", + "sha256": "4404502bb5202bba271baf2fbdbabcbe400d563aee46d0ebde01bafcc14ca983" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/notifications/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/organizations/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/organizations/v1/SHA256SUMS new file mode 100644 index 0000000..6b21ae0 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/organizations/v1/SHA256SUMS @@ -0,0 +1 @@ +2afde14a7b9c2bc6148a2f630328c4573e54a53d0084acb16afe74bc5b317fae index.html diff --git a/plugins/shd-mcp-plugin/widgets/organizations/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/organizations/v1/UPSTREAM.md new file mode 100644 index 0000000..0803058 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/organizations/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Organizations and access widget + +This artifact is served by the SHD MCP backend as ui://shd/organizations/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Organization register with safe membership details. diff --git a/plugins/shd-mcp-plugin/widgets/organizations/v1/index.html b/plugins/shd-mcp-plugin/widgets/organizations/v1/index.html new file mode 100644 index 0000000..710640a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/organizations/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/organizations/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/organizations/v1/manifest.json new file mode 100644 index 0000000..6b09600 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/organizations/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-organizations", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45939, + "gzipBytes": 13581, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/organizations/v1.html", + "sha256": "2afde14a7b9c2bc6148a2f630328c4573e54a53d0084acb16afe74bc5b317fae" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/organizations/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/SHA256SUMS new file mode 100644 index 0000000..587c321 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/SHA256SUMS @@ -0,0 +1 @@ +91fc075555887d5084d9f1a3d5cf94cba017f0b2cf765073612a51cb099c6596 index.html diff --git a/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/UPSTREAM.md new file mode 100644 index 0000000..d4bb60c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Project DB preview widget + +This artifact is served by the SHD MCP backend as ui://shd/project-db-preview/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only Project DB table record preview. diff --git a/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/index.html b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/index.html new file mode 100644 index 0000000..10a12c1 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/manifest.json new file mode 100644 index 0000000..6aab038 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db-preview/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-project-db-preview", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69111, + "gzipBytes": 18856, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/project-db-preview/v1.html", + "sha256": "91fc075555887d5084d9f1a3d5cf94cba017f0b2cf765073612a51cb099c6596" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/project-db-preview/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/project-db/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/project-db/v1/SHA256SUMS new file mode 100644 index 0000000..8649ae2 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db/v1/SHA256SUMS @@ -0,0 +1 @@ +1eab29c71fcd79c4e50de88fd9d3e231f845793fc507134ba393fc0b74fc6024 index.html diff --git a/plugins/shd-mcp-plugin/widgets/project-db/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/project-db/v1/UPSTREAM.md new file mode 100644 index 0000000..dc9547a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Project DB widget + +This artifact is served by the SHD MCP backend as `ui://shd/project-db/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides table catalog and read-only schema details. diff --git a/plugins/shd-mcp-plugin/widgets/project-db/v1/index.html b/plugins/shd-mcp-plugin/widgets/project-db/v1/index.html new file mode 100644 index 0000000..8546856 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/project-db/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/project-db/v1/manifest.json new file mode 100644 index 0000000..23cb9dd --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-db/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-project-db", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41403, + "gzipBytes": 12423, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/project-db/v1.html", + "sha256": "1eab29c71fcd79c4e50de88fd9d3e231f845793fc507134ba393fc0b74fc6024" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/project-db/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/project-overview/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/project-overview/v1/SHA256SUMS new file mode 100644 index 0000000..f1de403 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-overview/v1/SHA256SUMS @@ -0,0 +1 @@ +a4e2aa0dfbc85fe9f8b186d47558ec6d3bd7809b8feab020601b643de0c77ad9 index.html diff --git a/plugins/shd-mcp-plugin/widgets/project-overview/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/project-overview/v1/UPSTREAM.md new file mode 100644 index 0000000..a69c819 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-overview/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Project overview widget + +This artifact is served by the SHD MCP backend as ui://shd/project-overview/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Cross-module read-only project context. diff --git a/plugins/shd-mcp-plugin/widgets/project-overview/v1/index.html b/plugins/shd-mcp-plugin/widgets/project-overview/v1/index.html new file mode 100644 index 0000000..f2ca706 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-overview/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/project-overview/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/project-overview/v1/manifest.json new file mode 100644 index 0000000..86b16e5 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-overview/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-project-overview", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45942, + "gzipBytes": 13579, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/project-overview/v1.html", + "sha256": "a4e2aa0dfbc85fe9f8b186d47558ec6d3bd7809b8feab020601b643de0c77ad9" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/project-overview/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/project-timeline/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/SHA256SUMS new file mode 100644 index 0000000..23eae42 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/SHA256SUMS @@ -0,0 +1 @@ +2f065b809eeaa8d7f5dcb28815ddba3f4121702cd7da9a073c5d49c427837646 index.html diff --git a/plugins/shd-mcp-plugin/widgets/project-timeline/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/UPSTREAM.md new file mode 100644 index 0000000..459ceec --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Project timeline widget + +This artifact is served by the SHD MCP backend as ui://shd/project-timeline/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only chronological task timeline. diff --git a/plugins/shd-mcp-plugin/widgets/project-timeline/v1/index.html b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/index.html new file mode 100644 index 0000000..6b20f04 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/project-timeline/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/manifest.json new file mode 100644 index 0000000..99cdac8 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/project-timeline/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-project-timeline", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69119, + "gzipBytes": 18847, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/project-timeline/v1.html", + "sha256": "2f065b809eeaa8d7f5dcb28815ddba3f4121702cd7da9a073c5d49c427837646" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/project-timeline/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/SHA256SUMS new file mode 100644 index 0000000..9c07824 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/SHA256SUMS @@ -0,0 +1 @@ +7add1c840a7802d6b7ffabc47e92d3556f5d21ef8e38e77bbfd40dab822d7112 index.html diff --git a/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/UPSTREAM.md new file mode 100644 index 0000000..d3b34da --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Proposal approvals widget + +This artifact is served by the SHD MCP backend as ui://shd/proposal-approvals/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only proposal approval queue. diff --git a/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/index.html b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/index.html new file mode 100644 index 0000000..a631d2d --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/manifest.json new file mode 100644 index 0000000..322d8ab --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-proposal-approvals", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69123, + "gzipBytes": 18846, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/proposal-approvals/v1.html", + "sha256": "7add1c840a7802d6b7ffabc47e92d3556f5d21ef8e38e77bbfd40dab822d7112" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/proposal-approvals/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/proposals/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/proposals/v1/SHA256SUMS new file mode 100644 index 0000000..1343c4a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposals/v1/SHA256SUMS @@ -0,0 +1 @@ +f729f20f9966978f548c55f1d5e3b7af69bc78adae606ea164f0de68c7e721b4 index.html diff --git a/plugins/shd-mcp-plugin/widgets/proposals/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/proposals/v1/UPSTREAM.md new file mode 100644 index 0000000..abdb6b1 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposals/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Proposals widget + +This artifact is served by the SHD MCP backend as ui://shd/proposals/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Proposal register with read-only details. diff --git a/plugins/shd-mcp-plugin/widgets/proposals/v1/index.html b/plugins/shd-mcp-plugin/widgets/proposals/v1/index.html new file mode 100644 index 0000000..315d128 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposals/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/proposals/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/proposals/v1/manifest.json new file mode 100644 index 0000000..256286f --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/proposals/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-proposals", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45935, + "gzipBytes": 13579, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/proposals/v1.html", + "sha256": "f729f20f9966978f548c55f1d5e3b7af69bc78adae606ea164f0de68c7e721b4" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/proposals/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/SHA256SUMS new file mode 100644 index 0000000..ed874f5 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/SHA256SUMS @@ -0,0 +1 @@ +c8fa40e545beb126b55fb1834a9e7025b8b31990e2aa9bf4a73698b9ebe3714f index.html diff --git a/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/UPSTREAM.md new file mode 100644 index 0000000..22b28de --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Schedule calendar widget + +This artifact is served by the SHD MCP backend as ui://shd/schedule-calendar/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only bookings grouped by day. diff --git a/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/index.html b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/index.html new file mode 100644 index 0000000..6c2ac10 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/manifest.json new file mode 100644 index 0000000..a677f46 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-schedule-calendar", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69121, + "gzipBytes": 18846, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/schedule-calendar/v1.html", + "sha256": "c8fa40e545beb126b55fb1834a9e7025b8b31990e2aa9bf4a73698b9ebe3714f" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/schedule-calendar/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/scheduling/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/scheduling/v1/SHA256SUMS new file mode 100644 index 0000000..bea5e61 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/scheduling/v1/SHA256SUMS @@ -0,0 +1 @@ +e0ef3f5e588db53afe6b2617cee58853fa3b6be8cce898b7225c840e24cac1b2 index.html diff --git a/plugins/shd-mcp-plugin/widgets/scheduling/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/scheduling/v1/UPSTREAM.md new file mode 100644 index 0000000..2518053 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/scheduling/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Scheduling widget + +This artifact is served by the SHD MCP backend as `ui://shd/scheduling/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides upcoming bookings and read-only details. diff --git a/plugins/shd-mcp-plugin/widgets/scheduling/v1/index.html b/plugins/shd-mcp-plugin/widgets/scheduling/v1/index.html new file mode 100644 index 0000000..d44bf21 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/scheduling/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/scheduling/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/scheduling/v1/manifest.json new file mode 100644 index 0000000..3656461 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/scheduling/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-scheduling", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41403, + "gzipBytes": 12426, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/scheduling/v1.html", + "sha256": "e0ef3f5e588db53afe6b2617cee58853fa3b6be8cce898b7225c840e24cac1b2" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/scheduling/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/SHA256SUMS new file mode 100644 index 0000000..f63b830 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/SHA256SUMS @@ -0,0 +1 @@ +d3003fcfee7d93d5a1cf015afdd6d317a864a14425e8cbd2659eb4d90831d741 index.html diff --git a/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/UPSTREAM.md new file mode 100644 index 0000000..6cd7f16 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Schemes progress widget + +This artifact is served by the SHD MCP backend as ui://shd/schemes-progress/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only scheme document progress dashboard. diff --git a/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/index.html b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/index.html new file mode 100644 index 0000000..658a4e6 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/manifest.json new file mode 100644 index 0000000..49aab15 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes-progress/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-schemes-progress", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69119, + "gzipBytes": 18849, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/schemes-progress/v1.html", + "sha256": "d3003fcfee7d93d5a1cf015afdd6d317a864a14425e8cbd2659eb4d90831d741" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/schemes-progress/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/schemes/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/schemes/v1/SHA256SUMS new file mode 100644 index 0000000..3241c3c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes/v1/SHA256SUMS @@ -0,0 +1 @@ +e0cbdcef97b140b36f1f68ce17f24a4ad439130e3532b9407bbafe9d31860ccc index.html diff --git a/plugins/shd-mcp-plugin/widgets/schemes/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/schemes/v1/UPSTREAM.md new file mode 100644 index 0000000..59e88db --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Schemes widget + +This artifact is served by the SHD MCP backend as ui://shd/schemes/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides PDF Scheme Editor document register. diff --git a/plugins/shd-mcp-plugin/widgets/schemes/v1/index.html b/plugins/shd-mcp-plugin/widgets/schemes/v1/index.html new file mode 100644 index 0000000..e1bce70 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/schemes/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/schemes/v1/manifest.json new file mode 100644 index 0000000..94b784a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/schemes/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-schemes", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45933, + "gzipBytes": 13579, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/schemes/v1.html", + "sha256": "e0cbdcef97b140b36f1f68ce17f24a4ad439130e3532b9407bbafe9d31860ccc" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/schemes/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/status-page/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/status-page/v1/SHA256SUMS new file mode 100644 index 0000000..6fd0bc7 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/status-page/v1/SHA256SUMS @@ -0,0 +1 @@ +5af408540417854819a69ccefe2e16b14ed6d04f8222f6c9e79b006de71a438d index.html diff --git a/plugins/shd-mcp-plugin/widgets/status-page/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/status-page/v1/UPSTREAM.md new file mode 100644 index 0000000..914a9f8 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/status-page/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Status Page widget + +This artifact is served by the SHD MCP backend as `ui://shd/status-page/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. The widget provides monitor availability and read-only history. diff --git a/plugins/shd-mcp-plugin/widgets/status-page/v1/index.html b/plugins/shd-mcp-plugin/widgets/status-page/v1/index.html new file mode 100644 index 0000000..ac0f98a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/status-page/v1/index.html @@ -0,0 +1,544 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/status-page/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/status-page/v1/manifest.json new file mode 100644 index 0000000..2125c10 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/status-page/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-status-page", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 41405, + "gzipBytes": 12423, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/status-page/v1.html", + "sha256": "5af408540417854819a69ccefe2e16b14ed6d04f8222f6c9e79b006de71a438d" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/status-page/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/task-kanban/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/SHA256SUMS new file mode 100644 index 0000000..d609579 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/SHA256SUMS @@ -0,0 +1 @@ +04a0294f12237506f211b99437843ebbffb34abc6485e7de49d2d787c4726da3 index.html diff --git a/plugins/shd-mcp-plugin/widgets/task-kanban/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/UPSTREAM.md new file mode 100644 index 0000000..8b8bdc7 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Task Kanban widget + +This artifact is served by the SHD MCP backend as ui://shd/task-kanban/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only task Kanban grouped by workflow status. diff --git a/plugins/shd-mcp-plugin/widgets/task-kanban/v1/index.html b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/index.html new file mode 100644 index 0000000..3273887 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/task-kanban/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/manifest.json new file mode 100644 index 0000000..ea569ec --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/task-kanban/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-task-kanban", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69109, + "gzipBytes": 18846, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/task-kanban/v1.html", + "sha256": "04a0294f12237506f211b99437843ebbffb34abc6485e7de49d2d787c4726da3" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/task-kanban/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/tasks/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/tasks/v1/SHA256SUMS new file mode 100644 index 0000000..e87512a --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/tasks/v1/SHA256SUMS @@ -0,0 +1 @@ +926fd10f0478fa566af6d134b174661416dcbd3fe380271c058ef077e17e9898 index.html diff --git a/plugins/shd-mcp-plugin/widgets/tasks/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/tasks/v1/UPSTREAM.md new file mode 100644 index 0000000..f5b4129 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/tasks/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Задачи widget + +This artifact is served by the SHD MCP backend as `ui://shd/tasks/v1.html`. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps `window.openai` as a compatibility extension. It has no external script or network dependency. diff --git a/plugins/shd-mcp-plugin/widgets/tasks/v1/index.html b/plugins/shd-mcp-plugin/widgets/tasks/v1/index.html new file mode 100644 index 0000000..d36b30e --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/tasks/v1/index.html @@ -0,0 +1,735 @@ + + + + + + Задачи — SHD MCP + + + + +
+
+
SHD MCP
+

Задачи

+

Реестр задач с поиском и просмотром деталей.

+
+
+
+ + +
+
+
+ + + +
ЗадачаСтатусСрокПриоритет
+ +
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/tasks/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/tasks/v1/manifest.json new file mode 100644 index 0000000..a978da8 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/tasks/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-tasks", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "uri": "ui://shd/tasks/v1.html", + "mediaType": "text/html;profile=mcp-app", + "bytes": 35774, + "sha256": "926fd10f0478fa566af6d134b174661416dcbd3fe380271c058ef077e17e9898", + "gzipBytes": 9451 + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/tasks/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/team-workload/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/team-workload/v1/SHA256SUMS new file mode 100644 index 0000000..ee84be2 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/team-workload/v1/SHA256SUMS @@ -0,0 +1 @@ +6cf33fa3b892b1947fae4947c61a010a2b66970b9cf8acf4f6e205abbe3093ae index.html diff --git a/plugins/shd-mcp-plugin/widgets/team-workload/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/team-workload/v1/UPSTREAM.md new file mode 100644 index 0000000..194e2bb --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/team-workload/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Team workload widget + +This artifact is served by the SHD MCP backend as ui://shd/team-workload/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides a read-only workload, capacity and utilization overview. diff --git a/plugins/shd-mcp-plugin/widgets/team-workload/v1/index.html b/plugins/shd-mcp-plugin/widgets/team-workload/v1/index.html new file mode 100644 index 0000000..2d88436 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/team-workload/v1/index.html @@ -0,0 +1,617 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/team-workload/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/team-workload/v1/manifest.json new file mode 100644 index 0000000..efc4183 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/team-workload/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-team-workload", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 69113, + "gzipBytes": 18848, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/team-workload/v1.html", + "sha256": "6cf33fa3b892b1947fae4947c61a010a2b66970b9cf8acf4f6e205abbe3093ae" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/team-workload/v1/index.html" + } +} diff --git a/plugins/shd-mcp-plugin/widgets/terms/v1/SHA256SUMS b/plugins/shd-mcp-plugin/widgets/terms/v1/SHA256SUMS new file mode 100644 index 0000000..503751c --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/terms/v1/SHA256SUMS @@ -0,0 +1 @@ +96d2189395bb9218f59aa21bfc6dbb9df59aad381b758e4ffcdfe3cb2553b6ae index.html diff --git a/plugins/shd-mcp-plugin/widgets/terms/v1/UPSTREAM.md b/plugins/shd-mcp-plugin/widgets/terms/v1/UPSTREAM.md new file mode 100644 index 0000000..24c5f28 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/terms/v1/UPSTREAM.md @@ -0,0 +1,5 @@ +# Terms / ТЗ widget + +This artifact is served by the SHD MCP backend as ui://shd/terms/v1.html. + +The HTML is standalone, uses the MCP Apps bridge first, and keeps window.openai as a compatibility extension. It has no external script or network dependency. The widget provides Terms of Reference document register. diff --git a/plugins/shd-mcp-plugin/widgets/terms/v1/index.html b/plugins/shd-mcp-plugin/widgets/terms/v1/index.html new file mode 100644 index 0000000..b60dfef --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/terms/v1/index.html @@ -0,0 +1,560 @@ + + + + + + SHD MCP + + + + +
+
SHD MCP

SHD

+
+
+
+ +
+ + + + diff --git a/plugins/shd-mcp-plugin/widgets/terms/v1/manifest.json b/plugins/shd-mcp-plugin/widgets/terms/v1/manifest.json new file mode 100644 index 0000000..f84f3e3 --- /dev/null +++ b/plugins/shd-mcp-plugin/widgets/terms/v1/manifest.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "name": "shd-terms", + "version": "1.0.0", + "resources": [ + { + "file": "index.html", + "bytes": 45931, + "gzipBytes": 13579, + "mediaType": "text/html;profile=mcp-app", + "uri": "ui://shd/terms/v1.html", + "sha256": "96d2189395bb9218f59aa21bfc6dbb9df59aad381b758e4ffcdfe3cb2553b6ae" + } + ], + "license": "../../../../../LICENSE", + "source": { + "repository": "https://github.com/bulava92/shd-mcp-plugin", + "path": "plugins/shd-mcp-plugin/widgets/terms/v1/index.html" + } +}