pull-request-split-advisor 3.1.2
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 +52 -0
- package/README.md +168 -0
- package/dist/ai/config-wizard.js +282 -0
- package/dist/ai/enricher.js +290 -0
- package/dist/ai/prompts.js +231 -0
- package/dist/ai/provider.js +265 -0
- package/dist/cli.js +442 -0
- package/dist/config/config.js +315 -0
- package/dist/config/default-config.js +223 -0
- package/dist/core/blocks.js +145 -0
- package/dist/core/commit-planner.js +273 -0
- package/dist/core/dependency.js +284 -0
- package/dist/core/file-stats.js +341 -0
- package/dist/core/history.js +72 -0
- package/dist/core/planner.js +25 -0
- package/dist/core/scoring.js +166 -0
- package/dist/core/strategy.js +486 -0
- package/dist/git/branch-naming.js +120 -0
- package/dist/git/executor.js +378 -0
- package/dist/git/git.js +239 -0
- package/dist/output/report-styles.generated.js +10 -0
- package/dist/output/report.js +726 -0
- package/dist/output/ui.js +417 -0
- package/dist/shared/constants.js +59 -0
- package/dist/shared/types.js +7 -0
- package/dist/shared/utils.js +73 -0
- package/node_modules/@colors/colors/LICENSE +26 -0
- package/node_modules/@colors/colors/README.md +219 -0
- package/node_modules/@colors/colors/examples/normal-usage.js +83 -0
- package/node_modules/@colors/colors/examples/safe-string.js +80 -0
- package/node_modules/@colors/colors/index.d.ts +136 -0
- package/node_modules/@colors/colors/lib/colors.js +211 -0
- package/node_modules/@colors/colors/lib/custom/trap.js +46 -0
- package/node_modules/@colors/colors/lib/custom/zalgo.js +110 -0
- package/node_modules/@colors/colors/lib/extendStringPrototype.js +110 -0
- package/node_modules/@colors/colors/lib/index.js +13 -0
- package/node_modules/@colors/colors/lib/maps/america.js +10 -0
- package/node_modules/@colors/colors/lib/maps/rainbow.js +12 -0
- package/node_modules/@colors/colors/lib/maps/random.js +11 -0
- package/node_modules/@colors/colors/lib/maps/zebra.js +5 -0
- package/node_modules/@colors/colors/lib/styles.js +95 -0
- package/node_modules/@colors/colors/lib/system/has-flag.js +35 -0
- package/node_modules/@colors/colors/lib/system/supports-colors.js +151 -0
- package/node_modules/@colors/colors/package.json +45 -0
- package/node_modules/@colors/colors/safe.d.ts +48 -0
- package/node_modules/@colors/colors/safe.js +10 -0
- package/node_modules/@colors/colors/themes/generic-logging.js +12 -0
- package/node_modules/ansi-align/LICENSE +13 -0
- package/node_modules/ansi-align/README.md +80 -0
- package/node_modules/ansi-align/index.js +61 -0
- package/node_modules/ansi-align/node_modules/ansi-regex/index.d.ts +37 -0
- package/node_modules/ansi-align/node_modules/ansi-regex/index.js +10 -0
- package/node_modules/ansi-align/node_modules/ansi-regex/license +9 -0
- package/node_modules/ansi-align/node_modules/ansi-regex/package.json +55 -0
- package/node_modules/ansi-align/node_modules/ansi-regex/readme.md +78 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/README.md +73 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/es2015/index.js +6 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/es2015/text.js +6 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/index.d.ts +23 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/index.js +6 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/package.json +50 -0
- package/node_modules/ansi-align/node_modules/emoji-regex/text.js +6 -0
- package/node_modules/ansi-align/node_modules/string-width/index.d.ts +29 -0
- package/node_modules/ansi-align/node_modules/string-width/index.js +47 -0
- package/node_modules/ansi-align/node_modules/string-width/license +9 -0
- package/node_modules/ansi-align/node_modules/string-width/package.json +56 -0
- package/node_modules/ansi-align/node_modules/string-width/readme.md +50 -0
- package/node_modules/ansi-align/node_modules/strip-ansi/index.d.ts +17 -0
- package/node_modules/ansi-align/node_modules/strip-ansi/index.js +4 -0
- package/node_modules/ansi-align/node_modules/strip-ansi/license +9 -0
- package/node_modules/ansi-align/node_modules/strip-ansi/package.json +54 -0
- package/node_modules/ansi-align/node_modules/strip-ansi/readme.md +46 -0
- package/node_modules/ansi-align/package.json +43 -0
- package/node_modules/ansi-regex/index.d.ts +33 -0
- package/node_modules/ansi-regex/index.js +14 -0
- package/node_modules/ansi-regex/license +9 -0
- package/node_modules/ansi-regex/package.json +61 -0
- package/node_modules/ansi-regex/readme.md +66 -0
- package/node_modules/ansi-styles/index.d.ts +236 -0
- package/node_modules/ansi-styles/index.js +223 -0
- package/node_modules/ansi-styles/license +9 -0
- package/node_modules/ansi-styles/package.json +54 -0
- package/node_modules/ansi-styles/readme.md +173 -0
- package/node_modules/boxen/index.d.ts +267 -0
- package/node_modules/boxen/index.js +376 -0
- package/node_modules/boxen/license +9 -0
- package/node_modules/boxen/package.json +69 -0
- package/node_modules/boxen/readme.md +300 -0
- package/node_modules/camelcase/index.d.ts +102 -0
- package/node_modules/camelcase/index.js +110 -0
- package/node_modules/camelcase/license +9 -0
- package/node_modules/camelcase/package.json +47 -0
- package/node_modules/camelcase/readme.md +135 -0
- package/node_modules/chalk/license +9 -0
- package/node_modules/chalk/package.json +83 -0
- package/node_modules/chalk/readme.md +297 -0
- package/node_modules/chalk/source/index.d.ts +325 -0
- package/node_modules/chalk/source/index.js +225 -0
- package/node_modules/chalk/source/utilities.js +33 -0
- package/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- package/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- package/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- package/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
- package/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- package/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
- package/node_modules/cli-boxes/boxes.json +82 -0
- package/node_modules/cli-boxes/index.d.ts +127 -0
- package/node_modules/cli-boxes/index.js +6 -0
- package/node_modules/cli-boxes/license +9 -0
- package/node_modules/cli-boxes/package.json +42 -0
- package/node_modules/cli-boxes/readme.md +115 -0
- package/node_modules/cli-table3/LICENSE +21 -0
- package/node_modules/cli-table3/README.md +236 -0
- package/node_modules/cli-table3/index.d.ts +96 -0
- package/node_modules/cli-table3/index.js +1 -0
- package/node_modules/cli-table3/node_modules/ansi-regex/index.d.ts +37 -0
- package/node_modules/cli-table3/node_modules/ansi-regex/index.js +10 -0
- package/node_modules/cli-table3/node_modules/ansi-regex/license +9 -0
- package/node_modules/cli-table3/node_modules/ansi-regex/package.json +55 -0
- package/node_modules/cli-table3/node_modules/ansi-regex/readme.md +78 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/README.md +73 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/es2015/index.js +6 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/es2015/text.js +6 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/index.d.ts +23 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/index.js +6 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/package.json +50 -0
- package/node_modules/cli-table3/node_modules/emoji-regex/text.js +6 -0
- package/node_modules/cli-table3/node_modules/string-width/index.d.ts +29 -0
- package/node_modules/cli-table3/node_modules/string-width/index.js +47 -0
- package/node_modules/cli-table3/node_modules/string-width/license +9 -0
- package/node_modules/cli-table3/node_modules/string-width/package.json +56 -0
- package/node_modules/cli-table3/node_modules/string-width/readme.md +50 -0
- package/node_modules/cli-table3/node_modules/strip-ansi/index.d.ts +17 -0
- package/node_modules/cli-table3/node_modules/strip-ansi/index.js +4 -0
- package/node_modules/cli-table3/node_modules/strip-ansi/license +9 -0
- package/node_modules/cli-table3/node_modules/strip-ansi/package.json +54 -0
- package/node_modules/cli-table3/node_modules/strip-ansi/readme.md +46 -0
- package/node_modules/cli-table3/package.json +100 -0
- package/node_modules/cli-table3/src/cell.js +409 -0
- package/node_modules/cli-table3/src/debug.js +28 -0
- package/node_modules/cli-table3/src/layout-manager.js +254 -0
- package/node_modules/cli-table3/src/table.js +106 -0
- package/node_modules/cli-table3/src/utils.js +344 -0
- package/node_modules/commander/LICENSE +22 -0
- package/node_modules/commander/Readme.md +1157 -0
- package/node_modules/commander/esm.mjs +16 -0
- package/node_modules/commander/index.js +24 -0
- package/node_modules/commander/lib/argument.js +149 -0
- package/node_modules/commander/lib/command.js +2509 -0
- package/node_modules/commander/lib/error.js +39 -0
- package/node_modules/commander/lib/help.js +520 -0
- package/node_modules/commander/lib/option.js +330 -0
- package/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/node_modules/commander/package-support.json +16 -0
- package/node_modules/commander/package.json +84 -0
- package/node_modules/commander/typings/esm.d.mts +3 -0
- package/node_modules/commander/typings/index.d.ts +969 -0
- package/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
- package/node_modules/emoji-regex/README.md +107 -0
- package/node_modules/emoji-regex/index.d.ts +3 -0
- package/node_modules/emoji-regex/index.js +4 -0
- package/node_modules/emoji-regex/index.mjs +4 -0
- package/node_modules/emoji-regex/package.json +45 -0
- package/node_modules/get-east-asian-width/index.d.ts +60 -0
- package/node_modules/get-east-asian-width/index.js +30 -0
- package/node_modules/get-east-asian-width/license +9 -0
- package/node_modules/get-east-asian-width/lookup-data.js +18 -0
- package/node_modules/get-east-asian-width/lookup.js +135 -0
- package/node_modules/get-east-asian-width/package.json +71 -0
- package/node_modules/get-east-asian-width/readme.md +65 -0
- package/node_modules/get-east-asian-width/utilities.js +24 -0
- package/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
- package/node_modules/is-fullwidth-code-point/index.js +50 -0
- package/node_modules/is-fullwidth-code-point/license +9 -0
- package/node_modules/is-fullwidth-code-point/package.json +42 -0
- package/node_modules/is-fullwidth-code-point/readme.md +39 -0
- package/node_modules/isbinaryfile/LICENSE.txt +22 -0
- package/node_modules/isbinaryfile/README.md +70 -0
- package/node_modules/isbinaryfile/lib/index.d.ts +3 -0
- package/node_modules/isbinaryfile/lib/index.js +256 -0
- package/node_modules/isbinaryfile/package.json +64 -0
- package/node_modules/string-width/index.d.ts +39 -0
- package/node_modules/string-width/index.js +82 -0
- package/node_modules/string-width/license +9 -0
- package/node_modules/string-width/package.json +64 -0
- package/node_modules/string-width/readme.md +66 -0
- package/node_modules/strip-ansi/index.d.ts +15 -0
- package/node_modules/strip-ansi/index.js +19 -0
- package/node_modules/strip-ansi/license +9 -0
- package/node_modules/strip-ansi/package.json +59 -0
- package/node_modules/strip-ansi/readme.md +37 -0
- package/node_modules/type-fest/index.d.ts +178 -0
- package/node_modules/type-fest/license-cc0 +121 -0
- package/node_modules/type-fest/license-mit +9 -0
- package/node_modules/type-fest/package.json +91 -0
- package/node_modules/type-fest/readme.md +1060 -0
- package/node_modules/type-fest/source/all-union-fields.d.ts +88 -0
- package/node_modules/type-fest/source/and.d.ts +25 -0
- package/node_modules/type-fest/source/array-indices.d.ts +23 -0
- package/node_modules/type-fest/source/array-slice.d.ts +109 -0
- package/node_modules/type-fest/source/array-splice.d.ts +99 -0
- package/node_modules/type-fest/source/array-tail.d.ts +76 -0
- package/node_modules/type-fest/source/array-values.d.ts +22 -0
- package/node_modules/type-fest/source/arrayable.d.ts +29 -0
- package/node_modules/type-fest/source/async-return-type.d.ts +23 -0
- package/node_modules/type-fest/source/asyncify.d.ts +32 -0
- package/node_modules/type-fest/source/basic.d.ts +68 -0
- package/node_modules/type-fest/source/camel-case.d.ts +89 -0
- package/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +97 -0
- package/node_modules/type-fest/source/camel-cased-properties.d.ts +43 -0
- package/node_modules/type-fest/source/conditional-except.d.ts +45 -0
- package/node_modules/type-fest/source/conditional-keys.d.ts +47 -0
- package/node_modules/type-fest/source/conditional-pick-deep.d.ts +118 -0
- package/node_modules/type-fest/source/conditional-pick.d.ts +44 -0
- package/node_modules/type-fest/source/conditional-simplify.d.ts +32 -0
- package/node_modules/type-fest/source/delimiter-case.d.ts +78 -0
- package/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +106 -0
- package/node_modules/type-fest/source/delimiter-cased-properties.d.ts +46 -0
- package/node_modules/type-fest/source/distributed-omit.d.ts +89 -0
- package/node_modules/type-fest/source/distributed-pick.d.ts +85 -0
- package/node_modules/type-fest/source/empty-object.d.ts +46 -0
- package/node_modules/type-fest/source/enforce-optional.d.ts +47 -0
- package/node_modules/type-fest/source/entries.d.ts +62 -0
- package/node_modules/type-fest/source/entry.d.ts +65 -0
- package/node_modules/type-fest/source/exact.d.ts +68 -0
- package/node_modules/type-fest/source/except.d.ts +108 -0
- package/node_modules/type-fest/source/find-global-type.d.ts +64 -0
- package/node_modules/type-fest/source/fixed-length-array.d.ts +43 -0
- package/node_modules/type-fest/source/get.d.ts +219 -0
- package/node_modules/type-fest/source/global-this.d.ts +21 -0
- package/node_modules/type-fest/source/greater-than-or-equal.d.ts +22 -0
- package/node_modules/type-fest/source/greater-than.d.ts +56 -0
- package/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
- package/node_modules/type-fest/source/has-readonly-keys.d.ts +21 -0
- package/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
- package/node_modules/type-fest/source/has-writable-keys.d.ts +21 -0
- package/node_modules/type-fest/source/if-any.d.ts +24 -0
- package/node_modules/type-fest/source/if-empty-object.d.ts +26 -0
- package/node_modules/type-fest/source/if-never.d.ts +24 -0
- package/node_modules/type-fest/source/if-null.d.ts +24 -0
- package/node_modules/type-fest/source/if-unknown.d.ts +24 -0
- package/node_modules/type-fest/source/includes.d.ts +22 -0
- package/node_modules/type-fest/source/int-closed-range.d.ts +35 -0
- package/node_modules/type-fest/source/int-range.d.ts +55 -0
- package/node_modules/type-fest/source/internal/array.d.ts +126 -0
- package/node_modules/type-fest/source/internal/characters.d.ts +67 -0
- package/node_modules/type-fest/source/internal/index.d.ts +8 -0
- package/node_modules/type-fest/source/internal/keys.d.ts +97 -0
- package/node_modules/type-fest/source/internal/numeric.d.ts +118 -0
- package/node_modules/type-fest/source/internal/object.d.ts +236 -0
- package/node_modules/type-fest/source/internal/string.d.ts +210 -0
- package/node_modules/type-fest/source/internal/tuple.d.ts +90 -0
- package/node_modules/type-fest/source/internal/type.d.ts +139 -0
- package/node_modules/type-fest/source/invariant-of.d.ts +76 -0
- package/node_modules/type-fest/source/is-any.d.ts +33 -0
- package/node_modules/type-fest/source/is-equal.d.ts +31 -0
- package/node_modules/type-fest/source/is-float.d.ts +41 -0
- package/node_modules/type-fest/source/is-integer.d.ts +58 -0
- package/node_modules/type-fest/source/is-literal.d.ts +296 -0
- package/node_modules/type-fest/source/is-never.d.ts +42 -0
- package/node_modules/type-fest/source/is-null.d.ts +20 -0
- package/node_modules/type-fest/source/is-tuple.d.ts +89 -0
- package/node_modules/type-fest/source/is-unknown.d.ts +52 -0
- package/node_modules/type-fest/source/iterable-element.d.ts +64 -0
- package/node_modules/type-fest/source/join.d.ts +68 -0
- package/node_modules/type-fest/source/jsonifiable.d.ts +37 -0
- package/node_modules/type-fest/source/jsonify.d.ts +122 -0
- package/node_modules/type-fest/source/kebab-case.d.ts +44 -0
- package/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +63 -0
- package/node_modules/type-fest/source/kebab-cased-properties.d.ts +40 -0
- package/node_modules/type-fest/source/keys-of-union.d.ts +42 -0
- package/node_modules/type-fest/source/last-array-element.d.ts +38 -0
- package/node_modules/type-fest/source/less-than-or-equal.d.ts +22 -0
- package/node_modules/type-fest/source/less-than.d.ts +26 -0
- package/node_modules/type-fest/source/literal-to-primitive-deep.d.ts +36 -0
- package/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
- package/node_modules/type-fest/source/literal-union.d.ts +37 -0
- package/node_modules/type-fest/source/merge-deep.d.ts +486 -0
- package/node_modules/type-fest/source/merge-exclusive.d.ts +41 -0
- package/node_modules/type-fest/source/merge.d.ts +48 -0
- package/node_modules/type-fest/source/multidimensional-array.d.ts +44 -0
- package/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +48 -0
- package/node_modules/type-fest/source/non-empty-object.d.ts +35 -0
- package/node_modules/type-fest/source/non-empty-string.d.ts +28 -0
- package/node_modules/type-fest/source/non-empty-tuple.d.ts +21 -0
- package/node_modules/type-fest/source/numeric.d.ts +222 -0
- package/node_modules/type-fest/source/observable-like.d.ts +63 -0
- package/node_modules/type-fest/source/omit-deep.d.ts +167 -0
- package/node_modules/type-fest/source/omit-index-signature.d.ts +95 -0
- package/node_modules/type-fest/source/opaque.d.ts +1 -0
- package/node_modules/type-fest/source/optional-keys-of.d.ts +39 -0
- package/node_modules/type-fest/source/or.d.ts +25 -0
- package/node_modules/type-fest/source/override-properties.d.ts +36 -0
- package/node_modules/type-fest/source/package-json.d.ts +676 -0
- package/node_modules/type-fest/source/partial-deep.d.ts +151 -0
- package/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +78 -0
- package/node_modules/type-fest/source/pascal-case.d.ts +42 -0
- package/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +62 -0
- package/node_modules/type-fest/source/pascal-cased-properties.d.ts +36 -0
- package/node_modules/type-fest/source/paths.d.ts +262 -0
- package/node_modules/type-fest/source/pick-deep.d.ts +149 -0
- package/node_modules/type-fest/source/pick-index-signature.d.ts +50 -0
- package/node_modules/type-fest/source/primitive.d.ts +13 -0
- package/node_modules/type-fest/source/promisable.d.ts +25 -0
- package/node_modules/type-fest/source/readonly-deep.d.ts +81 -0
- package/node_modules/type-fest/source/readonly-keys-of.d.ts +30 -0
- package/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
- package/node_modules/type-fest/source/replace.d.ts +85 -0
- package/node_modules/type-fest/source/require-all-or-none.d.ts +51 -0
- package/node_modules/type-fest/source/require-at-least-one.d.ts +47 -0
- package/node_modules/type-fest/source/require-exactly-one.d.ts +45 -0
- package/node_modules/type-fest/source/require-one-or-none.d.ts +46 -0
- package/node_modules/type-fest/source/required-deep.d.ts +78 -0
- package/node_modules/type-fest/source/required-keys-of.d.ts +30 -0
- package/node_modules/type-fest/source/schema.d.ts +114 -0
- package/node_modules/type-fest/source/screaming-snake-case.d.ts +28 -0
- package/node_modules/type-fest/source/set-field-type.d.ts +65 -0
- package/node_modules/type-fest/source/set-non-nullable-deep.d.ts +83 -0
- package/node_modules/type-fest/source/set-non-nullable.d.ts +39 -0
- package/node_modules/type-fest/source/set-optional.d.ts +38 -0
- package/node_modules/type-fest/source/set-parameter-type.d.ts +117 -0
- package/node_modules/type-fest/source/set-readonly.d.ts +39 -0
- package/node_modules/type-fest/source/set-required-deep.d.ts +68 -0
- package/node_modules/type-fest/source/set-required.d.ts +70 -0
- package/node_modules/type-fest/source/set-return-type.d.ts +29 -0
- package/node_modules/type-fest/source/shared-union-fields-deep.d.ts +178 -0
- package/node_modules/type-fest/source/shared-union-fields.d.ts +76 -0
- package/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
- package/node_modules/type-fest/source/simplify.d.ts +58 -0
- package/node_modules/type-fest/source/single-key-object.d.ts +29 -0
- package/node_modules/type-fest/source/snake-case.d.ts +45 -0
- package/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +63 -0
- package/node_modules/type-fest/source/snake-cased-properties.d.ts +40 -0
- package/node_modules/type-fest/source/split.d.ts +88 -0
- package/node_modules/type-fest/source/spread.d.ts +84 -0
- package/node_modules/type-fest/source/string-key-of.d.ts +25 -0
- package/node_modules/type-fest/source/string-repeat.d.ts +47 -0
- package/node_modules/type-fest/source/string-slice.d.ts +37 -0
- package/node_modules/type-fest/source/stringified.d.ts +23 -0
- package/node_modules/type-fest/source/structured-cloneable.d.ts +92 -0
- package/node_modules/type-fest/source/subtract.d.ts +83 -0
- package/node_modules/type-fest/source/sum.d.ts +78 -0
- package/node_modules/type-fest/source/tagged-union.d.ts +51 -0
- package/node_modules/type-fest/source/tagged.d.ts +256 -0
- package/node_modules/type-fest/source/trim.d.ts +27 -0
- package/node_modules/type-fest/source/tsconfig-json.d.ts +1294 -0
- package/node_modules/type-fest/source/tuple-to-object.d.ts +42 -0
- package/node_modules/type-fest/source/tuple-to-union.d.ts +51 -0
- package/node_modules/type-fest/source/typed-array.d.ts +17 -0
- package/node_modules/type-fest/source/undefined-on-partial-deep.d.ts +80 -0
- package/node_modules/type-fest/source/union-to-intersection.d.ts +61 -0
- package/node_modules/type-fest/source/union-to-tuple.d.ts +56 -0
- package/node_modules/type-fest/source/unknown-array.d.ts +25 -0
- package/node_modules/type-fest/source/unknown-map.d.ts +24 -0
- package/node_modules/type-fest/source/unknown-record.d.ts +31 -0
- package/node_modules/type-fest/source/unknown-set.d.ts +24 -0
- package/node_modules/type-fest/source/value-of.d.ts +42 -0
- package/node_modules/type-fest/source/words.d.ts +118 -0
- package/node_modules/type-fest/source/writable-deep.d.ts +83 -0
- package/node_modules/type-fest/source/writable-keys-of.d.ts +33 -0
- package/node_modules/type-fest/source/writable.d.ts +68 -0
- package/node_modules/widest-line/index.d.ts +12 -0
- package/node_modules/widest-line/index.js +11 -0
- package/node_modules/widest-line/license +9 -0
- package/node_modules/widest-line/package.json +60 -0
- package/node_modules/widest-line/readme.md +26 -0
- package/node_modules/wrap-ansi/index.d.ts +41 -0
- package/node_modules/wrap-ansi/index.js +222 -0
- package/node_modules/wrap-ansi/license +9 -0
- package/node_modules/wrap-ansi/package.json +69 -0
- package/node_modules/wrap-ansi/readme.md +75 -0
- package/package.json +78 -0
- package/scripts/postinstall.cjs +122 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* provider.ts — Cliente HTTP genérico para proveedores de IA compatibles con OpenAI.
|
|
3
|
+
*
|
|
4
|
+
* Usa `fetch` nativo de Node.js >= 18: cero dependencias adicionales.
|
|
5
|
+
*
|
|
6
|
+
* ### Registro de proveedores
|
|
7
|
+
* Cada proveedor se describe con un `ProviderDescriptor` en `PROVIDER_REGISTRY`.
|
|
8
|
+
* Añadir un nuevo proveedor = añadir una entrada al mapa: no hay if/else en el
|
|
9
|
+
* código de llamada.
|
|
10
|
+
*
|
|
11
|
+
* ### Diseño de fallback
|
|
12
|
+
* `isAiEnabled(config)` devuelve `false` si:
|
|
13
|
+
* - `config.ai?.enabled` es false o undefined.
|
|
14
|
+
* - No hay API key (ni literal en config ni en la variable de entorno).
|
|
15
|
+
*
|
|
16
|
+
* El caller siempre comprueba `isAiEnabled` antes de llamar a `callAI`.
|
|
17
|
+
* Si `callAI` lanza (timeout, error HTTP, JSON malformado) el enricher
|
|
18
|
+
* lo captura silenciosamente y conserva el plan heurístico.
|
|
19
|
+
*/
|
|
20
|
+
import { execSync } from "node:child_process";
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Registro de proveedores
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Registro central de proveedores de IA soportados.
|
|
26
|
+
*
|
|
27
|
+
* Para añadir un nuevo proveedor basta con agregar una entrada aquí.
|
|
28
|
+
* El wizard, la validación y el cliente HTTP se adaptan automáticamente.
|
|
29
|
+
*/
|
|
30
|
+
export const PROVIDER_REGISTRY = new Map([
|
|
31
|
+
[
|
|
32
|
+
"groq",
|
|
33
|
+
{
|
|
34
|
+
id: "groq",
|
|
35
|
+
label: "Groq (Llama 3.3 70B)",
|
|
36
|
+
endpoint: "https://api.groq.com/openai/v1/chat/completions",
|
|
37
|
+
defaultApiKeyEnvVar: "GROQ_API_KEY",
|
|
38
|
+
defaultModel: "llama-3.3-70b-versatile",
|
|
39
|
+
apiKeyGuideUrl: "https://console.groq.com",
|
|
40
|
+
models: [
|
|
41
|
+
{ value: "llama-3.3-70b-versatile", label: "Llama 3.3 70B Versatile", supportsJsonMode: true },
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
"copilot",
|
|
47
|
+
{
|
|
48
|
+
id: "copilot",
|
|
49
|
+
label: "GitHub Copilot (cuenta de VS Code)",
|
|
50
|
+
endpoint: "https://api.githubcopilot.com/chat/completions",
|
|
51
|
+
defaultApiKeyEnvVar: "",
|
|
52
|
+
defaultModel: "gpt-4o-mini",
|
|
53
|
+
apiKeyGuideUrl: "https://github.com/settings/copilot",
|
|
54
|
+
models: [
|
|
55
|
+
{ value: "gpt-4o-mini", label: "GPT-4o Mini (gratuito)", supportsJsonMode: true },
|
|
56
|
+
{ value: "gpt-4o", label: "GPT-4o (Copilot Pro)", supportsJsonMode: true },
|
|
57
|
+
{ value: "claude-3.5-sonnet", label: "Claude 3.5 Sonnet (Pro)", supportsJsonMode: false },
|
|
58
|
+
{ value: "o3-mini", label: "o3-mini (Pro)", supportsJsonMode: false },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
]);
|
|
63
|
+
let _copilotTokenCache = null;
|
|
64
|
+
/**
|
|
65
|
+
* Obtiene el GitHub OAuth token del contexto local:
|
|
66
|
+
* 1. Variable de entorno `GITHUB_TOKEN` (o la indicada en config).
|
|
67
|
+
* 2. Token literal en `ai.apiKey`.
|
|
68
|
+
* 3. Fallback automático: `gh auth token` (mismo token que usa VS Code / Copilot).
|
|
69
|
+
*/
|
|
70
|
+
function resolveGithubToken(config) {
|
|
71
|
+
const ai = config.ai;
|
|
72
|
+
const envVar = ai.apiKeyEnvVar || "GITHUB_TOKEN";
|
|
73
|
+
if (process.env[envVar])
|
|
74
|
+
return process.env[envVar];
|
|
75
|
+
if (ai.apiKey)
|
|
76
|
+
return ai.apiKey;
|
|
77
|
+
try {
|
|
78
|
+
return execSync("gh auth token", {
|
|
79
|
+
encoding: "utf-8",
|
|
80
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
81
|
+
}).trim();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return "";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Intercambia un GitHub OAuth token por el token efímero de la API de Copilot.
|
|
89
|
+
* El token resultante se cachea hasta 1 minuto antes de su expiración.
|
|
90
|
+
*
|
|
91
|
+
* Estrategia de resolución:
|
|
92
|
+
* 1. `copilot_internal/v2/token` — funciona para cuentas Copilot Individual.
|
|
93
|
+
* 2. Si devuelve 404, se usa el GitHub token directamente como Bearer —
|
|
94
|
+
* Copilot Business/Enterprise acepta el OAuth token de gh CLI sin intercambio.
|
|
95
|
+
*/
|
|
96
|
+
async function resolveCopilotToken(githubToken, signal) {
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
if (_copilotTokenCache && _copilotTokenCache.expiresAt > now + 60_000) {
|
|
99
|
+
return _copilotTokenCache.token;
|
|
100
|
+
}
|
|
101
|
+
const res = await fetch("https://api.github.com/copilot_internal/v2/token", {
|
|
102
|
+
headers: {
|
|
103
|
+
Authorization: `token ${githubToken}`,
|
|
104
|
+
"Editor-Version": "vscode/1.96.0",
|
|
105
|
+
"Editor-Plugin-Version": "copilot-chat/0.22.4",
|
|
106
|
+
"User-Agent": "GitHubCopilotChat/0.22.4",
|
|
107
|
+
},
|
|
108
|
+
signal,
|
|
109
|
+
});
|
|
110
|
+
// 404 → cuenta Business/Enterprise: el GitHub token se usa directamente
|
|
111
|
+
if (res.status === 404) {
|
|
112
|
+
return githubToken;
|
|
113
|
+
}
|
|
114
|
+
if (!res.ok) {
|
|
115
|
+
const body = await res.text().catch(() => "");
|
|
116
|
+
throw new Error(`No se pudo obtener el token de Copilot (${res.status}). ` +
|
|
117
|
+
`Verifica que tienes suscripción activa a GitHub Copilot. ${body}`);
|
|
118
|
+
}
|
|
119
|
+
const data = (await res.json());
|
|
120
|
+
const expiresAt = typeof data.expires_at === "number" && Number.isFinite(data.expires_at)
|
|
121
|
+
? data.expires_at * 1000
|
|
122
|
+
: Date.now() + 25 * 60 * 1000; // fallback: 25 min si la API devuelve un valor inválido
|
|
123
|
+
_copilotTokenCache = { token: data.token, expiresAt };
|
|
124
|
+
return data.token;
|
|
125
|
+
}
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Helpers de resolución de credenciales
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* Resuelve la API key para el proveedor configurado:
|
|
131
|
+
* - **Copilot**: obtiene el GitHub token vía env var, config literal o `gh auth token`
|
|
132
|
+
* (el mismo token que VS Code usa para Copilot — no requiere configuración manual).
|
|
133
|
+
* - **Otros**: env var indicada en config o la default del proveedor, luego literal.
|
|
134
|
+
*/
|
|
135
|
+
export function resolveApiKey(config) {
|
|
136
|
+
const ai = config.ai;
|
|
137
|
+
if (!ai)
|
|
138
|
+
return "";
|
|
139
|
+
const providerId = ai.provider ?? "groq";
|
|
140
|
+
// Copilot: GitHub token resuelto automáticamente (gh CLI / env var)
|
|
141
|
+
if (providerId === "copilot") {
|
|
142
|
+
return resolveGithubToken(config);
|
|
143
|
+
}
|
|
144
|
+
// Otros proveedores: env var + literal
|
|
145
|
+
const providerDesc = PROVIDER_REGISTRY.get(providerId);
|
|
146
|
+
const defaultEnvVar = providerDesc?.defaultApiKeyEnvVar ?? "GROQ_API_KEY";
|
|
147
|
+
const envVar = ai.apiKeyEnvVar || defaultEnvVar;
|
|
148
|
+
return process.env[envVar] || ai.apiKey || "";
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Detecta si el proceso está corriendo dentro de Visual Studio Code.
|
|
152
|
+
*
|
|
153
|
+
* VS Code inyecta estas variables de entorno en el terminal integrado y en
|
|
154
|
+
* sus procesos hijos:
|
|
155
|
+
* - `TERM_PROGRAM=vscode` → terminal integrado de VS Code
|
|
156
|
+
* - `VSCODE_PID` → proceso lanzado directamente por VS Code
|
|
157
|
+
* - `VSCODE_IPC_HOOK` → hook IPC interno de VS Code
|
|
158
|
+
*/
|
|
159
|
+
export function isVsCodeEnvironment() {
|
|
160
|
+
return (process.env["TERM_PROGRAM"] === "vscode" ||
|
|
161
|
+
!!process.env["VSCODE_PID"] ||
|
|
162
|
+
!!process.env["VSCODE_IPC_HOOK"]);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Devuelve `true` solo si la IA está habilitada (`ai.enabled: true`),
|
|
166
|
+
* hay una API key disponible Y, en el caso del proveedor `copilot`,
|
|
167
|
+
* el proceso corre dentro de Visual Studio Code.
|
|
168
|
+
*
|
|
169
|
+
* Copilot requiere VS Code porque sus credenciales son gestionadas
|
|
170
|
+
* exclusivamente por la extensión GitHub Copilot del IDE.
|
|
171
|
+
*/
|
|
172
|
+
export function isAiEnabled(config) {
|
|
173
|
+
if (!config.ai?.enabled)
|
|
174
|
+
return false;
|
|
175
|
+
const providerId = config.ai.provider ?? "groq";
|
|
176
|
+
if (providerId === "copilot" && !isVsCodeEnvironment()) {
|
|
177
|
+
process.stderr.write("[ai warn] El proveedor \"copilot\" solo está disponible dentro de Visual Studio Code.\n" +
|
|
178
|
+
" Cambia el proveedor a \"groq\" o \"github\" para usar la IA fuera del IDE.\n");
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
return !!resolveApiKey(config);
|
|
182
|
+
}
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
// Cliente HTTP genérico
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
/**
|
|
187
|
+
* Realiza una llamada chat-completions al proveedor configurado en `config.ai.provider`.
|
|
188
|
+
* La API de todos los proveedores soportados es compatible con el formato OpenAI.
|
|
189
|
+
*
|
|
190
|
+
* Usa `response_format: { type: "json_object" }` solo si el modelo lo soporta
|
|
191
|
+
* (ver `supportsJsonMode` en el `ModelDescriptor`).
|
|
192
|
+
*
|
|
193
|
+
* @throws {Error} Si la respuesta HTTP no es 2xx, si hay timeout o si el
|
|
194
|
+
* JSON de respuesta no tiene la forma esperada.
|
|
195
|
+
*/
|
|
196
|
+
export async function callAI(messages, config) {
|
|
197
|
+
const ai = config.ai;
|
|
198
|
+
const apiKey = resolveApiKey(config);
|
|
199
|
+
const providerId = ai.provider ?? "groq";
|
|
200
|
+
const model = ai.model;
|
|
201
|
+
const maxTokens = ai.maxTokens ?? 1024;
|
|
202
|
+
const timeoutMs = ai.timeoutMs ?? 15000;
|
|
203
|
+
// Resolver descriptor del proveedor (fallback a groq si es desconocido)
|
|
204
|
+
const providerDesc = PROVIDER_REGISTRY.get(providerId)
|
|
205
|
+
?? PROVIDER_REGISTRY.get("groq");
|
|
206
|
+
// Determinar si el modelo seleccionado soporta json_mode
|
|
207
|
+
const modelDesc = providerDesc.models.find((m) => m.value === model);
|
|
208
|
+
const useJsonMode = modelDesc?.supportsJsonMode ?? true;
|
|
209
|
+
const controller = new AbortController();
|
|
210
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
211
|
+
try {
|
|
212
|
+
const body = {
|
|
213
|
+
model,
|
|
214
|
+
messages,
|
|
215
|
+
max_tokens: maxTokens,
|
|
216
|
+
temperature: 0.2,
|
|
217
|
+
};
|
|
218
|
+
if (useJsonMode) {
|
|
219
|
+
body["response_format"] = { type: "json_object" };
|
|
220
|
+
}
|
|
221
|
+
// Para Copilot: intercambiar el GitHub token por el token efímero de la API
|
|
222
|
+
const authToken = providerId === "copilot"
|
|
223
|
+
? await resolveCopilotToken(apiKey, controller.signal)
|
|
224
|
+
: apiKey;
|
|
225
|
+
const copilotHeaders = providerId === "copilot"
|
|
226
|
+
? {
|
|
227
|
+
"Editor-Version": "vscode/1.96.0",
|
|
228
|
+
"Editor-Plugin-Version": "copilot-chat/0.22.4",
|
|
229
|
+
"Copilot-Integration-Id": "vscode-chat",
|
|
230
|
+
"User-Agent": "GitHubCopilotChat/0.22.4",
|
|
231
|
+
}
|
|
232
|
+
: {};
|
|
233
|
+
const response = await fetch(providerDesc.endpoint, {
|
|
234
|
+
method: "POST",
|
|
235
|
+
headers: {
|
|
236
|
+
"Content-Type": "application/json",
|
|
237
|
+
Authorization: `Bearer ${authToken}`,
|
|
238
|
+
...copilotHeaders,
|
|
239
|
+
},
|
|
240
|
+
body: JSON.stringify(body),
|
|
241
|
+
signal: controller.signal,
|
|
242
|
+
});
|
|
243
|
+
if (!response.ok) {
|
|
244
|
+
const errorText = await response.text().catch(() => "(no body)");
|
|
245
|
+
throw new Error(`${providerDesc.label} API ${response.status}: ${errorText}`);
|
|
246
|
+
}
|
|
247
|
+
const data = (await response.json());
|
|
248
|
+
const content = data.choices?.[0]?.message?.content;
|
|
249
|
+
if (typeof content !== "string") {
|
|
250
|
+
throw new Error(`Respuesta de ${providerDesc.label} sin campo choices[0].message.content`);
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
content,
|
|
254
|
+
tokensUsed: data.usage?.total_tokens ?? 0,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
clearTimeout(timer);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* @deprecated Alias de compatibilidad — usar `callAI` en código nuevo.
|
|
263
|
+
* Eliminado en la próxima versión mayor.
|
|
264
|
+
*/
|
|
265
|
+
export const callGroq = callAI;
|