patchwarden 1.5.1 → 1.6.2
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.cmd +32 -2
- package/README.en.md +158 -26
- package/README.md +124 -24
- package/dist/assessments/agentAssessor.js +21 -12
- package/dist/assessments/assessmentDiagnostics.d.ts +29 -0
- package/dist/assessments/assessmentDiagnostics.js +132 -0
- package/dist/assessments/assessmentStore.d.ts +39 -0
- package/dist/assessments/assessmentStore.js +207 -45
- package/dist/assessments/securitySnapshot.d.ts +50 -0
- package/dist/assessments/securitySnapshot.js +158 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.js +66 -13
- package/dist/control/fileManager.d.ts +2 -0
- package/dist/control/fileManager.js +39 -0
- package/dist/control/middleware/auth.d.ts +6 -0
- package/dist/control/middleware/auth.js +14 -5
- package/dist/control/middleware/static.js +16 -3
- package/dist/control/routeTable.d.ts +24 -0
- package/dist/control/routeTable.js +263 -0
- package/dist/control/routes/audit.js +17 -7
- package/dist/control/routes/evidence.js +1 -1
- package/dist/control/routes/lineage.js +1 -1
- package/dist/control/routes/process.d.ts +7 -0
- package/dist/control/routes/process.js +329 -42
- package/dist/control/routes/sessions.d.ts +9 -1
- package/dist/control/routes/sessions.js +84 -21
- package/dist/control/routes/status.d.ts +60 -1
- package/dist/control/routes/status.js +94 -15
- package/dist/control/routes/taskActions.js +24 -60
- package/dist/control/routes/tasks.d.ts +4 -0
- package/dist/control/routes/tasks.js +61 -62
- package/dist/control/routes/workspace.js +50 -23
- package/dist/control/runtime.d.ts +3 -2
- package/dist/control/runtime.js +65 -40
- package/dist/control/server.js +37 -365
- package/dist/control/shared.d.ts +25 -1
- package/dist/control/shared.js +64 -11
- package/dist/diagnostics/allowedTestCommandSafety.d.ts +1 -0
- package/dist/diagnostics/allowedTestCommandSafety.js +11 -0
- package/dist/direct/directAudit.js +234 -225
- package/dist/direct/directGuards.d.ts +2 -1
- package/dist/direct/directGuards.js +42 -29
- package/dist/direct/directPatch.d.ts +6 -1
- package/dist/direct/directPatch.js +55 -8
- package/dist/direct/directSessionStore.d.ts +16 -6
- package/dist/direct/directSessionStore.js +128 -35
- package/dist/direct/directVerification.js +8 -16
- package/dist/doctor.js +65 -57
- package/dist/goal/acceptanceEngine.d.ts +1 -1
- package/dist/goal/goalProgress.js +75 -69
- package/dist/goal/goalReport.js +5 -12
- package/dist/goal/goalStatus.d.ts +2 -0
- package/dist/goal/goalStatus.js +10 -3
- package/dist/goal/goalStore.d.ts +9 -2
- package/dist/goal/goalStore.js +152 -45
- package/dist/goal/handoffExport.js +6 -6
- package/dist/goal/specKitImport.js +97 -96
- package/dist/goal/subgoalSync.js +11 -9
- package/dist/goal/worktreeManager.d.ts +2 -0
- package/dist/goal/worktreeManager.js +209 -136
- package/dist/httpServer.js +111 -32
- package/dist/logging.js +5 -3
- package/dist/policy/projectPolicy.js +5 -2
- package/dist/release/releaseGate.d.ts +1 -1
- package/dist/release/releaseGate.js +78 -25
- package/dist/runner/agentInvocation.d.ts +14 -0
- package/dist/runner/agentInvocation.js +96 -4
- package/dist/runner/changeCapture.d.ts +13 -5
- package/dist/runner/changeCapture.js +243 -61
- package/dist/runner/postTaskCleanup.js +48 -19
- package/dist/runner/processSecurity.d.ts +56 -0
- package/dist/runner/processSecurity.js +373 -0
- package/dist/runner/runTask.d.ts +2 -1
- package/dist/runner/runTask.js +162 -93
- package/dist/runner/simpleProcess.d.ts +3 -0
- package/dist/runner/simpleProcess.js +50 -36
- package/dist/{taskProgress.d.ts → runner/taskProgress.d.ts} +1 -1
- package/dist/{taskProgress.js → runner/taskProgress.js} +2 -2
- package/dist/{taskRuntime.d.ts → runner/taskRuntime.d.ts} +3 -1
- package/dist/{taskRuntime.js → runner/taskRuntime.js} +3 -2
- package/dist/runner/taskStatusStore.d.ts +11 -0
- package/dist/runner/taskStatusStore.js +35 -0
- package/dist/runner/watch.d.ts +14 -1
- package/dist/runner/watch.js +320 -49
- package/dist/security/contentRedaction.js +2 -2
- package/dist/security/discoveryTokenStore.d.ts +3 -2
- package/dist/security/discoveryTokenStore.js +17 -2
- package/dist/security/loopbackHost.d.ts +2 -0
- package/dist/security/loopbackHost.js +16 -0
- package/dist/security/pathGuard.js +32 -17
- package/dist/security/planGuard.js +2 -1
- package/dist/security/runtimeGuard.js +9 -6
- package/dist/security/secretComparison.d.ts +3 -0
- package/dist/security/secretComparison.js +11 -0
- package/dist/security/sensitiveGuard.d.ts +5 -0
- package/dist/security/sensitiveGuard.js +27 -8
- package/dist/security/toolInvocationGuard.d.ts +2 -2
- package/dist/security/toolInvocationGuard.js +1 -1
- package/dist/security/workspaceRootGuard.d.ts +8 -0
- package/dist/security/workspaceRootGuard.js +47 -0
- package/dist/smoke-test.js +27 -26
- package/dist/tools/catalog/index.d.ts +4 -0
- package/dist/tools/catalog/index.js +4 -0
- package/dist/tools/{toolCatalog.js → catalog/toolCatalog.js} +3 -12
- package/dist/tools/{toolRegistry.d.ts → catalog/toolRegistry.d.ts} +3 -3
- package/dist/tools/{toolRegistry.js → catalog/toolRegistry.js} +6 -15
- package/dist/tools/definitions/toolDefs.d.ts +18 -0
- package/dist/tools/definitions/toolDefs.js +1177 -0
- package/dist/tools/{auditSession.d.ts → diagnostics/auditSession.d.ts} +1 -1
- package/dist/tools/{auditSession.js → diagnostics/auditSession.js} +2 -2
- package/dist/tools/{auditTask.d.ts → diagnostics/auditTask.d.ts} +2 -1
- package/dist/tools/{auditTask.js → diagnostics/auditTask.js} +134 -36
- package/dist/tools/{healthCheck.d.ts → diagnostics/healthCheck.d.ts} +18 -6
- package/dist/tools/{healthCheck.js → diagnostics/healthCheck.js} +36 -8
- package/dist/tools/diagnostics/index.d.ts +6 -0
- package/dist/tools/diagnostics/index.js +6 -0
- package/dist/tools/{safeStatus.d.ts → diagnostics/safeStatus.d.ts} +3 -3
- package/dist/tools/{safeStatus.js → diagnostics/safeStatus.js} +6 -6
- package/dist/tools/{safeViews.d.ts → diagnostics/safeViews.d.ts} +12 -8
- package/dist/tools/{safeViews.js → diagnostics/safeViews.js} +23 -13
- package/dist/tools/{schemaDriftCheck.d.ts → diagnostics/schemaDriftCheck.d.ts} +1 -1
- package/dist/tools/{schemaDriftCheck.js → diagnostics/schemaDriftCheck.js} +2 -2
- package/dist/tools/{createDirectSession.js → direct/createDirectSession.js} +6 -6
- package/dist/tools/{finalizeDirectSession.d.ts → direct/finalizeDirectSession.d.ts} +1 -1
- package/dist/tools/direct/finalizeDirectSession.js +86 -0
- package/dist/tools/direct/index.d.ts +3 -0
- package/dist/tools/direct/index.js +3 -0
- package/dist/tools/{runDirectVerificationBundle.js → direct/runDirectVerificationBundle.js} +2 -2
- package/dist/tools/{discoverTools.d.ts → discovery/discoverTools.d.ts} +2 -2
- package/dist/tools/{discoverTools.js → discovery/discoverTools.js} +5 -5
- package/dist/tools/{explainTool.d.ts → discovery/explainTool.d.ts} +2 -2
- package/dist/tools/{explainTool.js → discovery/explainTool.js} +2 -2
- package/dist/tools/discovery/index.d.ts +3 -0
- package/dist/tools/discovery/index.js +3 -0
- package/dist/tools/{invokeDiscoveredTool.d.ts → discovery/invokeDiscoveredTool.d.ts} +2 -2
- package/dist/tools/{invokeDiscoveredTool.js → discovery/invokeDiscoveredTool.js} +5 -5
- package/dist/tools/dispatch/coreDispatch.js +32 -31
- package/dist/tools/dispatch/diagnosticDispatch.d.ts +3 -5
- package/dist/tools/dispatch/diagnosticDispatch.js +70 -68
- package/dist/tools/dispatch/directDispatch.js +11 -10
- package/dist/tools/dispatch/goalDispatch.js +5 -4
- package/dist/tools/dispatch/releaseDispatch.js +3 -2
- package/dist/tools/dispatch/validation.d.ts +7 -0
- package/dist/tools/dispatch/validation.js +71 -0
- package/dist/tools/{getPlan.js → goals/getPlan.js} +4 -4
- package/dist/tools/{goalSubgoalTask.d.ts → goals/goalSubgoalTask.d.ts} +1 -1
- package/dist/tools/goals/goalSubgoalTask.js +118 -0
- package/dist/tools/goals/index.d.ts +3 -0
- package/dist/tools/goals/index.js +3 -0
- package/dist/tools/{savePlan.js → goals/savePlan.js} +28 -8
- package/dist/tools/registry.d.ts +7 -11
- package/dist/tools/registry.js +17 -1178
- package/dist/tools/{checkReleaseGate.d.ts → release/checkReleaseGate.d.ts} +1 -1
- package/dist/tools/{checkReleaseGate.js → release/checkReleaseGate.js} +3 -3
- package/dist/tools/release/index.d.ts +2 -0
- package/dist/tools/release/index.js +2 -0
- package/dist/tools/{releaseMode.d.ts → release/releaseMode.d.ts} +2 -2
- package/dist/tools/{releaseMode.js → release/releaseMode.js} +46 -26
- package/dist/tools/tasks/cancelTask.d.ts +11 -0
- package/dist/tools/tasks/cancelTask.js +86 -0
- package/dist/tools/{createTask.d.ts → tasks/createTask.d.ts} +12 -4
- package/dist/tools/{createTask.js → tasks/createTask.js} +110 -34
- package/dist/tools/{diagnoseTask.d.ts → tasks/diagnoseTask.d.ts} +1 -1
- package/dist/tools/{diagnoseTask.js → tasks/diagnoseTask.js} +12 -16
- package/dist/tools/{evidencePack.js → tasks/evidencePack.js} +34 -22
- package/dist/tools/{getTaskFile.js → tasks/getTaskFile.js} +4 -4
- package/dist/tools/{getTaskStatus.d.ts → tasks/getTaskStatus.d.ts} +6 -1
- package/dist/tools/{getTaskStatus.js → tasks/getTaskStatus.js} +11 -6
- package/dist/tools/{getTaskStdoutTail.js → tasks/getTaskStdoutTail.js} +13 -11
- package/dist/tools/{getTaskSummary.js → tasks/getTaskSummary.js} +35 -36
- package/dist/tools/tasks/index.d.ts +18 -0
- package/dist/tools/tasks/index.js +18 -0
- package/dist/tools/tasks/killTask.d.ts +1 -0
- package/dist/tools/{listTasks.d.ts → tasks/listTasks.d.ts} +1 -1
- package/dist/tools/{listTasks.js → tasks/listTasks.js} +5 -4
- package/dist/tools/{reconcileTasks.d.ts → tasks/reconcileTasks.d.ts} +3 -2
- package/dist/tools/tasks/reconcileTasks.js +496 -0
- package/dist/tools/tasks/retryTask.js +60 -0
- package/dist/tools/{runTaskLoop.d.ts → tasks/runTaskLoop.d.ts} +6 -6
- package/dist/tools/{runTaskLoop.js → tasks/runTaskLoop.js} +63 -41
- package/dist/tools/tasks/runVerification.js +38 -0
- package/dist/tools/{taskLineage.js → tasks/taskLineage.js} +8 -7
- package/dist/tools/{taskOutputs.d.ts → tasks/taskOutputs.d.ts} +2 -2
- package/dist/tools/{taskOutputs.js → tasks/taskOutputs.js} +17 -16
- package/dist/tools/tasks/taskStates.d.ts +6 -0
- package/dist/tools/tasks/taskStates.js +52 -0
- package/dist/tools/{waitForTask.js → tasks/waitForTask.js} +3 -11
- package/dist/tools/{androidDoctor.js → workspace/androidDoctor.js} +16 -10
- package/dist/tools/{applyPatch.d.ts → workspace/applyPatch.d.ts} +1 -1
- package/dist/tools/workspace/applyPatch.js +53 -0
- package/dist/tools/{discardWorktree.js → workspace/discardWorktree.js} +3 -3
- package/dist/tools/workspace/index.d.ts +10 -0
- package/dist/tools/workspace/index.js +10 -0
- package/dist/tools/workspace/listAgents.d.ts +23 -0
- package/dist/tools/workspace/listAgents.js +56 -0
- package/dist/tools/{listWorkspace.js → workspace/listWorkspace.js} +3 -3
- package/dist/tools/{mergeWorktree.js → workspace/mergeWorktree.js} +3 -3
- package/dist/tools/{readWorkspaceFile.js → workspace/readWorkspaceFile.js} +8 -8
- package/dist/tools/{recommendAgentForTask.js → workspace/recommendAgentForTask.js} +3 -3
- package/dist/tools/{searchWorkspace.js → workspace/searchWorkspace.js} +5 -5
- package/dist/tools/{syncFile.d.ts → workspace/syncFile.d.ts} +1 -1
- package/dist/tools/workspace/syncFile.js +134 -0
- package/dist/utils/atomicFile.d.ts +7 -0
- package/dist/utils/atomicFile.js +67 -0
- package/dist/utils/boundedFile.d.ts +8 -0
- package/dist/utils/boundedFile.js +93 -0
- package/dist/utils/lockedJsonFile.d.ts +15 -0
- package/dist/utils/lockedJsonFile.js +224 -0
- package/dist/utils/platform.d.ts +11 -0
- package/dist/utils/platform.js +26 -0
- package/dist/utils/stableJson.d.ts +2 -0
- package/dist/utils/stableJson.js +12 -0
- package/dist/version.d.ts +3 -2
- package/dist/version.js +3 -2
- package/dist/watcherStatus.d.ts +2 -2
- package/dist/watcherStatus.js +18 -0
- package/docs/CODE_WIKI.md +808 -143
- package/docs/architecture.md +15 -55
- package/docs/assets/patchwarden-desktop-onboarding.png +0 -0
- package/docs/control-center/README.md +4 -4
- package/docs/dashboard-overview.md +4 -4
- package/docs/desktop-app.md +175 -0
- package/docs/evidence-pack-schema.md +3 -3
- package/docs/open-source-application.md +16 -11
- package/docs/release-checklist.md +1 -1
- package/docs/release-evidence.md +35 -39
- package/docs/task-safe-review-workflow.md +5 -5
- package/docs/threat-model.md +19 -1
- package/examples/config.example.json +4 -2
- package/package.json +27 -10
- package/scripts/README.md +15 -6
- package/scripts/build.js +11 -0
- package/scripts/checks/brand-check.js +3 -0
- package/scripts/checks/build-output-check.js +37 -0
- package/scripts/checks/control-center-smoke.js +102 -10
- package/scripts/checks/control-smoke.js +19 -8
- package/scripts/checks/http-mcp-smoke.js +82 -4
- package/scripts/checks/lifecycle-smoke.js +15 -12
- package/scripts/checks/mcp-manifest-check.js +1 -1
- package/scripts/checks/mcp-smoke.js +58 -4
- package/scripts/checks/package-manifest-check.js +20 -7
- package/scripts/checks/unit-tests.js +3 -5
- package/scripts/checks/watcher-supervisor-smoke.js +38 -1
- package/scripts/control/get-patchwarden-health.ps1 +1 -1
- package/scripts/control/manage-patchwarden.ps1 +69 -4
- package/scripts/control/provision-patchwarden-tunnel.ps1 +127 -0
- package/scripts/control/run-background-supervisor.ps1 +41 -0
- package/scripts/control/start-patchwarden-tunnel.ps1 +191 -33
- package/scripts/e2e/demo-runtime.mjs +153 -0
- package/{PatchWarden-Control-Tray.cmd → scripts/launchers/PatchWarden-Control-Tray.cmd} +3 -3
- package/scripts/launchers/PatchWarden-Control.cmd +6 -0
- package/{PatchWarden-Desktop.cmd → scripts/launchers/PatchWarden-Desktop.cmd} +2 -2
- package/scripts/launchers/Restart-PatchWarden-Control.cmd +6 -0
- package/{Stop-PatchWarden.cmd → scripts/launchers/Stop-PatchWarden.cmd} +2 -2
- package/scripts/lib/clean-generated-output.js +11 -0
- package/scripts/lib/file-discovery.js +12 -0
- package/scripts/release/desktop-preflight.js +211 -0
- package/scripts/release/pack-clean.js +59 -14
- package/src/assessments/agentAssessor.ts +26 -12
- package/src/assessments/assessmentDiagnostics.ts +172 -0
- package/src/assessments/assessmentStore.ts +288 -51
- package/src/assessments/securitySnapshot.ts +231 -0
- package/src/config.ts +70 -13
- package/src/control/fileManager.ts +40 -0
- package/src/control/middleware/auth.ts +22 -4
- package/src/control/middleware/static.ts +16 -3
- package/src/control/routeTable.ts +301 -0
- package/src/control/routes/audit.ts +14 -6
- package/src/control/routes/evidence.ts +1 -1
- package/src/control/routes/lineage.ts +1 -1
- package/src/control/routes/process.ts +341 -40
- package/src/control/routes/sessions.ts +88 -25
- package/src/control/routes/status.ts +134 -17
- package/src/control/routes/taskActions.ts +24 -58
- package/src/control/routes/tasks.ts +66 -58
- package/src/control/routes/workspace.ts +56 -25
- package/src/control/runtime.ts +71 -43
- package/src/control/server.ts +37 -342
- package/src/control/shared.ts +77 -11
- package/src/diagnostics/allowedTestCommandSafety.ts +12 -0
- package/src/direct/directAudit.ts +17 -9
- package/src/direct/directGuards.ts +72 -44
- package/src/direct/directPatch.ts +95 -8
- package/src/direct/directSessionStore.ts +213 -55
- package/src/direct/directVerification.ts +9 -23
- package/src/doctor.ts +76 -64
- package/src/goal/acceptanceEngine.ts +1 -1
- package/src/goal/goalProgress.ts +17 -13
- package/src/goal/goalReport.ts +5 -13
- package/src/goal/goalStatus.ts +19 -3
- package/src/goal/goalStore.ts +241 -54
- package/src/goal/handoffExport.ts +6 -6
- package/src/goal/specKitImport.ts +12 -12
- package/src/goal/subgoalSync.ts +11 -8
- package/src/goal/worktreeManager.ts +139 -22
- package/src/httpServer.ts +113 -30
- package/src/logging.ts +10 -3
- package/src/policy/projectPolicy.ts +5 -2
- package/src/release/releaseGate.ts +74 -27
- package/src/runner/agentInvocation.ts +126 -4
- package/src/runner/changeCapture.ts +291 -57
- package/src/runner/postTaskCleanup.ts +41 -17
- package/src/runner/processSecurity.ts +433 -0
- package/src/runner/runTask.ts +197 -97
- package/src/runner/simpleProcess.ts +66 -31
- package/src/{taskProgress.ts → runner/taskProgress.ts} +3 -3
- package/src/{taskRuntime.ts → runner/taskRuntime.ts} +6 -3
- package/src/runner/taskStatusStore.ts +69 -0
- package/src/runner/watch.ts +348 -52
- package/src/security/contentRedaction.ts +2 -2
- package/src/security/discoveryTokenStore.ts +18 -4
- package/src/security/loopbackHost.ts +19 -0
- package/src/security/pathGuard.ts +35 -16
- package/src/security/planGuard.ts +2 -1
- package/src/security/runtimeGuard.ts +9 -6
- package/src/security/secretComparison.ts +13 -0
- package/src/security/sensitiveGuard.ts +27 -8
- package/src/security/toolInvocationGuard.ts +2 -2
- package/src/security/workspaceRootGuard.ts +53 -0
- package/src/smoke-test.ts +27 -26
- package/src/tools/catalog/index.ts +4 -0
- package/src/tools/{toolCatalog.ts → catalog/toolCatalog.ts} +3 -12
- package/src/tools/{toolRegistry.ts → catalog/toolRegistry.ts} +7 -16
- package/src/tools/definitions/toolDefs.ts +1264 -0
- package/src/tools/{auditSession.ts → diagnostics/auditSession.ts} +2 -2
- package/src/tools/{auditTask.ts → diagnostics/auditTask.ts} +136 -39
- package/src/tools/{healthCheck.ts → diagnostics/healthCheck.ts} +37 -9
- package/src/tools/diagnostics/index.ts +6 -0
- package/src/tools/{safeStatus.ts → diagnostics/safeStatus.ts} +7 -7
- package/src/tools/{safeViews.ts → diagnostics/safeViews.ts} +27 -17
- package/src/tools/{schemaDriftCheck.ts → diagnostics/schemaDriftCheck.ts} +3 -3
- package/src/tools/{createDirectSession.ts → direct/createDirectSession.ts} +6 -6
- package/src/tools/{finalizeDirectSession.ts → direct/finalizeDirectSession.ts} +7 -5
- package/src/tools/direct/index.ts +3 -0
- package/src/tools/{runDirectVerificationBundle.ts → direct/runDirectVerificationBundle.ts} +2 -2
- package/src/tools/{discoverTools.ts → discovery/discoverTools.ts} +6 -6
- package/src/tools/{explainTool.ts → discovery/explainTool.ts} +3 -3
- package/src/tools/discovery/index.ts +3 -0
- package/src/tools/{invokeDiscoveredTool.ts → discovery/invokeDiscoveredTool.ts} +7 -7
- package/src/tools/dispatch/coreDispatch.ts +36 -31
- package/src/tools/dispatch/diagnosticDispatch.ts +26 -21
- package/src/tools/dispatch/directDispatch.ts +11 -10
- package/src/tools/dispatch/goalDispatch.ts +5 -4
- package/src/tools/dispatch/releaseDispatch.ts +3 -2
- package/src/tools/dispatch/validation.ts +78 -0
- package/src/tools/{getPlan.ts → goals/getPlan.ts} +4 -4
- package/src/tools/{goalSubgoalTask.ts → goals/goalSubgoalTask.ts} +41 -26
- package/src/tools/goals/index.ts +3 -0
- package/src/tools/{savePlan.ts → goals/savePlan.ts} +38 -8
- package/src/tools/registry.ts +17 -1261
- package/src/tools/{checkReleaseGate.ts → release/checkReleaseGate.ts} +3 -3
- package/src/tools/release/index.ts +2 -0
- package/src/tools/{releaseMode.ts → release/releaseMode.ts} +42 -24
- package/src/tools/tasks/cancelTask.ts +110 -0
- package/src/tools/{createTask.ts → tasks/createTask.ts} +161 -33
- package/src/tools/{diagnoseTask.ts → tasks/diagnoseTask.ts} +12 -16
- package/src/tools/{evidencePack.ts → tasks/evidencePack.ts} +36 -22
- package/src/tools/{getTaskFile.ts → tasks/getTaskFile.ts} +4 -4
- package/src/tools/{getTaskStatus.ts → tasks/getTaskStatus.ts} +13 -6
- package/src/tools/{getTaskStdoutTail.ts → tasks/getTaskStdoutTail.ts} +13 -11
- package/src/tools/{getTaskSummary.ts → tasks/getTaskSummary.ts} +46 -44
- package/src/tools/tasks/index.ts +18 -0
- package/src/tools/{listTasks.ts → tasks/listTasks.ts} +6 -5
- package/src/tools/{reconcileTasks.ts → tasks/reconcileTasks.ts} +228 -77
- package/src/tools/tasks/retryTask.ts +69 -0
- package/src/tools/{runTaskLoop.ts → tasks/runTaskLoop.ts} +73 -46
- package/src/tools/{runVerification.ts → tasks/runVerification.ts} +6 -3
- package/src/tools/{taskLineage.ts → tasks/taskLineage.ts} +8 -7
- package/src/tools/{taskOutputs.ts → tasks/taskOutputs.ts} +27 -20
- package/src/tools/tasks/taskStates.ts +54 -0
- package/src/tools/{waitForTask.ts → tasks/waitForTask.ts} +3 -12
- package/src/tools/{androidDoctor.ts → workspace/androidDoctor.ts} +15 -10
- package/src/tools/{applyPatch.ts → workspace/applyPatch.ts} +38 -16
- package/src/tools/{discardWorktree.ts → workspace/discardWorktree.ts} +3 -3
- package/src/tools/workspace/index.ts +10 -0
- package/src/tools/workspace/listAgents.ts +75 -0
- package/src/tools/{listWorkspace.ts → workspace/listWorkspace.ts} +3 -3
- package/src/tools/{mergeWorktree.ts → workspace/mergeWorktree.ts} +3 -3
- package/src/tools/{readWorkspaceFile.ts → workspace/readWorkspaceFile.ts} +8 -8
- package/src/tools/{recommendAgentForTask.ts → workspace/recommendAgentForTask.ts} +3 -3
- package/src/tools/{searchWorkspace.ts → workspace/searchWorkspace.ts} +5 -5
- package/src/tools/workspace/syncFile.ts +292 -0
- package/src/utils/atomicFile.ts +74 -0
- package/src/utils/boundedFile.ts +116 -0
- package/src/utils/lockedJsonFile.ts +251 -0
- package/src/utils/platform.ts +31 -0
- package/src/utils/stableJson.ts +12 -0
- package/src/version.ts +3 -2
- package/src/watcherStatus.ts +19 -1
- package/ui/desktop-bootstrap.js +11 -0
- package/ui/desktop-bridge.js +36 -0
- package/ui/desktop.css +160 -0
- package/ui/getting-started.js +93 -0
- package/ui/i18n.js +484 -0
- package/ui/log-parser.js +30 -0
- package/ui/pages/audit.html +12 -0
- package/ui/pages/dashboard.html +94 -147
- package/ui/pages/direct-sessions.html +123 -26
- package/ui/pages/getting-started.html +43 -0
- package/ui/pages/logs.html +134 -22
- package/ui/pages/settings.html +101 -0
- package/ui/pages/task-detail.html +12 -0
- package/ui/pages/tasks.html +54 -8
- package/ui/pages/workspace.html +38 -1
- package/ui/settings.js +254 -0
- package/PatchWarden-Control.cmd +0 -6
- package/Restart-PatchWarden-Control.cmd +0 -6
- package/dist/test/unit/acceptance-engine.test.d.ts +0 -1
- package/dist/test/unit/acceptance-engine.test.js +0 -228
- package/dist/test/unit/agent-router.test.d.ts +0 -1
- package/dist/test/unit/agent-router.test.js +0 -287
- package/dist/test/unit/android-doctor.test.d.ts +0 -1
- package/dist/test/unit/android-doctor.test.js +0 -118
- package/dist/test/unit/apply-patch.test.d.ts +0 -1
- package/dist/test/unit/apply-patch.test.js +0 -225
- package/dist/test/unit/audit-checks.test.d.ts +0 -1
- package/dist/test/unit/audit-checks.test.js +0 -350
- package/dist/test/unit/chinese-path.test.d.ts +0 -1
- package/dist/test/unit/chinese-path.test.js +0 -91
- package/dist/test/unit/command-guard.test.d.ts +0 -1
- package/dist/test/unit/command-guard.test.js +0 -160
- package/dist/test/unit/create-task.test.d.ts +0 -1
- package/dist/test/unit/create-task.test.js +0 -197
- package/dist/test/unit/diagnose-task.test.d.ts +0 -1
- package/dist/test/unit/diagnose-task.test.js +0 -457
- package/dist/test/unit/direct-guards.test.d.ts +0 -1
- package/dist/test/unit/direct-guards.test.js +0 -328
- package/dist/test/unit/discovery-token-store.test.d.ts +0 -1
- package/dist/test/unit/discovery-token-store.test.js +0 -139
- package/dist/test/unit/evidence-pack.test.d.ts +0 -1
- package/dist/test/unit/evidence-pack.test.js +0 -224
- package/dist/test/unit/get-task-status.test.d.ts +0 -1
- package/dist/test/unit/get-task-status.test.js +0 -174
- package/dist/test/unit/get-task-summary.test.d.ts +0 -1
- package/dist/test/unit/get-task-summary.test.js +0 -146
- package/dist/test/unit/goal-graph.test.d.ts +0 -1
- package/dist/test/unit/goal-graph.test.js +0 -298
- package/dist/test/unit/goal-progress.test.d.ts +0 -1
- package/dist/test/unit/goal-progress.test.js +0 -381
- package/dist/test/unit/goal-report.test.d.ts +0 -1
- package/dist/test/unit/goal-report.test.js +0 -159
- package/dist/test/unit/goal-status.test.d.ts +0 -1
- package/dist/test/unit/goal-status.test.js +0 -215
- package/dist/test/unit/goal-store.test.d.ts +0 -1
- package/dist/test/unit/goal-store.test.js +0 -253
- package/dist/test/unit/goal-subgoal-task.test.d.ts +0 -1
- package/dist/test/unit/goal-subgoal-task.test.js +0 -55
- package/dist/test/unit/goal-tools-registry.test.d.ts +0 -1
- package/dist/test/unit/goal-tools-registry.test.js +0 -192
- package/dist/test/unit/handoff-export.test.d.ts +0 -1
- package/dist/test/unit/handoff-export.test.js +0 -263
- package/dist/test/unit/invoke-discovered-tool.test.d.ts +0 -1
- package/dist/test/unit/invoke-discovered-tool.test.js +0 -167
- package/dist/test/unit/logging.test.d.ts +0 -1
- package/dist/test/unit/logging.test.js +0 -397
- package/dist/test/unit/path-guard.test.d.ts +0 -1
- package/dist/test/unit/path-guard.test.js +0 -133
- package/dist/test/unit/post-task-cleanup.test.d.ts +0 -1
- package/dist/test/unit/post-task-cleanup.test.js +0 -48
- package/dist/test/unit/project-policy-release-mode.test.d.ts +0 -1
- package/dist/test/unit/project-policy-release-mode.test.js +0 -125
- package/dist/test/unit/reconcile-tasks.test.d.ts +0 -1
- package/dist/test/unit/reconcile-tasks.test.js +0 -456
- package/dist/test/unit/release-gate.test.d.ts +0 -1
- package/dist/test/unit/release-gate.test.js +0 -242
- package/dist/test/unit/run-task-loop.test.d.ts +0 -1
- package/dist/test/unit/run-task-loop.test.js +0 -380
- package/dist/test/unit/safe-status.test.d.ts +0 -1
- package/dist/test/unit/safe-status.test.js +0 -165
- package/dist/test/unit/safe-views.test.d.ts +0 -1
- package/dist/test/unit/safe-views.test.js +0 -171
- package/dist/test/unit/schema-drift-check.test.d.ts +0 -1
- package/dist/test/unit/schema-drift-check.test.js +0 -176
- package/dist/test/unit/sensitive-guard.test.d.ts +0 -1
- package/dist/test/unit/sensitive-guard.test.js +0 -104
- package/dist/test/unit/spec-kit-import.test.d.ts +0 -1
- package/dist/test/unit/spec-kit-import.test.js +0 -341
- package/dist/test/unit/subgoal-sync.test.d.ts +0 -1
- package/dist/test/unit/subgoal-sync.test.js +0 -183
- package/dist/test/unit/sync-file.test.d.ts +0 -1
- package/dist/test/unit/sync-file.test.js +0 -154
- package/dist/test/unit/tool-invocation-guard.test.d.ts +0 -1
- package/dist/test/unit/tool-invocation-guard.test.js +0 -432
- package/dist/test/unit/tool-usage-stats.test.d.ts +0 -1
- package/dist/test/unit/tool-usage-stats.test.js +0 -300
- package/dist/test/unit/toolSearch.test.d.ts +0 -1
- package/dist/test/unit/toolSearch.test.js +0 -571
- package/dist/test/unit/wait-for-task.test.d.ts +0 -1
- package/dist/test/unit/wait-for-task.test.js +0 -144
- package/dist/test/unit/watcher-status.test.d.ts +0 -1
- package/dist/test/unit/watcher-status.test.js +0 -169
- package/dist/test/unit/worktree-manager.test.d.ts +0 -1
- package/dist/test/unit/worktree-manager.test.js +0 -176
- package/dist/tools/applyPatch.js +0 -41
- package/dist/tools/cancelTask.d.ts +0 -30
- package/dist/tools/cancelTask.js +0 -64
- package/dist/tools/finalizeDirectSession.js +0 -84
- package/dist/tools/goalSubgoalTask.js +0 -110
- package/dist/tools/killTask.d.ts +0 -15
- package/dist/tools/listAgents.d.ts +0 -12
- package/dist/tools/listAgents.js +0 -42
- package/dist/tools/reconcileTasks.js +0 -352
- package/dist/tools/retryTask.js +0 -45
- package/dist/tools/runVerification.js +0 -36
- package/dist/tools/syncFile.js +0 -65
- package/docs/control-center/control-center-daily-driver.md +0 -211
- package/docs/control-center/control-center-mvp.md +0 -205
- package/docs/control-center/control-center-phase2.md +0 -159
- package/docs/execution-plan-2026-07-09.md +0 -315
- package/docs/release-v0.6.0.md +0 -71
- package/docs/release-v0.6.1.md +0 -75
- package/docs/release-v0.6.4.md +0 -45
- package/docs/roadmap-execution-and-acceptance.md +0 -365
- package/src/test/unit/acceptance-engine.test.ts +0 -261
- package/src/test/unit/agent-router.test.ts +0 -342
- package/src/test/unit/android-doctor.test.ts +0 -158
- package/src/test/unit/apply-patch.test.ts +0 -293
- package/src/test/unit/audit-checks.test.ts +0 -567
- package/src/test/unit/chinese-path.test.ts +0 -106
- package/src/test/unit/command-guard.test.ts +0 -221
- package/src/test/unit/create-task.test.ts +0 -255
- package/src/test/unit/diagnose-task.test.ts +0 -544
- package/src/test/unit/direct-guards.test.ts +0 -467
- package/src/test/unit/discovery-token-store.test.ts +0 -181
- package/src/test/unit/evidence-pack.test.ts +0 -251
- package/src/test/unit/get-task-status.test.ts +0 -203
- package/src/test/unit/get-task-summary.test.ts +0 -173
- package/src/test/unit/goal-graph.test.ts +0 -347
- package/src/test/unit/goal-progress.test.ts +0 -538
- package/src/test/unit/goal-report.test.ts +0 -189
- package/src/test/unit/goal-status.test.ts +0 -270
- package/src/test/unit/goal-store.test.ts +0 -318
- package/src/test/unit/goal-subgoal-task.test.ts +0 -72
- package/src/test/unit/goal-tools-registry.test.ts +0 -245
- package/src/test/unit/handoff-export.test.ts +0 -295
- package/src/test/unit/invoke-discovered-tool.test.ts +0 -216
- package/src/test/unit/logging.test.ts +0 -497
- package/src/test/unit/path-guard.test.ts +0 -180
- package/src/test/unit/post-task-cleanup.test.ts +0 -53
- package/src/test/unit/project-policy-release-mode.test.ts +0 -156
- package/src/test/unit/reconcile-tasks.test.ts +0 -551
- package/src/test/unit/release-gate.test.ts +0 -314
- package/src/test/unit/run-task-loop.test.ts +0 -425
- package/src/test/unit/safe-status.test.ts +0 -187
- package/src/test/unit/safe-views.test.ts +0 -184
- package/src/test/unit/schema-drift-check.test.ts +0 -260
- package/src/test/unit/sensitive-guard.test.ts +0 -124
- package/src/test/unit/spec-kit-import.test.ts +0 -429
- package/src/test/unit/subgoal-sync.test.ts +0 -236
- package/src/test/unit/sync-file.test.ts +0 -231
- package/src/test/unit/tool-invocation-guard.test.ts +0 -542
- package/src/test/unit/tool-usage-stats.test.ts +0 -384
- package/src/test/unit/toolSearch.test.ts +0 -756
- package/src/test/unit/wait-for-task.test.ts +0 -176
- package/src/test/unit/watcher-status.test.ts +0 -190
- package/src/test/unit/worktree-manager.test.ts +0 -247
- package/src/tools/cancelTask.ts +0 -70
- package/src/tools/listAgents.ts +0 -54
- package/src/tools/retryTask.ts +0 -53
- package/src/tools/syncFile.ts +0 -122
- /package/dist/tools/{toolCatalog.d.ts → catalog/toolCatalog.d.ts} +0 -0
- /package/dist/tools/{toolSearch.d.ts → catalog/toolSearch.d.ts} +0 -0
- /package/dist/tools/{toolSearch.js → catalog/toolSearch.js} +0 -0
- /package/dist/tools/{toolUsageStats.d.ts → catalog/toolUsageStats.d.ts} +0 -0
- /package/dist/tools/{toolUsageStats.js → catalog/toolUsageStats.js} +0 -0
- /package/dist/tools/{createDirectSession.d.ts → direct/createDirectSession.d.ts} +0 -0
- /package/dist/tools/{runDirectVerificationBundle.d.ts → direct/runDirectVerificationBundle.d.ts} +0 -0
- /package/dist/tools/{getPlan.d.ts → goals/getPlan.d.ts} +0 -0
- /package/dist/tools/{savePlan.d.ts → goals/savePlan.d.ts} +0 -0
- /package/dist/tools/{evidencePack.d.ts → tasks/evidencePack.d.ts} +0 -0
- /package/dist/tools/{getTaskFile.d.ts → tasks/getTaskFile.d.ts} +0 -0
- /package/dist/tools/{getTaskProgress.d.ts → tasks/getTaskProgress.d.ts} +0 -0
- /package/dist/tools/{getTaskProgress.js → tasks/getTaskProgress.js} +0 -0
- /package/dist/tools/{getTaskStdoutTail.d.ts → tasks/getTaskStdoutTail.d.ts} +0 -0
- /package/dist/tools/{getTaskSummary.d.ts → tasks/getTaskSummary.d.ts} +0 -0
- /package/dist/tools/{killTask.js → tasks/killTask.js} +0 -0
- /package/dist/tools/{retryTask.d.ts → tasks/retryTask.d.ts} +0 -0
- /package/dist/tools/{runVerification.d.ts → tasks/runVerification.d.ts} +0 -0
- /package/dist/tools/{taskLineage.d.ts → tasks/taskLineage.d.ts} +0 -0
- /package/dist/tools/{waitForTask.d.ts → tasks/waitForTask.d.ts} +0 -0
- /package/dist/tools/{androidDoctor.d.ts → workspace/androidDoctor.d.ts} +0 -0
- /package/dist/tools/{discardWorktree.d.ts → workspace/discardWorktree.d.ts} +0 -0
- /package/dist/tools/{listWorkspace.d.ts → workspace/listWorkspace.d.ts} +0 -0
- /package/dist/tools/{mergeWorktree.d.ts → workspace/mergeWorktree.d.ts} +0 -0
- /package/dist/tools/{readWorkspaceFile.d.ts → workspace/readWorkspaceFile.d.ts} +0 -0
- /package/dist/tools/{recommendAgentForTask.d.ts → workspace/recommendAgentForTask.d.ts} +0 -0
- /package/dist/tools/{searchWorkspace.d.ts → workspace/searchWorkspace.d.ts} +0 -0
- /package/src/tools/{toolSearch.ts → catalog/toolSearch.ts} +0 -0
- /package/src/tools/{toolUsageStats.ts → catalog/toolUsageStats.ts} +0 -0
- /package/src/tools/{getTaskProgress.ts → tasks/getTaskProgress.ts} +0 -0
- /package/src/tools/{killTask.ts → tasks/killTask.ts} +0 -0
package/PatchWarden.cmd
CHANGED
|
@@ -3,6 +3,37 @@ setlocal EnableExtensions
|
|
|
3
3
|
chcp 65001 >nul
|
|
4
4
|
cd /d "%~dp0"
|
|
5
5
|
|
|
6
|
+
set "LAUNCHERS_DIR=%~dp0scripts\launchers"
|
|
7
|
+
set "PATCHWARDEN_COMMAND=%~1"
|
|
8
|
+
|
|
9
|
+
if /i "%PATCHWARDEN_COMMAND%"=="control" goto dispatch_control
|
|
10
|
+
if /i "%PATCHWARDEN_COMMAND%"=="desktop" goto dispatch_desktop
|
|
11
|
+
if /i "%PATCHWARDEN_COMMAND%"=="tray" goto dispatch_tray
|
|
12
|
+
if /i "%PATCHWARDEN_COMMAND%"=="stop" goto dispatch_stop
|
|
13
|
+
if /i "%PATCHWARDEN_COMMAND%"=="restart-control" goto dispatch_restart_control
|
|
14
|
+
goto default_behavior
|
|
15
|
+
|
|
16
|
+
:dispatch_control
|
|
17
|
+
call "%LAUNCHERS_DIR%\PatchWarden-Control.cmd" %2 %3 %4 %5 %6 %7 %8 %9
|
|
18
|
+
exit /b %ERRORLEVEL%
|
|
19
|
+
|
|
20
|
+
:dispatch_desktop
|
|
21
|
+
call "%LAUNCHERS_DIR%\PatchWarden-Desktop.cmd" %2 %3 %4 %5 %6 %7 %8 %9
|
|
22
|
+
exit /b %ERRORLEVEL%
|
|
23
|
+
|
|
24
|
+
:dispatch_tray
|
|
25
|
+
call "%LAUNCHERS_DIR%\PatchWarden-Control-Tray.cmd" %2 %3 %4 %5 %6 %7 %8 %9
|
|
26
|
+
exit /b %ERRORLEVEL%
|
|
27
|
+
|
|
28
|
+
:dispatch_stop
|
|
29
|
+
call "%LAUNCHERS_DIR%\Stop-PatchWarden.cmd" %2 %3 %4 %5 %6 %7 %8 %9
|
|
30
|
+
exit /b %ERRORLEVEL%
|
|
31
|
+
|
|
32
|
+
:dispatch_restart_control
|
|
33
|
+
call "%LAUNCHERS_DIR%\Restart-PatchWarden-Control.cmd" %2 %3 %4 %5 %6 %7 %8 %9
|
|
34
|
+
exit /b %ERRORLEVEL%
|
|
35
|
+
|
|
36
|
+
:default_behavior
|
|
6
37
|
set "DEFAULT_PROXY=http://127.0.0.1:7892"
|
|
7
38
|
|
|
8
39
|
if not defined PATCHWARDEN_PROXY_URL (
|
|
@@ -20,8 +51,7 @@ set "HTTPS_PROXY=%PATCHWARDEN_PROXY_URL%"
|
|
|
20
51
|
set "ALL_PROXY=%PATCHWARDEN_PROXY_URL%"
|
|
21
52
|
set "NO_PROXY=localhost,127.0.0.1,::1"
|
|
22
53
|
|
|
23
|
-
set "
|
|
24
|
-
set "MANAGER=%SCRIPTS_DIR%\manage-patchwarden.ps1"
|
|
54
|
+
set "MANAGER=%~dp0scripts\control\manage-patchwarden.ps1"
|
|
25
55
|
|
|
26
56
|
if not exist "%MANAGER%" (
|
|
27
57
|
echo [error] manage-patchwarden.ps1 not found:
|
package/README.en.md
CHANGED
|
@@ -8,9 +8,7 @@
|
|
|
8
8
|
[](https://nodejs.org/)
|
|
9
9
|
[](LICENSE)
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
[CHANGELOG](CHANGELOG.md), [migration guide](docs/migration-from-safe-bifrost.md), and
|
|
13
|
-
[release checklist](docs/release-checklist.md). Verify GitHub Release / npm publication separately before release.
|
|
11
|
+
**Let an MCP client such as ChatGPT or Codex plan and review the work while a local coding agent executes inside explicit safety boundaries and leaves auditable evidence.**
|
|
14
12
|
|
|
15
13
|
PatchWarden is a local-first MCP safety and verification layer for AI coding
|
|
16
14
|
agents, with workspace confinement, command allowlists, scope-violation
|
|
@@ -21,7 +19,27 @@ PatchWarden stores that plan as a workspace-scoped task, lets a preconfigured
|
|
|
21
19
|
local agent execute it, and returns results, diffs, artifact manifests, and
|
|
22
20
|
independent verification evidence.
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
[Download Windows installer v1.6.2](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.2/PatchWarden-Setup-1.6.2-x64.exe)
|
|
23
|
+
· [Portable ZIP](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.2/PatchWarden-Portable-1.6.2-x64.zip)
|
|
24
|
+
· [Checksums](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.2/PatchWarden-Desktop-SHA256SUMS.txt)
|
|
25
|
+
· [Three-minute quick start](#three-minute-quick-start)
|
|
26
|
+
· [Discussions](https://github.com/jiezeng2004-design/PatchWarden/discussions)
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
<sub>Real PatchWarden Desktop first-run UI from a privacy-safe smoke run; no real workspace, account, or credential data is shown.</sub>
|
|
31
|
+
|
|
32
|
+
Current source version and Windows Release: **v1.6.2**. npm `latest` is
|
|
33
|
+
published separately by the maintainer; use the npm badge above or query the
|
|
34
|
+
registry for its current value. Use the installer above for the first Windows experience. See the
|
|
35
|
+
[CHANGELOG](CHANGELOG.md), [migration guide](docs/migration-from-safe-bifrost.md), and
|
|
36
|
+
[release checklist](docs/release-checklist.md).
|
|
37
|
+
|
|
38
|
+
> [!NOTE]
|
|
39
|
+
> The desktop installer is currently available for Windows x64 only. macOS,
|
|
40
|
+
> Linux, and users who are not installing Desktop yet can continue using the
|
|
41
|
+
> existing stable npm package and its built-in local Dashboard. This change
|
|
42
|
+
> does not run `npm publish` automatically.
|
|
25
43
|
|
|
26
44
|
> [!IMPORTANT]
|
|
27
45
|
> PatchWarden is not a general-purpose remote shell. MCP clients cannot run
|
|
@@ -36,7 +54,7 @@ independent verification evidence.
|
|
|
36
54
|
- [Evidence example](#evidence-example)
|
|
37
55
|
- [Runtime architecture](#runtime-architecture)
|
|
38
56
|
- [Requirements](#requirements)
|
|
39
|
-
- [
|
|
57
|
+
- [Three-minute quick start](#three-minute-quick-start)
|
|
40
58
|
- [Complete configuration guide](#complete-configuration-guide)
|
|
41
59
|
- [Connect OpenCode](#connect-opencode)
|
|
42
60
|
- [Connect Codex](#connect-codex)
|
|
@@ -61,12 +79,13 @@ PatchWarden uses a narrower, auditable task channel:
|
|
|
61
79
|
- Every task must specify a `repo_path` inside `workspaceRoot`.
|
|
62
80
|
- Agent launch commands come from local configuration, not model input.
|
|
63
81
|
- Verification commands must exactly match `allowedTestCommands`.
|
|
64
|
-
- Every completed task records structured results, a
|
|
82
|
+
- Every completed task records structured results, a bounded and redacted diff, file
|
|
65
83
|
statistics, and independent verification output.
|
|
66
84
|
- Changes outside the requested repository cause a scope violation instead of
|
|
67
85
|
being silently accepted.
|
|
68
|
-
-
|
|
69
|
-
credential stores
|
|
86
|
+
- `.patchwarden/` is not a sensitive-path exemption. Names such as `.env`
|
|
87
|
+
files, tokens, SSH keys, cookies, and credential stores remain blocked at
|
|
88
|
+
every directory depth.
|
|
70
89
|
|
|
71
90
|
Good use cases:
|
|
72
91
|
|
|
@@ -110,7 +129,7 @@ A completed task writes bounded, reviewable artifacts under
|
|
|
110
129
|
- `result.json` - final status, verification status, changed-file groups, and warnings.
|
|
111
130
|
- `artifact_manifest.json` - generated artifacts with size, type, and SHA-256.
|
|
112
131
|
- `verify.json` - exact verification commands and exit codes.
|
|
113
|
-
- `diff.patch` -
|
|
132
|
+
- `diff.patch` - up to 20 MiB of redacted source diff when Git evidence is available; truncation is explicit.
|
|
114
133
|
- `rollback_scope_violation_plan.md` - review plan when a task changes files outside `repo_path`.
|
|
115
134
|
|
|
116
135
|
Example compact evidence:
|
|
@@ -218,9 +237,36 @@ If `where.exe codex` only returns the Codex Desktop executable under
|
|
|
218
237
|
WindowsApps, it may not be a callable Codex CLI. Install or point to the real
|
|
219
238
|
CLI, or configure OpenCode as the execution agent.
|
|
220
239
|
|
|
221
|
-
##
|
|
240
|
+
## Three-minute quick start
|
|
241
|
+
|
|
242
|
+
If Node.js 18+ and at least one local coding agent are already installed, this
|
|
243
|
+
Windows path is designed to reach its first read-only health check in about
|
|
244
|
+
three minutes. A ChatGPT Tunnel is not required for this first run.
|
|
245
|
+
|
|
246
|
+
### Option A: Windows installer (recommended for a first run)
|
|
247
|
+
|
|
248
|
+
1. Download the [Windows installer v1.6.2](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.2/PatchWarden-Setup-1.6.2-x64.exe)
|
|
249
|
+
and its [SHA256 checksum file](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.2/PatchWarden-Desktop-SHA256SUMS.txt).
|
|
250
|
+
2. Verify the installer in PowerShell:
|
|
251
|
+
|
|
252
|
+
```powershell
|
|
253
|
+
Get-FileHash .\PatchWarden-Setup-1.6.2-x64.exe -Algorithm SHA256
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Always use the checksum file from the same Release. The installer is not
|
|
257
|
+
code-signed yet, so Windows SmartScreen may show an unknown-publisher warning.
|
|
258
|
+
|
|
259
|
+
3. Install and open PatchWarden Desktop, then choose a dedicated workspace that
|
|
260
|
+
contains only your projects.
|
|
261
|
+
4. Select **Local MCP** on the first screen, review the detected agent, and let
|
|
262
|
+
the read-only health check finish.
|
|
222
263
|
|
|
223
|
-
|
|
264
|
+
Success means the onboarding flow reaches the read-only console, shows the
|
|
265
|
+
selected workspace, and completes the agent/runtime checks. Share a successful
|
|
266
|
+
install or a blocked step in [Discussions](https://github.com/jiezeng2004-design/PatchWarden/discussions),
|
|
267
|
+
including your OS, Node.js version, agent, and the step where you stopped.
|
|
268
|
+
|
|
269
|
+
### Option B: run from source (developer workflow)
|
|
224
270
|
|
|
225
271
|
Source mode is the easiest way to use the Watcher, Windows launchers, and
|
|
226
272
|
diagnostic scripts together.
|
|
@@ -257,7 +303,7 @@ npm.cmd run watch
|
|
|
257
303
|
Keep this window open, then configure OpenCode, Codex, or ChatGPT as described
|
|
258
304
|
below.
|
|
259
305
|
|
|
260
|
-
### Option
|
|
306
|
+
### Option C: use the npm package
|
|
261
307
|
|
|
262
308
|
The npm package is convenient for launching a pinned MCP server. Task
|
|
263
309
|
execution still requires a separate Watcher.
|
|
@@ -300,11 +346,13 @@ Recommended Windows example:
|
|
|
300
346
|
"agents": {
|
|
301
347
|
"opencode": {
|
|
302
348
|
"command": "opencode",
|
|
303
|
-
"args": ["run", "{prompt}"]
|
|
349
|
+
"args": ["run", "{prompt}"],
|
|
350
|
+
"envAllowlist": []
|
|
304
351
|
},
|
|
305
352
|
"codex": {
|
|
306
353
|
"command": "codex",
|
|
307
|
-
"args": ["exec", "--cd", "{repo}", "{prompt}"]
|
|
354
|
+
"args": ["exec", "--cd", "{repo}", "{prompt}"],
|
|
355
|
+
"envAllowlist": []
|
|
308
356
|
}
|
|
309
357
|
},
|
|
310
358
|
"allowedTestCommands": [
|
|
@@ -333,6 +381,7 @@ Configuration fields:
|
|
|
333
381
|
| `tasksDir` | Yes | Task and result directory, normally `.patchwarden/tasks`. |
|
|
334
382
|
| `toolProfile` | No | `full`, `chatgpt_core`, `chatgpt_direct`, or `chatgpt_search`; use `full` for local clients and `chatgpt_search` for compact discovery-driven clients. |
|
|
335
383
|
| `agents` | Yes | Execution-agent allowlist; supports `{repo}` and `{prompt}` placeholders. |
|
|
384
|
+
| `agents.<name>.envAllowlist` | No | Provider environment variable names explicitly forwarded to that agent; none are inherited by default. Tunnel and HTTP owner credentials are always blocked. |
|
|
336
385
|
| `allowedTestCommands` | Yes | Exact allowlist for independent verification commands. |
|
|
337
386
|
| `repoAllowedTestCommands` | No | Extra exact commands keyed by workspace-relative repository path; wildcards are unsupported. |
|
|
338
387
|
| `maxReadFileBytes` | Yes | Maximum bytes returned by one MCP file read. |
|
|
@@ -349,12 +398,17 @@ Important configuration rules:
|
|
|
349
398
|
- If you use backslashes, escape them as `D:\\path\\to\\project`.
|
|
350
399
|
- Do not set `workspaceRoot` to a drive root, home directory, Desktop,
|
|
351
400
|
Downloads, or Documents.
|
|
401
|
+
- Configuration loading fails closed when `workspaceRoot` is missing,
|
|
402
|
+
inaccessible, not a directory, or one of those unsafe broad roots.
|
|
352
403
|
- `plansDir` and `tasksDir` are resolved relative to `workspaceRoot`.
|
|
353
404
|
- `repo_path` must stay inside `workspaceRoot` and cannot escape with `..`.
|
|
354
405
|
- `allowedTestCommands` uses exact matching; similar commands are not
|
|
355
406
|
automatically authorized.
|
|
356
407
|
- Repository-specific commands come only from trusted local configuration;
|
|
357
408
|
a target repository cannot authorize itself through `package.json`.
|
|
409
|
+
- Every execution agent must be explicitly registered. Provider credentials or
|
|
410
|
+
proxy variables are forwarded only when their names appear in that agent's
|
|
411
|
+
`envAllowlist`; owner credentials cannot be allow-listed.
|
|
358
412
|
- Configuration may contain private paths and should not be committed.
|
|
359
413
|
|
|
360
414
|
Set the configuration path:
|
|
@@ -463,11 +517,26 @@ configured under `agents` is available.
|
|
|
463
517
|
|
|
464
518
|
## Connect ChatGPT
|
|
465
519
|
|
|
520
|
+
> The current ChatGPT terms are **developer-mode app / Plugins**. Older docs and UI builds called this a Connector.
|
|
521
|
+
|
|
522
|
+
### Eight-step desktop setup
|
|
523
|
+
|
|
524
|
+
1. Confirm that the OpenAI Platform account has Tunnel access and enable developer mode in the target ChatGPT workspace.
|
|
525
|
+
2. Open [Platform Tunnel settings](https://platform.openai.com/settings/organization/tunnels), create a Tunnel, and associate the target ChatGPT workspace.
|
|
526
|
+
3. Start PatchWarden Desktop and detect or choose an existing `tunnel-client.exe` under **Settings → MCP and Tunnel**. The app never downloads or executes new software automatically.
|
|
527
|
+
4. Enter the Core Tunnel ID and the dedicated Tunnel runtime API key. This credential is used as `CONTROL_PLANE_API_KEY`; it is **not** the `OPENAI_API_KEY` used by ordinary applications.
|
|
528
|
+
5. Select environment proxy, no proxy, or a credential-free HTTP/HTTPS/SOCKS5 (Mixed) proxy, then confirm that its port is reachable.
|
|
529
|
+
6. Choose **Configure and verify Core**. Desktop initializes the `patchwarden` profile, runs `tunnel-client doctor --explain --json`, and saves the credential with Windows DPAPI only after validation succeeds; then start Core.
|
|
530
|
+
7. On **Getting Started**, confirm Tunnel ready and Watcher healthy, and verify that `chatgpt_core` exposes the fixed 26-tool catalog. Direct is optional; when disabled, Start All starts Core and reports Direct as skipped.
|
|
531
|
+
8. In ChatGPT **Settings → Plugins**, create a developer-mode app and choose the Tunnel. Reconnect it, open a new chat, and call `health_check`.
|
|
532
|
+
|
|
533
|
+
The first-run wizard also offers **Local MCP**. That route configures the safe workspace and a local MCP client, and can skip the Platform/ChatGPT Tunnel portions of steps 1, 2, 4, 5, 7, and 8.
|
|
534
|
+
|
|
466
535
|
Recommended Windows path:
|
|
467
536
|
|
|
468
537
|
```text
|
|
469
538
|
ChatGPT Web
|
|
470
|
-
→ ChatGPT Connector
|
|
539
|
+
→ ChatGPT developer-mode app / Plugins (formerly Connector)
|
|
471
540
|
→ OpenAI Secure MCP Tunnel
|
|
472
541
|
→ PatchWarden stdio MCP
|
|
473
542
|
→ Watcher
|
|
@@ -512,7 +581,7 @@ Runtime status is stored under:
|
|
|
512
581
|
This directory contains PIDs, health state, and redacted diagnostics. It must
|
|
513
582
|
not contain the API key or Tunnel ID.
|
|
514
583
|
|
|
515
|
-
When creating the ChatGPT
|
|
584
|
+
When creating the ChatGPT developer-mode app in Plugins:
|
|
516
585
|
|
|
517
586
|
- Select the tunnel **Channel**.
|
|
518
587
|
- Choose **None** for authentication unless you implemented OAuth.
|
|
@@ -619,7 +688,7 @@ country list.
|
|
|
619
688
|
Use this sequence:
|
|
620
689
|
|
|
621
690
|
1. `health_check` — verify version, workspace, Watcher, and tool catalog.
|
|
622
|
-
2. `list_agents` — confirm the local
|
|
691
|
+
2. `list_agents` — confirm the local agent executable is available. This read-only check does not verify provider balance, login state, or model permissions; `provider_status` is `not_checked` by default.
|
|
623
692
|
3. `list_workspace` — identify the correct `repo_path`.
|
|
624
693
|
4. `save_plan`, or provide an `inline_plan` when creating the task.
|
|
625
694
|
5. `create_task` — specify the agent, repository, and verification commands.
|
|
@@ -687,13 +756,20 @@ mean the task is wrong.
|
|
|
687
756
|
| `progress.md` | Progress reported by the agent. |
|
|
688
757
|
| `result.md` | Human-readable execution report. |
|
|
689
758
|
| `result.json` | Structured result, paths, changes, warnings, and next steps. |
|
|
690
|
-
| `diff.patch` |
|
|
759
|
+
| `diff.patch` | Up to 20 MiB of task change evidence; credential-like values are redacted before persistence and truncation is explicit. |
|
|
691
760
|
| `artifact_manifest.json` | Generated artifact paths, types, sizes, and SHA-256 hashes. |
|
|
692
761
|
| `file-stats.json` | Per-file addition and deletion statistics. |
|
|
693
762
|
| `verify.json` | Structured record for every independent verification command. |
|
|
694
763
|
| `verify.log` | Human-readable independent verification output. |
|
|
695
764
|
| `test.log` | Test output captured during agent execution. |
|
|
696
765
|
|
|
766
|
+
Client-facing task artifact reads are limited by `maxReadFileBytes`; diff,
|
|
767
|
+
summary, and log-tail surfaces read bounded prefixes or suffixes. `audit_task`
|
|
768
|
+
scans at most 200 Markdown files and 4 MiB of documentation and returns a
|
|
769
|
+
warning when that budget is reached. Persistent invocation and reconciliation
|
|
770
|
+
logs use cross-process locked, bounded append and retain recent content with an
|
|
771
|
+
explicit truncation marker when full.
|
|
772
|
+
|
|
697
773
|
An agent saying “published” or “pushed” is not reliable remote evidence.
|
|
698
774
|
Verify GitHub, npm, tags, and releases against the live platform state.
|
|
699
775
|
|
|
@@ -778,10 +854,51 @@ available from PowerShell:
|
|
|
778
854
|
.\PatchWarden.cmd restart all
|
|
779
855
|
.\PatchWarden.cmd status all
|
|
780
856
|
.\PatchWarden.cmd kill all
|
|
781
|
-
.\Stop-PatchWarden.cmd
|
|
857
|
+
.\scripts\launchers\Stop-PatchWarden.cmd
|
|
782
858
|
```
|
|
783
859
|
|
|
784
|
-
For daily desktop use, start with `PatchWarden-Desktop.cmd`; it starts the tray and keeps Control Center available without opening extra browser windows. Use `PatchWarden-Control-Tray.cmd --foreground` only for tray debugging, `PatchWarden-Control.cmd` for the full local Web dashboard, and `Stop-PatchWarden.cmd` for one-click shutdown of Core/Direct, Control Center, and the tray.
|
|
860
|
+
For daily desktop use, start with `scripts\launchers\PatchWarden-Desktop.cmd`; it starts the tray and keeps Control Center available without opening extra browser windows. Use `scripts\launchers\PatchWarden-Control-Tray.cmd --foreground` only for tray debugging, `scripts\launchers\PatchWarden-Control.cmd` for the full local Web dashboard, and `scripts\launchers\Stop-PatchWarden.cmd` for one-click shutdown of Core/Direct, Control Center, and the tray.
|
|
861
|
+
|
|
862
|
+
### Windows installer
|
|
863
|
+
|
|
864
|
+
PatchWarden Desktop ships as an installer and a no-install ZIP. It provides an Electron window,
|
|
865
|
+
first-run workspace setup, a system tray, and desktop settings while reusing
|
|
866
|
+
the same loopback Control Center and bounded control APIs. Electron and builder
|
|
867
|
+
dependencies remain isolated in the private `desktop/` package and are not
|
|
868
|
+
included in the public `patchwarden` npm package.
|
|
869
|
+
|
|
870
|
+
The installer still requires Windows x64, Node.js 18+, and tunnel-client. The
|
|
871
|
+
first run performs bounded discovery through `PATH`, current-user locations,
|
|
872
|
+
and the area next to the workspace. If it is missing, the read-only console
|
|
873
|
+
remains available and **Settings > MCP and tunnel** provides a dedicated file
|
|
874
|
+
picker plus SHA256 guidance. The app never downloads or runs new software
|
|
875
|
+
automatically. Settings also exposes the explicit Direct switch and
|
|
876
|
+
environment, none, or manual proxy modes; manual URLs support only http,
|
|
877
|
+
https, or socks5 without embedded credentials. Start/restart reports success
|
|
878
|
+
only after health/ready and the Core watcher have been verified.
|
|
879
|
+
Desktop supports Codex, OpenCode, Claude Code, Gemini CLI, GitHub Copilot CLI,
|
|
880
|
+
Qwen Code, Kimi Code, and Aider. It reads only model fields from agent settings,
|
|
881
|
+
never credentials.
|
|
882
|
+
|
|
883
|
+
```powershell
|
|
884
|
+
npm.cmd install --prefix desktop --cache .\.npm-cache
|
|
885
|
+
npm.cmd run desktop:test
|
|
886
|
+
npm.cmd run desktop:preflight
|
|
887
|
+
npm.cmd run desktop:package
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
The installer, portable ZIP, and SHA256 file are written to `release\desktop`. The first
|
|
891
|
+
release is unsigned and has no automatic updater, so Windows SmartScreen may
|
|
892
|
+
show an unknown-publisher warning. Verify the GitHub Release source and SHA256.
|
|
893
|
+
See [docs/desktop-app.md](docs/desktop-app.md) for installation, runtime, and
|
|
894
|
+
uninstall details.
|
|
895
|
+
|
|
896
|
+
`desktop:preflight` uses a unique output directory for clean builds, complete
|
|
897
|
+
unit and desktop tests, npm package-surface validation, an Electron directory
|
|
898
|
+
package, an isolated 26-tool runtime check, and unpacked UI/single-instance
|
|
899
|
+
smoke evidence. It writes `preflight-report.json` and `preflight-report.md`.
|
|
900
|
+
Before release, run `npm.cmd run desktop:preflight:release` from a clean
|
|
901
|
+
checkout; it rejects any uncommitted path.
|
|
785
902
|
|
|
786
903
|
The old single-purpose launchers remain under `scripts/launchers/` as a
|
|
787
904
|
compatibility layer. Personal launchers live under `.local/launchers/` and
|
|
@@ -1002,6 +1119,13 @@ creation. `export_task_evidence_pack` writes bounded `evidence.json` and
|
|
|
1002
1119
|
`EVIDENCE.md` files under `.patchwarden/evidence-packs/<lineage_id>/` without
|
|
1003
1120
|
stdout/stderr tails, full diffs, verification logs, or sensitive file content.
|
|
1004
1121
|
|
|
1122
|
+
Goal Session state changes are serialized by a shared cross-process mutation
|
|
1123
|
+
lock and committed atomically. A non-empty Goal automatically becomes
|
|
1124
|
+
`completed` after every subgoal is accepted. `create_subgoal_task` treats the
|
|
1125
|
+
Goal's stored `repo_path` as authoritative and rejects a caller-supplied mismatch
|
|
1126
|
+
with `goal_repo_mismatch`; isolated worktrees are created from that repository,
|
|
1127
|
+
and create/merge/discard share a repository lifecycle lock.
|
|
1128
|
+
|
|
1005
1129
|
`full` additionally provides:
|
|
1006
1130
|
|
|
1007
1131
|
- `get_plan`
|
|
@@ -1021,6 +1145,12 @@ session, read and search source files, apply hash-bound JSON patches, run
|
|
|
1021
1145
|
exactly allowlisted verification commands or a bounded verification bundle, finalize the evidence, and audit
|
|
1022
1146
|
the result without a local execution agent.
|
|
1023
1147
|
|
|
1148
|
+
Direct patch and sync operations accept only size-bounded UTF-8 text, count
|
|
1149
|
+
patch limits in UTF-8 bytes, reject credential-like results, revalidate hashes
|
|
1150
|
+
immediately before replacement, and serialize patch/sync/verify/finalize/audit
|
|
1151
|
+
for each session. Direct still does not expose shell, delete, rename, commit,
|
|
1152
|
+
push, publish, or deployment operations.
|
|
1153
|
+
|
|
1024
1154
|
Enable it in the trusted local configuration while keeping the ordinary Core
|
|
1025
1155
|
profile unchanged:
|
|
1026
1156
|
|
|
@@ -1062,9 +1192,10 @@ Primary protections:
|
|
|
1062
1192
|
- Agent commands and argument templates must be configured in advance.
|
|
1063
1193
|
- Verification commands must exactly match the allowlist.
|
|
1064
1194
|
- File access is contained to `workspaceRoot`.
|
|
1065
|
-
- Sensitive filenames and obvious credential-read plans are blocked
|
|
1066
|
-
|
|
1067
|
-
-
|
|
1195
|
+
- Sensitive filenames and obvious credential-read plans are blocked;
|
|
1196
|
+
`.patchwarden/` does not bypass this check.
|
|
1197
|
+
- Credential-like diff content is redacted before persistence and marks the task as a policy violation.
|
|
1198
|
+
- HTTP services bind only to `127.0.0.1` and reject non-loopback Host headers.
|
|
1068
1199
|
- The Runner does not automatically commit, push, publish, or reset.
|
|
1069
1200
|
|
|
1070
1201
|
Protect these local paths:
|
|
@@ -1153,9 +1284,10 @@ and release-asset checksums independently.
|
|
|
1153
1284
|
|
|
1154
1285
|
## Related documentation
|
|
1155
1286
|
|
|
1156
|
-
- [
|
|
1157
|
-
- [v0.6.
|
|
1158
|
-
- [v0.6.
|
|
1287
|
+
- [Windows Desktop installer](docs/desktop-app.md)
|
|
1288
|
+
- [v0.6.4 release notes](docs/archive/releases/release-v0.6.4.md)
|
|
1289
|
+
- [v0.6.1 release notes](docs/archive/releases/release-v0.6.1.md)
|
|
1290
|
+
- [v0.6.0 release notes](docs/archive/releases/release-v0.6.0.md)
|
|
1159
1291
|
- [ChatGPT usage guide](docs/chatgpt-usage.md)
|
|
1160
1292
|
- [Migration guide](docs/migration-from-safe-bifrost.md)
|
|
1161
1293
|
- [ChatGPT Connector demo](docs/demo.md)
|