renovate-log-parser 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 +402 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +30 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/analyze.d.ts +24 -0
- package/dist/commands/analyze.js +114 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/detect-errors.d.ts +17 -0
- package/dist/commands/detect-errors.js +119 -0
- package/dist/commands/detect-errors.js.map +1 -0
- package/dist/commands/install-analyze-skill.d.ts +27 -0
- package/dist/commands/install-analyze-skill.js +181 -0
- package/dist/commands/install-analyze-skill.js.map +1 -0
- package/dist/commands/web.d.ts +12 -0
- package/dist/commands/web.js +103 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/core/analyzer.d.ts +89 -0
- package/dist/core/analyzer.js +179 -0
- package/dist/core/analyzer.js.map +1 -0
- package/dist/core/error-detector.d.ts +56 -0
- package/dist/core/error-detector.js +236 -0
- package/dist/core/error-detector.js.map +1 -0
- package/dist/core/filters.d.ts +136 -0
- package/dist/core/filters.js +95 -0
- package/dist/core/filters.js.map +1 -0
- package/dist/core/ignore-file.d.ts +52 -0
- package/dist/core/ignore-file.js +104 -0
- package/dist/core/ignore-file.js.map +1 -0
- package/dist/core/levels.d.ts +33 -0
- package/dist/core/levels.js +35 -0
- package/dist/core/levels.js.map +1 -0
- package/dist/core/parser.d.ts +57 -0
- package/dist/core/parser.js +201 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/query-builder.d.ts +47 -0
- package/dist/core/query-builder.js +155 -0
- package/dist/core/query-builder.js.map +1 -0
- package/dist/core/skill-template.d.ts +34 -0
- package/dist/core/skill-template.js +259 -0
- package/dist/core/skill-template.js.map +1 -0
- package/package.json +68 -0
- package/web/.output/nitro.json +15 -0
- package/web/.output/public/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 +0 -0
- package/web/.output/public/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 +0 -0
- package/web/.output/public/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 +0 -0
- package/web/.output/public/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 +0 -0
- package/web/.output/public/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 +0 -0
- package/web/.output/public/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 +0 -0
- package/web/.output/public/_nuxt/BWja8e3M.js +37 -0
- package/web/.output/public/_nuxt/BgApMHS1.js +1 -0
- package/web/.output/public/_nuxt/CGPWRqbc.js +1 -0
- package/web/.output/public/_nuxt/DlAUqK2U.js +1 -0
- package/web/.output/public/_nuxt/Sgtec1U0.js +1 -0
- package/web/.output/public/_nuxt/builds/latest.json +1 -0
- package/web/.output/public/_nuxt/builds/meta/c4723e49-0623-47af-ae79-9ab6428bdcc1.json +1 -0
- package/web/.output/public/_nuxt/entry.9mB-pyEY.css +1 -0
- package/web/.output/public/_nuxt/error-404.B_PvSG-P.css +1 -0
- package/web/.output/public/_nuxt/error-500.CghkKCEr.css +1 -0
- package/web/.output/public/_nuxt/index.BlvAG7F6.css +1 -0
- package/web/.output/public/favicon.ico +0 -0
- package/web/.output/server/chunks/_/error-500.mjs +19 -0
- package/web/.output/server/chunks/_/error-500.mjs.map +1 -0
- package/web/.output/server/chunks/_/icons.mjs +6153 -0
- package/web/.output/server/chunks/_/icons.mjs.map +1 -0
- package/web/.output/server/chunks/_/icons2.mjs +11494 -0
- package/web/.output/server/chunks/_/icons2.mjs.map +1 -0
- package/web/.output/server/chunks/build/_plugin-vue_export-helper-1tPrXgE0.mjs +10 -0
- package/web/.output/server/chunks/build/_plugin-vue_export-helper-1tPrXgE0.mjs.map +1 -0
- package/web/.output/server/chunks/build/client.precomputed.mjs +4 -0
- package/web/.output/server/chunks/build/client.precomputed.mjs.map +1 -0
- package/web/.output/server/chunks/build/error-404-DyaaQUIS.mjs +106 -0
- package/web/.output/server/chunks/build/error-404-DyaaQUIS.mjs.map +1 -0
- package/web/.output/server/chunks/build/error-404-styles.9cNA4arh.mjs +8 -0
- package/web/.output/server/chunks/build/error-404-styles.9cNA4arh.mjs.map +1 -0
- package/web/.output/server/chunks/build/error-500-CVSP-p02.mjs +89 -0
- package/web/.output/server/chunks/build/error-500-CVSP-p02.mjs.map +1 -0
- package/web/.output/server/chunks/build/error-500-styles.BX54ZlkH.mjs +8 -0
- package/web/.output/server/chunks/build/error-500-styles.BX54ZlkH.mjs.map +1 -0
- package/web/.output/server/chunks/build/index-88dXYOxO.mjs +19675 -0
- package/web/.output/server/chunks/build/index-88dXYOxO.mjs.map +1 -0
- package/web/.output/server/chunks/build/index-styles.V2iua2bE.mjs +8 -0
- package/web/.output/server/chunks/build/index-styles.V2iua2bE.mjs.map +1 -0
- package/web/.output/server/chunks/build/server.mjs +7910 -0
- package/web/.output/server/chunks/build/server.mjs.map +1 -0
- package/web/.output/server/chunks/build/styles.mjs +10 -0
- package/web/.output/server/chunks/build/styles.mjs.map +1 -0
- package/web/.output/server/chunks/nitro/nitro.mjs +6944 -0
- package/web/.output/server/chunks/nitro/nitro.mjs.map +1 -0
- package/web/.output/server/chunks/routes/api/fields.get.mjs +27 -0
- package/web/.output/server/chunks/routes/api/fields.get.mjs.map +1 -0
- package/web/.output/server/chunks/routes/api/findings.get.mjs +30 -0
- package/web/.output/server/chunks/routes/api/findings.get.mjs.map +1 -0
- package/web/.output/server/chunks/routes/api/log/contents.post.mjs +29 -0
- package/web/.output/server/chunks/routes/api/log/contents.post.mjs.map +1 -0
- package/web/.output/server/chunks/routes/api/log/path.post.mjs +30 -0
- package/web/.output/server/chunks/routes/api/log/path.post.mjs.map +1 -0
- package/web/.output/server/chunks/routes/api/repositories.get.mjs +27 -0
- package/web/.output/server/chunks/routes/api/repositories.get.mjs.map +1 -0
- package/web/.output/server/chunks/routes/api/rows.get.mjs +48 -0
- package/web/.output/server/chunks/routes/api/rows.get.mjs.map +1 -0
- package/web/.output/server/chunks/routes/renderer.mjs +451 -0
- package/web/.output/server/chunks/routes/renderer.mjs.map +1 -0
- package/web/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
- package/web/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
- package/web/.output/server/index.mjs +16 -0
- package/web/.output/server/index.mjs.map +1 -0
- package/web/.output/server/node_modules/.nitro/hookable@5.5.3/dist/index.mjs +290 -0
- package/web/.output/server/node_modules/.nitro/hookable@5.5.3/package.json +49 -0
- package/web/.output/server/node_modules/.nitro/hookable@6.1.1/dist/index.mjs +257 -0
- package/web/.output/server/node_modules/.nitro/hookable@6.1.1/package.json +53 -0
- package/web/.output/server/node_modules/@babel/parser/lib/index.js +14599 -0
- package/web/.output/server/node_modules/@babel/parser/package.json +50 -0
- package/web/.output/server/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +1038 -0
- package/web/.output/server/node_modules/@floating-ui/core/package.json +63 -0
- package/web/.output/server/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +789 -0
- package/web/.output/server/node_modules/@floating-ui/dom/package.json +72 -0
- package/web/.output/server/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +165 -0
- package/web/.output/server/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs +136 -0
- package/web/.output/server/node_modules/@floating-ui/utils/package.json +70 -0
- package/web/.output/server/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs +190 -0
- package/web/.output/server/node_modules/@floating-ui/vue/package.json +71 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/colors/index.js +295 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/colors/keywords.js +701 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/css/common.js +75 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/css/format.js +39 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/css/icon.js +47 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/css/icons.js +128 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/customisations/bool.js +19 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/customisations/defaults.js +13 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/customisations/flip.js +17 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/customisations/merge.js +16 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/customisations/rotate.js +30 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/cleanup.js +78 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/convert.js +100 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/data.js +28 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/format.js +58 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/parse.js +48 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/base.js +203 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/create.js +33 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/numbers.js +132 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/similar.js +165 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/tree.js +79 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/replace/find.js +92 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/replace/replace.js +26 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/components.js +76 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/missing.js +66 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/name.js +45 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/parse.js +103 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/similar.js +36 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/tree.js +92 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/variations.js +62 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon/defaults.js +25 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon/merge.js +16 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon/name.js +57 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon/square.js +33 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon/transformations.js +12 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/convert-info.js +125 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/expand.js +19 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icon.js +25 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icons.js +36 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/minify.js +91 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/parse.js +46 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/tree.js +23 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/validate-basic.js +42 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/validate.js +123 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/index.js +52 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/loader/custom.js +30 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/loader/loader.js +26 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/loader/modern.js +27 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/loader/utils.js +105 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/misc/objects.js +26 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/misc/strings.js +26 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/misc/title.js +9 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/build.js +113 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/defs.js +31 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/encode-svg-for-css.js +13 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/html.js +9 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/id.js +41 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/inner-html.js +22 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/parse.js +67 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/pretty.js +54 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/size.js +27 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/trim.js +7 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/url.js +22 -0
- package/web/.output/server/node_modules/@iconify/utils/lib/svg/viewbox.js +8 -0
- package/web/.output/server/node_modules/@iconify/utils/package.json +119 -0
- package/web/.output/server/node_modules/@iconify/vue/dist/iconify.mjs +1896 -0
- package/web/.output/server/node_modules/@iconify/vue/package.json +62 -0
- package/web/.output/server/node_modules/@tanstack/virtual-core/dist/esm/index.js +1268 -0
- package/web/.output/server/node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js +34 -0
- package/web/.output/server/node_modules/@tanstack/virtual-core/dist/esm/utils.js +74 -0
- package/web/.output/server/node_modules/@tanstack/virtual-core/package.json +56 -0
- package/web/.output/server/node_modules/@tanstack/vue-virtual/dist/esm/index.js +66 -0
- package/web/.output/server/node_modules/@tanstack/vue-virtual/package.json +68 -0
- package/web/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6759 -0
- package/web/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
- package/web/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +689 -0
- package/web/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
- package/web/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1413 -0
- package/web/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
- package/web/.output/server/node_modules/@vue/devtools-api/dist/index.js +2 -0
- package/web/.output/server/node_modules/@vue/devtools-api/package.json +34 -0
- package/web/.output/server/node_modules/@vue/devtools-kit/dist/index.js +5670 -0
- package/web/.output/server/node_modules/@vue/devtools-kit/node_modules/hookable/dist/index.mjs +290 -0
- package/web/.output/server/node_modules/@vue/devtools-kit/node_modules/hookable/package.json +49 -0
- package/web/.output/server/node_modules/@vue/devtools-kit/package.json +44 -0
- package/web/.output/server/node_modules/@vue/devtools-shared/dist/index.js +239 -0
- package/web/.output/server/node_modules/@vue/devtools-shared/package.json +33 -0
- package/web/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1899 -0
- package/web/.output/server/node_modules/@vue/reactivity/package.json +55 -0
- package/web/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6940 -0
- package/web/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
- package/web/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1822 -0
- package/web/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
- package/web/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +896 -0
- package/web/.output/server/node_modules/@vue/server-renderer/package.json +55 -0
- package/web/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +604 -0
- package/web/.output/server/node_modules/@vue/shared/package.json +47 -0
- package/web/.output/server/node_modules/@vueuse/core/dist/index.js +8464 -0
- package/web/.output/server/node_modules/@vueuse/core/package.json +49 -0
- package/web/.output/server/node_modules/@vueuse/shared/dist/index.js +2013 -0
- package/web/.output/server/node_modules/@vueuse/shared/package.json +42 -0
- package/web/.output/server/node_modules/aria-hidden/dist/es5/index.js +174 -0
- package/web/.output/server/node_modules/aria-hidden/package.json +71 -0
- package/web/.output/server/node_modules/birpc/dist/index.mjs +291 -0
- package/web/.output/server/node_modules/birpc/package.json +57 -0
- package/web/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
- package/web/.output/server/node_modules/consola/dist/core.mjs +512 -0
- package/web/.output/server/node_modules/consola/dist/index.mjs +651 -0
- package/web/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
- package/web/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
- package/web/.output/server/node_modules/consola/package.json +136 -0
- package/web/.output/server/node_modules/devalue/index.js +4 -0
- package/web/.output/server/node_modules/devalue/package.json +40 -0
- package/web/.output/server/node_modules/devalue/src/base64.js +60 -0
- package/web/.output/server/node_modules/devalue/src/constants.js +12 -0
- package/web/.output/server/node_modules/devalue/src/parse.js +283 -0
- package/web/.output/server/node_modules/devalue/src/stringify.js +401 -0
- package/web/.output/server/node_modules/devalue/src/uneval.js +552 -0
- package/web/.output/server/node_modules/devalue/src/utils.js +160 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
- package/web/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
- package/web/.output/server/node_modules/entities/package.json +120 -0
- package/web/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
- package/web/.output/server/node_modules/estree-walker/package.json +37 -0
- package/web/.output/server/node_modules/hookable/dist/index.mjs +257 -0
- package/web/.output/server/node_modules/hookable/package.json +53 -0
- package/web/.output/server/node_modules/nostics/dist/index.mjs +179 -0
- package/web/.output/server/node_modules/nostics/package.json +124 -0
- package/web/.output/server/node_modules/perfect-debounce/dist/index.mjs +89 -0
- package/web/.output/server/node_modules/perfect-debounce/package.json +41 -0
- package/web/.output/server/node_modules/rou3/dist/index.mjs +501 -0
- package/web/.output/server/node_modules/rou3/package.json +48 -0
- package/web/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
- package/web/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
- package/web/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
- package/web/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
- package/web/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
- package/web/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
- package/web/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
- package/web/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
- package/web/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
- package/web/.output/server/node_modules/source-map-js/lib/util.js +594 -0
- package/web/.output/server/node_modules/source-map-js/package.json +71 -0
- package/web/.output/server/node_modules/source-map-js/source-map.js +8 -0
- package/web/.output/server/node_modules/srvx/dist/_chunks/_body-limit.mjs +39 -0
- package/web/.output/server/node_modules/srvx/dist/_chunks/_plugins.mjs +56 -0
- package/web/.output/server/node_modules/srvx/dist/_chunks/_trust-proxy.mjs +58 -0
- package/web/.output/server/node_modules/srvx/dist/_chunks/_url.mjs +134 -0
- package/web/.output/server/node_modules/srvx/dist/_chunks/_utils.mjs +15 -0
- package/web/.output/server/node_modules/srvx/dist/_chunks/_utils2.mjs +75 -0
- package/web/.output/server/node_modules/srvx/dist/adapters/node.mjs +976 -0
- package/web/.output/server/node_modules/srvx/package.json +102 -0
- package/web/.output/server/node_modules/tailwind-merge/dist/bundle-mjs.mjs +3365 -0
- package/web/.output/server/node_modules/tailwind-merge/package.json +93 -0
- package/web/.output/server/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js +112 -0
- package/web/.output/server/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js +269 -0
- package/web/.output/server/node_modules/tailwind-variants/dist/index.js +38 -0
- package/web/.output/server/node_modules/tailwind-variants/package.json +122 -0
- package/web/.output/server/node_modules/tailwindcss/dist/chunk-X4GG3EDV.mjs +1 -0
- package/web/.output/server/node_modules/tailwindcss/dist/colors.mjs +1 -0
- package/web/.output/server/node_modules/tailwindcss/package.json +89 -0
- package/web/.output/server/node_modules/ufo/dist/index.mjs +645 -0
- package/web/.output/server/node_modules/ufo/package.json +48 -0
- package/web/.output/server/node_modules/unhead/dist/index.mjs +9 -0
- package/web/.output/server/node_modules/unhead/dist/parser.mjs +508 -0
- package/web/.output/server/node_modules/unhead/dist/plugins.mjs +101 -0
- package/web/.output/server/node_modules/unhead/dist/scripts.mjs +30 -0
- package/web/.output/server/node_modules/unhead/dist/server.mjs +180 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.B3VbJo7Y.mjs +207 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.BYvz9V1x.mjs +43 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.BnoAbrHA.mjs +269 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.CaI5ZD4O.mjs +182 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.CbpEuj3y.mjs +71 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.D4vSFytZ.mjs +236 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.DQc16pHI.mjs +196 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.Dh1cQCTe.mjs +44 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.TxTMM7cM.mjs +166 -0
- package/web/.output/server/node_modules/unhead/dist/shared/unhead.yem5I2v_.mjs +38 -0
- package/web/.output/server/node_modules/unhead/dist/utils.mjs +5 -0
- package/web/.output/server/node_modules/unhead/node_modules/hookable/dist/index.mjs +257 -0
- package/web/.output/server/node_modules/unhead/node_modules/hookable/package.json +53 -0
- package/web/.output/server/node_modules/unhead/package.json +105 -0
- package/web/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
- package/web/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
- package/web/.output/server/node_modules/vue/index.js +7 -0
- package/web/.output/server/node_modules/vue/index.mjs +1 -0
- package/web/.output/server/node_modules/vue/package.json +112 -0
- package/web/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
- package/web/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +249 -0
- package/web/.output/server/node_modules/vue-bundle-renderer/package.json +57 -0
- package/web/.output/server/node_modules/vue-demi/lib/index.mjs +34 -0
- package/web/.output/server/node_modules/vue-demi/package.json +47 -0
- package/web/.output/server/node_modules/vue-router/dist/devtools-Bpr7ZAVB.js +1056 -0
- package/web/.output/server/node_modules/vue-router/dist/useApi-CROJJdhE.js +436 -0
- package/web/.output/server/node_modules/vue-router/dist/vue-router.js +1543 -0
- package/web/.output/server/node_modules/vue-router/package.json +214 -0
- package/web/.output/server/node_modules/vue-router/vue-router.node.mjs +2 -0
- package/web/.output/server/package.json +51 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Marius Shekow
|
|
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
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
# renovate-log-parser
|
|
2
|
+
|
|
3
|
+
`renovate-log-parser` is a CLI and web interface for manual and automated analyses of Renovate Bot debug logs (JSONL-formatted), which you get by either downloading a run's log from [https://developer.mend.io](https://developer.mend.io) (if you use Mend's _hosted_ GitHub app), or by setting the `LOG_FILE` environment variable for self-hosted Renovate.
|
|
4
|
+
|
|
5
|
+
`renovate-log-parser` offers the following commands:
|
|
6
|
+
|
|
7
|
+
- `detect-errors` is meant for CI pipelines; it scans the log for build-breaking problems and warnings and exits with error, helping you detect and solve hidden Renovate issues you would otherwise miss
|
|
8
|
+
- `analyze` (with a corresponding SKILL.md) tells your coding agent (Codex, Copilot, Claude Code, etc.) about the log's structure, allowing it to efficiently read only the most relevant log lines in a token-efficient way, so that it can quickly (and cheaply) diagnose Renovate problems
|
|
9
|
+
- `web` starts a temporary local web server that parses the log and serves a browser-based interface that you use to analyze and filter Renovate logs of _any_ length; this solves the problem of tedious, manual “grep”-like analyses where your text editor chokes on too large files
|
|
10
|
+
|
|
11
|
+
## Background (why do I need this)
|
|
12
|
+
|
|
13
|
+
This tool was born out of the need to solve various problems, such as:
|
|
14
|
+
|
|
15
|
+
- Setting up Renovate in a project with many repositories (and development teams) is easy. But over time, subtle problems creep in that no one seems to notice. For instance, Renovate might stop creating PRs for intricate reasons, and it only posts a small notice-block about this problem to the _Dependency dashboard_ GitHub issue. Unfortunately, the development teams use _Jira_ for issues and never look at GitHub issues, so the problems remain unnoticed.
|
|
16
|
+
- In practice, developers sometimes have problems with Renovate Bot. They wonder why Renovate does not do certain things (even though they think it should), or they are annoyed that Renovate does certain things they don't want it to do. Manual analysis (given the huge debug-level log) is very difficult for non-experts, as important information is often buried in _debug_\-level log lines rather than warning- or error-level log lines. And AI agents miss important information in large log files, or spend enormous amounts of tokens for the analysis. As a consequence, people tend to accept a sub-optimal Renovate configuration or become frustrated with Renovate in general.
|
|
17
|
+
|
|
18
|
+
Consequently, a tool was needed that detects such subtle problems automatically, and that simplifies manual and AI-assisted analyses of Renovate log files.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Run directly with `npx` (no install required):
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Detect build-breaking problems in a Renovate JSONL log (CI-friendly)
|
|
26
|
+
npx renovate-log-parser detect-errors path/to/renovate.jsonl
|
|
27
|
+
|
|
28
|
+
# Also write a machine-readable JSON report
|
|
29
|
+
npx renovate-log-parser detect-errors path/to/renovate.jsonl --out report.json
|
|
30
|
+
|
|
31
|
+
# Emit token-efficient stats for an AI coding agent
|
|
32
|
+
npx renovate-log-parser analyze path/to/renovate.jsonl
|
|
33
|
+
|
|
34
|
+
# Explore a log interactively in the Nuxt-based web UI
|
|
35
|
+
npx renovate-log-parser web path/to/renovate.jsonl
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or install globally:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g renovate-log-parser
|
|
42
|
+
renovate-log-parser --help
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Commands
|
|
46
|
+
|
|
47
|
+
### `detect-errors <path>`
|
|
48
|
+
|
|
49
|
+
Deterministically scans a Renovate debug log (JSONL) for build-breaking
|
|
50
|
+
problems and warnings — designed to gate CI. It prints a human-readable summary
|
|
51
|
+
to stdout and, with `--out`, writes a stable machine-readable JSON report.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
renovate-log-parser detect-errors renovate.jsonl [--out report.json] \
|
|
55
|
+
[--ignore-file rules.json] [--fail-on-warn]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
| Arg / option | Default | Description |
|
|
59
|
+
| ---------------- | ----------------------------------- | ------------------------------------------------- |
|
|
60
|
+
| `<path>` | **required** | Path to the Renovate JSONL log |
|
|
61
|
+
| `--out` | (none) | Also write the machine-readable JSON report here |
|
|
62
|
+
| `--ignore-file` | `./renovate-log-parser.ignore.json` | Ignore-rules file (a missing file means no rules) |
|
|
63
|
+
| `--fail-on-warn` | `false` | Make warning findings affect the exit code |
|
|
64
|
+
|
|
65
|
+
**Exit codes:**
|
|
66
|
+
|
|
67
|
+
- `0` = no non-ignored errors
|
|
68
|
+
- `1` = ≥1 non-ignored error (or, with `--fail-on-warn`, ≥1 non-ignored warning)
|
|
69
|
+
- `2` = tool/usage error (bad path, unreadable, bad args, malformed ignore file)
|
|
70
|
+
|
|
71
|
+
**Detected categories**:
|
|
72
|
+
|
|
73
|
+
- **Errors** (things Renovate would _not_ otherwise flag in a PR comment):
|
|
74
|
+
- `host-error-abort`: when Renovate skipped creating/updating PRs for a repository because one or more well-known registries were unreachable; looks for a `Repository finished` entry with `result: "external-host-error"`
|
|
75
|
+
- `log-error`: lines with error level (level=50)
|
|
76
|
+
- `log-fatal`: lines with fatal level (level=60)
|
|
77
|
+
- `config-migration`: when a repository needs a renovate.json migration; looks for a `Config migration necessary` entry carrying `oldConfig` + `newConfig`
|
|
78
|
+
- `abandoned-package`: when a repository contains one or more abandoned packages for which Renovate would not create a PR; reports one finding per package in an `Abandoned package statistics` entry
|
|
79
|
+
- **Warnings**:
|
|
80
|
+
- `log-warn`: lines with warning level (level=40)
|
|
81
|
+
- `err-object`: reports lines with an `err` object, such as rawExec errors
|
|
82
|
+
- `repo-problem`: reports entries in `repoProblems` lines (which is a string-array)
|
|
83
|
+
|
|
84
|
+
The JSON report's `counts` map always lists every category (zeros included) for stable run-over-run diffing in CI.
|
|
85
|
+
|
|
86
|
+
**Ignore file** — silence expected findings with stable keys (line numbers shift
|
|
87
|
+
as logs grow). A finding is ignored iff an active rule matches on `category` AND
|
|
88
|
+
(optional `message` glob) AND (optional exact `repository`). Rules past their
|
|
89
|
+
optional `expires` date are reported to stderr and skipped:
|
|
90
|
+
|
|
91
|
+
```jsonc
|
|
92
|
+
{
|
|
93
|
+
"version": 1,
|
|
94
|
+
"rules": [
|
|
95
|
+
{
|
|
96
|
+
"category": "err-object",
|
|
97
|
+
"message": "*lock file error*", // optional glob (* and ?)
|
|
98
|
+
"repository": "owner/repo", // optional exact match
|
|
99
|
+
"reason": "flaky nuget restore, JIRA-123", // optional, for humans
|
|
100
|
+
"expires": "2026-09-01", // optional ISO date; past => inactive + warn
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Ignored findings still appear in the report with `"ignored": true`, but are
|
|
107
|
+
excluded from the summary counts and the exit code.
|
|
108
|
+
|
|
109
|
+
### `analyze <path>`
|
|
110
|
+
|
|
111
|
+
Emits token-efficient structure for an AI coding agent (or a human). Without
|
|
112
|
+
`--print` it writes compact single-line JSON whole-log **stats** to stdout; with `--print` it
|
|
113
|
+
streams a filtered, line-ranged, limited **JSONL** slice of the log (one entry
|
|
114
|
+
per line). The intended loop is: read the stats, pick the interesting line
|
|
115
|
+
range, then `--print` just that range — reading only what you need.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Whole-log stats: level counts + per-repository structure
|
|
119
|
+
renovate-log-parser analyze renovate.jsonl
|
|
120
|
+
|
|
121
|
+
# Print lines 500–560, keeping only npm-manager entries, first 20
|
|
122
|
+
renovate-log-parser analyze renovate.jsonl --print \
|
|
123
|
+
--line-from 500 --line-to 560 --filter manager:npm --limit 20
|
|
124
|
+
|
|
125
|
+
# Print every entry whose msg starts with "Found match at" (case-insensitive)
|
|
126
|
+
renovate-log-parser analyze renovate.jsonl --print \
|
|
127
|
+
--filter-with-wildcard "msg:Found match at*"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
| Arg / option | Default | Description |
|
|
131
|
+
| --------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
132
|
+
| `<path>` | **required** | Path to the Renovate JSONL log |
|
|
133
|
+
| `--print` | `false` | Print matching log lines (JSONL) instead of stats |
|
|
134
|
+
| `--ignored-fields` | `v,time,logContext,pid,hostname,name` | CSV of root keys to strip in print mode (`msg` kept) |
|
|
135
|
+
| `--line-from` / `--line-to` | (none) | Inclusive 0-indexed line range (print mode) |
|
|
136
|
+
| `--limit` | `50` | Max lines to print (print mode) |
|
|
137
|
+
| `--filter` | (none) | `key:val` scalar-**equals** filter, repeatable, AND'd |
|
|
138
|
+
| `--filter-with-wildcard` | (none) | `key:pattern` wildcard filter (`*` = any run), case-insensitive, repeatable, AND'd |
|
|
139
|
+
| `--include-original-line` | `false` | Add `_oL` (0-indexed source line) to each object |
|
|
140
|
+
|
|
141
|
+
**Stats mode** reports `levelCounts` (entries per numeric level) and a `repos`
|
|
142
|
+
array — each repository's line span, unique branches, the rowids of its
|
|
143
|
+
`branches info extended` and `packageFiles with updates` entries, its
|
|
144
|
+
`repoProblems`, and its dependency inventory (`depNames`/`packageNames`, unioning
|
|
145
|
+
root-level keys with the `packageFiles with updates` config).
|
|
146
|
+
|
|
147
|
+
**Print mode** selects rows in order line-range -> filters -> `--limit` (first N
|
|
148
|
+
by line order). Output is JSONL on stdout with the ignored root fields stripped
|
|
149
|
+
(`msg` is never stripped); when the limit caps the result, a truncation notice is
|
|
150
|
+
written to **stderr** so stdout stays a clean, pipeable stream.
|
|
151
|
+
|
|
152
|
+
Both filter flags target a single root-level key and can be repeated (all
|
|
153
|
+
conditions are AND'd, alongside any line range). `--filter` matches the value
|
|
154
|
+
**exactly**; its value is auto-typed so it compares against the correctly-typed
|
|
155
|
+
JSON — `true`/`false` become booleans and plain numbers become numbers (so
|
|
156
|
+
`level:30` matches the numeric `level`), while everything else (including
|
|
157
|
+
leading-zero or dotted values like `007` / `1.2.3`) stays a string.
|
|
158
|
+
`--filter-with-wildcard` treats `*` as "any run of characters" (nothing else is
|
|
159
|
+
special — `?` and `%` are literal) and matches case-insensitively. A pattern is
|
|
160
|
+
anchored as written, so use a leading/trailing `*` for prefix/suffix/contains
|
|
161
|
+
matching (e.g. `msg:*lock file*`).
|
|
162
|
+
|
|
163
|
+
**Exit codes:** `0` = success · `2` = tool/usage error (bad path, unreadable, bad
|
|
164
|
+
filter token).
|
|
165
|
+
|
|
166
|
+
### `install-analyze-skill`
|
|
167
|
+
|
|
168
|
+
Writes (or updates) a `renovate-log-analyzer` **SKILL.md** that teaches an AI
|
|
169
|
+
coding agent (Codex, Copilot, Claude Code, …) how to drive the `analyze` command
|
|
170
|
+
token-efficiently. It can optionally embed instructions for fetching the
|
|
171
|
+
log from GitHub self-hosted Renovate workflows via the `gh` CLI.
|
|
172
|
+
|
|
173
|
+
The command is interactive by default: it asks whether to install the skill
|
|
174
|
+
**locally** or **globally**, and whether to include the GitHub-fetch section
|
|
175
|
+
(and if so, the base URL, organization, repository, and Renovate workflow
|
|
176
|
+
filename). All answers can also be supplied as flags to run non-interactively
|
|
177
|
+
(e.g. in CI); any flag you pass skips its prompt.
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Interactive
|
|
181
|
+
npx renovate-log-parser install-analyze-skill
|
|
182
|
+
|
|
183
|
+
# Non-interactive, local, with a GitHub Enterprise fetch section
|
|
184
|
+
npx renovate-log-parser install-analyze-skill --scope local --with-gh \
|
|
185
|
+
--gh-base-url github.example.com \
|
|
186
|
+
--gh-org acme --gh-repo app --gh-workflow renovate.yml
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
The skill is written to
|
|
190
|
+
`<root>/.agents/skills/renovate-log-analyzer/SKILL.md`, where `<root>` is the
|
|
191
|
+
current working directory (`local`) or your home directory (`global`).
|
|
192
|
+
|
|
193
|
+
| Arg / option | Default | Description |
|
|
194
|
+
| --------------- | -------------- | ---------------------------------------------------------------------- |
|
|
195
|
+
| `--scope` | (prompt) | `local` (`<cwd>/.agents/skills`) or `global` (`~/.agents/skills`) |
|
|
196
|
+
| `--with-gh` | (prompt) | Include a "fetch logs from GitHub via `gh`" section |
|
|
197
|
+
| `--gh-base-url` | (prompt if gh) | GitHub Enterprise host (e.g. `github.example.com`); blank = github.com |
|
|
198
|
+
| `--gh-org` | (prompt if gh) | GitHub organization/owner |
|
|
199
|
+
| `--gh-repo` | (prompt if gh) | Repository name |
|
|
200
|
+
| `--gh-workflow` | (prompt if gh) | Filename of the workflow that runs Renovate (e.g. `renovate.yml`) |
|
|
201
|
+
| `--yes` | `false` | Skip all prompts; fail if a required answer is missing |
|
|
202
|
+
|
|
203
|
+
**Exit codes:** `0` = success · `2` = tool/usage error (missing required answer
|
|
204
|
+
when non-interactive, or a write failure).
|
|
205
|
+
|
|
206
|
+
### `web`
|
|
207
|
+
|
|
208
|
+
Starts the bundled [Nuxt](https://nuxt.com) web UI (with [Nuxt UI](https://ui.nuxt.com)
|
|
209
|
+
and Nuxt's built-in Nitro server) for interactive, filtered log exploration. Pass
|
|
210
|
+
an optional log path to open it automatically; otherwise use the in-app file
|
|
211
|
+
picker. The server keeps the parsed log in memory (SQLite-backed) and streams
|
|
212
|
+
paged rows to the client.
|
|
213
|
+
|
|
214
|
+
| Arg / option | Default | Description |
|
|
215
|
+
| ------------ | ----------- | -------------------------------------------------- |
|
|
216
|
+
| `[path]` | (none) | Renovate JSONL log to open automatically in the UI |
|
|
217
|
+
| `--port` | `3000` | Port to listen on |
|
|
218
|
+
| `--host` | `localhost` | Host to bind to |
|
|
219
|
+
| `--open` | `true` | Open the web UI in your browser |
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Open the UI on a specific log
|
|
223
|
+
renovate-log-parser web path/to/renovate.jsonl
|
|
224
|
+
|
|
225
|
+
# Just start the server (pick a file from inside the UI)
|
|
226
|
+
renovate-log-parser web --port 4000 --no-open
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**The viewer** renders every log line in a virtualized, fixed-height list — a
|
|
230
|
+
colored level glyph (`T/D/I/W/E/F`) plus the entry's `msg`.
|
|
231
|
+
Clicking a row's arrow opens a details slide-over with a recursive,
|
|
232
|
+
collapsible JSON tree of the full entry.
|
|
233
|
+
|
|
234
|
+
**Filtering** (all AND'd, debounced):
|
|
235
|
+
|
|
236
|
+
- **Log levels** — a dropdown to show/hide entries by level.
|
|
237
|
+
- **Repositories** — include/exclude by repository, plus a
|
|
238
|
+
"Repository-independent" pseudo-group for entries with no `repository`.
|
|
239
|
+
- **Ignored fields** — hide noisy root keys from the row list (`msg` is always
|
|
240
|
+
kept).
|
|
241
|
+
- **Free-text search** — a field selector whose first entry, **Raw search**,
|
|
242
|
+
matches the whole line (any key or value); any other field does a
|
|
243
|
+
case-insensitive `*`-wildcard match scoped to that field.
|
|
244
|
+
- **Pills** — dynamic, individually toggleable/removable filters created from row
|
|
245
|
+
and JSON-tree context menus (e.g. show-only/hide a `field`, or a
|
|
246
|
+
`field == value`; nested keys create a scoped "contains" search on their
|
|
247
|
+
top-level ancestor).
|
|
248
|
+
|
|
249
|
+
## Development
|
|
250
|
+
|
|
251
|
+
This repository is an npm workspace: the publishable CLI lives at the root and
|
|
252
|
+
the Nuxt app lives in [`web/`](./web).
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Install all workspace dependencies
|
|
256
|
+
npm install
|
|
257
|
+
|
|
258
|
+
# Run the CLI from source (no build step) via tsx
|
|
259
|
+
npm run dev:cli -- detect-errors path/to/renovate.jsonl
|
|
260
|
+
npm run dev:cli -- web
|
|
261
|
+
|
|
262
|
+
# Run the Nuxt app in dev mode (HMR) directly
|
|
263
|
+
npm run dev:web
|
|
264
|
+
|
|
265
|
+
# Build everything (Nuxt .output + compiled CLI)
|
|
266
|
+
npm run build
|
|
267
|
+
|
|
268
|
+
# Run the compiled CLI
|
|
269
|
+
node dist/cli.js --help
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Testing
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
npm test # Unit + fixture tests (fast; no build, no network)
|
|
276
|
+
npm run test:fixtures # Only the fixture tests
|
|
277
|
+
npm run test:e2e # Packaging E2E tests (slow: builds, packs, installs)
|
|
278
|
+
|
|
279
|
+
# One-off, needed by the browser tests inside the E2E suite:
|
|
280
|
+
npx playwright-core install chromium
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Three suites, each catching a different failure class:
|
|
284
|
+
|
|
285
|
+
- **Unit tests** (`src/core/__tests__/*.test.ts`) — synthetic, hand-written
|
|
286
|
+
JSONL logs asserting the detection contracts in isolation.
|
|
287
|
+
- **Fixture tests** (`src/core/__tests__/fixtures.test.ts`) — the full
|
|
288
|
+
Parser → ErrorDetector/Analyzer pipeline run over _real_ Renovate logs
|
|
289
|
+
captured against
|
|
290
|
+
[`MShekow/renovate-log-parser-test`](https://github.com/MShekow/renovate-log-parser-test)
|
|
291
|
+
and committed under `src/core/__tests__/fixtures/`:
|
|
292
|
+
|
|
293
|
+
| Fixture | What it demonstrates |
|
|
294
|
+
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
295
|
+
| `external-host-error.jsonl` | NPM registry blocked → the run aborts with `result: "external-host-error"` |
|
|
296
|
+
| `various-issues.jsonl` | Abandoned packages, a required config migration, and an npm `lock file error` whose `err.stderr` reports a `Conflicting peer dependency` |
|
|
297
|
+
| `failed-dotnet-install.jsonl` | `builds.dotnet.microsoft.com` blocked → `Datasource connection error` (`DEPTH_ZERO_SELF_SIGNED_CERT`) and `Failed to generate lock file` / "No tool releases found." |
|
|
298
|
+
|
|
299
|
+
The assertions are deliberately _semantic_ rather than snapshot-based, since a
|
|
300
|
+
Renovate log is full of volatile data (timestamps, pid, hostname, logContext,
|
|
301
|
+
dependency versions). They assert only the signals each scenario was captured
|
|
302
|
+
to demonstrate.
|
|
303
|
+
|
|
304
|
+
- **Packaging E2E tests** (`e2e/pack-install.e2e.ts`) — build, `npm pack`,
|
|
305
|
+
install the tarball into an empty throwaway project, then drive the installed
|
|
306
|
+
`renovate-log-parser` binary against a fixture. This is the only suite that
|
|
307
|
+
can catch a missing `package.json#files` entry, a dropped Nuxt `.output`
|
|
308
|
+
symlink, or a `dist/` import that only resolved because `src/` sat next to it.
|
|
309
|
+
Set `SKIP_E2E=1` to skip.
|
|
310
|
+
|
|
311
|
+
Its nested `web UI` block starts the installed `web` command and drives the
|
|
312
|
+
real UI in a headless Chromium, using the `playwright-core` _library_ — there
|
|
313
|
+
is no second test runner or config file, these are plain `node:test` cases in
|
|
314
|
+
the same file. Because they run against the installed tarball, they assert
|
|
315
|
+
that the shipped Nuxt bundle actually boots and serves, not merely that its
|
|
316
|
+
files are present. Chromium must be installed once with
|
|
317
|
+
`npx playwright-core install chromium`; when a browser test fails, a
|
|
318
|
+
screenshot, an HTML dump and the captured console/server output are written to
|
|
319
|
+
`e2e-artifacts/` (CI uploads them as a build artifact).
|
|
320
|
+
|
|
321
|
+
### Regenerating the log fixtures
|
|
322
|
+
|
|
323
|
+
The [`compose.yml`](./compose.yml) stack runs Renovate against the test
|
|
324
|
+
repository, with an NGINX "firewall" that Docker DNS points selected hostnames
|
|
325
|
+
at, so outbound access to them fails exactly as it would behind a corporate
|
|
326
|
+
proxy. The base file blocks nothing; each scenario layers on an override that
|
|
327
|
+
adds the hostnames it needs to block:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Requires a .env with GITHUB_PAT (+ optionally LOCAL_UID / LOCAL_GID)
|
|
331
|
+
docker compose -f compose.yml up -d # various-issues
|
|
332
|
+
docker compose -f compose.yml -f compose.external-host-error.yml up -d # external-host-error
|
|
333
|
+
docker compose -f compose.yml -f compose.failed-dotnet-install.yml up -d # failed-dotnet-install
|
|
334
|
+
|
|
335
|
+
docker compose ... wait renovate # block until Renovate exits
|
|
336
|
+
cp container-out-logs/out.log src/core/__tests__/fixtures/<scenario>.jsonl
|
|
337
|
+
docker compose ... down -v # discard the generated certificate
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Renovate must start from a _pristine_ repository — leftover `renovate/*`
|
|
341
|
+
branches make it take a different code path ("Branch already exists") and skip
|
|
342
|
+
the very work the fixture captures. Close and delete them first.
|
|
343
|
+
|
|
344
|
+
[`.github/workflows/verify-fixtures.yml`](./.github/workflows/verify-fixtures.yml)
|
|
345
|
+
automates all of this weekly (and on demand): one job per scenario, run strictly
|
|
346
|
+
in sequence since they share one test repository, each starting by wiping every
|
|
347
|
+
Renovate PR and branch. It overwrites the committed fixture with the freshly
|
|
348
|
+
generated log and re-runs the fixture tests against it — so a Renovate release
|
|
349
|
+
that renames a message or drops a field turns the workflow red. Nothing is
|
|
350
|
+
committed back; the regenerated log is uploaded as an artifact so the fixture
|
|
351
|
+
can be updated deliberately. The workflow needs a `TEST_REPO_PAT` secret (a
|
|
352
|
+
fine-grained PAT with contents + pull-request write access to the test repo).
|
|
353
|
+
|
|
354
|
+
### Linting & formatting
|
|
355
|
+
|
|
356
|
+
[ESLint](https://eslint.org) (flat config) and [Prettier](https://prettier.io) are set up at the workspace root.
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
npm run lint # ESLint for src/ (type-aware) + web/ (Nuxt rules)
|
|
360
|
+
npm run format # Prettier write pass over all non-ignored files
|
|
361
|
+
npm run format:check # Prettier check (no writes — useful in CI)
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- **Root (`src/`)** — [`eslint.config.mjs`](./eslint.config.mjs) uses `typescript-eslint` `recommendedTypeChecked` rules against `src/**/*.ts`, with `eslint-config-prettier` appended to disable any rules that conflict with Prettier. Prettier itself runs with its defaults (semicolons, double quotes, trailing commas).
|
|
365
|
+
- **Web (`web/`)** — [`web/eslint.config.mjs`](./web/eslint.config.mjs) delegates to the auto-generated `@nuxt/eslint` config, which covers Vue, TypeScript, and Nuxt-specific rules. The `web/` directory is excluded from the root ESLint and Prettier configs so the two setups stay independent.
|
|
366
|
+
|
|
367
|
+
### How it's built
|
|
368
|
+
|
|
369
|
+
- **CLI** — TypeScript compiled with `tsc` to ESM in `dist/`. Uses
|
|
370
|
+
[`yargs`](https://yargs.js.org) for command parsing. `yargs` is the only
|
|
371
|
+
runtime dependency.
|
|
372
|
+
- **Web** — a Nuxt UI app built with `nuxt build`. It shares the CLI's parsing
|
|
373
|
+
and filtering logic from `src/core/` (aliased into the bundle as
|
|
374
|
+
`renovate-core`), so the browser and the CLI query the same SQLite-backed
|
|
375
|
+
model. The `web` command runs the self-contained Nitro server
|
|
376
|
+
(`web/.output/server/index.mjs`) as a child process; when given a log path it
|
|
377
|
+
hands it off to the UI via a `?log=` query parameter.
|
|
378
|
+
|
|
379
|
+
### What gets published
|
|
380
|
+
|
|
381
|
+
Two `package.json` mechanisms cooperate so that both build outputs ship to npm:
|
|
382
|
+
|
|
383
|
+
- **`files: ["dist", "web/.output"]`** — an allow-list of what goes into the
|
|
384
|
+
published tarball. npm always adds `package.json`, `README`, `LICENSE`, and the
|
|
385
|
+
`bin` target, then includes everything matched here — both directories,
|
|
386
|
+
recursively. This list takes precedence over `.gitignore`, which is why
|
|
387
|
+
`web/.output/` (gitignored as a build artifact) is still published.
|
|
388
|
+
- **`prepublishOnly: "npm run build"`** — a lifecycle hook npm runs automatically
|
|
389
|
+
before packing on `npm publish`. It builds the Nuxt `.output` and compiles the
|
|
390
|
+
CLI `dist`, so both directories exist and are current by the time the `files`
|
|
391
|
+
allow-list is evaluated.
|
|
392
|
+
|
|
393
|
+
```
|
|
394
|
+
npm publish
|
|
395
|
+
└─ prepublishOnly → npm run build → build:web (nuxt build → web/.output/)
|
|
396
|
+
→ build:cli (tsc → dist/)
|
|
397
|
+
└─ pack tarball using `files`: dist/ + web/.output/ (+ package.json, README, LICENSE)
|
|
398
|
+
└─ upload to registry
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
The result is a lean, self-contained package (no source or `node_modules` leak).
|
|
402
|
+
Verify locally with `npm pack --dry-run`.
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import yargs from "yargs";
|
|
3
|
+
import { hideBin } from "yargs/helpers";
|
|
4
|
+
import { detectErrorsCommand } from "./commands/detect-errors.js";
|
|
5
|
+
import { analyzeCommand } from "./commands/analyze.js";
|
|
6
|
+
import { webCommand } from "./commands/web.js";
|
|
7
|
+
import { installAnalyzeSkillCommand } from "./commands/install-analyze-skill.js";
|
|
8
|
+
await yargs(hideBin(process.argv))
|
|
9
|
+
.scriptName("renovate-log-parser")
|
|
10
|
+
.usage("$0 <command> [options]")
|
|
11
|
+
.command(detectErrorsCommand)
|
|
12
|
+
.command(analyzeCommand)
|
|
13
|
+
.command(webCommand)
|
|
14
|
+
.command(installAnalyzeSkillCommand)
|
|
15
|
+
.demandCommand(1, "You need to specify a command. Try --help.")
|
|
16
|
+
.strict()
|
|
17
|
+
.alias("h", "help")
|
|
18
|
+
.alias("v", "version")
|
|
19
|
+
.fail((msg, err) => {
|
|
20
|
+
// Genuine thrown errors propagate; usage/validation failures exit with the
|
|
21
|
+
// tool/usage exit code (2).
|
|
22
|
+
if (err)
|
|
23
|
+
throw err;
|
|
24
|
+
console.error(msg);
|
|
25
|
+
console.error("\nRun with --help for usage.");
|
|
26
|
+
process.exit(2);
|
|
27
|
+
})
|
|
28
|
+
.help()
|
|
29
|
+
.parseAsync();
|
|
30
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEjF,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/B,UAAU,CAAC,qBAAqB,CAAC;KACjC,KAAK,CAAC,wBAAwB,CAAC;KAC/B,OAAO,CAAC,mBAAmB,CAAC;KAC5B,OAAO,CAAC,cAAc,CAAC;KACvB,OAAO,CAAC,UAAU,CAAC;KACnB,OAAO,CAAC,0BAA0B,CAAC;KACnC,aAAa,CAAC,CAAC,EAAE,4CAA4C,CAAC;KAC9D,MAAM,EAAE;KACR,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;KAClB,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC;KACrB,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACjB,2EAA2E;IAC3E,4BAA4B;IAC5B,IAAI,GAAG;QAAE,MAAM,GAAG,CAAC;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,IAAI,EAAE;KACN,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CommandModule } from "yargs";
|
|
2
|
+
interface AnalyzeArgs {
|
|
3
|
+
path: string;
|
|
4
|
+
print: boolean;
|
|
5
|
+
"ignored-fields": string;
|
|
6
|
+
"line-from"?: number;
|
|
7
|
+
"line-to"?: number;
|
|
8
|
+
limit: number;
|
|
9
|
+
filter?: string[];
|
|
10
|
+
"filter-with-wildcard"?: string[];
|
|
11
|
+
"include-original-line": boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* `analyze <path>` — emit token-efficient structure for an AI coding agent.
|
|
15
|
+
*
|
|
16
|
+
* Without `--print` it prints compact single-line JSON whole-log stats (level counts +
|
|
17
|
+
* per-repository structure). With `--print` it streams a filtered, line-ranged,
|
|
18
|
+
* limited JSONL slice to stdout (truncation notices go to stderr so stdout stays
|
|
19
|
+
* clean).
|
|
20
|
+
*
|
|
21
|
+
* Exit codes: 0 = success; 2 = tool/usage error (bad path, unreadable, bad args).
|
|
22
|
+
*/
|
|
23
|
+
export declare const analyzeCommand: CommandModule<object, AnalyzeArgs>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { Parser } from "../core/parser.js";
|
|
3
|
+
import { Analyzer } from "../core/analyzer.js";
|
|
4
|
+
import { parseKeyValueFilter, parseWildcardFilter } from "../core/filters.js";
|
|
5
|
+
/** Default root keys stripped from print-mode output. `msg` is never stripped. */
|
|
6
|
+
const DEFAULT_IGNORED_FIELDS = "v,time,logContext,pid,hostname,name";
|
|
7
|
+
/**
|
|
8
|
+
* `analyze <path>` — emit token-efficient structure for an AI coding agent.
|
|
9
|
+
*
|
|
10
|
+
* Without `--print` it prints compact single-line JSON whole-log stats (level counts +
|
|
11
|
+
* per-repository structure). With `--print` it streams a filtered, line-ranged,
|
|
12
|
+
* limited JSONL slice to stdout (truncation notices go to stderr so stdout stays
|
|
13
|
+
* clean).
|
|
14
|
+
*
|
|
15
|
+
* Exit codes: 0 = success; 2 = tool/usage error (bad path, unreadable, bad args).
|
|
16
|
+
*/
|
|
17
|
+
export const analyzeCommand = {
|
|
18
|
+
command: "analyze <path>",
|
|
19
|
+
describe: "Emit token-efficient structure/stats for an AI coding agent",
|
|
20
|
+
builder: (yargs) => yargs
|
|
21
|
+
.positional("path", {
|
|
22
|
+
type: "string",
|
|
23
|
+
describe: "Path to the Renovate JSONL log",
|
|
24
|
+
demandOption: true,
|
|
25
|
+
})
|
|
26
|
+
.option("print", {
|
|
27
|
+
type: "boolean",
|
|
28
|
+
default: false,
|
|
29
|
+
describe: "Print matching log lines (JSONL) instead of stats",
|
|
30
|
+
})
|
|
31
|
+
.option("ignored-fields", {
|
|
32
|
+
type: "string",
|
|
33
|
+
default: DEFAULT_IGNORED_FIELDS,
|
|
34
|
+
describe: "CSV of root keys to strip in print mode (msg never stripped)",
|
|
35
|
+
})
|
|
36
|
+
.option("line-from", {
|
|
37
|
+
type: "number",
|
|
38
|
+
describe: "Inclusive 0-indexed lower line bound (print mode)",
|
|
39
|
+
})
|
|
40
|
+
.option("line-to", {
|
|
41
|
+
type: "number",
|
|
42
|
+
describe: "Inclusive 0-indexed upper line bound (print mode)",
|
|
43
|
+
})
|
|
44
|
+
.option("limit", {
|
|
45
|
+
type: "number",
|
|
46
|
+
default: 50,
|
|
47
|
+
describe: "Max lines to print (print mode)",
|
|
48
|
+
})
|
|
49
|
+
.option("filter", {
|
|
50
|
+
type: "string",
|
|
51
|
+
array: true,
|
|
52
|
+
describe: "key:val scalar-equals filter, repeatable, AND'd (print mode)",
|
|
53
|
+
})
|
|
54
|
+
.option("filter-with-wildcard", {
|
|
55
|
+
type: "string",
|
|
56
|
+
array: true,
|
|
57
|
+
describe: "key:pattern wildcard filter (* = any run), case-insensitive, " +
|
|
58
|
+
"repeatable, AND'd (print mode)",
|
|
59
|
+
})
|
|
60
|
+
.option("include-original-line", {
|
|
61
|
+
type: "boolean",
|
|
62
|
+
default: false,
|
|
63
|
+
describe: "Add _oL (0-indexed source line) to each printed object",
|
|
64
|
+
}),
|
|
65
|
+
handler: (argv) => {
|
|
66
|
+
const parser = new Parser();
|
|
67
|
+
try {
|
|
68
|
+
const logPath = resolve(process.cwd(), argv.path);
|
|
69
|
+
parser.load(logPath);
|
|
70
|
+
const analyzer = new Analyzer(parser);
|
|
71
|
+
if (argv.print) {
|
|
72
|
+
const filters = [
|
|
73
|
+
...(argv.filter ?? []).map(parseKeyValueFilter),
|
|
74
|
+
...(argv["filter-with-wildcard"] ?? []).map(parseWildcardFilter),
|
|
75
|
+
];
|
|
76
|
+
const result = analyzer.print({
|
|
77
|
+
ignoredFields: splitCsv(argv["ignored-fields"]),
|
|
78
|
+
lineFrom: argv["line-from"],
|
|
79
|
+
lineTo: argv["line-to"],
|
|
80
|
+
limit: argv.limit,
|
|
81
|
+
filters,
|
|
82
|
+
includeOriginalLine: argv["include-original-line"],
|
|
83
|
+
});
|
|
84
|
+
if (result.entries.length > 0) {
|
|
85
|
+
process.stdout.write(result.entries.map((e) => JSON.stringify(e)).join("\n") + "\n");
|
|
86
|
+
}
|
|
87
|
+
if (result.truncated) {
|
|
88
|
+
process.stderr.write(`Truncated: printed ${result.emitted} of ${result.totalMatched} ` +
|
|
89
|
+
`matching lines (--limit ${argv.limit}).\n`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const stats = analyzer.stats();
|
|
94
|
+
process.stdout.write(JSON.stringify(stats) + "\n");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
// Tool/usage error (bad path, unreadable, bad --filter token, …).
|
|
99
|
+
console.error(`analyze: ${err.message}`);
|
|
100
|
+
process.exitCode = 2;
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
parser.close();
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
/** Split a CSV option value into trimmed, non-empty tokens. */
|
|
108
|
+
function splitCsv(value) {
|
|
109
|
+
return value
|
|
110
|
+
.split(",")
|
|
111
|
+
.map((token) => token.trim())
|
|
112
|
+
.filter((token) => token.length > 0);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CommandModule } from "yargs";
|
|
2
|
+
interface DetectErrorsArgs {
|
|
3
|
+
path: string;
|
|
4
|
+
out?: string;
|
|
5
|
+
"ignore-file"?: string;
|
|
6
|
+
"fail-on-warn": boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `detect-errors <path>` — deterministically scan a Renovate JSONL log for
|
|
10
|
+
* build-breaking problems (exit 1) and warnings, optionally writing a stable
|
|
11
|
+
* machine-readable JSON report.
|
|
12
|
+
*
|
|
13
|
+
* Exit codes: 0 = no non-ignored errors; 1 = ≥1 non-ignored error (or, with
|
|
14
|
+
* `--fail-on-warn`, ≥1 non-ignored warning); 2 = tool/usage error.
|
|
15
|
+
*/
|
|
16
|
+
export declare const detectErrorsCommand: CommandModule<object, DetectErrorsArgs>;
|
|
17
|
+
export {};
|