@vetala/vetala 0.1.0-beta

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.

Potentially problematic release.


This version of @vetala/vetala might be problematic. Click here for more details.

Files changed (271) hide show
  1. package/CONTRIBUTING.md +77 -0
  2. package/LICENSE +184 -0
  3. package/README.md +136 -0
  4. package/THIRD_PARTY_LICENSES.md +17 -0
  5. package/dist/src/agent.d.ts +30 -0
  6. package/dist/src/agent.js +216 -0
  7. package/dist/src/agent.js.map +1 -0
  8. package/dist/src/approvals.d.ts +18 -0
  9. package/dist/src/approvals.js +81 -0
  10. package/dist/src/approvals.js.map +1 -0
  11. package/dist/src/cli.d.ts +2 -0
  12. package/dist/src/cli.js +87 -0
  13. package/dist/src/cli.js.map +1 -0
  14. package/dist/src/config.d.ts +12 -0
  15. package/dist/src/config.js +183 -0
  16. package/dist/src/config.js.map +1 -0
  17. package/dist/src/context-memory.d.ts +7 -0
  18. package/dist/src/context-memory.js +96 -0
  19. package/dist/src/context-memory.js.map +1 -0
  20. package/dist/src/ink/command-suggestions.d.ts +7 -0
  21. package/dist/src/ink/command-suggestions.js +179 -0
  22. package/dist/src/ink/command-suggestions.js.map +1 -0
  23. package/dist/src/ink/ink-terminal-ui.d.ts +36 -0
  24. package/dist/src/ink/ink-terminal-ui.js +79 -0
  25. package/dist/src/ink/ink-terminal-ui.js.map +1 -0
  26. package/dist/src/ink/repl-app.d.ts +9 -0
  27. package/dist/src/ink/repl-app.js +789 -0
  28. package/dist/src/ink/repl-app.js.map +1 -0
  29. package/dist/src/ink/transcript-cards.d.ts +6 -0
  30. package/dist/src/ink/transcript-cards.js +24 -0
  31. package/dist/src/ink/transcript-cards.js.map +1 -0
  32. package/dist/src/path-policy.d.ts +11 -0
  33. package/dist/src/path-policy.js +67 -0
  34. package/dist/src/path-policy.js.map +1 -0
  35. package/dist/src/process-utils.d.ts +13 -0
  36. package/dist/src/process-utils.js +52 -0
  37. package/dist/src/process-utils.js.map +1 -0
  38. package/dist/src/repl.d.ts +9 -0
  39. package/dist/src/repl.js +13 -0
  40. package/dist/src/repl.js.map +1 -0
  41. package/dist/src/sarvam/client.d.ts +15 -0
  42. package/dist/src/sarvam/client.js +208 -0
  43. package/dist/src/sarvam/client.js.map +1 -0
  44. package/dist/src/sarvam/models.d.ts +2 -0
  45. package/dist/src/sarvam/models.js +7 -0
  46. package/dist/src/sarvam/models.js.map +1 -0
  47. package/dist/src/search-provider.d.ts +6 -0
  48. package/dist/src/search-provider.js +8 -0
  49. package/dist/src/search-provider.js.map +1 -0
  50. package/dist/src/session-store.d.ts +19 -0
  51. package/dist/src/session-store.js +318 -0
  52. package/dist/src/session-store.js.map +1 -0
  53. package/dist/src/skills/runtime.d.ts +26 -0
  54. package/dist/src/skills/runtime.js +317 -0
  55. package/dist/src/skills/runtime.js.map +1 -0
  56. package/dist/src/skills/types.d.ts +25 -0
  57. package/dist/src/skills/types.js +2 -0
  58. package/dist/src/skills/types.js.map +1 -0
  59. package/dist/src/terminal-ui.d.ts +29 -0
  60. package/dist/src/terminal-ui.js +236 -0
  61. package/dist/src/terminal-ui.js.map +1 -0
  62. package/dist/src/tools/filesystem.d.ts +2 -0
  63. package/dist/src/tools/filesystem.js +622 -0
  64. package/dist/src/tools/filesystem.js.map +1 -0
  65. package/dist/src/tools/git.d.ts +2 -0
  66. package/dist/src/tools/git.js +326 -0
  67. package/dist/src/tools/git.js.map +1 -0
  68. package/dist/src/tools/index.d.ts +6 -0
  69. package/dist/src/tools/index.js +21 -0
  70. package/dist/src/tools/index.js.map +1 -0
  71. package/dist/src/tools/registry.d.ts +15 -0
  72. package/dist/src/tools/registry.js +59 -0
  73. package/dist/src/tools/registry.js.map +1 -0
  74. package/dist/src/tools/shell.d.ts +2 -0
  75. package/dist/src/tools/shell.js +97 -0
  76. package/dist/src/tools/shell.js.map +1 -0
  77. package/dist/src/tools/skill.d.ts +3 -0
  78. package/dist/src/tools/skill.js +130 -0
  79. package/dist/src/tools/skill.js.map +1 -0
  80. package/dist/src/tools/web.d.ts +3 -0
  81. package/dist/src/tools/web.js +144 -0
  82. package/dist/src/tools/web.js.map +1 -0
  83. package/dist/src/types.d.ts +236 -0
  84. package/dist/src/types.js +2 -0
  85. package/dist/src/types.js.map +1 -0
  86. package/dist/src/workspace-trust.d.ts +3 -0
  87. package/dist/src/workspace-trust.js +31 -0
  88. package/dist/src/workspace-trust.js.map +1 -0
  89. package/dist/src/xdg.d.ts +9 -0
  90. package/dist/src/xdg.js +77 -0
  91. package/dist/src/xdg.js.map +1 -0
  92. package/package.json +57 -0
  93. package/skill/agents-md-generator/SKILL.md +75 -0
  94. package/skill/agents-md-generator/references/agents_md_template.md +160 -0
  95. package/skill/agents-md-generator/references/loc_measurement.md +67 -0
  96. package/skill/agents-md-generator/references/monorepo_detection.md +78 -0
  97. package/skill/agents-md-generator/references/monorepo_strategy.md +60 -0
  98. package/skill/agents-md-generator/references/read_only_commands.md +151 -0
  99. package/skill/agents-md-generator/references/update_strategy.md +160 -0
  100. package/skill/agents-md-generator/references/working_agreements.md +53 -0
  101. package/skill/biz-opportunity-scout/SKILL.md +53 -0
  102. package/skill/biz-opportunity-scout/references/competitive_analysis.md +84 -0
  103. package/skill/biz-opportunity-scout/references/market_sizing.md +68 -0
  104. package/skill/biz-opportunity-scout/references/pmf_indicators.md +94 -0
  105. package/skill/biz-opportunity-scout/references/report_template.md +243 -0
  106. package/skill/biz-opportunity-scout/references/unit_economics.md +97 -0
  107. package/skill/code-review/SKILL.md +86 -0
  108. package/skill/code-review/references/change_analysis.md +116 -0
  109. package/skill/code-review/references/git_operations.md +115 -0
  110. package/skill/code-review/references/impact_detection.md +149 -0
  111. package/skill/code-review/references/output_format.md +137 -0
  112. package/skill/code-review/references/severity_criteria.md +100 -0
  113. package/skill/code-security-audit/SKILL.md +123 -0
  114. package/skill/code-security-audit/references/audit_process.md +277 -0
  115. package/skill/code-security-audit/references/remediation_patterns.md +599 -0
  116. package/skill/code-security-audit/references/report_format.md +391 -0
  117. package/skill/code-security-audit/references/security_domains.md +830 -0
  118. package/skill/code-security-audit/references/vulnerability_patterns.md +813 -0
  119. package/skill/composition-patterns/SKILL.md +83 -0
  120. package/skill/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  121. package/skill/composition-patterns/rules/architecture-compound-components.md +112 -0
  122. package/skill/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  123. package/skill/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  124. package/skill/composition-patterns/rules/react19-no-forwardref.md +42 -0
  125. package/skill/composition-patterns/rules/state-context-interface.md +191 -0
  126. package/skill/composition-patterns/rules/state-decouple-implementation.md +113 -0
  127. package/skill/composition-patterns/rules/state-lift-state.md +125 -0
  128. package/skill/deploy-to-vercel/SKILL.md +293 -0
  129. package/skill/deploy-to-vercel/resources/deploy-sandbox.sh +301 -0
  130. package/skill/deploy-to-vercel/resources/deploy.sh +301 -0
  131. package/skill/doc/SKILL_GUIDELINES.md +138 -0
  132. package/skill/git-workflow/SKILL.md +94 -0
  133. package/skill/git-workflow/references/advanced-git.md +632 -0
  134. package/skill/git-workflow/references/branching-strategies.md +344 -0
  135. package/skill/git-workflow/references/ci-cd-integration.md +683 -0
  136. package/skill/git-workflow/references/code-quality-tools.md +351 -0
  137. package/skill/git-workflow/references/commit-conventions.md +439 -0
  138. package/skill/git-workflow/references/github-releases.md +288 -0
  139. package/skill/git-workflow/references/pull-request-workflow.md +773 -0
  140. package/skill/git-workflow/scripts/verify-git-workflow.sh +263 -0
  141. package/skill/jetbrains-vmoptions/SKILL.md +51 -0
  142. package/skill/jetbrains-vmoptions/references/common-options.md +357 -0
  143. package/skill/jetbrains-vmoptions/references/gc-options.md +350 -0
  144. package/skill/jetbrains-vmoptions/references/memory-options.md +339 -0
  145. package/skill/jetbrains-vmoptions/references/prerequisite-check.md +65 -0
  146. package/skill/kysely-converter/SKILL.md +62 -0
  147. package/skill/kysely-converter/references/delete.md +323 -0
  148. package/skill/kysely-converter/references/insert.md +386 -0
  149. package/skill/kysely-converter/references/operators.md +331 -0
  150. package/skill/kysely-converter/references/select.md +1000 -0
  151. package/skill/kysely-converter/references/update.md +349 -0
  152. package/skill/kysely-converter/references/window_function.md +537 -0
  153. package/skill/react-best-practices/SKILL.md +131 -0
  154. package/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  155. package/skill/react-best-practices/rules/advanced-init-once.md +42 -0
  156. package/skill/react-best-practices/rules/advanced-use-latest.md +39 -0
  157. package/skill/react-best-practices/rules/async-api-routes.md +38 -0
  158. package/skill/react-best-practices/rules/async-defer-await.md +80 -0
  159. package/skill/react-best-practices/rules/async-dependencies.md +51 -0
  160. package/skill/react-best-practices/rules/async-parallel.md +28 -0
  161. package/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  162. package/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  163. package/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  164. package/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  165. package/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  166. package/skill/react-best-practices/rules/bundle-preload.md +50 -0
  167. package/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  168. package/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  169. package/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  170. package/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  171. package/skill/react-best-practices/rules/js-batch-dom-css.md +107 -0
  172. package/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  173. package/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  174. package/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  175. package/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  176. package/skill/react-best-practices/rules/js-early-exit.md +50 -0
  177. package/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  178. package/skill/react-best-practices/rules/js-index-maps.md +37 -0
  179. package/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  180. package/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  181. package/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  182. package/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  183. package/skill/react-best-practices/rules/rendering-activity.md +26 -0
  184. package/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  185. package/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  186. package/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  187. package/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  188. package/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  189. package/skill/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  190. package/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  191. package/skill/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  192. package/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  193. package/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  194. package/skill/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  195. package/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  196. package/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  197. package/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  198. package/skill/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  199. package/skill/react-best-practices/rules/rerender-memo.md +44 -0
  200. package/skill/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  201. package/skill/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  202. package/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  203. package/skill/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  204. package/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  205. package/skill/react-best-practices/rules/server-auth-actions.md +96 -0
  206. package/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  207. package/skill/react-best-practices/rules/server-cache-react.md +76 -0
  208. package/skill/react-best-practices/rules/server-dedup-props.md +65 -0
  209. package/skill/react-best-practices/rules/server-hoist-static-io.md +142 -0
  210. package/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  211. package/skill/react-best-practices/rules/server-serialization.md +38 -0
  212. package/skill/react-native-skills/SKILL.md +115 -0
  213. package/skill/react-native-skills/rules/animation-derived-value.md +53 -0
  214. package/skill/react-native-skills/rules/animation-gesture-detector-press.md +95 -0
  215. package/skill/react-native-skills/rules/animation-gpu-properties.md +65 -0
  216. package/skill/react-native-skills/rules/design-system-compound-components.md +66 -0
  217. package/skill/react-native-skills/rules/fonts-config-plugin.md +71 -0
  218. package/skill/react-native-skills/rules/imports-design-system-folder.md +68 -0
  219. package/skill/react-native-skills/rules/js-hoist-intl.md +61 -0
  220. package/skill/react-native-skills/rules/list-performance-callbacks.md +44 -0
  221. package/skill/react-native-skills/rules/list-performance-function-references.md +132 -0
  222. package/skill/react-native-skills/rules/list-performance-images.md +53 -0
  223. package/skill/react-native-skills/rules/list-performance-inline-objects.md +97 -0
  224. package/skill/react-native-skills/rules/list-performance-item-expensive.md +94 -0
  225. package/skill/react-native-skills/rules/list-performance-item-memo.md +82 -0
  226. package/skill/react-native-skills/rules/list-performance-item-types.md +104 -0
  227. package/skill/react-native-skills/rules/list-performance-virtualize.md +67 -0
  228. package/skill/react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
  229. package/skill/react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
  230. package/skill/react-native-skills/rules/navigation-native-navigators.md +188 -0
  231. package/skill/react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
  232. package/skill/react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
  233. package/skill/react-native-skills/rules/react-state-dispatcher.md +91 -0
  234. package/skill/react-native-skills/rules/react-state-fallback.md +56 -0
  235. package/skill/react-native-skills/rules/react-state-minimize.md +65 -0
  236. package/skill/react-native-skills/rules/rendering-no-falsy-and.md +74 -0
  237. package/skill/react-native-skills/rules/rendering-text-in-text-component.md +36 -0
  238. package/skill/react-native-skills/rules/scroll-position-no-state.md +82 -0
  239. package/skill/react-native-skills/rules/state-ground-truth.md +80 -0
  240. package/skill/react-native-skills/rules/ui-expo-image.md +66 -0
  241. package/skill/react-native-skills/rules/ui-image-gallery.md +104 -0
  242. package/skill/react-native-skills/rules/ui-measure-views.md +78 -0
  243. package/skill/react-native-skills/rules/ui-menus.md +174 -0
  244. package/skill/react-native-skills/rules/ui-native-modals.md +77 -0
  245. package/skill/react-native-skills/rules/ui-pressable.md +61 -0
  246. package/skill/react-native-skills/rules/ui-safe-area-scroll.md +65 -0
  247. package/skill/react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
  248. package/skill/react-native-skills/rules/ui-styling.md +87 -0
  249. package/skill/react-vite-guide/SKILL.md +101 -0
  250. package/skill/react-vite-guide/references/composition-patterns.md +709 -0
  251. package/skill/react-vite-guide/references/performance-optimization.md +1222 -0
  252. package/skill/react-vite-guide/references/vite-specific.md +385 -0
  253. package/skill/react-vite-guide/references/web-interface.md +146 -0
  254. package/skill/skill-maker/SKILL.md +52 -0
  255. package/skill/skill-maker/references/content_spec.md +67 -0
  256. package/skill/skill-maker/references/frontmatter_spec.md +96 -0
  257. package/skill/skill-maker/references/input_validation.md +90 -0
  258. package/skill/skill-maker/references/skill_structure.md +74 -0
  259. package/skill/system-prompt-creator/SKILL.md +50 -0
  260. package/skill/system-prompt-creator/references/data_format_selection.md +135 -0
  261. package/skill/system-prompt-creator/references/multi_prompt_architecture.md +386 -0
  262. package/skill/system-prompt-creator/references/prompt_structure.md +140 -0
  263. package/skill/system-prompt-creator/references/quality_criteria.md +83 -0
  264. package/skill/typst-creator/SKILL.md +51 -0
  265. package/skill/typst-creator/references/layout.md +401 -0
  266. package/skill/typst-creator/references/math.md +297 -0
  267. package/skill/typst-creator/references/scripting.md +237 -0
  268. package/skill/typst-creator/references/styling.md +217 -0
  269. package/skill/typst-creator/references/syntax.md +234 -0
  270. package/skill/web-design-guidelines/SKILL.md +35 -0
  271. package/terminal.png +0 -0
@@ -0,0 +1,351 @@
1
+ # Code Quality Tools
2
+
3
+ Shell linting, formatting, smart fixup commits, and structural diffs.
4
+
5
+ ## shellcheck - Shell Script Linter
6
+
7
+ ### Rule Categories
8
+
9
+ | Prefix | Category | Examples |
10
+ |--------|----------|----------|
11
+ | SC1xxx | Syntax errors | SC1009 (missing `$` on variable), SC1073 (couldn't parse) |
12
+ | SC2xxx | Suggestions/warnings | SC2086 (double quote to prevent globbing), SC2046 (quote to prevent splitting) |
13
+ | SC3xxx | Portability | SC3010 (`[[ ]]` not POSIX), SC3030 (arrays not POSIX) |
14
+ | SC4xxx | Deprecation | Deprecated features that should be avoided |
15
+
16
+ ### .shellcheckrc Configuration
17
+
18
+ Place `.shellcheckrc` in the project root:
19
+
20
+ ```ini
21
+ # Default shell dialect
22
+ shell=bash
23
+
24
+ # Globally disabled rules
25
+ disable=SC1091 # Don't follow sourced files
26
+ disable=SC2154 # Referenced but not assigned (common with env vars)
27
+
28
+ # Enable optional checks
29
+ enable=require-variable-braces
30
+ enable=check-unassigned-uppercase
31
+ ```
32
+
33
+ ### Common Rules and Fixes
34
+
35
+ ```bash
36
+ # SC2086: Double quote to prevent globbing and word splitting
37
+ # Bad:
38
+ echo $var
39
+ # Good:
40
+ echo "$var"
41
+
42
+ # SC2046: Quote command substitution to prevent splitting
43
+ # Bad:
44
+ files=$(find . -name "*.sh")
45
+ # Good:
46
+ files="$(find . -name "*.sh")"
47
+
48
+ # SC2155: Declare and assign separately to avoid masking return values
49
+ # Bad:
50
+ local foo="$(mycmd)"
51
+ # Good:
52
+ local foo
53
+ foo="$(mycmd)"
54
+
55
+ # SC2164: Use cd ... || exit to handle cd failure
56
+ # Bad:
57
+ cd /some/dir
58
+ # Good:
59
+ cd /some/dir || exit 1
60
+ ```
61
+
62
+ ### CI Integration
63
+
64
+ ```yaml
65
+ # GitHub Actions - shellcheck
66
+ - name: Run shellcheck
67
+ uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0
68
+ with:
69
+ scandir: './scripts'
70
+ severity: warning
71
+ ```
72
+
73
+ ---
74
+
75
+ ## shfmt - Shell Script Formatter
76
+
77
+ ### Flag Reference
78
+
79
+ | Flag | Description | Example |
80
+ |------|-------------|---------|
81
+ | `-w` | Write result to file (in-place) | `shfmt -w script.sh` |
82
+ | `-d` | Display diff (error if not formatted) | `shfmt -d script.sh` |
83
+ | `-i N` | Indent with N spaces (0 = tabs) | `shfmt -i 2 script.sh` |
84
+ | `-bn` | Binary ops like `&&` and `\|` may start a line | `shfmt -bn script.sh` |
85
+ | `-ci` | Indent switch cases | `shfmt -ci script.sh` |
86
+ | `-sr` | Redirect operators followed by a space | `shfmt -sr script.sh` |
87
+ | `-fn` | Function opening brace on a separate line | `shfmt -fn script.sh` |
88
+ | `-ln` | Language variant: `bash`, `posix`, `mksh`, `bats` | `shfmt -ln bash script.sh` |
89
+
90
+ ### EditorConfig Integration
91
+
92
+ shfmt reads `.editorconfig` settings automatically:
93
+
94
+ ```ini
95
+ # .editorconfig
96
+ [*.sh]
97
+ indent_style = space
98
+ indent_size = 2
99
+ shell_variant = bash
100
+ binary_next_line = true
101
+ switch_case_indent = true
102
+ space_redirects = true
103
+ ```
104
+
105
+ When an `.editorconfig` is present, run `shfmt -w .` without explicit flags.
106
+
107
+ ### CI Integration
108
+
109
+ ```yaml
110
+ # GitHub Actions - shfmt
111
+ - name: Check shell formatting
112
+ uses: mvdan/sh@8202166b7d1e3473a7c65eeac53ddbdb55d5b808 # v3.12.0
113
+ with:
114
+ sh-version: latest
115
+ args: '-d -i 2 .'
116
+ ```
117
+
118
+ ---
119
+
120
+ ## git-absorb - Smart Fixup Commits
121
+
122
+ ### How It Works
123
+
124
+ 1. You stage changes with `git add` (the fixes you want to absorb)
125
+ 2. `git absorb` analyzes the staged hunks
126
+ 3. For each hunk, it finds the most recent commit that modified those exact lines
127
+ 4. It creates `fixup!` commits targeting those parent commits
128
+ 5. `git rebase --autosquash` folds the fixup commits into their targets
129
+
130
+ ### Typical Workflow
131
+
132
+ ```bash
133
+ # 1. You have a feature branch with 5 commits
134
+ # 2. Code review requests changes to lines in commits 2 and 4
135
+ # 3. Make the fixes in your working tree
136
+ # 4. Stage them
137
+ git add -p
138
+
139
+ # 5. Let git-absorb figure out which commits they belong to
140
+ git absorb
141
+
142
+ # 6. Verify the fixup commits look correct
143
+ git log --oneline main..HEAD
144
+
145
+ # 7. Squash fixups into their parent commits
146
+ git rebase --autosquash main
147
+
148
+ # 8. Force-push the cleaned-up branch
149
+ git push --force-with-lease
150
+ ```
151
+
152
+ ### Comparison with Manual Fixup Workflow
153
+
154
+ | Step | Manual | git-absorb |
155
+ |------|--------|------------|
156
+ | Identify target commit | `git log --oneline`, find SHA | Automatic |
157
+ | Create fixup commit | `git commit --fixup=<SHA>` | `git absorb` |
158
+ | Apply fixups | `git rebase --autosquash main` | `git absorb --and-rebase` or same |
159
+ | Multiple fixes | Repeat per commit | Single command handles all |
160
+
161
+ ### Limitations
162
+
163
+ - Only works with staged changes (use `git add -p` for partial staging)
164
+ - Cannot absorb changes to lines that were not in any prior commit (new code)
165
+ - Ambiguous hunks (lines modified in multiple commits) are skipped with a warning
166
+ - Requires a clean working tree for `--and-rebase`
167
+
168
+ ### Installation
169
+
170
+ ```bash
171
+ # macOS
172
+ brew install git-absorb
173
+
174
+ # Arch Linux
175
+ pacman -S git-absorb
176
+
177
+ # Cargo (any platform)
178
+ cargo install git-absorb
179
+
180
+ # Ubuntu/Debian (via cargo or from releases)
181
+ cargo install git-absorb
182
+ ```
183
+
184
+ ---
185
+
186
+ ## difft (difftastic) - Structural Diff
187
+
188
+ ### Language Support
189
+
190
+ difft supports 50+ languages including: Bash, C, C++, C#, CSS, Dart, Elixir, Elm, Go, Haskell, HTML, Java, JavaScript, JSON, Kotlin, Lua, Nix, OCaml, PHP, Python, Ruby, Rust, Scala, SQL, Swift, TOML, TypeScript, YAML, and more.
191
+
192
+ ### Configuration Options
193
+
194
+ ```bash
195
+ # Set as default git diff tool (persistent)
196
+ git config --global diff.external difft
197
+
198
+ # Set display width
199
+ git config --global difftool.difftastic.cmd 'difft --width 80 "$LOCAL" "$REMOTE"'
200
+
201
+ # Color output
202
+ export DFT_COLOR=always # always | never | auto
203
+
204
+ # Display mode
205
+ export DFT_DISPLAY=side-by-side-show-both # side-by-side | side-by-side-show-both | inline
206
+
207
+ # Syntax highlighting
208
+ export DFT_SYNTAX_HIGHLIGHT=on # on | off
209
+
210
+ # Context lines around changes
211
+ export DFT_CONTEXT=3
212
+ ```
213
+
214
+ ### Integration with Git
215
+
216
+ ```bash
217
+ # One-off usage with git diff
218
+ GIT_EXTERNAL_DIFF=difft git diff
219
+
220
+ # With git log
221
+ GIT_EXTERNAL_DIFF=difft git log -p --ext-diff
222
+
223
+ # With git show
224
+ GIT_EXTERNAL_DIFF=difft git show --ext-diff HEAD
225
+
226
+ # As a difftool (interactive)
227
+ git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
228
+ git difftool --tool=difftastic
229
+ ```
230
+
231
+ ### Integration with delta
232
+
233
+ If you use `delta` as your git pager, you can combine them:
234
+
235
+ ```bash
236
+ # Use difft for structural diff, delta for everything else
237
+ # In .gitconfig:
238
+ [diff]
239
+ external = difft
240
+ [pager]
241
+ diff = delta
242
+ log = delta
243
+ show = delta
244
+ ```
245
+
246
+ Note: When `diff.external` is set, `delta` won't process diff output since difft handles it directly. Use `--no-ext-diff` to bypass difft and use delta instead when needed:
247
+
248
+ ```bash
249
+ git diff --no-ext-diff # Uses delta pager instead of difft
250
+ ```
251
+
252
+ ### Installation
253
+
254
+ ```bash
255
+ # macOS
256
+ brew install difftastic
257
+
258
+ # Arch Linux
259
+ pacman -S difftastic
260
+
261
+ # Cargo
262
+ cargo install --locked difftastic
263
+
264
+ # Ubuntu/Debian (from GitHub releases)
265
+ curl -Lo difft.tar.gz https://github.com/Wilfred/difftastic/releases/latest/download/difft-x86_64-unknown-linux-gnu.tar.gz
266
+ tar xf difft.tar.gz && sudo mv difft /usr/local/bin/
267
+ ```
268
+
269
+ ---
270
+
271
+ ## Pre-commit Hook Integration
272
+
273
+ Integrate all tools into a pre-commit hook:
274
+
275
+ ```bash
276
+ #!/usr/bin/env bash
277
+ # .git/hooks/pre-commit or via pre-commit framework
278
+
279
+ set -euo pipefail
280
+
281
+ # Find staged shell scripts
282
+ staged_scripts=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(sh|bash)$' || true)
283
+
284
+ if [[ -n "$staged_scripts" ]]; then
285
+ echo "Running shellcheck..."
286
+ echo "$staged_scripts" | xargs shellcheck || {
287
+ echo "shellcheck failed. Fix issues before committing."
288
+ exit 1
289
+ }
290
+
291
+ echo "Running shfmt..."
292
+ echo "$staged_scripts" | xargs shfmt -d -i 2 || {
293
+ echo "shfmt: formatting issues found. Run 'shfmt -w -i 2' on the files above."
294
+ exit 1
295
+ }
296
+ fi
297
+ ```
298
+
299
+ ### Using pre-commit Framework
300
+
301
+ ```yaml
302
+ # .pre-commit-config.yaml
303
+ repos:
304
+ - repo: https://github.com/koalaman/shellcheck-precommit
305
+ rev: v0.10.0
306
+ hooks:
307
+ - id: shellcheck
308
+ - repo: https://github.com/scop/pre-commit-shfmt
309
+ rev: v3.12.0-2
310
+ hooks:
311
+ - id: shfmt
312
+ args: ['-i', '2', '-w']
313
+ ```
314
+
315
+ ---
316
+
317
+ ## GitHub Actions Workflow
318
+
319
+ Complete workflow integrating all shell quality tools:
320
+
321
+ ```yaml
322
+ name: Shell Quality
323
+ on:
324
+ pull_request:
325
+ paths:
326
+ - '**/*.sh'
327
+ - '**/*.bash'
328
+ - '.shellcheckrc'
329
+ - '.editorconfig'
330
+
331
+ jobs:
332
+ shell-quality:
333
+ runs-on: ubuntu-latest
334
+ steps:
335
+ - uses: actions/checkout@v4
336
+
337
+ - name: Install tools
338
+ run: |
339
+ sudo apt-get update
340
+ sudo apt-get install -y shellcheck
341
+ go install mvdan.cc/sh/v3/cmd/shfmt@latest
342
+ echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH"
343
+
344
+ - name: shellcheck
345
+ run: |
346
+ git ls-files '*.sh' '*.bash' | xargs --no-run-if-empty shellcheck
347
+
348
+ - name: shfmt
349
+ run: |
350
+ shfmt -d -i 2 .
351
+ ```