arity.ts 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. export namespace BashArity {
  2. export function prefix(tokens: string[]) {
  3. for (let len = tokens.length; len > 0; len--) {
  4. const prefix = tokens.slice(0, len).join(" ")
  5. const arity = ARITY[prefix]
  6. if (arity !== undefined) return tokens.slice(0, arity)
  7. }
  8. if (tokens.length === 0) return []
  9. return tokens.slice(0, 1)
  10. }
  11. /* Generated with following prompt:
  12. You are generating a dictionary of command-prefix arities for bash-style commands.
  13. This dictionary is used to identify the "human-understandable command" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.
  14. 2. **Flags NEVER count as tokens**. Only subcommands count.
  15. 3. **Longest matching prefix wins**.
  16. 4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.
  17. 5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical
  18. 6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)
  19. * `git checkout main` → `git checkout` (because `git` has arity 2)
  20. * `npm install` → `npm install` (because `npm` has arity 2)
  21. * `npm run dev` → `npm run dev` (because `npm run` has arity 3)
  22. * `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**
  23. */
  24. const ARITY: Record<string, number> = {
  25. cat: 1, // cat file.txt
  26. cd: 1, // cd /path/to/dir
  27. chmod: 1, // chmod 755 script.sh
  28. chown: 1, // chown user:group file.txt
  29. cp: 1, // cp source.txt dest.txt
  30. echo: 1, // echo "hello world"
  31. env: 1, // env
  32. export: 1, // export PATH=/usr/bin
  33. grep: 1, // grep pattern file.txt
  34. kill: 1, // kill 1234
  35. killall: 1, // killall process
  36. ln: 1, // ln -s source target
  37. ls: 1, // ls -la
  38. mkdir: 1, // mkdir new-dir
  39. mv: 1, // mv old.txt new.txt
  40. ps: 1, // ps aux
  41. pwd: 1, // pwd
  42. rm: 1, // rm file.txt
  43. rmdir: 1, // rmdir empty-dir
  44. sleep: 1, // sleep 5
  45. source: 1, // source ~/.bashrc
  46. tail: 1, // tail -f log.txt
  47. touch: 1, // touch file.txt
  48. unset: 1, // unset VAR
  49. which: 1, // which node
  50. aws: 3, // aws s3 ls
  51. az: 3, // az storage blob list
  52. bazel: 2, // bazel build
  53. brew: 2, // brew install node
  54. bun: 2, // bun install
  55. "bun run": 3, // bun run dev
  56. "bun x": 3, // bun x vite
  57. cargo: 2, // cargo build
  58. "cargo add": 3, // cargo add tokio
  59. "cargo run": 3, // cargo run main
  60. cdk: 2, // cdk deploy
  61. cf: 2, // cf push app
  62. cmake: 2, // cmake build
  63. composer: 2, // composer require laravel
  64. consul: 2, // consul members
  65. "consul kv": 3, // consul kv get config/app
  66. crictl: 2, // crictl ps
  67. deno: 2, // deno run server.ts
  68. "deno task": 3, // deno task dev
  69. doctl: 3, // doctl kubernetes cluster list
  70. docker: 2, // docker run nginx
  71. "docker builder": 3, // docker builder prune
  72. "docker compose": 3, // docker compose up
  73. "docker container": 3, // docker container ls
  74. "docker image": 3, // docker image prune
  75. "docker network": 3, // docker network inspect
  76. "docker volume": 3, // docker volume ls
  77. eksctl: 2, // eksctl get clusters
  78. "eksctl create": 3, // eksctl create cluster
  79. firebase: 2, // firebase deploy
  80. flyctl: 2, // flyctl deploy
  81. gcloud: 3, // gcloud compute instances list
  82. gh: 3, // gh pr list
  83. git: 2, // git checkout main
  84. "git config": 3, // git config user.name
  85. "git remote": 3, // git remote add origin
  86. "git stash": 3, // git stash pop
  87. go: 2, // go build
  88. gradle: 2, // gradle build
  89. helm: 2, // helm install mychart
  90. heroku: 2, // heroku logs
  91. hugo: 2, // hugo new site blog
  92. ip: 2, // ip link show
  93. "ip addr": 3, // ip addr show
  94. "ip link": 3, // ip link set eth0 up
  95. "ip netns": 3, // ip netns exec foo bash
  96. "ip route": 3, // ip route add default via 1.1.1.1
  97. kind: 2, // kind delete cluster
  98. "kind create": 3, // kind create cluster
  99. kubectl: 2, // kubectl get pods
  100. "kubectl kustomize": 3, // kubectl kustomize overlays/dev
  101. "kubectl rollout": 3, // kubectl rollout restart deploy/api
  102. kustomize: 2, // kustomize build .
  103. make: 2, // make build
  104. mc: 2, // mc ls myminio
  105. "mc admin": 3, // mc admin info myminio
  106. minikube: 2, // minikube start
  107. mongosh: 2, // mongosh test
  108. mysql: 2, // mysql -u root
  109. mvn: 2, // mvn compile
  110. ng: 2, // ng generate component home
  111. npm: 2, // npm install
  112. "npm exec": 3, // npm exec vite
  113. "npm init": 3, // npm init vue
  114. "npm run": 3, // npm run dev
  115. "npm view": 3, // npm view react version
  116. nvm: 2, // nvm use 18
  117. nx: 2, // nx build
  118. openssl: 2, // openssl genrsa 2048
  119. "openssl req": 3, // openssl req -new -key key.pem
  120. "openssl x509": 3, // openssl x509 -in cert.pem
  121. pip: 2, // pip install numpy
  122. pipenv: 2, // pipenv install flask
  123. pnpm: 2, // pnpm install
  124. "pnpm dlx": 3, // pnpm dlx create-next-app
  125. "pnpm exec": 3, // pnpm exec vite
  126. "pnpm run": 3, // pnpm run dev
  127. poetry: 2, // poetry add requests
  128. podman: 2, // podman run alpine
  129. "podman container": 3, // podman container ls
  130. "podman image": 3, // podman image prune
  131. psql: 2, // psql -d mydb
  132. pulumi: 2, // pulumi up
  133. "pulumi stack": 3, // pulumi stack output
  134. pyenv: 2, // pyenv install 3.11
  135. python: 2, // python -m venv env
  136. rake: 2, // rake db:migrate
  137. rbenv: 2, // rbenv install 3.2.0
  138. "redis-cli": 2, // redis-cli ping
  139. rustup: 2, // rustup update
  140. serverless: 2, // serverless invoke
  141. sfdx: 3, // sfdx force:org:list
  142. skaffold: 2, // skaffold dev
  143. sls: 2, // sls deploy
  144. sst: 2, // sst deploy
  145. swift: 2, // swift build
  146. systemctl: 2, // systemctl restart nginx
  147. terraform: 2, // terraform apply
  148. "terraform workspace": 3, // terraform workspace select prod
  149. tmux: 2, // tmux new -s dev
  150. turbo: 2, // turbo run build
  151. ufw: 2, // ufw allow 22
  152. vault: 2, // vault login
  153. "vault auth": 3, // vault auth list
  154. "vault kv": 3, // vault kv get secret/api
  155. vercel: 2, // vercel deploy
  156. volta: 2, // volta install node
  157. wp: 2, // wp plugin install
  158. yarn: 2, // yarn add react
  159. "yarn dlx": 3, // yarn dlx create-react-app
  160. "yarn run": 3, // yarn run dev
  161. }
  162. }