@mokoconsulting/mcp-windows 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +94 -0
- package/.gitmessage +9 -0
- package/.mokogitea/ISSUE_TEMPLATE/adr.md +110 -0
- package/.mokogitea/ISSUE_TEMPLATE/bug_report.md +48 -0
- package/.mokogitea/ISSUE_TEMPLATE/config.yml +18 -0
- package/.mokogitea/ISSUE_TEMPLATE/documentation.md +52 -0
- package/.mokogitea/ISSUE_TEMPLATE/feature_request.md +51 -0
- package/.mokogitea/ISSUE_TEMPLATE/mcp_api_integration.md +48 -0
- package/.mokogitea/ISSUE_TEMPLATE/mcp_connection_issue.md +67 -0
- package/.mokogitea/ISSUE_TEMPLATE/mcp_tool_request.md +49 -0
- package/.mokogitea/ISSUE_TEMPLATE/question.md +82 -0
- package/.mokogitea/ISSUE_TEMPLATE/rfc.md +126 -0
- package/.mokogitea/ISSUE_TEMPLATE/security.md +51 -0
- package/.mokogitea/ISSUE_TEMPLATE/version.md +24 -0
- package/.mokogitea/branch-protection.yml +251 -0
- package/.mokogitea/workflows/auto-assign.yml +76 -0
- package/.mokogitea/workflows/auto-bump.yml +66 -0
- package/.mokogitea/workflows/auto-dev-issue.yml +207 -0
- package/.mokogitea/workflows/auto-release.yml +421 -0
- package/.mokogitea/workflows/branch-cleanup.yml +48 -0
- package/.mokogitea/workflows/cascade-dev.yml +10 -0
- package/.mokogitea/workflows/changelog-validation.yml +101 -0
- package/.mokogitea/workflows/ci-generic.yml +191 -0
- package/.mokogitea/workflows/cleanup.yml +87 -0
- package/.mokogitea/workflows/codeql-analysis.yml +115 -0
- package/.mokogitea/workflows/copilot-agent.yml +44 -0
- package/.mokogitea/workflows/deploy-manual.yml +126 -0
- package/.mokogitea/workflows/enterprise-firewall-setup.yml +758 -0
- package/.mokogitea/workflows/gitleaks.yml +92 -0
- package/.mokogitea/workflows/issue-branch.yml +73 -0
- package/.mokogitea/workflows/mcp-auto-release.yml +278 -0
- package/.mokogitea/workflows/mcp-build-test.yml +65 -0
- package/.mokogitea/workflows/mcp-sdk-check.yml +109 -0
- package/.mokogitea/workflows/mcp-tool-inventory.yml +61 -0
- package/.mokogitea/workflows/notify.yml +70 -0
- package/.mokogitea/workflows/npm-publish.yml +113 -0
- package/.mokogitea/workflows/pr-check.yml +534 -0
- package/.mokogitea/workflows/pre-release.yml +252 -0
- package/.mokogitea/workflows/rc-revert.yml +66 -0
- package/.mokogitea/workflows/repo-health.yml +712 -0
- package/.mokogitea/workflows/repository-cleanup.yml +525 -0
- package/.mokogitea/workflows/security-audit.yml +82 -0
- package/.mokogitea/workflows/standards-compliance.yml +2614 -0
- package/.mokogitea/workflows/sync-version-on-merge.yml +133 -0
- package/.mokogitea/workflows/update-server.yml +312 -0
- package/.mokogitea/workflows/workflow-sync-trigger.yml +73 -0
- package/CHANGELOG.md +130 -0
- package/CLAUDE.md +49 -0
- package/CONTRIBUTING.md +161 -0
- package/ISSUES.md +601 -0
- package/Makefile +70 -0
- package/README.md +80 -0
- package/automation/ci-issue-reporter.sh +237 -0
- package/config.example.json +18 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +111 -0
- package/dist/shell.d.ts +50 -0
- package/dist/shell.js +209 -0
- package/dist/tools/apps.d.ts +3 -0
- package/dist/tools/apps.js +63 -0
- package/dist/tools/audio.d.ts +3 -0
- package/dist/tools/audio.js +142 -0
- package/dist/tools/audio_apps.d.ts +3 -0
- package/dist/tools/audio_apps.js +86 -0
- package/dist/tools/automation.d.ts +3 -0
- package/dist/tools/automation.js +261 -0
- package/dist/tools/bluetooth.d.ts +3 -0
- package/dist/tools/bluetooth.js +96 -0
- package/dist/tools/clipboard.d.ts +3 -0
- package/dist/tools/clipboard.js +118 -0
- package/dist/tools/config.d.ts +3 -0
- package/dist/tools/config.js +85 -0
- package/dist/tools/dialog.d.ts +3 -0
- package/dist/tools/dialog.js +72 -0
- package/dist/tools/display.d.ts +3 -0
- package/dist/tools/display.js +256 -0
- package/dist/tools/drives.d.ts +3 -0
- package/dist/tools/drives.js +98 -0
- package/dist/tools/environment.d.ts +3 -0
- package/dist/tools/environment.js +129 -0
- package/dist/tools/execute.d.ts +3 -0
- package/dist/tools/execute.js +28 -0
- package/dist/tools/filesystem.d.ts +3 -0
- package/dist/tools/filesystem.js +230 -0
- package/dist/tools/firewall.d.ts +3 -0
- package/dist/tools/firewall.js +108 -0
- package/dist/tools/hosts.d.ts +3 -0
- package/dist/tools/hosts.js +119 -0
- package/dist/tools/maintenance.d.ts +3 -0
- package/dist/tools/maintenance.js +236 -0
- package/dist/tools/netstat.d.ts +3 -0
- package/dist/tools/netstat.js +56 -0
- package/dist/tools/network.d.ts +3 -0
- package/dist/tools/network.js +70 -0
- package/dist/tools/notification.d.ts +3 -0
- package/dist/tools/notification.js +41 -0
- package/dist/tools/power.d.ts +3 -0
- package/dist/tools/power.js +104 -0
- package/dist/tools/printer.d.ts +3 -0
- package/dist/tools/printer.js +97 -0
- package/dist/tools/process.d.ts +3 -0
- package/dist/tools/process.js +54 -0
- package/dist/tools/process_kill.d.ts +3 -0
- package/dist/tools/process_kill.js +48 -0
- package/dist/tools/recycle_bin.d.ts +3 -0
- package/dist/tools/recycle_bin.js +108 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.js +136 -0
- package/dist/tools/scheduler.d.ts +3 -0
- package/dist/tools/scheduler.js +116 -0
- package/dist/tools/service.d.ts +3 -0
- package/dist/tools/service.js +79 -0
- package/dist/tools/startup.d.ts +3 -0
- package/dist/tools/startup.js +159 -0
- package/dist/tools/storage.d.ts +3 -0
- package/dist/tools/storage.js +129 -0
- package/dist/tools/system.d.ts +3 -0
- package/dist/tools/system.js +84 -0
- package/dist/tools/system_mgmt.d.ts +3 -0
- package/dist/tools/system_mgmt.js +174 -0
- package/dist/tools/terminal.d.ts +3 -0
- package/dist/tools/terminal.js +80 -0
- package/dist/tools/theme.d.ts +3 -0
- package/dist/tools/theme.js +165 -0
- package/dist/tools/usb.d.ts +3 -0
- package/dist/tools/usb.js +52 -0
- package/dist/tools/virtual_desktop.d.ts +3 -0
- package/dist/tools/virtual_desktop.js +112 -0
- package/dist/tools/wifi.d.ts +3 -0
- package/dist/tools/wifi.js +136 -0
- package/dist/tools/window.d.ts +3 -0
- package/dist/tools/window.js +189 -0
- package/dist/tools/winget.d.ts +3 -0
- package/dist/tools/winget.js +79 -0
- package/dist/tools/wsl.d.ts +3 -0
- package/dist/tools/wsl.js +99 -0
- package/docs/API.md +63 -0
- package/docs/ARCHITECTURE.md +73 -0
- package/docs/INSTALLATION.md +102 -0
- package/docs/index.md +12 -0
- package/package.json +35 -0
- package/scripts/setup.mjs +123 -0
- package/src/index.ts +125 -0
- package/src/shell.ts +253 -0
- package/src/tools/apps.ts +76 -0
- package/src/tools/audio.ts +161 -0
- package/src/tools/audio_apps.ts +98 -0
- package/src/tools/automation.ts +297 -0
- package/src/tools/bluetooth.ts +114 -0
- package/src/tools/clipboard.ts +138 -0
- package/src/tools/config.ts +105 -0
- package/src/tools/dialog.ts +87 -0
- package/src/tools/display.ts +285 -0
- package/src/tools/drives.ts +124 -0
- package/src/tools/environment.ts +146 -0
- package/src/tools/execute.ts +35 -0
- package/src/tools/filesystem.ts +273 -0
- package/src/tools/firewall.ts +125 -0
- package/src/tools/hosts.ts +135 -0
- package/src/tools/maintenance.ts +299 -0
- package/src/tools/netstat.ts +72 -0
- package/src/tools/network.ts +84 -0
- package/src/tools/notification.ts +50 -0
- package/src/tools/power.ts +123 -0
- package/src/tools/printer.ts +114 -0
- package/src/tools/process.ts +80 -0
- package/src/tools/process_kill.ts +57 -0
- package/src/tools/recycle_bin.ts +126 -0
- package/src/tools/registry.ts +165 -0
- package/src/tools/scheduler.ts +140 -0
- package/src/tools/service.ts +102 -0
- package/src/tools/startup.ts +180 -0
- package/src/tools/storage.ts +141 -0
- package/src/tools/system.ts +99 -0
- package/src/tools/system_mgmt.ts +190 -0
- package/src/tools/terminal.ts +117 -0
- package/src/tools/theme.ts +205 -0
- package/src/tools/usb.ts +65 -0
- package/src/tools/virtual_desktop.ts +122 -0
- package/src/tools/wifi.ts +157 -0
- package/src/tools/window.ts +211 -0
- package/src/tools/winget.ts +100 -0
- package/src/tools/wsl.ts +112 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
#
|
|
3
|
+
# This file is part of a Moko Consulting project.
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
6
|
+
#
|
|
7
|
+
# FILE INFORMATION
|
|
8
|
+
# DEFGROUP: GitHub.Workflow
|
|
9
|
+
# INGROUP: MokoStandards.Automation
|
|
10
|
+
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
|
11
|
+
# PATH: /templates/workflows/shared/sync-version-on-merge.yml.template
|
|
12
|
+
# VERSION: 04.06.00
|
|
13
|
+
# BRIEF: Auto-bump patch version on every push to main and propagate to all file headers
|
|
14
|
+
# NOTE: Synced via bulk-repo-sync to .mokogitea/workflows/sync-version-on-merge.yml in all governed repos.
|
|
15
|
+
# README.md is the single source of truth for the repository version.
|
|
16
|
+
|
|
17
|
+
name: "Universal: Sync Version on Merge"
|
|
18
|
+
|
|
19
|
+
on:
|
|
20
|
+
push:
|
|
21
|
+
branches:
|
|
22
|
+
- main
|
|
23
|
+
- master
|
|
24
|
+
workflow_dispatch:
|
|
25
|
+
inputs:
|
|
26
|
+
dry_run:
|
|
27
|
+
description: 'Dry run (preview only, no commit)'
|
|
28
|
+
type: boolean
|
|
29
|
+
default: false
|
|
30
|
+
|
|
31
|
+
permissions:
|
|
32
|
+
contents: write
|
|
33
|
+
issues: write
|
|
34
|
+
|
|
35
|
+
env:
|
|
36
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
37
|
+
|
|
38
|
+
jobs:
|
|
39
|
+
sync-version:
|
|
40
|
+
name: Propagate README version
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
|
|
43
|
+
steps:
|
|
44
|
+
- name: Checkout repository
|
|
45
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
46
|
+
with:
|
|
47
|
+
token: ${{ secrets.GH_MIRROR_TOKEN || github.token }}
|
|
48
|
+
fetch-depth: 0
|
|
49
|
+
|
|
50
|
+
- name: Set up PHP
|
|
51
|
+
uses: shivammathur/setup-php@fcafdd6392932010c2bd5094439b8e33be2a8a09 # v2.37.0
|
|
52
|
+
with:
|
|
53
|
+
php-version: '8.1'
|
|
54
|
+
tools: composer
|
|
55
|
+
|
|
56
|
+
- name: Setup MokoStandards tools
|
|
57
|
+
env:
|
|
58
|
+
GH_TOKEN: ${{ secrets.GH_MIRROR_TOKEN || github.token }}
|
|
59
|
+
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_MIRROR_TOKEN || github.token }}"}}'
|
|
60
|
+
run: |
|
|
61
|
+
git clone --depth 1 --branch version/04 --quiet \
|
|
62
|
+
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
|
63
|
+
/tmp/mokostandards
|
|
64
|
+
cd /tmp/mokostandards
|
|
65
|
+
composer install --no-dev --no-interaction --quiet
|
|
66
|
+
|
|
67
|
+
- name: Auto-bump patch version
|
|
68
|
+
if: ${{ github.event_name == 'push' && github.actor != 'github-actions[bot]' }}
|
|
69
|
+
run: |
|
|
70
|
+
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -q '^README\.md$'; then
|
|
71
|
+
echo "README.md changed in this push — skipping auto-bump"
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
RESULT=$(php /tmp/mokostandards/api/cli/version_bump.php --path .) || {
|
|
76
|
+
echo "⚠️ Could not bump version — skipping"
|
|
77
|
+
exit 0
|
|
78
|
+
}
|
|
79
|
+
echo "Auto-bumping patch: $RESULT"
|
|
80
|
+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
|
81
|
+
git config --local user.name "github-actions[bot]"
|
|
82
|
+
git add README.md
|
|
83
|
+
git commit -m "chore(version): auto-bump patch ${RESULT} [skip ci]" \
|
|
84
|
+
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
|
85
|
+
git push
|
|
86
|
+
|
|
87
|
+
- name: Extract version from README.md
|
|
88
|
+
id: readme_version
|
|
89
|
+
run: |
|
|
90
|
+
git pull --ff-only 2>/dev/null || true
|
|
91
|
+
VERSION=$(php /tmp/mokostandards/api/cli/version_read.php --path . 2>/dev/null)
|
|
92
|
+
if [ -z "$VERSION" ]; then
|
|
93
|
+
echo "⚠️ No VERSION in README.md — skipping propagation"
|
|
94
|
+
echo "skip=true" >> $GITHUB_OUTPUT
|
|
95
|
+
exit 0
|
|
96
|
+
fi
|
|
97
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
98
|
+
echo "skip=false" >> $GITHUB_OUTPUT
|
|
99
|
+
echo "✅ README.md version: $VERSION"
|
|
100
|
+
|
|
101
|
+
- name: Run version sync
|
|
102
|
+
if: ${{ steps.readme_version.outputs.skip != 'true' && inputs.dry_run != true }}
|
|
103
|
+
run: |
|
|
104
|
+
php /tmp/mokostandards/api/maintenance/update_version_from_readme.php \
|
|
105
|
+
--path . \
|
|
106
|
+
--create-issue \
|
|
107
|
+
--repo "${{ github.repository }}"
|
|
108
|
+
env:
|
|
109
|
+
GH_TOKEN: ${{ secrets.GH_MIRROR_TOKEN || github.token }}
|
|
110
|
+
|
|
111
|
+
- name: Commit updated files
|
|
112
|
+
if: ${{ steps.readme_version.outputs.skip != 'true' && inputs.dry_run != true }}
|
|
113
|
+
run: |
|
|
114
|
+
git pull --ff-only 2>/dev/null || true
|
|
115
|
+
if git diff --quiet; then
|
|
116
|
+
echo "ℹ️ No version changes needed — already up to date"
|
|
117
|
+
exit 0
|
|
118
|
+
fi
|
|
119
|
+
VERSION="${{ steps.readme_version.outputs.version }}"
|
|
120
|
+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
|
121
|
+
git config --local user.name "github-actions[bot]"
|
|
122
|
+
git add -A
|
|
123
|
+
git commit -m "chore(version): sync badges and headers to ${VERSION} [skip ci]" \
|
|
124
|
+
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
|
125
|
+
git push
|
|
126
|
+
|
|
127
|
+
- name: Summary
|
|
128
|
+
run: |
|
|
129
|
+
VERSION="${{ steps.readme_version.outputs.version }}"
|
|
130
|
+
echo "## 📦 Version Sync — ${VERSION}" >> $GITHUB_STEP_SUMMARY
|
|
131
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
132
|
+
echo "**Source:** \`README.md\` FILE INFORMATION block" >> $GITHUB_STEP_SUMMARY
|
|
133
|
+
echo "**Version:** \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
|
+
#
|
|
5
|
+
# FILE INFORMATION
|
|
6
|
+
# DEFGROUP: Gitea.Workflow
|
|
7
|
+
# INGROUP: moko-platform.Universal
|
|
8
|
+
# REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
|
|
9
|
+
# PATH: /templates/workflows/update-server.yml
|
|
10
|
+
# VERSION: 05.00.00
|
|
11
|
+
# BRIEF: Pre-release build + update server XML for dev/alpha/beta/rc branches
|
|
12
|
+
#
|
|
13
|
+
# Thin wrapper around moko-platform CLI tools.
|
|
14
|
+
# Builds packages, updates updates.xml, and optionally deploys via SFTP.
|
|
15
|
+
#
|
|
16
|
+
# Joomla filters update entries by the user's "Minimum Stability" setting.
|
|
17
|
+
|
|
18
|
+
name: "Update Server"
|
|
19
|
+
|
|
20
|
+
on:
|
|
21
|
+
push:
|
|
22
|
+
branches:
|
|
23
|
+
- 'dev'
|
|
24
|
+
- 'dev/**'
|
|
25
|
+
- 'alpha/**'
|
|
26
|
+
- 'beta/**'
|
|
27
|
+
- 'rc/**'
|
|
28
|
+
paths:
|
|
29
|
+
- 'src/**'
|
|
30
|
+
- 'htdocs/**'
|
|
31
|
+
pull_request:
|
|
32
|
+
types: [closed]
|
|
33
|
+
branches:
|
|
34
|
+
- 'dev'
|
|
35
|
+
- 'dev/**'
|
|
36
|
+
- 'alpha/**'
|
|
37
|
+
- 'beta/**'
|
|
38
|
+
- 'rc/**'
|
|
39
|
+
paths:
|
|
40
|
+
- 'src/**'
|
|
41
|
+
- 'htdocs/**'
|
|
42
|
+
workflow_dispatch:
|
|
43
|
+
inputs:
|
|
44
|
+
stability:
|
|
45
|
+
description: 'Stability tag'
|
|
46
|
+
required: true
|
|
47
|
+
default: 'development'
|
|
48
|
+
type: choice
|
|
49
|
+
options:
|
|
50
|
+
- development
|
|
51
|
+
- alpha
|
|
52
|
+
- beta
|
|
53
|
+
- rc
|
|
54
|
+
- stable
|
|
55
|
+
|
|
56
|
+
env:
|
|
57
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
58
|
+
GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}
|
|
59
|
+
GITEA_ORG: ${{ vars.GITEA_ORG || github.repository_owner }}
|
|
60
|
+
GITEA_REPO: ${{ vars.GITEA_REPO || github.event.repository.name }}
|
|
61
|
+
|
|
62
|
+
permissions:
|
|
63
|
+
contents: write
|
|
64
|
+
|
|
65
|
+
jobs:
|
|
66
|
+
update-xml:
|
|
67
|
+
name: Update Server
|
|
68
|
+
runs-on: release
|
|
69
|
+
if: >-
|
|
70
|
+
github.event.pull_request.merged == true || github.event_name == 'workflow_dispatch' || github.event_name == 'push'
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- name: Checkout repository
|
|
74
|
+
uses: actions/checkout@v4
|
|
75
|
+
with:
|
|
76
|
+
token: ${{ secrets.MOKOGITEA_TOKEN }}
|
|
77
|
+
fetch-depth: 0
|
|
78
|
+
|
|
79
|
+
- name: Setup moko-platform tools
|
|
80
|
+
env:
|
|
81
|
+
MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
|
82
|
+
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
|
83
|
+
COMPOSER_AUTH: '{"http-basic":{"git.mokoconsulting.tech":{"username":"token","password":"${{ secrets.MOKOGITEA_TOKEN }}"}}}'
|
|
84
|
+
run: |
|
|
85
|
+
if ! command -v composer &> /dev/null; then
|
|
86
|
+
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1
|
|
87
|
+
fi
|
|
88
|
+
# Always fetch latest CLI tools — never use stale cache from previous runs
|
|
89
|
+
rm -rf /tmp/moko-platform
|
|
90
|
+
git clone --depth 1 --branch main --quiet \
|
|
91
|
+
"https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/moko-platform.git" \
|
|
92
|
+
/tmp/moko-platform 2>/dev/null || true
|
|
93
|
+
if [ -d "/tmp/moko-platform" ] && [ -f "/tmp/moko-platform/composer.json" ]; then
|
|
94
|
+
cd /tmp/moko-platform && composer install --no-dev --no-interaction --quiet 2>/dev/null || true
|
|
95
|
+
fi
|
|
96
|
+
echo "MOKO_CLI=/tmp/moko-platform/cli" >> "$GITHUB_ENV"
|
|
97
|
+
|
|
98
|
+
- name: Detect platform
|
|
99
|
+
id: platform
|
|
100
|
+
run: php ${MOKO_CLI}/manifest_read.php --path . --github-output
|
|
101
|
+
|
|
102
|
+
- name: Resolve stability and bump version
|
|
103
|
+
id: meta
|
|
104
|
+
run: |
|
|
105
|
+
BRANCH="${{ github.ref_name }}"
|
|
106
|
+
|
|
107
|
+
# Configure git for bot pushes
|
|
108
|
+
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
|
109
|
+
git config --local user.name "gitea-actions[bot]"
|
|
110
|
+
git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git"
|
|
111
|
+
|
|
112
|
+
# Auto-bump patch version
|
|
113
|
+
php ${MOKO_CLI}/version_bump.php --path . 2>/dev/null || true
|
|
114
|
+
|
|
115
|
+
VERSION=$(php ${MOKO_CLI}/version_read.php --path . 2>/dev/null || echo "0.0.0")
|
|
116
|
+
|
|
117
|
+
# Strip any existing suffix before applying stability
|
|
118
|
+
VERSION=$(echo "$VERSION" | sed 's/-\(dev\|alpha\|beta\|rc\)$//')
|
|
119
|
+
|
|
120
|
+
# Determine stability from branch or manual input
|
|
121
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
122
|
+
STABILITY="${{ inputs.stability }}"
|
|
123
|
+
elif [[ "$BRANCH" == rc/* ]]; then
|
|
124
|
+
STABILITY="rc"
|
|
125
|
+
elif [[ "$BRANCH" == beta/* ]]; then
|
|
126
|
+
STABILITY="beta"
|
|
127
|
+
elif [[ "$BRANCH" == alpha/* ]]; then
|
|
128
|
+
STABILITY="alpha"
|
|
129
|
+
else
|
|
130
|
+
STABILITY="development"
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# Version suffix per stability stream
|
|
134
|
+
case "$STABILITY" in
|
|
135
|
+
development) SUFFIX="-dev"; TAG="development" ;;
|
|
136
|
+
alpha) SUFFIX="-alpha"; TAG="alpha" ;;
|
|
137
|
+
beta) SUFFIX="-beta"; TAG="beta" ;;
|
|
138
|
+
rc) SUFFIX="-rc"; TAG="release-candidate" ;;
|
|
139
|
+
*) SUFFIX=""; TAG="stable" ;;
|
|
140
|
+
esac
|
|
141
|
+
|
|
142
|
+
# Propagate version with stability suffix to all manifest files
|
|
143
|
+
php ${MOKO_CLI}/version_set_platform.php \
|
|
144
|
+
--path . --version "$VERSION" --branch "$BRANCH" --stability "$STABILITY" 2>/dev/null || true
|
|
145
|
+
php ${MOKO_CLI}/version_check.php --path . --fix 2>/dev/null || true
|
|
146
|
+
|
|
147
|
+
# Re-read version (now includes suffix from version_set_platform)
|
|
148
|
+
if [ -n "$SUFFIX" ]; then
|
|
149
|
+
VERSION="${VERSION}${SUFFIX}"
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
153
|
+
echo "stability=${STABILITY}" >> "$GITHUB_OUTPUT"
|
|
154
|
+
echo "suffix=${SUFFIX}" >> "$GITHUB_OUTPUT"
|
|
155
|
+
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
|
|
156
|
+
echo "display_version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
157
|
+
|
|
158
|
+
# Commit version bump if changed
|
|
159
|
+
git add -A
|
|
160
|
+
git diff --cached --quiet || {
|
|
161
|
+
git commit -m "chore(version): auto-bump ${VERSION} [skip ci]" \
|
|
162
|
+
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
|
163
|
+
git push
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
- name: Create release and upload package
|
|
167
|
+
id: package
|
|
168
|
+
run: |
|
|
169
|
+
VERSION="${{ steps.meta.outputs.version }}"
|
|
170
|
+
TAG="${{ steps.meta.outputs.tag }}"
|
|
171
|
+
API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
|
172
|
+
|
|
173
|
+
# Create or update Gitea release
|
|
174
|
+
php ${MOKO_CLI}/release_create.php \
|
|
175
|
+
--path . --version "$VERSION" --tag "$TAG" \
|
|
176
|
+
--token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \
|
|
177
|
+
--repo "${GITEA_REPO}" --branch "${{ github.ref_name }}" --prerelease
|
|
178
|
+
|
|
179
|
+
# Build package and upload
|
|
180
|
+
php ${MOKO_CLI}/release_package.php \
|
|
181
|
+
--path . --version "$VERSION" --tag "$TAG" \
|
|
182
|
+
--token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \
|
|
183
|
+
--repo "${GITEA_REPO}" --output /tmp || true
|
|
184
|
+
|
|
185
|
+
- name: Update updates.xml
|
|
186
|
+
if: steps.platform.outputs.platform == 'joomla'
|
|
187
|
+
run: |
|
|
188
|
+
VERSION="${{ steps.meta.outputs.version }}"
|
|
189
|
+
STABILITY="${{ steps.meta.outputs.stability }}"
|
|
190
|
+
SHA256="${{ steps.package.outputs.sha256_zip }}"
|
|
191
|
+
|
|
192
|
+
if [ ! -f "updates.xml" ]; then
|
|
193
|
+
echo "No updates.xml — skipping"
|
|
194
|
+
exit 0
|
|
195
|
+
fi
|
|
196
|
+
|
|
197
|
+
SHA_FLAG=""
|
|
198
|
+
[ -n "$SHA256" ] && SHA_FLAG="--sha ${SHA256}"
|
|
199
|
+
|
|
200
|
+
php ${MOKO_CLI}/updates_xml_build.php \
|
|
201
|
+
--path . --version "${VERSION}" --stability "${STABILITY}" \
|
|
202
|
+
--gitea-url "${GITEA_URL}" --org "${GITEA_ORG}" --repo "${GITEA_REPO}" \
|
|
203
|
+
${SHA_FLAG}
|
|
204
|
+
|
|
205
|
+
# Commit and push updates.xml
|
|
206
|
+
git add updates.xml
|
|
207
|
+
git diff --cached --quiet || {
|
|
208
|
+
git commit -m "chore: update ${STABILITY} channel ${VERSION} [skip ci]"
|
|
209
|
+
git push
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
- name: Sync updates.xml to main
|
|
213
|
+
if: github.ref_name != 'main' && steps.platform.outputs.platform == 'joomla'
|
|
214
|
+
run: |
|
|
215
|
+
API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
|
216
|
+
GITEA_TOKEN="${{ secrets.MOKOGITEA_TOKEN }}"
|
|
217
|
+
|
|
218
|
+
FILE_SHA=$(curl -sf -H "Authorization: token ${GITEA_TOKEN}" \
|
|
219
|
+
"${API_BASE}/contents/updates.xml?ref=main" | python3 -c "import sys,json; print(json.load(sys.stdin).get('sha',''))" 2>/dev/null || true)
|
|
220
|
+
|
|
221
|
+
if [ -n "$FILE_SHA" ] && [ -f "updates.xml" ]; then
|
|
222
|
+
python3 -c "
|
|
223
|
+
import base64, json, urllib.request, sys
|
|
224
|
+
with open('updates.xml', 'rb') as f:
|
|
225
|
+
content = base64.b64encode(f.read()).decode()
|
|
226
|
+
payload = json.dumps({
|
|
227
|
+
'content': content,
|
|
228
|
+
'sha': '${FILE_SHA}',
|
|
229
|
+
'message': 'chore: sync updates.xml from ${{ steps.meta.outputs.stability }} [skip ci]',
|
|
230
|
+
'branch': 'main'
|
|
231
|
+
}).encode()
|
|
232
|
+
req = urllib.request.Request(
|
|
233
|
+
'${API_BASE}/contents/updates.xml',
|
|
234
|
+
data=payload, method='PUT',
|
|
235
|
+
headers={
|
|
236
|
+
'Authorization': 'token ${GITEA_TOKEN}',
|
|
237
|
+
'Content-Type': 'application/json'
|
|
238
|
+
})
|
|
239
|
+
try:
|
|
240
|
+
urllib.request.urlopen(req)
|
|
241
|
+
print('updates.xml synced to main')
|
|
242
|
+
except Exception as e:
|
|
243
|
+
print(f'WARNING: sync to main failed: {e}', file=sys.stderr)
|
|
244
|
+
"
|
|
245
|
+
fi
|
|
246
|
+
|
|
247
|
+
- name: SFTP deploy to dev server
|
|
248
|
+
if: contains(github.ref, 'dev/') || github.ref == 'refs/heads/dev'
|
|
249
|
+
env:
|
|
250
|
+
DEV_HOST: ${{ vars.DEV_FTP_HOST }}
|
|
251
|
+
DEV_PATH: ${{ vars.DEV_FTP_PATH }}
|
|
252
|
+
DEV_SUFFIX: ${{ vars.DEV_FTP_SUFFIX }}
|
|
253
|
+
DEV_USER: ${{ vars.DEV_FTP_USERNAME }}
|
|
254
|
+
DEV_PORT: ${{ vars.DEV_FTP_PORT }}
|
|
255
|
+
DEV_KEY: ${{ secrets.DEV_FTP_KEY }}
|
|
256
|
+
DEV_PASS: ${{ secrets.DEV_FTP_PASSWORD }}
|
|
257
|
+
run: |
|
|
258
|
+
# Permission check: admin or maintain role required
|
|
259
|
+
ACTOR="${{ github.actor }}"
|
|
260
|
+
API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
|
261
|
+
|
|
262
|
+
PERMISSION=$(curl -sf -H "Authorization: token ${{ secrets.MOKOGITEA_TOKEN }}" \
|
|
263
|
+
"${API_BASE}/collaborators/${ACTOR}/permission" 2>/dev/null | \
|
|
264
|
+
python3 -c "import sys,json; print(json.load(sys.stdin).get('permission','read'))" 2>/dev/null || echo "read")
|
|
265
|
+
case "$PERMISSION" in
|
|
266
|
+
admin|maintain|write) ;;
|
|
267
|
+
*)
|
|
268
|
+
echo "Deploy denied: ${ACTOR} has '${PERMISSION}' — requires admin, maintain, or write"
|
|
269
|
+
exit 0
|
|
270
|
+
;;
|
|
271
|
+
esac
|
|
272
|
+
|
|
273
|
+
[ -z "$DEV_HOST" ] || [ -z "$DEV_PATH" ] && { echo "DEV FTP not configured — skipping SFTP"; exit 0; }
|
|
274
|
+
|
|
275
|
+
SOURCE_DIR="src"
|
|
276
|
+
[ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs"
|
|
277
|
+
[ ! -d "$SOURCE_DIR" ] && exit 0
|
|
278
|
+
|
|
279
|
+
PORT="${DEV_PORT:-22}"
|
|
280
|
+
REMOTE="${DEV_PATH%/}"
|
|
281
|
+
[ -n "$DEV_SUFFIX" ] && REMOTE="${REMOTE}/${DEV_SUFFIX#/}"
|
|
282
|
+
|
|
283
|
+
printf '{"host":"%s","port":%s,"username":"%s","remotePath":"%s"' \
|
|
284
|
+
"$DEV_HOST" "$PORT" "$DEV_USER" "$REMOTE" > /tmp/sftp-config.json
|
|
285
|
+
if [ -n "$DEV_KEY" ]; then
|
|
286
|
+
echo "$DEV_KEY" > /tmp/deploy_key && chmod 600 /tmp/deploy_key
|
|
287
|
+
printf ',"privateKeyPath":"/tmp/deploy_key"}' >> /tmp/sftp-config.json
|
|
288
|
+
else
|
|
289
|
+
printf ',"password":"%s"}' "$DEV_PASS" >> /tmp/sftp-config.json
|
|
290
|
+
fi
|
|
291
|
+
|
|
292
|
+
PLATFORM=$(php ${MOKO_CLI}/platform_detect.php --path . 2>/dev/null || true)
|
|
293
|
+
if [ "$PLATFORM" = "waas-component" ] && [ -f "${MOKO_CLI}/../deploy/deploy-joomla.php" ]; then
|
|
294
|
+
php ${MOKO_CLI}/../deploy/deploy-joomla.php --path . --src-dir "$SOURCE_DIR" --config /tmp/sftp-config.json
|
|
295
|
+
elif [ -f "${MOKO_CLI}/../deploy/deploy-sftp.php" ]; then
|
|
296
|
+
php ${MOKO_CLI}/../deploy/deploy-sftp.php --path . --src-dir "$SOURCE_DIR" --config /tmp/sftp-config.json
|
|
297
|
+
fi
|
|
298
|
+
rm -f /tmp/deploy_key /tmp/sftp-config.json
|
|
299
|
+
echo "SFTP deploy to dev complete" >> $GITHUB_STEP_SUMMARY
|
|
300
|
+
|
|
301
|
+
- name: Summary
|
|
302
|
+
if: always()
|
|
303
|
+
run: |
|
|
304
|
+
VERSION="${{ steps.meta.outputs.version }}"
|
|
305
|
+
STABILITY="${{ steps.meta.outputs.stability }}"
|
|
306
|
+
DISPLAY="${{ steps.meta.outputs.display_version }}"
|
|
307
|
+
echo "## Update Server" >> $GITHUB_STEP_SUMMARY
|
|
308
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
309
|
+
echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
|
|
310
|
+
echo "|-------|-------|" >> $GITHUB_STEP_SUMMARY
|
|
311
|
+
echo "| Stability | \`${STABILITY}\` |" >> $GITHUB_STEP_SUMMARY
|
|
312
|
+
echo "| Version | \`${DISPLAY}\` |" >> $GITHUB_STEP_SUMMARY
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
|
+
#
|
|
5
|
+
# FILE INFORMATION
|
|
6
|
+
# DEFGROUP: Gitea.Workflow
|
|
7
|
+
# INGROUP: mokocli.Universal
|
|
8
|
+
# REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
|
|
9
|
+
# PATH: /.mokogitea/workflows/workflow-sync-trigger.yml
|
|
10
|
+
# VERSION: 01.01.00
|
|
11
|
+
# BRIEF: Trigger workflow sync to live repos when a PR is merged to main
|
|
12
|
+
|
|
13
|
+
name: "Universal: Workflow Sync Trigger"
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
pull_request:
|
|
17
|
+
types: [closed]
|
|
18
|
+
branches:
|
|
19
|
+
- main
|
|
20
|
+
|
|
21
|
+
env:
|
|
22
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
sync:
|
|
26
|
+
name: Sync workflows to live repos
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
if: >-
|
|
29
|
+
github.event.pull_request.merged == true &&
|
|
30
|
+
!contains(github.event.pull_request.title, '[skip sync]')
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- name: Determine platform from repo name
|
|
34
|
+
id: platform
|
|
35
|
+
run: |
|
|
36
|
+
REPO="${{ github.event.repository.name }}"
|
|
37
|
+
case "$REPO" in
|
|
38
|
+
Template-Joomla) PLATFORM="joomla" ;;
|
|
39
|
+
Template-Dolibarr) PLATFORM="dolibarr" ;;
|
|
40
|
+
Template-Go) PLATFORM="go" ;;
|
|
41
|
+
Template-MCP) PLATFORM="mcp" ;;
|
|
42
|
+
Template-Generic) PLATFORM="" ;;
|
|
43
|
+
*) PLATFORM="" ;;
|
|
44
|
+
esac
|
|
45
|
+
echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT"
|
|
46
|
+
echo "Platform: ${PLATFORM:-all}"
|
|
47
|
+
|
|
48
|
+
- name: Clone mokocli
|
|
49
|
+
env:
|
|
50
|
+
MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
|
51
|
+
run: |
|
|
52
|
+
GITEA_URL="${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}"
|
|
53
|
+
git clone --depth 1 "${GITEA_URL}/MokoConsulting/mokocli.git" /tmp/mokocli
|
|
54
|
+
|
|
55
|
+
- name: Install dependencies
|
|
56
|
+
run: |
|
|
57
|
+
cd /tmp/mokocli
|
|
58
|
+
composer install --no-dev --no-interaction --quiet 2>/dev/null || true
|
|
59
|
+
|
|
60
|
+
- name: Run workflow sync
|
|
61
|
+
env:
|
|
62
|
+
MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
|
|
63
|
+
run: |
|
|
64
|
+
ARGS="--token ${MOKOGITEA_TOKEN}"
|
|
65
|
+
ARGS="${ARGS} --org ${{ vars.GITEA_ORG || github.repository_owner }}"
|
|
66
|
+
ARGS="${ARGS} --phase repos"
|
|
67
|
+
|
|
68
|
+
PLATFORM="${{ steps.platform.outputs.platform }}"
|
|
69
|
+
if [ -n "$PLATFORM" ]; then
|
|
70
|
+
ARGS="${ARGS} --platform-filter ${PLATFORM}"
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
php /tmp/mokocli/cli/workflow_sync.php ${ARGS}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [3.0.0] - 2026-05-25
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
#### v3.0 -- WSL & Package Management (6 tools)
|
|
13
|
+
- `windows_wsl_list` -- List WSL distributions with status and version
|
|
14
|
+
- `windows_wsl_manage` -- Start, stop, shutdown, export, import, remove WSL distros
|
|
15
|
+
- `windows_wsl_exec` -- Execute commands inside a WSL distribution
|
|
16
|
+
- `windows_winget_search` -- Search winget package repository
|
|
17
|
+
- `windows_winget_manage` -- Install, upgrade, uninstall, list packages via winget
|
|
18
|
+
- `windows_winget_export` -- Export/import winget package lists
|
|
19
|
+
|
|
20
|
+
#### v3.1 -- Storage & System Management (6 tools)
|
|
21
|
+
- `windows_disk_cleanup` -- Analyze and clean disk space (temp, cache, logs)
|
|
22
|
+
- `windows_symlink` -- Create and manage symlinks, junctions, hard links
|
|
23
|
+
- `windows_timezone` -- Get/set timezone, list timezones, sync time
|
|
24
|
+
- `windows_features` -- Enable/disable Windows optional features
|
|
25
|
+
- `windows_smb_shares` -- List local shares, map/unmap network drives
|
|
26
|
+
- `windows_dns_cache` -- View, clear DNS cache, resolve domains
|
|
27
|
+
|
|
28
|
+
#### v3.2 -- Automation & Advanced (5 tools)
|
|
29
|
+
- `windows_shortcut` -- Create and read .lnk shortcut files
|
|
30
|
+
- `windows_input` -- Simulate keyboard/mouse (keys, combos, text, clicks, moves)
|
|
31
|
+
- `windows_font_list` -- List installed fonts from registry
|
|
32
|
+
- `windows_sandbox` -- Check/launch Windows Sandbox with custom config
|
|
33
|
+
- `windows_screen_capture` -- Screen recording via ffmpeg (start/stop/status)
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- Version bumped to 3.0.0 (80 tools total)
|
|
37
|
+
|
|
38
|
+
## [2.0.0] - 2026-05-25
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
#### v2.0 -- Connectivity & Hardware (7 tools)
|
|
43
|
+
- `windows_bluetooth_get` -- Bluetooth adapter status and paired devices
|
|
44
|
+
- `windows_bluetooth_control` -- Enable/disable Bluetooth, disconnect devices
|
|
45
|
+
- `windows_wifi_networks` -- Scan Wi-Fi networks, list saved profiles
|
|
46
|
+
- `windows_wifi_connect` -- Connect, disconnect, forget Wi-Fi networks
|
|
47
|
+
- `windows_usb_devices` -- List USB devices with safe eject
|
|
48
|
+
- `windows_printer_list` -- List printers, queue, set default, clear queue
|
|
49
|
+
- `windows_hosts_file` -- Read/manage Windows hosts file
|
|
50
|
+
|
|
51
|
+
#### v2.1 -- Appearance & Desktop (5 tools)
|
|
52
|
+
- `windows_theme_get` -- Dark mode, accent color, wallpaper, taskbar
|
|
53
|
+
- `windows_theme_set` -- Set dark mode, wallpaper, transparency, taskbar
|
|
54
|
+
- `windows_virtual_desktop` -- List, create, switch, remove virtual desktops
|
|
55
|
+
- `windows_focus_mode` -- Get/set Focus Assist / Do Not Disturb
|
|
56
|
+
- `windows_default_apps` -- Get default file associations
|
|
57
|
+
|
|
58
|
+
#### v2.2 -- Security & Maintenance (7 tools)
|
|
59
|
+
- `windows_firewall_get` -- Firewall status and rules
|
|
60
|
+
- `windows_firewall_manage` -- Create, enable, disable, delete firewall rules
|
|
61
|
+
- `windows_updates` -- Windows Update status and history
|
|
62
|
+
- `windows_event_log` -- Read event log entries with filters
|
|
63
|
+
- `windows_restore_point` -- List/create System Restore points
|
|
64
|
+
- `windows_certificate_list` -- List certificates in certificate store
|
|
65
|
+
- `windows_performance_monitor` -- Real-time CPU, RAM, disk, network stats
|
|
66
|
+
|
|
67
|
+
## [1.0.0] - 2026-05-25
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
#### v1.0 — Core (14 tools)
|
|
72
|
+
- `windows_execute` — Execute shell commands (PowerShell, cmd, bash) with timeout and background support
|
|
73
|
+
- `windows_process_list` — List running processes with PID, CPU, memory, window title
|
|
74
|
+
- `windows_audio_get` — Get master volume, mute state, and default audio device
|
|
75
|
+
- `windows_audio_set` — Set volume (0-100), mute/unmute/toggle
|
|
76
|
+
- `windows_system_info` — Comprehensive system info (OS, CPU, RAM, disk, network, uptime)
|
|
77
|
+
- `windows_terminal_start` — Start persistent interactive terminal sessions (pwsh, cmd, bash, python, node, wsl)
|
|
78
|
+
- `windows_terminal_send` — Send input to a running terminal session
|
|
79
|
+
- `windows_terminal_read` — Read output with line pagination (supports negative offset for tail)
|
|
80
|
+
- `windows_terminal_list` — List all active terminal sessions
|
|
81
|
+
- `windows_terminal_kill` — Terminate a terminal session by PID
|
|
82
|
+
- `windows_file_read` — Read files with line pagination, image base64, binary detection
|
|
83
|
+
- `windows_file_write` — Write/append to files, auto-create parent directories
|
|
84
|
+
- `windows_file_edit` — Surgical find/replace with near-match suggestions
|
|
85
|
+
- `windows_search` — Search files by name (glob) or content (regex), uses ripgrep when available
|
|
86
|
+
|
|
87
|
+
#### v1.1 — System Control (9 tools)
|
|
88
|
+
- `windows_process_kill` — Terminate processes by PID or name with force option
|
|
89
|
+
- `windows_service_list` — List Windows services with status, startup type, description
|
|
90
|
+
- `windows_service_control` — Start, stop, restart, enable, disable services
|
|
91
|
+
- `windows_audio_app_volumes` — List per-application audio sessions
|
|
92
|
+
- `windows_power_get` — Battery level, power plan, screen/sleep timeouts
|
|
93
|
+
- `windows_power_action` — Sleep, hibernate, lock, shutdown, restart, switch power plan
|
|
94
|
+
- `windows_network_info` — Adapters, IPs, DNS, gateway, Wi-Fi SSID/signal, connectivity
|
|
95
|
+
- `windows_drives` — List drives with type, label, capacity, free space, usage bar
|
|
96
|
+
- `windows_file_search` — Search files by name or content using PowerShell
|
|
97
|
+
|
|
98
|
+
#### v1.2 — Desktop Automation (8 tools)
|
|
99
|
+
- `windows_display_get` — Resolution, refresh rate, scaling, multi-monitor layout
|
|
100
|
+
- `windows_display_set` — Change resolution, brightness
|
|
101
|
+
- `windows_screenshot` — Capture screen, window, or region as base64 PNG or file
|
|
102
|
+
- `windows_window_list` — List visible windows with title, PID, position, size, state, z-order
|
|
103
|
+
- `windows_window_control` — Minimize, maximize, restore, close, focus, move, resize, topmost
|
|
104
|
+
- `windows_clipboard_get` — Read clipboard (text, files, image as base64)
|
|
105
|
+
- `windows_clipboard_set` — Set clipboard text, file list, or clear
|
|
106
|
+
- `windows_notification_send` — Send Windows toast notifications
|
|
107
|
+
|
|
108
|
+
#### v1.3 — Admin Tools (9 tools)
|
|
109
|
+
- `windows_task_scheduler_list` — List scheduled tasks with status, last/next run, triggers
|
|
110
|
+
- `windows_task_scheduler_manage` — Create, delete, enable, disable, run scheduled tasks
|
|
111
|
+
- `windows_registry_read` — Read registry keys, values, subkeys (HKLM/HKCU/HKCR)
|
|
112
|
+
- `windows_registry_write` — Write registry values with HKLM safety gate
|
|
113
|
+
- `windows_env_get` — Get environment variables with PATH parsing (user/system scope)
|
|
114
|
+
- `windows_env_set` — Set/remove env vars, append/prepend to PATH persistently
|
|
115
|
+
- `windows_startup_list` — List startup items from registry, startup folder, and task scheduler
|
|
116
|
+
- `windows_startup_manage` — Add, remove, enable, disable startup items
|
|
117
|
+
- `windows_mcp_config` — Get/set MCP configuration (blocked commands, allowed dirs, limits)
|
|
118
|
+
|
|
119
|
+
#### v1.4 — Advanced (4 tools)
|
|
120
|
+
- `windows_installed_apps` — List installed applications from registry and Store
|
|
121
|
+
- `windows_dialog` — Show message boxes, input prompts, file/folder pickers
|
|
122
|
+
- `windows_network_connections` — Active TCP connections (netstat) with process info
|
|
123
|
+
- `windows_recycle_bin` — List, restore, empty, or get size of Recycle Bin
|
|
124
|
+
|
|
125
|
+
### Architecture
|
|
126
|
+
- `src/shell.ts` — PowerShell/cmd/bash executor with persistent terminal session manager
|
|
127
|
+
- Win32 P/Invoke via inline C# for audio COM, window management, display control
|
|
128
|
+
- STA subprocess pattern for clipboard/audio COM threading
|
|
129
|
+
- Ring buffer (5000 lines) for terminal session output overflow protection
|
|
130
|
+
- MCP SDK `@modelcontextprotocol/sdk` v1.12.1 with stdio transport
|