@blogic-cz/agent-tools 1.10.1 → 1.12.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.
Files changed (106) hide show
  1. package/README.md +21 -44
  2. package/dist/credential-guard/bash.d.ts +3 -0
  3. package/dist/credential-guard/bash.d.ts.map +1 -0
  4. package/dist/credential-guard/claude-hook.d.ts.map +1 -1
  5. package/dist/credential-guard/engine.test.d.ts +5 -0
  6. package/dist/credential-guard/engine.test.d.ts.map +1 -0
  7. package/dist/credential-guard/index.d.ts +8 -35
  8. package/dist/credential-guard/index.d.ts.map +1 -1
  9. package/dist/credential-guard/ir.d.ts +150 -0
  10. package/dist/credential-guard/ir.d.ts.map +1 -0
  11. package/dist/credential-guard/literal-output.d.ts +2 -0
  12. package/dist/credential-guard/literal-output.d.ts.map +1 -0
  13. package/dist/credential-guard/passive-awk.d.ts +2 -0
  14. package/dist/credential-guard/passive-awk.d.ts.map +1 -0
  15. package/dist/credential-guard/passive-jq.d.ts.map +1 -1
  16. package/dist/credential-guard/passive-sed.d.ts +2 -0
  17. package/dist/credential-guard/passive-sed.d.ts.map +1 -0
  18. package/dist/credential-guard/passive.test.d.ts +2 -0
  19. package/dist/credential-guard/passive.test.d.ts.map +1 -0
  20. package/dist/credential-guard/paths.d.ts +14 -0
  21. package/dist/credential-guard/paths.d.ts.map +1 -0
  22. package/dist/credential-guard/policy.d.ts +47 -0
  23. package/dist/credential-guard/policy.d.ts.map +1 -0
  24. package/dist/credential-guard/powershell.d.ts +3 -0
  25. package/dist/credential-guard/powershell.d.ts.map +1 -0
  26. package/dist/credential-guard/registry.d.ts +89 -0
  27. package/dist/credential-guard/registry.d.ts.map +1 -0
  28. package/dist/credential-guard/review4.test.d.ts +2 -0
  29. package/dist/credential-guard/review4.test.d.ts.map +1 -0
  30. package/dist/credential-guard/review7.test.d.ts +2 -0
  31. package/dist/credential-guard/review7.test.d.ts.map +1 -0
  32. package/dist/credential-guard/shell-oracle.d.ts +2 -0
  33. package/dist/credential-guard/shell-oracle.d.ts.map +1 -0
  34. package/dist/credential-guard/xargs.d.ts +7 -0
  35. package/dist/credential-guard/xargs.d.ts.map +1 -0
  36. package/dist/db-tool/service.d.ts +2 -1
  37. package/dist/db-tool/service.d.ts.map +1 -1
  38. package/dist/db-tool/sql-client.d.ts +1 -0
  39. package/dist/db-tool/sql-client.d.ts.map +1 -1
  40. package/dist/gh-tool/pr/commands.d.ts.map +1 -1
  41. package/dist/gh-tool/read/api.d.ts +8 -0
  42. package/dist/gh-tool/read/api.d.ts.map +1 -1
  43. package/dist/gh-tool/read/cache.d.ts.map +1 -1
  44. package/dist/gh-tool/read/commands.d.ts +5 -0
  45. package/dist/gh-tool/read/commands.d.ts.map +1 -1
  46. package/dist/gh-tool/read/reads.d.ts +38 -0
  47. package/dist/gh-tool/read/reads.d.ts.map +1 -1
  48. package/dist/gh-tool/read/telemetry-command.d.ts +7 -0
  49. package/dist/gh-tool/read/telemetry-command.d.ts.map +1 -0
  50. package/dist/gh-tool/read/telemetry-store.d.ts +3 -0
  51. package/dist/gh-tool/read/telemetry-store.d.ts.map +1 -0
  52. package/dist/gh-tool/read/telemetry.d.ts +59 -0
  53. package/dist/gh-tool/read/telemetry.d.ts.map +1 -0
  54. package/dist/gh-tool/read/transport.d.ts.map +1 -1
  55. package/dist/observability-tool/logs.d.ts +1 -1
  56. package/dist/observability-tool/logs.d.ts.map +1 -1
  57. package/dist/observability-tool/metrics.d.ts +1 -1
  58. package/dist/observability-tool/metrics.d.ts.map +1 -1
  59. package/dist/observability-tool/shared.d.ts +2 -1
  60. package/dist/observability-tool/shared.d.ts.map +1 -1
  61. package/dist/observability-tool/trace.d.ts +1 -1
  62. package/dist/observability-tool/trace.d.ts.map +1 -1
  63. package/dist/shared/content-security.d.ts +3 -1
  64. package/dist/shared/content-security.d.ts.map +1 -1
  65. package/dist/shared/secret-env.d.ts +22 -0
  66. package/dist/shared/secret-env.d.ts.map +1 -0
  67. package/package.json +2 -1
  68. package/schemas/agent-tools.schema.json +1 -1
  69. package/src/credential-guard/bash.ts +769 -0
  70. package/src/credential-guard/claude-hook.ts +14 -14
  71. package/src/credential-guard/engine.test.ts +2050 -0
  72. package/src/credential-guard/index.ts +285 -4268
  73. package/src/credential-guard/ir.ts +139 -0
  74. package/src/credential-guard/literal-output.ts +8 -0
  75. package/src/credential-guard/passive-awk.ts +239 -0
  76. package/src/credential-guard/passive-jq.ts +183 -24
  77. package/src/credential-guard/passive-sed.ts +78 -0
  78. package/src/credential-guard/passive.test.ts +141 -0
  79. package/src/credential-guard/paths.ts +108 -0
  80. package/src/credential-guard/policy.ts +1576 -0
  81. package/src/credential-guard/powershell.ts +220 -0
  82. package/src/credential-guard/registry.ts +4720 -0
  83. package/src/credential-guard/review4.test.ts +83 -0
  84. package/src/credential-guard/review7.test.ts +51 -0
  85. package/src/credential-guard/rg-types.json +389 -0
  86. package/src/credential-guard/shell-oracle.ts +187 -0
  87. package/src/credential-guard/xargs.ts +65 -0
  88. package/src/db-tool/main.ts +2 -0
  89. package/src/db-tool/service.ts +122 -140
  90. package/src/db-tool/sql-client.ts +7 -4
  91. package/src/gh-tool/main.ts +30 -6
  92. package/src/gh-tool/pr/commands.ts +9 -2
  93. package/src/gh-tool/pr/core.ts +2 -2
  94. package/src/gh-tool/read/api.ts +73 -6
  95. package/src/gh-tool/read/cache.ts +13 -4
  96. package/src/gh-tool/read/commands.ts +17 -1
  97. package/src/gh-tool/read/reads.ts +84 -1
  98. package/src/gh-tool/read/telemetry-command.ts +45 -0
  99. package/src/gh-tool/read/telemetry-store.ts +85 -0
  100. package/src/gh-tool/read/telemetry.ts +191 -0
  101. package/src/gh-tool/read/transport.ts +10 -5
  102. package/src/gh-tool/workflow.ts +2 -2
  103. package/src/observability-tool/main.ts +7 -1
  104. package/src/observability-tool/shared.ts +20 -14
  105. package/src/shared/content-security.ts +7 -2
  106. package/src/shared/secret-env.ts +230 -0
@@ -0,0 +1,83 @@
1
+ import { expect, it } from "vitest";
2
+ import { createCredentialGuard } from "./index";
3
+
4
+ it.each(["unknown-type"])("rejects unknown Grep type %s", (type) => {
5
+ const guard = createCredentialGuard();
6
+ expect(() =>
7
+ guard.handleToolExecuteBefore(
8
+ { tool: "Grep" },
9
+ { args: { pattern: "FAKE", type, output_mode: "content" } },
10
+ ),
11
+ ).toThrow();
12
+ });
13
+ it.each(["ts", "js", "sh", "zsh", "json", "py", "md", "yaml"])(
14
+ "accepts Grep type filter %s",
15
+ (type) => {
16
+ const guard = createCredentialGuard();
17
+ expect(() =>
18
+ guard.handleToolExecuteBefore(
19
+ { tool: "Grep" },
20
+ { args: { pattern: "FAKE", type, output_mode: "content" } },
21
+ ),
22
+ ).not.toThrow();
23
+ },
24
+ );
25
+ it.each([
26
+ "gh pr view --zz-undeclared -R example/repo",
27
+ "rtk gain --zz-undeclared",
28
+ "rtk read --zz-undeclared README.md",
29
+ "find . --zz-undeclared",
30
+ ])("accepts harmless undeclared special-command options: %s", (command) => {
31
+ const guard = createCredentialGuard();
32
+ expect(() =>
33
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
34
+ ).not.toThrow();
35
+ });
36
+
37
+ it.each([
38
+ "git grep text -- '*.ts' ':!*.json'",
39
+ "git grep text -- '*.cs' ':(exclude,glob)*Tests*'",
40
+ "git grep text -- '*.ts' ':^secrets'",
41
+ "rg --files -t sh",
42
+ ])("accepts exclusions and file listings: %s", (command) => {
43
+ const guard = createCredentialGuard();
44
+ expect(() =>
45
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
46
+ ).not.toThrow();
47
+ });
48
+ it.each([
49
+ "git fetch origin main --u=printenv",
50
+ "git --zz=.env",
51
+ "git diff --unified .env ordinary.ts",
52
+ ])("refuses ambiguous or undeclared option forms: %s", (command) => {
53
+ const guard = createCredentialGuard();
54
+ expect(() => guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } })).toThrow();
55
+ });
56
+
57
+ it("checks a qualified environment provider in an attached path parameter", () => {
58
+ const guard = createCredentialGuard();
59
+ expect(() =>
60
+ guard.handleToolExecuteBefore(
61
+ { tool: "PowerShell" },
62
+ { args: { command: "Get-ChildItem -Path:'Microsoft.PowerShell.Core\\Environment::'" } },
63
+ ),
64
+ ).toThrow();
65
+ });
66
+ it.each(["nodejs", "pypy", "pypy3", "luajit", "lua5.4", "ipython", "ipython3", "bpython"])(
67
+ "refuses code stdin to %s",
68
+ (name) => {
69
+ const guard = createCredentialGuard();
70
+ expect(() =>
71
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command: name + " <<< 'x'" } }),
72
+ ).toThrow();
73
+ },
74
+ );
75
+
76
+ it.each(["git grep -hoE pattern -- '*.cs'", "npm run check env"])(
77
+ "accepts safe data and reader flags: %s",
78
+ (command) => {
79
+ expect(() =>
80
+ createCredentialGuard({}).handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
81
+ ).not.toThrow();
82
+ },
83
+ );
@@ -0,0 +1,51 @@
1
+ import { expect, it } from "vitest";
2
+ import { createCredentialGuard } from "./index";
3
+
4
+ it("checks code flags throughout short-option clusters in unknown operands", () => {
5
+ const guard = createCredentialGuard();
6
+ for (const prefix of ["unknown-cli", "pnpm exec", "cargo unknown-sub"]) {
7
+ for (const invocation of [
8
+ "bash -lc 'env | head'",
9
+ "bash -ec 'env | head'",
10
+ "sh -xc 'env | head'",
11
+ "python3 -Ic 'import os;print(os.environ)'",
12
+ "python3 -uc 'import os;print(os.environ)'",
13
+ "python -Ec 'import os;print(os.environ)'",
14
+ "python3 -Iuc'import os;print(os.environ)'",
15
+ "perl -we 'print %ENV'",
16
+ "ruby -we 'p ENV'",
17
+ "node -pe 'process.env'",
18
+ ]) {
19
+ const command = `${prefix} ${invocation}`;
20
+ expect(() =>
21
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
22
+ ).toThrow();
23
+ }
24
+ for (const invocation of [
25
+ "python3 -Wc script.py",
26
+ "ruby -Icode script.rb",
27
+ "perl -Iexample script.pl",
28
+ ]) {
29
+ const command = `${prefix} ${invocation}`;
30
+ expect(() =>
31
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
32
+ ).not.toThrow();
33
+ }
34
+ }
35
+ });
36
+
37
+ it("analyzes awk program operands under unknown commands", () => {
38
+ const guard = createCredentialGuard();
39
+ for (const prefix of ["unknown-cli", "pnpm exec", "git unknown-sub"]) {
40
+ for (const flags of ["", "-F:", "-F :", "-v key=1", "-vkey=1", "--", "-e", "--source="]) {
41
+ const command = `${prefix} awk ${flags}${flags.endsWith("=") ? "" : " "}'BEGIN{print ENVIRON["FAKE_TOKEN"]}'`;
42
+ expect(() =>
43
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
44
+ ).toThrow();
45
+ }
46
+ const command = `${prefix} awk -F: -v key=1 '{print $1}' input.txt`;
47
+ expect(() =>
48
+ guard.handleToolExecuteBefore({ tool: "Bash" }, { args: { command } }),
49
+ ).not.toThrow();
50
+ }
51
+ });
@@ -0,0 +1,389 @@
1
+ {
2
+ "ada": ["*.adb", "*.ads"],
3
+ "agda": ["*.agda", "*.lagda"],
4
+ "aidl": ["*.aidl"],
5
+ "alire": ["alire.toml"],
6
+ "amake": ["*.bp", "*.mk"],
7
+ "asciidoc": ["*.adoc", "*.asc", "*.asciidoc"],
8
+ "asm": ["*.S", "*.asm", "*.s"],
9
+ "asp": ["*.ascx", "*.ascx.cs", "*.ascx.vb", "*.asp", "*.aspx", "*.aspx.cs", "*.aspx.vb"],
10
+ "ats": ["*.ats", "*.dats", "*.hats", "*.sats"],
11
+ "avro": ["*.avdl", "*.avpr", "*.avsc"],
12
+ "awk": ["*.awk"],
13
+ "bat": ["*.bat"],
14
+ "batch": ["*.bat"],
15
+ "bazel": [
16
+ "*.BUILD",
17
+ "*.bazel",
18
+ "*.bazelrc",
19
+ "*.bzl",
20
+ "BUILD",
21
+ "MODULE.bazel",
22
+ "WORKSPACE",
23
+ "WORKSPACE.bazel",
24
+ "WORKSPACE.bzlmod"
25
+ ],
26
+ "bitbake": ["*.bb", "*.bbappend", "*.bbclass", "*.conf", "*.inc"],
27
+ "boxlang": ["*.bx", "*.bxm", "*.bxs"],
28
+ "brotli": ["*.br"],
29
+ "buildstream": ["*.bst"],
30
+ "bzip2": ["*.bz2", "*.tbz2"],
31
+ "c": ["*.[chH]", "*.[chH].in", "*.cats"],
32
+ "cabal": ["*.cabal"],
33
+ "candid": ["*.did"],
34
+ "carp": ["*.carp"],
35
+ "cbor": ["*.cbor"],
36
+ "ceylon": ["*.ceylon"],
37
+ "cfml": ["*.cfc", "*.cfm"],
38
+ "clojure": ["*.clj", "*.cljc", "*.cljs", "*.cljx"],
39
+ "cmake": ["*.cmake", "CMakeLists.txt"],
40
+ "cmd": ["*.bat", "*.cmd"],
41
+ "cml": ["*.cml"],
42
+ "coffeescript": ["*.coffee"],
43
+ "config": ["*.cfg", "*.conf", "*.config", "*.ini"],
44
+ "container": ["*Containerfile*", "*Dockerfile*"],
45
+ "coq": ["*.v"],
46
+ "cpp": [
47
+ "*.[ChH]",
48
+ "*.[ChH].in",
49
+ "*.[ch]pp",
50
+ "*.[ch]pp.in",
51
+ "*.[ch]xx",
52
+ "*.[ch]xx.in",
53
+ "*.cc",
54
+ "*.cc.in",
55
+ "*.hh",
56
+ "*.hh.in",
57
+ "*.inl"
58
+ ],
59
+ "creole": ["*.creole"],
60
+ "crystal": ["*.cr", "*.ecr", "Projectfile", "shard.yml"],
61
+ "cs": ["*.cs"],
62
+ "csharp": ["*.cs"],
63
+ "cshtml": ["*.cshtml"],
64
+ "csproj": ["*.csproj"],
65
+ "css": ["*.css", "*.scss"],
66
+ "csv": ["*.csv"],
67
+ "cuda": ["*.cu", "*.cuh"],
68
+ "cython": ["*.pxd", "*.pxi", "*.pyx"],
69
+ "d": ["*.d"],
70
+ "dart": ["*.dart"],
71
+ "devicetree": ["*.dts", "*.dtsi", "*.dtso"],
72
+ "dhall": ["*.dhall"],
73
+ "diff": ["*.diff", "*.patch"],
74
+ "dita": ["*.dita", "*.ditamap", "*.ditaval"],
75
+ "docker": ["*Dockerfile*"],
76
+ "dockercompose": ["docker-compose.*.yml", "docker-compose.yml"],
77
+ "dts": ["*.dts", "*.dtsi"],
78
+ "dvc": ["*.dvc", "Dvcfile"],
79
+ "ebuild": ["*.ebuild", "*.eclass"],
80
+ "edn": ["*.edn"],
81
+ "elisp": ["*.el"],
82
+ "elixir": ["*.eex", "*.ex", "*.exs", "*.heex", "*.leex", "*.livemd"],
83
+ "elm": ["*.elm"],
84
+ "erb": ["*.erb"],
85
+ "erlang": ["*.erl", "*.hrl"],
86
+ "fennel": ["*.fnl"],
87
+ "fidl": ["*.fidl"],
88
+ "fish": ["*.fish"],
89
+ "flatbuffers": ["*.fbs"],
90
+ "fortran": ["*.F", "*.F77", "*.F90", "*.F95", "*.f", "*.f77", "*.f90", "*.f95", "*.pfo"],
91
+ "fsharp": ["*.fs", "*.fsi", "*.fsx"],
92
+ "fut": ["*.fut"],
93
+ "gap": ["*.g", "*.gap", "*.gd", "*.gi", "*.tst"],
94
+ "gdscript": ["*.gd"],
95
+ "gleam": ["*.gleam"],
96
+ "gn": ["*.gn", "*.gni"],
97
+ "go": ["*.go"],
98
+ "gprbuild": ["*.gpr"],
99
+ "gradle": [
100
+ "*.gradle",
101
+ "*.gradle.kts",
102
+ "gradle-wrapper.*",
103
+ "gradle.properties",
104
+ "gradlew",
105
+ "gradlew.bat"
106
+ ],
107
+ "graphql": ["*.graphql", "*.graphqls"],
108
+ "groovy": ["*.gradle", "*.groovy"],
109
+ "gzip": ["*.gz", "*.tgz"],
110
+ "h": ["*.h", "*.hh", "*.hpp"],
111
+ "haml": ["*.haml"],
112
+ "hare": ["*.ha"],
113
+ "haskell": ["*.c2hs", "*.cpphs", "*.hs", "*.hsc", "*.lhs"],
114
+ "hbs": ["*.hbs"],
115
+ "hs": ["*.hs", "*.lhs"],
116
+ "html": ["*.ejs", "*.htm", "*.html"],
117
+ "hurl": ["*.hurl"],
118
+ "hy": ["*.hy"],
119
+ "idris": ["*.idr", "*.lidr"],
120
+ "janet": ["*.janet"],
121
+ "java": ["*.java", "*.jsp", "*.jspx", "*.properties"],
122
+ "jinja": ["*.j2", "*.jinja", "*.jinja2"],
123
+ "jl": ["*.jl"],
124
+ "js": ["*.cjs", "*.js", "*.jsx", "*.mjs", "*.vue"],
125
+ "json": ["*.json", "*.sarif", "composer.lock"],
126
+ "jsonl": ["*.jsonl"],
127
+ "julia": ["*.jl"],
128
+ "jupyter": ["*.ipynb", "*.jpynb"],
129
+ "k": ["*.k"],
130
+ "kconfig": ["Kconfig", "Kconfig.*"],
131
+ "kotlin": ["*.kt", "*.kts"],
132
+ "lean": ["*.lean"],
133
+ "less": ["*.less"],
134
+ "license": [
135
+ "*[.-]LICEN[CS]E*",
136
+ "AGPL-*[0-9]*",
137
+ "APACHE-*[0-9]*",
138
+ "BSD-*[0-9]*",
139
+ "CC-BY-*",
140
+ "COPYING",
141
+ "COPYING[.-]*",
142
+ "COPYRIGHT",
143
+ "COPYRIGHT[.-]*",
144
+ "EULA",
145
+ "EULA[.-]*",
146
+ "GFDL-*[0-9]*",
147
+ "GNU-*[0-9]*",
148
+ "GPL-*[0-9]*",
149
+ "LGPL-*[0-9]*",
150
+ "LICEN[CS]E",
151
+ "LICEN[CS]E[.-]*",
152
+ "MIT-*[0-9]*",
153
+ "MPL-*[0-9]*",
154
+ "NOTICE",
155
+ "NOTICE[.-]*",
156
+ "OFL-*[0-9]*",
157
+ "PATENTS",
158
+ "PATENTS[.-]*",
159
+ "UNLICEN[CS]E",
160
+ "UNLICEN[CS]E[.-]*",
161
+ "agpl[.-]*",
162
+ "gpl[.-]*",
163
+ "lgpl[.-]*",
164
+ "licen[cs]e",
165
+ "licen[cs]e.*"
166
+ ],
167
+ "lilypond": ["*.ily", "*.ly"],
168
+ "lisp": ["*.el", "*.jl", "*.lisp", "*.lsp", "*.sc", "*.scm"],
169
+ "llvm": ["*.ll"],
170
+ "lock": ["*.lock", "package-lock.json"],
171
+ "log": ["*.log"],
172
+ "lua": ["*.lua"],
173
+ "lz4": ["*.lz4"],
174
+ "lzma": ["*.lzma"],
175
+ "m4": ["*.ac", "*.m4"],
176
+ "make": [
177
+ "*.mak",
178
+ "*.mk",
179
+ "Makefile.*",
180
+ "[Gg][Nn][Uu]makefile",
181
+ "[Gg][Nn][Uu]makefile.am",
182
+ "[Gg][Nn][Uu]makefile.in",
183
+ "[Mm]akefile",
184
+ "[Mm]akefile.am",
185
+ "[Mm]akefile.in"
186
+ ],
187
+ "mako": ["*.mako", "*.mao"],
188
+ "man": ["*.[0-9][cEFMmpSx]", "*.[0-9lnpx]"],
189
+ "markdown": ["*.markdown", "*.md", "*.mdown", "*.mdwn", "*.mdx", "*.mkd", "*.mkdn"],
190
+ "matlab": ["*.m"],
191
+ "md": ["*.markdown", "*.md", "*.mdown", "*.mdwn", "*.mdx", "*.mkd", "*.mkdn"],
192
+ "meson": ["meson.build", "meson.options", "meson_options.txt"],
193
+ "minified": ["*.min.css", "*.min.html", "*.min.js"],
194
+ "mint": ["*.mint"],
195
+ "mk": ["mkfile"],
196
+ "ml": ["*.ml"],
197
+ "mojo": ["*.mojo"],
198
+ "motoko": ["*.mo"],
199
+ "msbuild": [
200
+ "*.csproj",
201
+ "*.fsproj",
202
+ "*.proj",
203
+ "*.props",
204
+ "*.sln",
205
+ "*.slnf",
206
+ "*.targets",
207
+ "*.vcxproj"
208
+ ],
209
+ "nim": ["*.nim", "*.nimble", "*.nimf", "*.nims"],
210
+ "nix": ["*.nix"],
211
+ "objc": ["*.h", "*.m"],
212
+ "objcpp": ["*.h", "*.mm"],
213
+ "ocaml": ["*.ml", "*.mli", "*.mll", "*.mly"],
214
+ "org": ["*.org", "*.org_archive"],
215
+ "pants": ["BUILD"],
216
+ "pascal": ["*.dpr", "*.inc", "*.lpr", "*.pas", "*.pp"],
217
+ "pdf": ["*.pdf"],
218
+ "perl": ["*.PL", "*.perl", "*.pl", "*.plh", "*.plx", "*.pm", "*.t"],
219
+ "php": ["*.php", "*.php3", "*.php4", "*.php5", "*.php7", "*.php8", "*.pht", "*.phtml"],
220
+ "pkgbuild": ["PKGBUILD"],
221
+ "po": ["*.po"],
222
+ "pod": ["*.pod"],
223
+ "postscript": ["*.eps", "*.ps"],
224
+ "prolog": ["*.P", "*.pl", "*.pro", "*.prolog"],
225
+ "proto": ["*.proto"],
226
+ "protobuf": ["*.proto"],
227
+ "ps": ["*.cdxml", "*.ps1", "*.ps1xml", "*.psd1", "*.psm1"],
228
+ "puppet": ["*.epp", "*.erb", "*.pp", "*.rb"],
229
+ "purs": ["*.purs"],
230
+ "py": ["*.py", "*.pyi"],
231
+ "python": ["*.py", "*.pyi"],
232
+ "qmake": ["*.prf", "*.pri", "*.pro"],
233
+ "qml": ["*.qml"],
234
+ "qrc": ["*.qrc"],
235
+ "qui": ["*.ui"],
236
+ "r": ["*.R", "*.Rmd", "*.Rnw", "*.r", "*.rmd", "*.rnw"],
237
+ "racket": ["*.rkt"],
238
+ "raku": ["*.p6", "*.pl6", "*.pm6", "*.raku", "*.rakudoc", "*.rakumod", "*.rakutest"],
239
+ "rdoc": ["*.rdoc"],
240
+ "readme": ["*README", "README*"],
241
+ "reasonml": ["*.re", "*.rei"],
242
+ "red": ["*.r", "*.red", "*.reds"],
243
+ "rescript": ["*.res", "*.resi"],
244
+ "robot": ["*.robot"],
245
+ "rocq": ["*.v"],
246
+ "rst": ["*.rst"],
247
+ "ruby": ["*.gemspec", "*.rake", "*.rb", "*.rbw", ".irbrc", "Gemfile", "Rakefile", "config.ru"],
248
+ "rust": ["*.rs"],
249
+ "sass": ["*.sass", "*.scss"],
250
+ "scala": ["*.sbt", "*.scala"],
251
+ "scdoc": ["*.scd", "*.scdoc"],
252
+ "seed7": ["*.s7i", "*.sd7"],
253
+ "sh": [
254
+ "*.bash",
255
+ "*.bashrc",
256
+ "*.csh",
257
+ "*.cshrc",
258
+ "*.env",
259
+ "*.ksh",
260
+ "*.kshrc",
261
+ "*.sh",
262
+ "*.tcsh",
263
+ "*.zsh",
264
+ ".bash_login",
265
+ ".bash_logout",
266
+ ".bash_profile",
267
+ ".bashrc",
268
+ ".cshrc",
269
+ ".env",
270
+ ".kshrc",
271
+ ".login",
272
+ ".logout",
273
+ ".profile",
274
+ ".tcshrc",
275
+ ".zlogin",
276
+ ".zlogout",
277
+ ".zprofile",
278
+ ".zshenv",
279
+ ".zshrc",
280
+ "bash_login",
281
+ "bash_logout",
282
+ "bash_profile",
283
+ "bashrc",
284
+ "profile",
285
+ "zlogin",
286
+ "zlogout",
287
+ "zprofile",
288
+ "zshenv",
289
+ "zshrc"
290
+ ],
291
+ "slim": ["*.skim", "*.slim", "*.slime"],
292
+ "smarty": ["*.tpl"],
293
+ "sml": ["*.sig", "*.sml"],
294
+ "solidity": ["*.sol"],
295
+ "soy": ["*.soy"],
296
+ "spark": ["*.spark"],
297
+ "spec": ["*.spec"],
298
+ "sql": ["*.psql", "*.sql"],
299
+ "ssa": ["*.ssa"],
300
+ "stylus": ["*.styl"],
301
+ "sv": ["*.h", "*.sv", "*.svh", "*.v", "*.vg"],
302
+ "svelte": ["*.svelte", "*.svelte.ts"],
303
+ "svg": ["*.svg"],
304
+ "swift": ["*.swift"],
305
+ "swig": ["*.def", "*.i"],
306
+ "systemd": [
307
+ "*.automount",
308
+ "*.conf",
309
+ "*.device",
310
+ "*.link",
311
+ "*.mount",
312
+ "*.path",
313
+ "*.scope",
314
+ "*.service",
315
+ "*.slice",
316
+ "*.socket",
317
+ "*.swap",
318
+ "*.target",
319
+ "*.timer"
320
+ ],
321
+ "taskpaper": ["*.taskpaper"],
322
+ "tcl": ["*.tcl"],
323
+ "tex": ["*.bib", "*.cls", "*.dtx", "*.ins", "*.ltx", "*.sty", "*.tex"],
324
+ "texinfo": ["*.texi"],
325
+ "textile": ["*.textile"],
326
+ "tf": [
327
+ "*.terraform.lock.hcl",
328
+ "*.terraformrc",
329
+ "*.tf",
330
+ "*.tf.json",
331
+ "*.tfrc",
332
+ "*.tfvars",
333
+ "*.tfvars.json",
334
+ "terraform.rc"
335
+ ],
336
+ "thrift": ["*.thrift"],
337
+ "toml": ["*.toml", "Cargo.lock"],
338
+ "ts": ["*.cts", "*.mts", "*.ts", "*.tsx"],
339
+ "twig": ["*.twig"],
340
+ "txt": ["*.txt"],
341
+ "typescript": ["*.cts", "*.mts", "*.ts", "*.tsx"],
342
+ "typoscript": ["*.ts", "*.typoscript"],
343
+ "typst": ["*.typ"],
344
+ "usd": ["*.usd", "*.usda", "*.usdc"],
345
+ "v": ["*.v", "*.vsh"],
346
+ "vala": ["*.vala"],
347
+ "vb": ["*.vb"],
348
+ "vcl": ["*.vcl"],
349
+ "verilog": ["*.sv", "*.svh", "*.v", "*.vh"],
350
+ "vhdl": ["*.vhd", "*.vhdl"],
351
+ "vim": ["*.vim", ".gvimrc", ".vimrc", "_gvimrc", "_vimrc", "gvimrc", "vimrc"],
352
+ "vimscript": ["*.vim", ".gvimrc", ".vimrc", "_gvimrc", "_vimrc", "gvimrc", "vimrc"],
353
+ "vue": ["*.vue"],
354
+ "webidl": ["*.idl", "*.webidl", "*.widl"],
355
+ "wgsl": ["*.wgsl"],
356
+ "wiki": ["*.mediawiki", "*.wiki"],
357
+ "xml": [
358
+ "*.dtd",
359
+ "*.rng",
360
+ "*.sch",
361
+ "*.xhtml",
362
+ "*.xjb",
363
+ "*.xml",
364
+ "*.xml.dist",
365
+ "*.xsd",
366
+ "*.xsl",
367
+ "*.xslt"
368
+ ],
369
+ "xz": ["*.txz", "*.xz"],
370
+ "yacc": ["*.y"],
371
+ "yaml": ["*.yaml", "*.yml"],
372
+ "yang": ["*.yang"],
373
+ "z": ["*.Z"],
374
+ "zig": ["*.zig"],
375
+ "zsh": [
376
+ "*.zsh",
377
+ ".zlogin",
378
+ ".zlogout",
379
+ ".zprofile",
380
+ ".zshenv",
381
+ ".zshrc",
382
+ "zlogin",
383
+ "zlogout",
384
+ "zprofile",
385
+ "zshenv",
386
+ "zshrc"
387
+ ],
388
+ "zstd": ["*.zst", "*.zstd"]
389
+ }