@repo-os/repoos 0.5.45
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/LICENSE.md +110 -0
- package/README.md +272 -0
- package/dist/.build-info.json +4 -0
- package/dist/.build-stamp.json +3 -0
- package/dist/cli/colors.d.ts +13 -0
- package/dist/cli/colors.js +37 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +221 -0
- package/dist/commands/check.d.ts +170 -0
- package/dist/commands/check.js +1227 -0
- package/dist/commands/docs.d.ts +2 -0
- package/dist/commands/docs.js +70 -0
- package/dist/commands/gc.d.ts +1 -0
- package/dist/commands/gc.js +57 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.js +699 -0
- package/dist/commands/screenshots.d.ts +7 -0
- package/dist/commands/screenshots.js +77 -0
- package/dist/commands/serve.d.ts +55 -0
- package/dist/commands/serve.js +204 -0
- package/dist/commands/status.d.ts +140 -0
- package/dist/commands/status.js +569 -0
- package/dist/commands/stop.d.ts +1 -0
- package/dist/commands/stop.js +59 -0
- package/dist/commands/tasks.d.ts +47 -0
- package/dist/commands/tasks.js +334 -0
- package/dist/commands/tunnel.d.ts +1 -0
- package/dist/commands/tunnel.js +1271 -0
- package/dist/commands/ui-harness.d.ts +53 -0
- package/dist/commands/ui-harness.js +62 -0
- package/dist/commands/ui-smoke.d.ts +6 -0
- package/dist/commands/ui-smoke.js +220 -0
- package/dist/commands/upgrade.d.ts +15 -0
- package/dist/commands/upgrade.js +188 -0
- package/dist/core/auth-store.d.ts +81 -0
- package/dist/core/auth-store.js +530 -0
- package/dist/core/auth.d.ts +75 -0
- package/dist/core/auth.js +124 -0
- package/dist/core/bootstrap.d.ts +41 -0
- package/dist/core/bootstrap.js +236 -0
- package/dist/core/build.d.ts +92 -0
- package/dist/core/build.js +249 -0
- package/dist/core/canary.d.ts +10 -0
- package/dist/core/canary.js +14 -0
- package/dist/core/check-failure-summary.d.ts +10 -0
- package/dist/core/check-failure-summary.js +34 -0
- package/dist/core/config.d.ts +160 -0
- package/dist/core/config.js +1288 -0
- package/dist/core/context-pack.d.ts +74 -0
- package/dist/core/context-pack.js +778 -0
- package/dist/core/db.d.ts +236 -0
- package/dist/core/db.js +747 -0
- package/dist/core/detect.d.ts +69 -0
- package/dist/core/detect.js +251 -0
- package/dist/core/docs.d.ts +76 -0
- package/dist/core/docs.js +225 -0
- package/dist/core/frontmatter.d.ts +29 -0
- package/dist/core/frontmatter.js +215 -0
- package/dist/core/git.d.ts +505 -0
- package/dist/core/git.js +1453 -0
- package/dist/core/indexer.d.ts +33 -0
- package/dist/core/indexer.js +282 -0
- package/dist/core/input.d.ts +66 -0
- package/dist/core/input.js +222 -0
- package/dist/core/logger.d.ts +70 -0
- package/dist/core/logger.js +138 -0
- package/dist/core/models.d.ts +45 -0
- package/dist/core/models.js +291 -0
- package/dist/core/net-probe.d.ts +4 -0
- package/dist/core/net-probe.js +20 -0
- package/dist/core/providers/deepinfra.d.ts +23 -0
- package/dist/core/providers/deepinfra.js +44 -0
- package/dist/core/providers/index.d.ts +24 -0
- package/dist/core/providers/index.js +59 -0
- package/dist/core/providers/openrouter.d.ts +28 -0
- package/dist/core/providers/openrouter.js +82 -0
- package/dist/core/providers/spend.d.ts +86 -0
- package/dist/core/providers/spend.js +286 -0
- package/dist/core/providers/types.d.ts +56 -0
- package/dist/core/providers/types.js +39 -0
- package/dist/core/repoos.d.ts +59 -0
- package/dist/core/repoos.js +221 -0
- package/dist/core/runtime.d.ts +35 -0
- package/dist/core/runtime.js +167 -0
- package/dist/core/skills-registry.d.ts +39 -0
- package/dist/core/skills-registry.js +148 -0
- package/dist/core/skills-registry.test.d.ts +1 -0
- package/dist/core/skills-registry.test.js +52 -0
- package/dist/core/sysmem.d.ts +7 -0
- package/dist/core/sysmem.js +55 -0
- package/dist/core/tailscale.d.ts +2 -0
- package/dist/core/tailscale.js +19 -0
- package/dist/core/task.d.ts +53 -0
- package/dist/core/task.js +310 -0
- package/dist/core/toml-line.d.ts +20 -0
- package/dist/core/toml-line.js +52 -0
- package/dist/core/toml-validate.d.ts +44 -0
- package/dist/core/toml-validate.js +335 -0
- package/dist/core/tunnel-assistant.d.ts +30 -0
- package/dist/core/tunnel-assistant.js +65 -0
- package/dist/core/tunnel-registry.d.ts +96 -0
- package/dist/core/tunnel-registry.js +267 -0
- package/dist/core/tunnel-registry.test.d.ts +1 -0
- package/dist/core/tunnel-registry.test.js +309 -0
- package/dist/core/tunnel.d.ts +103 -0
- package/dist/core/tunnel.js +320 -0
- package/dist/core/types.d.ts +811 -0
- package/dist/core/types.js +27 -0
- package/dist/core/worktree-gc.d.ts +57 -0
- package/dist/core/worktree-gc.js +194 -0
- package/dist/server/__tests__/integration-job.test.d.ts +1 -0
- package/dist/server/__tests__/integration-job.test.js +129 -0
- package/dist/server/agents.d.ts +1020 -0
- package/dist/server/agents.js +4070 -0
- package/dist/server/attachments.d.ts +51 -0
- package/dist/server/attachments.js +130 -0
- package/dist/server/auto-engineering.d.ts +45 -0
- package/dist/server/auto-engineering.js +275 -0
- package/dist/server/branchless-release.d.ts +22 -0
- package/dist/server/branchless-release.js +67 -0
- package/dist/server/built-in-agents.d.ts +305 -0
- package/dist/server/built-in-agents.js +1838 -0
- package/dist/server/cto-monitor.d.ts +35 -0
- package/dist/server/cto-monitor.js +281 -0
- package/dist/server/cto.d.ts +125 -0
- package/dist/server/cto.js +590 -0
- package/dist/server/deployments.d.ts +119 -0
- package/dist/server/deployments.js +325 -0
- package/dist/server/diff-snapshot.d.ts +20 -0
- package/dist/server/diff-snapshot.js +73 -0
- package/dist/server/done.d.ts +160 -0
- package/dist/server/done.js +488 -0
- package/dist/server/freeform.d.ts +55 -0
- package/dist/server/freeform.js +179 -0
- package/dist/server/handoff.d.ts +99 -0
- package/dist/server/handoff.js +575 -0
- package/dist/server/hetzner.d.ts +45 -0
- package/dist/server/hetzner.js +117 -0
- package/dist/server/icons.d.ts +8 -0
- package/dist/server/icons.js +195 -0
- package/dist/server/integration-job.d.ts +75 -0
- package/dist/server/integration-job.js +144 -0
- package/dist/server/integration-orchestrator.d.ts +211 -0
- package/dist/server/integration-orchestrator.js +1299 -0
- package/dist/server/integration-status.d.ts +48 -0
- package/dist/server/integration-status.js +71 -0
- package/dist/server/live-index.d.ts +295 -0
- package/dist/server/live-index.js +452 -0
- package/dist/server/model-test.d.ts +20 -0
- package/dist/server/model-test.js +100 -0
- package/dist/server/ntfy.d.ts +57 -0
- package/dist/server/ntfy.js +112 -0
- package/dist/server/pm-attachments.d.ts +35 -0
- package/dist/server/pm-attachments.js +181 -0
- package/dist/server/pm-runs.d.ts +58 -0
- package/dist/server/pm-runs.js +80 -0
- package/dist/server/preview.d.ts +174 -0
- package/dist/server/preview.js +641 -0
- package/dist/server/release.d.ts +88 -0
- package/dist/server/release.js +449 -0
- package/dist/server/reload.d.ts +194 -0
- package/dist/server/reload.js +586 -0
- package/dist/server/remote-validation.d.ts +132 -0
- package/dist/server/remote-validation.js +478 -0
- package/dist/server/repo-lock.d.ts +36 -0
- package/dist/server/repo-lock.js +141 -0
- package/dist/server/review-guard.d.ts +14 -0
- package/dist/server/review-guard.js +159 -0
- package/dist/server/review.d.ts +243 -0
- package/dist/server/review.js +1211 -0
- package/dist/server/routes/agents.d.ts +6 -0
- package/dist/server/routes/agents.js +28 -0
- package/dist/server/routes/auth.d.ts +60 -0
- package/dist/server/routes/auth.js +755 -0
- package/dist/server/routes/config.d.ts +20 -0
- package/dist/server/routes/config.js +347 -0
- package/dist/server/routes/debugger.d.ts +33 -0
- package/dist/server/routes/debugger.js +360 -0
- package/dist/server/routes/deployments.d.ts +3 -0
- package/dist/server/routes/deployments.js +16 -0
- package/dist/server/routes/docs.d.ts +8 -0
- package/dist/server/routes/docs.js +135 -0
- package/dist/server/routes/helpers.d.ts +21 -0
- package/dist/server/routes/helpers.js +171 -0
- package/dist/server/routes/index.d.ts +19 -0
- package/dist/server/routes/index.js +18 -0
- package/dist/server/routes/info.d.ts +17 -0
- package/dist/server/routes/info.js +177 -0
- package/dist/server/routes/inputs.d.ts +7 -0
- package/dist/server/routes/inputs.js +125 -0
- package/dist/server/routes/model-providers.d.ts +27 -0
- package/dist/server/routes/model-providers.js +94 -0
- package/dist/server/routes/models.d.ts +3 -0
- package/dist/server/routes/models.js +36 -0
- package/dist/server/routes/notify.d.ts +2 -0
- package/dist/server/routes/notify.js +17 -0
- package/dist/server/routes/playground.d.ts +29 -0
- package/dist/server/routes/playground.js +81 -0
- package/dist/server/routes/release.d.ts +20 -0
- package/dist/server/routes/release.js +86 -0
- package/dist/server/routes/router.d.ts +12 -0
- package/dist/server/routes/router.js +32 -0
- package/dist/server/routes/skill-registry.d.ts +5 -0
- package/dist/server/routes/skill-registry.js +51 -0
- package/dist/server/routes/tasks.d.ts +58 -0
- package/dist/server/routes/tasks.js +1442 -0
- package/dist/server/routes/transcribe.d.ts +2 -0
- package/dist/server/routes/transcribe.js +124 -0
- package/dist/server/routes/types.d.ts +68 -0
- package/dist/server/routes/types.js +1 -0
- package/dist/server/routes/ui.d.ts +5 -0
- package/dist/server/routes/ui.js +81 -0
- package/dist/server/routes/utils.d.ts +3 -0
- package/dist/server/routes/utils.js +23 -0
- package/dist/server/serve-reaper.d.ts +135 -0
- package/dist/server/serve-reaper.js +491 -0
- package/dist/server/server.d.ts +49 -0
- package/dist/server/server.js +2171 -0
- package/dist/server/supervisor.d.ts +89 -0
- package/dist/server/supervisor.js +231 -0
- package/dist/server/system.d.ts +198 -0
- package/dist/server/system.js +480 -0
- package/dist/server/task-check.d.ts +45 -0
- package/dist/server/task-check.js +71 -0
- package/dist/server/task-transitions.d.ts +51 -0
- package/dist/server/task-transitions.js +78 -0
- package/dist/server/task-watchdog.d.ts +158 -0
- package/dist/server/task-watchdog.js +681 -0
- package/dist/server/test-run.d.ts +28 -0
- package/dist/server/test-run.js +81 -0
- package/dist/server/watcher.d.ts +21 -0
- package/dist/server/watcher.js +194 -0
- package/dist/server/write.d.ts +94 -0
- package/dist/server/write.js +345 -0
- package/dist/ui/assets/AgentsView-CF4wRvHh.css +1 -0
- package/dist/ui/assets/AgentsView-D-myL-kA.js +1 -0
- package/dist/ui/assets/ContextView-D3TC-RSp.css +1 -0
- package/dist/ui/assets/ContextView-DsOqAdyE.js +4 -0
- package/dist/ui/assets/DashboardView-BOhsIJqO.js +1 -0
- package/dist/ui/assets/DashboardView-Ck9o0RP2.css +1 -0
- package/dist/ui/assets/DeploymentsView--iIUVfEH.css +1 -0
- package/dist/ui/assets/DeploymentsView-DXu_FYR2.js +1 -0
- package/dist/ui/assets/InputsView-24HVbVPk.js +1 -0
- package/dist/ui/assets/InputsView-BLb7GHtx.css +1 -0
- package/dist/ui/assets/LoginView-6QlGg6cx.css +1 -0
- package/dist/ui/assets/LoginView-BqupI0Lt.js +1 -0
- package/dist/ui/assets/ReleasesView-BEG1A0YH.css +1 -0
- package/dist/ui/assets/ReleasesView-CAgMuxpe.js +3 -0
- package/dist/ui/assets/SettingsView-CA-NYSMK.css +1 -0
- package/dist/ui/assets/SettingsView-O3iZSnjg.js +3 -0
- package/dist/ui/assets/WorkView-D8Tl6qwy.js +1 -0
- package/dist/ui/assets/WorkView-DMYL2s3W.css +1 -0
- package/dist/ui/assets/abnfDiagram-VCTEODGH-J5lkSnEE.js +1 -0
- package/dist/ui/assets/arc-BHZnmhhM.js +1 -0
- package/dist/ui/assets/architecture-7GRP2DOG-pLdFt-xS.js +1 -0
- package/dist/ui/assets/architectureDiagram-5GKGNRK7-C3k89uKX.js +36 -0
- package/dist/ui/assets/array-BifhSqXX.js +1 -0
- package/dist/ui/assets/blockDiagram-I7D4REHJ-AWNoBzop.js +129 -0
- package/dist/ui/assets/button-lbikqSph.js +1 -0
- package/dist/ui/assets/c4Diagram-7LVT6UL2-DKG1D5gd.js +38 -0
- package/dist/ui/assets/channel-gA4qBv3A.js +1 -0
- package/dist/ui/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/ui/assets/chunk-4HAMMTFA-D1YR8lF_.js +62 -0
- package/dist/ui/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/ui/assets/chunk-75Z2AOVW-5GuBxfsL.js +2 -0
- package/dist/ui/assets/chunk-DU6HZSFF-DfdNNqwa.js +127 -0
- package/dist/ui/assets/chunk-F27PBJKO-BPZzinQ4.js +1 -0
- package/dist/ui/assets/chunk-FOHPRMQF-l2z4K2jD.js +161 -0
- package/dist/ui/assets/chunk-GMAD6QVW-DGWvSKj5.js +72 -0
- package/dist/ui/assets/chunk-GVQU2GXP-D6Aw75wJ.js +1 -0
- package/dist/ui/assets/chunk-IMKFNOWR-B8mMBKCW.js +231 -0
- package/dist/ui/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/ui/assets/chunk-L3NEJ4N5-D5OJuXYE.js +1 -0
- package/dist/ui/assets/chunk-OSK3NFVY-B7r9w2UW.js +10 -0
- package/dist/ui/assets/chunk-P2QGCYS3-C74X4AQX.js +1 -0
- package/dist/ui/assets/chunk-POPQ4Y6H-C5_u1gUS.js +1 -0
- package/dist/ui/assets/chunk-PWAF6VOD-DfoTLtxn.js +1 -0
- package/dist/ui/assets/chunk-SHT3W25Y-D40m2eqz.js +168 -0
- package/dist/ui/assets/chunk-SVP7TREG-euxi0Kap.js +88 -0
- package/dist/ui/assets/chunk-TICWLB2K-fkdxngzN.js +206 -0
- package/dist/ui/assets/chunk-XXDRQBXY-DFBUG-OT.js +1 -0
- package/dist/ui/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/ui/assets/classDiagram-ZZMXUADV-BzW8bq2P.js +1 -0
- package/dist/ui/assets/classDiagram-v2-VYDZK3BY-BzW8bq2P.js +1 -0
- package/dist/ui/assets/cose-bilkent-JH36ORCC-BTcgMon1.js +1 -0
- package/dist/ui/assets/cynefin-OW5HDTMX-B5m_COsS.js +1 -0
- package/dist/ui/assets/cynefinDiagram-5FMLGOSQ-C-AG6CGe.js +62 -0
- package/dist/ui/assets/cytoscape.esm-FBntH-9t.js +321 -0
- package/dist/ui/assets/dagre-GXQ25YYZ-DDfDnp8L.js +4 -0
- package/dist/ui/assets/dagre-PrKaheQc.js +1 -0
- package/dist/ui/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/ui/assets/diagram-S7CK7UJ4-DjQZAlEY.js +30 -0
- package/dist/ui/assets/diagram-UQ7AKVKN-DAZ9yp1B.js +41 -0
- package/dist/ui/assets/diagram-VSXAHHWV-BWepUKJD.js +3 -0
- package/dist/ui/assets/diagram-VX7I27RA-EcV1J81b.js +24 -0
- package/dist/ui/assets/diagram-Z3DM3KII-Dbz7XU_K.js +24 -0
- package/dist/ui/assets/dist-DTg6UBE_.js +1 -0
- package/dist/ui/assets/ebnfDiagram-PWID7BFC-BUyQw8Mm.js +1 -0
- package/dist/ui/assets/erDiagram-RLTQ6QDP-WVf8ukKt.js +99 -0
- package/dist/ui/assets/eventmodeling-NTZA5JFV-DHqyLOAn.js +1 -0
- package/dist/ui/assets/flowDiagram-HODETNUW-CYk_ze5K.js +1 -0
- package/dist/ui/assets/ganttDiagram-EL5Y4UJY-rB4MZuB-.js +292 -0
- package/dist/ui/assets/gitGraph-4MIJSDKK-BOTWM8dY.js +1 -0
- package/dist/ui/assets/gitGraphDiagram-WWUBYQGX-eYscuhtP.js +106 -0
- package/dist/ui/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/ui/assets/index-BACBfnga.css +1 -0
- package/dist/ui/assets/index-BOQ-ust6.js +26 -0
- package/dist/ui/assets/info-A6RAGUB7-_67wOORe.js +1 -0
- package/dist/ui/assets/infoDiagram-27XIBGKW-XVXbddTA.js +2 -0
- package/dist/ui/assets/init-C-OQMol4.js +1 -0
- package/dist/ui/assets/ishikawaDiagram-5VMMS53U-ClLNiEru.js +70 -0
- package/dist/ui/assets/journeyDiagram-3NMN7TZE-NRawjR6i.js +139 -0
- package/dist/ui/assets/kanban-definition-UXKFOSKX-BgSzBfIx.js +89 -0
- package/dist/ui/assets/katex-DolUETbr.js +257 -0
- package/dist/ui/assets/line-KAyfuul4.js +1 -0
- package/dist/ui/assets/linear-cCCPOpu7.js +1 -0
- package/dist/ui/assets/mermaid-parser.core-CgXZk1iN.js +7 -0
- package/dist/ui/assets/mermaid.core-BUUkChHW.js +44 -0
- package/dist/ui/assets/mindmap-definition-YA3MSWOX-Cpn7vW4r.js +96 -0
- package/dist/ui/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/ui/assets/packet-AYTQ26CC-0lZwM-d6.js +1 -0
- package/dist/ui/assets/path-COt_16Va.js +1 -0
- package/dist/ui/assets/pegDiagram-XKGWAZYB-impy0inn.js +1 -0
- package/dist/ui/assets/pie-WAS4IAKB-CqfdGHYg.js +1 -0
- package/dist/ui/assets/pieDiagram-E7YTZNPT-CxjL4I1h.js +39 -0
- package/dist/ui/assets/quadrantDiagram-AXDQQJYC-Cjd1QMIe.js +7 -0
- package/dist/ui/assets/radar-RG4KPBEZ-CRkQIwiv.js +1 -0
- package/dist/ui/assets/railroad-74A4TZTK-i67XSWTB.js +1 -0
- package/dist/ui/assets/railroad-abnf-HS5TGJTU-Cv9m5aS3.js +1 -0
- package/dist/ui/assets/railroad-ebnf-LZEXJU2U-C5ZIn-Jh.js +1 -0
- package/dist/ui/assets/railroad-peg-WCYAUIDC-CGra9Oq-.js +1 -0
- package/dist/ui/assets/railroadDiagram-O6MQD6OU-_pK0qyaY.js +1 -0
- package/dist/ui/assets/releases-B0WNV-SY.js +1 -0
- package/dist/ui/assets/repoos-cto-square.webp +0 -0
- package/dist/ui/assets/repoos-helpful-pm-square.webp +0 -0
- package/dist/ui/assets/repoos-orchestrator-square.webp +0 -0
- package/dist/ui/assets/repoos-performance-agent-square.webp +0 -0
- package/dist/ui/assets/repoos-ross-from-friends-square.webp +0 -0
- package/dist/ui/assets/repoos-tech-debt-agent-square.webp +0 -0
- package/dist/ui/assets/requirementDiagram-BXWQKSXE-CRrFX-yw.js +84 -0
- package/dist/ui/assets/rough.esm-By172zw-.js +1 -0
- package/dist/ui/assets/sankeyDiagram-P5KCCOFB-X_xFRj9E.js +40 -0
- package/dist/ui/assets/sequenceDiagram-WJ2MYXX4-Byb49lKf.js +162 -0
- package/dist/ui/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dist/ui/assets/src-BH-TyZbA.js +1 -0
- package/dist/ui/assets/stateDiagram-D77RDMKH-CzaPrqYF.js +1 -0
- package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-BCXckz7K.js +1 -0
- package/dist/ui/assets/swimlanes-42K2YHIH-Cx_1lnqr.js +1 -0
- package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-54qsKi6A.js +8 -0
- package/dist/ui/assets/timeline-definition-24CTP7MA-B1IbZPQ-.js +120 -0
- package/dist/ui/assets/treeView-Q6P3EWNA-DFWhVE3d.js +1 -0
- package/dist/ui/assets/treemap-WGGIJYW6-BmbYPThn.js +1 -0
- package/dist/ui/assets/vendor-ui-DPm7zLxi.js +3 -0
- package/dist/ui/assets/vendor-vue-CobgyEJp.js +1 -0
- package/dist/ui/assets/vennDiagram-4TSXK5OY-Ae2AtRpt.js +34 -0
- package/dist/ui/assets/wardley-WFR3VGLG-BtD4X4tL.js +1 -0
- package/dist/ui/assets/wardleyDiagram-VM6X3IG4-B3YN2fTd.js +78 -0
- package/dist/ui/assets/xychartDiagram-S5SC5T6Z-CIzJfMKA.js +7 -0
- package/dist/ui/favicon.svg +11 -0
- package/dist/ui/index.html +49 -0
- package/dist/ui/sw.js +48 -0
- package/package.json +91 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal, dependency-free frontmatter handling.
|
|
3
|
+
*
|
|
4
|
+
* We deliberately avoid pulling in gray-matter + a YAML engine so the package
|
|
5
|
+
* has ZERO runtime dependencies and installs instantly via bunx/npx. We only
|
|
6
|
+
* support the subset of YAML that task frontmatter realistically uses:
|
|
7
|
+
* - key: scalar (string / number / bool / null)
|
|
8
|
+
* - key: [a, b, c] (inline list)
|
|
9
|
+
* - key: (block list with "- item" lines)
|
|
10
|
+
* - quoted strings (".." / '..')
|
|
11
|
+
*
|
|
12
|
+
* If a repo needs richer YAML, that frontmatter still round-trips: unknown
|
|
13
|
+
* shapes are preserved as raw strings rather than dropped.
|
|
14
|
+
*/
|
|
15
|
+
export const FM_DELIM = "---";
|
|
16
|
+
/**
|
|
17
|
+
* Check if a line is a frontmatter delimiter: either the literal `---` or a
|
|
18
|
+
* rendered horizontal rule (box-drawing characters, optionally prefixed with
|
|
19
|
+
* `> ` from markdown rendering).
|
|
20
|
+
*/
|
|
21
|
+
function isDelimiter(line) {
|
|
22
|
+
const trimmed = line.trim();
|
|
23
|
+
if (trimmed === FM_DELIM)
|
|
24
|
+
return true;
|
|
25
|
+
// A line of box-drawing characters (e.g., from kiro-cli's markdown rendering).
|
|
26
|
+
// Strip optional blockquote prefix (`> `) then check if the rest is a horizontal rule.
|
|
27
|
+
const withoutPrefix = trimmed.replace(/^>\s*/, "");
|
|
28
|
+
if (withoutPrefix.length < 3)
|
|
29
|
+
return false;
|
|
30
|
+
// A horizontal rule is a sequence of dashes/box-drawing chars with minimal variation.
|
|
31
|
+
// Strip one character class and count; if mostly the same, it's a rule.
|
|
32
|
+
// Matches lines like "━━━", "──", "═══" from markdown rendering.
|
|
33
|
+
const chars = new Set(withoutPrefix);
|
|
34
|
+
// If all or most characters are the same dash-like character, treat as delimiter.
|
|
35
|
+
return chars.size <= 2 && /^[─=━═─\-_]+$/.test(withoutPrefix);
|
|
36
|
+
}
|
|
37
|
+
function coerceScalar(raw) {
|
|
38
|
+
const v = raw.trim();
|
|
39
|
+
if (v === "" || v === "~" || v === "null")
|
|
40
|
+
return null;
|
|
41
|
+
if (v === "true")
|
|
42
|
+
return true;
|
|
43
|
+
if (v === "false")
|
|
44
|
+
return false;
|
|
45
|
+
// quoted string
|
|
46
|
+
if (v.startsWith('"') && v.endsWith('"')) {
|
|
47
|
+
return v.slice(1, -1).replace(/\\"/g, '"');
|
|
48
|
+
}
|
|
49
|
+
if (v.startsWith("'") && v.endsWith("'")) {
|
|
50
|
+
return v.slice(1, -1);
|
|
51
|
+
}
|
|
52
|
+
// number (but keep zero-padded ids like 0012 as strings)
|
|
53
|
+
if (/^-?\d+$/.test(v) && !/^0\d/.test(v))
|
|
54
|
+
return Number(v);
|
|
55
|
+
if (/^-?\d*\.\d+$/.test(v))
|
|
56
|
+
return Number(v);
|
|
57
|
+
return v;
|
|
58
|
+
}
|
|
59
|
+
function parseInlineList(raw) {
|
|
60
|
+
const inner = raw.trim().slice(1, -1).trim();
|
|
61
|
+
if (inner === "")
|
|
62
|
+
return [];
|
|
63
|
+
return inner.split(",").map((s) => coerceScalar(s));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Parse frontmatter key/value lines. In "closed" mode (between two `---`
|
|
67
|
+
* delimiters) lines that don't look like frontmatter are skipped, matching the
|
|
68
|
+
* historical behavior. In "unclosed" mode (frontmatter terminated by EOF) the
|
|
69
|
+
* first non-frontmatter line ends the block and starts the body.
|
|
70
|
+
*/
|
|
71
|
+
function scanFrontmatterLines(lines, mode) {
|
|
72
|
+
const data = {};
|
|
73
|
+
let i = 0;
|
|
74
|
+
let sawKey = false;
|
|
75
|
+
while (i < lines.length) {
|
|
76
|
+
const line = lines[i];
|
|
77
|
+
// YAML comments start with `#`; markdown headings (`## Section`) must not
|
|
78
|
+
// be treated as comments, or they would be dropped from the body.
|
|
79
|
+
const t = line.trim();
|
|
80
|
+
if (t === "" || /^#(?!#)/.test(t)) {
|
|
81
|
+
i++;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const m = line.match(/^([A-Za-z0-9_-]+):(.*)$/);
|
|
85
|
+
if (!m) {
|
|
86
|
+
if (mode === "unclosed")
|
|
87
|
+
break;
|
|
88
|
+
i++;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
sawKey = true;
|
|
92
|
+
const key = m[1];
|
|
93
|
+
const rest = m[2].trim();
|
|
94
|
+
if (rest === "") {
|
|
95
|
+
// possible block list
|
|
96
|
+
const items = [];
|
|
97
|
+
let j = i + 1;
|
|
98
|
+
while (j < lines.length && /^\s*-\s+/.test(lines[j])) {
|
|
99
|
+
items.push(coerceScalar(lines[j].replace(/^\s*-\s+/, "")));
|
|
100
|
+
j++;
|
|
101
|
+
}
|
|
102
|
+
if (items.length > 0) {
|
|
103
|
+
data[key] = items;
|
|
104
|
+
i = j;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
data[key] = null;
|
|
108
|
+
i++;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (rest.startsWith("[") && rest.endsWith("]")) {
|
|
112
|
+
data[key] = parseInlineList(rest);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
data[key] = coerceScalar(rest);
|
|
116
|
+
}
|
|
117
|
+
i++;
|
|
118
|
+
}
|
|
119
|
+
return { data, next: i, sawKey };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Detect and parse a stray frontmatter block at the top of the body — the
|
|
123
|
+
* shape a task file gets when its unclosed-frontmatter body was written
|
|
124
|
+
* verbatim into the new file. Returns null unless the body starts with a `---`
|
|
125
|
+
* line followed by at least one frontmatter key. When it returns a scan,
|
|
126
|
+
* `next` is the index within `bodyLines` where the real body starts.
|
|
127
|
+
*/
|
|
128
|
+
function scanEmbeddedFrontmatter(bodyLines) {
|
|
129
|
+
const first = bodyLines.findIndex((l) => l.trim() !== "");
|
|
130
|
+
if (first === -1 || !isDelimiter(bodyLines[first]))
|
|
131
|
+
return null;
|
|
132
|
+
const scan = scanFrontmatterLines(bodyLines.slice(first + 1), "unclosed");
|
|
133
|
+
if (!scan.sawKey)
|
|
134
|
+
return null;
|
|
135
|
+
return { data: scan.data, next: first + 1 + scan.next, sawKey: true };
|
|
136
|
+
}
|
|
137
|
+
/** Parse a document string into {data, body}. Never throws on malformed YAML. */
|
|
138
|
+
export function parseDocument(content) {
|
|
139
|
+
const normalized = content.replace(/\r\n/g, "\n");
|
|
140
|
+
const lines = normalized.split("\n");
|
|
141
|
+
if (lines.length === 0 || !isDelimiter(lines[0])) {
|
|
142
|
+
return { data: {}, body: normalized, hadFrontmatter: false };
|
|
143
|
+
}
|
|
144
|
+
// A properly-closed frontmatter block ends at the first line that is exactly
|
|
145
|
+
// the delimiter. We also absorb a stray unclosed frontmatter block that the
|
|
146
|
+
// body starts with (a past createTask corrupted shape), merging its fields
|
|
147
|
+
// over the closed block's so a re-serialize comes out clean.
|
|
148
|
+
const closeIndex = lines.findIndex((l, i) => i > 0 && isDelimiter(l));
|
|
149
|
+
if (closeIndex !== -1) {
|
|
150
|
+
const closed = scanFrontmatterLines(lines.slice(1, closeIndex), "closed");
|
|
151
|
+
const bodyLines = lines.slice(closeIndex + 1);
|
|
152
|
+
const embedded = scanEmbeddedFrontmatter(bodyLines);
|
|
153
|
+
if (embedded) {
|
|
154
|
+
return {
|
|
155
|
+
data: { ...closed.data, ...embedded.data },
|
|
156
|
+
body: bodyLines.slice(embedded.next).join("\n"),
|
|
157
|
+
hadFrontmatter: true,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { data: closed.data, body: bodyLines.join("\n"), hadFrontmatter: true };
|
|
161
|
+
}
|
|
162
|
+
// No closing delimiter: treat the frontmatter as terminated by EOF (YAML
|
|
163
|
+
// documents may end without a trailing separator). Parse the leading
|
|
164
|
+
// frontmatter-shaped lines; the first non-frontmatter line starts the body.
|
|
165
|
+
const unclosed = scanFrontmatterLines(lines.slice(1), "unclosed");
|
|
166
|
+
if (!unclosed.sawKey) {
|
|
167
|
+
// Nothing frontmatter-shaped after the opening delimiter — the `---` is a
|
|
168
|
+
// stray horizontal rule, not a frontmatter block.
|
|
169
|
+
return { data: {}, body: normalized, hadFrontmatter: false };
|
|
170
|
+
}
|
|
171
|
+
const body = lines.slice(1 + unclosed.next).join("\n");
|
|
172
|
+
return { data: unclosed.data, body, hadFrontmatter: true };
|
|
173
|
+
}
|
|
174
|
+
function serializeScalar(v) {
|
|
175
|
+
if (v === null || v === undefined)
|
|
176
|
+
return "";
|
|
177
|
+
if (typeof v === "boolean" || typeof v === "number")
|
|
178
|
+
return String(v);
|
|
179
|
+
const s = String(v);
|
|
180
|
+
// quote if it could be misread (leading zero ids, special chars, etc.)
|
|
181
|
+
if (/^0\d/.test(s) || /[:#\[\]{}",]/.test(s) || s.trim() !== s || s === "") {
|
|
182
|
+
return `"${s.replace(/"/g, '\\"')}"`;
|
|
183
|
+
}
|
|
184
|
+
return s;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Serialize {data, body} back to a document, preserving a stable key order so
|
|
188
|
+
* git diffs stay small. Known keys come first in a sensible order; unknown
|
|
189
|
+
* keys follow in insertion order.
|
|
190
|
+
*/
|
|
191
|
+
export function serializeDocument(data, body, keyOrder = []) {
|
|
192
|
+
const seen = new Set();
|
|
193
|
+
const lines = [FM_DELIM];
|
|
194
|
+
const emit = (key) => {
|
|
195
|
+
if (seen.has(key) || !(key in data))
|
|
196
|
+
return;
|
|
197
|
+
seen.add(key);
|
|
198
|
+
const v = data[key];
|
|
199
|
+
if (Array.isArray(v)) {
|
|
200
|
+
const inline = v.map((x) => serializeScalar(x)).join(", ");
|
|
201
|
+
lines.push(`${key}: [${inline}]`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
lines.push(`${key}: ${serializeScalar(v)}`);
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
for (const k of keyOrder)
|
|
208
|
+
emit(k);
|
|
209
|
+
for (const k of Object.keys(data))
|
|
210
|
+
emit(k);
|
|
211
|
+
lines.push(FM_DELIM, "");
|
|
212
|
+
// ensure exactly one blank line between frontmatter and body
|
|
213
|
+
const trimmedBody = body.replace(/^\n+/, "");
|
|
214
|
+
return lines.join("\n") + trimmedBody;
|
|
215
|
+
}
|