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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { auditDirectSession, } from "
|
|
2
|
-
import { updateDirectSession } from "
|
|
1
|
+
import { auditDirectSession, } from "../../direct/directAudit.js";
|
|
2
|
+
import { updateDirectSession } from "../../direct/directSessionStore.js";
|
|
3
3
|
// ── Main function ──────────────────────────────────────────────────
|
|
4
4
|
export function auditSession(input) {
|
|
5
5
|
const { session_id } = input;
|
|
@@ -32,97 +32,42 @@ export interface AuditTaskOutput {
|
|
|
32
32
|
manual_verification_items: string[];
|
|
33
33
|
recommended_next_actions: string[];
|
|
34
34
|
}
|
|
35
|
+
import type { ChangedFile } from "../../runner/changeCapture.js";
|
|
35
36
|
/**
|
|
36
37
|
* Check 1: forbidden_scope_violation (fail level).
|
|
37
38
|
* Returns null when no forbidden patterns are configured (skip).
|
|
38
39
|
* Returns pass when changed files do not match any forbidden pattern.
|
|
39
40
|
* Returns fail when any changed file path (or old_path) matches a forbidden glob.
|
|
40
41
|
*/
|
|
41
|
-
export declare function checkForbiddenScope(changedFiles:
|
|
42
|
-
name: string;
|
|
43
|
-
result: string;
|
|
44
|
-
detail: string;
|
|
45
|
-
} | null;
|
|
42
|
+
export declare function checkForbiddenScope(changedFiles: ChangedFile[], forbidden: string[] | null): AuditCheck | null;
|
|
46
43
|
/**
|
|
47
44
|
* Check 2: done_evidence_missing (warn level).
|
|
48
45
|
* Returns null when no done_evidence list is configured (skip).
|
|
49
46
|
* Returns pass when all listed files exist in the task directory.
|
|
50
47
|
* Returns warn when any listed file is missing.
|
|
51
48
|
*/
|
|
52
|
-
export declare function checkDoneEvidenceMissing(taskDir:
|
|
53
|
-
name: string;
|
|
54
|
-
result: string;
|
|
55
|
-
detail: string;
|
|
56
|
-
} | null;
|
|
49
|
+
export declare function checkDoneEvidenceMissing(taskDir: string, doneEvidence: string[] | null): AuditCheck | null;
|
|
57
50
|
/**
|
|
58
51
|
* Check 3: readme_changelog_sync (warn level).
|
|
59
52
|
* Returns null when no code files (by extension) were changed (skip).
|
|
60
53
|
* Returns pass when README.md or CHANGELOG.md (basename, case-insensitive) is also changed.
|
|
61
54
|
* Returns warn when code changed but neither documentation file was updated.
|
|
62
55
|
*/
|
|
63
|
-
export declare function checkReadmeChangelogSync(changedFiles:
|
|
64
|
-
name: string;
|
|
65
|
-
result: string;
|
|
66
|
-
detail: string;
|
|
67
|
-
} | null;
|
|
56
|
+
export declare function checkReadmeChangelogSync(changedFiles: ChangedFile[]): AuditCheck | null;
|
|
68
57
|
/**
|
|
69
58
|
* Check 4: package_manifest_consistency (warn level).
|
|
70
59
|
* Returns null when package.json is not among changed files (skip).
|
|
71
60
|
* Returns pass when package.json parses as JSON and has non-empty name and version strings.
|
|
72
61
|
* Returns warn otherwise.
|
|
73
62
|
*/
|
|
74
|
-
export declare function checkPackageManifestConsistency(changedFiles:
|
|
75
|
-
name: string;
|
|
76
|
-
result: string;
|
|
77
|
-
detail: string;
|
|
78
|
-
} | null;
|
|
63
|
+
export declare function checkPackageManifestConsistency(changedFiles: ChangedFile[], repoPathSafe: string): AuditCheck | null;
|
|
79
64
|
/**
|
|
80
65
|
* Check 5: sensitive_path_access (fail level).
|
|
81
66
|
* Returns null when there are no changed files (skip).
|
|
82
67
|
* Returns pass when no changed file path (or old_path) is sensitive.
|
|
83
68
|
* Returns fail when any changed file path is flagged by isSensitivePath.
|
|
84
69
|
*/
|
|
85
|
-
export declare function checkSensitivePathAccess(changedFiles:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
detail: string;
|
|
89
|
-
} | null;
|
|
90
|
-
export declare function checkUnrecordedCommandExecution(testLogContent: string | null, resultMdContent: string | null, verifyCommands: string[], testCommand: string | null, repoPath?: string | null): {
|
|
91
|
-
name: string;
|
|
92
|
-
result: string;
|
|
93
|
-
detail: string;
|
|
94
|
-
} | null;
|
|
95
|
-
export declare function auditTask(taskId: any): {
|
|
96
|
-
task_id: any;
|
|
97
|
-
verdict: string;
|
|
98
|
-
acceptance: {
|
|
99
|
-
verdict: import("../goal/acceptanceEngine.js").AcceptanceVerdict;
|
|
100
|
-
status: string;
|
|
101
|
-
reason: string;
|
|
102
|
-
reasons: string[];
|
|
103
|
-
required_evidence: string[];
|
|
104
|
-
next_suggested_task: string;
|
|
105
|
-
fail_checks: import("../goal/acceptanceEngine.js").AcceptanceCheck[];
|
|
106
|
-
warn_checks: import("../goal/acceptanceEngine.js").AcceptanceCheck[];
|
|
107
|
-
};
|
|
108
|
-
summary: string;
|
|
109
|
-
checks: {
|
|
110
|
-
name: string;
|
|
111
|
-
result: string;
|
|
112
|
-
detail: string;
|
|
113
|
-
}[];
|
|
114
|
-
risks: {
|
|
115
|
-
severity: string;
|
|
116
|
-
description: string;
|
|
117
|
-
}[];
|
|
118
|
-
confirmed_failures: {
|
|
119
|
-
name: string;
|
|
120
|
-
result: string;
|
|
121
|
-
detail: string;
|
|
122
|
-
}[];
|
|
123
|
-
possible_false_positives: any[];
|
|
124
|
-
manual_verification_required: boolean;
|
|
125
|
-
manual_verification_items: any[];
|
|
126
|
-
recommended_next_actions: string[];
|
|
127
|
-
};
|
|
70
|
+
export declare function checkSensitivePathAccess(changedFiles: ChangedFile[]): AuditCheck | null;
|
|
71
|
+
export declare function checkUnrecordedCommandExecution(testLogContent: string | null, resultMdContent: string | null, verifyCommands: string[], testCommand: string | null, repoPath?: string | null): AuditCheck | null;
|
|
72
|
+
export declare function auditTask(taskId: string): AuditTaskOutput;
|
|
128
73
|
export {};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import { readFileSync, existsSync, writeFileSync, readdirSync, statSync } from "node:fs";
|
|
1
|
+
import { readFileSync, existsSync, opendirSync, statSync } from "node:fs";
|
|
3
2
|
import { join, resolve, relative, basename, sep, isAbsolute } from "node:path";
|
|
4
|
-
import { getTasksDir, getConfig } from "
|
|
5
|
-
import { guardReadPath, guardWorkspacePath } from "
|
|
6
|
-
import { guardSensitivePath, isSensitivePath } from "
|
|
7
|
-
import { evaluateAcceptance } from "
|
|
8
|
-
import { renderAcceptanceMarkdown } from "
|
|
3
|
+
import { getTasksDir, getConfig } from "../../config.js";
|
|
4
|
+
import { guardReadPath, guardWorkspacePath } from "../../security/pathGuard.js";
|
|
5
|
+
import { guardSensitivePath, isSensitivePath } from "../../security/sensitiveGuard.js";
|
|
6
|
+
import { evaluateAcceptance } from "../../goal/acceptanceEngine.js";
|
|
7
|
+
import { renderAcceptanceMarkdown } from "../../goal/acceptanceTemplate.js";
|
|
8
|
+
import { atomicWriteFileSync } from "../../utils/atomicFile.js";
|
|
9
|
+
import { mutateTaskStatus } from "../../runner/taskStatusStore.js";
|
|
10
|
+
import { readTextFilePrefixSync, readTextFileTailLinesSync, } from "../../utils/boundedFile.js";
|
|
9
11
|
// Release claim patterns — anything that claims remote publish/release/deploy
|
|
10
12
|
const RELEASE_PATTERNS = [
|
|
11
13
|
/npm\s+package\s+version\s+published/i,
|
|
@@ -17,6 +19,10 @@ const RELEASE_PATTERNS = [
|
|
|
17
19
|
/npm\s+publish\s+completed/i,
|
|
18
20
|
/deploy(ed|ment)?\s+(to|on)\s+(npm|registry|github)/i,
|
|
19
21
|
];
|
|
22
|
+
const MAX_AUDIT_DOC_FILES = 200;
|
|
23
|
+
const MAX_AUDIT_DOC_FILE_BYTES = 512 * 1024;
|
|
24
|
+
const MAX_AUDIT_DOC_TOTAL_BYTES = 4 * 1024 * 1024;
|
|
25
|
+
const MAX_AUDIT_EVIDENCE_BYTES = 1024 * 1024;
|
|
20
26
|
function scanForReleaseClaims(text) {
|
|
21
27
|
const found = [];
|
|
22
28
|
for (const pattern of RELEASE_PATTERNS) {
|
|
@@ -26,24 +32,57 @@ function scanForReleaseClaims(text) {
|
|
|
26
32
|
}
|
|
27
33
|
return found;
|
|
28
34
|
}
|
|
29
|
-
function findMdFiles(dir, maxDepth = 3) {
|
|
35
|
+
function findMdFiles(dir, maxDepth = 3, maxFiles = MAX_AUDIT_DOC_FILES) {
|
|
30
36
|
const results = [];
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
const pending = [{ path: dir, depth: maxDepth }];
|
|
38
|
+
const maxDirectories = maxFiles * 4;
|
|
39
|
+
let visitedDirectories = 0;
|
|
40
|
+
let truncated = false;
|
|
41
|
+
while (pending.length > 0 && results.length < maxFiles && visitedDirectories < maxDirectories) {
|
|
42
|
+
const current = pending.pop();
|
|
43
|
+
if (!existsSync(current.path) || current.depth <= 0)
|
|
44
|
+
continue;
|
|
45
|
+
visitedDirectories += 1;
|
|
46
|
+
let handle;
|
|
47
|
+
try {
|
|
48
|
+
handle = opendirSync(current.path);
|
|
49
|
+
while (results.length < maxFiles) {
|
|
50
|
+
const entry = handle.readSync();
|
|
51
|
+
if (!entry)
|
|
52
|
+
break;
|
|
53
|
+
const full = join(current.path, entry.name);
|
|
54
|
+
if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
|
|
55
|
+
if (pending.length < maxDirectories)
|
|
56
|
+
pending.push({ path: full, depth: current.depth - 1 });
|
|
57
|
+
else
|
|
58
|
+
truncated = true;
|
|
59
|
+
}
|
|
60
|
+
else if (entry.isFile() && entry.name.toLowerCase().endsWith(".md")) {
|
|
61
|
+
results.push(full);
|
|
62
|
+
}
|
|
39
63
|
}
|
|
40
|
-
|
|
41
|
-
|
|
64
|
+
}
|
|
65
|
+
catch { /* skip unreadable dirs */ }
|
|
66
|
+
finally {
|
|
67
|
+
try {
|
|
68
|
+
handle?.closeSync();
|
|
42
69
|
}
|
|
70
|
+
catch { /* best effort */ }
|
|
43
71
|
}
|
|
44
72
|
}
|
|
45
|
-
|
|
46
|
-
return results;
|
|
73
|
+
truncated ||= pending.length > 0 || results.length >= maxFiles || visitedDirectories >= maxDirectories;
|
|
74
|
+
return { files: results, truncated };
|
|
75
|
+
}
|
|
76
|
+
function readAuditEvidence(path) {
|
|
77
|
+
const half = Math.floor(MAX_AUDIT_EVIDENCE_BYTES / 2);
|
|
78
|
+
const prefix = readTextFilePrefixSync(path, half);
|
|
79
|
+
if (!prefix.truncated)
|
|
80
|
+
return { content: prefix.content, truncated: false };
|
|
81
|
+
const tail = readTextFileTailLinesSync(path, 1000, half);
|
|
82
|
+
return {
|
|
83
|
+
content: `${prefix.content}\n[...audit evidence truncated...]\n${tail}`,
|
|
84
|
+
truncated: true,
|
|
85
|
+
};
|
|
47
86
|
}
|
|
48
87
|
// ── v0.7.2: New audit checks (exported for testing) ────────────────
|
|
49
88
|
/**
|
|
@@ -288,9 +327,10 @@ function readPackageScripts(repoPath) {
|
|
|
288
327
|
try {
|
|
289
328
|
guardSensitivePath(pkgJsonPath);
|
|
290
329
|
const parsed = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
291
|
-
|
|
330
|
+
const scripts = parsed.scripts;
|
|
331
|
+
if (!scripts || typeof scripts !== "object" || Array.isArray(scripts))
|
|
292
332
|
return {};
|
|
293
|
-
return Object.fromEntries(Object.entries(
|
|
333
|
+
return Object.fromEntries(Object.entries(scripts).filter(([, value]) => typeof value === "string"));
|
|
294
334
|
}
|
|
295
335
|
catch {
|
|
296
336
|
return {};
|
|
@@ -370,8 +410,8 @@ function findHighRiskCommandEvidence(text) {
|
|
|
370
410
|
return [...new Set(found)];
|
|
371
411
|
}
|
|
372
412
|
export function checkUnrecordedCommandExecution(testLogContent, resultMdContent, verifyCommands, testCommand, repoPath = null) {
|
|
373
|
-
const hasLog = testLogContent && testLogContent.length > 0;
|
|
374
|
-
const hasResult = resultMdContent && resultMdContent.length > 0;
|
|
413
|
+
const hasLog = !!testLogContent && testLogContent.length > 0;
|
|
414
|
+
const hasResult = !!resultMdContent && resultMdContent.length > 0;
|
|
375
415
|
if (!hasLog && !hasResult)
|
|
376
416
|
return null;
|
|
377
417
|
const combined = `${testLogContent || ""}\n${resultMdContent || ""}`;
|
|
@@ -381,9 +421,9 @@ export function checkUnrecordedCommandExecution(testLogContent, resultMdContent,
|
|
|
381
421
|
}
|
|
382
422
|
const whitelist = buildCommandWhitelist(verifyCommands, testCommand, repoPath);
|
|
383
423
|
const discovered = [];
|
|
384
|
-
if (hasLog)
|
|
424
|
+
if (hasLog && testLogContent)
|
|
385
425
|
discovered.push(...extractCommands(testLogContent));
|
|
386
|
-
if (hasResult)
|
|
426
|
+
if (hasResult && resultMdContent)
|
|
387
427
|
discovered.push(...extractCommands(resultMdContent));
|
|
388
428
|
const unrecorded = new Set();
|
|
389
429
|
for (const cmd of discovered) {
|
|
@@ -606,20 +646,32 @@ export function auditTask(taskId) {
|
|
|
606
646
|
if (existsSync(readmePath))
|
|
607
647
|
docsToScan.push(readmePath);
|
|
608
648
|
const docsDir = join(repoPathSafe, "docs");
|
|
649
|
+
let markdownEnumerationTruncated = false;
|
|
609
650
|
if (existsSync(docsDir)) {
|
|
610
|
-
|
|
651
|
+
const markdown = findMdFiles(docsDir);
|
|
652
|
+
docsToScan.push(...markdown.files);
|
|
653
|
+
markdownEnumerationTruncated = markdown.truncated;
|
|
611
654
|
}
|
|
612
655
|
// Collect all npm run references from all docs
|
|
613
656
|
const allNpmRunRefs = new Set();
|
|
614
657
|
const allReleaseClaims = [];
|
|
658
|
+
let remainingDocBytes = MAX_AUDIT_DOC_TOTAL_BYTES;
|
|
659
|
+
let documentScanTruncated = markdownEnumerationTruncated || docsToScan.length > MAX_AUDIT_DOC_FILES;
|
|
615
660
|
for (const docPath of docsToScan) {
|
|
661
|
+
if (remainingDocBytes <= 0) {
|
|
662
|
+
documentScanTruncated = true;
|
|
663
|
+
break;
|
|
664
|
+
}
|
|
616
665
|
let content;
|
|
617
666
|
try {
|
|
618
667
|
if (docPath !== resultFile) {
|
|
619
668
|
guardReadPath(docPath, config.workspaceRoot);
|
|
620
669
|
guardSensitivePath(docPath);
|
|
621
670
|
}
|
|
622
|
-
|
|
671
|
+
const bounded = readTextFilePrefixSync(docPath, Math.min(MAX_AUDIT_DOC_FILE_BYTES, remainingDocBytes));
|
|
672
|
+
content = bounded.content;
|
|
673
|
+
remainingDocBytes -= Buffer.byteLength(content, "utf-8");
|
|
674
|
+
documentScanTruncated ||= bounded.truncated;
|
|
623
675
|
}
|
|
624
676
|
catch {
|
|
625
677
|
continue;
|
|
@@ -636,6 +688,14 @@ export function auditTask(taskId) {
|
|
|
636
688
|
for (const c of claims)
|
|
637
689
|
allReleaseClaims.push(`[${relative(repoPathSafe, docPath) || docPath}] ${c}`);
|
|
638
690
|
}
|
|
691
|
+
if (documentScanTruncated) {
|
|
692
|
+
checks.push({
|
|
693
|
+
name: "documentation_scan_bounded",
|
|
694
|
+
result: "warn",
|
|
695
|
+
detail: `Documentation scan reached its ${MAX_AUDIT_DOC_FILES}-file or ${MAX_AUDIT_DOC_TOTAL_BYTES}-byte safety budget.`,
|
|
696
|
+
});
|
|
697
|
+
addManualVerification("Review documentation omitted by the bounded audit scan.");
|
|
698
|
+
}
|
|
639
699
|
// Cross-check npm run refs against package.json scripts
|
|
640
700
|
for (const scriptName of allNpmRunRefs) {
|
|
641
701
|
if (pkgScripts.length > 0 && !pkgScripts.includes(scriptName)) {
|
|
@@ -682,7 +742,10 @@ export function auditTask(taskId) {
|
|
|
682
742
|
if (hasTestLog) {
|
|
683
743
|
let logContent;
|
|
684
744
|
try {
|
|
685
|
-
|
|
745
|
+
const evidence = readAuditEvidence(testLogFile);
|
|
746
|
+
logContent = evidence.content;
|
|
747
|
+
if (evidence.truncated)
|
|
748
|
+
addManualVerification("test.log exceeded the audit read budget; inspect the complete local artifact.");
|
|
686
749
|
}
|
|
687
750
|
catch {
|
|
688
751
|
logContent = "";
|
|
@@ -720,7 +783,10 @@ export function auditTask(taskId) {
|
|
|
720
783
|
let resultMdContent = null;
|
|
721
784
|
if (hasResult) {
|
|
722
785
|
try {
|
|
723
|
-
|
|
786
|
+
const evidence = readAuditEvidence(resultFile);
|
|
787
|
+
resultMdContent = evidence.content;
|
|
788
|
+
if (evidence.truncated)
|
|
789
|
+
addManualVerification("result.md exceeded the audit read budget; inspect the complete local artifact.");
|
|
724
790
|
}
|
|
725
791
|
catch {
|
|
726
792
|
resultMdContent = null;
|
|
@@ -788,7 +854,7 @@ export function auditTask(taskId) {
|
|
|
788
854
|
"## Recommended Actions",
|
|
789
855
|
...actions.map((a) => `- ${a}`),
|
|
790
856
|
].join("\n");
|
|
791
|
-
|
|
857
|
+
atomicWriteFileSync(join(taskDir, "independent-review.md"), reviewMd);
|
|
792
858
|
// ── v0.7.2: 集成 acceptanceEngine ──
|
|
793
859
|
const releaseClaimsUnverified = allReleaseClaims.length > 0;
|
|
794
860
|
const acceptanceEvidence = {
|
|
@@ -804,7 +870,11 @@ export function auditTask(taskId) {
|
|
|
804
870
|
return null;
|
|
805
871
|
try {
|
|
806
872
|
const v = JSON.parse(readFileSync(verifyJsonFile, "utf-8"));
|
|
807
|
-
|
|
873
|
+
if (v.status === "passed")
|
|
874
|
+
return "passed";
|
|
875
|
+
if (v.status === "failed")
|
|
876
|
+
return "failed";
|
|
877
|
+
return "skipped";
|
|
808
878
|
}
|
|
809
879
|
catch {
|
|
810
880
|
return null;
|
|
@@ -823,16 +893,20 @@ export function auditTask(taskId) {
|
|
|
823
893
|
const acceptanceResult = evaluateAcceptance(acceptanceEvidence);
|
|
824
894
|
// 回写 status.json 的 acceptance_status(仅对 done_by_agent 有意义)
|
|
825
895
|
if (taskStatus === "done_by_agent") {
|
|
826
|
-
const
|
|
827
|
-
...statusData,
|
|
896
|
+
const statusPatch = {
|
|
828
897
|
acceptance_status: acceptanceResult.acceptance_status,
|
|
829
|
-
updated_at: new Date().toISOString(),
|
|
830
898
|
};
|
|
831
|
-
|
|
899
|
+
mutateTaskStatus(statusFile, (current) => {
|
|
900
|
+
if (current.status !== "done_by_agent") {
|
|
901
|
+
return { result: current };
|
|
902
|
+
}
|
|
903
|
+
const next = { ...current, ...statusPatch, updated_at: new Date().toISOString() };
|
|
904
|
+
return { next, result: next };
|
|
905
|
+
});
|
|
832
906
|
}
|
|
833
907
|
// 导出 ACCEPTANCE.md
|
|
834
908
|
const acceptanceMd = renderAcceptanceMarkdown(taskId, acceptanceResult, acceptanceEvidence);
|
|
835
|
-
|
|
909
|
+
atomicWriteFileSync(join(taskDir, "ACCEPTANCE.md"), acceptanceMd);
|
|
836
910
|
return {
|
|
837
911
|
task_id: taskId,
|
|
838
912
|
verdict,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ToolCatalogSnapshot } from "
|
|
1
|
+
import type { ToolCatalogSnapshot } from "../catalog/toolCatalog.js";
|
|
2
2
|
export interface HealthCheckInput {
|
|
3
3
|
detail?: "standard" | "self_diagnostic";
|
|
4
4
|
}
|
|
@@ -14,9 +14,9 @@ export declare function healthCheck(catalog?: ToolCatalogSnapshot, input?: Healt
|
|
|
14
14
|
recent_tasks_returned: number;
|
|
15
15
|
recent_failures: {
|
|
16
16
|
task_id: string;
|
|
17
|
-
status: import("
|
|
18
|
-
phase: import("
|
|
19
|
-
pending_reason: import("
|
|
17
|
+
status: import("../tasks/createTask.js").TaskStatus;
|
|
18
|
+
phase: import("../tasks/createTask.js").TaskPhase;
|
|
19
|
+
pending_reason: import("../../watcherStatus.js").PendingReason;
|
|
20
20
|
error: string | null;
|
|
21
21
|
}[];
|
|
22
22
|
} | undefined;
|
|
@@ -37,7 +37,7 @@ export declare function healthCheck(catalog?: ToolCatalogSnapshot, input?: Healt
|
|
|
37
37
|
};
|
|
38
38
|
watcher: {
|
|
39
39
|
supervisor: Record<string, unknown>;
|
|
40
|
-
status: import("
|
|
40
|
+
status: import("../../watcherStatus.js").WatcherState;
|
|
41
41
|
available: boolean;
|
|
42
42
|
stale_after_seconds: number;
|
|
43
43
|
last_heartbeat_at: string | null;
|
|
@@ -65,7 +65,7 @@ export declare function healthCheck(catalog?: ToolCatalogSnapshot, input?: Healt
|
|
|
65
65
|
tunnel: Record<string, unknown> & {
|
|
66
66
|
last_error: string | null;
|
|
67
67
|
};
|
|
68
|
-
agents: import("
|
|
68
|
+
agents: import("../workspace/listAgents.js").AgentAvailability[];
|
|
69
69
|
agent_status: {
|
|
70
70
|
[k: string]: string;
|
|
71
71
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { accessSync, constants, existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { getConfig, getTasksDir, getDirectSessionsDir, resolveWorkspaceRoot } from "
|
|
5
|
-
import { listAgents } from "
|
|
6
|
-
import { redactSensitiveContent, redactSensitiveValue } from "
|
|
7
|
-
import { PATCHWARDEN_VERSION, TOOL_SCHEMA_EPOCH } from "
|
|
8
|
-
import { CHATGPT_CORE_TOOL_NAMES, CHATGPT_DIRECT_TOOL_NAMES, CHATGPT_SEARCH_TOOL_NAMES, resolveToolProfile } from "
|
|
9
|
-
import { readWatcherStatus } from "
|
|
10
|
-
import { listTasks } from "
|
|
4
|
+
import { getConfig, getTasksDir, getDirectSessionsDir, resolveWorkspaceRoot } from "../../config.js";
|
|
5
|
+
import { listAgents } from "../workspace/listAgents.js";
|
|
6
|
+
import { redactSensitiveContent, redactSensitiveValue } from "../../security/contentRedaction.js";
|
|
7
|
+
import { PATCHWARDEN_VERSION, TOOL_SCHEMA_EPOCH } from "../../version.js";
|
|
8
|
+
import { CHATGPT_CORE_TOOL_NAMES, CHATGPT_DIRECT_TOOL_NAMES, CHATGPT_SEARCH_TOOL_NAMES, resolveToolProfile } from "../catalog/toolCatalog.js";
|
|
9
|
+
import { readWatcherStatus } from "../../watcherStatus.js";
|
|
10
|
+
import { listTasks } from "../tasks/listTasks.js";
|
|
11
11
|
const SERVER_STARTED_AT = Date.now();
|
|
12
12
|
export function healthCheck(catalog, input = {}) {
|
|
13
13
|
const config = getConfig();
|
|
@@ -185,7 +185,7 @@ function directoryStatus(path, allowCreatable, createRoot) {
|
|
|
185
185
|
accessSync(parent, constants.R_OK | constants.W_OK);
|
|
186
186
|
return { available: true, path, readable: false, writable: true, reason: "Directory will be created on first use." };
|
|
187
187
|
}
|
|
188
|
-
catch { }
|
|
188
|
+
catch { } // probe failure handled by return value
|
|
189
189
|
}
|
|
190
190
|
return { available: false, path, readable: false, writable: false, reason: "Directory does not exist." };
|
|
191
191
|
}
|
|
@@ -195,12 +195,12 @@ function directoryStatus(path, allowCreatable, createRoot) {
|
|
|
195
195
|
accessSync(path, constants.R_OK);
|
|
196
196
|
readable = true;
|
|
197
197
|
}
|
|
198
|
-
catch { }
|
|
198
|
+
catch { } // probe failure handled by return value
|
|
199
199
|
try {
|
|
200
200
|
accessSync(path, constants.W_OK);
|
|
201
201
|
writable = true;
|
|
202
202
|
}
|
|
203
|
-
catch { }
|
|
203
|
+
catch { } // probe failure handled by return value
|
|
204
204
|
return {
|
|
205
205
|
available: readable && writable,
|
|
206
206
|
path,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type PatchWardenConfig } from "
|
|
2
|
-
import type { TaskStatus, TaskPhase, AcceptanceStatus } from "
|
|
3
|
-
import { type DiagnosisType, type DiagnosisConfidence } from "
|
|
1
|
+
import { type PatchWardenConfig } from "../../config.js";
|
|
2
|
+
import type { TaskStatus, TaskPhase, AcceptanceStatus } from "../tasks/createTask.js";
|
|
3
|
+
import { type DiagnosisType, type DiagnosisConfidence } from "../tasks/diagnoseTask.js";
|
|
4
4
|
export interface SafeStatusOutput {
|
|
5
5
|
task_id: string;
|
|
6
6
|
status: TaskStatus | "not_found";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from "node:fs";
|
|
2
2
|
import { resolve, join } from "node:path";
|
|
3
|
-
import { getTasksDir, getConfig } from "
|
|
4
|
-
import { guardReadPath } from "
|
|
5
|
-
import { guardSensitivePath } from "
|
|
6
|
-
import { readTaskRuntime } from "
|
|
7
|
-
import { readWatcherStatus } from "
|
|
8
|
-
import { diagnoseTask } from "
|
|
3
|
+
import { getTasksDir, getConfig } from "../../config.js";
|
|
4
|
+
import { guardReadPath } from "../../security/pathGuard.js";
|
|
5
|
+
import { guardSensitivePath } from "../../security/sensitiveGuard.js";
|
|
6
|
+
import { readTaskRuntime } from "../../runner/taskRuntime.js";
|
|
7
|
+
import { readWatcherStatus } from "../../watcherStatus.js";
|
|
8
|
+
import { diagnoseTask } from "../tasks/diagnoseTask.js";
|
|
9
9
|
export function safeStatus(taskId, config) {
|
|
10
10
|
const cfg = config || getConfig();
|
|
11
11
|
const tasksDir = getTasksDir(cfg);
|
|
@@ -2,6 +2,7 @@ export interface SafeViewOptions {
|
|
|
2
2
|
max_items?: number;
|
|
3
3
|
}
|
|
4
4
|
export declare function safeResult(taskId: string, options?: SafeViewOptions): {
|
|
5
|
+
schema_version: string;
|
|
5
6
|
task_id: string;
|
|
6
7
|
status: string;
|
|
7
8
|
terminal: boolean;
|
|
@@ -32,6 +33,7 @@ export declare function safeResult(taskId: string, options?: SafeViewOptions): {
|
|
|
32
33
|
redaction_categories: string[];
|
|
33
34
|
};
|
|
34
35
|
export declare function safeTestSummary(taskId: string): {
|
|
36
|
+
schema_version: string;
|
|
35
37
|
task_id: string;
|
|
36
38
|
status: string;
|
|
37
39
|
command_count: number;
|
|
@@ -41,19 +43,20 @@ export declare function safeTestSummary(taskId: string): {
|
|
|
41
43
|
commands: {
|
|
42
44
|
command: string;
|
|
43
45
|
status: string;
|
|
44
|
-
exit_code:
|
|
46
|
+
exit_code: {} | null;
|
|
45
47
|
duration_ms: number;
|
|
46
48
|
}[];
|
|
47
49
|
headline: string;
|
|
48
50
|
};
|
|
49
51
|
export declare function safeDiffSummary(taskId: string, options?: SafeViewOptions): {
|
|
52
|
+
schema_version: string;
|
|
50
53
|
task_id: string;
|
|
51
54
|
changed_files_total: number;
|
|
52
55
|
additions: number;
|
|
53
56
|
deletions: number;
|
|
54
57
|
diff_available: boolean;
|
|
55
58
|
diff_truncated: boolean;
|
|
56
|
-
patch_mode:
|
|
59
|
+
patch_mode: {} | null;
|
|
57
60
|
files: {
|
|
58
61
|
path: string;
|
|
59
62
|
old_path: string | null;
|
|
@@ -62,13 +65,14 @@ export declare function safeDiffSummary(taskId: string, options?: SafeViewOption
|
|
|
62
65
|
tracked: boolean;
|
|
63
66
|
ignored: boolean;
|
|
64
67
|
}[];
|
|
65
|
-
artifact_hygiene_counts: Record<string,
|
|
68
|
+
artifact_hygiene_counts: Record<string, unknown>;
|
|
66
69
|
large_diff_omitted: boolean;
|
|
67
70
|
truncated: boolean;
|
|
68
71
|
};
|
|
69
72
|
export declare function safeAudit(taskId: string, options?: SafeViewOptions): {
|
|
73
|
+
schema_version: string;
|
|
70
74
|
task_id: string;
|
|
71
|
-
verdict: "
|
|
75
|
+
verdict: "warn" | "pass" | "fail";
|
|
72
76
|
acceptance: {
|
|
73
77
|
verdict: string;
|
|
74
78
|
status: string;
|
|
@@ -84,17 +88,17 @@ export declare function safeAudit(taskId: string, options?: SafeViewOptions): {
|
|
|
84
88
|
};
|
|
85
89
|
checks: {
|
|
86
90
|
name: string;
|
|
87
|
-
result: "
|
|
91
|
+
result: "warn" | "pass" | "fail";
|
|
88
92
|
detail: string;
|
|
89
93
|
}[];
|
|
90
94
|
fail_checks: {
|
|
91
95
|
name: string;
|
|
92
|
-
result: "
|
|
96
|
+
result: "warn" | "pass" | "fail";
|
|
93
97
|
detail: string;
|
|
94
98
|
}[];
|
|
95
99
|
warn_checks: {
|
|
96
100
|
name: string;
|
|
97
|
-
result: "
|
|
101
|
+
result: "warn" | "pass" | "fail";
|
|
98
102
|
detail: string;
|
|
99
103
|
}[];
|
|
100
104
|
possible_false_positives: {
|
|
@@ -170,7 +174,7 @@ export declare function safeDirectSummary(sessionId: string, options?: SafeViewO
|
|
|
170
174
|
large_diff_omitted: boolean;
|
|
171
175
|
truncated: boolean;
|
|
172
176
|
};
|
|
173
|
-
export declare function safeFinalizeDirectSession(sessionId: string, options?: SafeViewOptions): {
|
|
177
|
+
export declare function safeFinalizeDirectSession(sessionId: string, options?: SafeViewOptions): Promise<{
|
|
174
178
|
finalized: boolean;
|
|
175
179
|
next_action: string;
|
|
176
180
|
view: "summary" | "finalize";
|
|
@@ -235,10 +239,10 @@ export declare function safeFinalizeDirectSession(sessionId: string, options?: S
|
|
|
235
239
|
}[];
|
|
236
240
|
large_diff_omitted: boolean;
|
|
237
241
|
truncated: boolean;
|
|
238
|
-
}
|
|
242
|
+
}>;
|
|
239
243
|
export declare function safeAuditDirectSession(sessionId: string, options?: SafeViewOptions): {
|
|
240
244
|
session_id: string;
|
|
241
|
-
decision: "
|
|
245
|
+
decision: "warn" | "pass" | "fail";
|
|
242
246
|
reason_codes: string[];
|
|
243
247
|
blocking_findings: string[];
|
|
244
248
|
warnings: string[];
|