patchwork-os 0.2.0-beta.2 → 0.2.0-beta.3
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/README.bridge.md +5 -5
- package/README.md +156 -12
- package/dist/activityLog.d.ts +6 -0
- package/dist/activityLog.js +8 -0
- package/dist/activityLog.js.map +1 -1
- package/dist/analyticsPrefs.d.ts +35 -2
- package/dist/analyticsPrefs.js +120 -21
- package/dist/analyticsPrefs.js.map +1 -1
- package/dist/analyticsSend.js +5 -1
- package/dist/analyticsSend.js.map +1 -1
- package/dist/bridge.d.ts +2 -0
- package/dist/bridge.js +111 -7
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeLockDiscovery.d.ts +27 -1
- package/dist/bridgeLockDiscovery.js +37 -11
- package/dist/bridgeLockDiscovery.js.map +1 -1
- package/dist/commands/patchworkInit.d.ts +5 -0
- package/dist/commands/patchworkInit.js +86 -7
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +51 -0
- package/dist/commands/recipe.js +353 -2
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.js +6 -3
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/commands/task.js +2 -2
- package/dist/commands/task.js.map +1 -1
- package/dist/config.d.ts +9 -2
- package/dist/config.js +35 -17
- package/dist/config.js.map +1 -1
- package/dist/connectors/tokenStorage.js +46 -10
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/featureFlags.d.ts +76 -0
- package/dist/featureFlags.js +166 -2
- package/dist/featureFlags.js.map +1 -1
- package/dist/index.js +765 -69
- package/dist/index.js.map +1 -1
- package/dist/lockfile.js +4 -1
- package/dist/lockfile.js.map +1 -1
- package/dist/patchworkConfig.js +5 -0
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/recipeOrchestration.js +35 -1
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +36 -0
- package/dist/recipeRoutes.js +231 -32
- package/dist/recipeRoutes.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +25 -5
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/chainedRunner.js +16 -2
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/connectorPreflight.d.ts +53 -0
- package/dist/recipes/connectorPreflight.js +79 -0
- package/dist/recipes/connectorPreflight.js.map +1 -0
- package/dist/recipes/githubInstallSource.d.ts +62 -0
- package/dist/recipes/githubInstallSource.js +125 -0
- package/dist/recipes/githubInstallSource.js.map +1 -0
- package/dist/recipes/haltCategory.d.ts +80 -0
- package/dist/recipes/haltCategory.js +125 -0
- package/dist/recipes/haltCategory.js.map +1 -0
- package/dist/recipes/idempotencyKey.d.ts +126 -0
- package/dist/recipes/idempotencyKey.js +298 -0
- package/dist/recipes/idempotencyKey.js.map +1 -0
- package/dist/recipes/judgeSummary.d.ts +50 -0
- package/dist/recipes/judgeSummary.js +47 -0
- package/dist/recipes/judgeSummary.js.map +1 -0
- package/dist/recipes/judgeVerdict.d.ts +48 -0
- package/dist/recipes/judgeVerdict.js +174 -0
- package/dist/recipes/judgeVerdict.js.map +1 -0
- package/dist/recipes/migrations/index.d.ts +9 -0
- package/dist/recipes/migrations/index.js +133 -0
- package/dist/recipes/migrations/index.js.map +1 -1
- package/dist/recipes/runBudget.d.ts +70 -0
- package/dist/recipes/runBudget.js +109 -0
- package/dist/recipes/runBudget.js.map +1 -0
- package/dist/recipes/scheduler.js +1 -1
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +30 -0
- package/dist/recipes/toolRegistry.js +19 -0
- package/dist/recipes/toolRegistry.js.map +1 -1
- package/dist/recipes/tools/http.d.ts +10 -0
- package/dist/recipes/tools/http.js +176 -0
- package/dist/recipes/tools/http.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +1 -0
- package/dist/recipes/tools/index.js +1 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/validation.js +1 -1
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +71 -7
- package/dist/recipes/yamlRunner.js +156 -22
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/runLog.d.ts +28 -0
- package/dist/runLog.js +5 -0
- package/dist/runLog.js.map +1 -1
- package/dist/server.d.ts +65 -0
- package/dist/server.js +302 -3
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.js +17 -6
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/bridgeDoctor.js +6 -2
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/ccRoutines.d.ts +221 -0
- package/dist/tools/ccRoutines.js +264 -0
- package/dist/tools/ccRoutines.js.map +1 -0
- package/dist/tools/getCodeCoverage.js +7 -3
- package/dist/tools/getCodeCoverage.js.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/recentTracesDigest.js +56 -11
- package/dist/tools/recentTracesDigest.js.map +1 -1
- package/dist/tools/testRunners/vitestJest.js +3 -1
- package/dist/tools/testRunners/vitestJest.js.map +1 -1
- package/dist/tools/utils.js +6 -3
- package/dist/tools/utils.js.map +1 -1
- package/package.json +17 -6
- package/scripts/postinstall.mjs +27 -0
- package/scripts/smoke/run-all.mjs +162 -0
- package/scripts/start-all.mjs +513 -0
- package/scripts/start-all.ps1 +209 -0
- package/scripts/start-all.sh +73 -17
- package/scripts/start-orchestrator.ps1 +158 -0
- package/scripts/start-remote.mjs +122 -0
- package/templates/automation-policies/recipe-authoring.json +1 -1
- package/templates/automation-policies/security-first.json +1 -1
- package/templates/automation-policies/strict-lint.json +1 -1
- package/templates/automation-policies/test-driven.json +1 -1
- package/templates/automation-policy.example.json +1 -1
- package/templates/co.patchwork-os.bridge.plist +1 -1
- package/templates/recipes/approval-queue-ui-test.yaml +1 -1
- package/templates/recipes/ctx-loop-test.yaml +1 -1
- package/templates/recipes/webhook/apple-watch-health-log.yaml +145 -0
- package/dist/commands/marketplace.d.ts +0 -16
- package/dist/commands/marketplace.js +0 -32
- package/dist/commands/marketplace.js.map +0 -1
- package/dist/recipes/legacyRecipeCompat.d.ts +0 -10
- package/dist/recipes/legacyRecipeCompat.js +0 -131
- package/dist/recipes/legacyRecipeCompat.js.map +0 -1
package/dist/runLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runLog.js","sourceRoot":"","sources":["../src/runLog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAqF7B,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC9C,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAqBjC,MAAM,OAAO,YAAY;IAQM;IAPrB,IAAI,GAAgB,EAAE,CAAC;IACvB,GAAG,GAAG,CAAC,CAAC;IACC,IAAI,CAAS;IACb,SAAS,CAAS;IAC3B,YAAY,GAAG,CAAC,CAAC;IACR,GAAG,CAAe;IAEnC,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC;YACH,mEAAmE;YACnE,+DAA+D;YAC/D,kEAAkE;YAClE,4CAA4C;YAC5C,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACjB,6BAA6B,IAAI,CAAC,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY,CACjB,aAAiC;QAEjC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAChC,0DAA0D;QAC1D,+EAA+E;QAC/E,MAAM,CAAC,GAAG,2CAA2C,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,CAAC,CAAC,CAAC,CAAe;YAC3B,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAUN;QACC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAmB,CAAC;QACxC,IACE,MAAM,KAAK,MAAM;YACjB,MAAM,KAAK,OAAO;YAClB,MAAM,KAAK,WAAW;YACtB,MAAM,KAAK,aAAa,EACxB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,MAAM,GAAG,GAAc;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;YAC7C,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI;gBAC/B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC;aAChD,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC;YACF,UAAU;YACV,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;SACvE,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAc,EAAE;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,CAAC,OAAO;YAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACtB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,gBAAgB;QAChB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,GAAW;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACnD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,0EAA0E;IAC1E,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IAEO,iBAAiB,CAAC,GAAW;QACnC,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;gBAC7C,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;oBAAE,OAAO,MAAM,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,kFAAkF;IAClF,YAAY,CAAC,GAA2B;QACtC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QACvB,MAAM,IAAI,GAAc,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACxC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,IAQR;QACC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QACvB,MAAM,GAAG,GAAc;YACrB,GAAG;YACH,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YAClE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACtD,iEAAiE;YACjE,8DAA8D;YAC9D,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,EAAE;YACf,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;SACnE,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,GAAW,EAAE,WAA4B;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACtD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,WAAW,CACT,GAAW,EACX,IAQC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACtD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAC/C,MAAM,SAAS,GAAc;YAC3B,GAAG,IAAI;YACP,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS,IAAI;gBAC1C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;aAC1C,CAAC;SACH,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,GAAc;QAC3B,IAAI,CAAC;YACH,oEAAoE;YACpE,kEAAkE;YAClE,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,EAAE,CAAC,IAAI,GAAG,iBAAiB;oBAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;gBACjD,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,GAAG,CAAC;YACnC,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACrC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YACD,qEAAqE;YACrE,sEAAsE;YACtE,oEAAoE;YACpE,kEAAkE;YAClE,aAAa;YACb,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB,EAAE,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,4CAA4C,MAAM,CAAC,MAAM,YAAY,iBAAiB,OAAO,CAC9F,CAAC;gBACF,KAAK,GAAG,EAAE,CAAC;gBACX,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/D,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,gEAAgE;YAChE,iEAAiE;YACjE,8BAA8B;YAC9B,IAAI,CAAC;gBACH,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6EAA6E;IACrE,YAAY;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACtC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO;YACtC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;oBAC7C,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;wBAAE,SAAS;oBAC7C,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC1B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;wBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACvB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;4BAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,oBAAoB;gBACtB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC5E,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;gBAC7C,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;oBAAE,SAAS;gBAC7C,oEAAoE;gBACpE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;oBAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,4DAA4D;YAC9D,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"runLog.js","sourceRoot":"","sources":["../src/runLog.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -132,9 +132,22 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
132
132
|
status?: string;
|
|
133
133
|
recipe?: string;
|
|
134
134
|
after?: number;
|
|
135
|
+
manualRunId?: string;
|
|
135
136
|
}) => Record<string, unknown>[]) | null;
|
|
136
137
|
/** Patchwork: set by bridge to fetch a single run by seq for the detail page. */
|
|
137
138
|
runDetailFn: ((seq: number) => Record<string, unknown> | null) | null;
|
|
139
|
+
/** Patchwork (PR1c): aggregate halt-reason categories across recent runs. */
|
|
140
|
+
haltSummaryFn: ((opts?: {
|
|
141
|
+
sinceMs?: number;
|
|
142
|
+
limit?: number;
|
|
143
|
+
recipe?: string;
|
|
144
|
+
}) => import("./recipes/haltCategory.js").HaltSummary) | null;
|
|
145
|
+
/** Patchwork (PR3b): aggregate judge-step verdicts across recent runs. */
|
|
146
|
+
judgeSummaryFn: ((opts?: {
|
|
147
|
+
sinceMs?: number;
|
|
148
|
+
limit?: number;
|
|
149
|
+
recipe?: string;
|
|
150
|
+
}) => import("./recipes/judgeSummary.js").JudgeSummary) | null;
|
|
138
151
|
/** Patchwork: set by bridge to generate a dry-run plan for a recipe by name. */
|
|
139
152
|
runPlanFn: ((recipeName: string) => Promise<Record<string, unknown>>) | null;
|
|
140
153
|
/** Patchwork (VD-4): mocked replay of an existing run. Returns the new
|
|
@@ -151,10 +164,25 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
151
164
|
taskId?: string;
|
|
152
165
|
error?: string;
|
|
153
166
|
}>) | null;
|
|
167
|
+
/**
|
|
168
|
+
* Patchwork: set by bridge to re-prime the recipe scheduler when the
|
|
169
|
+
* on-disk recipe set changes (install / save / delete). Lets cron-
|
|
170
|
+
* triggered recipes start firing without a bridge restart. Optional —
|
|
171
|
+
* tests + headless tooling leave it null; the install handler treats
|
|
172
|
+
* the callback as best-effort fire-and-forget.
|
|
173
|
+
*/
|
|
174
|
+
onRecipesChangedFn: (() => void) | null;
|
|
154
175
|
/** Patchwork: admin-controlled managed settings path (highest rule precedence). */
|
|
155
176
|
managedSettingsPath: string | undefined;
|
|
156
177
|
/** Effective bridge config path to update when dashboard saves driver changes. */
|
|
157
178
|
bridgeConfigPath: string | undefined;
|
|
179
|
+
/**
|
|
180
|
+
* Shared secret for HMAC-SHA256 verification of POST /hooks/* requests
|
|
181
|
+
* carrying `X-Hub-Signature-256`. When null (default), HMAC auth is
|
|
182
|
+
* disabled and /hooks/* requires the bridge bearer token like every
|
|
183
|
+
* other route. Set by Bridge constructor from `config.webhookSecret`.
|
|
184
|
+
*/
|
|
185
|
+
webhookSecret: string | null;
|
|
158
186
|
/** Patchwork: live approval gate level — mutated by POST /settings, read by bridge per-session setup. */
|
|
159
187
|
approvalGate: "off" | "high" | "all";
|
|
160
188
|
/** Patchwork: outbound webhook URL for approval notifications (from dashboard.webhookUrl in config). */
|
|
@@ -191,6 +219,37 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
191
219
|
* the user's preference.
|
|
192
220
|
*/
|
|
193
221
|
enableTimeOfDayAnomaly: boolean;
|
|
222
|
+
/**
|
|
223
|
+
* Patchwork: set by bridge to record a kill-switch audit trace.
|
|
224
|
+
* `/kill-switch` POST emits one entry on every state transition (no-op
|
|
225
|
+
* toggles do not emit). When unset, the handler logs via this.logger
|
|
226
|
+
* instead — see step 5 of issue #422.
|
|
227
|
+
*
|
|
228
|
+
* Trace encoding (v2-I6 from #422): we encode kill-switch events via
|
|
229
|
+
* the existing `DecisionTrace` schema rather than extending its
|
|
230
|
+
* `traceType` union, to keep schema migration off the kill-switch
|
|
231
|
+
* critical path. Fields used:
|
|
232
|
+
* ref = "kill-switch.writes"
|
|
233
|
+
* problem = "<short reason>" or "engage" / "release" if no reason
|
|
234
|
+
* solution = "ENGAGED at <ts>" or "RELEASED at <ts>"
|
|
235
|
+
* tags = ["kill-switch", "engage" | "release", "actor:http"]
|
|
236
|
+
*
|
|
237
|
+
* `ctxQueryTraces({tag: "kill-switch"})` returns the full audit
|
|
238
|
+
* history; pair with `tag: "engage"` / `tag: "release"` to filter
|
|
239
|
+
* direction.
|
|
240
|
+
*/
|
|
241
|
+
recordKillSwitchTraceFn: ((event: {
|
|
242
|
+
engaged: boolean;
|
|
243
|
+
reason: string | undefined;
|
|
244
|
+
ts: number;
|
|
245
|
+
}) => void) | null;
|
|
246
|
+
/**
|
|
247
|
+
* Set by bridge to broadcast a `kind: "kill-switch"` SSE event from
|
|
248
|
+
* `/stream` when the kill-switch state changes (issue #422 v2, pitfall I8).
|
|
249
|
+
* Bridge wires this to `activityLog.broadcastKillSwitch()` or an equivalent
|
|
250
|
+
* that notifies all active SSE listeners so the dashboard updates in <1s.
|
|
251
|
+
*/
|
|
252
|
+
broadcastKillSwitchEventFn: ((engaged: boolean, reason?: string) => void) | null;
|
|
194
253
|
/** Patchwork: set by bridge to match + fire webhook-triggered recipes. */
|
|
195
254
|
webhookFn: ((path: string, payload: unknown) => Promise<{
|
|
196
255
|
ok: boolean;
|
|
@@ -296,6 +355,12 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
296
355
|
ok: boolean;
|
|
297
356
|
error?: string;
|
|
298
357
|
}) | null;
|
|
358
|
+
/** Set by bridge to check if restart is safe (no in-flight tool calls). */
|
|
359
|
+
restartCheckFn: (() => {
|
|
360
|
+
totalSessions: number;
|
|
361
|
+
inFlightCalls: number;
|
|
362
|
+
busySessions: string[];
|
|
363
|
+
}) | null;
|
|
299
364
|
/**
|
|
300
365
|
* Attach an OAuth 2.0 Authorization Server.
|
|
301
366
|
* When set, the bridge exposes:
|
package/dist/server.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
1
2
|
import { EventEmitter } from "node:events";
|
|
2
3
|
import http from "node:http";
|
|
3
4
|
import { WebSocket, WebSocketServer as WsServer } from "ws";
|
|
5
|
+
import { getAnalyticsPrefsAll, getTelemetryPrefs, setTelemetryPrefs, } from "./analyticsPrefs.js";
|
|
4
6
|
import { handleApprovalsStream, routeApprovalRequest } from "./approvalHttp.js";
|
|
5
7
|
import { getApprovalQueue } from "./approvalQueue.js";
|
|
6
8
|
import { saveBridgeConfigDriver } from "./config.js";
|
|
7
9
|
import { tryHandleConnectorRoute, tryHandlePublicConnectorRoute, } from "./connectorRoutes.js";
|
|
8
10
|
import { timingSafeStringEqual } from "./crypto.js";
|
|
9
11
|
import { renderDashboardHtml } from "./dashboard.js";
|
|
12
|
+
import { EnvLockedFlagError, getEnvLockedValue, isEnvLockedFor, isWriteKillSwitchActive, KILL_SWITCH_WRITES, setFlag, } from "./featureFlags.js";
|
|
10
13
|
import { respond500 } from "./httpErrorResponse.js";
|
|
11
14
|
import { tryHandleInboxRoute } from "./inboxRoutes.js";
|
|
12
15
|
import { tryHandleMcpRoute } from "./mcpRoutes.js";
|
|
@@ -103,6 +106,10 @@ export class Server extends EventEmitter {
|
|
|
103
106
|
runsFn = null;
|
|
104
107
|
/** Patchwork: set by bridge to fetch a single run by seq for the detail page. */
|
|
105
108
|
runDetailFn = null;
|
|
109
|
+
/** Patchwork (PR1c): aggregate halt-reason categories across recent runs. */
|
|
110
|
+
haltSummaryFn = null;
|
|
111
|
+
/** Patchwork (PR3b): aggregate judge-step verdicts across recent runs. */
|
|
112
|
+
judgeSummaryFn = null;
|
|
106
113
|
/** Patchwork: set by bridge to generate a dry-run plan for a recipe by name. */
|
|
107
114
|
runPlanFn = null;
|
|
108
115
|
/** Patchwork (VD-4): mocked replay of an existing run. Returns the new
|
|
@@ -110,10 +117,25 @@ export class Server extends EventEmitter {
|
|
|
110
117
|
runReplayFn = null;
|
|
111
118
|
/** Patchwork: set by bridge to launch a named recipe via the orchestrator. */
|
|
112
119
|
runRecipeFn = null;
|
|
120
|
+
/**
|
|
121
|
+
* Patchwork: set by bridge to re-prime the recipe scheduler when the
|
|
122
|
+
* on-disk recipe set changes (install / save / delete). Lets cron-
|
|
123
|
+
* triggered recipes start firing without a bridge restart. Optional —
|
|
124
|
+
* tests + headless tooling leave it null; the install handler treats
|
|
125
|
+
* the callback as best-effort fire-and-forget.
|
|
126
|
+
*/
|
|
127
|
+
onRecipesChangedFn = null;
|
|
113
128
|
/** Patchwork: admin-controlled managed settings path (highest rule precedence). */
|
|
114
129
|
managedSettingsPath = undefined;
|
|
115
130
|
/** Effective bridge config path to update when dashboard saves driver changes. */
|
|
116
131
|
bridgeConfigPath = undefined;
|
|
132
|
+
/**
|
|
133
|
+
* Shared secret for HMAC-SHA256 verification of POST /hooks/* requests
|
|
134
|
+
* carrying `X-Hub-Signature-256`. When null (default), HMAC auth is
|
|
135
|
+
* disabled and /hooks/* requires the bridge bearer token like every
|
|
136
|
+
* other route. Set by Bridge constructor from `config.webhookSecret`.
|
|
137
|
+
*/
|
|
138
|
+
webhookSecret = null;
|
|
117
139
|
/** Patchwork: live approval gate level — mutated by POST /settings, read by bridge per-session setup. */
|
|
118
140
|
approvalGate = "off";
|
|
119
141
|
/** Patchwork: outbound webhook URL for approval notifications (from dashboard.webhookUrl in config). */
|
|
@@ -150,6 +172,33 @@ export class Server extends EventEmitter {
|
|
|
150
172
|
* the user's preference.
|
|
151
173
|
*/
|
|
152
174
|
enableTimeOfDayAnomaly = false;
|
|
175
|
+
/**
|
|
176
|
+
* Patchwork: set by bridge to record a kill-switch audit trace.
|
|
177
|
+
* `/kill-switch` POST emits one entry on every state transition (no-op
|
|
178
|
+
* toggles do not emit). When unset, the handler logs via this.logger
|
|
179
|
+
* instead — see step 5 of issue #422.
|
|
180
|
+
*
|
|
181
|
+
* Trace encoding (v2-I6 from #422): we encode kill-switch events via
|
|
182
|
+
* the existing `DecisionTrace` schema rather than extending its
|
|
183
|
+
* `traceType` union, to keep schema migration off the kill-switch
|
|
184
|
+
* critical path. Fields used:
|
|
185
|
+
* ref = "kill-switch.writes"
|
|
186
|
+
* problem = "<short reason>" or "engage" / "release" if no reason
|
|
187
|
+
* solution = "ENGAGED at <ts>" or "RELEASED at <ts>"
|
|
188
|
+
* tags = ["kill-switch", "engage" | "release", "actor:http"]
|
|
189
|
+
*
|
|
190
|
+
* `ctxQueryTraces({tag: "kill-switch"})` returns the full audit
|
|
191
|
+
* history; pair with `tag: "engage"` / `tag: "release"` to filter
|
|
192
|
+
* direction.
|
|
193
|
+
*/
|
|
194
|
+
recordKillSwitchTraceFn = null;
|
|
195
|
+
/**
|
|
196
|
+
* Set by bridge to broadcast a `kind: "kill-switch"` SSE event from
|
|
197
|
+
* `/stream` when the kill-switch state changes (issue #422 v2, pitfall I8).
|
|
198
|
+
* Bridge wires this to `activityLog.broadcastKillSwitch()` or an equivalent
|
|
199
|
+
* that notifies all active SSE listeners so the dashboard updates in <1s.
|
|
200
|
+
*/
|
|
201
|
+
broadcastKillSwitchEventFn = null;
|
|
153
202
|
/** Patchwork: set by bridge to match + fire webhook-triggered recipes. */
|
|
154
203
|
webhookFn = null;
|
|
155
204
|
/**
|
|
@@ -215,6 +264,8 @@ export class Server extends EventEmitter {
|
|
|
215
264
|
/** Set by bridge to handle POST /launch-quick-task — invokes launchQuickTask tool in-process. */
|
|
216
265
|
launchQuickTaskFn = null;
|
|
217
266
|
setRecipeEnabledFn = null;
|
|
267
|
+
/** Set by bridge to check if restart is safe (no in-flight tool calls). */
|
|
268
|
+
restartCheckFn = null;
|
|
218
269
|
/**
|
|
219
270
|
* Attach an OAuth 2.0 Authorization Server.
|
|
220
271
|
* When set, the bridge exposes:
|
|
@@ -418,6 +469,14 @@ export class Server extends EventEmitter {
|
|
|
418
469
|
const isPhoneApprovalPath = req.method === "POST" &&
|
|
419
470
|
/^\/(approve|reject)\/[A-Za-z0-9-]+$/.test(parsedUrl.pathname) &&
|
|
420
471
|
!!req.headers["x-approval-token"];
|
|
472
|
+
// GitHub-style webhook bypass: when --webhook-secret is configured,
|
|
473
|
+
// POST /hooks/* requests carrying X-Hub-Signature-256 bypass the
|
|
474
|
+
// bearer-token gate. Signature itself is verified inside the
|
|
475
|
+
// /hooks/* handler after the body has been read.
|
|
476
|
+
const isHmacWebhookCandidate = req.method === "POST" &&
|
|
477
|
+
parsedUrl.pathname.startsWith("/hooks/") &&
|
|
478
|
+
!!req.headers["x-hub-signature-256"] &&
|
|
479
|
+
this.webhookSecret !== null;
|
|
421
480
|
// Rate-limit the phone bypass surface. Only applies when this is
|
|
422
481
|
// actually a phone-path request that's relying on the bypass — a
|
|
423
482
|
// properly-authenticated bearer caller is unaffected. Counted +
|
|
@@ -464,7 +523,10 @@ export class Server extends EventEmitter {
|
|
|
464
523
|
}
|
|
465
524
|
}
|
|
466
525
|
// oauthResolved is the bridge token if the OAuth token is valid; null otherwise
|
|
467
|
-
if (!isStaticToken &&
|
|
526
|
+
if (!isStaticToken &&
|
|
527
|
+
!oauthResolved &&
|
|
528
|
+
!isPhoneApprovalPath &&
|
|
529
|
+
!isHmacWebhookCandidate) {
|
|
468
530
|
// RFC 6750: only include error= when a token was actually presented but invalid
|
|
469
531
|
const tokenPresented = bearer.length > 0;
|
|
470
532
|
const wwwAuth = this.oauthServer && this.oauthIssuerUrl
|
|
@@ -776,6 +838,34 @@ export class Server extends EventEmitter {
|
|
|
776
838
|
respond413(res, HOOKS_BODY_CAP);
|
|
777
839
|
return;
|
|
778
840
|
}
|
|
841
|
+
// HMAC-SHA256 verification for GitHub-style webhooks. The signature
|
|
842
|
+
// must be computed over the raw request bytes — readBodyWithCap
|
|
843
|
+
// utf-8-decodes the body, so we re-encode here. The byte sequence
|
|
844
|
+
// round-trips identically for any valid utf-8 input (which JSON is).
|
|
845
|
+
const sigHeader = req.headers["x-hub-signature-256"];
|
|
846
|
+
if (typeof sigHeader === "string" && sigHeader.length > 0) {
|
|
847
|
+
if (!this.webhookSecret) {
|
|
848
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
849
|
+
res.end(JSON.stringify({ error: "webhook_secret_not_configured" }));
|
|
850
|
+
return;
|
|
851
|
+
}
|
|
852
|
+
const rawBody = Buffer.from(read.body, "utf-8");
|
|
853
|
+
const expected = "sha256=" +
|
|
854
|
+
createHmac("sha256", this.webhookSecret)
|
|
855
|
+
.update(rawBody)
|
|
856
|
+
.digest("hex");
|
|
857
|
+
const expectedBuf = Buffer.from(expected, "utf-8");
|
|
858
|
+
const providedBuf = Buffer.from(sigHeader, "utf-8");
|
|
859
|
+
// timingSafeEqual throws on length mismatch — length-check first
|
|
860
|
+
// so the constant-time path is only taken on equal-length inputs.
|
|
861
|
+
const sigOk = expectedBuf.length === providedBuf.length &&
|
|
862
|
+
timingSafeEqual(expectedBuf, providedBuf);
|
|
863
|
+
if (!sigOk) {
|
|
864
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
865
|
+
res.end(JSON.stringify({ error: "invalid_signature" }));
|
|
866
|
+
return;
|
|
867
|
+
}
|
|
868
|
+
}
|
|
779
869
|
let payload;
|
|
780
870
|
if (read.body.trim()) {
|
|
781
871
|
try {
|
|
@@ -789,7 +879,7 @@ export class Server extends EventEmitter {
|
|
|
789
879
|
res.writeHead(503, { "Content-Type": "application/json" });
|
|
790
880
|
res.end(JSON.stringify({
|
|
791
881
|
ok: false,
|
|
792
|
-
error: "Webhooks unavailable — start bridge with --
|
|
882
|
+
error: "Webhooks unavailable — start bridge with --driver subprocess",
|
|
793
883
|
}));
|
|
794
884
|
return;
|
|
795
885
|
}
|
|
@@ -992,9 +1082,12 @@ export class Server extends EventEmitter {
|
|
|
992
1082
|
setRecipeEnabledFn: this.setRecipeEnabledFn,
|
|
993
1083
|
runsFn: this.runsFn,
|
|
994
1084
|
runDetailFn: this.runDetailFn,
|
|
1085
|
+
haltSummaryFn: this.haltSummaryFn,
|
|
1086
|
+
judgeSummaryFn: this.judgeSummaryFn,
|
|
995
1087
|
runPlanFn: this.runPlanFn,
|
|
996
1088
|
runReplayFn: this.runReplayFn,
|
|
997
1089
|
runRecipeFn: this.runRecipeFn,
|
|
1090
|
+
onRecipesChangedFn: this.onRecipesChangedFn,
|
|
998
1091
|
})) {
|
|
999
1092
|
return;
|
|
1000
1093
|
}
|
|
@@ -1261,6 +1354,212 @@ export class Server extends EventEmitter {
|
|
|
1261
1354
|
}
|
|
1262
1355
|
return;
|
|
1263
1356
|
}
|
|
1357
|
+
// /kill-switch — dedicated endpoint for the global write-tier kill switch.
|
|
1358
|
+
// See issue #422 v2: not folded into /settings because kill-switch has
|
|
1359
|
+
// audit + idempotency + env-lock semantics nothing else on /settings has.
|
|
1360
|
+
//
|
|
1361
|
+
// POST {engage: boolean, reason?: string} → toggle; idempotent.
|
|
1362
|
+
// 200 {engaged, changed, locked: false} — accepted
|
|
1363
|
+
// 200 {engaged, changed: false, locked: false} — no-op (already in that state)
|
|
1364
|
+
// 409 {error: "env_locked", flag, frozenValue, lockedReason}
|
|
1365
|
+
// — env-locked, cannot toggle
|
|
1366
|
+
// 400 {error: "invalid_request"} — malformed body
|
|
1367
|
+
//
|
|
1368
|
+
// GET → status. 200 {engaged, locked, lockedReason?, lockedValue?}
|
|
1369
|
+
//
|
|
1370
|
+
// Audit emit is stubbed with this.logger.info — full plumbing
|
|
1371
|
+
// (decisionTraceLog into Server) lands in step 5 of the #422 series.
|
|
1372
|
+
if (parsedUrl.pathname === "/kill-switch") {
|
|
1373
|
+
if (req.method === "GET") {
|
|
1374
|
+
const engaged = isWriteKillSwitchActive();
|
|
1375
|
+
const locked = isEnvLockedFor(KILL_SWITCH_WRITES);
|
|
1376
|
+
const body = { engaged, locked };
|
|
1377
|
+
if (locked) {
|
|
1378
|
+
const lockedValue = getEnvLockedValue(KILL_SWITCH_WRITES);
|
|
1379
|
+
body.lockedValue = lockedValue;
|
|
1380
|
+
body.lockedReason = `PATCHWORK_FLAG_KILL_SWITCH_WRITES=${lockedValue ? "1" : "0"} at bridge startup`;
|
|
1381
|
+
}
|
|
1382
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1383
|
+
res.end(JSON.stringify(body));
|
|
1384
|
+
return;
|
|
1385
|
+
}
|
|
1386
|
+
if (req.method === "POST") {
|
|
1387
|
+
// 1 KB — body is `{engage: bool, reason?: string}`; reason is a
|
|
1388
|
+
// short audit note, 1 KB is generous.
|
|
1389
|
+
const KS_BODY_CAP = 1 * 1024;
|
|
1390
|
+
const parsed = await readJsonBody(req, KS_BODY_CAP);
|
|
1391
|
+
if (!parsed.ok) {
|
|
1392
|
+
if (parsed.code === "too_large") {
|
|
1393
|
+
respond413(res, KS_BODY_CAP);
|
|
1394
|
+
return;
|
|
1395
|
+
}
|
|
1396
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1397
|
+
res.end(JSON.stringify({ error: "invalid_request", reason: "bad_json" }));
|
|
1398
|
+
return;
|
|
1399
|
+
}
|
|
1400
|
+
const body = parsed.value ?? {};
|
|
1401
|
+
if (typeof body.engage !== "boolean") {
|
|
1402
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1403
|
+
res.end(JSON.stringify({
|
|
1404
|
+
error: "invalid_request",
|
|
1405
|
+
reason: "engage must be boolean",
|
|
1406
|
+
}));
|
|
1407
|
+
return;
|
|
1408
|
+
}
|
|
1409
|
+
const reason = typeof body.reason === "string" && body.reason.trim().length > 0
|
|
1410
|
+
? body.reason.trim().slice(0, 500)
|
|
1411
|
+
: undefined;
|
|
1412
|
+
// v2-B2 + I3: surface env-lock conflict as structured 409 so CLI
|
|
1413
|
+
// + dashboard can distinguish "you sent garbage" from
|
|
1414
|
+
// "policy-locked by sysadmin via PATCHWORK_FLAG_*".
|
|
1415
|
+
if (isEnvLockedFor(KILL_SWITCH_WRITES)) {
|
|
1416
|
+
const lockedValue = getEnvLockedValue(KILL_SWITCH_WRITES);
|
|
1417
|
+
res.writeHead(409, { "Content-Type": "application/json" });
|
|
1418
|
+
res.end(JSON.stringify({
|
|
1419
|
+
error: "env_locked",
|
|
1420
|
+
flag: KILL_SWITCH_WRITES,
|
|
1421
|
+
frozenValue: lockedValue,
|
|
1422
|
+
lockedReason: `PATCHWORK_FLAG_KILL_SWITCH_WRITES=${lockedValue ? "1" : "0"} at bridge startup`,
|
|
1423
|
+
}));
|
|
1424
|
+
return;
|
|
1425
|
+
}
|
|
1426
|
+
// v2-I12: idempotent. State transitions emit audit; no-ops don't.
|
|
1427
|
+
const prev = isWriteKillSwitchActive();
|
|
1428
|
+
const next = body.engage;
|
|
1429
|
+
const changed = prev !== next;
|
|
1430
|
+
if (changed) {
|
|
1431
|
+
try {
|
|
1432
|
+
setFlag(KILL_SWITCH_WRITES, next, true);
|
|
1433
|
+
}
|
|
1434
|
+
catch (err) {
|
|
1435
|
+
// Belt-and-suspenders: setFlag now throws EnvLockedFlagError if
|
|
1436
|
+
// the flag was env-locked (we already checked isEnvLockedFor above,
|
|
1437
|
+
// but a race with lockKillSwitchEnv() in tests warrants this).
|
|
1438
|
+
if (err instanceof EnvLockedFlagError) {
|
|
1439
|
+
res.writeHead(409, { "Content-Type": "application/json" });
|
|
1440
|
+
res.end(JSON.stringify({
|
|
1441
|
+
error: "env_locked",
|
|
1442
|
+
flag: KILL_SWITCH_WRITES,
|
|
1443
|
+
frozenValue: err.frozenValue,
|
|
1444
|
+
lockedReason: `PATCHWORK_FLAG_KILL_SWITCH_WRITES=${err.frozenValue ? "1" : "0"} at bridge startup`,
|
|
1445
|
+
}));
|
|
1446
|
+
return;
|
|
1447
|
+
}
|
|
1448
|
+
throw err;
|
|
1449
|
+
}
|
|
1450
|
+
// v2-I6: audit emit on every state transition; no-ops skip.
|
|
1451
|
+
// When the bridge wires recordKillSwitchTraceFn (step 5),
|
|
1452
|
+
// this writes to ~/.patchwork/decision_traces.jsonl. The
|
|
1453
|
+
// logger.info line stays as a secondary signal in the
|
|
1454
|
+
// bridge log; it's the only output when the trace fn is
|
|
1455
|
+
// unset (tests, headless contexts).
|
|
1456
|
+
this.logger.info(`[kill-switch] ${next ? "ENGAGED" : "RELEASED"}${reason ? ` (reason: ${reason})` : ""} — actor=http`);
|
|
1457
|
+
this.recordKillSwitchTraceFn?.({
|
|
1458
|
+
engaged: next,
|
|
1459
|
+
reason,
|
|
1460
|
+
ts: Date.now(),
|
|
1461
|
+
});
|
|
1462
|
+
// v2-I8: broadcast SSE kind:"kill-switch" so dashboard updates
|
|
1463
|
+
// in <1s without changing the poll cadence.
|
|
1464
|
+
this.broadcastKillSwitchEventFn?.(next, reason);
|
|
1465
|
+
}
|
|
1466
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1467
|
+
res.end(JSON.stringify({
|
|
1468
|
+
engaged: next,
|
|
1469
|
+
changed,
|
|
1470
|
+
locked: false,
|
|
1471
|
+
}));
|
|
1472
|
+
return;
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
// /telemetry-prefs — read/write per-flag telemetry preferences.
|
|
1476
|
+
// GET → {crashReports, usageStats, localDiagnostics}
|
|
1477
|
+
// POST {crashReports?, usageStats?, localDiagnostics?} → same shape (partial update)
|
|
1478
|
+
if (parsedUrl.pathname === "/telemetry-prefs") {
|
|
1479
|
+
if (req.method === "GET") {
|
|
1480
|
+
const prefs = getTelemetryPrefs();
|
|
1481
|
+
const all = getAnalyticsPrefsAll();
|
|
1482
|
+
const response = { ...prefs };
|
|
1483
|
+
if (all?.lastSentAt !== undefined) {
|
|
1484
|
+
response.lastSentAt = all.lastSentAt;
|
|
1485
|
+
}
|
|
1486
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1487
|
+
res.end(JSON.stringify(response));
|
|
1488
|
+
return;
|
|
1489
|
+
}
|
|
1490
|
+
if (req.method === "POST") {
|
|
1491
|
+
const TP_BODY_CAP = 1 * 1024;
|
|
1492
|
+
const parsed = await readJsonBody(req, TP_BODY_CAP);
|
|
1493
|
+
if (!parsed.ok) {
|
|
1494
|
+
if (parsed.code === "too_large") {
|
|
1495
|
+
respond413(res, TP_BODY_CAP);
|
|
1496
|
+
return;
|
|
1497
|
+
}
|
|
1498
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
1499
|
+
res.end(JSON.stringify({ error: "invalid_request", reason: "bad_json" }));
|
|
1500
|
+
return;
|
|
1501
|
+
}
|
|
1502
|
+
const body = parsed.value ?? {};
|
|
1503
|
+
const update = {};
|
|
1504
|
+
if (typeof body.crashReports === "boolean") {
|
|
1505
|
+
update.crashReports = body.crashReports;
|
|
1506
|
+
}
|
|
1507
|
+
if (typeof body.usageStats === "boolean") {
|
|
1508
|
+
update.usageStats = body.usageStats;
|
|
1509
|
+
}
|
|
1510
|
+
if (typeof body.localDiagnostics === "boolean") {
|
|
1511
|
+
update.localDiagnostics = body.localDiagnostics;
|
|
1512
|
+
}
|
|
1513
|
+
setTelemetryPrefs(update);
|
|
1514
|
+
const prefs = getTelemetryPrefs();
|
|
1515
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
1516
|
+
res.end(JSON.stringify(prefs));
|
|
1517
|
+
return;
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
// /restart — graceful bridge restart endpoint.
|
|
1521
|
+
// POST → triggers SIGTERM if no active work; returns 409 if busy.
|
|
1522
|
+
// Safety checks: rejects restart if sessions have in-flight tool calls.
|
|
1523
|
+
if (parsedUrl.pathname === "/restart" && req.method === "POST") {
|
|
1524
|
+
if (!this.restartCheckFn) {
|
|
1525
|
+
res.writeHead(503, { "Content-Type": "application/json" });
|
|
1526
|
+
res.end(JSON.stringify({
|
|
1527
|
+
ok: false,
|
|
1528
|
+
error: "restart_unavailable",
|
|
1529
|
+
reason: "Restart endpoint not configured",
|
|
1530
|
+
}));
|
|
1531
|
+
return;
|
|
1532
|
+
}
|
|
1533
|
+
const check = this.restartCheckFn();
|
|
1534
|
+
// Reject restart if there's active work
|
|
1535
|
+
if (check.inFlightCalls > 0) {
|
|
1536
|
+
this.logger.warn(`[/restart] Rejected — ${check.inFlightCalls} in-flight tool call${check.inFlightCalls === 1 ? "" : "s"} across ${check.busySessions.length} session${check.busySessions.length === 1 ? "" : "s"}`);
|
|
1537
|
+
res.writeHead(409, { "Content-Type": "application/json" });
|
|
1538
|
+
res.end(JSON.stringify({
|
|
1539
|
+
ok: false,
|
|
1540
|
+
error: "restart_blocked",
|
|
1541
|
+
reason: `${check.inFlightCalls} tool call${check.inFlightCalls === 1 ? "" : "s"} in progress`,
|
|
1542
|
+
activeSessions: check.totalSessions,
|
|
1543
|
+
inFlightCalls: check.inFlightCalls,
|
|
1544
|
+
busySessions: check.busySessions,
|
|
1545
|
+
}));
|
|
1546
|
+
return;
|
|
1547
|
+
}
|
|
1548
|
+
// Safe to restart — log and trigger SIGTERM
|
|
1549
|
+
this.logger.info(`[/restart] Initiating graceful restart — ${check.totalSessions} session${check.totalSessions === 1 ? "" : "s"}, 0 in-flight calls`);
|
|
1550
|
+
res.writeHead(202, { "Content-Type": "application/json" });
|
|
1551
|
+
res.end(JSON.stringify({
|
|
1552
|
+
ok: true,
|
|
1553
|
+
message: "Restart initiated. Bridge will shut down gracefully.",
|
|
1554
|
+
activeSessions: check.totalSessions,
|
|
1555
|
+
}));
|
|
1556
|
+
// Trigger SIGTERM after response is sent (100ms delay to ensure response delivery)
|
|
1557
|
+
setTimeout(() => {
|
|
1558
|
+
this.logger.info("[/restart] Sending SIGTERM to self");
|
|
1559
|
+
process.kill(process.pid, "SIGTERM");
|
|
1560
|
+
}, 100);
|
|
1561
|
+
return;
|
|
1562
|
+
}
|
|
1264
1563
|
// CC hook notify endpoint — lightweight alternative to full MCP session for hook wiring.
|
|
1265
1564
|
if (parsedUrl.pathname === "/notify" && req.method === "POST") {
|
|
1266
1565
|
// 8 KB — notify payloads carry an event name + small arg map
|
|
@@ -1409,7 +1708,7 @@ export class Server extends EventEmitter {
|
|
|
1409
1708
|
res.writeHead(503, { "Content-Type": "application/json" });
|
|
1410
1709
|
res.end(JSON.stringify({
|
|
1411
1710
|
ok: false,
|
|
1412
|
-
error: "Quick tasks unavailable — requires --
|
|
1711
|
+
error: "Quick tasks unavailable — requires --driver subprocess",
|
|
1413
1712
|
}));
|
|
1414
1713
|
return;
|
|
1415
1714
|
}
|