@madmatt112org/spec-workflow-mcp 3.0.0
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/CHANGELOG.md +1013 -0
- package/LICENSE +674 -0
- package/README.md +458 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +264 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/index-args.test.d.ts +2 -0
- package/dist/__tests__/index-args.test.d.ts.map +1 -0
- package/dist/__tests__/index-args.test.js +43 -0
- package/dist/__tests__/index-args.test.js.map +1 -0
- package/dist/__tests__/index-entrypoint.test.d.ts +2 -0
- package/dist/__tests__/index-entrypoint.test.d.ts.map +1 -0
- package/dist/__tests__/index-entrypoint.test.js +23 -0
- package/dist/__tests__/index-entrypoint.test.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +188 -0
- package/dist/config.js.map +1 -0
- package/dist/core/__tests__/adversarial-settings.test.d.ts +2 -0
- package/dist/core/__tests__/adversarial-settings.test.d.ts.map +1 -0
- package/dist/core/__tests__/adversarial-settings.test.js +361 -0
- package/dist/core/__tests__/adversarial-settings.test.js.map +1 -0
- package/dist/core/__tests__/deferral-storage.test.d.ts +2 -0
- package/dist/core/__tests__/deferral-storage.test.d.ts.map +1 -0
- package/dist/core/__tests__/deferral-storage.test.js +181 -0
- package/dist/core/__tests__/deferral-storage.test.js.map +1 -0
- package/dist/core/__tests__/git-utils.test.d.ts +2 -0
- package/dist/core/__tests__/git-utils.test.d.ts.map +1 -0
- package/dist/core/__tests__/git-utils.test.js +179 -0
- package/dist/core/__tests__/git-utils.test.js.map +1 -0
- package/dist/core/__tests__/hygiene-signals.test.d.ts +2 -0
- package/dist/core/__tests__/hygiene-signals.test.d.ts.map +1 -0
- package/dist/core/__tests__/hygiene-signals.test.js +200 -0
- package/dist/core/__tests__/hygiene-signals.test.js.map +1 -0
- package/dist/core/__tests__/mdx-validator.test.d.ts +2 -0
- package/dist/core/__tests__/mdx-validator.test.d.ts.map +1 -0
- package/dist/core/__tests__/mdx-validator.test.js +42 -0
- package/dist/core/__tests__/mdx-validator.test.js.map +1 -0
- package/dist/core/__tests__/path-denylist.test.d.ts +2 -0
- package/dist/core/__tests__/path-denylist.test.d.ts.map +1 -0
- package/dist/core/__tests__/path-denylist.test.js +242 -0
- package/dist/core/__tests__/path-denylist.test.js.map +1 -0
- package/dist/core/__tests__/path-utils.test.d.ts +2 -0
- package/dist/core/__tests__/path-utils.test.d.ts.map +1 -0
- package/dist/core/__tests__/path-utils.test.js +342 -0
- package/dist/core/__tests__/path-utils.test.js.map +1 -0
- package/dist/core/__tests__/project-registry.test.d.ts +2 -0
- package/dist/core/__tests__/project-registry.test.d.ts.map +1 -0
- package/dist/core/__tests__/project-registry.test.js +62 -0
- package/dist/core/__tests__/project-registry.test.js.map +1 -0
- package/dist/core/__tests__/security-utils.test.d.ts +2 -0
- package/dist/core/__tests__/security-utils.test.d.ts.map +1 -0
- package/dist/core/__tests__/security-utils.test.js +643 -0
- package/dist/core/__tests__/security-utils.test.js.map +1 -0
- package/dist/core/__tests__/task-diff.test.d.ts +2 -0
- package/dist/core/__tests__/task-diff.test.d.ts.map +1 -0
- package/dist/core/__tests__/task-diff.test.js +287 -0
- package/dist/core/__tests__/task-diff.test.js.map +1 -0
- package/dist/core/__tests__/task-review-manager.test.d.ts +2 -0
- package/dist/core/__tests__/task-review-manager.test.d.ts.map +1 -0
- package/dist/core/__tests__/task-review-manager.test.js +235 -0
- package/dist/core/__tests__/task-review-manager.test.js.map +1 -0
- package/dist/core/__tests__/task-validator.test.d.ts +2 -0
- package/dist/core/__tests__/task-validator.test.d.ts.map +1 -0
- package/dist/core/__tests__/task-validator.test.js +237 -0
- package/dist/core/__tests__/task-validator.test.js.map +1 -0
- package/dist/core/__tests__/typecheck.test.d.ts +2 -0
- package/dist/core/__tests__/typecheck.test.d.ts.map +1 -0
- package/dist/core/__tests__/typecheck.test.js +558 -0
- package/dist/core/__tests__/typecheck.test.js.map +1 -0
- package/dist/core/adversarial-settings.d.ts +23 -0
- package/dist/core/adversarial-settings.d.ts.map +1 -0
- package/dist/core/adversarial-settings.js +148 -0
- package/dist/core/adversarial-settings.js.map +1 -0
- package/dist/core/archive-service.d.ts +10 -0
- package/dist/core/archive-service.d.ts.map +1 -0
- package/dist/core/archive-service.js +99 -0
- package/dist/core/archive-service.js.map +1 -0
- package/dist/core/dashboard-session.d.ts +49 -0
- package/dist/core/dashboard-session.d.ts.map +1 -0
- package/dist/core/dashboard-session.js +132 -0
- package/dist/core/dashboard-session.js.map +1 -0
- package/dist/core/deferral-storage.d.ts +32 -0
- package/dist/core/deferral-storage.d.ts.map +1 -0
- package/dist/core/deferral-storage.js +232 -0
- package/dist/core/deferral-storage.js.map +1 -0
- package/dist/core/git-utils.d.ts +25 -0
- package/dist/core/git-utils.d.ts.map +1 -0
- package/dist/core/git-utils.js +87 -0
- package/dist/core/git-utils.js.map +1 -0
- package/dist/core/global-dir.d.ts +44 -0
- package/dist/core/global-dir.d.ts.map +1 -0
- package/dist/core/global-dir.js +74 -0
- package/dist/core/global-dir.js.map +1 -0
- package/dist/core/hygiene-signals.d.ts +8 -0
- package/dist/core/hygiene-signals.d.ts.map +1 -0
- package/dist/core/hygiene-signals.js +41 -0
- package/dist/core/hygiene-signals.js.map +1 -0
- package/dist/core/implementation-log-migrator.d.ts +41 -0
- package/dist/core/implementation-log-migrator.d.ts.map +1 -0
- package/dist/core/implementation-log-migrator.js +258 -0
- package/dist/core/implementation-log-migrator.js.map +1 -0
- package/dist/core/mdx-validator.d.ts +14 -0
- package/dist/core/mdx-validator.d.ts.map +1 -0
- package/dist/core/mdx-validator.js +34 -0
- package/dist/core/mdx-validator.js.map +1 -0
- package/dist/core/parser.d.ts +11 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +126 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/path-denylist.d.ts +8 -0
- package/dist/core/path-denylist.d.ts.map +1 -0
- package/dist/core/path-denylist.js +107 -0
- package/dist/core/path-denylist.js.map +1 -0
- package/dist/core/path-utils.d.ts +69 -0
- package/dist/core/path-utils.d.ts.map +1 -0
- package/dist/core/path-utils.js +306 -0
- package/dist/core/path-utils.js.map +1 -0
- package/dist/core/project-registry.d.ts +94 -0
- package/dist/core/project-registry.d.ts.map +1 -0
- package/dist/core/project-registry.js +297 -0
- package/dist/core/project-registry.js.map +1 -0
- package/dist/core/security-utils.d.ts +97 -0
- package/dist/core/security-utils.d.ts.map +1 -0
- package/dist/core/security-utils.js +264 -0
- package/dist/core/security-utils.js.map +1 -0
- package/dist/core/task-diff.d.ts +15 -0
- package/dist/core/task-diff.d.ts.map +1 -0
- package/dist/core/task-diff.js +136 -0
- package/dist/core/task-diff.js.map +1 -0
- package/dist/core/task-parser.d.ts +63 -0
- package/dist/core/task-parser.d.ts.map +1 -0
- package/dist/core/task-parser.js +332 -0
- package/dist/core/task-parser.js.map +1 -0
- package/dist/core/task-review-manager.d.ts +56 -0
- package/dist/core/task-review-manager.d.ts.map +1 -0
- package/dist/core/task-review-manager.js +281 -0
- package/dist/core/task-review-manager.js.map +1 -0
- package/dist/core/task-validator.d.ts +35 -0
- package/dist/core/task-validator.d.ts.map +1 -0
- package/dist/core/task-validator.js +236 -0
- package/dist/core/task-validator.js.map +1 -0
- package/dist/core/typecheck.d.ts +33 -0
- package/dist/core/typecheck.d.ts.map +1 -0
- package/dist/core/typecheck.js +375 -0
- package/dist/core/typecheck.js.map +1 -0
- package/dist/core/workspace-initializer.d.ts +16 -0
- package/dist/core/workspace-initializer.d.ts.map +1 -0
- package/dist/core/workspace-initializer.js +167 -0
- package/dist/core/workspace-initializer.js.map +1 -0
- package/dist/dashboard/__tests__/adversarial-display-state.test.d.ts +2 -0
- package/dist/dashboard/__tests__/adversarial-display-state.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/adversarial-display-state.test.js +59 -0
- package/dist/dashboard/__tests__/adversarial-display-state.test.js.map +1 -0
- package/dist/dashboard/__tests__/adversarial-endpoints.test.d.ts +2 -0
- package/dist/dashboard/__tests__/adversarial-endpoints.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/adversarial-endpoints.test.js +296 -0
- package/dist/dashboard/__tests__/adversarial-endpoints.test.js.map +1 -0
- package/dist/dashboard/__tests__/adversarial-runner.test.d.ts +2 -0
- package/dist/dashboard/__tests__/adversarial-runner.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/adversarial-runner.test.js +315 -0
- package/dist/dashboard/__tests__/adversarial-runner.test.js.map +1 -0
- package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts +2 -0
- package/dist/dashboard/__tests__/approval-storage-path-resolution.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js +78 -0
- package/dist/dashboard/__tests__/approval-storage-path-resolution.test.js.map +1 -0
- package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts +2 -0
- package/dist/dashboard/__tests__/multi-server-approvals-content.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/multi-server-approvals-content.test.js +115 -0
- package/dist/dashboard/__tests__/multi-server-approvals-content.test.js.map +1 -0
- package/dist/dashboard/__tests__/multi-server.test.d.ts +2 -0
- package/dist/dashboard/__tests__/multi-server.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/multi-server.test.js +388 -0
- package/dist/dashboard/__tests__/multi-server.test.js.map +1 -0
- package/dist/dashboard/__tests__/task-review-runner.test.d.ts +2 -0
- package/dist/dashboard/__tests__/task-review-runner.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/task-review-runner.test.js +255 -0
- package/dist/dashboard/__tests__/task-review-runner.test.js.map +1 -0
- package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts +2 -0
- package/dist/dashboard/__tests__/watcher-error-handling.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/watcher-error-handling.test.js +118 -0
- package/dist/dashboard/__tests__/watcher-error-handling.test.js.map +1 -0
- package/dist/dashboard/adversarial-display-state.d.ts +38 -0
- package/dist/dashboard/adversarial-display-state.d.ts.map +1 -0
- package/dist/dashboard/adversarial-display-state.js +45 -0
- package/dist/dashboard/adversarial-display-state.js.map +1 -0
- package/dist/dashboard/adversarial-runner.d.ts +44 -0
- package/dist/dashboard/adversarial-runner.d.ts.map +1 -0
- package/dist/dashboard/adversarial-runner.js +168 -0
- package/dist/dashboard/adversarial-runner.js.map +1 -0
- package/dist/dashboard/approval-storage.d.ts +139 -0
- package/dist/dashboard/approval-storage.d.ts.map +1 -0
- package/dist/dashboard/approval-storage.js +608 -0
- package/dist/dashboard/approval-storage.js.map +1 -0
- package/dist/dashboard/execution-history-manager.d.ts +52 -0
- package/dist/dashboard/execution-history-manager.d.ts.map +1 -0
- package/dist/dashboard/execution-history-manager.js +161 -0
- package/dist/dashboard/execution-history-manager.js.map +1 -0
- package/dist/dashboard/implementation-log-manager.d.ts +102 -0
- package/dist/dashboard/implementation-log-manager.d.ts.map +1 -0
- package/dist/dashboard/implementation-log-manager.js +594 -0
- package/dist/dashboard/implementation-log-manager.js.map +1 -0
- package/dist/dashboard/job-scheduler.d.ts +91 -0
- package/dist/dashboard/job-scheduler.d.ts.map +1 -0
- package/dist/dashboard/job-scheduler.js +321 -0
- package/dist/dashboard/job-scheduler.js.map +1 -0
- package/dist/dashboard/multi-server.d.ts +45 -0
- package/dist/dashboard/multi-server.d.ts.map +1 -0
- package/dist/dashboard/multi-server.js +1927 -0
- package/dist/dashboard/multi-server.js.map +1 -0
- package/dist/dashboard/parser.d.ts +18 -0
- package/dist/dashboard/parser.d.ts.map +1 -0
- package/dist/dashboard/parser.js +243 -0
- package/dist/dashboard/parser.js.map +1 -0
- package/dist/dashboard/project-manager.d.ts +82 -0
- package/dist/dashboard/project-manager.d.ts.map +1 -0
- package/dist/dashboard/project-manager.js +257 -0
- package/dist/dashboard/project-manager.js.map +1 -0
- package/dist/dashboard/public/assets/Inter-Bold-CD3Pr7BX.woff2 +0 -0
- package/dist/dashboard/public/assets/Inter-Medium-B_8v_WHh.woff2 +0 -0
- package/dist/dashboard/public/assets/Inter-Regular-DRVdRqcI.woff2 +0 -0
- package/dist/dashboard/public/assets/Inter-SemiBold-CtskMddL.woff2 +0 -0
- package/dist/dashboard/public/assets/JetBrainsMono-Bold-D4WEaHbo.woff2 +0 -0
- package/dist/dashboard/public/assets/JetBrainsMono-Medium-3S3k2nMz.woff2 +0 -0
- package/dist/dashboard/public/assets/JetBrainsMono-Regular-BQaDgvhP.woff2 +0 -0
- package/dist/dashboard/public/assets/Tableau10-B-NsZVaP.js +1 -0
- package/dist/dashboard/public/assets/apl-B4CMkyY2.js +1 -0
- package/dist/dashboard/public/assets/arc-A04OOED4.js +1 -0
- package/dist/dashboard/public/assets/array-BKyUJesY.js +1 -0
- package/dist/dashboard/public/assets/asciiarmor-Df11BRmG.js +1 -0
- package/dist/dashboard/public/assets/asn1-EdZsLKOL.js +1 -0
- package/dist/dashboard/public/assets/asterisk-B-8jnY81.js +1 -0
- package/dist/dashboard/public/assets/blockDiagram-c4efeb88--RobHnfG.js +118 -0
- package/dist/dashboard/public/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/dist/dashboard/public/assets/c4Diagram-c83219d4-tY8lPXxy.js +10 -0
- package/dist/dashboard/public/assets/channel-Cg2ZlORc.js +1 -0
- package/dist/dashboard/public/assets/classDiagram-beda092f-DBiupBFm.js +2 -0
- package/dist/dashboard/public/assets/classDiagram-v2-2358418a-FM2jRAtm.js +2 -0
- package/dist/dashboard/public/assets/clike-B9uivgTg.js +1 -0
- package/dist/dashboard/public/assets/clojure-BMjYHr_A.js +1 -0
- package/dist/dashboard/public/assets/clone-CCO9qihz.js +1 -0
- package/dist/dashboard/public/assets/cmake-BQqOBYOt.js +1 -0
- package/dist/dashboard/public/assets/cobol-CWcv1MsR.js +1 -0
- package/dist/dashboard/public/assets/coffeescript-S37ZYGWr.js +1 -0
- package/dist/dashboard/public/assets/commonlisp-DBKNyK5s.js +1 -0
- package/dist/dashboard/public/assets/createText-1719965b-C_nyx2v1.js +7 -0
- package/dist/dashboard/public/assets/crystal-SjHAIU92.js +1 -0
- package/dist/dashboard/public/assets/css-BnMrqG3P.js +1 -0
- package/dist/dashboard/public/assets/cypher-C_CwsFkJ.js +1 -0
- package/dist/dashboard/public/assets/d-pRatUO7H.js +1 -0
- package/dist/dashboard/public/assets/diff-DbItnlRl.js +1 -0
- package/dist/dashboard/public/assets/dockerfile-BKs6k2Af.js +1 -0
- package/dist/dashboard/public/assets/dtd-DF_7sFjM.js +1 -0
- package/dist/dashboard/public/assets/dylan-DwRh75JA.js +1 -0
- package/dist/dashboard/public/assets/ebnf-CDyGwa7X.js +1 -0
- package/dist/dashboard/public/assets/ecl-Cabwm37j.js +1 -0
- package/dist/dashboard/public/assets/edges-96097737-BsffumDq.js +4 -0
- package/dist/dashboard/public/assets/eiffel-CnydiIhH.js +1 -0
- package/dist/dashboard/public/assets/elm-vLlmbW-K.js +1 -0
- package/dist/dashboard/public/assets/erDiagram-0228fc6a-BK-uOJy1.js +51 -0
- package/dist/dashboard/public/assets/erlang-BNw1qcRV.js +1 -0
- package/dist/dashboard/public/assets/factor-kuTfRLto.js +1 -0
- package/dist/dashboard/public/assets/fcl-Kvtd6kyn.js +1 -0
- package/dist/dashboard/public/assets/flowDb-c6c81e3f-BC8_H7l7.js +10 -0
- package/dist/dashboard/public/assets/flowDiagram-50d868cf-0XbjRISj.js +4 -0
- package/dist/dashboard/public/assets/flowDiagram-v2-4f6560a1-CXE3CwgW.js +1 -0
- package/dist/dashboard/public/assets/flowchart-elk-definition-6af322e1-CCvs3UPr.js +139 -0
- package/dist/dashboard/public/assets/forth-Ffai-XNe.js +1 -0
- package/dist/dashboard/public/assets/fortran-DYz_wnZ1.js +1 -0
- package/dist/dashboard/public/assets/ganttDiagram-a2739b55-Yp2gfoGL.js +257 -0
- package/dist/dashboard/public/assets/gas-Bneqetm1.js +1 -0
- package/dist/dashboard/public/assets/gherkin-heZmZLOM.js +1 -0
- package/dist/dashboard/public/assets/gitGraphDiagram-82fe8481-njx_NoNr.js +70 -0
- package/dist/dashboard/public/assets/graph-COR8Ljm7.js +1 -0
- package/dist/dashboard/public/assets/groovy-D9Dt4D0W.js +1 -0
- package/dist/dashboard/public/assets/haskell-Cw1EW3IL.js +1 -0
- package/dist/dashboard/public/assets/haxe-H-WmDvRZ.js +1 -0
- package/dist/dashboard/public/assets/http-DBlCnlav.js +1 -0
- package/dist/dashboard/public/assets/idl-BEugSyMb.js +1 -0
- package/dist/dashboard/public/assets/index-0abMV41b.js +1 -0
- package/dist/dashboard/public/assets/index-5325376f-cWsAocic.js +1 -0
- package/dist/dashboard/public/assets/index-BH121EUE.js +1 -0
- package/dist/dashboard/public/assets/index-BMLdkmFP.js +1 -0
- package/dist/dashboard/public/assets/index-BYgbrt4G.js +1 -0
- package/dist/dashboard/public/assets/index-BwFDzEd4.js +3 -0
- package/dist/dashboard/public/assets/index-CS7gsYFH.js +1 -0
- package/dist/dashboard/public/assets/index-Cc6cUpKS.js +1 -0
- package/dist/dashboard/public/assets/index-CgeymaoH.js +1 -0
- package/dist/dashboard/public/assets/index-Cl5FjFWx.js +1 -0
- package/dist/dashboard/public/assets/index-CnN2VPRa.js +1 -0
- package/dist/dashboard/public/assets/index-DDWkdUEb.js +1 -0
- package/dist/dashboard/public/assets/index-DLUjIeO9.js +1 -0
- package/dist/dashboard/public/assets/index-Dm3-5ZYh.js +319 -0
- package/dist/dashboard/public/assets/index-Ds4s2dDD.js +2 -0
- package/dist/dashboard/public/assets/index-DvrmwdIJ.js +1 -0
- package/dist/dashboard/public/assets/index-MTVs_iIW.js +7 -0
- package/dist/dashboard/public/assets/index-UGm8eYTB.js +1 -0
- package/dist/dashboard/public/assets/index-Zi39sM21.css +1 -0
- package/dist/dashboard/public/assets/index-iL66igAo.js +1 -0
- package/dist/dashboard/public/assets/infoDiagram-8eee0895-TQXQOcbQ.js +7 -0
- package/dist/dashboard/public/assets/init-Gi6I4Gst.js +1 -0
- package/dist/dashboard/public/assets/javascript-iXu5QeM3.js +1 -0
- package/dist/dashboard/public/assets/journeyDiagram-c64418c1-C7AIhJZ8.js +139 -0
- package/dist/dashboard/public/assets/julia-DuME0IfC.js +1 -0
- package/dist/dashboard/public/assets/katex-XbL3y5x-.js +261 -0
- package/dist/dashboard/public/assets/layout-BzInGx9g.js +1 -0
- package/dist/dashboard/public/assets/line-BvqpNAKs.js +1 -0
- package/dist/dashboard/public/assets/linear-CMco2PTv.js +1 -0
- package/dist/dashboard/public/assets/livescript-BwQOo05w.js +1 -0
- package/dist/dashboard/public/assets/lua-BgMRiT3U.js +1 -0
- package/dist/dashboard/public/assets/mathematica-DTrFuWx2.js +1 -0
- package/dist/dashboard/public/assets/mbox-CNhZ1qSd.js +1 -0
- package/dist/dashboard/public/assets/mindmap-definition-8da855dc-CeJT8t3A.js +415 -0
- package/dist/dashboard/public/assets/mirc-CjQqDB4T.js +1 -0
- package/dist/dashboard/public/assets/mllike-CXdrOF99.js +1 -0
- package/dist/dashboard/public/assets/modelica-Dc1JOy9r.js +1 -0
- package/dist/dashboard/public/assets/mscgen-BA5vi2Kp.js +1 -0
- package/dist/dashboard/public/assets/mumps-BT43cFF4.js +1 -0
- package/dist/dashboard/public/assets/nginx-DdIZxoE0.js +1 -0
- package/dist/dashboard/public/assets/nsis-LdVXkNf5.js +1 -0
- package/dist/dashboard/public/assets/ntriples-BfvgReVJ.js +1 -0
- package/dist/dashboard/public/assets/octave-Ck1zUtKM.js +1 -0
- package/dist/dashboard/public/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/dashboard/public/assets/oz-BzwKVEFT.js +1 -0
- package/dist/dashboard/public/assets/pascal--L3eBynH.js +1 -0
- package/dist/dashboard/public/assets/path-CbwjOpE9.js +1 -0
- package/dist/dashboard/public/assets/perl-CdXCOZ3F.js +1 -0
- package/dist/dashboard/public/assets/pieDiagram-a8764435-DYvb2wsa.js +35 -0
- package/dist/dashboard/public/assets/pig-CevX1Tat.js +1 -0
- package/dist/dashboard/public/assets/powershell-CFHJl5sT.js +1 -0
- package/dist/dashboard/public/assets/properties-C78fOPTZ.js +1 -0
- package/dist/dashboard/public/assets/protobuf-ChK-085T.js +1 -0
- package/dist/dashboard/public/assets/pug-DeIclll2.js +1 -0
- package/dist/dashboard/public/assets/puppet-DMA9R1ak.js +1 -0
- package/dist/dashboard/public/assets/python-BuPzkPfP.js +1 -0
- package/dist/dashboard/public/assets/q-pXgVlZs6.js +1 -0
- package/dist/dashboard/public/assets/quadrantDiagram-1e28029f-DpKQgDsX.js +7 -0
- package/dist/dashboard/public/assets/r-B6wPVr8A.js +1 -0
- package/dist/dashboard/public/assets/requirementDiagram-08caed73-C_q-bfsF.js +52 -0
- package/dist/dashboard/public/assets/rpm-CTu-6PCP.js +1 -0
- package/dist/dashboard/public/assets/ruby-B2Rjki9n.js +1 -0
- package/dist/dashboard/public/assets/sankeyDiagram-a04cb91d-0kwrmzfI.js +8 -0
- package/dist/dashboard/public/assets/sas-B4kiWyti.js +1 -0
- package/dist/dashboard/public/assets/scheme-C41bIUwD.js +1 -0
- package/dist/dashboard/public/assets/sequenceDiagram-c5b8d532-i5S3JNF0.js +122 -0
- package/dist/dashboard/public/assets/shell-CjFT_Tl9.js +1 -0
- package/dist/dashboard/public/assets/sieve-C3Gn_uJK.js +1 -0
- package/dist/dashboard/public/assets/simple-mode-GW_nhZxv.js +1 -0
- package/dist/dashboard/public/assets/smalltalk-CnHTOXQT.js +1 -0
- package/dist/dashboard/public/assets/solr-DehyRSwq.js +1 -0
- package/dist/dashboard/public/assets/sparql-DkYu6x3z.js +1 -0
- package/dist/dashboard/public/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/dist/dashboard/public/assets/sql-D0XecflT.js +1 -0
- package/dist/dashboard/public/assets/stateDiagram-1ecb1508-COE2ffbQ.js +1 -0
- package/dist/dashboard/public/assets/stateDiagram-v2-c2b004d7-DMAS8qJy.js +1 -0
- package/dist/dashboard/public/assets/stex-C3f8Ysf7.js +1 -0
- package/dist/dashboard/public/assets/styles-b4e223ce-M0Oa_txo.js +160 -0
- package/dist/dashboard/public/assets/styles-ca3715f6-DddhRVVB.js +207 -0
- package/dist/dashboard/public/assets/styles-d45a18b0-ByKhWZca.js +116 -0
- package/dist/dashboard/public/assets/stylus-B533Al4x.js +1 -0
- package/dist/dashboard/public/assets/svgDrawCommon-b86b1483-DIF6Vn69.js +1 -0
- package/dist/dashboard/public/assets/swift-BzpIVaGY.js +1 -0
- package/dist/dashboard/public/assets/tcl-DVfN8rqt.js +1 -0
- package/dist/dashboard/public/assets/textile-CnDTJFAw.js +1 -0
- package/dist/dashboard/public/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/dist/dashboard/public/assets/tiki-DGYXhP31.js +1 -0
- package/dist/dashboard/public/assets/timeline-definition-faaaa080-DC1Bdpu_.js +61 -0
- package/dist/dashboard/public/assets/toml-Bm5Em-hy.js +1 -0
- package/dist/dashboard/public/assets/troff-wAsdV37c.js +1 -0
- package/dist/dashboard/public/assets/ttcn-CfJYG6tj.js +1 -0
- package/dist/dashboard/public/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/dist/dashboard/public/assets/turtle-B1tBg_DP.js +1 -0
- package/dist/dashboard/public/assets/vb-CmGdzxic.js +1 -0
- package/dist/dashboard/public/assets/vbscript-BuJXcnF6.js +1 -0
- package/dist/dashboard/public/assets/velocity-D8B20fx6.js +1 -0
- package/dist/dashboard/public/assets/verilog-C6RDOZhf.js +1 -0
- package/dist/dashboard/public/assets/vhdl-lSbBsy5d.js +1 -0
- package/dist/dashboard/public/assets/webidl-ZXfAyPTL.js +1 -0
- package/dist/dashboard/public/assets/xquery-DzFWVndE.js +1 -0
- package/dist/dashboard/public/assets/xychartDiagram-f5964ef8-BIMyvG9y.js +7 -0
- package/dist/dashboard/public/assets/yacas-BJ4BC0dw.js +1 -0
- package/dist/dashboard/public/assets/z80-Hz9HOZM7.js +1 -0
- package/dist/dashboard/public/claude-icon-dark.svg +1 -0
- package/dist/dashboard/public/claude-icon.svg +1 -0
- package/dist/dashboard/public/index.html +16 -0
- package/dist/dashboard/settings-manager.d.ts +47 -0
- package/dist/dashboard/settings-manager.d.ts.map +1 -0
- package/dist/dashboard/settings-manager.js +180 -0
- package/dist/dashboard/settings-manager.js.map +1 -0
- package/dist/dashboard/task-review-runner.d.ts +42 -0
- package/dist/dashboard/task-review-runner.d.ts.map +1 -0
- package/dist/dashboard/task-review-runner.js +375 -0
- package/dist/dashboard/task-review-runner.js.map +1 -0
- package/dist/dashboard/utils.d.ts +31 -0
- package/dist/dashboard/utils.d.ts.map +1 -0
- package/dist/dashboard/utils.js +102 -0
- package/dist/dashboard/utils.js.map +1 -0
- package/dist/dashboard/watcher.d.ts +32 -0
- package/dist/dashboard/watcher.d.ts.map +1 -0
- package/dist/dashboard/watcher.js +173 -0
- package/dist/dashboard/watcher.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +380 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown/templates/design-template.md +96 -0
- package/dist/markdown/templates/product-template.md +51 -0
- package/dist/markdown/templates/requirements-template.md +50 -0
- package/dist/markdown/templates/structure-template.md +145 -0
- package/dist/markdown/templates/tasks-template.md +139 -0
- package/dist/markdown/templates/tech-template.md +99 -0
- package/dist/prompts/create-decomposition.d.ts +3 -0
- package/dist/prompts/create-decomposition.d.ts.map +1 -0
- package/dist/prompts/create-decomposition.js +122 -0
- package/dist/prompts/create-decomposition.js.map +1 -0
- package/dist/prompts/create-spec.d.ts +3 -0
- package/dist/prompts/create-spec.d.ts.map +1 -0
- package/dist/prompts/create-spec.js +93 -0
- package/dist/prompts/create-spec.js.map +1 -0
- package/dist/prompts/create-steering-doc.d.ts +3 -0
- package/dist/prompts/create-steering-doc.d.ts.map +1 -0
- package/dist/prompts/create-steering-doc.js +73 -0
- package/dist/prompts/create-steering-doc.js.map +1 -0
- package/dist/prompts/implement-task.d.ts +3 -0
- package/dist/prompts/implement-task.d.ts.map +1 -0
- package/dist/prompts/implement-task.js +173 -0
- package/dist/prompts/implement-task.js.map +1 -0
- package/dist/prompts/index.d.ts +15 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +51 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/inject-spec-workflow-guide.d.ts +3 -0
- package/dist/prompts/inject-spec-workflow-guide.d.ts.map +1 -0
- package/dist/prompts/inject-spec-workflow-guide.js +47 -0
- package/dist/prompts/inject-spec-workflow-guide.js.map +1 -0
- package/dist/prompts/inject-steering-guide.d.ts +3 -0
- package/dist/prompts/inject-steering-guide.d.ts.map +1 -0
- package/dist/prompts/inject-steering-guide.js +51 -0
- package/dist/prompts/inject-steering-guide.js.map +1 -0
- package/dist/prompts/refresh-tasks.d.ts +3 -0
- package/dist/prompts/refresh-tasks.d.ts.map +1 -0
- package/dist/prompts/refresh-tasks.js +224 -0
- package/dist/prompts/refresh-tasks.js.map +1 -0
- package/dist/prompts/spec-status.d.ts +3 -0
- package/dist/prompts/spec-status.d.ts.map +1 -0
- package/dist/prompts/spec-status.js +75 -0
- package/dist/prompts/spec-status.js.map +1 -0
- package/dist/prompts/types.d.ts +13 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +2 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +175 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/__tests__/adversarial-response.test.d.ts +2 -0
- package/dist/tools/__tests__/adversarial-response.test.d.ts.map +1 -0
- package/dist/tools/__tests__/adversarial-response.test.js +144 -0
- package/dist/tools/__tests__/adversarial-response.test.js.map +1 -0
- package/dist/tools/__tests__/adversarial-review.test.d.ts +2 -0
- package/dist/tools/__tests__/adversarial-review.test.d.ts.map +1 -0
- package/dist/tools/__tests__/adversarial-review.test.js +318 -0
- package/dist/tools/__tests__/adversarial-review.test.js.map +1 -0
- package/dist/tools/__tests__/decomposition-guide.test.d.ts +2 -0
- package/dist/tools/__tests__/decomposition-guide.test.d.ts.map +1 -0
- package/dist/tools/__tests__/decomposition-guide.test.js +25 -0
- package/dist/tools/__tests__/decomposition-guide.test.js.map +1 -0
- package/dist/tools/__tests__/deferrals.test.d.ts +2 -0
- package/dist/tools/__tests__/deferrals.test.d.ts.map +1 -0
- package/dist/tools/__tests__/deferrals.test.js +151 -0
- package/dist/tools/__tests__/deferrals.test.js.map +1 -0
- package/dist/tools/__tests__/get-task-review.test.d.ts +2 -0
- package/dist/tools/__tests__/get-task-review.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-task-review.test.js +81 -0
- package/dist/tools/__tests__/get-task-review.test.js.map +1 -0
- package/dist/tools/__tests__/projectPath.test.d.ts +2 -0
- package/dist/tools/__tests__/projectPath.test.d.ts.map +1 -0
- package/dist/tools/__tests__/projectPath.test.js +187 -0
- package/dist/tools/__tests__/projectPath.test.js.map +1 -0
- package/dist/tools/__tests__/review-task.test.d.ts +2 -0
- package/dist/tools/__tests__/review-task.test.d.ts.map +1 -0
- package/dist/tools/__tests__/review-task.test.js +1097 -0
- package/dist/tools/__tests__/review-task.test.js.map +1 -0
- package/dist/tools/adversarial-response.d.ts +6 -0
- package/dist/tools/adversarial-response.d.ts.map +1 -0
- package/dist/tools/adversarial-response.js +206 -0
- package/dist/tools/adversarial-response.js.map +1 -0
- package/dist/tools/adversarial-review.d.ts +21 -0
- package/dist/tools/adversarial-review.d.ts.map +1 -0
- package/dist/tools/adversarial-review.js +491 -0
- package/dist/tools/adversarial-review.js.map +1 -0
- package/dist/tools/approvals.d.ts +14 -0
- package/dist/tools/approvals.d.ts.map +1 -0
- package/dist/tools/approvals.js +505 -0
- package/dist/tools/approvals.js.map +1 -0
- package/dist/tools/decomposition-guide.d.ts +6 -0
- package/dist/tools/decomposition-guide.d.ts.map +1 -0
- package/dist/tools/decomposition-guide.js +163 -0
- package/dist/tools/decomposition-guide.js.map +1 -0
- package/dist/tools/deferrals.d.ts +5 -0
- package/dist/tools/deferrals.d.ts.map +1 -0
- package/dist/tools/deferrals.js +229 -0
- package/dist/tools/deferrals.js.map +1 -0
- package/dist/tools/get-task-review.d.ts +5 -0
- package/dist/tools/get-task-review.d.ts.map +1 -0
- package/dist/tools/get-task-review.js +136 -0
- package/dist/tools/get-task-review.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +82 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/log-implementation.d.ts +5 -0
- package/dist/tools/log-implementation.d.ts.map +1 -0
- package/dist/tools/log-implementation.js +398 -0
- package/dist/tools/log-implementation.js.map +1 -0
- package/dist/tools/review-task.d.ts +58 -0
- package/dist/tools/review-task.d.ts.map +1 -0
- package/dist/tools/review-task.js +617 -0
- package/dist/tools/review-task.js.map +1 -0
- package/dist/tools/spec-status.d.ts +5 -0
- package/dist/tools/spec-status.d.ts.map +1 -0
- package/dist/tools/spec-status.js +235 -0
- package/dist/tools/spec-status.js.map +1 -0
- package/dist/tools/spec-workflow-guide.d.ts +5 -0
- package/dist/tools/spec-workflow-guide.d.ts.map +1 -0
- package/dist/tools/spec-workflow-guide.js +396 -0
- package/dist/tools/spec-workflow-guide.js.map +1 -0
- package/dist/tools/steering-guide.d.ts +5 -0
- package/dist/tools/steering-guide.d.ts.map +1 -0
- package/dist/tools/steering-guide.js +192 -0
- package/dist/tools/steering-guide.js.map +1 -0
- package/dist/types.d.ts +213 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/package.json +113 -0
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import * as nodeFs from 'node:fs';
|
|
3
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
4
|
+
import { ImplementationLogManager } from '../dashboard/implementation-log-manager.js';
|
|
5
|
+
import { TaskReviewManager, validateVerdictConsistency } from '../core/task-review-manager.js';
|
|
6
|
+
import { parseTasksFromMarkdown } from '../core/task-parser.js';
|
|
7
|
+
import { computeHygieneSignals } from '../core/hygiene-signals.js';
|
|
8
|
+
import { runProjectTypecheck } from '../core/typecheck.js';
|
|
9
|
+
import { loadSettings, isTypecheckEnabled } from '../core/adversarial-settings.js';
|
|
10
|
+
import { computeTaskDiff } from '../core/task-diff.js';
|
|
11
|
+
const validateWarnedKeys = new Set();
|
|
12
|
+
export function _resetValidateWarnings() {
|
|
13
|
+
validateWarnedKeys.clear();
|
|
14
|
+
}
|
|
15
|
+
function warnOnce(key, message) {
|
|
16
|
+
if (validateWarnedKeys.has(key))
|
|
17
|
+
return;
|
|
18
|
+
validateWarnedKeys.add(key);
|
|
19
|
+
console.warn(message);
|
|
20
|
+
}
|
|
21
|
+
export function safeRealpath(p) {
|
|
22
|
+
try {
|
|
23
|
+
return nodeFs.realpathSync(p);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const code = err.code ?? 'UNKNOWN';
|
|
27
|
+
if (code !== 'ENOENT') {
|
|
28
|
+
warnOnce(`safeRealpath:${code}:${p}`, `[spec-workflow] safeRealpath: ${code} on ${p}`);
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function validateAllFiles(input, projectPath) {
|
|
34
|
+
if (!Array.isArray(input)) {
|
|
35
|
+
warnOnce('validateAllFiles:non-array', `[spec-workflow] handlePrepare:validateAllFiles: allFiles is not an array (got ${typeof input})`);
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
const realProjectPath = safeRealpath(projectPath) ?? projectPath;
|
|
39
|
+
const seen = new Set();
|
|
40
|
+
const kept = [];
|
|
41
|
+
for (let i = 0; i < input.length; i++) {
|
|
42
|
+
const entry = input[i];
|
|
43
|
+
try {
|
|
44
|
+
if (typeof entry !== 'string') {
|
|
45
|
+
const typeLabel = entry === null ? 'null' : typeof entry;
|
|
46
|
+
warnOnce(`validateAllFiles:non-string:${typeLabel}`, `[spec-workflow] handlePrepare:validateAllFiles: non-string entry at index ${i} (type: ${typeLabel})`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const resolved = path.resolve(projectPath, entry);
|
|
50
|
+
const realResolved = safeRealpath(resolved);
|
|
51
|
+
if (realResolved === undefined) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (!realResolved.startsWith(realProjectPath + path.sep) &&
|
|
55
|
+
realResolved !== realProjectPath) {
|
|
56
|
+
warnOnce(`validateAllFiles:outside:${realResolved}`, `[spec-workflow] handlePrepare:validateAllFiles: path outside projectPath: ${realResolved}`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (seen.has(realResolved))
|
|
60
|
+
continue;
|
|
61
|
+
seen.add(realResolved);
|
|
62
|
+
kept.push(resolved);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
const errMsg = err.message;
|
|
66
|
+
warnOnce(`validateAllFiles:throw:${errMsg}`, `[spec-workflow] handlePrepare:validateAllFiles: path.resolve threw at index ${i}: ${errMsg}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return kept;
|
|
70
|
+
}
|
|
71
|
+
export function computeDiffMethodologyState(result) {
|
|
72
|
+
if (result.rejection !== undefined) {
|
|
73
|
+
return { kind: 'rejected', message: result.rejection.message };
|
|
74
|
+
}
|
|
75
|
+
if (result.diff === '')
|
|
76
|
+
return { kind: 'empty' };
|
|
77
|
+
if (result.truncated)
|
|
78
|
+
return { kind: 'present-truncated' };
|
|
79
|
+
return { kind: 'present' };
|
|
80
|
+
}
|
|
81
|
+
export function computeTypecheckMethodologyState(result) {
|
|
82
|
+
if (result.status === 'timeout')
|
|
83
|
+
return { kind: 'timeout' };
|
|
84
|
+
if (result.status === 'unavailable') {
|
|
85
|
+
if (result.reason === 'feature-disabled') {
|
|
86
|
+
return { kind: 'unavailable-feature-disabled' };
|
|
87
|
+
}
|
|
88
|
+
return { kind: 'unavailable-other', reason: result.reason };
|
|
89
|
+
}
|
|
90
|
+
const hasDiagnostics = result.diagnostics.length > 0;
|
|
91
|
+
const partialCoverage = result.coverage.excluded.length > 0;
|
|
92
|
+
const truncated = result.truncated === true;
|
|
93
|
+
if (hasDiagnostics && partialCoverage) {
|
|
94
|
+
return { kind: 'success-with-diagnostics-and-partial-coverage', truncated };
|
|
95
|
+
}
|
|
96
|
+
if (hasDiagnostics)
|
|
97
|
+
return { kind: 'success-with-diagnostics', truncated };
|
|
98
|
+
if (partialCoverage)
|
|
99
|
+
return { kind: 'success-partial-coverage' };
|
|
100
|
+
return { kind: 'success-clean-full' };
|
|
101
|
+
}
|
|
102
|
+
function rejectionMessage(reason) {
|
|
103
|
+
return reason instanceof Error ? reason.message : String(reason);
|
|
104
|
+
}
|
|
105
|
+
export function unwrapTypecheck(settled, projectPath) {
|
|
106
|
+
if (settled.status === 'fulfilled')
|
|
107
|
+
return settled.value;
|
|
108
|
+
const message = rejectionMessage(settled.reason);
|
|
109
|
+
warnOnce(`unwrap:typecheck:${message}`, `[spec-workflow] handlePrepare: typecheck rejected unexpectedly: ${message}`);
|
|
110
|
+
return [{
|
|
111
|
+
tsconfigPath: path.join(projectPath, 'tsconfig.json'),
|
|
112
|
+
status: 'unavailable',
|
|
113
|
+
reason: 'rejection',
|
|
114
|
+
rejectionMessage: message,
|
|
115
|
+
}];
|
|
116
|
+
}
|
|
117
|
+
export function unwrapHygiene(settled) {
|
|
118
|
+
if (settled.status === 'fulfilled')
|
|
119
|
+
return { signals: settled.value };
|
|
120
|
+
const message = rejectionMessage(settled.reason);
|
|
121
|
+
warnOnce(`unwrap:hygiene:${message}`, `[spec-workflow] handlePrepare: hygiene rejected unexpectedly: ${message}`);
|
|
122
|
+
return { signals: [], rejection: { message } };
|
|
123
|
+
}
|
|
124
|
+
export function unwrapDiff(settled) {
|
|
125
|
+
if (settled.status === 'fulfilled')
|
|
126
|
+
return settled.value;
|
|
127
|
+
const message = rejectionMessage(settled.reason);
|
|
128
|
+
warnOnce(`unwrap:diff:${message}`, `[spec-workflow] handlePrepare: diff rejected unexpectedly: ${message}`);
|
|
129
|
+
return {
|
|
130
|
+
diff: '',
|
|
131
|
+
stats: undefined,
|
|
132
|
+
skippedPaths: [],
|
|
133
|
+
truncated: false,
|
|
134
|
+
rejection: { message },
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export const reviewTaskTool = {
|
|
138
|
+
name: 'review-task',
|
|
139
|
+
description: `Review a task's implementation against its spec. Typically called before marking a task complete, but also supported for retroactive review of already-completed tasks.
|
|
140
|
+
|
|
141
|
+
# Instructions
|
|
142
|
+
|
|
143
|
+
Call after log-implementation succeeds. The task may be in-progress [-] or already completed [x] — reviews work for both. Task status is not modified by reviewing.
|
|
144
|
+
|
|
145
|
+
Two actions:
|
|
146
|
+
- **prepare**: Gathers task context (requirements, restrictions, success criteria), implementation log summary, and tech steering. Returns a review methodology to evaluate the implementation against. Also writes a prepare marker to gate the record action.
|
|
147
|
+
- **record**: Persists review findings. Requires prepare to have been called first.
|
|
148
|
+
|
|
149
|
+
# Verdicts
|
|
150
|
+
- **pass**: Clean review, no findings at all
|
|
151
|
+
- **fail**: At least one critical finding (blocks completion)
|
|
152
|
+
- **findings**: Warnings/info only, no criticals (advisory)
|
|
153
|
+
|
|
154
|
+
# Workflow
|
|
155
|
+
1. Call with action: "prepare" to get review context and methodology
|
|
156
|
+
2. Read all implementation files listed in the response
|
|
157
|
+
3. Evaluate implementation against the methodology checklist
|
|
158
|
+
4. Call with action: "record" to persist findings
|
|
159
|
+
|
|
160
|
+
Note: If a review was triggered from the dashboard (fresh-context review), use get-task-review to retrieve the findings instead.`,
|
|
161
|
+
inputSchema: {
|
|
162
|
+
type: 'object',
|
|
163
|
+
properties: {
|
|
164
|
+
action: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
enum: ['prepare', 'record'],
|
|
167
|
+
description: 'Action to perform'
|
|
168
|
+
},
|
|
169
|
+
projectPath: {
|
|
170
|
+
type: 'string',
|
|
171
|
+
description: 'Absolute path to the project root (optional - uses server context path if not provided)'
|
|
172
|
+
},
|
|
173
|
+
specName: {
|
|
174
|
+
type: 'string',
|
|
175
|
+
description: 'Name of the specification (kebab-case)'
|
|
176
|
+
},
|
|
177
|
+
taskId: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
description: 'Task ID (e.g., "1", "1.2", "3.1.4")'
|
|
180
|
+
},
|
|
181
|
+
// record-only fields
|
|
182
|
+
verdict: {
|
|
183
|
+
type: 'string',
|
|
184
|
+
enum: ['pass', 'fail', 'findings'],
|
|
185
|
+
description: 'Review verdict (record action only)'
|
|
186
|
+
},
|
|
187
|
+
summary: {
|
|
188
|
+
type: 'string',
|
|
189
|
+
description: 'Brief summary of review outcome (record action only)'
|
|
190
|
+
},
|
|
191
|
+
findings: {
|
|
192
|
+
type: 'array',
|
|
193
|
+
description: 'Array of review findings (record action only)',
|
|
194
|
+
items: {
|
|
195
|
+
type: 'object',
|
|
196
|
+
properties: {
|
|
197
|
+
severity: { type: 'string', enum: ['critical', 'warning', 'info'] },
|
|
198
|
+
title: { type: 'string' },
|
|
199
|
+
file: { type: 'string' },
|
|
200
|
+
line: { type: 'number' },
|
|
201
|
+
description: { type: 'string' },
|
|
202
|
+
taskRequirement: { type: 'string' },
|
|
203
|
+
category: { type: 'string', enum: ['spec-compliance', 'hygiene'] }
|
|
204
|
+
},
|
|
205
|
+
required: ['severity', 'title', 'description']
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
required: ['action', 'specName', 'taskId']
|
|
210
|
+
},
|
|
211
|
+
annotations: {
|
|
212
|
+
title: 'Review Task',
|
|
213
|
+
readOnlyHint: false,
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
export async function reviewTaskHandler(args, context) {
|
|
217
|
+
const { action, specName, taskId } = args;
|
|
218
|
+
const projectPath = args.projectPath || context.projectPath;
|
|
219
|
+
if (!projectPath) {
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
message: 'Project path is required but not provided in context or arguments'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
const specPath = PathUtils.getSpecPath(projectPath, specName);
|
|
226
|
+
if (action === 'prepare') {
|
|
227
|
+
return handlePrepare(specPath, specName, taskId, projectPath, context);
|
|
228
|
+
}
|
|
229
|
+
else if (action === 'record') {
|
|
230
|
+
return handleRecord(specPath, specName, taskId, args, projectPath, context);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
return {
|
|
234
|
+
success: false,
|
|
235
|
+
message: `Unknown action: ${action}. Use "prepare" or "record".`
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async function handlePrepare(specPath, specName, taskId, projectPath, context) {
|
|
240
|
+
const { promises: fs } = await import('fs');
|
|
241
|
+
try {
|
|
242
|
+
// 1. Parse task metadata from tasks.md
|
|
243
|
+
const tasksFile = `${specPath}/tasks.md`;
|
|
244
|
+
let tasksContent;
|
|
245
|
+
try {
|
|
246
|
+
tasksContent = await fs.readFile(tasksFile, 'utf-8');
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return {
|
|
250
|
+
success: false,
|
|
251
|
+
message: `tasks.md not found for spec '${specName}'`,
|
|
252
|
+
nextSteps: ['Ensure the spec has a tasks.md file']
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
const parseResult = parseTasksFromMarkdown(tasksContent);
|
|
256
|
+
const task = parseResult.tasks.find(t => t.id === taskId);
|
|
257
|
+
if (!task) {
|
|
258
|
+
return {
|
|
259
|
+
success: false,
|
|
260
|
+
message: `Task '${taskId}' not found in tasks.md`,
|
|
261
|
+
nextSteps: ['Check the task ID and try again']
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// 2. Load implementation log for this task
|
|
265
|
+
const logManager = new ImplementationLogManager(specPath);
|
|
266
|
+
const taskLogs = await logManager.getTaskLogs(taskId);
|
|
267
|
+
if (taskLogs.length === 0) {
|
|
268
|
+
return {
|
|
269
|
+
success: false,
|
|
270
|
+
message: `No implementation log found for task '${taskId}'. Must call log-implementation before review-task.`,
|
|
271
|
+
nextSteps: ['Call log-implementation to record what was implemented', 'Then call review-task with action: "prepare"']
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
// 3. Read tech.md steering doc if it exists
|
|
275
|
+
let steeringExcerpt = null;
|
|
276
|
+
const steeringPath = PathUtils.getSteeringPath(projectPath);
|
|
277
|
+
try {
|
|
278
|
+
steeringExcerpt = await fs.readFile(`${steeringPath}/tech.md`, 'utf-8');
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// No tech steering doc — that's fine
|
|
282
|
+
}
|
|
283
|
+
// 4. Write prepare marker and check for prior reviews
|
|
284
|
+
const reviewManager = new TaskReviewManager(specPath);
|
|
285
|
+
await reviewManager.writePrepareMarker(taskId);
|
|
286
|
+
const priorReviews = await reviewManager.getReviewsForTask(taskId);
|
|
287
|
+
const hasPriorReviews = priorReviews.length > 0;
|
|
288
|
+
// 5. Build task context
|
|
289
|
+
const latestLog = taskLogs[0]; // Sorted newest first
|
|
290
|
+
const allFiles = [...new Set([...latestLog.filesModified, ...latestLog.filesCreated])]
|
|
291
|
+
.map(p => path.resolve(projectPath, p));
|
|
292
|
+
const taskContext = {
|
|
293
|
+
description: task.description,
|
|
294
|
+
requirements: task.requirements || [],
|
|
295
|
+
leverage: task.leverage || null,
|
|
296
|
+
prompt: task.prompt || null,
|
|
297
|
+
promptStructured: task.promptStructured || null,
|
|
298
|
+
};
|
|
299
|
+
const implementationSummary = {
|
|
300
|
+
summary: latestLog.summary,
|
|
301
|
+
filesModified: latestLog.filesModified,
|
|
302
|
+
filesCreated: latestLog.filesCreated,
|
|
303
|
+
statistics: latestLog.statistics,
|
|
304
|
+
artifacts: latestLog.artifacts,
|
|
305
|
+
};
|
|
306
|
+
// 6. Validate inputs and load settings (synchronous prelude)
|
|
307
|
+
const validatedAllFiles = validateAllFiles(allFiles, projectPath);
|
|
308
|
+
const settings = loadSettings(projectPath);
|
|
309
|
+
const typecheckEnabled = isTypecheckEnabled(settings);
|
|
310
|
+
// 7. Run typecheck + hygiene + diff concurrently; convert rejections to degraded states.
|
|
311
|
+
// Diff is APPENDED at index 2 — typecheck stays at 0, hygiene at 1.
|
|
312
|
+
const settled = await Promise.allSettled([
|
|
313
|
+
runProjectTypecheck(projectPath, validatedAllFiles, { enabled: typecheckEnabled }),
|
|
314
|
+
computeHygieneSignals(validatedAllFiles),
|
|
315
|
+
computeTaskDiff(projectPath, validatedAllFiles),
|
|
316
|
+
]);
|
|
317
|
+
const typecheckResults = unwrapTypecheck(settled[0], projectPath);
|
|
318
|
+
const hygieneResult = unwrapHygiene(settled[1]);
|
|
319
|
+
const diffResult = unwrapDiff(settled[2]);
|
|
320
|
+
// 8. Build methodology
|
|
321
|
+
const typecheckState = computeTypecheckMethodologyState(typecheckResults[0]);
|
|
322
|
+
const diffState = computeDiffMethodologyState(diffResult);
|
|
323
|
+
const methodology = buildReviewMethodology(taskContext, steeringExcerpt !== null, hasPriorReviews, hygieneResult.signals.length > 0, diffState, typecheckState);
|
|
324
|
+
return {
|
|
325
|
+
success: true,
|
|
326
|
+
message: `Review context prepared for task '${taskId}'. Read the implementation files and evaluate against the methodology, then call review-task with action: "record".`,
|
|
327
|
+
data: {
|
|
328
|
+
taskContext,
|
|
329
|
+
implementationSummary,
|
|
330
|
+
steeringExcerpt,
|
|
331
|
+
filesToReview: validatedAllFiles,
|
|
332
|
+
hygieneSignals: hygieneResult.signals,
|
|
333
|
+
methodology,
|
|
334
|
+
typecheckResults,
|
|
335
|
+
diff: diffResult.diff,
|
|
336
|
+
diffStats: diffResult.stats,
|
|
337
|
+
skippedPaths: diffResult.skippedPaths,
|
|
338
|
+
diffTruncated: diffResult.truncated,
|
|
339
|
+
...(diffResult.rejection !== undefined ? { diffRejection: diffResult.rejection } : {}),
|
|
340
|
+
...(hygieneResult.rejection !== undefined ? { hygieneRejection: hygieneResult.rejection } : {}),
|
|
341
|
+
},
|
|
342
|
+
nextSteps: [
|
|
343
|
+
'Read all files listed in filesToReview',
|
|
344
|
+
'Evaluate implementation against the methodology checklist',
|
|
345
|
+
'Call review-task with action: "record", verdict, summary, and findings'
|
|
346
|
+
],
|
|
347
|
+
projectContext: {
|
|
348
|
+
projectPath,
|
|
349
|
+
workflowRoot: PathUtils.getWorkflowRoot(projectPath),
|
|
350
|
+
specName,
|
|
351
|
+
dashboardUrl: context.dashboardUrl
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
357
|
+
return {
|
|
358
|
+
success: false,
|
|
359
|
+
message: `Failed to prepare review: ${errorMessage}`,
|
|
360
|
+
nextSteps: ['Check that the spec and task exist', 'Ensure log-implementation was called first']
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
async function handleRecord(specPath, specName, taskId, args, projectPath, context) {
|
|
365
|
+
const { verdict, summary, findings = [] } = args;
|
|
366
|
+
const { promises: fs } = await import('fs');
|
|
367
|
+
if (!verdict) {
|
|
368
|
+
return { success: false, message: 'verdict is required for record action' };
|
|
369
|
+
}
|
|
370
|
+
if (!summary) {
|
|
371
|
+
return { success: false, message: 'summary is required for record action' };
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const reviewManager = new TaskReviewManager(specPath);
|
|
375
|
+
// Validation: prepare marker must exist
|
|
376
|
+
const hasPrepare = await reviewManager.hasPrepareMarker(taskId);
|
|
377
|
+
if (!hasPrepare) {
|
|
378
|
+
return {
|
|
379
|
+
success: false,
|
|
380
|
+
message: 'Must call review-task with action: "prepare" before recording a review.',
|
|
381
|
+
nextSteps: ['Call review-task with action: "prepare" first', 'Review the implementation files', 'Then call review-task with action: "record"']
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
// Validation: task must exist
|
|
385
|
+
const tasksFile = `${specPath}/tasks.md`;
|
|
386
|
+
try {
|
|
387
|
+
const tasksContent = await fs.readFile(tasksFile, 'utf-8');
|
|
388
|
+
const parseResult = parseTasksFromMarkdown(tasksContent);
|
|
389
|
+
const task = parseResult.tasks.find(t => t.id === taskId);
|
|
390
|
+
if (!task) {
|
|
391
|
+
return { success: false, message: `Task '${taskId}' not found in tasks.md` };
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
return { success: false, message: `tasks.md not found for spec '${specName}'` };
|
|
396
|
+
}
|
|
397
|
+
// Validation: implementation log must exist
|
|
398
|
+
const logManager = new ImplementationLogManager(specPath);
|
|
399
|
+
const taskLogs = await logManager.getTaskLogs(taskId);
|
|
400
|
+
if (taskLogs.length === 0) {
|
|
401
|
+
return {
|
|
402
|
+
success: false,
|
|
403
|
+
message: `No implementation log found for task '${taskId}'.`
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
// Validation: verdict/findings consistency
|
|
407
|
+
const typedFindings = findings;
|
|
408
|
+
const validation = validateVerdictConsistency(verdict, typedFindings);
|
|
409
|
+
if (!validation.valid) {
|
|
410
|
+
return { success: false, message: validation.error };
|
|
411
|
+
}
|
|
412
|
+
const criticalCount = typedFindings.filter(f => f.severity === 'critical').length;
|
|
413
|
+
const warningCount = typedFindings.filter(f => f.severity === 'warning').length;
|
|
414
|
+
const infoCount = typedFindings.filter(f => f.severity === 'info').length;
|
|
415
|
+
// Save the review
|
|
416
|
+
const review = await reviewManager.saveReview({
|
|
417
|
+
taskId,
|
|
418
|
+
specName,
|
|
419
|
+
verdict,
|
|
420
|
+
summary,
|
|
421
|
+
findings: typedFindings,
|
|
422
|
+
});
|
|
423
|
+
// Build next steps based on verdict
|
|
424
|
+
let nextSteps;
|
|
425
|
+
if (verdict === 'pass') {
|
|
426
|
+
nextSteps = [
|
|
427
|
+
'Mark task as completed in tasks.md by changing [-] to [x]',
|
|
428
|
+
'Continue with next pending task'
|
|
429
|
+
];
|
|
430
|
+
}
|
|
431
|
+
else if (verdict === 'fail') {
|
|
432
|
+
nextSteps = [
|
|
433
|
+
'Address the critical findings listed above',
|
|
434
|
+
'After fixing, call review-task with action: "prepare" to re-review',
|
|
435
|
+
'Do NOT mark task [x] until critical findings are resolved'
|
|
436
|
+
];
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
nextSteps = [
|
|
440
|
+
'Consider addressing the warnings listed above',
|
|
441
|
+
'Mark task as completed in tasks.md by changing [-] to [x] when satisfied',
|
|
442
|
+
'Continue with next pending task'
|
|
443
|
+
];
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
success: true,
|
|
447
|
+
message: `Review recorded for task '${taskId}' (v${review.version}): ${verdict}`,
|
|
448
|
+
data: {
|
|
449
|
+
reviewId: review.id,
|
|
450
|
+
version: review.version,
|
|
451
|
+
verdict,
|
|
452
|
+
criticalCount,
|
|
453
|
+
warningCount,
|
|
454
|
+
infoCount,
|
|
455
|
+
},
|
|
456
|
+
nextSteps,
|
|
457
|
+
projectContext: {
|
|
458
|
+
projectPath,
|
|
459
|
+
workflowRoot: PathUtils.getWorkflowRoot(projectPath),
|
|
460
|
+
specName,
|
|
461
|
+
dashboardUrl: context.dashboardUrl
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
467
|
+
return {
|
|
468
|
+
success: false,
|
|
469
|
+
message: `Failed to record review: ${errorMessage}`
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
export function buildReviewMethodology(taskContext, hasTechSteering, hasPriorReviews, hasHygieneSignals, diffState, typecheckState) {
|
|
474
|
+
const sections = [];
|
|
475
|
+
sections.push('# Review Methodology');
|
|
476
|
+
sections.push('');
|
|
477
|
+
sections.push('You are a senior code reviewer whose job is to find problems, not to validate. Assume the implementation has issues until proven otherwise. Be skeptical of convenient shortcuts, missing edge cases, and requirements that were "close enough" but not fully met.');
|
|
478
|
+
sections.push('');
|
|
479
|
+
sections.push('Read ALL files listed in filesToReview before evaluating. For each item below, actively look for violations — do not just confirm compliance. State what you checked, what evidence you found, and whether it passes or fails. If something is genuinely fine, say so briefly and move on.');
|
|
480
|
+
sections.push('');
|
|
481
|
+
// Diff preamble (R4.1 / R4.2a / R4.2b). The `**Read first:**` label is
|
|
482
|
+
// emitted as its own paragraph so task 17's drift extractor keys on it; the
|
|
483
|
+
// R4.x verbatim prose follows in the next paragraph (Direction A pins it as
|
|
484
|
+
// a contiguous substring; Direction B's per-paragraph filter excludes it).
|
|
485
|
+
for (const line of renderDiffPreamble(diffState))
|
|
486
|
+
sections.push(line);
|
|
487
|
+
sections.push('');
|
|
488
|
+
sections.push('## Primary: Spec Compliance');
|
|
489
|
+
sections.push('');
|
|
490
|
+
// 1. Requirements compliance
|
|
491
|
+
if (taskContext.requirements && taskContext.requirements.length > 0) {
|
|
492
|
+
sections.push(`1. **Requirements compliance**: Verify each referenced requirement is fully implemented: ${taskContext.requirements.join(', ')}. For each one, trace from the requirement to the specific code that fulfills it. Flag any requirement that is partially met, interpreted loosely, or silently dropped. Check the task description line by line — identify anything promised but not delivered.`);
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
sections.push('1. **Requirements compliance**: Read the task description line by line. Identify anything described that is not implemented, partially implemented, or implemented differently than specified. Look for gaps between what was asked and what was built.');
|
|
496
|
+
}
|
|
497
|
+
// 2. Restriction adherence
|
|
498
|
+
const restrictions = taskContext.promptStructured?.find(s => s.key.toLowerCase() === 'restrictions');
|
|
499
|
+
if (restrictions) {
|
|
500
|
+
sections.push(`2. **Restriction adherence**: These restrictions were specified: ${restrictions.value}. Check each one for violations. Look for workarounds that technically comply but violate the spirit. Check imports, dependencies, and patterns that may circumvent restrictions.`);
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
sections.push('2. **Restriction adherence**: No explicit restrictions defined. Skip.');
|
|
504
|
+
}
|
|
505
|
+
// 3. Success criteria
|
|
506
|
+
const success = taskContext.promptStructured?.find(s => s.key.toLowerCase() === 'success');
|
|
507
|
+
if (success) {
|
|
508
|
+
sections.push(`3. **Success criteria**: The success criteria are: ${success.value}. For each criterion, find concrete evidence in the code that it is met. If a criterion is ambiguous, interpret it strictly. Flag criteria that would fail under edge cases or with unexpected input.`);
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
sections.push('3. **Success criteria**: No explicit success criteria. Evaluate against the task description — would a user consider this task genuinely complete?');
|
|
512
|
+
}
|
|
513
|
+
// 4. File scope
|
|
514
|
+
sections.push('4. **File scope**: Compare the files actually modified/created against what the task specifies. Flag any files touched that are outside the task\'s scope (scope creep). Flag any files that should have been modified but weren\'t (incomplete implementation). Look for changes that introduce coupling to unrelated modules.');
|
|
515
|
+
// 5. Leverage check
|
|
516
|
+
if (taskContext.leverage) {
|
|
517
|
+
sections.push(`5. **Leverage check**: The task specified reusing: ${taskContext.leverage}. Verify this code was actually used, not reimplemented. Check for duplicate logic that already exists in the leverage targets. If the leverage was ignored, flag it as a finding — reimplementation creates maintenance burden.`);
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
sections.push('5. **Leverage check**: No leverage specified. Skip.');
|
|
521
|
+
}
|
|
522
|
+
// 6. Tech stack
|
|
523
|
+
if (hasTechSteering) {
|
|
524
|
+
sections.push('6. **Tech stack compliance**: Read the tech steering document (in steeringExcerpt) and check the implementation against its conventions. Look for: wrong patterns, deprecated approaches, inconsistent naming, missing error handling conventions, deviations from stated architecture. The steering doc represents project-level decisions — violations are findings even if the code "works".');
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
sections.push('6. **Tech stack compliance**: No tech steering doc found. Skip.');
|
|
528
|
+
}
|
|
529
|
+
sections.push('');
|
|
530
|
+
sections.push('## Secondary: Correctness & Hygiene');
|
|
531
|
+
sections.push('');
|
|
532
|
+
sections.push('7. **Error handling**: Check for unhandled error paths, missing try/catch around I/O or network calls, errors that are silently swallowed, and error messages that leak internals. Flag missing validation at system boundaries (user input, API parameters).');
|
|
533
|
+
sections.push('8. **Edge cases**: Look for off-by-one errors, null/undefined handling, empty array/string cases, concurrent access issues, and boundary conditions the implementation ignores.');
|
|
534
|
+
if (hasHygieneSignals) {
|
|
535
|
+
sections.push('9. **Hygiene**: Pre-computed hygiene signals are attached in `hygieneSignals` (file, line, pattern). For each: confirm whether it is a genuine leftover vs. intentional (e.g., an error-path `console.error`). Promote real leftovers to findings with `category: \'hygiene\'`. Also check for hygiene issues the grep cannot find: hardcoded secrets, commented-out code, unused imports or variables introduced by this task.');
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
sections.push('9. **Hygiene**: Hardcoded secrets, leftover debug code (console.log, TODO/FIXME from this task), commented-out code, unused imports or variables introduced by this task. Mark findings from items 7-9 with category: "hygiene".');
|
|
539
|
+
}
|
|
540
|
+
// 10. Typecheck (R4.4–R4.7)
|
|
541
|
+
const typecheckDirective = renderTypecheckDirective(typecheckState);
|
|
542
|
+
if (typecheckDirective !== null) {
|
|
543
|
+
sections.push(typecheckDirective);
|
|
544
|
+
}
|
|
545
|
+
if (hasPriorReviews) {
|
|
546
|
+
sections.push('');
|
|
547
|
+
sections.push('## Classification (for iterative reviews)');
|
|
548
|
+
sections.push('');
|
|
549
|
+
sections.push('Prior reviews have identified findings (shown in Prior Review Context). For each NEW finding you report, assign a `classification`:');
|
|
550
|
+
sections.push('- **novel**: Not identified in any prior review — a genuinely new issue');
|
|
551
|
+
sections.push('- **compounding**: Builds on or deepens a prior finding (same area, deeper implication)');
|
|
552
|
+
sections.push('- **recurring**: The same issue from a prior review is still present');
|
|
553
|
+
sections.push('');
|
|
554
|
+
sections.push('Do NOT escalate severity — report the finding at its correct severity regardless of recurrence. Focus your effort on novel issues; do not re-discover well-covered ground unless a finding has persisted.');
|
|
555
|
+
}
|
|
556
|
+
sections.push('');
|
|
557
|
+
sections.push('## Recording Results');
|
|
558
|
+
sections.push('');
|
|
559
|
+
sections.push('After evaluating, call review-task with action: "record" providing:');
|
|
560
|
+
sections.push('- verdict: "pass" (no findings), "fail" (any critical), or "findings" (warnings/info only)');
|
|
561
|
+
sections.push('- summary: 1-2 sentence summary of the review outcome');
|
|
562
|
+
sections.push('- findings: array of { severity, title, description, file?, line?, taskRequirement?, category? }');
|
|
563
|
+
return sections.join('\n');
|
|
564
|
+
}
|
|
565
|
+
// R4.1, R4.2a, R4.2b verbatim prose from requirements.md. The `**Read first:**`
|
|
566
|
+
// label is emitted as a separate paragraph by renderDiffPreamble so these
|
|
567
|
+
// constants stay byte-identical to R4 (drift test, Direction A).
|
|
568
|
+
const R4_1_DIFF_PRESENT = "**Read the diff first.** `data.diff` contains a unified diff (10 lines of context per hunk, rename-detected via `-M`) of the task's uncommitted changes vs. the last commit. Read it before opening any file from `filesToReview`. Open files from `filesToReview` only when (a) hunks span more than half the file — measured as `(addedLines + removedLines) / max(preEditLines, postEditLines)` — (b) you need surrounding invariants the hunks don't show, or (c) `data.skippedPaths` lists a file relevant to the task. If `data.diffTruncated` is true, read the full file for the truncated paths. Do NOT rely on the diff to surface renames — explicit pathspec defeats git's rename detection; suspect renames must be verified by reading both files.";
|
|
569
|
+
const R4_2A_DIFF_EMPTY = "**No diff available — read full files.** Either the task changes were already committed before review (inspect recent commits on the branch via `filesToReview` content compared against the implementation log's described changes), the implementation log is out of sync with the working tree, or this is not a git repository. Read every file in `filesToReview` and evaluate against the task's described changes from the implementation log.";
|
|
570
|
+
const R4_2B_DIFF_REJECTED = "**Diff utility rejected unexpectedly — read full files.** `data.diffRejection.message` contains the rejection reason. The diff was NOT computed because the utility threw an unexpected exception; this is a degraded review surface, not a benign empty diff. Read every file in `filesToReview` and evaluate against the task's described changes from the implementation log. **Surface the rejection in your review summary** (quote `data.diffRejection.message`) so the human reviewer knows the diff path failed and can investigate the underlying cause.";
|
|
571
|
+
const DIFF_TRUNCATION_NOTE = "**Note:** `data.diffTruncated` is true — at least one file's hunks were replaced by a truncation marker (look for `<diff truncated: ...>` lines in `data.diff`).";
|
|
572
|
+
function renderDiffPreamble(state) {
|
|
573
|
+
const lines = ['**Read first:**', ''];
|
|
574
|
+
switch (state.kind) {
|
|
575
|
+
case 'present':
|
|
576
|
+
lines.push(R4_1_DIFF_PRESENT);
|
|
577
|
+
break;
|
|
578
|
+
case 'present-truncated':
|
|
579
|
+
lines.push(R4_1_DIFF_PRESENT);
|
|
580
|
+
lines.push('');
|
|
581
|
+
lines.push(DIFF_TRUNCATION_NOTE);
|
|
582
|
+
break;
|
|
583
|
+
case 'empty':
|
|
584
|
+
lines.push(R4_2A_DIFF_EMPTY);
|
|
585
|
+
break;
|
|
586
|
+
case 'rejected':
|
|
587
|
+
lines.push(R4_2B_DIFF_REJECTED);
|
|
588
|
+
break;
|
|
589
|
+
}
|
|
590
|
+
return lines;
|
|
591
|
+
}
|
|
592
|
+
// R4.4–R4.7 verbatim prose from requirements.md. Item 10 prefix is applied by
|
|
593
|
+
// renderTypecheckDirective so the prose remains byte-identical to R4 (drift test).
|
|
594
|
+
const R4_4_TYPECHECK_PRESENT = "**Triage the typecheck diagnostics.** `data.typecheckResults[0].diagnostics` lists `tsc --noEmit` errors. Focus on entries with `inScope: true` — these touch files this task modified or created. For each in-scope diagnostic: confirm whether it is (a) a real bug introduced by this task → promote to a finding with `category: 'hygiene'`, or (b) pre-existing → note in summary, do not file as a finding. Treat `inScope: false` entries as upstream context for in-scope diagnostics. Also check for type-system smells tsc can't catch: unsound `any`, type assertions hiding real mismatches, narrowed types that lose information. If `truncated: true`, the diagnostic list is incomplete (capped at 100 entries) — note this gap explicitly in your review summary so the human reviewer knows to check the omitted entries manually; do not assume the truncated entries are pre-existing or unrelated.";
|
|
595
|
+
const R4_5_TYPECHECK_PARTIAL_COVERAGE = "**Partial typecheck coverage — degraded review surface.** `data.typecheckResults[0].coverage.excluded` lists files this task modified that tsc did NOT compile (excluded by tsconfig's `exclude` or never reached via `include`). For these files, the absence of diagnostics is meaningless — they were never checked. **You are operating in pre-spec methodology mode for the excluded files**; manually scan them for type errors and structural issues (missing return types, implicit `any`, mismatched property shapes, unsafe casts). The `compiled` list is the trustworthy coverage set. **Surface this per-file coverage gap in your review summary** so the human reviewer knows the scope of the gap.";
|
|
596
|
+
const R4_6A_TYPECHECK_DISABLED = "**Typecheck pre-computation is disabled for this project.** `data.typecheckResults[0].reason` is `'feature-disabled'` — the project's `.spec-workflow/adversarial-settings.json` sets `features.typecheck: false`. Proceed with the review as you normally would; do not perform additional manual type-checking unless a finding specifically warrants it. If you observe what looks like a type-system bug while reviewing, flag it as a finding with `category: 'hygiene'` and let the human reviewer decide whether to re-enable typecheck pre-computation.";
|
|
597
|
+
const R4_6B_TYPECHECK_UNAVAILABLE = "**Typecheck did not run for this review.** `data.typecheckResults[0].reason` says why (e.g. `'project-references'`, `'no-tsconfig'`, `'tsc-not-found'`, `'no-parseable-output'`, `'output-overflow'`, `'rejection'`). **This is a degraded review surface** — the type-error coverage promised by this MCP is unverified. You are operating in pre-spec methodology mode for type-checking; manually scan the modified TypeScript files for type errors and structural problems (missing return types, implicit `any`, mismatched property shapes, unsafe casts). Surface this degradation in your review summary so the human reviewer knows the scope of the gap.";
|
|
598
|
+
const R4_7_TYPECHECK_TIMEOUT = "**Typecheck timed out at 30 seconds.** The project is large enough that `tsc --noEmit` did not complete within the budget. Pre-computed diagnostics are NOT available for this review. **This is a degraded review surface** — type-error coverage is unverified. Operate in pre-spec methodology mode for type-checking; manually scan the modified TypeScript files. Surface this degradation in your review summary. If this timeout recurs, set `features.typecheck: false` in `.spec-workflow/adversarial-settings.json` to disable typecheck pre-computation; the review proceeds without it.";
|
|
599
|
+
function renderTypecheckDirective(state) {
|
|
600
|
+
switch (state.kind) {
|
|
601
|
+
case 'success-clean-full':
|
|
602
|
+
return null;
|
|
603
|
+
case 'success-with-diagnostics':
|
|
604
|
+
return `10. ${R4_4_TYPECHECK_PRESENT}`;
|
|
605
|
+
case 'success-partial-coverage':
|
|
606
|
+
return `10. ${R4_5_TYPECHECK_PARTIAL_COVERAGE}`;
|
|
607
|
+
case 'success-with-diagnostics-and-partial-coverage':
|
|
608
|
+
return `10. ${R4_4_TYPECHECK_PRESENT}\n\n${R4_5_TYPECHECK_PARTIAL_COVERAGE}`;
|
|
609
|
+
case 'unavailable-feature-disabled':
|
|
610
|
+
return `10. ${R4_6A_TYPECHECK_DISABLED}`;
|
|
611
|
+
case 'unavailable-other':
|
|
612
|
+
return `10. ${R4_6B_TYPECHECK_UNAVAILABLE}`;
|
|
613
|
+
case 'timeout':
|
|
614
|
+
return `10. ${R4_7_TYPECHECK_TIMEOUT}`;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
//# sourceMappingURL=review-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-task.js","sourceRoot":"","sources":["../../src/tools/review-task.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAiB,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAmB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC;AAEvE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE7C,MAAM,UAAU,sBAAsB;IACpC,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,OAAe;IAC5C,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IACxC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,IAAI,SAAS,CAAC;QAC9D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,QAAQ,CACN,gBAAgB,IAAI,IAAI,CAAC,EAAE,EAC3B,iCAAiC,IAAI,OAAO,CAAC,EAAE,CAChD,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,WAAmB;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,QAAQ,CACN,4BAA4B,EAC5B,iFAAiF,OAAO,KAAK,GAAG,CACjG,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;gBACzD,QAAQ,CACN,+BAA+B,SAAS,EAAE,EAC1C,6EAA6E,CAAC,WAAW,SAAS,GAAG,CACtG,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IACE,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC;gBACpD,YAAY,KAAK,eAAe,EAChC,CAAC;gBACD,QAAQ,CACN,4BAA4B,YAAY,EAAE,EAC1C,6EAA6E,YAAY,EAAE,CAC5F,CAAC;gBACF,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAI,GAAa,CAAC,OAAO,CAAC;YACtC,QAAQ,CACN,0BAA0B,MAAM,EAAE,EAClC,+EAA+E,CAAC,KAAK,MAAM,EAAE,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,MAAM,UAAU,2BAA2B,CAAC,MAAsB;IAChE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC3D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAWD,MAAM,UAAU,gCAAgC,CAC9C,MAAuB;IAEvB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;IAC5C,IAAI,cAAc,IAAI,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,+CAA+C,EAAE,SAAS,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,SAAS,EAAE,CAAC;IAC3E,IAAI,eAAe;QAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,OAAO,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAgD,EAChD,WAAmB;IAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACzD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CACN,oBAAoB,OAAO,EAAE,EAC7B,mEAAmE,OAAO,EAAE,CAC7E,CAAC;IACF,OAAO,CAAC;YACN,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC;YACrD,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,WAAW;YACnB,gBAAgB,EAAE,OAAO;SAC1B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAA8C;IAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CACN,kBAAkB,OAAO,EAAE,EAC3B,iEAAiE,OAAO,EAAE,CAC3E,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAA6C;IAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACzD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CACN,eAAe,OAAO,EAAE,EACxB,8DAA8D,OAAO,EAAE,CACxE,CAAC;IACF,OAAO;QACL,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,EAAE,OAAO,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;iIAqBkH;IAC/H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC3B,WAAW,EAAE,mBAAmB;aACjC;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yFAAyF;aACvG;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wCAAwC;aACtD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qCAAqC;aACnD;YACD,qBAAqB;YACrB,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;gBAClC,WAAW,EAAE,qCAAqC;aACnD;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sDAAsD;aACpE;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,+CAA+C;gBAC5D,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;wBACnE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC/B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACnC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE;qBACnE;oBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC;iBAC/C;aACF;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;KAC3C;IACD,WAAW,EAAE;QACX,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE,KAAK;KACpB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAS,EACT,OAAoB;IAEpB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAE5D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,mEAAmE;SAC7E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE9D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;SAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,mBAAmB,MAAM,8BAA8B;SACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,WAAmB,EACnB,OAAoB;IAEpB,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,SAAS,GAAG,GAAG,QAAQ,WAAW,CAAC;QACzC,IAAI,YAAoB,CAAC;QACzB,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,gCAAgC,QAAQ,GAAG;gBACpD,SAAS,EAAE,CAAC,qCAAqC,CAAC;aACnD,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,SAAS,MAAM,yBAAyB;gBACjD,SAAS,EAAE,CAAC,iCAAiC,CAAC;aAC/C,CAAC;QACJ,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yCAAyC,MAAM,qDAAqD;gBAC7G,SAAS,EAAE,CAAC,wDAAwD,EAAE,8CAA8C,CAAC;aACtH,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,IAAI,eAAe,GAAkB,IAAI,CAAC;QAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;QAED,sDAAsD;QACtD,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhD,wBAAwB;QACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;aACnF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,WAAW,GAAG;YAClB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;SAChD,CAAC;QAEF,MAAM,qBAAqB,GAAG;YAC5B,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B,CAAC;QAEF,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAEtD,yFAAyF;QACzF,oEAAoE;QACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACvC,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;YAClF,qBAAqB,CAAC,iBAAiB,CAAC;YACxC,eAAe,CAAC,WAAW,EAAE,iBAAiB,CAAC;SAChD,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,uBAAuB;QACvB,MAAM,cAAc,GAAG,gCAAgC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,sBAAsB,CACxC,WAAW,EACX,eAAe,KAAK,IAAI,EACxB,eAAe,EACf,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAChC,SAAS,EACT,cAAc,CACf,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,qCAAqC,MAAM,qHAAqH;YACzK,IAAI,EAAE;gBACJ,WAAW;gBACX,qBAAqB;gBACrB,eAAe;gBACf,aAAa,EAAE,iBAAiB;gBAChC,cAAc,EAAE,aAAa,CAAC,OAAO;gBACrC,WAAW;gBACX,gBAAgB;gBAChB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,SAAS,EAAE,UAAU,CAAC,KAAK;gBAC3B,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,aAAa,EAAE,UAAU,CAAC,SAAS;gBACnC,GAAG,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChG;YACD,SAAS,EAAE;gBACT,wCAAwC;gBACxC,2DAA2D;gBAC3D,wEAAwE;aACzE;YACD,cAAc,EAAE;gBACd,WAAW;gBACX,YAAY,EAAE,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC;gBACpD,QAAQ;gBACR,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,6BAA6B,YAAY,EAAE;YACpD,SAAS,EAAE,CAAC,oCAAoC,EAAE,4CAA4C,CAAC;SAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAS,EACT,WAAmB,EACnB,OAAoB;IAEpB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEtD,wCAAwC;QACxC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yEAAyE;gBAClF,SAAS,EAAE,CAAC,+CAA+C,EAAE,iCAAiC,EAAE,6CAA6C,CAAC;aAC/I,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,SAAS,GAAG,GAAG,QAAQ,WAAW,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,MAAM,yBAAyB,EAAE,CAAC;YAC/E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,QAAQ,GAAG,EAAE,CAAC;QAClF,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yCAAyC,MAAM,IAAI;aAC7D,CAAC;QACJ,CAAC;QAED,2CAA2C;QAC3C,MAAM,aAAa,GAAoB,QAAQ,CAAC;QAChD,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,KAAM,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAClF,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAChF,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QAE1E,kBAAkB;QAClB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC;YAC5C,MAAM;YACN,QAAQ;YACR,OAAO;YACP,OAAO;YACP,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,oCAAoC;QACpC,IAAI,SAAmB,CAAC;QACxB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,SAAS,GAAG;gBACV,2DAA2D;gBAC3D,iCAAiC;aAClC,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,SAAS,GAAG;gBACV,4CAA4C;gBAC5C,oEAAoE;gBACpE,2DAA2D;aAC5D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,SAAS,GAAG;gBACV,+CAA+C;gBAC/C,0EAA0E;gBAC1E,iCAAiC;aAClC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,6BAA6B,MAAM,OAAO,MAAM,CAAC,OAAO,MAAM,OAAO,EAAE;YAChF,IAAI,EAAE;gBACJ,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO;gBACP,aAAa;gBACb,YAAY;gBACZ,SAAS;aACV;YACD,SAAS;YACT,cAAc,EAAE;gBACd,WAAW;gBACX,YAAY,EAAE,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC;gBACpD,QAAQ;gBACR,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,4BAA4B,YAAY,EAAE;SACpD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,WAA4I,EAC5I,eAAwB,EACxB,eAAwB,EACxB,iBAA0B,EAC1B,SAA+B,EAC/B,cAAyC;IAEzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,oQAAoQ,CAAC,CAAC;IACpR,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,4RAA4R,CAAC,CAAC;IAC5S,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,uEAAuE;IACvE,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,SAAS,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,6BAA6B;IAC7B,IAAI,WAAW,CAAC,YAAY,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC,4FAA4F,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iQAAiQ,CAAC,CAAC;IAClZ,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,yPAAyP,CAAC,CAAC;IAC3Q,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,CAAC;IACrG,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,oEAAoE,YAAY,CAAC,KAAK,mLAAmL,CAAC,CAAC;IAC3R,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACzF,CAAC;IAED,sBAAsB;IACtB,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;IAC3F,IAAI,OAAO,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC,sDAAsD,OAAO,CAAC,KAAK,uMAAuM,CAAC,CAAC;IAC5R,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,oJAAoJ,CAAC,CAAC;IACtK,CAAC;IAED,gBAAgB;IAChB,QAAQ,CAAC,IAAI,CAAC,iUAAiU,CAAC,CAAC;IAEjV,oBAAoB;IACpB,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,sDAAsD,WAAW,CAAC,QAAQ,kOAAkO,CAAC,CAAC;IAC9T,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACvE,CAAC;IAED,gBAAgB;IAChB,IAAI,eAAe,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,iYAAiY,CAAC,CAAC;IACnZ,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IACnF,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,+PAA+P,CAAC,CAAC;IAC/Q,QAAQ,CAAC,IAAI,CAAC,iLAAiL,CAAC,CAAC;IACjM,IAAI,iBAAiB,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,iaAAia,CAAC,CAAC;IACnb,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,kOAAkO,CAAC,CAAC;IACpP,CAAC;IAED,4BAA4B;IAC5B,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IACpE,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,qIAAqI,CAAC,CAAC;QACrJ,QAAQ,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACzF,QAAQ,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QACzG,QAAQ,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACtF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,2MAA2M,CAAC,CAAC;IAC7N,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IAC5G,QAAQ,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACvE,QAAQ,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;IAElH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,gFAAgF;AAChF,0EAA0E;AAC1E,iEAAiE;AACjE,MAAM,iBAAiB,GACrB,kuBAAkuB,CAAC;AAEruB,MAAM,gBAAgB,GACpB,ubAAub,CAAC;AAE1b,MAAM,mBAAmB,GACvB,miBAAmiB,CAAC;AAEtiB,MAAM,oBAAoB,GACxB,kKAAkK,CAAC;AAErK,SAAS,kBAAkB,CAAC,KAA2B;IACrD,MAAM,KAAK,GAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAChD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,MAAM;QACR,KAAK,mBAAmB;YACtB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,OAAO;YACV,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,UAAU;YACb,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,MAAM;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,mFAAmF;AACnF,MAAM,sBAAsB,GAC1B,w3BAAw3B,CAAC;AAE33B,MAAM,+BAA+B,GACnC,orBAAorB,CAAC;AAEvrB,MAAM,wBAAwB,GAC5B,iiBAAiiB,CAAC;AAEpiB,MAAM,2BAA2B,GAC/B,qoBAAqoB,CAAC;AAExoB,MAAM,sBAAsB,GAC1B,qkBAAqkB,CAAC;AAExkB,SAAS,wBAAwB,CAAC,KAAgC;IAChE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,oBAAoB;YACvB,OAAO,IAAI,CAAC;QACd,KAAK,0BAA0B;YAC7B,OAAO,OAAO,sBAAsB,EAAE,CAAC;QACzC,KAAK,0BAA0B;YAC7B,OAAO,OAAO,+BAA+B,EAAE,CAAC;QAClD,KAAK,+CAA+C;YAClD,OAAO,OAAO,sBAAsB,OAAO,+BAA+B,EAAE,CAAC;QAC/E,KAAK,8BAA8B;YACjC,OAAO,OAAO,wBAAwB,EAAE,CAAC;QAC3C,KAAK,mBAAmB;YACtB,OAAO,OAAO,2BAA2B,EAAE,CAAC;QAC9C,KAAK,SAAS;YACZ,OAAO,OAAO,sBAAsB,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC"}
|