patchwarden 0.6.0 → 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.
Files changed (134) hide show
  1. package/PatchWarden-Control-Tray.cmd +11 -0
  2. package/PatchWarden-Control.cmd +6 -0
  3. package/PatchWarden-Desktop.cmd +5 -0
  4. package/PatchWarden.cmd +1 -1
  5. package/README.en.md +106 -18
  6. package/README.md +30 -19
  7. package/Restart-PatchWarden-Control.cmd +6 -0
  8. package/Stop-PatchWarden.cmd +11 -0
  9. package/dist/controlCenter.d.ts +14 -0
  10. package/dist/controlCenter.js +2002 -0
  11. package/dist/doctor.js +4 -4
  12. package/dist/logging.d.ts +52 -0
  13. package/dist/logging.js +123 -0
  14. package/dist/runner/changeCapture.d.ts +41 -0
  15. package/dist/runner/changeCapture.js +171 -1
  16. package/dist/runner/runTask.js +204 -24
  17. package/dist/smoke-test.js +8 -8
  18. package/dist/test/unit/android-doctor.test.d.ts +1 -0
  19. package/dist/test/unit/android-doctor.test.js +118 -0
  20. package/dist/test/unit/chinese-path.test.d.ts +1 -0
  21. package/dist/test/unit/chinese-path.test.js +91 -0
  22. package/dist/test/unit/command-guard.test.d.ts +1 -0
  23. package/dist/test/unit/command-guard.test.js +160 -0
  24. package/dist/test/unit/direct-guards.test.d.ts +1 -0
  25. package/dist/test/unit/direct-guards.test.js +213 -0
  26. package/dist/test/unit/logging.test.d.ts +1 -0
  27. package/dist/test/unit/logging.test.js +275 -0
  28. package/dist/test/unit/path-guard.test.d.ts +1 -0
  29. package/dist/test/unit/path-guard.test.js +109 -0
  30. package/dist/test/unit/safe-status.test.d.ts +1 -0
  31. package/dist/test/unit/safe-status.test.js +165 -0
  32. package/dist/test/unit/sensitive-guard.test.d.ts +1 -0
  33. package/dist/test/unit/sensitive-guard.test.js +104 -0
  34. package/dist/test/unit/sync-file.test.d.ts +1 -0
  35. package/dist/test/unit/sync-file.test.js +154 -0
  36. package/dist/test/unit/watcher-status.test.d.ts +1 -0
  37. package/dist/test/unit/watcher-status.test.js +169 -0
  38. package/dist/tools/androidDoctor.d.ts +38 -0
  39. package/dist/tools/androidDoctor.js +391 -0
  40. package/dist/tools/auditTask.js +11 -5
  41. package/dist/tools/getTaskSummary.d.ts +3 -0
  42. package/dist/tools/getTaskSummary.js +15 -1
  43. package/dist/tools/healthCheck.d.ts +5 -0
  44. package/dist/tools/healthCheck.js +21 -0
  45. package/dist/tools/registry.js +53 -0
  46. package/dist/tools/safeStatus.d.ts +19 -0
  47. package/dist/tools/safeStatus.js +72 -0
  48. package/dist/tools/syncFile.d.ts +18 -0
  49. package/dist/tools/syncFile.js +65 -0
  50. package/dist/tools/taskOutputs.d.ts +2 -2
  51. package/dist/tools/toolCatalog.d.ts +2 -2
  52. package/dist/tools/toolCatalog.js +2 -0
  53. package/dist/version.d.ts +2 -2
  54. package/dist/version.js +2 -2
  55. package/dist/watcherStatus.d.ts +1 -0
  56. package/dist/watcherStatus.js +96 -4
  57. package/docs/control-center/README.md +33 -0
  58. package/docs/control-center/control-center-daily-driver.md +211 -0
  59. package/docs/control-center/control-center-mvp.md +205 -0
  60. package/docs/control-center/control-center-phase2.md +159 -0
  61. package/docs/demo.md +3 -0
  62. package/docs/performance-notes.md +55 -0
  63. package/docs/release-v0.6.1.md +75 -0
  64. package/docs/release-v0.6.4.md +45 -0
  65. package/examples/openai-tunnel/README.md +5 -5
  66. package/examples/openai-tunnel/tunnel-client.example.yaml +3 -3
  67. package/package.json +23 -14
  68. package/scripts/README.md +47 -0
  69. package/scripts/{brand-check.js → checks/brand-check.js} +2 -2
  70. package/scripts/checks/control-center-smoke.js +1098 -0
  71. package/scripts/{control-smoke.js → checks/control-smoke.js} +17 -3
  72. package/scripts/{doctor-smoke.js → checks/doctor-smoke.js} +1 -1
  73. package/scripts/{http-mcp-smoke.js → checks/http-mcp-smoke.js} +12 -4
  74. package/scripts/{lifecycle-smoke.js → checks/lifecycle-smoke.js} +347 -13
  75. package/scripts/{mcp-manifest-check.js → checks/mcp-manifest-check.js} +32 -9
  76. package/scripts/{mcp-smoke.js → checks/mcp-smoke.js} +14 -9
  77. package/scripts/{package-manifest-check.js → checks/package-manifest-check.js} +2 -1
  78. package/scripts/{tunnel-supervisor-smoke.js → checks/tunnel-supervisor-smoke.js} +2 -2
  79. package/scripts/checks/unit-tests.js +36 -0
  80. package/scripts/{watcher-supervisor-smoke.js → checks/watcher-supervisor-smoke.js} +11 -5
  81. package/scripts/control/control-center-tray.ps1 +281 -0
  82. package/scripts/{get-patchwarden-health.ps1 → control/get-patchwarden-health.ps1} +3 -3
  83. package/scripts/{manage-patchwarden.ps1 → control/manage-patchwarden.ps1} +30 -4
  84. package/scripts/control/restart-control-center.ps1 +173 -0
  85. package/scripts/{restart-patchwarden.ps1 → control/restart-patchwarden.ps1} +1 -1
  86. package/scripts/control/start-control-center.ps1 +263 -0
  87. package/scripts/{start-patchwarden-tunnel.ps1 → control/start-patchwarden-tunnel.ps1} +48 -6
  88. package/scripts/control/stop-patchwarden.ps1 +114 -0
  89. package/scripts/launchers/Check-PatchWarden-Health.cmd +1 -1
  90. package/scripts/launchers/Reset-PatchWarden-Tunnel-Key.cmd +1 -1
  91. package/scripts/launchers/Restart-PatchWarden.cmd +1 -1
  92. package/scripts/launchers/Start-PatchWarden-Direct-Tunnel.cmd +1 -1
  93. package/scripts/launchers/Start-PatchWarden-Tunnel.cmd +1 -1
  94. package/scripts/{patchwarden-mcp-direct.cmd → mcp/patchwarden-mcp-direct.cmd} +1 -1
  95. package/scripts/{patchwarden-mcp-stdio.cmd → mcp/patchwarden-mcp-stdio.cmd} +1 -1
  96. package/scripts/release/pack-clean.js +305 -0
  97. package/src/controlCenter.ts +2152 -0
  98. package/src/doctor.ts +5 -5
  99. package/src/logging.ts +152 -0
  100. package/src/runner/changeCapture.ts +212 -1
  101. package/src/runner/runTask.ts +220 -22
  102. package/src/smoke-test.ts +5 -5
  103. package/src/test/unit/android-doctor.test.ts +158 -0
  104. package/src/test/unit/chinese-path.test.ts +106 -0
  105. package/src/test/unit/command-guard.test.ts +221 -0
  106. package/src/test/unit/direct-guards.test.ts +297 -0
  107. package/src/test/unit/logging.test.ts +325 -0
  108. package/src/test/unit/path-guard.test.ts +150 -0
  109. package/src/test/unit/safe-status.test.ts +187 -0
  110. package/src/test/unit/sensitive-guard.test.ts +124 -0
  111. package/src/test/unit/sync-file.test.ts +231 -0
  112. package/src/test/unit/watcher-status.test.ts +190 -0
  113. package/src/tools/androidDoctor.ts +424 -0
  114. package/src/tools/auditTask.ts +11 -5
  115. package/src/tools/getTaskSummary.ts +22 -1
  116. package/src/tools/healthCheck.ts +22 -0
  117. package/src/tools/registry.ts +63 -0
  118. package/src/tools/safeStatus.ts +96 -0
  119. package/src/tools/syncFile.ts +122 -0
  120. package/src/tools/toolCatalog.ts +2 -0
  121. package/src/version.ts +2 -2
  122. package/src/watcherStatus.ts +101 -4
  123. package/ui/colors_and_type.css +141 -0
  124. package/ui/pages/audit.html +743 -0
  125. package/ui/pages/dashboard.html +1154 -0
  126. package/ui/pages/direct-sessions.html +652 -0
  127. package/ui/pages/logs.html +502 -0
  128. package/ui/pages/task-detail.html +1229 -0
  129. package/ui/pages/tasks.html +702 -0
  130. package/ui/pages/workspace.html +947 -0
  131. package/ui/partials/project-shell.html +362 -0
  132. package/ui/vendor/lucide.js +12 -0
  133. package/ui/vendor/tailwindcss-browser.js +947 -0
  134. package/scripts/pack-clean.js +0 -141
@@ -1,141 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- cpSync,
4
- existsSync,
5
- mkdirSync,
6
- readdirSync,
7
- rmSync,
8
- statSync,
9
- } from "node:fs";
10
- import { execFileSync } from "node:child_process";
11
- import { join, relative, resolve } from "node:path";
12
- import { fileURLToPath } from "node:url";
13
-
14
- const scriptDir = resolve(fileURLToPath(new URL(".", import.meta.url)));
15
- const root = resolve(scriptDir, "..");
16
- const releaseDir = resolve(root, "release");
17
- const archivePath = resolve(root, "patchwarden-release.tar.gz");
18
-
19
- const include = [
20
- "dist",
21
- "docs",
22
- "examples",
23
- "scripts",
24
- "src",
25
- "PatchWarden.cmd",
26
- ".gitignore",
27
- "LICENSE",
28
- "README.md",
29
- "package-lock.json",
30
- "package.json",
31
- "tsconfig.json",
32
- ];
33
-
34
- const forbidden = [
35
- /(^|[\\/])node_modules([\\/]|$)/,
36
- /(^|[\\/])\.patchwarden([\\/]|$)/,
37
- /(^|[\\/])\.safe-bifrost([\\/]|$)/,
38
- /(^|[\\/])patchwarden\.config\.json$/,
39
- /(^|[\\/])safe-bifrost\.config\.json$/,
40
- /\.local\.(cmd|ps1)$/i,
41
- /\.dpapi$/i,
42
- /(^|[\\/])\.env$/,
43
- /\.log$/,
44
- /^docs[\\/]optimization-proposal\.md$/i,
45
- /(^|[\\/])kill-patchwarden\.(cmd|ps1)$/i,
46
- ];
47
-
48
- console.log("[pack-clean] Preparing clean release directory...");
49
- rmSync(releaseDir, { recursive: true, force: true });
50
- rmSync(archivePath, { force: true });
51
- mkdirSync(releaseDir, { recursive: true });
52
-
53
- for (const item of include) {
54
- const source = resolve(root, item);
55
- const target = resolve(releaseDir, item);
56
- if (!existsSync(source)) {
57
- console.log(` skip missing: ${item}`);
58
- continue;
59
- }
60
- cpSync(source, target, {
61
- recursive: true,
62
- filter(sourcePath) {
63
- const rel = toPosix(relative(root, sourcePath));
64
- return !isForbidden(rel);
65
- },
66
- });
67
- console.log(` copied: ${item}`);
68
- }
69
-
70
- const releaseFiles = listFiles(releaseDir);
71
- const badReleaseEntries = releaseFiles.filter((file) =>
72
- isForbidden(toPosix(relative(releaseDir, file)))
73
- );
74
- if (badReleaseEntries.length > 0) {
75
- console.error("[pack-clean] Forbidden files in release directory:");
76
- for (const file of badReleaseEntries) {
77
- console.error(` ${relative(releaseDir, file)}`);
78
- }
79
- process.exit(1);
80
- }
81
-
82
- console.log("[pack-clean] Creating tar.gz archive...");
83
-
84
- // Convert Windows paths to WSL/Linux paths when tar is a Unix binary
85
- function toTarPath(p) {
86
- if (process.platform === "win32") {
87
- return p;
88
- }
89
- return p.replace(/^([A-Za-z]):/, (_, d) => `/${d.toLowerCase()}`).replace(/\\/g, "/");
90
- }
91
-
92
- const tarArchivePath = toTarPath(archivePath);
93
- const tarReleaseDir = toTarPath(releaseDir);
94
-
95
- execFileSync("tar", ["-czf", tarArchivePath, "-C", tarReleaseDir, "."], {
96
- stdio: "inherit",
97
- });
98
-
99
- const archiveEntries = execFileSync("tar", ["-tzf", tarArchivePath], {
100
- encoding: "utf-8",
101
- })
102
- .split(/\r?\n/)
103
- .filter(Boolean)
104
- .map((entry) => toPosix(entry.replace(/^\.\//, "")));
105
-
106
- const badArchiveEntries = archiveEntries.filter(isForbidden);
107
- if (badArchiveEntries.length > 0) {
108
- console.error("[pack-clean] Forbidden files in archive:");
109
- for (const entry of badArchiveEntries) {
110
- console.error(` ${entry}`);
111
- }
112
- rmSync(archivePath, { force: true });
113
- process.exit(1);
114
- }
115
-
116
- const sizeKb = (statSync(archivePath).size / 1024).toFixed(1);
117
- console.log(`[pack-clean] Release directory: ${releaseFiles.length} files`);
118
- console.log(`[pack-clean] Archive: ${archivePath} (${sizeKb} KB)`);
119
- console.log("[pack-clean] OK");
120
-
121
- function listFiles(dir) {
122
- const entries = [];
123
- for (const name of readdirSync(dir)) {
124
- const fullPath = join(dir, name);
125
- const stat = statSync(fullPath);
126
- if (stat.isDirectory()) {
127
- entries.push(...listFiles(fullPath));
128
- } else {
129
- entries.push(fullPath);
130
- }
131
- }
132
- return entries;
133
- }
134
-
135
- function isForbidden(value) {
136
- return forbidden.some((pattern) => pattern.test(value));
137
- }
138
-
139
- function toPosix(value) {
140
- return value.replace(/\\/g, "/");
141
- }