@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.
Files changed (184) hide show
  1. package/.gitattributes +94 -0
  2. package/.gitmessage +9 -0
  3. package/.mokogitea/ISSUE_TEMPLATE/adr.md +110 -0
  4. package/.mokogitea/ISSUE_TEMPLATE/bug_report.md +48 -0
  5. package/.mokogitea/ISSUE_TEMPLATE/config.yml +18 -0
  6. package/.mokogitea/ISSUE_TEMPLATE/documentation.md +52 -0
  7. package/.mokogitea/ISSUE_TEMPLATE/feature_request.md +51 -0
  8. package/.mokogitea/ISSUE_TEMPLATE/mcp_api_integration.md +48 -0
  9. package/.mokogitea/ISSUE_TEMPLATE/mcp_connection_issue.md +67 -0
  10. package/.mokogitea/ISSUE_TEMPLATE/mcp_tool_request.md +49 -0
  11. package/.mokogitea/ISSUE_TEMPLATE/question.md +82 -0
  12. package/.mokogitea/ISSUE_TEMPLATE/rfc.md +126 -0
  13. package/.mokogitea/ISSUE_TEMPLATE/security.md +51 -0
  14. package/.mokogitea/ISSUE_TEMPLATE/version.md +24 -0
  15. package/.mokogitea/branch-protection.yml +251 -0
  16. package/.mokogitea/workflows/auto-assign.yml +76 -0
  17. package/.mokogitea/workflows/auto-bump.yml +66 -0
  18. package/.mokogitea/workflows/auto-dev-issue.yml +207 -0
  19. package/.mokogitea/workflows/auto-release.yml +421 -0
  20. package/.mokogitea/workflows/branch-cleanup.yml +48 -0
  21. package/.mokogitea/workflows/cascade-dev.yml +10 -0
  22. package/.mokogitea/workflows/changelog-validation.yml +101 -0
  23. package/.mokogitea/workflows/ci-generic.yml +191 -0
  24. package/.mokogitea/workflows/cleanup.yml +87 -0
  25. package/.mokogitea/workflows/codeql-analysis.yml +115 -0
  26. package/.mokogitea/workflows/copilot-agent.yml +44 -0
  27. package/.mokogitea/workflows/deploy-manual.yml +126 -0
  28. package/.mokogitea/workflows/enterprise-firewall-setup.yml +758 -0
  29. package/.mokogitea/workflows/gitleaks.yml +92 -0
  30. package/.mokogitea/workflows/issue-branch.yml +73 -0
  31. package/.mokogitea/workflows/mcp-auto-release.yml +278 -0
  32. package/.mokogitea/workflows/mcp-build-test.yml +65 -0
  33. package/.mokogitea/workflows/mcp-sdk-check.yml +109 -0
  34. package/.mokogitea/workflows/mcp-tool-inventory.yml +61 -0
  35. package/.mokogitea/workflows/notify.yml +70 -0
  36. package/.mokogitea/workflows/npm-publish.yml +113 -0
  37. package/.mokogitea/workflows/pr-check.yml +534 -0
  38. package/.mokogitea/workflows/pre-release.yml +252 -0
  39. package/.mokogitea/workflows/rc-revert.yml +66 -0
  40. package/.mokogitea/workflows/repo-health.yml +712 -0
  41. package/.mokogitea/workflows/repository-cleanup.yml +525 -0
  42. package/.mokogitea/workflows/security-audit.yml +82 -0
  43. package/.mokogitea/workflows/standards-compliance.yml +2614 -0
  44. package/.mokogitea/workflows/sync-version-on-merge.yml +133 -0
  45. package/.mokogitea/workflows/update-server.yml +312 -0
  46. package/.mokogitea/workflows/workflow-sync-trigger.yml +73 -0
  47. package/CHANGELOG.md +130 -0
  48. package/CLAUDE.md +49 -0
  49. package/CONTRIBUTING.md +161 -0
  50. package/ISSUES.md +601 -0
  51. package/Makefile +70 -0
  52. package/README.md +80 -0
  53. package/automation/ci-issue-reporter.sh +237 -0
  54. package/config.example.json +18 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.js +111 -0
  57. package/dist/shell.d.ts +50 -0
  58. package/dist/shell.js +209 -0
  59. package/dist/tools/apps.d.ts +3 -0
  60. package/dist/tools/apps.js +63 -0
  61. package/dist/tools/audio.d.ts +3 -0
  62. package/dist/tools/audio.js +142 -0
  63. package/dist/tools/audio_apps.d.ts +3 -0
  64. package/dist/tools/audio_apps.js +86 -0
  65. package/dist/tools/automation.d.ts +3 -0
  66. package/dist/tools/automation.js +261 -0
  67. package/dist/tools/bluetooth.d.ts +3 -0
  68. package/dist/tools/bluetooth.js +96 -0
  69. package/dist/tools/clipboard.d.ts +3 -0
  70. package/dist/tools/clipboard.js +118 -0
  71. package/dist/tools/config.d.ts +3 -0
  72. package/dist/tools/config.js +85 -0
  73. package/dist/tools/dialog.d.ts +3 -0
  74. package/dist/tools/dialog.js +72 -0
  75. package/dist/tools/display.d.ts +3 -0
  76. package/dist/tools/display.js +256 -0
  77. package/dist/tools/drives.d.ts +3 -0
  78. package/dist/tools/drives.js +98 -0
  79. package/dist/tools/environment.d.ts +3 -0
  80. package/dist/tools/environment.js +129 -0
  81. package/dist/tools/execute.d.ts +3 -0
  82. package/dist/tools/execute.js +28 -0
  83. package/dist/tools/filesystem.d.ts +3 -0
  84. package/dist/tools/filesystem.js +230 -0
  85. package/dist/tools/firewall.d.ts +3 -0
  86. package/dist/tools/firewall.js +108 -0
  87. package/dist/tools/hosts.d.ts +3 -0
  88. package/dist/tools/hosts.js +119 -0
  89. package/dist/tools/maintenance.d.ts +3 -0
  90. package/dist/tools/maintenance.js +236 -0
  91. package/dist/tools/netstat.d.ts +3 -0
  92. package/dist/tools/netstat.js +56 -0
  93. package/dist/tools/network.d.ts +3 -0
  94. package/dist/tools/network.js +70 -0
  95. package/dist/tools/notification.d.ts +3 -0
  96. package/dist/tools/notification.js +41 -0
  97. package/dist/tools/power.d.ts +3 -0
  98. package/dist/tools/power.js +104 -0
  99. package/dist/tools/printer.d.ts +3 -0
  100. package/dist/tools/printer.js +97 -0
  101. package/dist/tools/process.d.ts +3 -0
  102. package/dist/tools/process.js +54 -0
  103. package/dist/tools/process_kill.d.ts +3 -0
  104. package/dist/tools/process_kill.js +48 -0
  105. package/dist/tools/recycle_bin.d.ts +3 -0
  106. package/dist/tools/recycle_bin.js +108 -0
  107. package/dist/tools/registry.d.ts +3 -0
  108. package/dist/tools/registry.js +136 -0
  109. package/dist/tools/scheduler.d.ts +3 -0
  110. package/dist/tools/scheduler.js +116 -0
  111. package/dist/tools/service.d.ts +3 -0
  112. package/dist/tools/service.js +79 -0
  113. package/dist/tools/startup.d.ts +3 -0
  114. package/dist/tools/startup.js +159 -0
  115. package/dist/tools/storage.d.ts +3 -0
  116. package/dist/tools/storage.js +129 -0
  117. package/dist/tools/system.d.ts +3 -0
  118. package/dist/tools/system.js +84 -0
  119. package/dist/tools/system_mgmt.d.ts +3 -0
  120. package/dist/tools/system_mgmt.js +174 -0
  121. package/dist/tools/terminal.d.ts +3 -0
  122. package/dist/tools/terminal.js +80 -0
  123. package/dist/tools/theme.d.ts +3 -0
  124. package/dist/tools/theme.js +165 -0
  125. package/dist/tools/usb.d.ts +3 -0
  126. package/dist/tools/usb.js +52 -0
  127. package/dist/tools/virtual_desktop.d.ts +3 -0
  128. package/dist/tools/virtual_desktop.js +112 -0
  129. package/dist/tools/wifi.d.ts +3 -0
  130. package/dist/tools/wifi.js +136 -0
  131. package/dist/tools/window.d.ts +3 -0
  132. package/dist/tools/window.js +189 -0
  133. package/dist/tools/winget.d.ts +3 -0
  134. package/dist/tools/winget.js +79 -0
  135. package/dist/tools/wsl.d.ts +3 -0
  136. package/dist/tools/wsl.js +99 -0
  137. package/docs/API.md +63 -0
  138. package/docs/ARCHITECTURE.md +73 -0
  139. package/docs/INSTALLATION.md +102 -0
  140. package/docs/index.md +12 -0
  141. package/package.json +35 -0
  142. package/scripts/setup.mjs +123 -0
  143. package/src/index.ts +125 -0
  144. package/src/shell.ts +253 -0
  145. package/src/tools/apps.ts +76 -0
  146. package/src/tools/audio.ts +161 -0
  147. package/src/tools/audio_apps.ts +98 -0
  148. package/src/tools/automation.ts +297 -0
  149. package/src/tools/bluetooth.ts +114 -0
  150. package/src/tools/clipboard.ts +138 -0
  151. package/src/tools/config.ts +105 -0
  152. package/src/tools/dialog.ts +87 -0
  153. package/src/tools/display.ts +285 -0
  154. package/src/tools/drives.ts +124 -0
  155. package/src/tools/environment.ts +146 -0
  156. package/src/tools/execute.ts +35 -0
  157. package/src/tools/filesystem.ts +273 -0
  158. package/src/tools/firewall.ts +125 -0
  159. package/src/tools/hosts.ts +135 -0
  160. package/src/tools/maintenance.ts +299 -0
  161. package/src/tools/netstat.ts +72 -0
  162. package/src/tools/network.ts +84 -0
  163. package/src/tools/notification.ts +50 -0
  164. package/src/tools/power.ts +123 -0
  165. package/src/tools/printer.ts +114 -0
  166. package/src/tools/process.ts +80 -0
  167. package/src/tools/process_kill.ts +57 -0
  168. package/src/tools/recycle_bin.ts +126 -0
  169. package/src/tools/registry.ts +165 -0
  170. package/src/tools/scheduler.ts +140 -0
  171. package/src/tools/service.ts +102 -0
  172. package/src/tools/startup.ts +180 -0
  173. package/src/tools/storage.ts +141 -0
  174. package/src/tools/system.ts +99 -0
  175. package/src/tools/system_mgmt.ts +190 -0
  176. package/src/tools/terminal.ts +117 -0
  177. package/src/tools/theme.ts +205 -0
  178. package/src/tools/usb.ts +65 -0
  179. package/src/tools/virtual_desktop.ts +122 -0
  180. package/src/tools/wifi.ts +157 -0
  181. package/src/tools/window.ts +211 -0
  182. package/src/tools/winget.ts +100 -0
  183. package/src/tools/wsl.ts +112 -0
  184. 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