@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,163 @@
|
|
|
1
|
+
export const decompositionGuideTool = {
|
|
2
|
+
name: 'decomposition-guide',
|
|
3
|
+
description: `Load guide for decomposing steering documents into a complete set of specs.
|
|
4
|
+
|
|
5
|
+
# Instructions
|
|
6
|
+
Called as part of the spec workflow when steering docs exist. This is a required step before
|
|
7
|
+
starting the first spec. Returns the spec decomposition methodology — principles for identifying
|
|
8
|
+
spec boundaries, ordering dependencies, and producing a decomposition document.`,
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {},
|
|
12
|
+
additionalProperties: false
|
|
13
|
+
},
|
|
14
|
+
annotations: {
|
|
15
|
+
title: 'Decomposition Guide',
|
|
16
|
+
readOnlyHint: true,
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export async function decompositionGuideHandler(args, context) {
|
|
20
|
+
return {
|
|
21
|
+
success: true,
|
|
22
|
+
message: 'Spec decomposition guide loaded — use this methodology to break the project into specs',
|
|
23
|
+
data: {
|
|
24
|
+
guide: getDecompositionGuide(),
|
|
25
|
+
dashboardUrl: context.dashboardUrl
|
|
26
|
+
},
|
|
27
|
+
nextSteps: [
|
|
28
|
+
'Read all steering docs from .spec-workflow/steering/',
|
|
29
|
+
'Ask user if there is existing code to account for',
|
|
30
|
+
'Apply the decomposition methodology to produce a spec breakdown',
|
|
31
|
+
'Surface open questions to the user before finalizing',
|
|
32
|
+
'Save decomposition to .spec-workflow/spec-decomposition/decomposition.md'
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function getDecompositionGuide() {
|
|
37
|
+
return `# Spec Decomposition Methodology
|
|
38
|
+
|
|
39
|
+
## Purpose
|
|
40
|
+
|
|
41
|
+
This guide provides principles for decomposing a project — described by its steering documents
|
|
42
|
+
(product.md, tech.md, structure.md) — into a complete, ordered set of specs. Each spec will
|
|
43
|
+
later go through the standard spec workflow (Requirements → Design → Tasks → Implementation).
|
|
44
|
+
|
|
45
|
+
## Core Principle
|
|
46
|
+
|
|
47
|
+
**Each spec should produce a system state where you can do something you couldn't do before,
|
|
48
|
+
and verify it end-to-end.**
|
|
49
|
+
|
|
50
|
+
Not a technical layer. Not a product feature bullet point. A demonstrable capability.
|
|
51
|
+
|
|
52
|
+
## Decomposition Principles
|
|
53
|
+
|
|
54
|
+
### 1. The Reviewability Test
|
|
55
|
+
|
|
56
|
+
If the spec is too big for a human to meaningfully review the requirements, design, and task
|
|
57
|
+
breakdown in a single sitting, it is too big. This is the most practical heuristic for sizing.
|
|
58
|
+
|
|
59
|
+
### 2. INVEST Criteria at the Spec Level
|
|
60
|
+
|
|
61
|
+
- **Independent**: Each spec should be buildable and verifiable without waiting for unfinished
|
|
62
|
+
specs (dependencies on *completed* specs are fine).
|
|
63
|
+
- **Negotiable**: Scope details are refined during the spec's own requirements and design phases.
|
|
64
|
+
- **Valuable**: Each spec delivers user-visible or system-verifiable value on its own.
|
|
65
|
+
- **Estimable**: The scope is clear enough to reason about effort.
|
|
66
|
+
- **Small**: Small enough to hold in your head; large enough to be meaningful.
|
|
67
|
+
- **Testable**: There is a concrete end-to-end verification for the spec's deliverable.
|
|
68
|
+
|
|
69
|
+
### 3. Vertical Slicing
|
|
70
|
+
|
|
71
|
+
Each spec must cut through the full stack needed to deliver its capability. Never split by
|
|
72
|
+
technical layer:
|
|
73
|
+
|
|
74
|
+
**Wrong**: "database schema spec" + "API layer spec" + "UI spec" for the same feature.
|
|
75
|
+
**Right**: One spec that delivers the feature end-to-end, touching database, API, and UI.
|
|
76
|
+
|
|
77
|
+
The exception is foundational infrastructure that genuinely has no user-facing value on its own
|
|
78
|
+
(e.g., project scaffolding, CI pipeline). These should be absorbed into the first spec that
|
|
79
|
+
needs them, not separated into their own spec.
|
|
80
|
+
|
|
81
|
+
### 4. Dependency Ordering
|
|
82
|
+
|
|
83
|
+
Specs should form a directed acyclic graph (DAG). For each spec, identify:
|
|
84
|
+
- What it depends on (which earlier specs must be complete)
|
|
85
|
+
- What depends on it (which later specs it unblocks)
|
|
86
|
+
|
|
87
|
+
Prefer orderings that deliver user-visible value early. Front-load specs that unblock the most
|
|
88
|
+
downstream work.
|
|
89
|
+
|
|
90
|
+
### 5. Cross-Spec Conventions
|
|
91
|
+
|
|
92
|
+
Identify patterns that apply across multiple specs and document them once:
|
|
93
|
+
- Schema evolution strategy (e.g., migration numbering)
|
|
94
|
+
- API versioning or OpenAPI conventions
|
|
95
|
+
- Shared type definitions or interfaces
|
|
96
|
+
- Error handling patterns
|
|
97
|
+
- Naming conventions
|
|
98
|
+
|
|
99
|
+
These are not specs themselves — they are conventions that specs follow.
|
|
100
|
+
|
|
101
|
+
### 6. What Is NOT a Spec
|
|
102
|
+
|
|
103
|
+
Some items from steering docs lack independent deliverable value:
|
|
104
|
+
- **Pure infrastructure**: CI/CD setup, Docker configuration, linting — absorb into the first
|
|
105
|
+
spec that needs the infrastructure.
|
|
106
|
+
- **Technical layers**: "Set up the database" or "Configure the SSE broker" — these are
|
|
107
|
+
components within a spec, not standalone deliverables.
|
|
108
|
+
- **Trivial features**: If the implementation is a few lines of code with no design decisions,
|
|
109
|
+
it belongs inside a related spec, not as its own.
|
|
110
|
+
|
|
111
|
+
Call these out explicitly so they don't get lost — document where each non-spec item lands.
|
|
112
|
+
|
|
113
|
+
### 7. Existing Code Awareness
|
|
114
|
+
|
|
115
|
+
If the project has existing code:
|
|
116
|
+
- Scan the codebase to understand what is already built.
|
|
117
|
+
- Identify specs that are partially or fully implemented.
|
|
118
|
+
- Note which specs require refactoring existing code vs. building new.
|
|
119
|
+
- Account for existing patterns and conventions that new specs should follow.
|
|
120
|
+
|
|
121
|
+
### 8. Open Questions Protocol
|
|
122
|
+
|
|
123
|
+
During decomposition, ambiguities and design decisions will surface. For each:
|
|
124
|
+
- Document the question clearly.
|
|
125
|
+
- Explain why it matters for spec boundaries or ordering.
|
|
126
|
+
- Suggest options if possible.
|
|
127
|
+
- **Present all open questions to the user before finalizing the decomposition.**
|
|
128
|
+
The user may provide answers, directives to leave questions unresolved, or indicate
|
|
129
|
+
that a question should be resolved during a specific spec's design phase.
|
|
130
|
+
|
|
131
|
+
## Decomposition Process
|
|
132
|
+
|
|
133
|
+
1. **Read all steering docs** to understand the full scope.
|
|
134
|
+
2. **Identify capabilities** — what distinct things should the system do?
|
|
135
|
+
3. **Group into specs** — each spec delivers one or more related capabilities end-to-end.
|
|
136
|
+
4. **Check sizing** — apply the reviewability test. Split specs that are too large; merge
|
|
137
|
+
specs that are too small to be independently valuable.
|
|
138
|
+
5. **Order by dependencies** — build the DAG. Identify the critical path.
|
|
139
|
+
6. **Identify cross-spec conventions** — extract shared patterns.
|
|
140
|
+
7. **Flag what is NOT a spec** — assign non-spec items to their parent specs.
|
|
141
|
+
8. **Surface open questions** — present to the user for guidance.
|
|
142
|
+
9. **Write the decomposition document** with all findings.
|
|
143
|
+
|
|
144
|
+
## Output Structure
|
|
145
|
+
|
|
146
|
+
The decomposition document should include (adapt to fit the project):
|
|
147
|
+
|
|
148
|
+
- **Per-spec entries**: Name, scope description, what it delivers, end-to-end verification,
|
|
149
|
+
dependencies on other specs, and any design considerations for this spec specifically.
|
|
150
|
+
- **Dependency graph**: Visual representation (mermaid DAG recommended) of spec ordering.
|
|
151
|
+
- **Cross-spec conventions**: Shared patterns and rules.
|
|
152
|
+
- **What is NOT a spec**: Items absorbed into other specs, with rationale.
|
|
153
|
+
- **Open questions**: Unresolved decisions with context and options.
|
|
154
|
+
|
|
155
|
+
## Sources
|
|
156
|
+
|
|
157
|
+
These principles are drawn from:
|
|
158
|
+
- INVEST criteria (originally for user stories, applied here at spec granularity)
|
|
159
|
+
- The reviewability test (intent-driven.dev)
|
|
160
|
+
- Vertical slicing (ThoughtWorks spec-driven development analysis)
|
|
161
|
+
- Practical examples from spec-driven development tooling (Kiro, spec-kit, Zencoder)`;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=decomposition-guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decomposition-guide.js","sourceRoot":"","sources":["../../src/tools/decomposition-guide.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;;;gFAKiE;IAC9E,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,KAAK;KAC5B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAS,EAAE,OAAoB;IAC7E,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,wFAAwF;QACjG,IAAI,EAAE;YACJ,KAAK,EAAE,qBAAqB,EAAE;YAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC;QACD,SAAS,EAAE;YACT,sDAAsD;YACtD,mDAAmD;YACnD,iEAAiE;YACjE,sDAAsD;YACtD,0EAA0E;SAC3E;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qFA4H4E,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { ToolContext, ToolResponse } from '../types.js';
|
|
3
|
+
export declare const deferralsTool: Tool;
|
|
4
|
+
export declare function deferralsHandler(args: Record<string, any>, context: ToolContext): Promise<ToolResponse>;
|
|
5
|
+
//# sourceMappingURL=deferrals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferrals.d.ts","sourceRoot":"","sources":["../../src/tools/deferrals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIxD,eAAO,MAAM,aAAa,EAAE,IAgG3B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CA8BvB"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { DeferralStorage } from '../core/deferral-storage.js';
|
|
2
|
+
import { validateProjectPath } from '../core/path-utils.js';
|
|
3
|
+
export const deferralsTool = {
|
|
4
|
+
name: 'deferrals',
|
|
5
|
+
description: `Track decisions that are explicitly deferred during spec work.
|
|
6
|
+
|
|
7
|
+
# Instructions
|
|
8
|
+
Use this tool to record, query, and resolve deferred decisions. Deferrals are project-level artifacts that persist across specs.
|
|
9
|
+
|
|
10
|
+
Actions:
|
|
11
|
+
- 'add': Record a new deferred decision (optionally superseding an existing one)
|
|
12
|
+
- 'list': List deferrals with optional filters (status, originSpec, tag)
|
|
13
|
+
- 'get': Get full details of a specific deferral
|
|
14
|
+
- 'resolve': Mark a deferral as resolved
|
|
15
|
+
- 'update': Update mutable fields (title, revisitTrigger, tags, context, decision, revisitCriteria)
|
|
16
|
+
- 'delete': Remove a deferral (fails if referenced by another deferral)`,
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
action: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
enum: ['add', 'list', 'get', 'resolve', 'update', 'delete'],
|
|
23
|
+
description: 'The action to perform'
|
|
24
|
+
},
|
|
25
|
+
projectPath: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
description: 'Absolute path to the project root (optional - uses server context path if not provided)'
|
|
28
|
+
},
|
|
29
|
+
// add params
|
|
30
|
+
title: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Title of the deferred decision (required for add)'
|
|
33
|
+
},
|
|
34
|
+
context: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Why this decision was deferred and what alternatives were considered (required for add)'
|
|
37
|
+
},
|
|
38
|
+
decision: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
description: 'What specifically was not decided or not implemented (required for add)'
|
|
41
|
+
},
|
|
42
|
+
revisitTrigger: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Freeform description of when to revisit this decision (required for add)'
|
|
45
|
+
},
|
|
46
|
+
revisitCriteria: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'What conditions should trigger revisiting this (optional for add, defaults to revisitTrigger)'
|
|
49
|
+
},
|
|
50
|
+
originSpec: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Spec that created this deferral (optional for add)'
|
|
53
|
+
},
|
|
54
|
+
originPhase: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
enum: ['requirements', 'design', 'tasks', 'implementation'],
|
|
57
|
+
description: 'Phase where decision was deferred (optional for add)'
|
|
58
|
+
},
|
|
59
|
+
tags: {
|
|
60
|
+
type: 'array',
|
|
61
|
+
items: { type: 'string' },
|
|
62
|
+
description: 'Freeform tags for filtering (optional for add/update)'
|
|
63
|
+
},
|
|
64
|
+
supersedes: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'ID of deferral this one replaces — automatically marks old one as superseded (optional for add)'
|
|
67
|
+
},
|
|
68
|
+
// get/resolve/update/delete params
|
|
69
|
+
id: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Deferral ID (required for get, resolve, update, delete)'
|
|
72
|
+
},
|
|
73
|
+
// resolve params
|
|
74
|
+
resolution: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Brief note on how it was resolved (required for resolve)'
|
|
77
|
+
},
|
|
78
|
+
resolvedInSpec: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'Spec that resolved this deferral (optional for resolve)'
|
|
81
|
+
},
|
|
82
|
+
// list params
|
|
83
|
+
status: {
|
|
84
|
+
type: 'string',
|
|
85
|
+
enum: ['deferred', 'resolved', 'superseded'],
|
|
86
|
+
description: 'Filter by status (optional for list, default: all statuses)'
|
|
87
|
+
},
|
|
88
|
+
tag: {
|
|
89
|
+
type: 'string',
|
|
90
|
+
description: 'Filter by tag — matches if deferral tags include this value (optional for list)'
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
required: ['action']
|
|
94
|
+
},
|
|
95
|
+
annotations: {
|
|
96
|
+
title: 'Deferrals',
|
|
97
|
+
destructiveHint: true,
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
export async function deferralsHandler(args, context) {
|
|
101
|
+
const projectPath = args.projectPath || context.projectPath;
|
|
102
|
+
if (!projectPath) {
|
|
103
|
+
return { success: false, message: 'Project path is required but not provided in context or arguments' };
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
const validatedPath = await validateProjectPath(projectPath);
|
|
107
|
+
const storage = new DeferralStorage(validatedPath);
|
|
108
|
+
switch (args.action) {
|
|
109
|
+
case 'add':
|
|
110
|
+
return await handleAdd(args, storage);
|
|
111
|
+
case 'list':
|
|
112
|
+
return await handleList(args, storage);
|
|
113
|
+
case 'get':
|
|
114
|
+
return await handleGet(args, storage);
|
|
115
|
+
case 'resolve':
|
|
116
|
+
return await handleResolve(args, storage);
|
|
117
|
+
case 'update':
|
|
118
|
+
return await handleUpdate(args, storage);
|
|
119
|
+
case 'delete':
|
|
120
|
+
return await handleDelete(args, storage);
|
|
121
|
+
default:
|
|
122
|
+
return { success: false, message: `Unknown action: ${args.action}. Use 'add', 'list', 'get', 'resolve', 'update', or 'delete'.` };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
127
|
+
return { success: false, message: `Deferrals operation failed: ${msg}` };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async function handleAdd(args, storage) {
|
|
131
|
+
if (!args.title || !args.context || !args.decision || !args.revisitTrigger) {
|
|
132
|
+
return { success: false, message: 'Missing required fields for add. Required: title, context, decision, revisitTrigger' };
|
|
133
|
+
}
|
|
134
|
+
const id = await storage.create({
|
|
135
|
+
title: args.title,
|
|
136
|
+
originSpec: args.originSpec || null,
|
|
137
|
+
originPhase: args.originPhase || null,
|
|
138
|
+
revisitTrigger: args.revisitTrigger,
|
|
139
|
+
tags: args.tags || [],
|
|
140
|
+
supersedes: args.supersedes || null,
|
|
141
|
+
body: {
|
|
142
|
+
context: args.context,
|
|
143
|
+
decision: args.decision,
|
|
144
|
+
revisitCriteria: args.revisitCriteria || args.revisitTrigger,
|
|
145
|
+
},
|
|
146
|
+
}, args.supersedes);
|
|
147
|
+
return {
|
|
148
|
+
success: true,
|
|
149
|
+
message: `Deferred decision recorded: ${id}`,
|
|
150
|
+
data: { id, title: args.title },
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function handleList(args, storage) {
|
|
154
|
+
const deferrals = await storage.list({
|
|
155
|
+
status: args.status,
|
|
156
|
+
originSpec: args.originSpec,
|
|
157
|
+
tag: args.tag,
|
|
158
|
+
});
|
|
159
|
+
const summary = deferrals.map(d => ({
|
|
160
|
+
id: d.id,
|
|
161
|
+
status: d.status,
|
|
162
|
+
title: d.title,
|
|
163
|
+
originSpec: d.originSpec,
|
|
164
|
+
tags: d.tags,
|
|
165
|
+
revisitTrigger: d.revisitTrigger,
|
|
166
|
+
createdAt: d.createdAt,
|
|
167
|
+
}));
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
message: `Found ${deferrals.length} deferral(s)`,
|
|
171
|
+
data: { deferrals: summary, total: deferrals.length },
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async function handleGet(args, storage) {
|
|
175
|
+
if (!args.id) {
|
|
176
|
+
return { success: false, message: 'Missing required field: id' };
|
|
177
|
+
}
|
|
178
|
+
const deferral = await storage.get(args.id);
|
|
179
|
+
if (!deferral) {
|
|
180
|
+
return { success: false, message: `Deferral ${args.id} not found` };
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
success: true,
|
|
184
|
+
message: `Deferral ${args.id}: ${deferral.title}`,
|
|
185
|
+
data: deferral,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
async function handleResolve(args, storage) {
|
|
189
|
+
if (!args.id || !args.resolution) {
|
|
190
|
+
return { success: false, message: 'Missing required fields for resolve. Required: id, resolution' };
|
|
191
|
+
}
|
|
192
|
+
await storage.resolve(args.id, args.resolution, args.resolvedInSpec);
|
|
193
|
+
return {
|
|
194
|
+
success: true,
|
|
195
|
+
message: `Deferral ${args.id} resolved`,
|
|
196
|
+
data: { id: args.id, resolution: args.resolution },
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async function handleUpdate(args, storage) {
|
|
200
|
+
if (!args.id) {
|
|
201
|
+
return { success: false, message: 'Missing required field: id' };
|
|
202
|
+
}
|
|
203
|
+
const updates = {};
|
|
204
|
+
for (const key of ['title', 'revisitTrigger', 'tags', 'context', 'decision', 'revisitCriteria']) {
|
|
205
|
+
if (args[key] !== undefined)
|
|
206
|
+
updates[key] = args[key];
|
|
207
|
+
}
|
|
208
|
+
if (Object.keys(updates).length === 0) {
|
|
209
|
+
return { success: false, message: 'No fields to update. Updatable: title, revisitTrigger, tags, context, decision, revisitCriteria' };
|
|
210
|
+
}
|
|
211
|
+
await storage.update(args.id, updates);
|
|
212
|
+
return {
|
|
213
|
+
success: true,
|
|
214
|
+
message: `Deferral ${args.id} updated`,
|
|
215
|
+
data: { id: args.id, updatedFields: Object.keys(updates) },
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
async function handleDelete(args, storage) {
|
|
219
|
+
if (!args.id) {
|
|
220
|
+
return { success: false, message: 'Missing required field: id' };
|
|
221
|
+
}
|
|
222
|
+
await storage.delete(args.id);
|
|
223
|
+
return {
|
|
224
|
+
success: true,
|
|
225
|
+
message: `Deferral ${args.id} deleted`,
|
|
226
|
+
data: { id: args.id },
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=deferrals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferrals.js","sourceRoot":"","sources":["../../src/tools/deferrals.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE;;;;;;;;;;;wEAWyD;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBAC3D,WAAW,EAAE,uBAAuB;aACrC;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yFAAyF;aACvG;YACD,aAAa;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;aACjE;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yFAAyF;aACvG;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yEAAyE;aACvF;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0EAA0E;aACxF;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+FAA+F;aAC7G;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oDAAoD;aAClE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC;gBAC3D,WAAW,EAAE,sDAAsD;aACpE;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,uDAAuD;aACrE;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iGAAiG;aAC/G;YACD,mCAAmC;YACnC,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;YACD,iBAAiB;YACjB,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;YACD,cAAc;YACd,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC;gBAC5C,WAAW,EAAE,6DAA6D;aAC3E;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iFAAiF;aAC/F;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,WAAW;QAClB,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAyB,EACzB,OAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mEAAmE,EAAE,CAAC;IAC1G,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;QAEnD,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,KAAK;gBACR,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,KAAK,MAAM;gBACT,OAAO,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzC,KAAK,KAAK;gBACR,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,KAAK,SAAS;gBACZ,OAAO,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,KAAK,QAAQ;gBACX,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,KAAK,QAAQ;gBACX,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C;gBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,IAAI,CAAC,MAAM,+DAA+D,EAAE,CAAC;QACtI,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,GAAG,EAAE,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAyB,EAAE,OAAwB;IAC1E,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qFAAqF,EAAE,CAAC;IAC5H,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;QACnC,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc;SAC7D;KACF,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,+BAA+B,EAAE,EAAE;QAC5C,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;KAChC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAyB,EAAE,OAAwB;IAC3E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,SAAS,SAAS,CAAC,MAAM,cAAc;QAChD,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE;KACtD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAyB,EAAE,OAAwB;IAC1E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,EAAE;QACjD,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAyB,EAAE,OAAwB;IAC9E,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+DAA+D,EAAE,CAAC;IACtG,CAAC;IAED,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAErE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,WAAW;QACvC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;KACnD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAyB,EAAE,OAAwB;IAC7E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAChG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iGAAiG,EAAE,CAAC;IACxI,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAEvC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,UAAU;QACtC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;KAC3D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAyB,EAAE,OAAwB;IAC7E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE9B,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,UAAU;QACtC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { ToolContext, ToolResponse } from '../types.js';
|
|
3
|
+
export declare const getTaskReviewTool: Tool;
|
|
4
|
+
export declare function getTaskReviewHandler(args: any, context: ToolContext): Promise<ToolResponse>;
|
|
5
|
+
//# sourceMappingURL=get-task-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-task-review.d.ts","sourceRoot":"","sources":["../../src/tools/get-task-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIxD,eAAO,MAAM,iBAAiB,EAAE,IAoC/B,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CAsGvB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { PathUtils } from '../core/path-utils.js';
|
|
2
|
+
import { TaskReviewManager } from '../core/task-review-manager.js';
|
|
3
|
+
export const getTaskReviewTool = {
|
|
4
|
+
name: 'get-task-review',
|
|
5
|
+
description: `Retrieve the findings from a completed task review.
|
|
6
|
+
|
|
7
|
+
# Instructions
|
|
8
|
+
|
|
9
|
+
Call this to read review findings after a dashboard-triggered or CLI-triggered review has completed for a task. Returns the full review including verdict, summary, and structured findings with severity, file locations, and categories.
|
|
10
|
+
|
|
11
|
+
By default returns the latest review version. Pass a specific version number to retrieve an older review.`,
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
projectPath: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'Absolute path to the project root (optional - uses server context path if not provided)'
|
|
18
|
+
},
|
|
19
|
+
specName: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Name of the specification (kebab-case)'
|
|
22
|
+
},
|
|
23
|
+
taskId: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Task ID (e.g., "1", "1.2", "3.1.4")'
|
|
26
|
+
},
|
|
27
|
+
version: {
|
|
28
|
+
type: 'integer',
|
|
29
|
+
minimum: 1,
|
|
30
|
+
description: 'Specific review version to retrieve (optional - defaults to latest)'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
required: ['specName', 'taskId']
|
|
34
|
+
},
|
|
35
|
+
annotations: {
|
|
36
|
+
title: 'Get Task Review',
|
|
37
|
+
readOnlyHint: true,
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export async function getTaskReviewHandler(args, context) {
|
|
41
|
+
const { specName, taskId, version } = args;
|
|
42
|
+
const projectPath = args.projectPath || context.projectPath;
|
|
43
|
+
if (!projectPath) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
message: 'Project path is required but not provided in context or arguments'
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const specPath = PathUtils.getSpecPath(projectPath, specName);
|
|
50
|
+
// Validate spec exists before touching TaskReviewManager (avoids phantom directory creation)
|
|
51
|
+
const { promises: fs } = await import('fs');
|
|
52
|
+
try {
|
|
53
|
+
await fs.stat(specPath);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
message: `Spec '${specName}' not found at ${specPath}`,
|
|
59
|
+
nextSteps: ['Check the spec name and try again']
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const reviewManager = new TaskReviewManager(specPath);
|
|
64
|
+
if (version !== undefined) {
|
|
65
|
+
// Validate version is a positive integer
|
|
66
|
+
const v = parseInt(version);
|
|
67
|
+
if (!Number.isInteger(v) || v < 1) {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
message: 'Version must be a positive integer (1 or greater)'
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const reviews = await reviewManager.getReviewsForTask(taskId);
|
|
74
|
+
const review = reviews.find(r => r.version === v);
|
|
75
|
+
if (!review) {
|
|
76
|
+
if (reviews.length === 0) {
|
|
77
|
+
return {
|
|
78
|
+
success: false,
|
|
79
|
+
message: `No reviews found for task '${taskId}' in spec '${specName}'`,
|
|
80
|
+
nextSteps: ['Run a review first using review-task or the dashboard Review button']
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const available = reviews.map(r => r.version).join(', ');
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
message: `Review version ${v} not found for task '${taskId}'. Available versions: ${available}`,
|
|
87
|
+
nextSteps: [`Use one of the available versions: ${available}`]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
success: true,
|
|
92
|
+
message: `Review v${review.version} for task '${taskId}': ${review.verdict}`,
|
|
93
|
+
data: { review },
|
|
94
|
+
projectContext: {
|
|
95
|
+
projectPath,
|
|
96
|
+
workflowRoot: PathUtils.getWorkflowRoot(projectPath),
|
|
97
|
+
specName,
|
|
98
|
+
dashboardUrl: context.dashboardUrl
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Default: get latest review
|
|
103
|
+
const review = await reviewManager.getLatestReview(taskId);
|
|
104
|
+
if (!review) {
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
message: `No reviews found for task '${taskId}' in spec '${specName}'`,
|
|
108
|
+
nextSteps: ['Run a review first using review-task or the dashboard Review button']
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
success: true,
|
|
113
|
+
message: `Latest review (v${review.version}) for task '${taskId}': ${review.verdict}`,
|
|
114
|
+
data: { review },
|
|
115
|
+
nextSteps: review.verdict === 'fail'
|
|
116
|
+
? ['Address the critical findings', 'Re-review after fixes using the dashboard Review button']
|
|
117
|
+
: review.verdict === 'findings'
|
|
118
|
+
? ['Consider addressing the warnings', 'Mark task [x] complete when satisfied']
|
|
119
|
+
: ['Task review passed — mark task [x] complete'],
|
|
120
|
+
projectContext: {
|
|
121
|
+
projectPath,
|
|
122
|
+
workflowRoot: PathUtils.getWorkflowRoot(projectPath),
|
|
123
|
+
specName,
|
|
124
|
+
dashboardUrl: context.dashboardUrl
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
message: `Failed to retrieve review: ${errorMessage}`
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=get-task-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-task-review.js","sourceRoot":"","sources":["../../src/tools/get-task-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { ToolContext, MCPToolResponse } from '../types.js';
|
|
3
|
+
export declare function registerTools(): Tool[];
|
|
4
|
+
export declare function handleToolCall(name: string, args: any, context: ToolContext): Promise<MCPToolResponse>;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAY1D,OAAO,EAAE,WAAW,EAAgB,eAAe,EAAiB,MAAM,aAAa,CAAC;AAExF,wBAAgB,aAAa,IAAI,IAAI,EAAE,CActC;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAwD5G"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { specWorkflowGuideTool, specWorkflowGuideHandler } from './spec-workflow-guide.js';
|
|
2
|
+
import { specStatusTool, specStatusHandler } from './spec-status.js';
|
|
3
|
+
import { steeringGuideTool, steeringGuideHandler } from './steering-guide.js';
|
|
4
|
+
import { approvalsTool, approvalsHandler } from './approvals.js';
|
|
5
|
+
import { logImplementationTool, logImplementationHandler } from './log-implementation.js';
|
|
6
|
+
import { deferralsTool, deferralsHandler } from './deferrals.js';
|
|
7
|
+
import { adversarialReviewTool, adversarialReviewHandler } from './adversarial-review.js';
|
|
8
|
+
import { adversarialResponseTool, adversarialResponseHandler } from './adversarial-response.js';
|
|
9
|
+
import { decompositionGuideTool, decompositionGuideHandler } from './decomposition-guide.js';
|
|
10
|
+
import { reviewTaskTool, reviewTaskHandler } from './review-task.js';
|
|
11
|
+
import { getTaskReviewTool, getTaskReviewHandler } from './get-task-review.js';
|
|
12
|
+
import { toMCPResponse } from '../types.js';
|
|
13
|
+
export function registerTools() {
|
|
14
|
+
return [
|
|
15
|
+
specWorkflowGuideTool,
|
|
16
|
+
steeringGuideTool,
|
|
17
|
+
specStatusTool,
|
|
18
|
+
approvalsTool,
|
|
19
|
+
logImplementationTool,
|
|
20
|
+
deferralsTool,
|
|
21
|
+
adversarialReviewTool,
|
|
22
|
+
adversarialResponseTool,
|
|
23
|
+
decompositionGuideTool,
|
|
24
|
+
reviewTaskTool,
|
|
25
|
+
getTaskReviewTool
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
export async function handleToolCall(name, args, context) {
|
|
29
|
+
let response;
|
|
30
|
+
let isError = false;
|
|
31
|
+
try {
|
|
32
|
+
switch (name) {
|
|
33
|
+
case 'spec-workflow-guide':
|
|
34
|
+
response = await specWorkflowGuideHandler(args, context);
|
|
35
|
+
break;
|
|
36
|
+
case 'steering-guide':
|
|
37
|
+
response = await steeringGuideHandler(args, context);
|
|
38
|
+
break;
|
|
39
|
+
case 'spec-status':
|
|
40
|
+
response = await specStatusHandler(args, context);
|
|
41
|
+
break;
|
|
42
|
+
case 'approvals':
|
|
43
|
+
response = await approvalsHandler(args, context);
|
|
44
|
+
break;
|
|
45
|
+
case 'log-implementation':
|
|
46
|
+
response = await logImplementationHandler(args, context);
|
|
47
|
+
break;
|
|
48
|
+
case 'deferrals':
|
|
49
|
+
response = await deferralsHandler(args, context);
|
|
50
|
+
break;
|
|
51
|
+
case 'adversarial-review':
|
|
52
|
+
response = await adversarialReviewHandler(args, context);
|
|
53
|
+
break;
|
|
54
|
+
case 'adversarial-response':
|
|
55
|
+
response = await adversarialResponseHandler(args, context);
|
|
56
|
+
break;
|
|
57
|
+
case 'decomposition-guide':
|
|
58
|
+
response = await decompositionGuideHandler(args, context);
|
|
59
|
+
break;
|
|
60
|
+
case 'review-task':
|
|
61
|
+
response = await reviewTaskHandler(args, context);
|
|
62
|
+
break;
|
|
63
|
+
case 'get-task-review':
|
|
64
|
+
response = await getTaskReviewHandler(args, context);
|
|
65
|
+
break;
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
68
|
+
}
|
|
69
|
+
// Check if the response indicates an error
|
|
70
|
+
isError = !response.success;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
74
|
+
response = {
|
|
75
|
+
success: false,
|
|
76
|
+
message: `Tool execution failed: ${errorMessage}`
|
|
77
|
+
};
|
|
78
|
+
isError = true;
|
|
79
|
+
}
|
|
80
|
+
return toMCPResponse(response, isError);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=index.js.map
|