@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,232 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
import { PathUtils } from './path-utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Storage for deferred decisions using markdown files with YAML frontmatter.
|
|
7
|
+
* Each deferral is stored as a single file in .spec-workflow/deferrals/
|
|
8
|
+
*/
|
|
9
|
+
export class DeferralStorage {
|
|
10
|
+
deferralsDir;
|
|
11
|
+
constructor(projectPath) {
|
|
12
|
+
this.deferralsDir = join(PathUtils.getWorkflowRoot(projectPath), 'deferrals');
|
|
13
|
+
}
|
|
14
|
+
async ensureDir() {
|
|
15
|
+
await fs.mkdir(this.deferralsDir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
generateId() {
|
|
18
|
+
return 'd-' + randomUUID().replace(/-/g, '').slice(0, 8);
|
|
19
|
+
}
|
|
20
|
+
toMarkdown(deferral) {
|
|
21
|
+
const frontmatter = [
|
|
22
|
+
'---',
|
|
23
|
+
`id: "${deferral.id}"`,
|
|
24
|
+
`status: "${deferral.status}"`,
|
|
25
|
+
`title: "${deferral.title.replace(/"/g, '\\"')}"`,
|
|
26
|
+
`createdAt: "${deferral.createdAt}"`,
|
|
27
|
+
`updatedAt: "${deferral.updatedAt}"`,
|
|
28
|
+
`resolvedAt: ${deferral.resolvedAt ? `"${deferral.resolvedAt}"` : 'null'}`,
|
|
29
|
+
`originSpec: ${deferral.originSpec ? `"${deferral.originSpec}"` : 'null'}`,
|
|
30
|
+
`originPhase: ${deferral.originPhase ? `"${deferral.originPhase}"` : 'null'}`,
|
|
31
|
+
`revisitTrigger: "${deferral.revisitTrigger.replace(/"/g, '\\"')}"`,
|
|
32
|
+
`tags: [${deferral.tags.map(t => `"${t}"`).join(', ')}]`,
|
|
33
|
+
`resolution: ${deferral.resolution ? `"${deferral.resolution.replace(/"/g, '\\"')}"` : 'null'}`,
|
|
34
|
+
`resolvedInSpec: ${deferral.resolvedInSpec ? `"${deferral.resolvedInSpec}"` : 'null'}`,
|
|
35
|
+
`supersededBy: ${deferral.supersededBy ? `"${deferral.supersededBy}"` : 'null'}`,
|
|
36
|
+
`supersedes: ${deferral.supersedes ? `"${deferral.supersedes}"` : 'null'}`,
|
|
37
|
+
'---',
|
|
38
|
+
].join('\n');
|
|
39
|
+
return `${frontmatter}
|
|
40
|
+
|
|
41
|
+
## Context
|
|
42
|
+
${deferral.body.context}
|
|
43
|
+
|
|
44
|
+
## Decision Deferred
|
|
45
|
+
${deferral.body.decision}
|
|
46
|
+
|
|
47
|
+
## Revisit Criteria
|
|
48
|
+
${deferral.body.revisitCriteria}
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
parseMarkdown(content) {
|
|
52
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
53
|
+
if (!fmMatch)
|
|
54
|
+
return null;
|
|
55
|
+
const fm = fmMatch[1];
|
|
56
|
+
const body = fmMatch[2];
|
|
57
|
+
const getString = (key) => {
|
|
58
|
+
const match = fm.match(new RegExp(`^${key}:\\s*(?:"((?:[^"\\\\]|\\\\.)*)"|null)\\s*$`, 'm'));
|
|
59
|
+
if (!match)
|
|
60
|
+
return null;
|
|
61
|
+
return match[1] !== undefined ? match[1].replace(/\\"/g, '"') : null;
|
|
62
|
+
};
|
|
63
|
+
const getArray = (key) => {
|
|
64
|
+
const match = fm.match(new RegExp(`^${key}:\\s*\\[(.*)\\]\\s*$`, 'm'));
|
|
65
|
+
if (!match || !match[1].trim())
|
|
66
|
+
return [];
|
|
67
|
+
return match[1].split(',').map(s => s.trim().replace(/^"|"$/g, ''));
|
|
68
|
+
};
|
|
69
|
+
const getSection = (heading) => {
|
|
70
|
+
const regex = new RegExp(`## ${heading}\\n([\\s\\S]*?)(?=\\n## |$)`);
|
|
71
|
+
const match = body.match(regex);
|
|
72
|
+
return match ? match[1].trim() : '';
|
|
73
|
+
};
|
|
74
|
+
const id = getString('id');
|
|
75
|
+
const status = getString('status');
|
|
76
|
+
const title = getString('title');
|
|
77
|
+
if (!id || !status || !title)
|
|
78
|
+
return null;
|
|
79
|
+
return {
|
|
80
|
+
id,
|
|
81
|
+
status,
|
|
82
|
+
title,
|
|
83
|
+
createdAt: getString('createdAt') || '',
|
|
84
|
+
updatedAt: getString('updatedAt') || '',
|
|
85
|
+
resolvedAt: getString('resolvedAt'),
|
|
86
|
+
originSpec: getString('originSpec'),
|
|
87
|
+
originPhase: getString('originPhase'),
|
|
88
|
+
revisitTrigger: getString('revisitTrigger') || '',
|
|
89
|
+
tags: getArray('tags'),
|
|
90
|
+
resolution: getString('resolution'),
|
|
91
|
+
resolvedInSpec: getString('resolvedInSpec'),
|
|
92
|
+
supersededBy: getString('supersededBy'),
|
|
93
|
+
supersedes: getString('supersedes'),
|
|
94
|
+
body: {
|
|
95
|
+
context: getSection('Context'),
|
|
96
|
+
decision: getSection('Decision Deferred'),
|
|
97
|
+
revisitCriteria: getSection('Revisit Criteria'),
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
async create(deferral, supersedes) {
|
|
102
|
+
await this.ensureDir();
|
|
103
|
+
// Generate unique ID with collision check
|
|
104
|
+
let id;
|
|
105
|
+
let attempts = 0;
|
|
106
|
+
do {
|
|
107
|
+
id = this.generateId();
|
|
108
|
+
attempts++;
|
|
109
|
+
if (attempts > 10)
|
|
110
|
+
throw new Error('Failed to generate unique deferral ID after 10 attempts');
|
|
111
|
+
} while (await this.exists(id));
|
|
112
|
+
const now = new Date().toISOString();
|
|
113
|
+
const newDeferral = {
|
|
114
|
+
...deferral,
|
|
115
|
+
id,
|
|
116
|
+
status: 'deferred',
|
|
117
|
+
createdAt: now,
|
|
118
|
+
updatedAt: now,
|
|
119
|
+
resolvedAt: null,
|
|
120
|
+
resolution: null,
|
|
121
|
+
resolvedInSpec: null,
|
|
122
|
+
supersededBy: null,
|
|
123
|
+
supersedes: supersedes || null,
|
|
124
|
+
};
|
|
125
|
+
// If superseding, mark old deferral
|
|
126
|
+
if (supersedes) {
|
|
127
|
+
const old = await this.get(supersedes);
|
|
128
|
+
if (!old)
|
|
129
|
+
throw new Error(`Cannot supersede: deferral ${supersedes} not found`);
|
|
130
|
+
if (old.status !== 'deferred')
|
|
131
|
+
throw new Error(`Cannot supersede: deferral ${supersedes} is already ${old.status}`);
|
|
132
|
+
old.status = 'superseded';
|
|
133
|
+
old.supersededBy = id;
|
|
134
|
+
old.updatedAt = now;
|
|
135
|
+
await fs.writeFile(join(this.deferralsDir, `${supersedes}.md`), this.toMarkdown(old), 'utf-8');
|
|
136
|
+
}
|
|
137
|
+
await fs.writeFile(join(this.deferralsDir, `${id}.md`), this.toMarkdown(newDeferral), 'utf-8');
|
|
138
|
+
return id;
|
|
139
|
+
}
|
|
140
|
+
async get(id) {
|
|
141
|
+
try {
|
|
142
|
+
const content = await fs.readFile(join(this.deferralsDir, `${id}.md`), 'utf-8');
|
|
143
|
+
return this.parseMarkdown(content);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async list(filters) {
|
|
150
|
+
try {
|
|
151
|
+
const files = await fs.readdir(this.deferralsDir);
|
|
152
|
+
const deferrals = [];
|
|
153
|
+
for (const file of files) {
|
|
154
|
+
if (!file.endsWith('.md'))
|
|
155
|
+
continue;
|
|
156
|
+
const content = await fs.readFile(join(this.deferralsDir, file), 'utf-8');
|
|
157
|
+
const deferral = this.parseMarkdown(content);
|
|
158
|
+
if (!deferral)
|
|
159
|
+
continue;
|
|
160
|
+
if (filters?.status && deferral.status !== filters.status)
|
|
161
|
+
continue;
|
|
162
|
+
if (filters?.originSpec && deferral.originSpec !== filters.originSpec)
|
|
163
|
+
continue;
|
|
164
|
+
if (filters?.tag && !deferral.tags.includes(filters.tag))
|
|
165
|
+
continue;
|
|
166
|
+
deferrals.push(deferral);
|
|
167
|
+
}
|
|
168
|
+
return deferrals.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async resolve(id, resolution, resolvedInSpec) {
|
|
175
|
+
const deferral = await this.get(id);
|
|
176
|
+
if (!deferral)
|
|
177
|
+
throw new Error(`Deferral ${id} not found`);
|
|
178
|
+
if (deferral.status !== 'deferred')
|
|
179
|
+
throw new Error(`Cannot resolve: deferral ${id} is already ${deferral.status}`);
|
|
180
|
+
const now = new Date().toISOString();
|
|
181
|
+
deferral.status = 'resolved';
|
|
182
|
+
deferral.resolution = resolution;
|
|
183
|
+
deferral.resolvedAt = now;
|
|
184
|
+
deferral.updatedAt = now;
|
|
185
|
+
deferral.resolvedInSpec = resolvedInSpec || null;
|
|
186
|
+
await fs.writeFile(join(this.deferralsDir, `${id}.md`), this.toMarkdown(deferral), 'utf-8');
|
|
187
|
+
}
|
|
188
|
+
async update(id, updates) {
|
|
189
|
+
const deferral = await this.get(id);
|
|
190
|
+
if (!deferral)
|
|
191
|
+
throw new Error(`Deferral ${id} not found`);
|
|
192
|
+
if (updates.title !== undefined)
|
|
193
|
+
deferral.title = updates.title;
|
|
194
|
+
if (updates.revisitTrigger !== undefined)
|
|
195
|
+
deferral.revisitTrigger = updates.revisitTrigger;
|
|
196
|
+
if (updates.tags !== undefined)
|
|
197
|
+
deferral.tags = updates.tags;
|
|
198
|
+
if (updates.context !== undefined)
|
|
199
|
+
deferral.body.context = updates.context;
|
|
200
|
+
if (updates.decision !== undefined)
|
|
201
|
+
deferral.body.decision = updates.decision;
|
|
202
|
+
if (updates.revisitCriteria !== undefined)
|
|
203
|
+
deferral.body.revisitCriteria = updates.revisitCriteria;
|
|
204
|
+
deferral.updatedAt = new Date().toISOString();
|
|
205
|
+
await fs.writeFile(join(this.deferralsDir, `${id}.md`), this.toMarkdown(deferral), 'utf-8');
|
|
206
|
+
}
|
|
207
|
+
async delete(id) {
|
|
208
|
+
const deferral = await this.get(id);
|
|
209
|
+
if (!deferral)
|
|
210
|
+
throw new Error(`Deferral ${id} not found`);
|
|
211
|
+
// Check if any other deferral references this one
|
|
212
|
+
const all = await this.list();
|
|
213
|
+
for (const d of all) {
|
|
214
|
+
if (d.id === id)
|
|
215
|
+
continue;
|
|
216
|
+
if (d.supersededBy === id || d.supersedes === id) {
|
|
217
|
+
throw new Error(`Cannot delete: deferral ${d.id} references ${id}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
await fs.unlink(join(this.deferralsDir, `${id}.md`));
|
|
221
|
+
}
|
|
222
|
+
async exists(id) {
|
|
223
|
+
try {
|
|
224
|
+
await fs.access(join(this.deferralsDir, `${id}.md`));
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=deferral-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferral-storage.js","sourceRoot":"","sources":["../../src/core/deferral-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,YAAY,CAAS;IAE7B,YAAY,WAAmB;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;IAChF,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,UAAU,CAAC,QAAkB;QACnC,MAAM,WAAW,GAAG;YAClB,KAAK;YACL,QAAQ,QAAQ,CAAC,EAAE,GAAG;YACtB,YAAY,QAAQ,CAAC,MAAM,GAAG;YAC9B,WAAW,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG;YACjD,eAAe,QAAQ,CAAC,SAAS,GAAG;YACpC,eAAe,QAAQ,CAAC,SAAS,GAAG;YACpC,eAAe,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YAC1E,eAAe,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YAC1E,gBAAgB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YAC7E,oBAAoB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG;YACnE,UAAU,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxD,eAAe,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YAC/F,mBAAmB,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YACtF,iBAAiB,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YAChF,eAAe,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YAC1E,KAAK;SACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,GAAG,WAAW;;;EAGvB,QAAQ,CAAC,IAAI,CAAC,OAAO;;;EAGrB,QAAQ,CAAC,IAAI,CAAC,QAAQ;;;EAGtB,QAAQ,CAAC,IAAI,CAAC,eAAe;CAC9B,CAAC;IACA,CAAC;IAEO,aAAa,CAAC,OAAe;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG,CAAC,GAAW,EAAiB,EAAE;YAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,4CAA4C,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAY,EAAE;YACzC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,OAAO,6BAA6B,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,CAAC;QAEF,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAuB,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAE1C,OAAO;YACL,EAAE;YACF,MAAM;YACN,KAAK;YACL,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE;YACvC,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE;YACvC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;YACnC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;YACnC,WAAW,EAAE,SAAS,CAAC,aAAa,CAA4B;YAChE,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACjD,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;YACnC,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAAC;YAC3C,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC;YACvC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE;gBACJ,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;gBAC9B,QAAQ,EAAE,UAAU,CAAC,mBAAmB,CAAC;gBACzC,eAAe,EAAE,UAAU,CAAC,kBAAkB,CAAC;aAChD;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,QAAuI,EACvI,UAAmB;QAEnB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEvB,0CAA0C;QAC1C,IAAI,EAAU,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,GAAG,CAAC;YACF,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,QAAQ,EAAE,CAAC;YACX,IAAI,QAAQ,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAChG,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QAEhC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,WAAW,GAAa;YAC5B,GAAG,QAAQ;YACX,EAAE;YACF,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,UAAU,IAAI,IAAI;SAC/B,CAAC;QAEF,oCAAoC;QACpC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,YAAY,CAAC,CAAC;YAChF,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACpH,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;YAC1B,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;YACtB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YAChF,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAgE;QACzE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,SAAS,GAAe,EAAE,CAAC;YAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACpC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC7C,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAExB,IAAI,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;oBAAE,SAAS;gBACpE,IAAI,OAAO,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU;oBAAE,SAAS;gBAChF,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAEnE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,UAAkB,EAAE,cAAuB;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,eAAe,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEpH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;QAC7B,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;QAC1B,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;QACzB,QAAQ,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;QAEjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAOxB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAChE,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS;YAAE,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC3F,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC3E,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9E,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QACnG,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAE3D,kDAAkD;QAClD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;gBAAE,SAAS;YAC1B,IAAI,CAAC,CAAC,YAAY,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,EAAU;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const SPEC_WORKFLOW_SHARED_ROOT_ENV = "SPEC_WORKFLOW_SHARED_ROOT";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the git workspace root directory.
|
|
4
|
+
* For repositories and worktrees, this returns the top-level checked-out directory.
|
|
5
|
+
*
|
|
6
|
+
* @param projectPath - Any path inside the workspace
|
|
7
|
+
* @returns Workspace root path, or original path when git is unavailable
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveGitWorkspaceRoot(projectPath: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the git root directory for storing shared specs.
|
|
12
|
+
* In worktrees, this returns the main repository path so all worktrees share specs.
|
|
13
|
+
*
|
|
14
|
+
* @param projectPath - The current project/worktree path
|
|
15
|
+
* @returns The resolved path (main repo for worktrees, or original path)
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveGitRoot(projectPath: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Checks if the current directory is a git worktree (not the main repo).
|
|
20
|
+
*
|
|
21
|
+
* @param projectPath - The path to check
|
|
22
|
+
* @returns true if in a worktree, false if main repo or not a git repo
|
|
23
|
+
*/
|
|
24
|
+
export declare function isGitWorktree(projectPath: string): boolean;
|
|
25
|
+
//# sourceMappingURL=git-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/core/git-utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAOzE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAoC1D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAU1D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
export const SPEC_WORKFLOW_SHARED_ROOT_ENV = 'SPEC_WORKFLOW_SHARED_ROOT';
|
|
4
|
+
const GIT_EXEC_OPTIONS = {
|
|
5
|
+
encoding: 'utf-8',
|
|
6
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
7
|
+
timeout: 5000
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the git workspace root directory.
|
|
11
|
+
* For repositories and worktrees, this returns the top-level checked-out directory.
|
|
12
|
+
*
|
|
13
|
+
* @param projectPath - Any path inside the workspace
|
|
14
|
+
* @returns Workspace root path, or original path when git is unavailable
|
|
15
|
+
*/
|
|
16
|
+
export function resolveGitWorkspaceRoot(projectPath) {
|
|
17
|
+
try {
|
|
18
|
+
const workspaceRoot = execSync('git rev-parse --show-toplevel', {
|
|
19
|
+
cwd: projectPath,
|
|
20
|
+
...GIT_EXEC_OPTIONS
|
|
21
|
+
}).trim();
|
|
22
|
+
return workspaceRoot || projectPath;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return projectPath;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the git root directory for storing shared specs.
|
|
30
|
+
* In worktrees, this returns the main repository path so all worktrees share specs.
|
|
31
|
+
*
|
|
32
|
+
* @param projectPath - The current project/worktree path
|
|
33
|
+
* @returns The resolved path (main repo for worktrees, or original path)
|
|
34
|
+
*/
|
|
35
|
+
export function resolveGitRoot(projectPath) {
|
|
36
|
+
// Check for explicit override first
|
|
37
|
+
const explicitRoot = process.env[SPEC_WORKFLOW_SHARED_ROOT_ENV]?.trim();
|
|
38
|
+
if (explicitRoot) {
|
|
39
|
+
return explicitRoot;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
// Get the git common directory (main repo's .git folder)
|
|
43
|
+
const gitCommonDir = execSync('git rev-parse --git-common-dir', {
|
|
44
|
+
cwd: projectPath,
|
|
45
|
+
...GIT_EXEC_OPTIONS
|
|
46
|
+
}).trim();
|
|
47
|
+
// In main repo, returns ".git" - no change needed
|
|
48
|
+
if (gitCommonDir === '.git') {
|
|
49
|
+
return projectPath;
|
|
50
|
+
}
|
|
51
|
+
// In worktree or subdirectory, returns path like "/main/.git", "/main/.git/worktrees/name",
|
|
52
|
+
// or relative path like "../../.git" when run from a subdirectory.
|
|
53
|
+
// Extract the main repo path (parent of .git) and resolve to absolute path.
|
|
54
|
+
const gitIndex = gitCommonDir.lastIndexOf('.git');
|
|
55
|
+
if (gitIndex > 0) {
|
|
56
|
+
const mainRepoPath = gitCommonDir.substring(0, gitIndex - 1);
|
|
57
|
+
// If path is already absolute (Unix or Windows style), return as-is
|
|
58
|
+
// Otherwise, resolve relative to projectPath
|
|
59
|
+
const isAbsolute = mainRepoPath.startsWith('/') || /^[A-Za-z]:[\\/]/.test(mainRepoPath);
|
|
60
|
+
return isAbsolute ? mainRepoPath : resolve(projectPath, mainRepoPath);
|
|
61
|
+
}
|
|
62
|
+
return projectPath;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Not a git repo or git unavailable - use original path
|
|
66
|
+
return projectPath;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks if the current directory is a git worktree (not the main repo).
|
|
71
|
+
*
|
|
72
|
+
* @param projectPath - The path to check
|
|
73
|
+
* @returns true if in a worktree, false if main repo or not a git repo
|
|
74
|
+
*/
|
|
75
|
+
export function isGitWorktree(projectPath) {
|
|
76
|
+
try {
|
|
77
|
+
const gitCommonDir = execSync('git rev-parse --git-common-dir', {
|
|
78
|
+
cwd: projectPath,
|
|
79
|
+
...GIT_EXEC_OPTIONS
|
|
80
|
+
}).trim();
|
|
81
|
+
return gitCommonDir !== '.git';
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=git-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/core/git-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqC,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAC;AACzE,MAAM,gBAAgB,GAAsC;IAC1D,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,IAAI;CACd,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,QAAQ,CAAC,+BAA+B,EAAE;YAC9D,GAAG,EAAE,WAAW;YAChB,GAAG,gBAAgB;SACpB,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,OAAO,aAAa,IAAI,WAAW,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,oCAAoC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,IAAI,EAAE,CAAC;IACxE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,CAAC;QACH,yDAAyD;QACzD,MAAM,YAAY,GAAG,QAAQ,CAAC,gCAAgC,EAAE;YAC9D,GAAG,EAAE,WAAW;YAChB,GAAG,gBAAgB;SACpB,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,kDAAkD;QAClD,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,4FAA4F;QAC5F,mEAAmE;QACnE,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC7D,oEAAoE;YACpE,6CAA6C;YAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxF,OAAO,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,QAAQ,CAAC,gCAAgC,EAAE;YAC9D,GAAG,EAAE,WAAW;YAChB,GAAG,gBAAgB;SACpB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,YAAY,KAAK,MAAM,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable name for overriding the global directory location.
|
|
3
|
+
* When set, all global state files will be stored in this location instead of ~/.spec-workflow-mcp
|
|
4
|
+
*
|
|
5
|
+
* This is useful for sandboxed environments (e.g., Codex CLI with sandbox_mode=workspace-write)
|
|
6
|
+
* where $HOME is read-only.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Set to an absolute path
|
|
10
|
+
* SPEC_WORKFLOW_HOME=/workspace/.spec-workflow-mcp npx spec-workflow-mcp /workspace
|
|
11
|
+
*
|
|
12
|
+
* // Set to a relative path (resolved against current working directory)
|
|
13
|
+
* SPEC_WORKFLOW_HOME=./.spec-workflow-mcp npx spec-workflow-mcp /workspace
|
|
14
|
+
*/
|
|
15
|
+
export declare const SPEC_WORKFLOW_HOME_ENV = "SPEC_WORKFLOW_HOME";
|
|
16
|
+
/**
|
|
17
|
+
* Get the global directory path for storing spec-workflow-mcp state files.
|
|
18
|
+
*
|
|
19
|
+
* Resolution order:
|
|
20
|
+
* 1. SPEC_WORKFLOW_HOME environment variable (if set)
|
|
21
|
+
* - Absolute paths are used as-is
|
|
22
|
+
* - Relative paths are resolved against process.cwd()
|
|
23
|
+
* 2. Default: ~/.spec-workflow-mcp
|
|
24
|
+
*
|
|
25
|
+
* Files stored in this directory:
|
|
26
|
+
* - activeProjects.json - Project registry
|
|
27
|
+
* - activeSession.json - Dashboard session info
|
|
28
|
+
* - settings.json - Global settings
|
|
29
|
+
* - job-execution-history.json - Job execution history
|
|
30
|
+
* - migration.log - Implementation log migration tracking
|
|
31
|
+
*
|
|
32
|
+
* @returns The absolute path to the global directory
|
|
33
|
+
*/
|
|
34
|
+
export declare function getGlobalDir(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Get a helpful error message for permission errors when accessing the global directory.
|
|
37
|
+
* Suggests using SPEC_WORKFLOW_HOME environment variable.
|
|
38
|
+
*
|
|
39
|
+
* @param operation - The operation that failed (e.g., "create directory", "write file")
|
|
40
|
+
* @param path - The path that couldn't be accessed
|
|
41
|
+
* @returns A formatted error message with suggestions
|
|
42
|
+
*/
|
|
43
|
+
export declare function getPermissionErrorHelp(operation: string, path: string): string;
|
|
44
|
+
//# sourceMappingURL=global-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-dir.d.ts","sourceRoot":"","sources":["../../src/core/global-dir.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAI3D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAWrC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB9E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { join, isAbsolute } from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Environment variable name for overriding the global directory location.
|
|
5
|
+
* When set, all global state files will be stored in this location instead of ~/.spec-workflow-mcp
|
|
6
|
+
*
|
|
7
|
+
* This is useful for sandboxed environments (e.g., Codex CLI with sandbox_mode=workspace-write)
|
|
8
|
+
* where $HOME is read-only.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Set to an absolute path
|
|
12
|
+
* SPEC_WORKFLOW_HOME=/workspace/.spec-workflow-mcp npx spec-workflow-mcp /workspace
|
|
13
|
+
*
|
|
14
|
+
* // Set to a relative path (resolved against current working directory)
|
|
15
|
+
* SPEC_WORKFLOW_HOME=./.spec-workflow-mcp npx spec-workflow-mcp /workspace
|
|
16
|
+
*/
|
|
17
|
+
export const SPEC_WORKFLOW_HOME_ENV = 'SPEC_WORKFLOW_HOME';
|
|
18
|
+
const DEFAULT_DIR_NAME = '.spec-workflow-mcp';
|
|
19
|
+
/**
|
|
20
|
+
* Get the global directory path for storing spec-workflow-mcp state files.
|
|
21
|
+
*
|
|
22
|
+
* Resolution order:
|
|
23
|
+
* 1. SPEC_WORKFLOW_HOME environment variable (if set)
|
|
24
|
+
* - Absolute paths are used as-is
|
|
25
|
+
* - Relative paths are resolved against process.cwd()
|
|
26
|
+
* 2. Default: ~/.spec-workflow-mcp
|
|
27
|
+
*
|
|
28
|
+
* Files stored in this directory:
|
|
29
|
+
* - activeProjects.json - Project registry
|
|
30
|
+
* - activeSession.json - Dashboard session info
|
|
31
|
+
* - settings.json - Global settings
|
|
32
|
+
* - job-execution-history.json - Job execution history
|
|
33
|
+
* - migration.log - Implementation log migration tracking
|
|
34
|
+
*
|
|
35
|
+
* @returns The absolute path to the global directory
|
|
36
|
+
*/
|
|
37
|
+
export function getGlobalDir() {
|
|
38
|
+
const envPath = process.env[SPEC_WORKFLOW_HOME_ENV];
|
|
39
|
+
if (envPath) {
|
|
40
|
+
// If an environment variable is set, use it
|
|
41
|
+
// Handle both absolute and relative paths
|
|
42
|
+
return isAbsolute(envPath) ? envPath : join(process.cwd(), envPath);
|
|
43
|
+
}
|
|
44
|
+
// Default to ~/.spec-workflow-mcp
|
|
45
|
+
return join(homedir(), DEFAULT_DIR_NAME);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get a helpful error message for permission errors when accessing the global directory.
|
|
49
|
+
* Suggests using SPEC_WORKFLOW_HOME environment variable.
|
|
50
|
+
*
|
|
51
|
+
* @param operation - The operation that failed (e.g., "create directory", "write file")
|
|
52
|
+
* @param path - The path that couldn't be accessed
|
|
53
|
+
* @returns A formatted error message with suggestions
|
|
54
|
+
*/
|
|
55
|
+
export function getPermissionErrorHelp(operation, path) {
|
|
56
|
+
return `
|
|
57
|
+
Failed to ${operation}: ${path}
|
|
58
|
+
|
|
59
|
+
This error typically occurs in sandboxed environments where $HOME is read-only.
|
|
60
|
+
|
|
61
|
+
To fix this, set the SPEC_WORKFLOW_HOME environment variable to a writable location:
|
|
62
|
+
|
|
63
|
+
SPEC_WORKFLOW_HOME=/path/to/writable/dir npx spec-workflow-mcp [project-path]
|
|
64
|
+
|
|
65
|
+
For example, to store state files in your workspace:
|
|
66
|
+
|
|
67
|
+
SPEC_WORKFLOW_HOME=/workspace/.spec-workflow-mcp npx spec-workflow-mcp /workspace
|
|
68
|
+
|
|
69
|
+
Or use a relative path:
|
|
70
|
+
|
|
71
|
+
SPEC_WORKFLOW_HOME=./.spec-workflow-mcp npx spec-workflow-mcp .
|
|
72
|
+
`.trim();
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=global-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-dir.js","sourceRoot":"","sources":["../../src/core/global-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAE3D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpD,IAAI,OAAO,EAAE,CAAC;QACZ,4CAA4C;QAC5C,0CAA0C;QAC1C,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,kCAAkC;IAClC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,IAAY;IACpE,OAAO;YACG,SAAS,KAAK,IAAI;;;;;;;;;;;;;;;CAe7B,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type HygieneSignal = {
|
|
2
|
+
file: string;
|
|
3
|
+
line: number;
|
|
4
|
+
pattern: 'console' | 'todo' | 'fixme' | 'debugger';
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function computeHygieneSignals(files: string[]): Promise<HygieneSignal[]>;
|
|
8
|
+
//# sourceMappingURL=hygiene-signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hygiene-signals.d.ts","sourceRoot":"","sources":["../../src/core/hygiene-signals.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAqCF,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAIrF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readFile, stat } from 'fs/promises';
|
|
2
|
+
import { partitionPaths } from './path-denylist.js';
|
|
3
|
+
const MAX_FILE_SIZE = 1024 * 1024;
|
|
4
|
+
const MAX_TEXT_LENGTH = 120;
|
|
5
|
+
const PATTERNS = [
|
|
6
|
+
{ pattern: 'console', regex: /console\.(log|warn|error|debug|info|trace)\s*\(/ },
|
|
7
|
+
{ pattern: 'todo', regex: /\bTODO\b/ },
|
|
8
|
+
{ pattern: 'fixme', regex: /\bFIXME\b/ },
|
|
9
|
+
{ pattern: 'debugger', regex: /\bdebugger\b/ },
|
|
10
|
+
];
|
|
11
|
+
async function scanFile(file) {
|
|
12
|
+
try {
|
|
13
|
+
const stats = await stat(file);
|
|
14
|
+
if (stats.size > MAX_FILE_SIZE) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const content = await readFile(file, 'utf-8');
|
|
18
|
+
const lines = content.split('\n');
|
|
19
|
+
const signals = [];
|
|
20
|
+
for (let i = 0; i < lines.length; i++) {
|
|
21
|
+
const line = lines[i];
|
|
22
|
+
for (const { pattern, regex } of PATTERNS) {
|
|
23
|
+
if (regex.test(line)) {
|
|
24
|
+
const trimmed = line.trim();
|
|
25
|
+
const text = trimmed.length > MAX_TEXT_LENGTH ? trimmed.slice(0, MAX_TEXT_LENGTH) : trimmed;
|
|
26
|
+
signals.push({ file, line: i + 1, pattern, text });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return signals;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function computeHygieneSignals(files) {
|
|
37
|
+
const { kept } = partitionPaths(files);
|
|
38
|
+
const results = await Promise.all(kept.map(scanFile));
|
|
39
|
+
return results.flat();
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=hygiene-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hygiene-signals.js","sourceRoot":"","sources":["../../src/core/hygiene-signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASpD,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAClC,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,QAAQ,GAAgE;IAC5E,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,iDAAiD,EAAE;IAChF,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IACtC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;IACxC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE;CAC/C,CAAC;AAEF,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC5F,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAe;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrates implementation logs from JSON format to individual markdown files
|
|
3
|
+
* This utility class handles the automatic migration when the MCP server starts
|
|
4
|
+
*/
|
|
5
|
+
export declare class ImplementationLogMigrator {
|
|
6
|
+
private migrationLogPath;
|
|
7
|
+
constructor(userDataDir: string);
|
|
8
|
+
/**
|
|
9
|
+
* Log migration events
|
|
10
|
+
*/
|
|
11
|
+
private log;
|
|
12
|
+
/**
|
|
13
|
+
* Sanitize taskId for use in filenames (e.g., "1.2" → "1-2")
|
|
14
|
+
*/
|
|
15
|
+
private sanitizeTaskId;
|
|
16
|
+
/**
|
|
17
|
+
* Generate markdown filename for a log entry
|
|
18
|
+
*/
|
|
19
|
+
private generateFileName;
|
|
20
|
+
/**
|
|
21
|
+
* Convert an implementation log entry to markdown format
|
|
22
|
+
*/
|
|
23
|
+
private entryToMarkdown;
|
|
24
|
+
/**
|
|
25
|
+
* Migrate a single JSON file to markdown files
|
|
26
|
+
*/
|
|
27
|
+
private migrateJsonFile;
|
|
28
|
+
/**
|
|
29
|
+
* Scan all specs and migrate their implementation logs
|
|
30
|
+
*/
|
|
31
|
+
migrateAllSpecs(specsDir: string): Promise<{
|
|
32
|
+
totalSpecs: number;
|
|
33
|
+
migratedSpecs: number;
|
|
34
|
+
totalEntries: number;
|
|
35
|
+
errors: Array<{
|
|
36
|
+
spec: string;
|
|
37
|
+
error: string;
|
|
38
|
+
}>;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=implementation-log-migrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implementation-log-migrator.d.ts","sourceRoot":"","sources":["../../src/core/implementation-log-migrator.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgHvB;;OAEG;YACW,eAAe;IA6B7B;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC;CAuFH"}
|