oh-my-codex 0.18.11 → 0.18.13
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/Cargo.lock +6 -6
- package/Cargo.toml +1 -1
- package/README.md +9 -1
- package/dist/autopilot/__tests__/ralplan-gate.test.js +668 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
- package/dist/autopilot/completion-gate.d.ts +10 -0
- package/dist/autopilot/completion-gate.d.ts.map +1 -0
- package/dist/autopilot/completion-gate.js +154 -0
- package/dist/autopilot/completion-gate.js.map +1 -0
- package/dist/autopilot/ralplan-gate.d.ts.map +1 -1
- package/dist/autopilot/ralplan-gate.js +42 -21
- package/dist/autopilot/ralplan-gate.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +46 -3
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-invalid-config.test.js +35 -0
- package/dist/cli/__tests__/doctor-invalid-config.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +317 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +120 -2
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +217 -1
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +101 -0
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
- package/dist/cli/__tests__/session-search-help.test.js +3 -2
- package/dist/cli/__tests__/session-search-help.test.js.map +1 -1
- package/dist/cli/__tests__/session-search.test.js +64 -2
- package/dist/cli/__tests__/session-search.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +289 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +290 -17
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js +74 -0
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +45 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/state.test.js +93 -0
- package/dist/cli/__tests__/state.test.js.map +1 -1
- package/dist/cli/__tests__/update.test.js +157 -3
- package/dist/cli/__tests__/update.test.js.map +1 -1
- package/dist/cli/__tests__/version-sync-contract.test.js +2 -0
- package/dist/cli/__tests__/version-sync-contract.test.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +90 -12
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +13 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +439 -46
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/project-runtime-codex-homes.d.ts +6 -0
- package/dist/cli/project-runtime-codex-homes.d.ts.map +1 -0
- package/dist/cli/project-runtime-codex-homes.js +27 -0
- package/dist/cli/project-runtime-codex-homes.js.map +1 -0
- package/dist/cli/session-search.d.ts.map +1 -1
- package/dist/cli/session-search.js +8 -1
- package/dist/cli/session-search.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -2
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +482 -126
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/state.d.ts.map +1 -1
- package/dist/cli/state.js +79 -8
- package/dist/cli/state.js.map +1 -1
- package/dist/cli/update.d.ts +1 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +42 -10
- package/dist/cli/update.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +73 -29
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +14 -0
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +54 -51
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/generator.d.ts +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +1 -1
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/best-practice-research-skill.test.js +12 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.js.map +1 -1
- package/dist/hud/__tests__/authority.test.js +45 -12
- package/dist/hud/__tests__/authority.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +95 -0
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/render.test.js +6 -6
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +2 -2
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/authority.d.ts.map +1 -1
- package/dist/hud/authority.js +17 -2
- package/dist/hud/authority.js.map +1 -1
- package/dist/hud/index.js +1 -4
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +42 -0
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +6 -0
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +5 -4
- package/dist/hud/tmux.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +31 -1
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +1 -0
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +32 -0
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/modes/__tests__/base-autopilot-gates.test.d.ts +2 -0
- package/dist/modes/__tests__/base-autopilot-gates.test.d.ts.map +1 -0
- package/dist/modes/__tests__/base-autopilot-gates.test.js +154 -0
- package/dist/modes/__tests__/base-autopilot-gates.test.js.map +1 -0
- package/dist/modes/base.d.ts +4 -1
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +71 -1
- package/dist/modes/base.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +144 -3
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +109 -0
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +11 -4
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/code-review.d.ts +2 -0
- package/dist/pipeline/stages/code-review.d.ts.map +1 -1
- package/dist/pipeline/stages/code-review.js +2 -0
- package/dist/pipeline/stages/code-review.js.map +1 -1
- package/dist/pipeline/stages/ultraqa.d.ts +3 -0
- package/dist/pipeline/stages/ultraqa.d.ts.map +1 -1
- package/dist/pipeline/stages/ultraqa.js +3 -0
- package/dist/pipeline/stages/ultraqa.js.map +1 -1
- package/dist/ralplan/__tests__/consensus-gate.test.d.ts +2 -0
- package/dist/ralplan/__tests__/consensus-gate.test.d.ts.map +1 -0
- package/dist/ralplan/__tests__/consensus-gate.test.js +631 -0
- package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -0
- package/dist/ralplan/consensus-gate.d.ts +9 -1
- package/dist/ralplan/consensus-gate.d.ts.map +1 -1
- package/dist/ralplan/consensus-gate.js +287 -65
- package/dist/ralplan/consensus-gate.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +481 -0
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +145 -25
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts +1 -0
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +130 -0
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/session-history/__tests__/search.test.js +166 -0
- package/dist/session-history/__tests__/search.test.js.map +1 -1
- package/dist/session-history/search.d.ts +7 -0
- package/dist/session-history/search.d.ts.map +1 -1
- package/dist/session-history/search.js +83 -24
- package/dist/session-history/search.js.map +1 -1
- package/dist/sidecar/__tests__/collector.test.js +60 -0
- package/dist/sidecar/__tests__/collector.test.js.map +1 -1
- package/dist/sidecar/collector.d.ts.map +1 -1
- package/dist/sidecar/collector.js +3 -6
- package/dist/sidecar/collector.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +622 -0
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +82 -0
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +31 -9
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +41 -1
- package/dist/state/skill-active.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +81 -57
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/runtime.js +4 -4
- package/dist/team/runtime.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +23 -0
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/__tests__/version.test.js +27 -0
- package/dist/utils/__tests__/version.test.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +4 -2
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +7 -2
- package/dist/utils/version.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +4 -2
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +71 -3
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +53 -2
- package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +6 -1
- package/skills/best-practice-research/SKILL.md +6 -1
- package/src/scripts/__tests__/codex-native-hook.test.ts +615 -0
- package/src/scripts/codex-native-hook.ts +162 -32
- package/src/scripts/codex-native-pre-post.ts +137 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensus-gate.test.js","sourceRoot":"","sources":["../../../src/ralplan/__tests__/consensus-gate.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AAE7G,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAElD,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,cAAc,GAAG;YACrB,sBAAsB,EAAE;gBACtB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;gBAC/C,wBAAwB,EAAE;oBACxB,UAAU,EAAE,WAAW;oBACvB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;gBACD,qBAAqB,EAAE;oBACrB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;aACF;SACF,CAAC;QACF,MAAM,gBAAgB,GAAG;YACvB,sBAAsB,EAAE;gBACtB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;gBAC/C,wBAAwB,EAAE;oBACxB,UAAU,EAAE,WAAW;oBACvB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;gBACD,qBAAqB,EAAE;oBACrB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;aACF;SACF,CAAC;QAEF,MAAM,IAAI,GAAG,oCAAoC,CAAC;YAChD,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,EAAE;YACvD,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,gBAAgB,EAAE;SAC5D,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,wCAAwC,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,6BAA6B,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,cAAc,GAAG;YACrB,sBAAsB,EAAE;gBACtB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;gBAC/C,wBAAwB,EAAE;oBACxB,UAAU,EAAE,WAAW;oBACvB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;gBACD,qBAAqB,EAAE;oBACrB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;aACF;SACF,CAAC;QACF,MAAM,kBAAkB,GAAG;YACzB,sBAAsB,EAAE;gBACtB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,CAAC,eAAe,EAAE,kBAAkB,CAAC;gBAC/C,wBAAwB,EAAE;oBACxB,UAAU,EAAE,WAAW;oBACvB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;gBACD,qBAAqB,EAAE;oBACrB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,SAAS;oBAClB,YAAY,EAAE,0BAA0B;iBACzC;aACF;SACF,CAAC;QAEF,MAAM,IAAI,GAAG,oCAAoC,CAAC;YAChD,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,EAAE;YACvD,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,kBAAkB,EAAE;SAChE,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,wCAAwC,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,sDAAsD,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gCAAgC,CAAC,CAAC,CAAC;QACpF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACxD,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACjE,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;YACnC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAClC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACvC,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC1E,sBAAsB,EAAE;oBACtB,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;oBAC/C,wBAAwB,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;oBACzE,qBAAqB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;iBACpE;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,CAAC,CAAC;YAElD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO,eAAe,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC;;gBAC3E,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,IAAI,OAAO,oBAAoB,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,oBAAoB,CAAC;;gBAC3F,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YACvC,IAAI,OAAO,wBAAwB,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,wBAAwB,CAAC;;gBACxG,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mCAAmC,CAAC,CAAC,CAAC;QACrF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACxD,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACjE,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;YACvC,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjE,UAAU,EAAE,SAAS;gBACrB,iBAAiB,EAAE,eAAe;gBAClC,GAAG;aACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACxD,aAAa,EAAE,CAAC;gBAChB,QAAQ,EAAE;oBACR,CAAC,SAAS,CAAC,EAAE;wBACX,UAAU,EAAE,SAAS;wBACrB,gBAAgB,EAAE,eAAe;wBACjC,UAAU,EAAE,0BAA0B;wBACtC,OAAO,EAAE;4BACP,eAAe,EAAE;gCACf,SAAS,EAAE,eAAe;gCAC1B,IAAI,EAAE,QAAQ;gCACd,aAAa,EAAE,0BAA0B;gCACzC,YAAY,EAAE,0BAA0B;gCACxC,UAAU,EAAE,CAAC;6BACd;4BACD,kBAAkB,EAAE;gCAClB,SAAS,EAAE,kBAAkB;gCAC7B,IAAI,EAAE,UAAU;gCAChB,aAAa,EAAE,0BAA0B;gCACzC,YAAY,EAAE,0BAA0B;gCACxC,YAAY,EAAE,0BAA0B;gCACxC,UAAU,EAAE,CAAC;6BACd;4BACD,eAAe,EAAE;gCACf,SAAS,EAAE,eAAe;gCAC1B,IAAI,EAAE,UAAU;gCAChB,aAAa,EAAE,0BAA0B;gCACzC,YAAY,EAAE,0BAA0B;gCACxC,YAAY,EAAE,0BAA0B;gCACxC,UAAU,EAAE,CAAC;6BACd;yBACF;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACvE,aAAa,EAAE,SAAS;gBACxB,iBAAiB,EAAE;oBACjB,sBAAsB,EAAE;wBACtB,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;wBAC/C,wBAAwB,EAAE;4BACxB,UAAU,EAAE,WAAW;4BACvB,eAAe,EAAE,iBAAiB;4BAClC,OAAO,EAAE,SAAS;4BAClB,UAAU,EAAE,SAAS;4BACrB,SAAS,EAAE,kBAAkB;4BAC7B,aAAa,EAAE,yBAAyB;4BACxC,YAAY,EAAE,mCAAmC;4BACjD,YAAY,EAAE,0BAA0B;yBACzC;wBACD,qBAAqB,EAAE;4BACrB,UAAU,EAAE,QAAQ;4BACpB,eAAe,EAAE,iBAAiB;4BAClC,OAAO,EAAE,SAAS;4BAClB,UAAU,EAAE,SAAS;4BACrB,SAAS,EAAE,eAAe;4BAC1B,aAAa,EAAE,sBAAsB;4BACrC,YAAY,EAAE,mCAAmC;4BACjD,YAAY,EAAE,0BAA0B;yBACzC;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS;gBACT,sBAAsB,EAAE,IAAI;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO,eAAe,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC;;gBAC3E,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,IAAI,OAAO,oBAAoB,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,oBAAoB,CAAC;;gBAC3F,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YACvC,IAAI,OAAO,wBAAwB,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,wBAAwB,CAAC;;gBACxG,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wCAAwC,CAAC,CAAC,CAAC;QAC1F,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACxD,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACjE,MAAM,SAAS,GAAG,2BAA2B,CAAC;QAC9C,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;YACvC,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjE,UAAU,EAAE,SAAS;gBACrB,iBAAiB,EAAE,eAAe;gBAClC,GAAG;aACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACxD,aAAa,EAAE,CAAC;gBAChB,QAAQ,EAAE;oBACR,CAAC,SAAS,CAAC,EAAE;wBACX,UAAU,EAAE,SAAS;wBACrB,gBAAgB,EAAE,eAAe;wBACjC,UAAU,EAAE,0BAA0B;wBACtC,OAAO,EAAE;4BACP,eAAe,EAAE;gCACf,SAAS,EAAE,eAAe;gCAC1B,IAAI,EAAE,QAAQ;gCACd,aAAa,EAAE,0BAA0B;gCACzC,YAAY,EAAE,0BAA0B;gCACxC,UAAU,EAAE,CAAC;6BACd;4BACD,kBAAkB,EAAE;gCAClB,SAAS,EAAE,kBAAkB;gCAC7B,IAAI,EAAE,UAAU;gCAChB,aAAa,EAAE,0BAA0B;gCACzC,YAAY,EAAE,0BAA0B;gCACxC,YAAY,EAAE,0BAA0B;gCACxC,UAAU,EAAE,CAAC;6BACd;4BACD,eAAe,EAAE;gCACf,SAAS,EAAE,eAAe;gCAC1B,IAAI,EAAE,UAAU;gCAChB,aAAa,EAAE,0BAA0B;gCACzC,YAAY,EAAE,0BAA0B;gCACxC,YAAY,EAAE,0BAA0B;gCACxC,UAAU,EAAE,CAAC;6BACd;yBACF;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACrE,sBAAsB,EAAE;oBACtB,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;oBAC/C,wBAAwB,EAAE;wBACxB,UAAU,EAAE,WAAW;wBACvB,eAAe,EAAE,iBAAiB;wBAClC,OAAO,EAAE,SAAS;wBAClB,SAAS,EAAE,kBAAkB;wBAC7B,YAAY,EAAE,0BAA0B;qBACzC;oBACD,qBAAqB,EAAE;wBACrB,UAAU,EAAE,QAAQ;wBACpB,eAAe,EAAE,iBAAiB;wBAClC,OAAO,EAAE,SAAS;wBAClB,SAAS,EAAE,eAAe;wBAC1B,YAAY,EAAE,0BAA0B;qBACzC;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,sBAAsB,EAAE,IAAI;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,GAAG,SAAS,wBAAwB,CAAC,CAAC,CAAC;QACtF,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO,eAAe,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC;;gBAC3E,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,IAAI,OAAO,oBAAoB,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,oBAAoB,CAAC;;gBAC3F,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YACvC,IAAI,OAAO,wBAAwB,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,wBAAwB,CAAC;;gBACxG,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,iBAAiB,EAAE;wBACjB,sBAAsB,EAAE;4BACtB,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;4BAC/C,wBAAwB,EAAE;gCACxB,UAAU,EAAE,WAAW;gCACvB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,0BAA0B;6BACzC;4BACD,qBAAqB,EAAE;gCACrB,UAAU,EAAE,QAAQ;gCACpB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,0BAA0B;6BACzC;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,0CAA0C,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnE,aAAa,EAAE,UAAU;gBACzB,sBAAsB,EAAE;oBACtB,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;oBAC/C,wBAAwB,EAAE;wBACxB,UAAU,EAAE,WAAW;wBACvB,OAAO,EAAE,SAAS;wBAClB,YAAY,EAAE,0BAA0B;qBACzC;oBACD,qBAAqB,EAAE;wBACrB,UAAU,EAAE,QAAQ;wBACpB,OAAO,EAAE,SAAS;wBAClB,YAAY,EAAE,0BAA0B;qBACzC;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,YAAY,EAAE,CAAC;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,6CAA6C,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnE,aAAa,EAAE,UAAU;gBACzB,YAAY,EAAE,CAAC;gBACf,iBAAiB,EAAE;oBACjB,sBAAsB,EAAE;wBACtB,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;wBAC/C,wBAAwB,EAAE;4BACxB,UAAU,EAAE,WAAW;4BACvB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,0BAA0B;yBACzC;wBACD,qBAAqB,EAAE;4BACrB,UAAU,EAAE,QAAQ;4BACpB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,0BAA0B;yBACzC;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,YAAY,EAAE,CAAC;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnE,aAAa,EAAE,UAAU;gBACzB,YAAY,EAAE,CAAC;gBACf,iBAAiB,EAAE;oBACjB,sBAAsB,EAAE;wBACtB,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;wBAC/C,wBAAwB,EAAE;4BACxB,UAAU,EAAE,WAAW;4BACvB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,CAAC;4BACf,YAAY,EAAE,0BAA0B;yBACzC;wBACD,qBAAqB,EAAE;4BACrB,UAAU,EAAE,QAAQ;4BACpB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,CAAC;4BACf,YAAY,EAAE,0BAA0B;yBACzC;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,YAAY,EAAE,CAAC;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mDAAmD,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnE,aAAa,EAAE,UAAU;gBACzB,YAAY,EAAE,CAAC;gBACf,KAAK,EAAE;oBACL,iBAAiB,EAAE;wBACjB,sBAAsB,EAAE;4BACtB,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;4BAC/C,wBAAwB,EAAE;gCACxB,UAAU,EAAE,WAAW;gCACvB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,0BAA0B;6BACzC;4BACD,qBAAqB,EAAE;gCACrB,UAAU,EAAE,QAAQ;gCACpB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,0BAA0B;6BACzC;yBACF;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,YAAY,EAAE,CAAC;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oHAAoH,EAAE,KAAK,IAAI,EAAE;QAClI,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iDAAiD,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnE,aAAa,EAAE,UAAU;gBACzB,KAAK,EAAE;oBACL,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,YAAY,EAAE,CAAC;oBACf,iBAAiB,EAAE;wBACjB,YAAY,EAAE,CAAC;wBACf,sBAAsB,EAAE;4BACtB,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;4BAC/C,wBAAwB,EAAE;gCACxB,UAAU,EAAE,WAAW;gCACvB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,CAAC;gCACf,YAAY,EAAE,0BAA0B;6BACzC;4BACD,qBAAqB,EAAE;gCACrB,UAAU,EAAE,QAAQ;gCACpB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,CAAC;gCACf,YAAY,EAAE,0BAA0B;6BACzC;yBACF;qBACF;iBACF;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,YAAY,EAAE,CAAC;iBAChB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sCAAsC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,cAAc,EAAE,CAAC;4BACf,wBAAwB,EAAE;gCACxB,UAAU,EAAE,WAAW;gCACvB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,0BAA0B;6BACzC;4BACD,qBAAqB,EAAE;gCACrB,UAAU,EAAE,QAAQ;gCACpB,OAAO,EAAE,SAAS;gCAClB,YAAY,EAAE,0BAA0B;6BACzC;yBACF,CAAC;iBACH;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qCAAqC,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,+BAA+B,CAAC,GAAG,EAAE;gBAChD,SAAS,EAAE;oBACT,aAAa,EAAE,SAAS;oBACxB,wBAAwB,EAAE,gCAAgC;oBAC1D,gBAAgB,EAAE,CAAC;4BACjB,UAAU,EAAE,WAAW;4BACvB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,0BAA0B;yBACzC,CAAC;oBACF,aAAa,EAAE,CAAC;4BACd,UAAU,EAAE,QAAQ;4BACpB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,0BAA0B;yBACzC,CAAC;iBACH;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
export declare const RALPLAN_CONSENSUS_BLOCKED_REASONS: {
|
|
2
|
+
readonly nativeSubagentEvidenceMissing: "native_subagent_consensus_evidence_missing";
|
|
3
|
+
readonly nonApprovingReview: "non_approving_ralplan_consensus_review";
|
|
4
|
+
readonly missingSequentialApproval: "missing_sequential_architect_then_critic_approval";
|
|
5
|
+
};
|
|
6
|
+
export type RalplanConsensusBlockedReason = typeof RALPLAN_CONSENSUS_BLOCKED_REASONS[keyof typeof RALPLAN_CONSENSUS_BLOCKED_REASONS];
|
|
1
7
|
export interface RalplanConsensusGateEvidence {
|
|
2
8
|
complete: boolean;
|
|
3
9
|
sequence: ['architect-review', 'critic-review'];
|
|
4
10
|
ralplan_architect_review: Record<string, unknown> | null;
|
|
5
11
|
ralplan_critic_review: Record<string, unknown> | null;
|
|
6
12
|
source: string | null;
|
|
7
|
-
blockedReason:
|
|
13
|
+
blockedReason: RalplanConsensusBlockedReason | null;
|
|
8
14
|
blockedDetails?: string[];
|
|
9
15
|
}
|
|
10
16
|
export interface RalplanNativeSubagentConsensusOptions {
|
|
@@ -15,6 +21,7 @@ export interface RalplanNativeSubagentConsensusOptions {
|
|
|
15
21
|
export interface RalplanConsensusSource {
|
|
16
22
|
source: string;
|
|
17
23
|
value: unknown;
|
|
24
|
+
sessionId?: string;
|
|
18
25
|
}
|
|
19
26
|
export declare function buildRalplanConsensusGateFromSources(sources: RalplanConsensusSource[], options?: RalplanNativeSubagentConsensusOptions): RalplanConsensusGateEvidence;
|
|
20
27
|
export declare function buildRalplanConsensusGateForCwd(cwd: string, options?: {
|
|
@@ -28,4 +35,5 @@ export declare function hasDurableRalplanConsensusEvidenceForCwd(cwd: string, op
|
|
|
28
35
|
requireNativeSubagents?: boolean;
|
|
29
36
|
}): boolean;
|
|
30
37
|
export declare function readLocalRalplanConsensusStateCandidates(cwd: string, sessionId?: string): RalplanConsensusSource[];
|
|
38
|
+
export declare function withParentReturnToRalplanContext(value: unknown, parent: Record<string, unknown>): unknown;
|
|
31
39
|
//# sourceMappingURL=consensus-gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consensus-gate.d.ts","sourceRoot":"","sources":["../../src/ralplan/consensus-gate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"consensus-gate.d.ts","sourceRoot":"","sources":["../../src/ralplan/consensus-gate.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iCAAiC;;;;CAIpC,CAAC;AAEX,MAAM,MAAM,6BAA6B,GACvC,OAAO,iCAAiC,CAAC,MAAM,OAAO,iCAAiC,CAAC,CAAC;AAE3F,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;IAChD,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qCAAqC;IACpD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,sBAAsB,EAAE,EACjC,OAAO,GAAE,qCAA0C,GAClD,4BAA4B,CAyF9B;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1G,4BAA4B,CAsB9B;AAED,wBAAgB,wCAAwC,CACtD,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1G,OAAO,CAET;AAED,wBAAgB,wCAAwC,CACtD,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACjB,sBAAsB,EAAE,CA0B1B;AAkKD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAoBzG"}
|
|
@@ -1,26 +1,56 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { subagentTrackingPath } from '../subagents/tracker.js';
|
|
4
|
+
import { getBaseStateDir, resolveWorkingDirectoryForState } from '../state/paths.js';
|
|
5
|
+
export const RALPLAN_CONSENSUS_BLOCKED_REASONS = {
|
|
6
|
+
nativeSubagentEvidenceMissing: 'native_subagent_consensus_evidence_missing',
|
|
7
|
+
nonApprovingReview: 'non_approving_ralplan_consensus_review',
|
|
8
|
+
missingSequentialApproval: 'missing_sequential_architect_then_critic_approval',
|
|
9
|
+
};
|
|
4
10
|
export function buildRalplanConsensusGateFromSources(sources, options = {}) {
|
|
5
11
|
let nativeBlockedEvidence = null;
|
|
12
|
+
let validEvidence = null;
|
|
13
|
+
let invalidCompleteEvidence = null;
|
|
6
14
|
for (const candidate of sources) {
|
|
7
|
-
const evidence =
|
|
8
|
-
|
|
15
|
+
const evidence = resolveConsensusEvidence(candidate.value);
|
|
16
|
+
const candidateOptions = {
|
|
17
|
+
...options,
|
|
18
|
+
sessionId: options.sessionId ?? candidate.sessionId,
|
|
19
|
+
};
|
|
20
|
+
if (evidence?.kind === 'invalid') {
|
|
21
|
+
invalidCompleteEvidence ??= { ...evidence, source: candidate.source };
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (evidence?.kind === 'valid') {
|
|
9
25
|
if (options.requireNativeSubagents
|
|
10
|
-
&& !hasTrackerBackedNativeRalplanLanes(evidence,
|
|
11
|
-
nativeBlockedEvidence ??= { ...evidence, source: candidate.source };
|
|
26
|
+
&& !hasTrackerBackedNativeRalplanLanes(evidence, candidateOptions)) {
|
|
27
|
+
nativeBlockedEvidence ??= { ...evidence, source: candidate.source, options: candidateOptions };
|
|
12
28
|
continue;
|
|
13
29
|
}
|
|
14
|
-
|
|
15
|
-
complete: true,
|
|
16
|
-
sequence: ['architect-review', 'critic-review'],
|
|
17
|
-
ralplan_architect_review: evidence.ralplan_architect_review,
|
|
18
|
-
ralplan_critic_review: evidence.ralplan_critic_review,
|
|
19
|
-
source: candidate.source,
|
|
20
|
-
blockedReason: null,
|
|
21
|
-
};
|
|
30
|
+
validEvidence ??= { ...evidence, source: candidate.source };
|
|
22
31
|
}
|
|
23
32
|
}
|
|
33
|
+
if (invalidCompleteEvidence) {
|
|
34
|
+
return {
|
|
35
|
+
complete: false,
|
|
36
|
+
sequence: ['architect-review', 'critic-review'],
|
|
37
|
+
ralplan_architect_review: invalidCompleteEvidence.ralplan_architect_review,
|
|
38
|
+
ralplan_critic_review: invalidCompleteEvidence.ralplan_critic_review,
|
|
39
|
+
source: invalidCompleteEvidence.source,
|
|
40
|
+
blockedReason: RALPLAN_CONSENSUS_BLOCKED_REASONS.nonApprovingReview,
|
|
41
|
+
blockedDetails: invalidCompleteEvidence.blockedDetails,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (validEvidence) {
|
|
45
|
+
return {
|
|
46
|
+
complete: true,
|
|
47
|
+
sequence: ['architect-review', 'critic-review'],
|
|
48
|
+
ralplan_architect_review: validEvidence.ralplan_architect_review,
|
|
49
|
+
ralplan_critic_review: validEvidence.ralplan_critic_review,
|
|
50
|
+
source: validEvidence.source,
|
|
51
|
+
blockedReason: null,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
24
54
|
if (nativeBlockedEvidence) {
|
|
25
55
|
return {
|
|
26
56
|
complete: false,
|
|
@@ -28,10 +58,11 @@ export function buildRalplanConsensusGateFromSources(sources, options = {}) {
|
|
|
28
58
|
ralplan_architect_review: nativeBlockedEvidence.ralplan_architect_review,
|
|
29
59
|
ralplan_critic_review: nativeBlockedEvidence.ralplan_critic_review,
|
|
30
60
|
source: nativeBlockedEvidence.source,
|
|
31
|
-
blockedReason:
|
|
61
|
+
blockedReason: RALPLAN_CONSENSUS_BLOCKED_REASONS.nativeSubagentEvidenceMissing,
|
|
32
62
|
blockedDetails: [
|
|
33
|
-
|
|
34
|
-
trackerBackedNativeReviewProblem(nativeBlockedEvidence.
|
|
63
|
+
trackerBackedNativeReviewPairProblem(nativeBlockedEvidence, nativeBlockedEvidence.options),
|
|
64
|
+
trackerBackedNativeReviewProblem(nativeBlockedEvidence.ralplan_architect_review, 'architect', nativeBlockedEvidence.options),
|
|
65
|
+
trackerBackedNativeReviewProblem(nativeBlockedEvidence.ralplan_critic_review, 'critic', nativeBlockedEvidence.options),
|
|
35
66
|
].filter((detail) => Boolean(detail)),
|
|
36
67
|
};
|
|
37
68
|
}
|
|
@@ -41,16 +72,26 @@ export function buildRalplanConsensusGateFromSources(sources, options = {}) {
|
|
|
41
72
|
ralplan_architect_review: null,
|
|
42
73
|
ralplan_critic_review: null,
|
|
43
74
|
source: null,
|
|
44
|
-
blockedReason:
|
|
75
|
+
blockedReason: RALPLAN_CONSENSUS_BLOCKED_REASONS.missingSequentialApproval,
|
|
45
76
|
};
|
|
46
77
|
}
|
|
47
78
|
export function buildRalplanConsensusGateForCwd(cwd, options = {}) {
|
|
79
|
+
const localStateCandidates = readLocalRalplanConsensusStateCandidates(cwd, options.sessionId)
|
|
80
|
+
.map((candidate) => ({
|
|
81
|
+
...candidate,
|
|
82
|
+
value: options.artifacts
|
|
83
|
+
? withParentReturnToRalplanContext(candidate.value, options.artifacts)
|
|
84
|
+
: candidate.value,
|
|
85
|
+
}));
|
|
48
86
|
return buildRalplanConsensusGateFromSources([
|
|
49
87
|
...(options.artifacts ? [
|
|
50
88
|
{ source: 'stage-context-artifacts', value: options.artifacts },
|
|
51
|
-
{
|
|
89
|
+
{
|
|
90
|
+
source: 'stage-context-ralplan-artifact',
|
|
91
|
+
value: withParentReturnToRalplanContext(options.artifacts.ralplan, options.artifacts),
|
|
92
|
+
},
|
|
52
93
|
] : []),
|
|
53
|
-
...
|
|
94
|
+
...localStateCandidates,
|
|
54
95
|
], {
|
|
55
96
|
cwd,
|
|
56
97
|
sessionId: options.sessionId,
|
|
@@ -63,52 +104,74 @@ export function hasDurableRalplanConsensusEvidenceForCwd(cwd, options = {}) {
|
|
|
63
104
|
export function readLocalRalplanConsensusStateCandidates(cwd, sessionId) {
|
|
64
105
|
const explicitSession = sessionId !== undefined;
|
|
65
106
|
const sessionIdList = explicitSession ? validateLocalSessionId(sessionId) : readLocalCurrentSessionIds(cwd);
|
|
107
|
+
const scopedStateDir = getBaseStateDir(cwd);
|
|
108
|
+
const localStateDir = localBaseStateDir(cwd);
|
|
66
109
|
if (explicitSession && sessionIdList.length === 0)
|
|
67
110
|
return [];
|
|
68
111
|
const stateRoots = sessionIdList.length > 0
|
|
69
|
-
? sessionIdList.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
112
|
+
? uniquePaths(sessionIdList.flatMap((id) => [
|
|
113
|
+
join(scopedStateDir, 'sessions', id),
|
|
114
|
+
join(localStateDir, 'sessions', id),
|
|
115
|
+
])).map((dir) => ({
|
|
116
|
+
dir,
|
|
117
|
+
sessionId: sessionIdFromStateRoot(dir),
|
|
118
|
+
}))
|
|
119
|
+
: [{ dir: localStateDir }];
|
|
120
|
+
const paths = stateRoots.flatMap(({ dir, sessionId }) => [
|
|
121
|
+
{ path: join(dir, 'ralplan-state.json'), sessionId },
|
|
122
|
+
{ path: join(dir, 'autopilot-state.json'), sessionId },
|
|
74
123
|
]);
|
|
75
|
-
return paths.flatMap((path) => {
|
|
124
|
+
return paths.flatMap(({ path, sessionId }) => {
|
|
76
125
|
const state = readJsonState(path);
|
|
77
126
|
if (!state)
|
|
78
127
|
return [];
|
|
79
|
-
return [{ source: path, value: state }];
|
|
128
|
+
return [{ source: path, value: state, sessionId }];
|
|
80
129
|
});
|
|
81
130
|
}
|
|
82
|
-
function
|
|
131
|
+
function resolveConsensusEvidence(value) {
|
|
83
132
|
if (!value || typeof value !== 'object')
|
|
84
133
|
return null;
|
|
85
134
|
const record = value;
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
&&
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
135
|
+
const returnToRalplanCycle = isReturnToRalplanCycle(record);
|
|
136
|
+
const advancedReviewCycle = explicitFreshnessReviewCycle(record);
|
|
137
|
+
const staleReturnToRalplanCycle = returnToRalplanCycle && advancedReviewCycle === null;
|
|
138
|
+
const directGate = resolveDirectGate(record);
|
|
139
|
+
if (directGate?.kind === 'invalid')
|
|
140
|
+
return directGate;
|
|
141
|
+
if (directGate
|
|
142
|
+
&& (!returnToRalplanCycle
|
|
143
|
+
|| (advancedReviewCycle !== null && reviewsCarryFreshnessCycle(directGate, advancedReviewCycle))))
|
|
144
|
+
return directGate;
|
|
145
|
+
const handoffArtifactsAreStale = staleReturnToRalplanCycle;
|
|
146
|
+
const topLevelHandoffArtifacts = handoffArtifactsAreStale ? null : asRecord(record.handoff_artifacts);
|
|
147
|
+
if (topLevelHandoffArtifacts) {
|
|
148
|
+
const evidence = resolveConsensusEvidence(withParentReturnToRalplanContext(topLevelHandoffArtifacts, record));
|
|
149
|
+
if (evidence)
|
|
150
|
+
return evidence;
|
|
98
151
|
}
|
|
99
|
-
const
|
|
152
|
+
const stateRecord = asRecord(record.state);
|
|
153
|
+
const stateHasOwnReturnLoopContext = stateRecord !== null && isReturnToRalplanCycle(stateRecord);
|
|
154
|
+
const stateHandoffArtifacts = handoffArtifactsAreStale && !stateHasOwnReturnLoopContext
|
|
155
|
+
? null
|
|
156
|
+
: asRecord(stateRecord?.handoff_artifacts);
|
|
100
157
|
if (stateHandoffArtifacts) {
|
|
101
|
-
const
|
|
158
|
+
const stateContext = stateHasOwnReturnLoopContext ? stateRecord : record;
|
|
159
|
+
const evidence = resolveConsensusEvidence(withParentReturnToRalplanContext(stateHandoffArtifacts, stateContext));
|
|
102
160
|
if (evidence)
|
|
103
161
|
return evidence;
|
|
104
162
|
}
|
|
163
|
+
if (returnToRalplanCycle && advancedReviewCycle === null)
|
|
164
|
+
return null;
|
|
105
165
|
const directArchitectReview = asRecord(record.ralplan_architect_review);
|
|
106
166
|
const directCriticReview = asRecord(record.ralplan_critic_review);
|
|
107
167
|
if (hasArchitectThenCriticSequence(record)
|
|
108
168
|
&& isApproveReview(directArchitectReview, 'architect')
|
|
109
169
|
&& isApproveReview(directCriticReview, 'critic')
|
|
110
|
-
&& isCriticNotBeforeArchitect(directArchitectReview, directCriticReview)
|
|
170
|
+
&& isCriticNotBeforeArchitect(directArchitectReview, directCriticReview)
|
|
171
|
+
&& (!returnToRalplanCycle
|
|
172
|
+
|| (advancedReviewCycle !== null && reviewPairCarriesFreshnessCycle(directArchitectReview, directCriticReview, advancedReviewCycle)))) {
|
|
111
173
|
return {
|
|
174
|
+
kind: 'valid',
|
|
112
175
|
ralplan_architect_review: directArchitectReview,
|
|
113
176
|
ralplan_critic_review: directCriticReview,
|
|
114
177
|
};
|
|
@@ -120,8 +183,10 @@ function extractSequentialConsensusEvidence(value) {
|
|
|
120
183
|
const criticReview = asRecord(latestReviewEntry.ralplan_critic_review ?? latestReviewEntry.critic_review ?? latestReviewEntry.criticReview);
|
|
121
184
|
if (isApproveReview(architectReview, 'architect')
|
|
122
185
|
&& isApproveReview(criticReview, 'critic')
|
|
123
|
-
&& isCriticNotBeforeArchitect(architectReview, criticReview)
|
|
124
|
-
|
|
186
|
+
&& isCriticNotBeforeArchitect(architectReview, criticReview)
|
|
187
|
+
&& (!returnToRalplanCycle
|
|
188
|
+
|| (advancedReviewCycle !== null && reviewPairCarriesFreshnessCycle(architectReview, criticReview, advancedReviewCycle)))) {
|
|
189
|
+
return { kind: 'valid', ralplan_architect_review: architectReview, ralplan_critic_review: criticReview };
|
|
125
190
|
}
|
|
126
191
|
}
|
|
127
192
|
const architectReviews = Array.isArray(record.architectReviews) ? record.architectReviews : [];
|
|
@@ -130,13 +195,99 @@ function extractSequentialConsensusEvidence(value) {
|
|
|
130
195
|
const architectReview = asRecord(architectReviews.at(-1));
|
|
131
196
|
const criticReview = asRecord(criticReviews.at(-1));
|
|
132
197
|
if (isApproveReview(architectReview, 'architect')
|
|
198
|
+
&& isApproveReview(criticReview, 'critic')
|
|
199
|
+
&& isCriticNotBeforeArchitect(architectReview, criticReview)
|
|
200
|
+
&& (!returnToRalplanCycle
|
|
201
|
+
|| (advancedReviewCycle !== null && reviewPairCarriesFreshnessCycle(architectReview, criticReview, advancedReviewCycle)))) {
|
|
202
|
+
return { kind: 'valid', ralplan_architect_review: architectReview, ralplan_critic_review: criticReview };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
function resolveDirectGate(record) {
|
|
208
|
+
const gate = record.ralplanConsensusGate ?? record.ralplan_consensus_gate;
|
|
209
|
+
if (gate && typeof gate === 'object') {
|
|
210
|
+
const gateRecord = gate;
|
|
211
|
+
const architectReview = asRecord(gateRecord.ralplan_architect_review ?? gateRecord.architectReview ?? gateRecord.architect_review);
|
|
212
|
+
const criticReview = asRecord(gateRecord.ralplan_critic_review ?? gateRecord.criticReview ?? gateRecord.critic_review);
|
|
213
|
+
if (gateRecord.complete === true
|
|
214
|
+
&& hasArchitectThenCriticSequence(gateRecord)
|
|
215
|
+
&& isApproveReview(architectReview, 'architect')
|
|
133
216
|
&& isApproveReview(criticReview, 'critic')
|
|
134
217
|
&& isCriticNotBeforeArchitect(architectReview, criticReview)) {
|
|
135
|
-
return {
|
|
218
|
+
return {
|
|
219
|
+
kind: 'valid',
|
|
220
|
+
ralplan_architect_review: architectReview,
|
|
221
|
+
ralplan_critic_review: criticReview,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (gateRecord.complete === true) {
|
|
225
|
+
const blockedDetails = [
|
|
226
|
+
...reviewApprovalProblems(architectReview, 'architect'),
|
|
227
|
+
...reviewApprovalProblems(criticReview, 'critic'),
|
|
228
|
+
];
|
|
229
|
+
if (!hasArchitectThenCriticSequence(gateRecord)) {
|
|
230
|
+
blockedDetails.push('consensus review sequence is not architect-review then critic-review');
|
|
231
|
+
}
|
|
232
|
+
if (!isCriticNotBeforeArchitect(architectReview, criticReview)) {
|
|
233
|
+
blockedDetails.push('critic review is ordered before architect review');
|
|
234
|
+
}
|
|
235
|
+
if (blockedDetails.length > 0) {
|
|
236
|
+
return {
|
|
237
|
+
kind: 'invalid',
|
|
238
|
+
ralplan_architect_review: architectReview,
|
|
239
|
+
ralplan_critic_review: criticReview,
|
|
240
|
+
blockedDetails,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
136
243
|
}
|
|
137
244
|
}
|
|
138
245
|
return null;
|
|
139
246
|
}
|
|
247
|
+
export function withParentReturnToRalplanContext(value, parent) {
|
|
248
|
+
const reason = parent.return_to_ralplan_reason ?? parent.returnToRalplanReason;
|
|
249
|
+
if (typeof reason !== 'string' || reason.trim() === '' || !value || typeof value !== 'object' || Array.isArray(value)) {
|
|
250
|
+
return value;
|
|
251
|
+
}
|
|
252
|
+
const record = value;
|
|
253
|
+
const parentReviewCycle = numericValue(parent.return_to_ralplan_parent_review_cycle
|
|
254
|
+
?? parent.returnToRalplanParentReviewCycle
|
|
255
|
+
?? parent.review_cycle
|
|
256
|
+
?? parent.reviewCycle);
|
|
257
|
+
const inheritedReviewCycle = record.review_cycle ?? record.reviewCycle ?? parent.review_cycle ?? parent.reviewCycle;
|
|
258
|
+
return {
|
|
259
|
+
...record,
|
|
260
|
+
review_cycle: inheritedReviewCycle,
|
|
261
|
+
current_phase: parent.current_phase ?? parent.currentPhase ?? 'ralplan',
|
|
262
|
+
return_to_ralplan_reason: reason,
|
|
263
|
+
return_to_ralplan_parent_review_cycle: parentReviewCycle,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
function explicitFreshnessReviewCycle(record) {
|
|
267
|
+
const parentReviewCycle = numericValue(record.return_to_ralplan_parent_review_cycle ?? record.returnToRalplanParentReviewCycle);
|
|
268
|
+
const candidateReviewCycle = numericValue(record.review_cycle ?? record.reviewCycle);
|
|
269
|
+
return parentReviewCycle !== null
|
|
270
|
+
&& candidateReviewCycle !== null
|
|
271
|
+
&& candidateReviewCycle > parentReviewCycle
|
|
272
|
+
? candidateReviewCycle
|
|
273
|
+
: null;
|
|
274
|
+
}
|
|
275
|
+
function reviewsCarryFreshnessCycle(evidence, reviewCycle) {
|
|
276
|
+
return evidence.kind === 'valid'
|
|
277
|
+
&& reviewPairCarriesFreshnessCycle(evidence.ralplan_architect_review, evidence.ralplan_critic_review, reviewCycle);
|
|
278
|
+
}
|
|
279
|
+
function reviewPairCarriesFreshnessCycle(architectReview, criticReview, reviewCycle) {
|
|
280
|
+
return reviewCarriesFreshnessCycle(architectReview, reviewCycle)
|
|
281
|
+
&& reviewCarriesFreshnessCycle(criticReview, reviewCycle);
|
|
282
|
+
}
|
|
283
|
+
function reviewCarriesFreshnessCycle(review, reviewCycle) {
|
|
284
|
+
const cycle = numericValue(review?.review_cycle ?? review?.reviewCycle);
|
|
285
|
+
return cycle !== null && cycle >= reviewCycle;
|
|
286
|
+
}
|
|
287
|
+
function numericValue(value) {
|
|
288
|
+
const parsed = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;
|
|
289
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
290
|
+
}
|
|
140
291
|
function asRecord(value) {
|
|
141
292
|
return value && typeof value === 'object' ? value : null;
|
|
142
293
|
}
|
|
@@ -145,16 +296,48 @@ function isApproveReview(value, agentRole) {
|
|
|
145
296
|
return false;
|
|
146
297
|
if (value.verdict !== undefined && value.verdict !== 'approve')
|
|
147
298
|
return false;
|
|
148
|
-
if (value.status !== undefined && !
|
|
299
|
+
if (value.status !== undefined && !isApprovedStatus(value.status)) {
|
|
149
300
|
return false;
|
|
150
301
|
}
|
|
151
|
-
if (value.recommendation !== undefined && !
|
|
302
|
+
if (value.recommendation !== undefined && !isApproveRecommendation(value.recommendation)) {
|
|
152
303
|
return false;
|
|
153
304
|
}
|
|
154
305
|
if (hasBlockingReviewSignal(value))
|
|
155
306
|
return false;
|
|
307
|
+
return hasPositiveReviewApprovalSignal(value);
|
|
308
|
+
}
|
|
309
|
+
function reviewApprovalProblems(value, agentRole) {
|
|
310
|
+
const issues = [];
|
|
311
|
+
if (!value)
|
|
312
|
+
return [`${agentRole} review is missing`];
|
|
313
|
+
if (value.agent_role !== agentRole)
|
|
314
|
+
issues.push(`${agentRole} review has agent_role=${String(value.agent_role || 'missing')}`);
|
|
315
|
+
if (value.verdict !== undefined && value.verdict !== 'approve') {
|
|
316
|
+
issues.push(`${agentRole} review verdict=${String(value.verdict)} is not approve`);
|
|
317
|
+
}
|
|
318
|
+
if (value.status !== undefined && !isApprovedStatus(value.status)) {
|
|
319
|
+
issues.push(`${agentRole} review status=${String(value.status)} is not approve`);
|
|
320
|
+
}
|
|
321
|
+
if (value.recommendation !== undefined && !isApproveRecommendation(value.recommendation)) {
|
|
322
|
+
issues.push(`${agentRole} review recommendation=${String(value.recommendation)} is not approve`);
|
|
323
|
+
}
|
|
324
|
+
if (issues.length === 0 && hasBlockingReviewSignal(value)) {
|
|
325
|
+
issues.push(`${agentRole} review has a blocking signal`);
|
|
326
|
+
}
|
|
327
|
+
if (issues.length === 0 && !hasPositiveReviewApprovalSignal(value)) {
|
|
328
|
+
issues.push(`${agentRole} review lacks approving evidence`);
|
|
329
|
+
}
|
|
330
|
+
return issues;
|
|
331
|
+
}
|
|
332
|
+
function hasPositiveReviewApprovalSignal(value) {
|
|
156
333
|
return value.verdict === 'approve' || value.approved === true || value.clean === true;
|
|
157
334
|
}
|
|
335
|
+
function isApprovedStatus(value) {
|
|
336
|
+
return ['approve', 'approved', 'clear', 'pass', 'passed'].includes(String(value).toLowerCase());
|
|
337
|
+
}
|
|
338
|
+
function isApproveRecommendation(value) {
|
|
339
|
+
return ['approve', 'approved'].includes(String(value).toLowerCase());
|
|
340
|
+
}
|
|
158
341
|
function hasArchitectThenCriticSequence(value) {
|
|
159
342
|
if (!Array.isArray(value.sequence))
|
|
160
343
|
return true;
|
|
@@ -185,9 +368,7 @@ function reviewOrderValue(review) {
|
|
|
185
368
|
return null;
|
|
186
369
|
}
|
|
187
370
|
function hasTrackerBackedNativeRalplanLanes(evidence, options) {
|
|
188
|
-
|
|
189
|
-
const criticThreadId = nativeReviewThreadId(evidence.ralplan_critic_review);
|
|
190
|
-
if (!architectThreadId || !criticThreadId || architectThreadId === criticThreadId)
|
|
371
|
+
if (trackerBackedNativeReviewPairProblem(evidence, options))
|
|
191
372
|
return false;
|
|
192
373
|
return isTrackerBackedNativeReview(evidence.ralplan_architect_review, 'architect', options)
|
|
193
374
|
&& isTrackerBackedNativeReview(evidence.ralplan_critic_review, 'critic', options);
|
|
@@ -195,16 +376,35 @@ function hasTrackerBackedNativeRalplanLanes(evidence, options) {
|
|
|
195
376
|
function nativeReviewThreadId(review) {
|
|
196
377
|
return typeof review?.thread_id === 'string' ? review.thread_id.trim() : '';
|
|
197
378
|
}
|
|
379
|
+
function trackerBackedNativeReviewPairProblem(evidence, options) {
|
|
380
|
+
const architectThreadId = nativeReviewThreadId(evidence.ralplan_architect_review);
|
|
381
|
+
const criticThreadId = nativeReviewThreadId(evidence.ralplan_critic_review);
|
|
382
|
+
if (architectThreadId && criticThreadId && architectThreadId === criticThreadId) {
|
|
383
|
+
return 'architect and critic reviews must reference distinct native subagent tracker threads';
|
|
384
|
+
}
|
|
385
|
+
const transitionSessionId = typeof options.sessionId === 'string' ? options.sessionId.trim() : '';
|
|
386
|
+
const architectSessionId = transitionSessionId || nativeReviewSessionId(evidence.ralplan_architect_review);
|
|
387
|
+
const criticSessionId = transitionSessionId || nativeReviewSessionId(evidence.ralplan_critic_review);
|
|
388
|
+
if (!architectSessionId || !criticSessionId)
|
|
389
|
+
return null;
|
|
390
|
+
return architectSessionId === criticSessionId
|
|
391
|
+
? null
|
|
392
|
+
: `architect and critic reviews must resolve to the same native subagent tracker session; architect session_id=${architectSessionId}, critic session_id=${criticSessionId}`;
|
|
393
|
+
}
|
|
198
394
|
function isTrackerBackedNativeReview(review, agentRole, options) {
|
|
199
395
|
return trackerBackedNativeReviewProblem(review, agentRole, options) === null;
|
|
200
396
|
}
|
|
397
|
+
function nativeReviewSessionId(review) {
|
|
398
|
+
return typeof review?.session_id === 'string' ? review.session_id.trim() : '';
|
|
399
|
+
}
|
|
201
400
|
function trackerBackedNativeReviewProblem(review, agentRole, options) {
|
|
401
|
+
const issues = [];
|
|
202
402
|
if (!review)
|
|
203
403
|
return `${agentRole} review is missing`;
|
|
204
404
|
if (review.agent_role !== agentRole)
|
|
205
|
-
|
|
405
|
+
issues.push(`${agentRole} review has agent_role=${String(review.agent_role || 'missing')}`);
|
|
206
406
|
if (review.provenance_kind !== 'native_subagent')
|
|
207
|
-
|
|
407
|
+
issues.push(`${agentRole} review has provenance_kind=${String(review.provenance_kind || 'missing')}`);
|
|
208
408
|
const sessionId = typeof options.sessionId === 'string' && options.sessionId.trim()
|
|
209
409
|
? options.sessionId.trim()
|
|
210
410
|
: typeof review.session_id === 'string'
|
|
@@ -212,21 +412,21 @@ function trackerBackedNativeReviewProblem(review, agentRole, options) {
|
|
|
212
412
|
: '';
|
|
213
413
|
const reviewSessionId = typeof review.session_id === 'string' ? review.session_id.trim() : '';
|
|
214
414
|
const threadId = typeof review.thread_id === 'string' ? review.thread_id.trim() : '';
|
|
215
|
-
const artifactPath = typeof review.artifact_path === 'string' ? review.artifact_path.trim() : '';
|
|
216
415
|
const trackerPath = typeof review.tracker_path === 'string' ? review.tracker_path.trim() : '';
|
|
217
416
|
if (!sessionId)
|
|
218
|
-
|
|
219
|
-
if (
|
|
220
|
-
|
|
417
|
+
issues.push(`${agentRole} review cannot resolve session_id`);
|
|
418
|
+
if (reviewSessionId && reviewSessionId !== sessionId)
|
|
419
|
+
issues.push(`${agentRole} review session_id=${reviewSessionId} does not match ${sessionId || 'missing'}`);
|
|
221
420
|
if (!threadId)
|
|
222
|
-
|
|
223
|
-
if (!
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
421
|
+
issues.push(`${agentRole} review missing thread_id`);
|
|
422
|
+
if (trackerPath && !trackerPath.endsWith('subagent-tracking.json'))
|
|
423
|
+
issues.push(`${agentRole} review tracker_path=${trackerPath} is not subagent-tracking.json`);
|
|
424
|
+
const cwd = typeof options.cwd === 'string' ? options.cwd.trim() : '';
|
|
425
|
+
if (!cwd)
|
|
426
|
+
issues.push(`${agentRole} review cannot resolve cwd for tracker lookup`);
|
|
427
|
+
if (issues.length > 0)
|
|
428
|
+
return issues.join('; ');
|
|
429
|
+
const expectedTrackerPath = subagentTrackingPath(cwd);
|
|
230
430
|
const tracking = readJsonState(expectedTrackerPath);
|
|
231
431
|
const session = asRecord(asRecord(tracking?.sessions)?.[sessionId]);
|
|
232
432
|
const thread = asRecord(asRecord(session?.threads)?.[threadId]);
|
|
@@ -241,12 +441,15 @@ function trackerBackedNativeReviewProblem(review, agentRole, options) {
|
|
|
241
441
|
return `${agentRole} tracker thread ${threadId} is the session leader`;
|
|
242
442
|
if (thread.kind !== 'subagent')
|
|
243
443
|
return `${agentRole} tracker thread ${threadId} has kind=${String(thread.kind || 'missing')}`;
|
|
444
|
+
const completedAt = typeof thread.completed_at === 'string' ? thread.completed_at.trim() : '';
|
|
445
|
+
if (!completedAt)
|
|
446
|
+
return `${agentRole} tracker thread ${threadId} is not completed`;
|
|
244
447
|
return null;
|
|
245
448
|
}
|
|
246
449
|
function currentSessionNativeLeaderThreadId(cwd) {
|
|
247
450
|
if (!cwd)
|
|
248
451
|
return '';
|
|
249
|
-
const sessionState = readJsonState(join(cwd, '
|
|
452
|
+
const sessionState = readJsonState(join(getBaseStateDir(cwd), 'session.json'));
|
|
250
453
|
return typeof sessionState?.native_session_id === 'string' ? sessionState.native_session_id.trim() : '';
|
|
251
454
|
}
|
|
252
455
|
function validateLocalSessionId(sessionId) {
|
|
@@ -283,12 +486,31 @@ function hasBlockingReviewSignal(value) {
|
|
|
283
486
|
return false;
|
|
284
487
|
}
|
|
285
488
|
function readLocalCurrentSessionIds(cwd) {
|
|
286
|
-
const state = readJsonState(join(cwd, '
|
|
489
|
+
const state = readJsonState(join(getBaseStateDir(cwd), 'session.json'));
|
|
287
490
|
if (typeof state?.cwd === 'string' && state.cwd !== cwd)
|
|
288
491
|
return [];
|
|
289
492
|
const sessionId = typeof state?.session_id === 'string' ? state.session_id : undefined;
|
|
290
493
|
return sessionId ? validateLocalSessionId(sessionId) : [];
|
|
291
494
|
}
|
|
495
|
+
function localBaseStateDir(cwd) {
|
|
496
|
+
return join(resolveWorkingDirectoryForState(cwd), '.omx', 'state');
|
|
497
|
+
}
|
|
498
|
+
function sessionIdFromStateRoot(path) {
|
|
499
|
+
const normalized = path.replace(/\\/g, '/');
|
|
500
|
+
const match = /\/sessions\/([^/]+)$/.exec(normalized);
|
|
501
|
+
const sessionId = match?.[1];
|
|
502
|
+
return sessionId && validateLocalSessionId(sessionId).length > 0 ? sessionId : undefined;
|
|
503
|
+
}
|
|
504
|
+
function uniquePaths(paths) {
|
|
505
|
+
return [...new Set(paths)];
|
|
506
|
+
}
|
|
507
|
+
function isReturnToRalplanCycle(record) {
|
|
508
|
+
const currentPhase = String(record.current_phase ?? record.currentPhase ?? '').toLowerCase();
|
|
509
|
+
const reason = record.return_to_ralplan_reason ?? record.returnToRalplanReason;
|
|
510
|
+
return currentPhase === 'ralplan'
|
|
511
|
+
&& typeof reason === 'string'
|
|
512
|
+
&& reason.trim().length > 0;
|
|
513
|
+
}
|
|
292
514
|
function readJsonState(path) {
|
|
293
515
|
if (!existsSync(path))
|
|
294
516
|
return null;
|