codeden 0.0.0-stage → 0.1.1
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 +300 -2
- package/dist/THIRD-PARTY-NOTICES.txt +917 -0
- package/dist/cli.js +256 -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/main-BF0aQ9U8.js +57012 -0
- package/dist/main-BF0aQ9U8.js.map +1 -0
- package/dist/main-DaGFUbbW.js +59 -0
- package/dist/main-DaGFUbbW.js.map +1 -0
- package/dist/rolldown-runtime-DegdyBIC.js +25 -0
- package/dist/runner-D8m3WdtS.js +27271 -0
- package/dist/runner-D8m3WdtS.js.map +1 -0
- package/dist/runner.js +23 -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-BmMheb4i.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-CVzqqUIi.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-nUCrIe8P.js +1 -0
- package/dist/web/assets/highlights-CdGBlIcw.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-DKWZjMF1.js +885 -0
- package/dist/web/assets/index-DfoaM4E6.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-kfQh6fa2.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-BIq7_eYY.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-D8HIISPT.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-BmWmYTv_.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-CKsIQs7_.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/dist/cli.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
6
|
+
// src/launcher.ts
|
|
7
|
+
/**
|
|
8
|
+
* The `codeden` launcher (§16): runs first in every copy of the CLI (npx cache, global install,
|
|
9
|
+
* a side-by-side version or a repository build). When `<home>/app/current.json` names a valid
|
|
10
|
+
* installed version newer than this copy, that version's CLI is loaded in this same process
|
|
11
|
+
* (same arguments, environment, signals and exit code; no extra process). Builds from a source
|
|
12
|
+
* checkout never switch.
|
|
13
|
+
*
|
|
14
|
+
* Only Node built-ins here: it runs before the rest of the bundle loads, and must stay small.
|
|
15
|
+
* `current.json` is parsed by hand; it must accept everything `AppPointer` in
|
|
16
|
+
* `@codeden/contracts` accepts (a test checks both against the server's writer).
|
|
17
|
+
*/
|
|
18
|
+
const LAUNCH_KEY = "__CODEDEN_LAUNCH__";
|
|
19
|
+
/** Environment variable a restart passes the original `LaunchInfo` (JSON) in. */
|
|
20
|
+
const LAUNCHED_BY_ENV = "CODEDEN_LAUNCHED_BY";
|
|
21
|
+
const VERSION_KEY = "__CODEDEN_PACKAGE_VERSION__";
|
|
22
|
+
/** The data directory, resolved like `resolveHome` in the server (`--home`, CODEDEN_HOME, ~). */
|
|
23
|
+
function homeFromArgs(args, env = process.env) {
|
|
24
|
+
for (let i = 0; i < args.length; i++) {
|
|
25
|
+
const arg = args[i];
|
|
26
|
+
if (arg === "--home" && args[i + 1]) return resolve(args[i + 1]);
|
|
27
|
+
if (arg.startsWith("--home=")) return resolve(arg.slice(7));
|
|
28
|
+
}
|
|
29
|
+
return env.CODEDEN_HOME ? resolve(env.CODEDEN_HOME) : join(homedir(), ".codeden");
|
|
30
|
+
}
|
|
31
|
+
/** A repository or workspace build: the package root next to `dist/` still has `src/`. */
|
|
32
|
+
function isSourceCheckout(entry) {
|
|
33
|
+
const root = dirname(dirname(realEntry(entry)));
|
|
34
|
+
return existsSync(join(root, "src", "cli.ts")) || existsSync(join(root, "tsdown.config.ts"));
|
|
35
|
+
}
|
|
36
|
+
/** How this copy was installed, from its path. */
|
|
37
|
+
function installKind(entry, home) {
|
|
38
|
+
const real = realEntry(entry);
|
|
39
|
+
if (isSourceCheckout(real)) return "source";
|
|
40
|
+
if (real.startsWith(join(realHome(home), "app") + sep)) return "managed";
|
|
41
|
+
if (real.includes(`${sep}_npx${sep}`)) return "npx";
|
|
42
|
+
return "npm";
|
|
43
|
+
}
|
|
44
|
+
/** The pinned version from `current.json`, or null when missing or unreadable. */
|
|
45
|
+
function readPinnedVersion(home) {
|
|
46
|
+
try {
|
|
47
|
+
const version = JSON.parse(readFileSync(join(home, "app", "current.json"), "utf8")).version;
|
|
48
|
+
return typeof version === "string" && /^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(version) ? version : null;
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** The CLI entry of an installed version. */
|
|
54
|
+
function managedEntry(home, version) {
|
|
55
|
+
return join(home, "app", version, "node_modules", "codeden", "dist", "cli.js");
|
|
56
|
+
}
|
|
57
|
+
/** Why the installed `version` can't start, or null when it looks complete. */
|
|
58
|
+
function managedProblem(home, version) {
|
|
59
|
+
const root = join(home, "app", version, "node_modules", "codeden");
|
|
60
|
+
let pkgVersion;
|
|
61
|
+
try {
|
|
62
|
+
pkgVersion = JSON.parse(readFileSync(join(root, "package.json"), "utf8")).version;
|
|
63
|
+
} catch {
|
|
64
|
+
return "its package.json is missing";
|
|
65
|
+
}
|
|
66
|
+
if (pkgVersion !== version) return `its package.json says ${String(pkgVersion)}`;
|
|
67
|
+
if (!existsSync(join(root, "dist", "cli.js"))) return "dist/cli.js is missing";
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Decide whether to run this copy or switch to the pinned version. Never switches from a
|
|
72
|
+
* source checkout, when `CODEDEN_NO_SWITCH=1`, when this copy was itself switched to, or to a
|
|
73
|
+
* version that is not newer than this copy (a newer global install wins over an old pin).
|
|
74
|
+
*/
|
|
75
|
+
function decideLaunch(input) {
|
|
76
|
+
const env = input.env ?? process.env;
|
|
77
|
+
const self = {
|
|
78
|
+
kind: "self",
|
|
79
|
+
warning: null
|
|
80
|
+
};
|
|
81
|
+
if (env.CODEDEN_NO_SWITCH === "1" || input.alreadyLaunched) return self;
|
|
82
|
+
if (isSourceCheckout(input.selfEntry)) return self;
|
|
83
|
+
const pinned = readPinnedVersion(input.home);
|
|
84
|
+
if (!pinned || compareCore(pinned, input.selfVersion) <= 0) return self;
|
|
85
|
+
const entry = managedEntry(input.home, pinned);
|
|
86
|
+
if (samePath(entry, input.selfEntry)) return self;
|
|
87
|
+
const problem = managedProblem(input.home, pinned);
|
|
88
|
+
if (problem) return {
|
|
89
|
+
kind: "self",
|
|
90
|
+
warning: `CodeDen ${pinned} in ${join(input.home, "app", pinned)} can't start (${problem}); running ${input.selfVersion} instead. Run \`codeden update\` to reinstall it.`
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
kind: "switch",
|
|
94
|
+
version: pinned,
|
|
95
|
+
entry
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The copy the user originally launched, passed (as JSON in `CODEDEN_LAUNCHED_BY`) to a version
|
|
100
|
+
* started by a restart, so "Roll back" and the manual restart command still refer to it.
|
|
101
|
+
*/
|
|
102
|
+
function parseLaunchedBy(raw, home) {
|
|
103
|
+
if (!raw) return null;
|
|
104
|
+
try {
|
|
105
|
+
const v = JSON.parse(raw);
|
|
106
|
+
if (typeof v.binEntry !== "string" || typeof v.binVersion !== "string") return null;
|
|
107
|
+
if (v.kind !== "npx" && v.kind !== "npm" && v.kind !== "managed") return null;
|
|
108
|
+
return {
|
|
109
|
+
binEntry: v.binEntry,
|
|
110
|
+
binVersion: v.binVersion,
|
|
111
|
+
kind: v.kind,
|
|
112
|
+
source: "packaged",
|
|
113
|
+
restartCommand: restartCommandFor(v.kind, v.binEntry),
|
|
114
|
+
home,
|
|
115
|
+
warning: null
|
|
116
|
+
};
|
|
117
|
+
} catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** The command that starts this copy again. */
|
|
122
|
+
function restartCommandFor(kind, entry) {
|
|
123
|
+
if (kind === "npx") return "npx codeden";
|
|
124
|
+
if (kind === "source") return `node ${entry}`;
|
|
125
|
+
return "codeden";
|
|
126
|
+
}
|
|
127
|
+
/** `x.y.z[-pre]` comparison (same rules as `compareVersions` in contracts). */
|
|
128
|
+
function compareCore(a, b) {
|
|
129
|
+
const parse = (v) => {
|
|
130
|
+
const dash = v.indexOf("-");
|
|
131
|
+
return {
|
|
132
|
+
nums: (dash === -1 ? v : v.slice(0, dash)).split(".").map((n) => Number.parseInt(n, 10) || 0),
|
|
133
|
+
pre: dash === -1 ? "" : v.slice(dash + 1)
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
const x = parse(a.replace(/^v/, ""));
|
|
137
|
+
const y = parse(b.replace(/^v/, ""));
|
|
138
|
+
for (let i = 0; i < 3; i++) {
|
|
139
|
+
const d = (x.nums[i] ?? 0) - (y.nums[i] ?? 0);
|
|
140
|
+
if (d !== 0) return d;
|
|
141
|
+
}
|
|
142
|
+
if (x.pre === y.pre) return 0;
|
|
143
|
+
if (!x.pre) return 1;
|
|
144
|
+
if (!y.pre) return -1;
|
|
145
|
+
const xs = x.pre.split(".");
|
|
146
|
+
const ys = y.pre.split(".");
|
|
147
|
+
for (let i = 0; i < Math.max(xs.length, ys.length); i++) {
|
|
148
|
+
const p = xs[i];
|
|
149
|
+
const q = ys[i];
|
|
150
|
+
if (p === void 0) return -1;
|
|
151
|
+
if (q === void 0) return 1;
|
|
152
|
+
const pn = /^\d+$/.test(p);
|
|
153
|
+
const qn = /^\d+$/.test(q);
|
|
154
|
+
if (pn && qn && Number(p) !== Number(q)) return Number(p) - Number(q);
|
|
155
|
+
if (pn !== qn) return pn ? -1 : 1;
|
|
156
|
+
if (!pn && p !== q) return p < q ? -1 : 1;
|
|
157
|
+
}
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
function realEntry(entry) {
|
|
161
|
+
try {
|
|
162
|
+
return realpathSync.native(entry);
|
|
163
|
+
} catch {
|
|
164
|
+
return resolve(entry);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function realHome(home) {
|
|
168
|
+
try {
|
|
169
|
+
return realpathSync.native(home);
|
|
170
|
+
} catch {
|
|
171
|
+
return resolve(home);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function samePath(a, b) {
|
|
175
|
+
const norm = (p) => process.platform === "win32" ? realEntry(p).toLowerCase() : realEntry(p);
|
|
176
|
+
return norm(a) === norm(b);
|
|
177
|
+
}
|
|
178
|
+
// src/cli.ts
|
|
179
|
+
/**
|
|
180
|
+
* `codeden` entry (§16). Runs the launcher first: when `<home>/app/current.json` pins a newer
|
|
181
|
+
* installed version, that version's CLI runs in this process instead. Then it records this
|
|
182
|
+
* package's version for the bundle and loads the CLI proper (`main.ts`).
|
|
183
|
+
*
|
|
184
|
+
* Keep this file free of top-level `await` and of imports beyond `./launcher` and Node
|
|
185
|
+
* built-ins: a newer version is loaded with `import()`, and the rest of the bundle must not
|
|
186
|
+
* start loading before the decision is made. Every version keeps this contract.
|
|
187
|
+
*/
|
|
188
|
+
/** Loaded by an older copy's launcher, which handles our load errors (and falls back). */
|
|
189
|
+
const nested = globalThis[LAUNCH_KEY] !== void 0;
|
|
190
|
+
function ownVersion() {
|
|
191
|
+
try {
|
|
192
|
+
const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
|
|
193
|
+
return typeof pkg.version === "string" ? pkg.version : "0.0.0";
|
|
194
|
+
} catch {
|
|
195
|
+
return "0.0.0";
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function run() {
|
|
199
|
+
const globals = globalThis;
|
|
200
|
+
const args = process.argv.slice(2);
|
|
201
|
+
const selfEntry = fileURLToPath(import.meta.url);
|
|
202
|
+
const selfVersion = ownVersion();
|
|
203
|
+
const home = homeFromArgs(args);
|
|
204
|
+
let warning = null;
|
|
205
|
+
if (!nested) {
|
|
206
|
+
const kind = installKind(selfEntry, home);
|
|
207
|
+
const inherited = parseLaunchedBy(process.env[LAUNCHED_BY_ENV], home);
|
|
208
|
+
delete process.env[LAUNCHED_BY_ENV];
|
|
209
|
+
const info = inherited ?? {
|
|
210
|
+
binEntry: selfEntry,
|
|
211
|
+
binVersion: selfVersion,
|
|
212
|
+
kind,
|
|
213
|
+
source: kind === "source" ? "source" : "packaged",
|
|
214
|
+
restartCommand: restartCommandFor(kind, selfEntry),
|
|
215
|
+
home,
|
|
216
|
+
warning: null
|
|
217
|
+
};
|
|
218
|
+
const decision = decideLaunch({
|
|
219
|
+
selfEntry,
|
|
220
|
+
selfVersion,
|
|
221
|
+
home
|
|
222
|
+
});
|
|
223
|
+
if (decision.kind === "switch") {
|
|
224
|
+
globals[LAUNCH_KEY] = info;
|
|
225
|
+
try {
|
|
226
|
+
const mod = await import(pathToFileURL(decision.entry).href);
|
|
227
|
+
if (mod.started instanceof Promise) await mod.started;
|
|
228
|
+
return;
|
|
229
|
+
} catch (error) {
|
|
230
|
+
const reason = error instanceof Error ? error.message.split(/\r?\n/)[0] : String(error);
|
|
231
|
+
warning = `CodeDen ${decision.version} failed to load (${reason}); running ${selfVersion} instead.`;
|
|
232
|
+
}
|
|
233
|
+
} else warning = decision.warning;
|
|
234
|
+
globals[LAUNCH_KEY] = {
|
|
235
|
+
...info,
|
|
236
|
+
warning
|
|
237
|
+
};
|
|
238
|
+
if (warning) console.error(`codeden: ${warning}`);
|
|
239
|
+
}
|
|
240
|
+
globals[VERSION_KEY] = selfVersion;
|
|
241
|
+
if (args.includes("--version") || args.includes("-v")) {
|
|
242
|
+
console.log(selfVersion);
|
|
243
|
+
process.exit(0);
|
|
244
|
+
}
|
|
245
|
+
await import("./main-BF0aQ9U8.js");
|
|
246
|
+
}
|
|
247
|
+
/** Settles once this copy's CLI has loaded (an older launcher that switched here awaits it). */
|
|
248
|
+
const started = run();
|
|
249
|
+
started.catch((error) => {
|
|
250
|
+
if (nested) return;
|
|
251
|
+
console.error(error instanceof Error ? error.message : error);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
});
|
|
254
|
+
export { started };
|
|
255
|
+
|
|
256
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","names":[],"sources":["../src/launcher.ts","../src/cli.ts"],"sourcesContent":["/**\n * The `codeden` launcher (§16): runs first in every copy of the CLI (npx cache, global install,\n * a side-by-side version or a repository build). When `<home>/app/current.json` names a valid\n * installed version newer than this copy, that version's CLI is loaded in this same process\n * (same arguments, environment, signals and exit code; no extra process). Builds from a source\n * checkout never switch.\n *\n * Only Node built-ins here: it runs before the rest of the bundle loads, and must stay small.\n * `current.json` is parsed by hand; it must accept everything `AppPointer` in\n * `@codeden/contracts` accepts (a test checks both against the server's writer).\n */\nimport { existsSync, readFileSync, realpathSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve, sep } from \"node:path\";\n\n/** How the running CLI was launched; set on `globalThis` for the rest of the bundle. */\nexport interface LaunchInfo {\n /** The `codeden` copy the user ran. */\n binEntry: string;\n binVersion: string;\n /** `npx`, a global or local npm install, or a source checkout. */\n kind: \"npx\" | \"npm\" | \"managed\" | \"source\";\n source: \"packaged\" | \"source\";\n /** What to type to start CodeDen again, e.g. `npx codeden`. */\n restartCommand: string;\n home: string;\n /** Set when the pinned version could not be started and this copy runs instead. */\n warning: string | null;\n}\n\nexport const LAUNCH_KEY = \"__CODEDEN_LAUNCH__\";\n/** Environment variable a restart passes the original `LaunchInfo` (JSON) in. */\nexport const LAUNCHED_BY_ENV = \"CODEDEN_LAUNCHED_BY\";\nexport const VERSION_KEY = \"__CODEDEN_PACKAGE_VERSION__\";\n\nexport type LaunchDecision =\n | { kind: \"self\"; warning: string | null }\n | { kind: \"switch\"; version: string; entry: string };\n\n/** The data directory, resolved like `resolveHome` in the server (`--home`, CODEDEN_HOME, ~). */\nexport function homeFromArgs(args: string[], env: NodeJS.ProcessEnv = process.env): string {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i] as string;\n if (arg === \"--home\" && args[i + 1]) return resolve(args[i + 1] as string);\n if (arg.startsWith(\"--home=\")) return resolve(arg.slice(\"--home=\".length));\n }\n return env.CODEDEN_HOME ? resolve(env.CODEDEN_HOME) : join(homedir(), \".codeden\");\n}\n\n/** A repository or workspace build: the package root next to `dist/` still has `src/`. */\nexport function isSourceCheckout(entry: string): boolean {\n const root = dirname(dirname(realEntry(entry)));\n return existsSync(join(root, \"src\", \"cli.ts\")) || existsSync(join(root, \"tsdown.config.ts\"));\n}\n\n/** How this copy was installed, from its path. */\nexport function installKind(entry: string, home: string): LaunchInfo[\"kind\"] {\n const real = realEntry(entry);\n if (isSourceCheckout(real)) return \"source\";\n if (real.startsWith(join(realHome(home), \"app\") + sep)) return \"managed\";\n if (real.includes(`${sep}_npx${sep}`)) return \"npx\";\n return \"npm\";\n}\n\n/** The pinned version from `current.json`, or null when missing or unreadable. */\nexport function readPinnedVersion(home: string): string | null {\n try {\n const value = JSON.parse(readFileSync(join(home, \"app\", \"current.json\"), \"utf8\")) as {\n version?: unknown;\n };\n const version = value.version;\n return typeof version === \"string\" && /^\\d+\\.\\d+\\.\\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(version)\n ? version\n : null;\n } catch {\n return null;\n }\n}\n\n/** The CLI entry of an installed version. */\nexport function managedEntry(home: string, version: string): string {\n return join(home, \"app\", version, \"node_modules\", \"codeden\", \"dist\", \"cli.js\");\n}\n\n/** Why the installed `version` can't start, or null when it looks complete. */\nexport function managedProblem(home: string, version: string): string | null {\n const root = join(home, \"app\", version, \"node_modules\", \"codeden\");\n let pkgVersion: unknown;\n try {\n pkgVersion = JSON.parse(readFileSync(join(root, \"package.json\"), \"utf8\")).version;\n } catch {\n return \"its package.json is missing\";\n }\n if (pkgVersion !== version) return `its package.json says ${String(pkgVersion)}`;\n if (!existsSync(join(root, \"dist\", \"cli.js\"))) return \"dist/cli.js is missing\";\n return null;\n}\n\n/**\n * Decide whether to run this copy or switch to the pinned version. Never switches from a\n * source checkout, when `CODEDEN_NO_SWITCH=1`, when this copy was itself switched to, or to a\n * version that is not newer than this copy (a newer global install wins over an old pin).\n */\nexport function decideLaunch(input: {\n selfEntry: string;\n selfVersion: string;\n home: string;\n env?: NodeJS.ProcessEnv;\n alreadyLaunched?: boolean;\n}): LaunchDecision {\n const env = input.env ?? process.env;\n const self = { kind: \"self\", warning: null } as const;\n if (env.CODEDEN_NO_SWITCH === \"1\" || input.alreadyLaunched) return self;\n if (isSourceCheckout(input.selfEntry)) return self;\n const pinned = readPinnedVersion(input.home);\n if (!pinned || compareCore(pinned, input.selfVersion) <= 0) return self;\n const entry = managedEntry(input.home, pinned);\n if (samePath(entry, input.selfEntry)) return self;\n const problem = managedProblem(input.home, pinned);\n if (problem) {\n return {\n kind: \"self\",\n warning:\n `CodeDen ${pinned} in ${join(input.home, \"app\", pinned)} can't start (${problem}); ` +\n `running ${input.selfVersion} instead. Run \\`codeden update\\` to reinstall it.`,\n };\n }\n return { kind: \"switch\", version: pinned, entry };\n}\n\n/**\n * The copy the user originally launched, passed (as JSON in `CODEDEN_LAUNCHED_BY`) to a version\n * started by a restart, so \"Roll back\" and the manual restart command still refer to it.\n */\nexport function parseLaunchedBy(raw: string | undefined, home: string): LaunchInfo | null {\n if (!raw) return null;\n try {\n const v = JSON.parse(raw) as Partial<LaunchInfo>;\n if (typeof v.binEntry !== \"string\" || typeof v.binVersion !== \"string\") return null;\n if (v.kind !== \"npx\" && v.kind !== \"npm\" && v.kind !== \"managed\") return null;\n return {\n binEntry: v.binEntry,\n binVersion: v.binVersion,\n kind: v.kind,\n source: \"packaged\",\n restartCommand: restartCommandFor(v.kind, v.binEntry),\n home,\n warning: null,\n };\n } catch {\n return null;\n }\n}\n\n/** The command that starts this copy again. */\nexport function restartCommandFor(kind: LaunchInfo[\"kind\"], entry: string): string {\n if (kind === \"npx\") return \"npx codeden\";\n if (kind === \"source\") return `node ${entry}`;\n return \"codeden\";\n}\n\n/** `x.y.z[-pre]` comparison (same rules as `compareVersions` in contracts). */\nexport function compareCore(a: string, b: string): number {\n const parse = (v: string) => {\n const dash = v.indexOf(\"-\");\n const core = dash === -1 ? v : v.slice(0, dash);\n return {\n nums: core.split(\".\").map((n) => Number.parseInt(n, 10) || 0),\n pre: dash === -1 ? \"\" : v.slice(dash + 1),\n };\n };\n const x = parse(a.replace(/^v/, \"\"));\n const y = parse(b.replace(/^v/, \"\"));\n for (let i = 0; i < 3; i++) {\n const d = (x.nums[i] ?? 0) - (y.nums[i] ?? 0);\n if (d !== 0) return d;\n }\n if (x.pre === y.pre) return 0;\n if (!x.pre) return 1;\n if (!y.pre) return -1;\n const xs = x.pre.split(\".\");\n const ys = y.pre.split(\".\");\n for (let i = 0; i < Math.max(xs.length, ys.length); i++) {\n const p = xs[i];\n const q = ys[i];\n if (p === undefined) return -1;\n if (q === undefined) return 1;\n const pn = /^\\d+$/.test(p);\n const qn = /^\\d+$/.test(q);\n if (pn && qn && Number(p) !== Number(q)) return Number(p) - Number(q);\n if (pn !== qn) return pn ? -1 : 1;\n if (!pn && p !== q) return p < q ? -1 : 1;\n }\n return 0;\n}\n\nfunction realEntry(entry: string): string {\n try {\n return realpathSync.native(entry);\n } catch {\n return resolve(entry);\n }\n}\n\nfunction realHome(home: string): string {\n try {\n return realpathSync.native(home);\n } catch {\n return resolve(home);\n }\n}\n\nfunction samePath(a: string, b: string): boolean {\n const norm = (p: string) =>\n process.platform === \"win32\" ? realEntry(p).toLowerCase() : realEntry(p);\n return norm(a) === norm(b);\n}\n","#!/usr/bin/env node\n/**\n * `codeden` entry (§16). Runs the launcher first: when `<home>/app/current.json` pins a newer\n * installed version, that version's CLI runs in this process instead. Then it records this\n * package's version for the bundle and loads the CLI proper (`main.ts`).\n *\n * Keep this file free of top-level `await` and of imports beyond `./launcher` and Node\n * built-ins: a newer version is loaded with `import()`, and the rest of the bundle must not\n * start loading before the decision is made. Every version keeps this contract.\n */\nimport { readFileSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport {\n decideLaunch,\n homeFromArgs,\n installKind,\n LAUNCH_KEY,\n LAUNCHED_BY_ENV,\n type LaunchInfo,\n parseLaunchedBy,\n restartCommandFor,\n VERSION_KEY,\n} from \"./launcher\";\n\ntype Globals = Record<string, unknown>;\n\n/** Loaded by an older copy's launcher, which handles our load errors (and falls back). */\nconst nested = (globalThis as Globals)[LAUNCH_KEY] !== undefined;\n\nfunction ownVersion(): string {\n try {\n const pkg = JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\"));\n return typeof pkg.version === \"string\" ? pkg.version : \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\nasync function run(): Promise<void> {\n const globals = globalThis as Globals;\n const args = process.argv.slice(2);\n const selfEntry = fileURLToPath(import.meta.url);\n const selfVersion = ownVersion();\n const home = homeFromArgs(args);\n let warning: string | null = null;\n\n if (!nested) {\n const kind = installKind(selfEntry, home);\n const inherited = parseLaunchedBy(process.env[LAUNCHED_BY_ENV], home);\n delete process.env[LAUNCHED_BY_ENV];\n const info: LaunchInfo = inherited ?? {\n binEntry: selfEntry,\n binVersion: selfVersion,\n kind,\n source: kind === \"source\" ? \"source\" : \"packaged\",\n restartCommand: restartCommandFor(kind, selfEntry),\n home,\n warning: null,\n };\n const decision = decideLaunch({ selfEntry, selfVersion, home });\n if (decision.kind === \"switch\") {\n globals[LAUNCH_KEY] = info;\n try {\n const mod = (await import(pathToFileURL(decision.entry).href)) as { started?: unknown };\n if (mod.started instanceof Promise) await mod.started;\n return;\n } catch (error) {\n // It failed before starting anything: run this copy and say why.\n const reason = error instanceof Error ? error.message.split(/\\r?\\n/)[0] : String(error);\n warning = `CodeDen ${decision.version} failed to load (${reason}); running ${selfVersion} instead.`;\n }\n } else {\n warning = decision.warning;\n }\n globals[LAUNCH_KEY] = { ...info, warning };\n if (warning) console.error(`codeden: ${warning}`);\n }\n\n globals[VERSION_KEY] = selfVersion;\n if (args.includes(\"--version\") || args.includes(\"-v\")) {\n console.log(selfVersion);\n process.exit(0);\n }\n await import(\"./main\");\n}\n\n/** Settles once this copy's CLI has loaded (an older launcher that switched here awaits it). */\nexport const started: Promise<void> = run();\nstarted.catch((error: unknown) => {\n if (nested) return;\n console.error(error instanceof Error ? error.message : error);\n process.exit(1);\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
CREATE TABLE `artifacts` (
|
|
2
|
+
`id` text PRIMARY KEY,
|
|
3
|
+
`kind` text NOT NULL,
|
|
4
|
+
`name` text NOT NULL,
|
|
5
|
+
`media_type` text NOT NULL,
|
|
6
|
+
`path` text NOT NULL,
|
|
7
|
+
`size_bytes` integer NOT NULL,
|
|
8
|
+
`sha256` text,
|
|
9
|
+
`project_id` text,
|
|
10
|
+
`session_id` text,
|
|
11
|
+
`thread_id` text,
|
|
12
|
+
`item_id` text,
|
|
13
|
+
`created_at` text NOT NULL
|
|
14
|
+
);
|
|
15
|
+
--> statement-breakpoint
|
|
16
|
+
CREATE TABLE `automation_runs` (
|
|
17
|
+
`id` text PRIMARY KEY,
|
|
18
|
+
`automation_id` text NOT NULL,
|
|
19
|
+
`project_id` text,
|
|
20
|
+
`status` text NOT NULL,
|
|
21
|
+
`triggered_by` text NOT NULL,
|
|
22
|
+
`started_by` text NOT NULL,
|
|
23
|
+
`purpose` text NOT NULL,
|
|
24
|
+
`work_key` text NOT NULL,
|
|
25
|
+
`scope` text NOT NULL,
|
|
26
|
+
`progress` text,
|
|
27
|
+
`skip_reason` text,
|
|
28
|
+
`session_id` text,
|
|
29
|
+
`started_at` text NOT NULL,
|
|
30
|
+
`finished_at` text,
|
|
31
|
+
`error` text
|
|
32
|
+
);
|
|
33
|
+
--> statement-breakpoint
|
|
34
|
+
CREATE TABLE `automations` (
|
|
35
|
+
`id` text PRIMARY KEY,
|
|
36
|
+
`name` text NOT NULL,
|
|
37
|
+
`description` text,
|
|
38
|
+
`enabled` integer DEFAULT false NOT NULL,
|
|
39
|
+
`source` text NOT NULL,
|
|
40
|
+
`template_id` text,
|
|
41
|
+
`trigger` text NOT NULL,
|
|
42
|
+
`action` text NOT NULL,
|
|
43
|
+
`target` text NOT NULL,
|
|
44
|
+
`guards` text NOT NULL,
|
|
45
|
+
`created_at` text NOT NULL,
|
|
46
|
+
`updated_at` text NOT NULL
|
|
47
|
+
);
|
|
48
|
+
--> statement-breakpoint
|
|
49
|
+
CREATE TABLE `events` (
|
|
50
|
+
`seq` integer PRIMARY KEY AUTOINCREMENT,
|
|
51
|
+
`session_id` text,
|
|
52
|
+
`type` text NOT NULL,
|
|
53
|
+
`payload` text NOT NULL,
|
|
54
|
+
`ts` text NOT NULL
|
|
55
|
+
);
|
|
56
|
+
--> statement-breakpoint
|
|
57
|
+
CREATE TABLE `github_issues` (
|
|
58
|
+
`project_id` text NOT NULL,
|
|
59
|
+
`number` integer NOT NULL,
|
|
60
|
+
`title` text NOT NULL,
|
|
61
|
+
`state` text NOT NULL,
|
|
62
|
+
`url` text NOT NULL,
|
|
63
|
+
`labels` text NOT NULL,
|
|
64
|
+
`author` text,
|
|
65
|
+
`etag` text,
|
|
66
|
+
`updated_at` text NOT NULL,
|
|
67
|
+
`synced_at` text NOT NULL,
|
|
68
|
+
CONSTRAINT `github_issues_pk` PRIMARY KEY(`project_id`, `number`)
|
|
69
|
+
);
|
|
70
|
+
--> statement-breakpoint
|
|
71
|
+
CREATE TABLE `github_prs` (
|
|
72
|
+
`project_id` text NOT NULL,
|
|
73
|
+
`number` integer NOT NULL,
|
|
74
|
+
`title` text NOT NULL,
|
|
75
|
+
`state` text NOT NULL,
|
|
76
|
+
`url` text NOT NULL,
|
|
77
|
+
`head_branch` text NOT NULL,
|
|
78
|
+
`base_branch` text NOT NULL,
|
|
79
|
+
`checks` text,
|
|
80
|
+
`session_id` text,
|
|
81
|
+
`etag` text,
|
|
82
|
+
`updated_at` text NOT NULL,
|
|
83
|
+
`synced_at` text NOT NULL,
|
|
84
|
+
CONSTRAINT `github_prs_pk` PRIMARY KEY(`project_id`, `number`)
|
|
85
|
+
);
|
|
86
|
+
--> statement-breakpoint
|
|
87
|
+
CREATE TABLE `inbox_items` (
|
|
88
|
+
`id` text PRIMARY KEY,
|
|
89
|
+
`kind` text NOT NULL,
|
|
90
|
+
`status` text NOT NULL,
|
|
91
|
+
`priority` text DEFAULT 'normal' NOT NULL,
|
|
92
|
+
`title` text NOT NULL,
|
|
93
|
+
`body` text,
|
|
94
|
+
`project_id` text,
|
|
95
|
+
`session_id` text,
|
|
96
|
+
`thread_id` text,
|
|
97
|
+
`item_id` text,
|
|
98
|
+
`request_id` text,
|
|
99
|
+
`issue` text,
|
|
100
|
+
`pr` text,
|
|
101
|
+
`automation_run_id` text,
|
|
102
|
+
`created_at` text NOT NULL,
|
|
103
|
+
`updated_at` text NOT NULL,
|
|
104
|
+
`resolved_at` text,
|
|
105
|
+
`resolution` text
|
|
106
|
+
);
|
|
107
|
+
--> statement-breakpoint
|
|
108
|
+
CREATE TABLE `items` (
|
|
109
|
+
`session_id` text NOT NULL,
|
|
110
|
+
`id` text NOT NULL,
|
|
111
|
+
`thread_id` text NOT NULL,
|
|
112
|
+
`turn_id` text NOT NULL,
|
|
113
|
+
`position` integer NOT NULL,
|
|
114
|
+
`kind` text NOT NULL,
|
|
115
|
+
`status` text NOT NULL,
|
|
116
|
+
`data` text NOT NULL,
|
|
117
|
+
`created_at` text NOT NULL,
|
|
118
|
+
`updated_at` text NOT NULL,
|
|
119
|
+
CONSTRAINT `items_pk` PRIMARY KEY(`session_id`, `id`)
|
|
120
|
+
);
|
|
121
|
+
--> statement-breakpoint
|
|
122
|
+
CREATE TABLE `projects` (
|
|
123
|
+
`id` text PRIMARY KEY,
|
|
124
|
+
`kind` text NOT NULL,
|
|
125
|
+
`name` text NOT NULL,
|
|
126
|
+
`slug` text NOT NULL,
|
|
127
|
+
`path` text NOT NULL,
|
|
128
|
+
`default_branch` text,
|
|
129
|
+
`default_provider` text,
|
|
130
|
+
`autonomy` text,
|
|
131
|
+
`autonomy_mode` text DEFAULT 'assisted' NOT NULL,
|
|
132
|
+
`vision_path` text DEFAULT '.codeden/VISION.md' NOT NULL,
|
|
133
|
+
`factory_limits` text,
|
|
134
|
+
`kill_switch` integer DEFAULT false NOT NULL,
|
|
135
|
+
`timezone` text,
|
|
136
|
+
`github` text,
|
|
137
|
+
`created_at` text NOT NULL,
|
|
138
|
+
`updated_at` text NOT NULL,
|
|
139
|
+
`archived_at` text
|
|
140
|
+
);
|
|
141
|
+
--> statement-breakpoint
|
|
142
|
+
CREATE TABLE `runner_state` (
|
|
143
|
+
`runner_id` text PRIMARY KEY,
|
|
144
|
+
`last_acked_seq` integer DEFAULT 0 NOT NULL,
|
|
145
|
+
`updated_at` text NOT NULL
|
|
146
|
+
);
|
|
147
|
+
--> statement-breakpoint
|
|
148
|
+
CREATE TABLE `sessions` (
|
|
149
|
+
`id` text PRIMARY KEY,
|
|
150
|
+
`project_id` text,
|
|
151
|
+
`role` text NOT NULL,
|
|
152
|
+
`parent_session_id` text,
|
|
153
|
+
`started_by` text NOT NULL,
|
|
154
|
+
`purpose` text NOT NULL,
|
|
155
|
+
`work_key` text NOT NULL,
|
|
156
|
+
`scope` text NOT NULL,
|
|
157
|
+
`progress` text,
|
|
158
|
+
`title` text,
|
|
159
|
+
`provider` text NOT NULL,
|
|
160
|
+
`model` text,
|
|
161
|
+
`effort` text,
|
|
162
|
+
`autonomy` text NOT NULL,
|
|
163
|
+
`status` text NOT NULL,
|
|
164
|
+
`cwd` text NOT NULL,
|
|
165
|
+
`worktree_path` text,
|
|
166
|
+
`branch` text,
|
|
167
|
+
`base_branch` text,
|
|
168
|
+
`issue` text,
|
|
169
|
+
`pr` text,
|
|
170
|
+
`resume_token` text,
|
|
171
|
+
`runner_id` text,
|
|
172
|
+
`automation_run_id` text,
|
|
173
|
+
`root_thread_id` text,
|
|
174
|
+
`created_at` text NOT NULL,
|
|
175
|
+
`updated_at` text NOT NULL,
|
|
176
|
+
`ended_at` text
|
|
177
|
+
);
|
|
178
|
+
--> statement-breakpoint
|
|
179
|
+
CREATE TABLE `threads` (
|
|
180
|
+
`session_id` text NOT NULL,
|
|
181
|
+
`id` text NOT NULL,
|
|
182
|
+
`parent_thread_id` text,
|
|
183
|
+
`parent_item_id` text,
|
|
184
|
+
`title` text,
|
|
185
|
+
`agent_type` text,
|
|
186
|
+
`created_at` text NOT NULL,
|
|
187
|
+
CONSTRAINT `threads_pk` PRIMARY KEY(`session_id`, `id`)
|
|
188
|
+
);
|
|
189
|
+
--> statement-breakpoint
|
|
190
|
+
CREATE TABLE `turns` (
|
|
191
|
+
`session_id` text NOT NULL,
|
|
192
|
+
`id` text NOT NULL,
|
|
193
|
+
`thread_id` text NOT NULL,
|
|
194
|
+
`status` text NOT NULL,
|
|
195
|
+
`started_at` text NOT NULL,
|
|
196
|
+
`completed_at` text,
|
|
197
|
+
`error` text,
|
|
198
|
+
CONSTRAINT `turns_pk` PRIMARY KEY(`session_id`, `id`)
|
|
199
|
+
);
|
|
200
|
+
--> statement-breakpoint
|
|
201
|
+
CREATE INDEX `automation_runs_automation` ON `automation_runs` (`automation_id`,`started_at`);--> statement-breakpoint
|
|
202
|
+
CREATE INDEX `automation_runs_work_key` ON `automation_runs` (`project_id`,`work_key`);--> statement-breakpoint
|
|
203
|
+
CREATE INDEX `events_session_seq` ON `events` (`session_id`,`seq`);--> statement-breakpoint
|
|
204
|
+
CREATE INDEX `events_type` ON `events` (`type`);--> statement-breakpoint
|
|
205
|
+
CREATE INDEX `inbox_status` ON `inbox_items` (`status`);--> statement-breakpoint
|
|
206
|
+
CREATE INDEX `items_thread` ON `items` (`session_id`,`thread_id`,`position`);--> statement-breakpoint
|
|
207
|
+
CREATE UNIQUE INDEX `projects_slug` ON `projects` (`slug`);--> statement-breakpoint
|
|
208
|
+
CREATE INDEX `sessions_project` ON `sessions` (`project_id`);--> statement-breakpoint
|
|
209
|
+
CREATE INDEX `sessions_status` ON `sessions` (`status`);--> statement-breakpoint
|
|
210
|
+
CREATE INDEX `sessions_work_key` ON `sessions` (`project_id`,`work_key`);
|