codeden 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +282 -2
- package/dist/THIRD-PARTY-NOTICES.txt +917 -0
- package/dist/cli.js +56131 -0
- package/dist/cli.js.map +1 -0
- package/dist/drizzle/20261107084614_init/migration.sql +210 -0
- package/dist/drizzle/20261107084614_init/snapshot.json +1909 -0
- package/dist/drizzle/20261107092447_married_fat_cobra/migration.sql +3 -0
- package/dist/drizzle/20261107092447_married_fat_cobra/snapshot.json +1939 -0
- package/dist/drizzle/20261107102436_past_giant_girl/migration.sql +32 -0
- package/dist/drizzle/20261107102436_past_giant_girl/snapshot.json +2223 -0
- package/dist/drizzle/20261107120124_github_sync/migration.sql +26 -0
- package/dist/drizzle/20261107120124_github_sync/snapshot.json +2478 -0
- package/dist/drizzle/20261107120408_orchestration/migration.sql +21 -0
- package/dist/drizzle/20261107120408_orchestration/snapshot.json +2674 -0
- package/dist/drizzle/20261107120509_usage_ledger/migration.sql +34 -0
- package/dist/drizzle/20261107120509_usage_ledger/snapshot.json +2974 -0
- package/dist/drizzle/20261107130416_factory_loop/migration.sql +28 -0
- package/dist/drizzle/20261107130416_factory_loop/snapshot.json +3227 -0
- package/dist/drizzle/20261107130421_automations/migration.sql +20 -0
- package/dist/drizzle/20261107130421_automations/snapshot.json +3384 -0
- package/dist/drizzle/20261107141147_github_review_requests/migration.sql +1 -0
- package/dist/drizzle/20261107141147_github_review_requests/snapshot.json +3394 -0
- package/dist/drizzle/20261107141759_automation_run_issue/migration.sql +1 -0
- package/dist/drizzle/20261107141759_automation_run_issue/snapshot.json +3404 -0
- package/dist/rolldown-runtime-DegdyBIC.js +25 -0
- package/dist/runner-CoJjefjZ.js +27137 -0
- package/dist/runner-CoJjefjZ.js.map +1 -0
- package/dist/runner.js +59 -0
- package/dist/runner.js.map +1 -0
- package/dist/templates/automations/dependency-updates.md +37 -0
- package/dist/templates/automations/issue-triage.md +20 -0
- package/dist/templates/automations/refactor-sweep.md +35 -0
- package/dist/templates/automations/security-audit.md +42 -0
- package/dist/templates/automations/stale-pr-follow-up.md +39 -0
- package/dist/templates/automations/test-coverage.md +36 -0
- package/dist/templates/automations/ui-review.md +41 -0
- package/dist/web/assets/abap-CLvhMVsD.js +1 -0
- package/dist/web/assets/actionscript-3-Cs6JJXT5.js +1 -0
- package/dist/web/assets/ada-X3Y2mlq2.js +1 -0
- package/dist/web/assets/ahk-DwADkxyd.js +1 -0
- package/dist/web/assets/ahk2-_6rzW9BS.js +1 -0
- package/dist/web/assets/andromeeda-DW8vo71h.js +1 -0
- package/dist/web/assets/andromeeda-vGVdxbeo.js +1 -0
- package/dist/web/assets/angular-html-DbefOYVd.js +1 -0
- package/dist/web/assets/angular-ts-CvKvjrwq.js +1 -0
- package/dist/web/assets/apache-U0d_L8uA.js +1 -0
- package/dist/web/assets/apex-KFGFyKwG.js +1 -0
- package/dist/web/assets/apl-B2CApK1w.js +1 -0
- package/dist/web/assets/applescript-CCn79oCD.js +1 -0
- package/dist/web/assets/ara-4CJ0cIlV.js +1 -0
- package/dist/web/assets/asciidoc-SCjQUq34.js +1 -0
- package/dist/web/assets/asm-Cmm7eHzH.js +1 -0
- package/dist/web/assets/astro-BngVf-Vk.js +1 -0
- package/dist/web/assets/aurora-x-CDeNXAV0.js +1 -0
- package/dist/web/assets/aurora-x-rMvKqtYI.js +1 -0
- package/dist/web/assets/awk-BWXHIvNe.js +1 -0
- package/dist/web/assets/ayu-dark-CwczpL8O.js +1 -0
- package/dist/web/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/dist/web/assets/ayu-light-C3h-C4tm.js +1 -0
- package/dist/web/assets/ayu-light-DSh22xiD.js +1 -0
- package/dist/web/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/dist/web/assets/ayu-mirage-JE6hAyHG.js +1 -0
- package/dist/web/assets/ballerina-B7ZEbQpA.js +1 -0
- package/dist/web/assets/bat-qdxAdBWQ.js +1 -0
- package/dist/web/assets/beancount-C2IN4Vk8.js +1 -0
- package/dist/web/assets/berry-DKpUyyne.js +1 -0
- package/dist/web/assets/bibtex-Ci_nEsc7.js +1 -0
- package/dist/web/assets/bicep-CUHmPFLl.js +1 -0
- package/dist/web/assets/bird2-CYIUgYqB.js +1 -0
- package/dist/web/assets/blade-CJoxmvIk.js +1 -0
- package/dist/web/assets/bsl-_VjlB9mv.js +1 -0
- package/dist/web/assets/c-NZxYjD9R.js +1 -0
- package/dist/web/assets/c3-D0apG41V.js +1 -0
- package/dist/web/assets/cadence-CQ2zXKGN.js +1 -0
- package/dist/web/assets/cairo-DLTphjLi.js +1 -0
- package/dist/web/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
- package/dist/web/assets/catppuccin-frappe-pyXErRRU.js +1 -0
- package/dist/web/assets/catppuccin-latte-BILSUICr.js +1 -0
- package/dist/web/assets/catppuccin-latte-CtsyrtPq.js +1 -0
- package/dist/web/assets/catppuccin-macchiato-Ck60ZZQE.js +1 -0
- package/dist/web/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
- package/dist/web/assets/catppuccin-mocha-C_2G67cS.js +1 -0
- package/dist/web/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
- package/dist/web/assets/chapel-C_yIxKK6.js +1 -0
- package/dist/web/assets/clarity-CtfBBspg.js +1 -0
- package/dist/web/assets/clojure-DqKBuwfJ.js +1 -0
- package/dist/web/assets/cmake-Bj61d0ZC.js +1 -0
- package/dist/web/assets/cobol-DJ9emjzS.js +1 -0
- package/dist/web/assets/codeowners-C8r90Shi.js +1 -0
- package/dist/web/assets/codeql-oeQT6MSM.js +1 -0
- package/dist/web/assets/coffee-DCXaW2x4.js +1 -0
- package/dist/web/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/dist/web/assets/coq-CGaSfhwR.js +1 -0
- package/dist/web/assets/core-DpRfWkWN.js +1 -0
- package/dist/web/assets/cpp-Y8tBED_W.js +1 -0
- package/dist/web/assets/crystal-HDtM80sC.js +1 -0
- package/dist/web/assets/csharp-dmMxLVLW.js +1 -0
- package/dist/web/assets/css-28T6ABEL.js +1 -0
- package/dist/web/assets/csv-Dx-8-gkx.js +1 -0
- package/dist/web/assets/cue-CE9AQfxI.js +1 -0
- package/dist/web/assets/cypher-ClKdZ_lG.js +1 -0
- package/dist/web/assets/d-qD-0Kul2.js +1 -0
- package/dist/web/assets/dark-plus-CHgc6GYj.js +1 -0
- package/dist/web/assets/dark-plus-Cs2F2srj.js +1 -0
- package/dist/web/assets/dart-CHZY9Xhz.js +1 -0
- package/dist/web/assets/dax-BkyTk9wS.js +1 -0
- package/dist/web/assets/desktop-Dlh5hvp9.js +1 -0
- package/dist/web/assets/diff-woXpYk--.js +1 -0
- package/dist/web/assets/docker-IyjqRm3v.js +1 -0
- package/dist/web/assets/dotenv-CuH5my32.js +1 -0
- package/dist/web/assets/dracula-BHWKrbxM.js +1 -0
- package/dist/web/assets/dracula-Cf1PG3MT.js +1 -0
- package/dist/web/assets/dracula-soft-5eyTD99u.js +1 -0
- package/dist/web/assets/dracula-soft-DXuNm1Kq.js +1 -0
- package/dist/web/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/dist/web/assets/edge-D4Nvwgsf.js +1 -0
- package/dist/web/assets/elixir-BQwyj_cP.js +1 -0
- package/dist/web/assets/elm-x2IF6yQx.js +1 -0
- package/dist/web/assets/emacs-lisp-DR2vtWaj.js +1 -0
- package/dist/web/assets/engine-oniguruma-C_TN-UZT.js +1 -0
- package/dist/web/assets/erb-CyjZ4knI.js +1 -0
- package/dist/web/assets/erlang-Cphh6RMH.js +1 -0
- package/dist/web/assets/everforest-dark-CjdfwUBe.js +1 -0
- package/dist/web/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/dist/web/assets/everforest-light-CfVwwCBP.js +1 -0
- package/dist/web/assets/everforest-light-Df2xbC6M.js +1 -0
- package/dist/web/assets/fennel-DQxkIbk2.js +1 -0
- package/dist/web/assets/fish-BJitypiv.js +1 -0
- package/dist/web/assets/fluent-C03EYrpw.js +1 -0
- package/dist/web/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/dist/web/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/dist/web/assets/fsharp-D13ZGOAj.js +1 -0
- package/dist/web/assets/gdresource-xMC7jr7x.js +1 -0
- package/dist/web/assets/gdscript-DYvRD3hg.js +1 -0
- package/dist/web/assets/gdshader-CBce3t8t.js +1 -0
- package/dist/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- package/dist/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- package/dist/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- package/dist/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- package/dist/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- package/dist/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/web/assets/genie-CV2tkWYe.js +1 -0
- package/dist/web/assets/gherkin-DExj1W_8.js +1 -0
- package/dist/web/assets/git-commit-BSykSTBG.js +1 -0
- package/dist/web/assets/git-rebase-WKrMcflD.js +1 -0
- package/dist/web/assets/github-dark-BL6HSl_n.js +1 -0
- package/dist/web/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/web/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/dist/web/assets/github-dark-default-zacuWV-M.js +1 -0
- package/dist/web/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/dist/web/assets/github-dark-dimmed-Mc0P9idi.js +1 -0
- package/dist/web/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/dist/web/assets/github-dark-high-contrast-IMKX2AVF.js +1 -0
- package/dist/web/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/web/assets/github-light-default-BXViO-2h.js +1 -0
- package/dist/web/assets/github-light-default-DVlCqP3X.js +1 -0
- package/dist/web/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/dist/web/assets/github-light-high-contrast-Dj6zTyWR.js +1 -0
- package/dist/web/assets/github-light-mYhEBkPo.js +1 -0
- package/dist/web/assets/gleam-CSRkHgEL.js +1 -0
- package/dist/web/assets/glimmer-js-D6M3MOmY.js +1 -0
- package/dist/web/assets/glimmer-ts-DfokzFjG.js +1 -0
- package/dist/web/assets/glsl-DBf8kQxW.js +1 -0
- package/dist/web/assets/gn-CAXYAgV-.js +1 -0
- package/dist/web/assets/gnuplot-7GGW24-e.js +1 -0
- package/dist/web/assets/go-rLFTqkRN.js +1 -0
- package/dist/web/assets/graphql-DTnqPoeZ.js +1 -0
- package/dist/web/assets/groovy-CacY0gHj.js +1 -0
- package/dist/web/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/dist/web/assets/gruvbox-dark-hard-QTgQQZn-.js +1 -0
- package/dist/web/assets/gruvbox-dark-medium-9d5YdCTx.js +1 -0
- package/dist/web/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/dist/web/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/dist/web/assets/gruvbox-dark-soft-XCkqeBhR.js +1 -0
- package/dist/web/assets/gruvbox-light-hard--5-nXqNp.js +1 -0
- package/dist/web/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/dist/web/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/dist/web/assets/gruvbox-light-medium-COA1PZW2.js +1 -0
- package/dist/web/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/dist/web/assets/gruvbox-light-soft-CIJpzjAO.js +1 -0
- package/dist/web/assets/hack-gtYgwEcA.js +1 -0
- package/dist/web/assets/haml-MvCfcv0X.js +1 -0
- package/dist/web/assets/handlebars-DZi9CvTQ.js +1 -0
- package/dist/web/assets/haskell-D8IpX4py.js +1 -0
- package/dist/web/assets/haxe-C8oCnwJJ.js +1 -0
- package/dist/web/assets/hcl-Dh228itO.js +1 -0
- package/dist/web/assets/highlighted-body-JLMTFACH-H03v731F.js +1 -0
- package/dist/web/assets/highlights-Dz1cMTeO.js +7 -0
- package/dist/web/assets/hjson-CxZEssPk.js +1 -0
- package/dist/web/assets/hlsl-Cvrh5tZx.js +1 -0
- package/dist/web/assets/horizon-Ba2cwkSy.js +1 -0
- package/dist/web/assets/horizon-CE9ld1lL.js +1 -0
- package/dist/web/assets/horizon-bright-DSNQnXHK.js +1 -0
- package/dist/web/assets/horizon-bright-DaEDgBmR.js +1 -0
- package/dist/web/assets/houston-B6x0XVpU.js +1 -0
- package/dist/web/assets/houston-CsvMBhTu.js +1 -0
- package/dist/web/assets/html-derivative-zG1x8fML.js +1 -0
- package/dist/web/assets/html-xg5kwvwR.js +1 -0
- package/dist/web/assets/http-ynmm9XFY.js +1 -0
- package/dist/web/assets/hurl-jiJ4Cyz5.js +1 -0
- package/dist/web/assets/hxml-Dcm88srW.js +1 -0
- package/dist/web/assets/hy-CZbG8q4J.js +1 -0
- package/dist/web/assets/imba-DsUTQ-LC.js +1 -0
- package/dist/web/assets/index-BG4dO7iI.js +885 -0
- package/dist/web/assets/index-BpVrEjZE.css +1 -0
- package/dist/web/assets/ini-B5eOa1yu.js +1 -0
- package/dist/web/assets/java-DmZF03nx.js +1 -0
- package/dist/web/assets/javascript-DF6j-435.js +1 -0
- package/dist/web/assets/jinja-B2nuVHF1.js +1 -0
- package/dist/web/assets/jison-CZsiyrSO.js +1 -0
- package/dist/web/assets/json-42mipy3Q.js +1 -0
- package/dist/web/assets/json5-BR5RXkoi.js +1 -0
- package/dist/web/assets/jsonc-CYpm1nAK.js +1 -0
- package/dist/web/assets/jsonl-CmCQp5Yx.js +1 -0
- package/dist/web/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/dist/web/assets/jssm-DXw9l8Rf.js +1 -0
- package/dist/web/assets/jsx-vimVRUsC.js +1 -0
- package/dist/web/assets/julia-BqNVScfB.js +1 -0
- package/dist/web/assets/just-D4SaWSq3.js +1 -0
- package/dist/web/assets/kanagawa-dragon-Bozd7klA.js +1 -0
- package/dist/web/assets/kanagawa-dragon-DhTFvBMT.js +1 -0
- package/dist/web/assets/kanagawa-lotus--m8sdOxn.js +1 -0
- package/dist/web/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
- package/dist/web/assets/kanagawa-wave-BML5mF2J.js +1 -0
- package/dist/web/assets/kanagawa-wave-D-tTv4k2.js +1 -0
- package/dist/web/assets/kdl-CsD5j6eV.js +1 -0
- package/dist/web/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/web/assets/kusto-C7mF5XQf.js +1 -0
- package/dist/web/assets/langs-D6g8tc-L.js +1 -0
- package/dist/web/assets/laserwave-C_8bwKvT.js +1 -0
- package/dist/web/assets/laserwave-HSLx0L75.js +1 -0
- package/dist/web/assets/latex-CdMZza0I.js +1 -0
- package/dist/web/assets/lean-CewbzKMR.js +1 -0
- package/dist/web/assets/less-DVTAwKKz.js +1 -0
- package/dist/web/assets/lib-DMtK1EFU.js +1 -0
- package/dist/web/assets/lib-m_q9jTTN.js +1 -0
- package/dist/web/assets/light-plus-CUjWrTSi.js +1 -0
- package/dist/web/assets/light-plus-DVQuIRkW.js +1 -0
- package/dist/web/assets/liquid-DZ2yKB_9.js +1 -0
- package/dist/web/assets/llvm-DqHOMS-s.js +1 -0
- package/dist/web/assets/loader-D_TGH-01.js +1 -0
- package/dist/web/assets/log-BNLmms1o.js +1 -0
- package/dist/web/assets/logo-Cluzi2Zq.js +1 -0
- package/dist/web/assets/lua-CxMwO_Mz.js +1 -0
- package/dist/web/assets/luau-VGWVLoqX.js +1 -0
- package/dist/web/assets/make-Dixweg8N.js +1 -0
- package/dist/web/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/web/assets/marko-r9UJPNdX.js +1 -0
- package/dist/web/assets/material-theme-Bm3Qr25_.js +1 -0
- package/dist/web/assets/material-theme-CnthUGfg.js +1 -0
- package/dist/web/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/dist/web/assets/material-theme-darker-DUi03Qre.js +1 -0
- package/dist/web/assets/material-theme-lighter-D2-qr5Vw.js +1 -0
- package/dist/web/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/dist/web/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/dist/web/assets/material-theme-ocean-CWR-LogA.js +1 -0
- package/dist/web/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/dist/web/assets/material-theme-palenight-Cnv8m1ra.js +1 -0
- package/dist/web/assets/matlab-D7qyCx1q.js +1 -0
- package/dist/web/assets/mdc-Bc7j-rRZ.js +1 -0
- package/dist/web/assets/mdx-DQZ5AkYe.js +1 -0
- package/dist/web/assets/mermaid-BxpfTIzt.js +1 -0
- package/dist/web/assets/mermaid-WFAXDIZX-DbjU3Ezf.js +1 -0
- package/dist/web/assets/min-dark-BSWPekZh.js +1 -0
- package/dist/web/assets/min-dark-EXoM-6Xo.js +1 -0
- package/dist/web/assets/min-light-DDpmG2fV.js +1 -0
- package/dist/web/assets/min-light-DVOTDhnA.js +1 -0
- package/dist/web/assets/mipsasm-BMqwQI7S.js +1 -0
- package/dist/web/assets/mojo-fg40_ntQ.js +1 -0
- package/dist/web/assets/monokai-BscAjiQZ.js +1 -0
- package/dist/web/assets/monokai-DkggTbGy.js +1 -0
- package/dist/web/assets/moonbit-D9W784E_.js +1 -0
- package/dist/web/assets/move-BYnGhZoM.js +1 -0
- package/dist/web/assets/narrat-_X_XdTYD.js +1 -0
- package/dist/web/assets/nextflow-CSgcYZcx.js +1 -0
- package/dist/web/assets/nextflow-groovy-D7IRt6Pp.js +1 -0
- package/dist/web/assets/nginx-BiHSRcGz.js +1 -0
- package/dist/web/assets/night-owl-Bdcs0PMi.js +1 -0
- package/dist/web/assets/night-owl-DhmEMT88.js +1 -0
- package/dist/web/assets/night-owl-light-RoU30LE0.js +1 -0
- package/dist/web/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/dist/web/assets/nim-Bzsd8mjy.js +1 -0
- package/dist/web/assets/nix-IvuFDN5E.js +1 -0
- package/dist/web/assets/nord-Cb4Vim4T.js +1 -0
- package/dist/web/assets/nord-u7hMircQ.js +1 -0
- package/dist/web/assets/nsis-CjNLYCLg.js +1 -0
- package/dist/web/assets/nushell--0fT3PI1.js +1 -0
- package/dist/web/assets/objective-c-D1A_Heim.js +1 -0
- package/dist/web/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/dist/web/assets/ocaml-O90oeIOV.js +1 -0
- package/dist/web/assets/odin-B1RWQWA5.js +1 -0
- package/dist/web/assets/one-dark-pro-08PdtLzi.js +1 -0
- package/dist/web/assets/one-dark-pro-C6YyR8OD.js +1 -0
- package/dist/web/assets/one-light-D7Lr4KcI.js +1 -0
- package/dist/web/assets/one-light-DgvUEtgI.js +1 -0
- package/dist/web/assets/openscad-BUDT5pXO.js +1 -0
- package/dist/web/assets/org-D0z5J7r3.js +1 -0
- package/dist/web/assets/pascal-4ZHwLPI5.js +1 -0
- package/dist/web/assets/perl-DSZpjAyA.js +1 -0
- package/dist/web/assets/php-BJRzLxXW.js +1 -0
- package/dist/web/assets/pierre-dark-B2jZWvHG.js +1 -0
- package/dist/web/assets/pierre-dark-CpLgRqie.js +1 -0
- package/dist/web/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
- package/dist/web/assets/pierre-dark-protanopia-deuteranopia-CebgQdRf.js +1 -0
- package/dist/web/assets/pierre-dark-soft-DdE7dyP3.js +1 -0
- package/dist/web/assets/pierre-dark-soft-kZQmAZld.js +1 -0
- package/dist/web/assets/pierre-dark-tritanopia-CXimiT7X.js +1 -0
- package/dist/web/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
- package/dist/web/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
- package/dist/web/assets/pierre-dark-vibrant-DzBsxHvQ.js +1 -0
- package/dist/web/assets/pierre-light-CoaEpmwp.js +1 -0
- package/dist/web/assets/pierre-light-Vf__O3ev.js +1 -0
- package/dist/web/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
- package/dist/web/assets/pierre-light-protanopia-deuteranopia-BUtWcCQC.js +1 -0
- package/dist/web/assets/pierre-light-soft-C3QCXKvN.js +1 -0
- package/dist/web/assets/pierre-light-soft-lWLdNTOI.js +1 -0
- package/dist/web/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
- package/dist/web/assets/pierre-light-tritanopia-CKLy6XvA.js +1 -0
- package/dist/web/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
- package/dist/web/assets/pierre-light-vibrant-DDuTEIhH.js +1 -0
- package/dist/web/assets/pkl-ot-7Btpt.js +1 -0
- package/dist/web/assets/plastic-B8mE6BxX.js +1 -0
- package/dist/web/assets/plastic-DQwYfKfQ.js +1 -0
- package/dist/web/assets/plsql-DGHpHOYJ.js +1 -0
- package/dist/web/assets/po-BiJDBrnU.js +1 -0
- package/dist/web/assets/poimandres-DRFjx7u4.js +1 -0
- package/dist/web/assets/poimandres-DUFjrgxT.js +1 -0
- package/dist/web/assets/polar-C7UOKdEL.js +1 -0
- package/dist/web/assets/postcss-BXeXVLqQ.js +1 -0
- package/dist/web/assets/powerquery-DNMTfnFr.js +1 -0
- package/dist/web/assets/powershell-QtSnmXcu.js +1 -0
- package/dist/web/assets/preload-helper-7y9sWmk5.js +1 -0
- package/dist/web/assets/prisma-DMgNhnYS.js +1 -0
- package/dist/web/assets/prolog-iXnhIJG7.js +1 -0
- package/dist/web/assets/proto-DB4EqR-F.js +1 -0
- package/dist/web/assets/pug-CueMe1Oe.js +1 -0
- package/dist/web/assets/puppet-CDv2pdJW.js +1 -0
- package/dist/web/assets/purescript-9MfHhQsQ.js +1 -0
- package/dist/web/assets/python-gzcpVVnB.js +1 -0
- package/dist/web/assets/qml-BQ_VstfA.js +1 -0
- package/dist/web/assets/qmldir-DCQb3MpD.js +1 -0
- package/dist/web/assets/qss-Fe1Jh2GI.js +1 -0
- package/dist/web/assets/r-C0eHyz6n.js +1 -0
- package/dist/web/assets/racket-DcIDlBhZ.js +1 -0
- package/dist/web/assets/raku-B3gFvitq.js +1 -0
- package/dist/web/assets/razor-DKbaSFqp.js +1 -0
- package/dist/web/assets/rbs-C0MpOrj4.js +1 -0
- package/dist/web/assets/red-BJvdDEUx.js +1 -0
- package/dist/web/assets/red-CYlAq2b0.js +1 -0
- package/dist/web/assets/reg-CRGYupPL.js +1 -0
- package/dist/web/assets/regexp-CCN76yWg.js +1 -0
- package/dist/web/assets/rel-BtDbiS_P.js +1 -0
- package/dist/web/assets/riscv-Ckw8ddFX.js +1 -0
- package/dist/web/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/dist/web/assets/ron-VUp2lXgN.js +1 -0
- package/dist/web/assets/rose-pine-BSqRqUae.js +1 -0
- package/dist/web/assets/rose-pine-aMsaMD1D.js +1 -0
- package/dist/web/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
- package/dist/web/assets/rose-pine-dawn-U6TBE82u.js +1 -0
- package/dist/web/assets/rose-pine-moon-CAU7u1h4.js +1 -0
- package/dist/web/assets/rose-pine-moon-DO-qXg-I.js +1 -0
- package/dist/web/assets/rosmsg-CAekHB0j.js +1 -0
- package/dist/web/assets/rst-CFIvEOFm.js +1 -0
- package/dist/web/assets/ruby-SpTrDNEO.js +1 -0
- package/dist/web/assets/rust-DpiIf5JO.js +1 -0
- package/dist/web/assets/sas-DC4F9y1U.js +1 -0
- package/dist/web/assets/sass-DXrisJhu.js +1 -0
- package/dist/web/assets/scala-BiFt_7mu.js +1 -0
- package/dist/web/assets/scheme-DQCgrYNe.js +1 -0
- package/dist/web/assets/scss-CNJYx4G4.js +1 -0
- package/dist/web/assets/sdbl-bTVj8UrX.js +1 -0
- package/dist/web/assets/shaderlab-TOUzSsQk.js +1 -0
- package/dist/web/assets/shellscript-DG0er0mb.js +1 -0
- package/dist/web/assets/shellsession-DZdJuHd_.js +1 -0
- package/dist/web/assets/shiki-NQ4ryC1Y.js +2 -0
- package/dist/web/assets/slack-dark-CMu0smFa.js +1 -0
- package/dist/web/assets/slack-dark-DnToyrRv.js +1 -0
- package/dist/web/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/dist/web/assets/slack-ochin-BBne7cjw.js +1 -0
- package/dist/web/assets/smalltalk-BHpQb5nM.js +1 -0
- package/dist/web/assets/smithy-Dgaz7aur.js +1 -0
- package/dist/web/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/dist/web/assets/snazzy-light-CV8HUEmk.js +1 -0
- package/dist/web/assets/solarized-dark-CmYmhSgI.js +1 -0
- package/dist/web/assets/solarized-dark-b97czJOk.js +1 -0
- package/dist/web/assets/solarized-light-CjLLwxRp.js +1 -0
- package/dist/web/assets/solarized-light-DFPxpIYQ.js +1 -0
- package/dist/web/assets/solidity-Bj7E1mRn.js +1 -0
- package/dist/web/assets/soy-DBgMV_3R.js +1 -0
- package/dist/web/assets/sparql-D_iOobhT.js +1 -0
- package/dist/web/assets/splunk-BC2Px7Mm.js +1 -0
- package/dist/web/assets/sql-BJYzzGx2.js +1 -0
- package/dist/web/assets/ssh-config-BgfXC-Er.js +1 -0
- package/dist/web/assets/stata-CANxZdMU.js +1 -0
- package/dist/web/assets/stream-tokenizer-BxwNb7lW.js +4 -0
- package/dist/web/assets/stylus-B6D30XZt.js +1 -0
- package/dist/web/assets/surrealql-h0PQCFLw.js +1 -0
- package/dist/web/assets/svelte-BjJxriRn.js +1 -0
- package/dist/web/assets/swift-CyEgAFGc.js +1 -0
- package/dist/web/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/dist/web/assets/synthwave-84-wQeDKbzQ.js +1 -0
- package/dist/web/assets/system-verilog-Dh5ihWbf.js +1 -0
- package/dist/web/assets/systemd-BxMlprV5.js +1 -0
- package/dist/web/assets/talonscript-CohzipZa.js +1 -0
- package/dist/web/assets/tasl-DMoTqEGO.js +1 -0
- package/dist/web/assets/tcl-CZd0xW_V.js +1 -0
- package/dist/web/assets/templ-B8KaQl_2.js +1 -0
- package/dist/web/assets/terraform-DswuEJGm.js +1 -0
- package/dist/web/assets/tex-Bmmg45Le.js +1 -0
- package/dist/web/assets/themes-CNX2CYCy.js +2 -0
- package/dist/web/assets/tokyo-night-D4ZgDiA7.js +1 -0
- package/dist/web/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/dist/web/assets/toml-CcmNWLt0.js +1 -0
- package/dist/web/assets/ts-tags-BJYJ_DXd.js +1 -0
- package/dist/web/assets/tsv-sltzmVWM.js +1 -0
- package/dist/web/assets/tsx-r6-X8vM1.js +1 -0
- package/dist/web/assets/turtle-ByJddavk.js +1 -0
- package/dist/web/assets/twig-Bf7V1wC8.js +1 -0
- package/dist/web/assets/typescript-Dvuj33DD.js +1 -0
- package/dist/web/assets/typespec-BGhR2SqG.js +1 -0
- package/dist/web/assets/typst-DxctUuHF.js +1 -0
- package/dist/web/assets/v-DBj4K9d_.js +1 -0
- package/dist/web/assets/vala-zf12oZj6.js +1 -0
- package/dist/web/assets/vb-DOwzaHZ0.js +1 -0
- package/dist/web/assets/verilog-B2gwz-sJ.js +1 -0
- package/dist/web/assets/vesper-DdrHHSXu.js +1 -0
- package/dist/web/assets/vesper-sUHevyKv.js +1 -0
- package/dist/web/assets/vhdl-BroJfC0k.js +1 -0
- package/dist/web/assets/viml-DvXPmvsu.js +1 -0
- package/dist/web/assets/vitesse-black-CfklMpOb.js +1 -0
- package/dist/web/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/dist/web/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/dist/web/assets/vitesse-dark-CJkzwmKT.js +1 -0
- package/dist/web/assets/vitesse-light-BxMp8E1Y.js +1 -0
- package/dist/web/assets/vitesse-light-VbXTXTou.js +1 -0
- package/dist/web/assets/vue-BeSZAYMy.js +1 -0
- package/dist/web/assets/vue-html-BBM4UO8W.js +1 -0
- package/dist/web/assets/vue-vine-D-Me5wQp.js +1 -0
- package/dist/web/assets/vyper-CgoNMtux.js +1 -0
- package/dist/web/assets/wasm-4KdTHw0F.js +1 -0
- package/dist/web/assets/wasm-ByWQv1Qj.js +1 -0
- package/dist/web/assets/wenyan-C8pVoKbM.js +1 -0
- package/dist/web/assets/wgsl-BsKzXJz4.js +1 -0
- package/dist/web/assets/wikitext-ClFFjSW2.js +1 -0
- package/dist/web/assets/wit-DdvCle-K.js +1 -0
- package/dist/web/assets/wolfram-DLL8P-h_.js +1 -0
- package/dist/web/assets/xml-CJx_hAt3.js +1 -0
- package/dist/web/assets/xsl-Bd7alYZi.js +1 -0
- package/dist/web/assets/yaml-BY1dOrT3.js +1 -0
- package/dist/web/assets/zenscript-BnlCZFoB.js +1 -0
- package/dist/web/assets/zig-CMLA9XwU.js +1 -0
- package/dist/web/favicon.svg +1 -0
- package/dist/web/index.html +19 -0
- package/package.json +62 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Leon van Zyl
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,283 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# CodeDen
|
|
4
|
+
|
|
5
|
+
**A local-first harness for coding agents.** Run Claude Code and Codex side by side in a calm, focused workspace, and when you're ready, let a small software factory work through your backlog while every step stays visible in GitHub.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/codeden)
|
|
8
|
+
[](https://github.com/leonvanzyl/codeden/blob/main/LICENSE)
|
|
9
|
+

|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npx codeden
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
That's the whole install. CodeDen starts a local server, opens your browser on an already signed-in URL, and reuses the Claude Code, Codex, GitHub and git setup you already have. No accounts, no license keys, no hosted backend, no telemetry.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Contents
|
|
25
|
+
|
|
26
|
+
- [Quick start](#quick-start)
|
|
27
|
+
- [What you get](#what-you-get)
|
|
28
|
+
- [How it works](#how-it-works)
|
|
29
|
+
- [Security model](#security-model)
|
|
30
|
+
- [Configuration](#configuration)
|
|
31
|
+
- [CLI reference](#cli-reference)
|
|
32
|
+
- [FAQ](#faq)
|
|
33
|
+
- [Documentation](#documentation)
|
|
34
|
+
- [Contributing](#contributing) · [License](#license)
|
|
35
|
+
|
|
36
|
+
## Quick start
|
|
37
|
+
|
|
38
|
+
**Requirements**
|
|
39
|
+
|
|
40
|
+
| | |
|
|
41
|
+
|---|---|
|
|
42
|
+
| **Node.js 24+** | `node --version` |
|
|
43
|
+
| **git** | with `user.name` and `user.email` set |
|
|
44
|
+
| **An agent CLI, signed in** | [Claude Code](https://docs.claude.com/en/docs/claude-code) (`claude`) and/or [Codex CLI](https://developers.openai.com/codex/cli) (`codex`). At least one is required |
|
|
45
|
+
| **GitHub CLI** *(optional)* | `gh auth login` unlocks issues, pull requests, evidence and the factory. Local-only folders work without it |
|
|
46
|
+
| **Edge or Chrome** *(optional)* | for the browser panel and the agents' browser tools |
|
|
47
|
+
|
|
48
|
+
**Run it**
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
npx codeden # or: npm i -g codeden && codeden
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
1. The **setup checklist** detects Claude Code, Codex, GitHub, your git identity and a browser, and only asks about what's missing. Each failed check has one fix: an install command, or a **Sign in** button that runs the tool's own login in an embedded terminal.
|
|
55
|
+
2. **Add a project:** pick a local folder (a server-side folder picker) or paste a GitHub URL to clone.
|
|
56
|
+
3. **Start a session.** The agent works in its own git worktree and branch, so your checkout is never touched.
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
Already installed something and want to check it? `npx codeden doctor` runs the same checks in the terminal. See [Getting started](https://github.com/leonvanzyl/codeden/blob/main/docs/getting-started.md) for a full walkthrough.
|
|
61
|
+
|
|
62
|
+
## What you get
|
|
63
|
+
|
|
64
|
+
### Orchestrator, project managers and agent sessions
|
|
65
|
+
|
|
66
|
+
Three kinds of agents, each in its own lane:
|
|
67
|
+
|
|
68
|
+
- **Orchestrator.** One agent you talk to across every project. It creates and configures projects, hands work to project managers and summarises what's going on.
|
|
69
|
+
- **Project managers (PMs).** One long-lived agent per project. It triages issues, starts and steers agent sessions, follows their progress and escalates to you when it's unsure. PMs and the orchestrator are **read-only**: they never edit your code, they act through CodeDen's tools.
|
|
70
|
+
- **Agent sessions.** The coding agents. Each runs in its own worktree and branch, can ask you questions, request approvals, share screenshots, and finish by opening a pull request with evidence.
|
|
71
|
+
|
|
72
|
+
Every unit of work carries a **work key** (`issue:142`, `automation:security-audit`, ...), so starting something that's already running gives you a conflict card (**wait**, **skip**, **join** or **force**) instead of a silent duplicate. The orchestrator and PMs get a fresh status digest every time they wake, and session events reach them as typed **notices**. [More on orchestration](https://github.com/leonvanzyl/codeden/blob/main/docs/orchestration.md).
|
|
73
|
+
|
|
74
|
+

|
|
75
|
+
|
|
76
|
+
### One inbox
|
|
77
|
+
|
|
78
|
+
Questions, approvals, PRs ready for review, failed runs, triage decisions, duplicate-work conflicts and budget alerts all land in one **Inbox**, each linked to its session, issue and PR and answerable in place. Toasts and (opt-in) browser notifications tell you when something new arrives.
|
|
79
|
+
|
|
80
|
+

|
|
81
|
+
|
|
82
|
+
### GitHub traceability
|
|
83
|
+
|
|
84
|
+
For projects with a GitHub remote, CodeDen syncs issues, PRs, checks and reviews using your existing `gh` login. Agents open PRs that link the issue (`Fixes #N`) and the session, and attach screenshots and test output as **evidence** that renders inline, even in private repositories. PRs ready for review come to your inbox; you can review and squash-merge from CodeDen. [GitHub guide](https://github.com/leonvanzyl/codeden/blob/main/docs/github.md).
|
|
85
|
+
|
|
86
|
+
### Automations
|
|
87
|
+
|
|
88
|
+
Background work you switch on per project: **security audit**, **refactor sweep**, **dependency updates**, **UI review**, **test coverage gaps**, **issue triage** and **stale PR follow-up** ship as templates. Triggers are cron schedules, GitHub and session events, or manual runs; guards cover overlap, concurrency, quiet hours, daily caps and catching up after downtime. Templates are plain Markdown files with YAML frontmatter, so writing your own takes a minute. **Everything is off by default.** [Automations guide](https://github.com/leonvanzyl/codeden/blob/main/docs/automations.md).
|
|
89
|
+
|
|
90
|
+

|
|
91
|
+
|
|
92
|
+
### Autonomy modes, including an experimental dark factory
|
|
93
|
+
|
|
94
|
+
Each project climbs a ladder: **Manual** → **Assisted** (the default) → **Autopilot** → **Dark factory**. In the last two (both **experimental**), a factory loop takes in work from issues, failed checks and improvement finders, builds it in agent sessions, and merges a PR automatically only when every merge check passes: green CI, tests, an independent review by a separate agent session, a security scan, UI evidence, a size limit and no protected areas touched. Limits you set (concurrent sessions, merges per day, a daily budget, pause after repeated failures) are enforced by the server, and a kill switch stops everything with one click. [Autonomy and the dark factory](https://github.com/leonvanzyl/codeden/blob/main/docs/autonomy-and-dark-factory.md).
|
|
95
|
+
|
|
96
|
+

|
|
97
|
+
|
|
98
|
+
### Workbench
|
|
99
|
+
|
|
100
|
+
Everything an agent touches, next to the chat:
|
|
101
|
+
|
|
102
|
+
- **Diffs and checkpoints.** Every turn is snapshotted into a hidden git ref, so you get exact per-turn and whole-session diffs and can restore files to any earlier turn. Commit and push from the git bar.
|
|
103
|
+
- **Files.** A file tree and a syntax-highlighted viewer for the session's worktree.
|
|
104
|
+
- **Terminal.** Real PTY terminals owned by the runner, so they survive server restarts.
|
|
105
|
+
- **Browser.** A Chromium the agents drive (navigate, snapshot, click, type, screenshot, console and network logs), streamed into the panel. You can take over at any time.
|
|
106
|
+
- **Subagents** open as child threads, and the composer queues or steers while a turn runs.
|
|
107
|
+
|
|
108
|
+

|
|
109
|
+
|
|
110
|
+
[Workbench guide](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md).
|
|
111
|
+
|
|
112
|
+
### Agent memory, skills, subagents and MCP servers
|
|
113
|
+
|
|
114
|
+
First-class editors for each provider's **own files**: `CLAUDE.md`, `AGENTS.md`, `.claude/rules/`, Claude's auto-memory, skills, subagents, `.mcp.json`, `~/.claude.json` and `~/.codex/config.toml`. Edits are written in place with a diff preview and a backup, so they show up in the terminal CLI too, and a **What's loaded** view shows which files a session actually has in context. [Agent configuration](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md).
|
|
115
|
+
|
|
116
|
+
### Image generation for every agent
|
|
117
|
+
|
|
118
|
+
One `generate_image` tool, available to every agent whatever its provider. It routes to **Codex** (your existing Codex login, no API key), **Gemini** image models or **OpenAI Images**, with a daily cap and per-project overrides. A Claude agent building a landing page can make its own hero image.
|
|
119
|
+
|
|
120
|
+
### Voice
|
|
121
|
+
|
|
122
|
+
Dictate into the composer (browser speech, or ElevenLabs / OpenAI), with push-to-talk. Have an agent's final message read aloud when its turn completes, with code stripped and long messages summarised first. [Voice and images](https://github.com/leonvanzyl/codeden/blob/main/docs/voice-and-images.md).
|
|
123
|
+
|
|
124
|
+
### Usage and cost reports
|
|
125
|
+
|
|
126
|
+
A ledger of every turn's tokens and cost across providers, models, projects and roles, with daily charts, drill-down to sessions, top sessions, automation and factory spend, cache hit rate, cost per merged PR, CSV export, budget alerts and rate-limit windows. Subscription logins see a clearly labelled **API-equivalent cost**. [Usage and costs](https://github.com/leonvanzyl/codeden/blob/main/docs/usage-and-costs.md).
|
|
127
|
+
|
|
128
|
+

|
|
129
|
+
|
|
130
|
+
### Follow-up prompts
|
|
131
|
+
|
|
132
|
+
When an agent finishes, CodeDen suggests two to four next prompts as one-click chips above the composer. The agent proposes them itself; a small utility model fills in when it didn't.
|
|
133
|
+
|
|
134
|
+
## How it works
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
┌──────────────────────── Web UI (React SPA) ─────────────────────────┐
|
|
138
|
+
│ sidebar · chat · inbox · right panels (diff/files/browser/terminal) │
|
|
139
|
+
└───────────────┬──────────────────────────────────────▲──────────────┘
|
|
140
|
+
│ HTTP + WebSocket (127.0.0.1) │ live events
|
|
141
|
+
┌───────────────▼──────────────────────────────────────┴──────────────┐
|
|
142
|
+
│ SERVER (long-lived, owns all state) │
|
|
143
|
+
│ SQLite event log + projections · orchestrator and PMs · inbox │
|
|
144
|
+
│ MCP endpoint (role-scoped) · automation scheduler · GitHub sync │
|
|
145
|
+
└───────────────┬──────────────────────────────────────▲──────────────┘
|
|
146
|
+
│ runner protocol over WebSocket │ events + acks
|
|
147
|
+
┌───────────────▼──────────────────────────────────────┴──────────────┐
|
|
148
|
+
│ RUNNER (separate process, next to the code) │
|
|
149
|
+
│ Claude Agent SDK · codex app-server · terminals (node-pty) │
|
|
150
|
+
│ Chromium over CDP · worktrees, checkpoints, git · MCP proxy │
|
|
151
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- **Two processes.** The **server** owns the database, orchestration, the inbox, automations and GitHub sync, and serves the UI. The **runner** hosts the agent processes, terminals, the browser and git. If the server restarts (an update, a crash), running agents keep going; the runner journals their events until the server is back.
|
|
155
|
+
- **Real SDKs and protocols.** Claude Code runs through the Claude Agent SDK using your installed `claude` binary; Codex runs through `codex app-server` over JSON-RPC. No scraped terminal output.
|
|
156
|
+
- **Everything is an event.** Agent activity is an append-only event log in SQLite, so every action can be seen, replayed and traced to an issue, branch or PR.
|
|
157
|
+
- **Agents reach CodeDen through MCP.** Each session gets a role-scoped token for CodeDen's internal MCP server (`report_progress`, `ask_user`, `create_pull_request`, `attach_evidence`, the browser tools, `generate_image`, ...). Tools outside a role are never listed.
|
|
158
|
+
|
|
159
|
+
More in [Architecture](https://github.com/leonvanzyl/codeden/blob/main/docs/architecture.md) and the full design in [docs/DESIGN.md](https://github.com/leonvanzyl/codeden/blob/main/docs/DESIGN.md).
|
|
160
|
+
|
|
161
|
+
## Security model
|
|
162
|
+
|
|
163
|
+
- The server and runner listen on **127.0.0.1 only**. Remote or LAN access is not part of v1.
|
|
164
|
+
- Every HTTP, WebSocket and MCP request needs a **per-install random token**. The browser gets it once through the launch URL, then holds it in an HttpOnly, `SameSite=Strict` cookie.
|
|
165
|
+
- `Host` and `Origin` headers are checked, which blocks other websites and DNS rebinding from reaching the local API.
|
|
166
|
+
- Agent MCP tokens are **per session and role-scoped**, stored only as hashes, and revoked when the session ends.
|
|
167
|
+
- The default autonomy level, **Auto, risky actions ask**, lets agents edit and run normal commands inside their worktree, and sends risky actions to your inbox: writes outside the worktree, force pushes, branch deletion, global installs, piping downloads into a shell, and secrets access.
|
|
168
|
+
- Optional API keys live in the **OS keychain**, never in files. GitHub and provider logins are read from their own CLIs at runtime and never stored.
|
|
169
|
+
|
|
170
|
+
Details and how to report a vulnerability: [docs/security.md](https://github.com/leonvanzyl/codeden/blob/main/docs/security.md) and [SECURITY.md](https://github.com/leonvanzyl/codeden/blob/main/SECURITY.md).
|
|
171
|
+
|
|
172
|
+
## Configuration
|
|
173
|
+
|
|
174
|
+
| What | Where |
|
|
175
|
+
|---|---|
|
|
176
|
+
| Data directory | `~/.codeden/`, or `CODEDEN_HOME`, or `--home <dir>` |
|
|
177
|
+
| Port | `4317` by default, or `--port <n>`. The runner picks a free loopback port itself |
|
|
178
|
+
| Settings | **Settings** in the UI, stored in `<home>/settings.json` (non-secret) |
|
|
179
|
+
| Usage prices and budgets | **Usage** in the UI, stored in `<home>/usage-settings.json` |
|
|
180
|
+
| API keys | Settings, stored in the OS keychain |
|
|
181
|
+
| Per-project setup | `.codeden/project.json` in the repo: worktree setup commands and the dev server |
|
|
182
|
+
| Automations | `~/.codeden/automations/*.md` (all projects) and `<repo>/.codeden/automations/*.md` |
|
|
183
|
+
| Project vision | `<repo>/.codeden/VISION.md` (autopilot and dark factory) |
|
|
184
|
+
|
|
185
|
+
Inside the data directory:
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
~/.codeden/
|
|
189
|
+
codeden.db SQLite database (event log + projections)
|
|
190
|
+
settings.json settings
|
|
191
|
+
install-token the per-install token (mode 600 where supported)
|
|
192
|
+
server.json running server's port and pid
|
|
193
|
+
runner/ runner lock file and event journal
|
|
194
|
+
wt/<project>/<id>/ agent worktrees (short paths for Windows)
|
|
195
|
+
artifacts/ screenshots and files shared in chat
|
|
196
|
+
orchestrator/ the orchestrator's working directory
|
|
197
|
+
backups/ copies of config files taken before CodeDen overwrote them
|
|
198
|
+
logs/runner.log runner output
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Two copies can run side by side with different homes and ports, for example `codeden --home ~/.codeden-test --port 4400`.
|
|
202
|
+
|
|
203
|
+
A minimal `.codeden/project.json`:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"setup": ["pnpm install"],
|
|
208
|
+
"devServer": { "command": "pnpm dev", "port": 5173 }
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## CLI reference
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
codeden [options] Start CodeDen and open it in the browser
|
|
216
|
+
codeden doctor Check the installation (--install: add Claude Code support now)
|
|
217
|
+
codeden stop Stop the server and the runner
|
|
218
|
+
|
|
219
|
+
Options:
|
|
220
|
+
--port <n> Port to listen on (default 4317)
|
|
221
|
+
--home <dir> Data directory (default ~/.codeden, or CODEDEN_HOME)
|
|
222
|
+
--no-open Do not open the browser
|
|
223
|
+
-v, --version Print the version
|
|
224
|
+
-h, --help Show this help
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
- Running `codeden` while it's already running prints the URL and opens it again.
|
|
228
|
+
- **Ctrl+C** stops the server; agents keep running in the runner. `codeden stop` stops both.
|
|
229
|
+
- `codeden doctor` exits non-zero when CodeDen can't run a session, and prints the one command that fixes each problem.
|
|
230
|
+
- Claude Code support (the Claude Agent SDK) isn't part of the package: it installs from npm into `~/.codeden/deps/` the first time it's needed, or with `codeden doctor --install`.
|
|
231
|
+
|
|
232
|
+
Environment variables: `CODEDEN_HOME` (data directory), `CODEDEN_DEBUG=1` (server log lines in the terminal), `CODEDEN_SHELL` (terminal shell; PowerShell on Windows, `$SHELL` elsewhere), `CODEDEN_GITHUB_SYNC=0` (turn GitHub polling off).
|
|
233
|
+
|
|
234
|
+
## FAQ
|
|
235
|
+
|
|
236
|
+
**Do I need API keys?**
|
|
237
|
+
No. CodeDen runs your installed `claude` and `codex` CLIs, which use their own logins, including claude.ai and ChatGPT subscriptions. CodeDen never implements a login of its own and never asks for a credential it can already use. API keys are an optional extra for Gemini or OpenAI image generation and cloud voice. Check your provider's terms for how your plan may be used.
|
|
238
|
+
|
|
239
|
+
**Where does my data go?**
|
|
240
|
+
It stays on your machine, in `~/.codeden/`. CodeDen has no account system and no hosted backend. The only network traffic is what you set up: your agents talking to their providers, GitHub (through your `gh` login), and the optional image and voice engines you enable.
|
|
241
|
+
|
|
242
|
+
**Is there telemetry?**
|
|
243
|
+
No. CodeDen sends no usage data anywhere.
|
|
244
|
+
|
|
245
|
+
**Does it work without GitHub?**
|
|
246
|
+
Yes. Local-only folders get sessions, worktrees, checkpoints, diffs, the workbench and automations; issue, PR, evidence and factory features need a GitHub remote and `gh`.
|
|
247
|
+
|
|
248
|
+
**Will it touch my working copy?**
|
|
249
|
+
Agent sessions work in their own worktrees under `~/.codeden/wt/` on new `codeden/...` branches. Checkpoints use hidden refs and a temporary index, so your branch and index are never touched. The orchestrator and PMs are read-only.
|
|
250
|
+
|
|
251
|
+
**What happens if I close the terminal?**
|
|
252
|
+
The server stops; the runner, and any agent mid-turn, keeps going. The next `codeden` reconnects and catches up. `codeden stop` stops everything.
|
|
253
|
+
|
|
254
|
+
**Which platforms?**
|
|
255
|
+
Windows, macOS and Linux. Windows is tested first.
|
|
256
|
+
|
|
257
|
+
**Is the dark factory safe to leave running?**
|
|
258
|
+
It's experimental. Read [Autonomy and the dark factory](https://github.com/leonvanzyl/codeden/blob/main/docs/autonomy-and-dark-factory.md) first, start with Autopilot on a sandbox repository, set a budget and protected areas, and keep the kill switch in reach.
|
|
259
|
+
|
|
260
|
+
## Documentation
|
|
261
|
+
|
|
262
|
+
| Guide | |
|
|
263
|
+
|---|---|
|
|
264
|
+
| [Getting started](https://github.com/leonvanzyl/codeden/blob/main/docs/getting-started.md) | Install, first-run setup, first project and session |
|
|
265
|
+
| [Orchestration](https://github.com/leonvanzyl/codeden/blob/main/docs/orchestration.md) | Orchestrator, PMs, agents, work keys, conflicts and notices |
|
|
266
|
+
| [GitHub](https://github.com/leonvanzyl/codeden/blob/main/docs/github.md) | Issues, PRs, checks, reviews and the evidence branch |
|
|
267
|
+
| [Automations](https://github.com/leonvanzyl/codeden/blob/main/docs/automations.md) | Triggers, guards, templates and writing your own |
|
|
268
|
+
| [Autonomy and the dark factory](https://github.com/leonvanzyl/codeden/blob/main/docs/autonomy-and-dark-factory.md) | Modes, the vision file, merge checks, limits and the kill switch |
|
|
269
|
+
| [Workbench](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md) | Diffs, checkpoints, files, terminal, browser, composer, shortcuts |
|
|
270
|
+
| [Agent configuration](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md) | Memory, skills, subagents and MCP servers |
|
|
271
|
+
| [Voice and images](https://github.com/leonvanzyl/codeden/blob/main/docs/voice-and-images.md) | Dictation, read-aloud and image generation |
|
|
272
|
+
| [Usage and costs](https://github.com/leonvanzyl/codeden/blob/main/docs/usage-and-costs.md) | The ledger, reports, budgets and rate limits |
|
|
273
|
+
| [Security](https://github.com/leonvanzyl/codeden/blob/main/docs/security.md) | The security model in detail |
|
|
274
|
+
| [Troubleshooting](https://github.com/leonvanzyl/codeden/blob/main/docs/troubleshooting.md) | `doctor`, logs and common issues |
|
|
275
|
+
| [Architecture](https://github.com/leonvanzyl/codeden/blob/main/docs/architecture.md) | How the pieces fit, with a link to the full design |
|
|
276
|
+
|
|
277
|
+
## Contributing
|
|
278
|
+
|
|
279
|
+
Bug reports, ideas and pull requests are welcome. See [CONTRIBUTING.md](https://github.com/leonvanzyl/codeden/blob/main/CONTRIBUTING.md) for the development setup, conventions and tests, and [CHANGELOG.md](https://github.com/leonvanzyl/codeden/blob/main/CHANGELOG.md) for what's changed.
|
|
280
|
+
|
|
281
|
+
## License
|
|
282
|
+
|
|
283
|
+
[MIT](https://github.com/leonvanzyl/codeden/blob/main/LICENSE) © 2026 Leon van Zyl
|