patchwarden 0.6.1 → 0.6.4
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/PatchWarden-Control-Tray.cmd +11 -0
- package/PatchWarden-Control.cmd +6 -0
- package/PatchWarden-Desktop.cmd +5 -0
- package/PatchWarden.cmd +1 -1
- package/README.en.md +106 -18
- package/README.md +30 -19
- package/Restart-PatchWarden-Control.cmd +6 -0
- package/Stop-PatchWarden.cmd +11 -0
- package/dist/controlCenter.d.ts +14 -0
- package/dist/controlCenter.js +2002 -0
- package/dist/doctor.js +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/control-center/README.md +33 -0
- package/docs/control-center/control-center-daily-driver.md +211 -0
- package/docs/control-center/control-center-mvp.md +205 -0
- package/docs/control-center/control-center-phase2.md +159 -0
- package/docs/demo.md +3 -0
- package/docs/release-v0.6.4.md +45 -0
- package/examples/openai-tunnel/README.md +5 -5
- package/examples/openai-tunnel/tunnel-client.example.yaml +3 -3
- package/package.json +23 -15
- package/scripts/README.md +47 -0
- package/scripts/{brand-check.js → checks/brand-check.js} +2 -2
- package/scripts/checks/control-center-smoke.js +1098 -0
- package/scripts/{control-smoke.js → checks/control-smoke.js} +17 -3
- package/scripts/{doctor-smoke.js → checks/doctor-smoke.js} +1 -1
- package/scripts/{http-mcp-smoke.js → checks/http-mcp-smoke.js} +2 -2
- package/scripts/{lifecycle-smoke.js → checks/lifecycle-smoke.js} +12 -12
- package/scripts/{mcp-manifest-check.js → checks/mcp-manifest-check.js} +2 -2
- package/scripts/{mcp-smoke.js → checks/mcp-smoke.js} +4 -2
- package/scripts/{package-manifest-check.js → checks/package-manifest-check.js} +2 -1
- package/scripts/{tunnel-supervisor-smoke.js → checks/tunnel-supervisor-smoke.js} +2 -2
- package/scripts/{unit-tests.js → checks/unit-tests.js} +1 -1
- package/scripts/{watcher-supervisor-smoke.js → checks/watcher-supervisor-smoke.js} +11 -5
- package/scripts/control/control-center-tray.ps1 +281 -0
- package/scripts/{get-patchwarden-health.ps1 → control/get-patchwarden-health.ps1} +3 -3
- package/scripts/{manage-patchwarden.ps1 → control/manage-patchwarden.ps1} +30 -4
- package/scripts/control/restart-control-center.ps1 +173 -0
- package/scripts/{restart-patchwarden.ps1 → control/restart-patchwarden.ps1} +1 -1
- package/scripts/control/start-control-center.ps1 +263 -0
- package/scripts/{start-patchwarden-tunnel.ps1 → control/start-patchwarden-tunnel.ps1} +48 -6
- package/scripts/control/stop-patchwarden.ps1 +114 -0
- package/scripts/launchers/Check-PatchWarden-Health.cmd +1 -1
- package/scripts/launchers/Reset-PatchWarden-Tunnel-Key.cmd +1 -1
- package/scripts/launchers/Restart-PatchWarden.cmd +1 -1
- package/scripts/launchers/Start-PatchWarden-Direct-Tunnel.cmd +1 -1
- package/scripts/launchers/Start-PatchWarden-Tunnel.cmd +1 -1
- package/scripts/{patchwarden-mcp-direct.cmd → mcp/patchwarden-mcp-direct.cmd} +1 -1
- package/scripts/{patchwarden-mcp-stdio.cmd → mcp/patchwarden-mcp-stdio.cmd} +1 -1
- package/scripts/{pack-clean.js → release/pack-clean.js} +9 -1
- package/src/controlCenter.ts +2152 -0
- package/src/doctor.ts +4 -4
- package/src/version.ts +1 -1
- package/ui/colors_and_type.css +141 -0
- package/ui/pages/audit.html +743 -0
- package/ui/pages/dashboard.html +1154 -0
- package/ui/pages/direct-sessions.html +652 -0
- package/ui/pages/logs.html +502 -0
- package/ui/pages/task-detail.html +1229 -0
- package/ui/pages/tasks.html +702 -0
- package/ui/pages/workspace.html +947 -0
- package/ui/partials/project-shell.html +362 -0
- package/ui/vendor/lucide.js +12 -0
- package/ui/vendor/tailwindcss-browser.js +947 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# PatchWarden v0.6.4 Release Notes
|
|
2
|
+
|
|
3
|
+
**Release Date**: 2026-06-26
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
PatchWarden v0.6.4 is a desktop experience release. It keeps the existing CLI and script surface, but makes the normal Windows workflow feel like a lightweight local application: start one desktop entry, control Core/Direct from the tray or Web dashboard, and shut everything down from one stop command.
|
|
8
|
+
|
|
9
|
+
## Desktop Entry
|
|
10
|
+
|
|
11
|
+
- Added `PatchWarden-Desktop.cmd` as the recommended daily entry point.
|
|
12
|
+
- The desktop entry starts the tray in a hidden PowerShell host and ensures the local Control Center is available.
|
|
13
|
+
- It does not automatically open a browser window. Use **Open Dashboard** from the tray or `PatchWarden-Control.cmd` when you want the full Web console.
|
|
14
|
+
- `PatchWarden-Control-Tray.cmd --foreground` remains available for tray debugging.
|
|
15
|
+
|
|
16
|
+
## Tray Improvements
|
|
17
|
+
|
|
18
|
+
- Added single-instance protection for the tray process.
|
|
19
|
+
- Replaced the generic system icon path with a small PatchWarden-styled shield icon drawn through WinForms/System.Drawing.
|
|
20
|
+
- Kept the tray as a lightweight switch layer: Open Dashboard, Status, Start All, Stop All, Restart All, Open Logs, and Quit Tray.
|
|
21
|
+
- Added clearer balloon/status feedback for startup and lifecycle actions.
|
|
22
|
+
- Clarified action semantics: **Stop All** stops Core/Direct and leaves tray/dashboard available; **Quit Tray** exits only the tray; `Stop-PatchWarden.cmd` performs full shutdown.
|
|
23
|
+
|
|
24
|
+
## Background Lifecycle
|
|
25
|
+
|
|
26
|
+
- Control Center now invokes `manage-patchwarden.ps1` with `-Background` and `windowsHide: true` for lifecycle API calls.
|
|
27
|
+
- The manager starts Core/Direct supervisors hidden for desktop/Web flows, while preserving visible launcher windows for explicit CLI/debug usage.
|
|
28
|
+
- Added `-NoTunnelWebUi` to `start-patchwarden-tunnel.ps1` so background starts do not open tunnel-client Web UI tabs.
|
|
29
|
+
|
|
30
|
+
## Verification
|
|
31
|
+
|
|
32
|
+
- TypeScript build: PASS
|
|
33
|
+
- Control smoke: PASS
|
|
34
|
+
- Control Center smoke: PASS (23 passed, 0 failed)
|
|
35
|
+
- Package manifest check: PASS
|
|
36
|
+
- PowerShell control script parse check: PASS
|
|
37
|
+
- Manual desktop-flow evidence: desktop entry starts only tray + Control Center; Start/Restart uses hidden supervisors; Stop-PatchWarden closes Core/Direct, Control Center, and tray.
|
|
38
|
+
|
|
39
|
+
## Migration
|
|
40
|
+
|
|
41
|
+
No breaking changes. Existing CLI commands and compatibility launchers remain available. For daily Windows use, prefer:
|
|
42
|
+
|
|
43
|
+
```powershell
|
|
44
|
+
.\PatchWarden-Desktop.cmd
|
|
45
|
+
```
|
|
@@ -15,7 +15,7 @@ or local private paths.
|
|
|
15
15
|
|
|
16
16
|
1. Configure `patchwarden.config.json`.
|
|
17
17
|
2. Run `npm.cmd run build`.
|
|
18
|
-
3. Use `scripts/patchwarden-mcp-stdio.cmd` as the tunnel MCP command.
|
|
18
|
+
3. Use `scripts/mcp/patchwarden-mcp-stdio.cmd` as the tunnel MCP command.
|
|
19
19
|
4. Start `npm.cmd run watch` in a separate terminal.
|
|
20
20
|
5. Start `tunnel-client run` or use `PatchWarden.cmd start core`.
|
|
21
21
|
6. Create a ChatGPT Connector using the tunnel channel.
|
|
@@ -25,10 +25,10 @@ or local private paths.
|
|
|
25
25
|
|
|
26
26
|
For ChatGPT Direct editing, set `enableDirectProfile: true` in the trusted
|
|
27
27
|
local config and run `PatchWarden.cmd start direct`. It uses
|
|
28
|
-
`scripts/patchwarden-mcp-direct.cmd`, the separate `patchwarden-direct` Tunnel
|
|
28
|
+
`scripts/mcp/patchwarden-mcp-direct.cmd`, the separate `patchwarden-direct` Tunnel
|
|
29
29
|
Client profile, no Watcher, and an isolated `runtime-direct` status directory.
|
|
30
|
-
Use a separate Direct Connector/Tunnel ID so the fixed
|
|
31
|
-
the
|
|
30
|
+
Use a separate Direct Connector/Tunnel ID so the fixed 17-tool Core catalog and
|
|
31
|
+
the 10-tool Direct catalog never overwrite each other's cached schema.
|
|
32
32
|
|
|
33
33
|
The Windows launcher prompts for the runtime API key once and stores only a
|
|
34
34
|
Windows DPAPI-encrypted value under `%APPDATA%\patchwarden`. Use
|
|
@@ -38,7 +38,7 @@ Before the launcher starts the tunnel it performs a real MCP stdio handshake
|
|
|
38
38
|
and requires the exact `chatgpt_core` manifest. Run
|
|
39
39
|
`PatchWarden.cmd health` to see the version, profile, tool names, schema
|
|
40
40
|
hash, process sources, and any mixed-version warnings. The check is read-only.
|
|
41
|
-
The v0.
|
|
41
|
+
The v0.6.1 core manifest contains 17 tools. A different count or schema hash
|
|
42
42
|
requires a Connector refresh and validation from a new ChatGPT conversation.
|
|
43
43
|
|
|
44
44
|
## Architecture
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# --sample sample_mcp_stdio_local \
|
|
13
13
|
# --profile patchwarden \
|
|
14
14
|
# --tunnel-id tunnel_xxx \
|
|
15
|
-
# --mcp-command "C:/path/to/patchwarden/scripts/patchwarden-mcp-stdio.cmd"
|
|
15
|
+
# --mcp-command "C:/path/to/patchwarden/scripts/mcp/patchwarden-mcp-stdio.cmd"
|
|
16
16
|
|
|
17
17
|
# Direct mode uses a separate profile and command:
|
|
18
18
|
#
|
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
# --sample sample_mcp_stdio_local \
|
|
21
21
|
# --profile patchwarden-direct \
|
|
22
22
|
# --tunnel-id tunnel_xxx \
|
|
23
|
-
# --mcp-command "C:/path/to/patchwarden/scripts/patchwarden-mcp-direct.cmd"
|
|
23
|
+
# --mcp-command "C:/path/to/patchwarden/scripts/mcp/patchwarden-mcp-direct.cmd"
|
|
24
24
|
|
|
25
25
|
mcp:
|
|
26
26
|
commands:
|
|
27
27
|
- channel: main
|
|
28
|
-
command: "C:/path/to/patchwarden/scripts/patchwarden-mcp-stdio.cmd"
|
|
28
|
+
command: "C:/path/to/patchwarden/scripts/mcp/patchwarden-mcp-stdio.cmd"
|
|
29
29
|
|
|
30
30
|
# Mode B: HTTP
|
|
31
31
|
#
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwarden",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "A secure local MCP bridge: clients save plans, local agents execute tasks, and results are returned through workspace-scoped files.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,9 +17,16 @@
|
|
|
17
17
|
"src/",
|
|
18
18
|
"examples/",
|
|
19
19
|
"scripts/",
|
|
20
|
-
"!scripts/kill-patchwarden.ps1",
|
|
20
|
+
"!scripts/control/kill-patchwarden.ps1",
|
|
21
21
|
"!scripts/launchers/Kill-PatchWarden.cmd",
|
|
22
|
+
"!.local/",
|
|
23
|
+
"ui/",
|
|
22
24
|
"PatchWarden.cmd",
|
|
25
|
+
"PatchWarden-Control.cmd",
|
|
26
|
+
"PatchWarden-Control-Tray.cmd",
|
|
27
|
+
"PatchWarden-Desktop.cmd",
|
|
28
|
+
"Restart-PatchWarden-Control.cmd",
|
|
29
|
+
"Stop-PatchWarden.cmd",
|
|
23
30
|
"README.md",
|
|
24
31
|
"README.en.md",
|
|
25
32
|
"LICENSE",
|
|
@@ -29,25 +36,26 @@
|
|
|
29
36
|
"build": "node ./node_modules/typescript/bin/tsc",
|
|
30
37
|
"start": "node dist/index.js",
|
|
31
38
|
"start:http": "node dist/httpServer.js",
|
|
39
|
+
"start:control": "node dist/controlCenter.js",
|
|
32
40
|
"dev": "npm run build && node dist/index.js",
|
|
33
41
|
"runner": "node dist/runner/cli.js",
|
|
34
42
|
"watch": "node dist/runner/watch.js",
|
|
35
43
|
"doctor": "node dist/doctor.js",
|
|
36
44
|
"doctor:ci": "node dist/doctor.js --allow-default-config",
|
|
37
|
-
"test:unit": "node scripts/unit-tests.js",
|
|
38
|
-
"test": "node dist/smoke-test.js && node scripts/unit-tests.js && node scripts/lifecycle-smoke.js && node scripts/doctor-smoke.js && node scripts/tunnel-supervisor-smoke.js && node scripts/watcher-supervisor-smoke.js && node scripts/control-smoke.js && node scripts/mcp-manifest-check.js && node scripts/brand-check.js",
|
|
39
|
-
"test:lifecycle": "npm run build && node scripts/lifecycle-smoke.js",
|
|
40
|
-
"test:doctor": "npm run build && node scripts/doctor-smoke.js",
|
|
41
|
-
"test:tunnel-supervisor": "npm run build && node scripts/tunnel-supervisor-smoke.js",
|
|
42
|
-
"test:watcher-supervisor": "npm run build && node scripts/watcher-supervisor-smoke.js",
|
|
43
|
-
"check:tool-manifest": "npm run build && node scripts/mcp-manifest-check.js",
|
|
44
|
-
"check:direct-tool-manifest": "npm run build && node scripts/mcp-manifest-check.js --profile chatgpt_direct",
|
|
45
|
-
"check:brand": "node scripts/brand-check.js",
|
|
46
|
-
"test:mcp": "npm run build && node scripts/mcp-smoke.js",
|
|
47
|
-
"test:http-mcp": "npm run build && node scripts/http-mcp-smoke.js",
|
|
45
|
+
"test:unit": "node scripts/checks/unit-tests.js",
|
|
46
|
+
"test": "node dist/smoke-test.js && node scripts/checks/unit-tests.js && node scripts/checks/lifecycle-smoke.js && node scripts/checks/doctor-smoke.js && node scripts/checks/tunnel-supervisor-smoke.js && node scripts/checks/watcher-supervisor-smoke.js && node scripts/checks/control-smoke.js && node scripts/checks/mcp-manifest-check.js && node scripts/checks/brand-check.js && node scripts/checks/control-center-smoke.js",
|
|
47
|
+
"test:lifecycle": "npm run build && node scripts/checks/lifecycle-smoke.js",
|
|
48
|
+
"test:doctor": "npm run build && node scripts/checks/doctor-smoke.js",
|
|
49
|
+
"test:tunnel-supervisor": "npm run build && node scripts/checks/tunnel-supervisor-smoke.js",
|
|
50
|
+
"test:watcher-supervisor": "npm run build && node scripts/checks/watcher-supervisor-smoke.js",
|
|
51
|
+
"check:tool-manifest": "npm run build && node scripts/checks/mcp-manifest-check.js",
|
|
52
|
+
"check:direct-tool-manifest": "npm run build && node scripts/checks/mcp-manifest-check.js --profile chatgpt_direct",
|
|
53
|
+
"check:brand": "node scripts/checks/brand-check.js",
|
|
54
|
+
"test:mcp": "npm run build && node scripts/checks/mcp-smoke.js",
|
|
55
|
+
"test:http-mcp": "npm run build && node scripts/checks/http-mcp-smoke.js",
|
|
48
56
|
"pretest": "npm run build",
|
|
49
|
-
"pack:clean": "npm run build && node scripts/pack-clean.js",
|
|
50
|
-
"verify:package": "npm run build && node scripts/package-manifest-check.js"
|
|
57
|
+
"pack:clean": "npm run build && node scripts/release/pack-clean.js",
|
|
58
|
+
"verify:package": "npm run build && node scripts/checks/package-manifest-check.js"
|
|
51
59
|
},
|
|
52
60
|
"dependencies": {
|
|
53
61
|
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# PatchWarden Scripts
|
|
2
|
+
|
|
3
|
+
This directory keeps implementation scripts out of the root folder. Normal
|
|
4
|
+
desktop use should start from the root entrypoints:
|
|
5
|
+
|
|
6
|
+
```powershell
|
|
7
|
+
.\PatchWarden-Desktop.cmd
|
|
8
|
+
.\PatchWarden-Control.cmd
|
|
9
|
+
.\PatchWarden-Control-Tray.cmd --foreground
|
|
10
|
+
.\Stop-PatchWarden.cmd
|
|
11
|
+
.\PatchWarden.cmd status all
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Control Scripts
|
|
15
|
+
|
|
16
|
+
- `control/manage-patchwarden.ps1`: backing implementation for `PatchWarden.cmd`.
|
|
17
|
+
- `control/start-control-center.ps1`: starts the local Web dashboard.
|
|
18
|
+
- `control/restart-control-center.ps1`: restarts the local Web dashboard.
|
|
19
|
+
- `control/control-center-tray.ps1`: Windows tray quick controls.
|
|
20
|
+
- `control/stop-patchwarden.ps1`: one-click shutdown for Core/Direct,
|
|
21
|
+
Control Center, and tray.
|
|
22
|
+
- `control/start-patchwarden-tunnel.ps1`: starts Core or Direct tunnel supervision.
|
|
23
|
+
- `control/restart-patchwarden.ps1`: compatibility restart helper.
|
|
24
|
+
|
|
25
|
+
## MCP Entrypoints
|
|
26
|
+
|
|
27
|
+
- `mcp/patchwarden-mcp-stdio.cmd`: Core stdio MCP launcher.
|
|
28
|
+
- `mcp/patchwarden-mcp-direct.cmd`: Direct stdio MCP launcher.
|
|
29
|
+
|
|
30
|
+
## Smoke Tests And Checks
|
|
31
|
+
|
|
32
|
+
- `checks/*-smoke.js`: targeted smoke tests.
|
|
33
|
+
- `checks/unit-tests.js`: Node unit test entry.
|
|
34
|
+
- `checks/mcp-manifest-check.js`: validates MCP manifest expectations.
|
|
35
|
+
- `brand-check.js`: checks public brand strings.
|
|
36
|
+
- `checks/package-manifest-check.js`: verifies package contents.
|
|
37
|
+
|
|
38
|
+
## Release Helpers
|
|
39
|
+
|
|
40
|
+
- `release/pack-clean.js`: rebuilds `release/`, `patchwarden-release.tar.gz`, and the
|
|
41
|
+
versioned `PatchWarden-v*.zip` artifact.
|
|
42
|
+
|
|
43
|
+
## Compatibility Launchers
|
|
44
|
+
|
|
45
|
+
Compatibility `.cmd` files live under `scripts/launchers/`. User-private local
|
|
46
|
+
launchers belong under `.local/` and must stay out of Git and release packages.
|
|
47
|
+
|
|
@@ -12,8 +12,8 @@ const allowedLegacyFiles = new Set([
|
|
|
12
12
|
"docs/release-v0.3.0.md",
|
|
13
13
|
"docs/release-v0.4.0.md",
|
|
14
14
|
"docs/release-v0.6.0.md",
|
|
15
|
-
"scripts/brand-check.js",
|
|
16
|
-
"scripts/pack-clean.js",
|
|
15
|
+
"scripts/checks/brand-check.js",
|
|
16
|
+
"scripts/release/pack-clean.js",
|
|
17
17
|
]);
|
|
18
18
|
const legacyPattern = /safe-bifrost|Safe-Bifrost|SAFE_BIFROST|SafeBifrost|safe_bifrost/;
|
|
19
19
|
|