patchwarden 1.5.0 → 1.6.1
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 +194 -26
- package/README.md +160 -22
- package/dist/assessments/agentAssessor.d.ts +1 -1
- package/dist/assessments/agentAssessor.js +24 -15
- package/dist/assessments/assessmentStore.d.ts +1 -1
- package/dist/assessments/assessmentStore.js +44 -36
- package/dist/assessments/confirmCli.js +5 -4
- package/dist/config.d.ts +22 -0
- package/dist/config.js +98 -11
- package/dist/control/fileManager.d.ts +2 -0
- package/dist/control/fileManager.js +39 -0
- package/dist/control/middleware/auth.d.ts +16 -0
- package/dist/control/middleware/auth.js +17 -0
- package/dist/control/middleware/static.d.ts +3 -0
- package/dist/control/middleware/static.js +78 -0
- package/dist/control/routeTable.d.ts +24 -0
- package/dist/control/routeTable.js +263 -0
- package/dist/control/routes/audit.d.ts +15 -0
- package/dist/control/routes/audit.js +287 -0
- package/dist/control/routes/evidence.d.ts +4 -0
- package/dist/control/routes/evidence.js +96 -0
- package/dist/control/routes/lineage.d.ts +3 -0
- package/dist/control/routes/lineage.js +71 -0
- package/dist/control/routes/policy.d.ts +3 -0
- package/dist/control/routes/policy.js +81 -0
- package/dist/control/routes/process.d.ts +12 -0
- package/dist/control/routes/process.js +487 -0
- package/dist/control/routes/sessions.d.ts +30 -0
- package/dist/control/routes/sessions.js +287 -0
- package/dist/control/routes/status.d.ts +51 -0
- package/dist/control/routes/status.js +307 -0
- package/dist/control/routes/taskActions.d.ts +21 -0
- package/dist/control/routes/taskActions.js +197 -0
- package/dist/control/routes/tasks.d.ts +24 -0
- package/dist/control/routes/tasks.js +309 -0
- package/dist/control/routes/workspace.d.ts +15 -0
- package/dist/control/routes/workspace.js +220 -0
- package/dist/control/runtime.d.ts +92 -0
- package/dist/control/runtime.js +425 -0
- package/dist/control/server.d.ts +13 -0
- package/dist/control/server.js +150 -0
- package/dist/control/shared.d.ts +59 -0
- package/dist/control/shared.js +341 -0
- package/dist/controlCenter.d.ts +6 -0
- package/dist/controlCenter.js +7 -2197
- package/dist/direct/directAudit.js +234 -225
- package/dist/direct/directGuards.d.ts +2 -1
- package/dist/direct/directGuards.js +72 -37
- 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 +127 -35
- package/dist/direct/directVerification.js +8 -16
- package/dist/doctor.d.ts +18 -1
- package/dist/doctor.js +614 -373
- package/dist/goal/acceptanceEngine.d.ts +1 -1
- package/dist/goal/goalProgress.js +75 -69
- package/dist/goal/goalReport.d.ts +54 -0
- package/dist/goal/goalReport.js +197 -0
- package/dist/goal/goalStatus.d.ts +8 -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.d.ts +63 -0
- package/dist/goal/specKitImport.js +221 -0
- package/dist/goal/subgoalSync.js +13 -10
- package/dist/goal/worktreeManager.d.ts +2 -0
- package/dist/goal/worktreeManager.js +209 -136
- package/dist/httpServer.js +126 -44
- package/dist/index.js +7 -4
- package/dist/logging.d.ts +7 -1
- package/dist/logging.js +13 -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 +14 -6
- package/dist/runner/changeCapture.js +287 -81
- package/dist/runner/cli.js +7 -6
- package/dist/runner/postTaskCleanup.js +60 -7
- package/dist/runner/processSecurity.d.ts +56 -0
- package/dist/runner/processSecurity.js +373 -0
- package/dist/runner/runTask.d.ts +1 -1
- package/dist/runner/runTask.js +339 -287
- package/dist/runner/simpleProcess.d.ts +3 -0
- package/dist/runner/simpleProcess.js +52 -38
- 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} +1 -1
- package/dist/{taskRuntime.js → runner/taskRuntime.js} +3 -2
- package/dist/runner/taskStatusStore.d.ts +11 -0
- package/dist/runner/taskStatusStore.js +24 -0
- package/dist/runner/watch.d.ts +14 -1
- package/dist/runner/watch.js +265 -54
- package/dist/security/contentRedaction.d.ts +6 -0
- package/dist/security/contentRedaction.js +24 -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 +280 -273
- 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} +28 -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} +8 -63
- package/dist/tools/{auditTask.js → diagnostics/auditTask.js} +111 -37
- package/dist/tools/{healthCheck.d.ts → diagnostics/healthCheck.d.ts} +6 -6
- package/dist/tools/{healthCheck.js → diagnostics/healthCheck.js} +10 -10
- 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} +14 -10
- package/dist/tools/{safeViews.js → diagnostics/safeViews.js} +25 -15
- 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.d.ts → direct/createDirectSession.d.ts} +1 -1
- package/dist/tools/{createDirectSession.js → direct/createDirectSession.js} +8 -8
- package/dist/tools/{finalizeDirectSession.d.ts → direct/finalizeDirectSession.d.ts} +2 -2
- 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.d.ts +9 -0
- package/dist/tools/dispatch/coreDispatch.js +283 -0
- package/dist/tools/dispatch/diagnosticDispatch.d.ts +12 -0
- package/dist/tools/dispatch/diagnosticDispatch.js +80 -0
- package/dist/tools/dispatch/directDispatch.d.ts +8 -0
- package/dist/tools/dispatch/directDispatch.js +116 -0
- package/dist/tools/dispatch/goalDispatch.d.ts +8 -0
- package/dist/tools/dispatch/goalDispatch.js +92 -0
- package/dist/tools/dispatch/releaseDispatch.d.ts +8 -0
- package/dist/tools/dispatch/releaseDispatch.js +46 -0
- package/dist/tools/dispatch/types.d.ts +23 -0
- package/dist/tools/dispatch/types.js +15 -0
- 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} +2 -2
- 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 +10 -14
- package/dist/tools/registry.js +47 -1651
- 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 +85 -0
- package/dist/tools/{createTask.d.ts → tasks/createTask.d.ts} +12 -4
- package/dist/tools/{createTask.js → tasks/createTask.js} +46 -31
- package/dist/tools/{diagnoseTask.d.ts → tasks/diagnoseTask.d.ts} +1 -1
- package/dist/tools/{diagnoseTask.js → tasks/diagnoseTask.js} +8 -8
- package/dist/tools/{evidencePack.d.ts → tasks/evidencePack.d.ts} +6 -0
- package/dist/tools/tasks/evidencePack.js +387 -0
- 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} +5 -5
- package/dist/tools/{getTaskStdoutTail.js → tasks/getTaskStdoutTail.js} +13 -11
- package/dist/tools/{getTaskSummary.js → tasks/getTaskSummary.js} +33 -26
- 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} +3 -3
- package/dist/tools/{reconcileTasks.d.ts → tasks/reconcileTasks.d.ts} +1 -1
- package/dist/tools/{reconcileTasks.js → tasks/reconcileTasks.js} +64 -66
- package/dist/tools/{retryTask.d.ts → tasks/retryTask.d.ts} +2 -2
- 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} +59 -31
- package/dist/tools/tasks/runVerification.js +38 -0
- package/dist/tools/{taskLineage.js → tasks/taskLineage.js} +8 -7
- package/dist/tools/{taskOutputs.js → tasks/taskOutputs.js} +17 -16
- 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/{listAgents.d.ts → workspace/listAgents.d.ts} +5 -0
- package/dist/tools/{listAgents.js → workspace/listAgents.js} +8 -4
- 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 +48 -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 +1648 -0
- package/docs/agentseal-integration.md +150 -0
- package/docs/architecture.md +23 -0
- package/docs/assets/patchwarden-desktop-onboarding.png +0 -0
- package/docs/assets/patchwarden-oss-demo.gif +0 -0
- package/docs/control-center/README.md +4 -4
- package/docs/dashboard-overview.md +86 -0
- package/docs/demo.md +8 -0
- package/docs/desktop-app.md +175 -0
- package/docs/direct-session-workflow.md +98 -0
- package/docs/evidence-pack-schema.md +215 -0
- package/docs/lineage-evidence-pack-workflow.md +127 -0
- package/docs/mcp-inspector-testing.md +200 -0
- package/docs/open-source-application.md +168 -0
- package/docs/opencode-worker.md +151 -0
- package/docs/openhands-worker.md +181 -0
- package/docs/release-checklist.md +1 -1
- package/docs/release-evidence.md +82 -0
- package/docs/spec-kit-integration.md +131 -0
- package/docs/task-safe-review-workflow.md +98 -0
- package/docs/threat-model.md +97 -0
- package/docs/user-feedback.md +40 -0
- package/docs/why-patchwarden.md +110 -0
- package/examples/config.example.json +4 -2
- package/package.json +28 -11
- 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 +447 -6
- package/scripts/checks/control-smoke.js +19 -8
- package/scripts/checks/http-mcp-smoke.js +82 -4
- package/scripts/checks/lifecycle-smoke.js +39 -33
- package/scripts/checks/mcp-manifest-check.js +1 -1
- package/scripts/checks/mcp-smoke.js +30 -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 +9 -0
- 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 +126 -32
- package/scripts/generate-demo-gif.py +320 -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 +29 -15
- package/src/assessments/assessmentStore.ts +55 -43
- package/src/assessments/confirmCli.ts +5 -4
- package/src/config.ts +105 -11
- package/src/control/fileManager.ts +40 -0
- package/src/control/middleware/auth.ts +35 -0
- package/src/control/middleware/static.ts +84 -0
- package/src/control/routeTable.ts +301 -0
- package/src/control/routes/audit.ts +329 -0
- package/src/control/routes/evidence.ts +107 -0
- package/src/control/routes/lineage.ts +92 -0
- package/src/control/routes/policy.ts +81 -0
- package/src/control/routes/process.ts +505 -0
- package/src/control/routes/sessions.ts +314 -0
- package/src/control/routes/status.ts +405 -0
- package/src/control/routes/taskActions.ts +214 -0
- package/src/control/routes/tasks.ts +331 -0
- package/src/control/routes/workspace.ts +234 -0
- package/src/control/runtime.ts +508 -0
- package/src/control/server.ts +165 -0
- package/src/control/shared.ts +360 -0
- package/src/controlCenter.ts +7 -2347
- package/src/direct/directAudit.ts +17 -9
- package/src/direct/directGuards.ts +100 -51
- package/src/direct/directPatch.ts +95 -8
- package/src/direct/directSessionStore.ts +211 -55
- package/src/direct/directVerification.ts +9 -23
- package/src/doctor.ts +766 -492
- package/src/goal/acceptanceEngine.ts +1 -1
- package/src/goal/goalProgress.ts +17 -13
- package/src/goal/goalReport.ts +263 -0
- package/src/goal/goalStatus.ts +25 -3
- package/src/goal/goalStore.ts +241 -54
- package/src/goal/handoffExport.ts +6 -6
- package/src/goal/specKitImport.ts +355 -0
- package/src/goal/subgoalSync.ts +15 -10
- package/src/goal/worktreeManager.ts +139 -22
- package/src/httpServer.ts +130 -44
- package/src/index.ts +7 -4
- package/src/logging.ts +20 -4
- 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 +342 -80
- package/src/runner/cli.ts +7 -6
- package/src/runner/postTaskCleanup.ts +55 -7
- package/src/runner/processSecurity.ts +433 -0
- package/src/runner/runTask.ts +441 -292
- package/src/runner/simpleProcess.ts +68 -33
- package/src/{taskProgress.ts → runner/taskProgress.ts} +3 -3
- package/src/{taskRuntime.ts → runner/taskRuntime.ts} +4 -3
- package/src/runner/taskStatusStore.ts +54 -0
- package/src/runner/watch.ts +290 -57
- package/src/security/contentRedaction.ts +31 -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 +276 -273
- 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} +29 -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} +196 -89
- package/src/tools/{healthCheck.ts → diagnostics/healthCheck.ts} +11 -11
- 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} +29 -19
- package/src/tools/{schemaDriftCheck.ts → diagnostics/schemaDriftCheck.ts} +3 -3
- package/src/tools/{createDirectSession.ts → direct/createDirectSession.ts} +9 -9
- package/src/tools/{finalizeDirectSession.ts → direct/finalizeDirectSession.ts} +11 -9
- 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 +379 -0
- package/src/tools/dispatch/diagnosticDispatch.ts +106 -0
- package/src/tools/dispatch/directDispatch.ts +168 -0
- package/src/tools/dispatch/goalDispatch.ts +128 -0
- package/src/tools/dispatch/releaseDispatch.ts +66 -0
- package/src/tools/dispatch/types.ts +24 -0
- 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} +43 -28
- package/src/tools/goals/index.ts +3 -0
- package/src/tools/{savePlan.ts → goals/savePlan.ts} +38 -8
- package/src/tools/registry.ts +54 -1858
- 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 +109 -0
- package/src/tools/{createTask.ts → tasks/createTask.ts} +56 -33
- package/src/tools/{diagnoseTask.ts → tasks/diagnoseTask.ts} +8 -8
- package/src/tools/tasks/evidencePack.ts +504 -0
- package/src/tools/{getTaskFile.ts → tasks/getTaskFile.ts} +4 -4
- package/src/tools/{getTaskStatus.ts → tasks/getTaskStatus.ts} +7 -5
- package/src/tools/{getTaskStdoutTail.ts → tasks/getTaskStdoutTail.ts} +13 -11
- package/src/tools/{getTaskSummary.ts → tasks/getTaskSummary.ts} +44 -33
- package/src/tools/tasks/index.ts +18 -0
- package/src/tools/{listTasks.ts → tasks/listTasks.ts} +4 -4
- package/src/tools/{reconcileTasks.ts → tasks/reconcileTasks.ts} +68 -66
- package/src/tools/tasks/retryTask.ts +69 -0
- package/src/tools/{runTaskLoop.ts → tasks/runTaskLoop.ts} +70 -35
- 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/{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/{listAgents.ts → workspace/listAgents.ts} +11 -4
- 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 +58 -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 +204 -3
- package/ui/pages/dashboard.html +937 -79
- package/ui/pages/direct-sessions.html +609 -60
- package/ui/pages/getting-started.html +43 -0
- package/ui/pages/logs.html +105 -22
- package/ui/pages/settings.html +101 -0
- package/ui/pages/task-detail.html +468 -438
- package/ui/pages/tasks.html +648 -65
- package/ui/pages/workspace.html +38 -1
- package/ui/settings.js +245 -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/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/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 -213
- 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 -130
- 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-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 -190
- 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 -109
- 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/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/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/evidencePack.js +0 -168
- 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/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/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/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/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/diagnose-task.test.ts +0 -544
- package/src/test/unit/direct-guards.test.ts +0 -297
- package/src/test/unit/discovery-token-store.test.ts +0 -181
- package/src/test/unit/evidence-pack.test.ts +0 -142
- 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-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 -243
- 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 -150
- 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/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/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/evidencePack.ts +0 -205
- 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/{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/{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/{runVerification.d.ts → tasks/runVerification.d.ts} +0 -0
- /package/dist/tools/{taskLineage.d.ts → tasks/taskLineage.d.ts} +0 -0
- /package/dist/tools/{taskOutputs.d.ts → tasks/taskOutputs.d.ts} +0 -0
- /package/dist/tools/{waitForTask.d.ts → tasks/waitForTask.d.ts} +0 -0
- /package/dist/tools/{waitForTask.js → tasks/waitForTask.js} +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/src/tools/{waitForTask.ts → tasks/waitForTask.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,21 @@ 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.0](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.0/PatchWarden-Setup-1.6.0-x64.exe)
|
|
23
|
+
· [Portable ZIP](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.0/PatchWarden-Portable-1.6.0-x64.zip)
|
|
24
|
+
· [Checksums](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.0/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: **v1.6.1**; current Windows Release: **v1.6.0**; npm
|
|
33
|
+
`latest`: **v1.5.1**. Use the installer above for the first Windows experience;
|
|
34
|
+
pin an actually published version for npm/CLI use. See the
|
|
35
|
+
[CHANGELOG](CHANGELOG.md), [migration guide](docs/migration-from-safe-bifrost.md), and
|
|
36
|
+
[release checklist](docs/release-checklist.md).
|
|
25
37
|
|
|
26
38
|
> [!IMPORTANT]
|
|
27
39
|
> PatchWarden is not a general-purpose remote shell. MCP clients cannot run
|
|
@@ -36,7 +48,7 @@ independent verification evidence.
|
|
|
36
48
|
- [Evidence example](#evidence-example)
|
|
37
49
|
- [Runtime architecture](#runtime-architecture)
|
|
38
50
|
- [Requirements](#requirements)
|
|
39
|
-
- [
|
|
51
|
+
- [Three-minute quick start](#three-minute-quick-start)
|
|
40
52
|
- [Complete configuration guide](#complete-configuration-guide)
|
|
41
53
|
- [Connect OpenCode](#connect-opencode)
|
|
42
54
|
- [Connect Codex](#connect-codex)
|
|
@@ -46,6 +58,7 @@ independent verification evidence.
|
|
|
46
58
|
- [HTTP MCP mode](#http-mcp-mode)
|
|
47
59
|
- [Diagnostics and health checks](#diagnostics-and-health-checks)
|
|
48
60
|
- [Lessons learned and troubleshooting](#lessons-learned-and-troubleshooting)
|
|
61
|
+
- [Ecosystem guides](#ecosystem-guides)
|
|
49
62
|
- [Security boundaries and local data](#security-boundaries-and-local-data)
|
|
50
63
|
- [Upgrading and migration](#upgrading-and-migration)
|
|
51
64
|
- [Development and release verification](#development-and-release-verification)
|
|
@@ -60,12 +73,13 @@ PatchWarden uses a narrower, auditable task channel:
|
|
|
60
73
|
- Every task must specify a `repo_path` inside `workspaceRoot`.
|
|
61
74
|
- Agent launch commands come from local configuration, not model input.
|
|
62
75
|
- Verification commands must exactly match `allowedTestCommands`.
|
|
63
|
-
- Every completed task records structured results, a
|
|
76
|
+
- Every completed task records structured results, a bounded and redacted diff, file
|
|
64
77
|
statistics, and independent verification output.
|
|
65
78
|
- Changes outside the requested repository cause a scope violation instead of
|
|
66
79
|
being silently accepted.
|
|
67
|
-
-
|
|
68
|
-
credential stores
|
|
80
|
+
- `.patchwarden/` is not a sensitive-path exemption. Names such as `.env`
|
|
81
|
+
files, tokens, SSH keys, cookies, and credential stores remain blocked at
|
|
82
|
+
every directory depth.
|
|
69
83
|
|
|
70
84
|
Good use cases:
|
|
71
85
|
|
|
@@ -109,7 +123,7 @@ A completed task writes bounded, reviewable artifacts under
|
|
|
109
123
|
- `result.json` - final status, verification status, changed-file groups, and warnings.
|
|
110
124
|
- `artifact_manifest.json` - generated artifacts with size, type, and SHA-256.
|
|
111
125
|
- `verify.json` - exact verification commands and exit codes.
|
|
112
|
-
- `diff.patch` -
|
|
126
|
+
- `diff.patch` - up to 20 MiB of redacted source diff when Git evidence is available; truncation is explicit.
|
|
113
127
|
- `rollback_scope_violation_plan.md` - review plan when a task changes files outside `repo_path`.
|
|
114
128
|
|
|
115
129
|
Example compact evidence:
|
|
@@ -217,9 +231,37 @@ If `where.exe codex` only returns the Codex Desktop executable under
|
|
|
217
231
|
WindowsApps, it may not be a callable Codex CLI. Install or point to the real
|
|
218
232
|
CLI, or configure OpenCode as the execution agent.
|
|
219
233
|
|
|
220
|
-
##
|
|
234
|
+
## Three-minute quick start
|
|
221
235
|
|
|
222
|
-
|
|
236
|
+
If Node.js 18+ and at least one local coding agent are already installed, this
|
|
237
|
+
Windows path is designed to reach its first read-only health check in about
|
|
238
|
+
three minutes. A ChatGPT Tunnel is not required for this first run.
|
|
239
|
+
|
|
240
|
+
### Option A: Windows installer (recommended for a first run)
|
|
241
|
+
|
|
242
|
+
1. Download the [Windows installer v1.6.0](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.0/PatchWarden-Setup-1.6.0-x64.exe)
|
|
243
|
+
and its [SHA256 checksum file](https://github.com/jiezeng2004-design/PatchWarden/releases/download/v1.6.0/PatchWarden-Desktop-SHA256SUMS.txt).
|
|
244
|
+
2. Verify the installer in PowerShell:
|
|
245
|
+
|
|
246
|
+
```powershell
|
|
247
|
+
Get-FileHash .\PatchWarden-Setup-1.6.0-x64.exe -Algorithm SHA256
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
The current published value is `77d655545925ae283a0caed0fff12554debac15b54c5decf1ae8f3867703058e`;
|
|
251
|
+
always prefer the checksum file from the same Release. The installer is not
|
|
252
|
+
code-signed yet, so Windows SmartScreen may show an unknown-publisher warning.
|
|
253
|
+
|
|
254
|
+
3. Install and open PatchWarden Desktop, then choose a dedicated workspace that
|
|
255
|
+
contains only your projects.
|
|
256
|
+
4. Select **Local MCP** on the first screen, review the detected agent, and let
|
|
257
|
+
the read-only health check finish.
|
|
258
|
+
|
|
259
|
+
Success means the onboarding flow reaches the read-only console, shows the
|
|
260
|
+
selected workspace, and completes the agent/runtime checks. Share a successful
|
|
261
|
+
install or a blocked step in [Discussions](https://github.com/jiezeng2004-design/PatchWarden/discussions),
|
|
262
|
+
including your OS, Node.js version, agent, and the step where you stopped.
|
|
263
|
+
|
|
264
|
+
### Option B: run from source (developer workflow)
|
|
223
265
|
|
|
224
266
|
Source mode is the easiest way to use the Watcher, Windows launchers, and
|
|
225
267
|
diagnostic scripts together.
|
|
@@ -256,7 +298,7 @@ npm.cmd run watch
|
|
|
256
298
|
Keep this window open, then configure OpenCode, Codex, or ChatGPT as described
|
|
257
299
|
below.
|
|
258
300
|
|
|
259
|
-
### Option
|
|
301
|
+
### Option C: use the npm package
|
|
260
302
|
|
|
261
303
|
The npm package is convenient for launching a pinned MCP server. Task
|
|
262
304
|
execution still requires a separate Watcher.
|
|
@@ -299,11 +341,13 @@ Recommended Windows example:
|
|
|
299
341
|
"agents": {
|
|
300
342
|
"opencode": {
|
|
301
343
|
"command": "opencode",
|
|
302
|
-
"args": ["run", "{prompt}"]
|
|
344
|
+
"args": ["run", "{prompt}"],
|
|
345
|
+
"envAllowlist": []
|
|
303
346
|
},
|
|
304
347
|
"codex": {
|
|
305
348
|
"command": "codex",
|
|
306
|
-
"args": ["exec", "--cd", "{repo}", "{prompt}"]
|
|
349
|
+
"args": ["exec", "--cd", "{repo}", "{prompt}"],
|
|
350
|
+
"envAllowlist": []
|
|
307
351
|
}
|
|
308
352
|
},
|
|
309
353
|
"allowedTestCommands": [
|
|
@@ -332,6 +376,7 @@ Configuration fields:
|
|
|
332
376
|
| `tasksDir` | Yes | Task and result directory, normally `.patchwarden/tasks`. |
|
|
333
377
|
| `toolProfile` | No | `full`, `chatgpt_core`, `chatgpt_direct`, or `chatgpt_search`; use `full` for local clients and `chatgpt_search` for compact discovery-driven clients. |
|
|
334
378
|
| `agents` | Yes | Execution-agent allowlist; supports `{repo}` and `{prompt}` placeholders. |
|
|
379
|
+
| `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. |
|
|
335
380
|
| `allowedTestCommands` | Yes | Exact allowlist for independent verification commands. |
|
|
336
381
|
| `repoAllowedTestCommands` | No | Extra exact commands keyed by workspace-relative repository path; wildcards are unsupported. |
|
|
337
382
|
| `maxReadFileBytes` | Yes | Maximum bytes returned by one MCP file read. |
|
|
@@ -348,12 +393,17 @@ Important configuration rules:
|
|
|
348
393
|
- If you use backslashes, escape them as `D:\\path\\to\\project`.
|
|
349
394
|
- Do not set `workspaceRoot` to a drive root, home directory, Desktop,
|
|
350
395
|
Downloads, or Documents.
|
|
396
|
+
- Configuration loading fails closed when `workspaceRoot` is missing,
|
|
397
|
+
inaccessible, not a directory, or one of those unsafe broad roots.
|
|
351
398
|
- `plansDir` and `tasksDir` are resolved relative to `workspaceRoot`.
|
|
352
399
|
- `repo_path` must stay inside `workspaceRoot` and cannot escape with `..`.
|
|
353
400
|
- `allowedTestCommands` uses exact matching; similar commands are not
|
|
354
401
|
automatically authorized.
|
|
355
402
|
- Repository-specific commands come only from trusted local configuration;
|
|
356
403
|
a target repository cannot authorize itself through `package.json`.
|
|
404
|
+
- Every execution agent must be explicitly registered. Provider credentials or
|
|
405
|
+
proxy variables are forwarded only when their names appear in that agent's
|
|
406
|
+
`envAllowlist`; owner credentials cannot be allow-listed.
|
|
357
407
|
- Configuration may contain private paths and should not be committed.
|
|
358
408
|
|
|
359
409
|
Set the configuration path:
|
|
@@ -462,11 +512,26 @@ configured under `agents` is available.
|
|
|
462
512
|
|
|
463
513
|
## Connect ChatGPT
|
|
464
514
|
|
|
515
|
+
> The current ChatGPT terms are **developer-mode app / Plugins**. Older docs and UI builds called this a Connector.
|
|
516
|
+
|
|
517
|
+
### Eight-step desktop setup
|
|
518
|
+
|
|
519
|
+
1. Confirm that the OpenAI Platform account has Tunnel access and enable developer mode in the target ChatGPT workspace.
|
|
520
|
+
2. Open [Platform Tunnel settings](https://platform.openai.com/settings/organization/tunnels), create a Tunnel, and associate the target ChatGPT workspace.
|
|
521
|
+
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.
|
|
522
|
+
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.
|
|
523
|
+
5. Select environment proxy, no proxy, or a credential-free HTTP/HTTPS/SOCKS5 (Mixed) proxy, then confirm that its port is reachable.
|
|
524
|
+
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.
|
|
525
|
+
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.
|
|
526
|
+
8. In ChatGPT **Settings → Plugins**, create a developer-mode app and choose the Tunnel. Reconnect it, open a new chat, and call `health_check`.
|
|
527
|
+
|
|
528
|
+
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.
|
|
529
|
+
|
|
465
530
|
Recommended Windows path:
|
|
466
531
|
|
|
467
532
|
```text
|
|
468
533
|
ChatGPT Web
|
|
469
|
-
→ ChatGPT Connector
|
|
534
|
+
→ ChatGPT developer-mode app / Plugins (formerly Connector)
|
|
470
535
|
→ OpenAI Secure MCP Tunnel
|
|
471
536
|
→ PatchWarden stdio MCP
|
|
472
537
|
→ Watcher
|
|
@@ -511,7 +576,7 @@ Runtime status is stored under:
|
|
|
511
576
|
This directory contains PIDs, health state, and redacted diagnostics. It must
|
|
512
577
|
not contain the API key or Tunnel ID.
|
|
513
578
|
|
|
514
|
-
When creating the ChatGPT
|
|
579
|
+
When creating the ChatGPT developer-mode app in Plugins:
|
|
515
580
|
|
|
516
581
|
- Select the tunnel **Channel**.
|
|
517
582
|
- Choose **None** for authentication unless you implemented OAuth.
|
|
@@ -686,13 +751,20 @@ mean the task is wrong.
|
|
|
686
751
|
| `progress.md` | Progress reported by the agent. |
|
|
687
752
|
| `result.md` | Human-readable execution report. |
|
|
688
753
|
| `result.json` | Structured result, paths, changes, warnings, and next steps. |
|
|
689
|
-
| `diff.patch` |
|
|
754
|
+
| `diff.patch` | Up to 20 MiB of task change evidence; credential-like values are redacted before persistence and truncation is explicit. |
|
|
690
755
|
| `artifact_manifest.json` | Generated artifact paths, types, sizes, and SHA-256 hashes. |
|
|
691
756
|
| `file-stats.json` | Per-file addition and deletion statistics. |
|
|
692
757
|
| `verify.json` | Structured record for every independent verification command. |
|
|
693
758
|
| `verify.log` | Human-readable independent verification output. |
|
|
694
759
|
| `test.log` | Test output captured during agent execution. |
|
|
695
760
|
|
|
761
|
+
Client-facing task artifact reads are limited by `maxReadFileBytes`; diff,
|
|
762
|
+
summary, and log-tail surfaces read bounded prefixes or suffixes. `audit_task`
|
|
763
|
+
scans at most 200 Markdown files and 4 MiB of documentation and returns a
|
|
764
|
+
warning when that budget is reached. Persistent invocation and reconciliation
|
|
765
|
+
logs use cross-process locked, bounded append and retain recent content with an
|
|
766
|
+
explicit truncation marker when full.
|
|
767
|
+
|
|
696
768
|
An agent saying “published” or “pushed” is not reliable remote evidence.
|
|
697
769
|
Verify GitHub, npm, tags, and releases against the live platform state.
|
|
698
770
|
|
|
@@ -777,10 +849,51 @@ available from PowerShell:
|
|
|
777
849
|
.\PatchWarden.cmd restart all
|
|
778
850
|
.\PatchWarden.cmd status all
|
|
779
851
|
.\PatchWarden.cmd kill all
|
|
780
|
-
.\Stop-PatchWarden.cmd
|
|
852
|
+
.\scripts\launchers\Stop-PatchWarden.cmd
|
|
781
853
|
```
|
|
782
854
|
|
|
783
|
-
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.
|
|
855
|
+
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.
|
|
856
|
+
|
|
857
|
+
### Windows installer
|
|
858
|
+
|
|
859
|
+
PatchWarden Desktop ships as an installer and a no-install ZIP. It provides an Electron window,
|
|
860
|
+
first-run workspace setup, a system tray, and desktop settings while reusing
|
|
861
|
+
the same loopback Control Center and bounded control APIs. Electron and builder
|
|
862
|
+
dependencies remain isolated in the private `desktop/` package and are not
|
|
863
|
+
included in the public `patchwarden` npm package.
|
|
864
|
+
|
|
865
|
+
The installer still requires Windows x64, Node.js 18+, and tunnel-client. The
|
|
866
|
+
first run performs bounded discovery through `PATH`, current-user locations,
|
|
867
|
+
and the area next to the workspace. If it is missing, the read-only console
|
|
868
|
+
remains available and **Settings > MCP and tunnel** provides a dedicated file
|
|
869
|
+
picker plus SHA256 guidance. The app never downloads or runs new software
|
|
870
|
+
automatically. Settings also exposes the explicit Direct switch and
|
|
871
|
+
environment, none, or manual proxy modes; manual URLs support only http,
|
|
872
|
+
https, or socks5 without embedded credentials. Start/restart reports success
|
|
873
|
+
only after health/ready and the Core watcher have been verified.
|
|
874
|
+
Desktop supports Codex, OpenCode, Claude Code, Gemini CLI, GitHub Copilot CLI,
|
|
875
|
+
Qwen Code, Kimi Code, and Aider. It reads only model fields from agent settings,
|
|
876
|
+
never credentials.
|
|
877
|
+
|
|
878
|
+
```powershell
|
|
879
|
+
npm.cmd install --prefix desktop --cache .\.npm-cache
|
|
880
|
+
npm.cmd run desktop:test
|
|
881
|
+
npm.cmd run desktop:preflight
|
|
882
|
+
npm.cmd run desktop:package
|
|
883
|
+
```
|
|
884
|
+
|
|
885
|
+
The installer, portable ZIP, and SHA256 file are written to `release\desktop`. The first
|
|
886
|
+
release is unsigned and has no automatic updater, so Windows SmartScreen may
|
|
887
|
+
show an unknown-publisher warning. Verify the GitHub Release source and SHA256.
|
|
888
|
+
See [docs/desktop-app.md](docs/desktop-app.md) for installation, runtime, and
|
|
889
|
+
uninstall details.
|
|
890
|
+
|
|
891
|
+
`desktop:preflight` uses a unique output directory for clean builds, complete
|
|
892
|
+
unit and desktop tests, npm package-surface validation, an Electron directory
|
|
893
|
+
package, an isolated 26-tool runtime check, and unpacked UI/single-instance
|
|
894
|
+
smoke evidence. It writes `preflight-report.json` and `preflight-report.md`.
|
|
895
|
+
Before release, run `npm.cmd run desktop:preflight:release` from a clean
|
|
896
|
+
checkout; it rejects any uncommitted path.
|
|
784
897
|
|
|
785
898
|
The old single-purpose launchers remain under `scripts/launchers/` as a
|
|
786
899
|
compatibility layer. Personal launchers live under `.local/launchers/` and
|
|
@@ -845,6 +958,31 @@ It stops only this project's launchers and Watcher plus `tunnel-client.exe`
|
|
|
845
958
|
processes that exactly match the selected profile. It does not globally
|
|
846
959
|
terminate unrelated PatchWarden, OpenCode, or Codex instances.
|
|
847
960
|
|
|
961
|
+
## Dashboard pages and recommended workflow
|
|
962
|
+
|
|
963
|
+
The PatchWarden Dashboard (Control Center) provides these main pages:
|
|
964
|
+
|
|
965
|
+
- **Dashboard**: System overview, including Repo selector, Health Score, service status, Release card, Project Policy, Lineage, Evidence Pack, stale task hints, recent task list, and system status (with Copy diagnostics).
|
|
966
|
+
- **Tasks**: Task list, filterable by repo_path / status / acceptance_status / warning type / agent / date range. Each row offers safe_result / safe_audit / safe_test_summary / safe_diff_summary quick actions.
|
|
967
|
+
- **Task Detail**: Defaults to a safe summary (safe_result / safe_test_summary / safe_diff_summary / safe_audit). Full result / diff / test log live in a collapsed advanced section and load on demand.
|
|
968
|
+
- **Direct Sessions**: Grouped by active / finalized / audited / expired, with safe_direct_summary / safe_finalize_direct_session / safe_audit_direct_session quick actions.
|
|
969
|
+
- **Audit / Warnings**: Aggregated by warning type, showing affected tasks / severity / recommended action.
|
|
970
|
+
- **Workspace**: First-level workspace directories and project list.
|
|
971
|
+
- **Logs**: Tails of Core / Direct / Watcher / Control Center logs.
|
|
972
|
+
|
|
973
|
+
Recommended workflow:
|
|
974
|
+
|
|
975
|
+
1. Select the target repo at the top of the Dashboard.
|
|
976
|
+
2. Check the Health Score to confirm system health.
|
|
977
|
+
3. Click safe_result on a recent task row to view the task summary.
|
|
978
|
+
4. Open Task Detail for safe-first acceptance; expand the advanced section only when you need the full logs.
|
|
979
|
+
5. Use Lineage Detail to inspect why a run_task_loop succeeded or failed.
|
|
980
|
+
6. Export the Evidence Pack after acceptance.
|
|
981
|
+
7. Use Direct sessions for independent verification, then finalize + audit.
|
|
982
|
+
8. When something goes wrong, click Copy diagnostics and paste the output to ChatGPT / Codex / opencode for triage.
|
|
983
|
+
|
|
984
|
+
> See [docs/dashboard-overview.md](docs/dashboard-overview.md), [docs/task-safe-review-workflow.md](docs/task-safe-review-workflow.md), [docs/lineage-evidence-pack-workflow.md](docs/lineage-evidence-pack-workflow.md), and [docs/direct-session-workflow.md](docs/direct-session-workflow.md) for details.
|
|
985
|
+
|
|
848
986
|
## Lessons learned and troubleshooting
|
|
849
987
|
|
|
850
988
|
### Quick reference
|
|
@@ -976,6 +1114,13 @@ creation. `export_task_evidence_pack` writes bounded `evidence.json` and
|
|
|
976
1114
|
`EVIDENCE.md` files under `.patchwarden/evidence-packs/<lineage_id>/` without
|
|
977
1115
|
stdout/stderr tails, full diffs, verification logs, or sensitive file content.
|
|
978
1116
|
|
|
1117
|
+
Goal Session state changes are serialized by a shared cross-process mutation
|
|
1118
|
+
lock and committed atomically. A non-empty Goal automatically becomes
|
|
1119
|
+
`completed` after every subgoal is accepted. `create_subgoal_task` treats the
|
|
1120
|
+
Goal's stored `repo_path` as authoritative and rejects a caller-supplied mismatch
|
|
1121
|
+
with `goal_repo_mismatch`; isolated worktrees are created from that repository,
|
|
1122
|
+
and create/merge/discard share a repository lifecycle lock.
|
|
1123
|
+
|
|
979
1124
|
`full` additionally provides:
|
|
980
1125
|
|
|
981
1126
|
- `get_plan`
|
|
@@ -995,6 +1140,12 @@ session, read and search source files, apply hash-bound JSON patches, run
|
|
|
995
1140
|
exactly allowlisted verification commands or a bounded verification bundle, finalize the evidence, and audit
|
|
996
1141
|
the result without a local execution agent.
|
|
997
1142
|
|
|
1143
|
+
Direct patch and sync operations accept only size-bounded UTF-8 text, count
|
|
1144
|
+
patch limits in UTF-8 bytes, reject credential-like results, revalidate hashes
|
|
1145
|
+
immediately before replacement, and serialize patch/sync/verify/finalize/audit
|
|
1146
|
+
for each session. Direct still does not expose shell, delete, rename, commit,
|
|
1147
|
+
push, publish, or deployment operations.
|
|
1148
|
+
|
|
998
1149
|
Enable it in the trusted local configuration while keeping the ordinary Core
|
|
999
1150
|
profile unchanged:
|
|
1000
1151
|
|
|
@@ -1017,6 +1168,17 @@ the Watcher, and retains the existing DPAPI credential handling. In a fresh
|
|
|
1017
1168
|
ChatGPT conversation, `health_check` should report `chatgpt_direct`, fourteen
|
|
1018
1169
|
tools, and `direct_profile_enabled=true`.
|
|
1019
1170
|
|
|
1171
|
+
## Ecosystem guides
|
|
1172
|
+
|
|
1173
|
+
- [Why PatchWarden](docs/why-patchwarden.md)
|
|
1174
|
+
- [Evidence Pack v2 schema](docs/evidence-pack-schema.md)
|
|
1175
|
+
- [Spec Kit integration](docs/spec-kit-integration.md)
|
|
1176
|
+
- [AgentSeal integration](docs/agentseal-integration.md)
|
|
1177
|
+
- [MCP Inspector testing](docs/mcp-inspector-testing.md)
|
|
1178
|
+
- [OpenCode worker integration](docs/opencode-worker.md)
|
|
1179
|
+
- [OpenHands worker integration](docs/openhands-worker.md)
|
|
1180
|
+
- [Threat model](docs/threat-model.md)
|
|
1181
|
+
|
|
1020
1182
|
## Security boundaries and local data
|
|
1021
1183
|
|
|
1022
1184
|
Primary protections:
|
|
@@ -1025,9 +1187,10 @@ Primary protections:
|
|
|
1025
1187
|
- Agent commands and argument templates must be configured in advance.
|
|
1026
1188
|
- Verification commands must exactly match the allowlist.
|
|
1027
1189
|
- File access is contained to `workspaceRoot`.
|
|
1028
|
-
- Sensitive filenames and obvious credential-read plans are blocked
|
|
1029
|
-
|
|
1030
|
-
-
|
|
1190
|
+
- Sensitive filenames and obvious credential-read plans are blocked;
|
|
1191
|
+
`.patchwarden/` does not bypass this check.
|
|
1192
|
+
- Credential-like diff content is redacted before persistence and marks the task as a policy violation.
|
|
1193
|
+
- HTTP services bind only to `127.0.0.1` and reject non-loopback Host headers.
|
|
1031
1194
|
- The Runner does not automatically commit, push, publish, or reset.
|
|
1032
1195
|
|
|
1033
1196
|
Protect these local paths:
|
|
@@ -1116,12 +1279,17 @@ and release-asset checksums independently.
|
|
|
1116
1279
|
|
|
1117
1280
|
## Related documentation
|
|
1118
1281
|
|
|
1119
|
-
- [
|
|
1120
|
-
- [v0.6.
|
|
1121
|
-
- [v0.6.
|
|
1282
|
+
- [Windows Desktop installer](docs/desktop-app.md)
|
|
1283
|
+
- [v0.6.4 release notes](docs/archive/releases/release-v0.6.4.md)
|
|
1284
|
+
- [v0.6.1 release notes](docs/archive/releases/release-v0.6.1.md)
|
|
1285
|
+
- [v0.6.0 release notes](docs/archive/releases/release-v0.6.0.md)
|
|
1122
1286
|
- [ChatGPT usage guide](docs/chatgpt-usage.md)
|
|
1123
1287
|
- [Migration guide](docs/migration-from-safe-bifrost.md)
|
|
1124
1288
|
- [ChatGPT Connector demo](docs/demo.md)
|
|
1289
|
+
- [Dashboard overview](docs/dashboard-overview.md)
|
|
1290
|
+
- [Task safe review workflow](docs/task-safe-review-workflow.md)
|
|
1291
|
+
- [Lineage and Evidence Pack workflow](docs/lineage-evidence-pack-workflow.md)
|
|
1292
|
+
- [Direct session workflow](docs/direct-session-workflow.md)
|
|
1125
1293
|
- [OpenAI tunnel examples](examples/openai-tunnel/README.md)
|
|
1126
1294
|
- [ChatGPT test prompt](examples/openai-tunnel/chatgpt-test-prompt.md)
|
|
1127
1295
|
|
|
@@ -1137,7 +1305,7 @@ and release-asset checksums independently.
|
|
|
1137
1305
|
- [x] Release Gate (five-stage pre-release verification)
|
|
1138
1306
|
- [x] Worktree isolation
|
|
1139
1307
|
- [x] Multi-agent routing
|
|
1140
|
-
- [
|
|
1308
|
+
- [x] Local dashboard
|
|
1141
1309
|
|
|
1142
1310
|
## License
|
|
1143
1311
|
|