Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2347 commits
Select commit Hold shift + click to select a range
2b3645b
chore(release): @nve/elements-v1.60.4 [skip ci]
semantic-release-bot Feb 23, 2026
b7cab99
feat(labs-cli): improved tool schemas and context management
coryrylan Feb 20, 2026
c1fa1a5
chore(release): @nve-labs/cli-v0.10.0 [skip ci]
semantic-release-bot Feb 23, 2026
f40b6c7
chore(ci): fix vale lint rules for markdown
coryrylan Feb 24, 2026
e11f355
chore(ci): fix vale lint rules for ts
coryrylan Feb 24, 2026
091cad7
chore(ci): add vale lint
coryrylan Feb 24, 2026
a54b94f
fix(labs-lint): improve lint deprecation rules
coryrylan Feb 20, 2026
167e420
fix(elements): minor page layout and grid api doc
coryrylan Feb 20, 2026
b55ebe8
chore(elements): improve example descriptions for context
coryrylan Feb 20, 2026
ea687a0
feat(labs-lint): add new lint rules
coryrylan Feb 23, 2026
aabab1d
chore(ci): fixup lint errors
coryrylan Feb 23, 2026
bb1bde6
fix(labs-cli): simplify update notification logic and markdown render
coryrylan Feb 23, 2026
0c9fe2e
chore(release): @nve/elements-v1.60.5 [skip ci]
semantic-release-bot Feb 25, 2026
34e5d22
chore(release): @nve-labs/lint-v0.12.0 [skip ci]
semantic-release-bot Feb 25, 2026
075d5c9
chore(release): @nve-labs/cli-v0.10.1 [skip ci]
semantic-release-bot Feb 25, 2026
021d885
fix(elements): select input with flat and size options
coryrylan Feb 25, 2026
b767875
chore(release): @nve/elements-v1.60.6 [skip ci]
semantic-release-bot Feb 26, 2026
8bf5b06
chore(ci): expand commit guidelines and workflow tips in agent docs
WillGeller Feb 20, 2026
01b861e
fix(docs): improve canvas preview loading and theme sync
WillGeller Feb 20, 2026
a01e00b
feat(docs): fetch latest package versions for canvas preview via Pack…
WillGeller Feb 23, 2026
034f061
fix(labs-cli): update package dependencies and improve tool accuracy
coryrylan Feb 26, 2026
4b4d60f
fix(labs-lint): enhance attribute handling and linting rules
coryrylan Feb 27, 2026
1af8823
chore(release): @nve-labs/lint-v0.12.1 [skip ci]
semantic-release-bot Feb 27, 2026
515726f
chore(release): @nve-labs/cli-v0.10.2 [skip ci]
semantic-release-bot Feb 27, 2026
c2a5103
fix(labs-lint): remove unnecessary peer dep
coryrylan Feb 27, 2026
2f891c6
fix(styles): lint and space token usage
coryrylan Feb 27, 2026
e8cac43
chore(release): @nve/styles-v1.13.2 [skip ci]
semantic-release-bot Feb 27, 2026
dcf803c
chore(release): @nve-labs/lint-v0.12.2 [skip ci]
semantic-release-bot Feb 27, 2026
6b6c5f4
chore(ci): introduced development markdown and standardized readme files
coryrylan Feb 27, 2026
4f24708
fix(labs-cli): add missing readme and install context
coryrylan Feb 27, 2026
1af91e6
chore(release): @nve-labs/cli-v0.10.3 [skip ci]
semantic-release-bot Feb 27, 2026
ee14b18
chore(ci): tweak creation skill
johnyanarella Feb 19, 2026
f15bd8c
chore(ci): tweak primitive property lint rule
johnyanarella Feb 19, 2026
30aff42
fix(labs-lint): avoid non-literal enum false positives
johnyanarella Feb 20, 2026
2d5787f
feat(elements): add sparkline element
johnyanarella Feb 19, 2026
2e07d0b
chore(ci): update lighthouse metadata
johnyanarella Feb 20, 2026
317aa03
chore(docs): add data element guidelines
johnyanarella Feb 20, 2026
6bd8a07
chore(docs): enable html-minify conservative collapse
johnyanarella Feb 20, 2026
f217af2
chore(release): @nve/elements-v1.61.0 [skip ci]
semantic-release-bot Feb 27, 2026
3a3f439
chore(release): @nve-labs/lint-v0.12.3 [skip ci]
semantic-release-bot Feb 27, 2026
a31a98d
chore(ci): add prettier and vale lint hooks
coryrylan Feb 27, 2026
f9b168f
chore(ci): fixup lint issues
coryrylan Feb 27, 2026
5b7fe4b
fix(elements): page toolbar alignment
coryrylan Feb 28, 2026
ba03f5e
chore(release): @nve/elements-v1.61.1 [skip ci]
semantic-release-bot Mar 2, 2026
c6f7e22
chore(ci): fixup lint issues
johnyanarella Feb 28, 2026
b0878e9
chore(internals): support complex attribute types in validation
johnyanarella Feb 28, 2026
fc866e5
chore(ci): hooks cleanup
coryrylan Mar 2, 2026
c2fc452
chore(ci): improve internal eslint rules for guidelines
coryrylan Mar 2, 2026
e085a79
fix(elements): lint errors and missing scope registry tags
coryrylan Mar 2, 2026
b5f394a
fix(monaco): lint errors and missing scope registry tags
coryrylan Mar 2, 2026
de380bd
chore(docs): lint errors
coryrylan Mar 2, 2026
d5194b4
chore(release): @nve/elements-v1.61.2 [skip ci]
semantic-release-bot Mar 3, 2026
1651a63
chore(release): @nve/monaco-v1.4.1 [skip ci]
semantic-release-bot Mar 3, 2026
7390232
fix(elements): popover and invoker types
coryrylan Mar 3, 2026
5cf42ea
chore(release): @nve/elements-v1.61.3 [skip ci]
semantic-release-bot Mar 3, 2026
ae437fb
chore(create): align tsconfig
coryrylan Mar 2, 2026
edfd512
chore(styles): align tsconfig
coryrylan Mar 2, 2026
cb92e2e
chore(themes): align tsconfig
coryrylan Mar 2, 2026
b5162da
chore(labs-media): sync tsconfig
coryrylan Mar 2, 2026
f4661f9
chore(labs-markdown): align tsconfig
coryrylan Mar 2, 2026
2299eef
chore(internals): align tsconfig for tools
coryrylan Mar 3, 2026
5897002
chore(docs): fix animated build card width
johnyanarella Mar 4, 2026
70f5404
fix(labs-lint): improved runtime checking and type checking
coryrylan Mar 3, 2026
0bffce2
chore(release): @nve-labs/lint-v0.12.4 [skip ci]
semantic-release-bot Mar 4, 2026
2794a67
fix(labs-forms): improve type checking
coryrylan Mar 3, 2026
57afa4d
fix(labs-cli): rename setup command
coryrylan Mar 4, 2026
98dea41
fix(elements): postinstall command rename
coryrylan Mar 4, 2026
bf41b13
chore(docs): update integration starting page
coryrylan Mar 4, 2026
19d2461
chore(release): @nve-labs/forms-v1.0.2 [skip ci]
semantic-release-bot Mar 4, 2026
def9474
chore(release): @nve/elements-v1.61.4 [skip ci]
semantic-release-bot Mar 4, 2026
be505ac
chore(release): @nve-labs/cli-v0.10.4 [skip ci]
semantic-release-bot Mar 4, 2026
650f2ae
chore(internals): align tsconfigs
coryrylan Mar 4, 2026
a049014
fix(labs-code): align tsconfig
coryrylan Mar 4, 2026
ba89856
chore(internals): update metadata to tsconfig and remove runtime data
coryrylan Mar 4, 2026
7dd10b4
chore(release): @nve-labs/code-v0.7.2 [skip ci]
semantic-release-bot Mar 4, 2026
5e1b1b0
fix(labs-cli): improve playground generation
coryrylan Mar 4, 2026
3f4b657
feat(labs-lint): no-restricted-page-sizing
coryrylan Mar 4, 2026
7273656
chore(internals): fix lint pattern errors
coryrylan Mar 4, 2026
b8f4631
chore(release): @nve-labs/lint-v0.13.0 [skip ci]
semantic-release-bot Mar 5, 2026
d384af4
chore(release): @nve-labs/cli-v0.10.5 [skip ci]
semantic-release-bot Mar 5, 2026
24c3333
fix(elements): resolve sparkline examples not rendering in docs preview
WillGeller Mar 5, 2026
385b10b
chore(release): @nve/elements-v1.61.5 [skip ci]
semantic-release-bot Mar 5, 2026
6d3dbbc
chore(ci): setup stylelint agent hook
coryrylan Mar 5, 2026
15bdd2e
feat(elements): open progress ring center to slotted content
johnyanarella Mar 5, 2026
2ff962b
fix(elements): progress ring layout shift
johnyanarella Mar 5, 2026
bf22b98
chore(release): @nve/elements-v1.62.0 [skip ci]
semantic-release-bot Mar 5, 2026
29eaa7e
fix(styles): prevent stretch of flex items of direct column children
coryrylan Mar 5, 2026
84973a9
chore(release): @nve/styles-v1.13.3 [skip ci]
semantic-release-bot Mar 5, 2026
63cf7b0
fix(labs-cli): start command cwd failure
coryrylan Mar 5, 2026
2b1f623
fix(labs-cli): enable json format for lists
coryrylan Mar 5, 2026
27616fb
chore(release): @nve-labs/cli-v0.10.6 [skip ci]
semantic-release-bot Mar 5, 2026
2e995c4
fix(labs-cli): improve base context
coryrylan Mar 6, 2026
1883c3d
chore(release): @nve-labs/cli-v0.10.7 [skip ci]
semantic-release-bot Mar 9, 2026
d6df9f9
chore(monaco): align tsconfig
coryrylan Mar 9, 2026
a4b36c8
fix(elements): controller behavior and event cleanup
coryrylan Mar 6, 2026
b8ad7cd
chore(release): @nve/elements-v1.62.1 [skip ci]
semantic-release-bot Mar 9, 2026
f383dd5
chore(ci): update lint rules and hook
coryrylan Mar 5, 2026
a3067ca
fix(elements): css corrections
coryrylan Mar 5, 2026
109e498
chore(labs-code): css corrections
coryrylan Mar 5, 2026
0f61edd
chore(labs-markdown): css corrections
coryrylan Mar 5, 2026
98224aa
chore(monaco): css corrections
coryrylan Mar 5, 2026
e80278b
chore(themes): css corrections
coryrylan Mar 5, 2026
16fff4f
chore(docs): css corrections
coryrylan Mar 5, 2026
8c82670
chore(ci): add examples metadata lint checks
coryrylan Mar 9, 2026
b9e698b
fix(elements): sort icon names by usage
coryrylan Mar 9, 2026
61ef2f4
feat(labs-lint): no-nested-container-types
coryrylan Mar 9, 2026
7eb94ca
fix(labs-cli): context formatting fixes
coryrylan Mar 9, 2026
3aa0675
chore(release): @nve/elements-v1.62.2 [skip ci]
semantic-release-bot Mar 10, 2026
adb873a
chore(release): @nve-labs/lint-v0.14.0 [skip ci]
semantic-release-bot Mar 10, 2026
8a989e6
chore(release): @nve-labs/cli-v0.10.8 [skip ci]
semantic-release-bot Mar 10, 2026
0de24de
chore(ci): migrate snippet directories
coryrylan Mar 10, 2026
d418150
chore(labs-cli): migrate directories
coryrylan Mar 10, 2026
9e35ade
chore(labs-lint): migrate directories
coryrylan Mar 10, 2026
4de7f0d
chore(media): migrate directories
coryrylan Mar 10, 2026
ed33cbc
chore(labs-markdown): migrate directories
coryrylan Mar 10, 2026
232e1a6
chore(labs-code): migrate directories
coryrylan Mar 10, 2026
475d6b2
chore(elements): align tsconfig
coryrylan Mar 10, 2026
fd87829
feat(elements): support native scoped registries
coryrylan Mar 10, 2026
2d38c90
chore(starters): remove deprecated scoped example
coryrylan Mar 10, 2026
979f384
chore(ci): update lighthouse
coryrylan Mar 10, 2026
bcc97bb
chore(release): @nve/elements-v1.63.0 [skip ci]
semantic-release-bot Mar 11, 2026
14a0b7f
chore(docs): align examples naming
coryrylan Mar 12, 2026
71ff057
chore(ci): add critical file protection and destructive command guards
coryrylan Mar 12, 2026
6574c71
fix(elements): add missing composed for better event propagation
coryrylan Mar 12, 2026
3ef8dde
fix(monaco): add missing composed for better event propagation
coryrylan Mar 12, 2026
018339b
chore(ci): add rules for test completeness and composed events
coryrylan Mar 12, 2026
f09fe62
chore(release): @nve/elements-v1.63.1 [skip ci]
semantic-release-bot Mar 12, 2026
16004f3
chore(release): @nve/monaco-v1.4.2 [skip ci]
semantic-release-bot Mar 12, 2026
f7894e6
fix(elements): align css logical properties
coryrylan Mar 12, 2026
af7e3fa
fix(labs-code): align css logical properties
coryrylan Mar 12, 2026
a8ac793
fix(labs-markdown): align css logical properties
coryrylan Mar 12, 2026
5e293fc
fix(monaco): align css logical properties
coryrylan Mar 12, 2026
5e89cdf
chore(ci): align css logical properties
coryrylan Mar 12, 2026
4154672
chore(release): @nve/elements-v1.63.2 [skip ci]
semantic-release-bot Mar 12, 2026
43bfcb5
chore(release): @nve-labs/code-v0.7.3 [skip ci]
semantic-release-bot Mar 12, 2026
e7c8128
chore(release): @nve-labs/markdown-v0.2.1 [skip ci]
semantic-release-bot Mar 12, 2026
286d2a7
chore(release): @nve/monaco-v1.4.3 [skip ci]
semantic-release-bot Mar 12, 2026
1b318f9
chore(elements): add unit tests for services
coryrylan Mar 11, 2026
19bc22c
fix(elements): restore grid stripe css selector
johnyanarella Mar 16, 2026
49f36eb
chore(release): @nve/elements-v1.63.3 [skip ci]
semantic-release-bot Mar 16, 2026
8297593
fix(elements): cleanup utility functions and tests
coryrylan Mar 11, 2026
9f56bd8
chore(ci): update lighthouse tests
coryrylan Mar 11, 2026
705503c
chore(release): @nve/elements-v1.63.4 [skip ci]
semantic-release-bot Mar 16, 2026
e307b81
feat(elements): add vertical orientation support to nve-range
jacobguza Mar 14, 2026
b8b64a5
chore(release): @nve/elements-v1.64.0 [skip ci]
semantic-release-bot Mar 17, 2026
5199688
fix(elements): correct off-by-one and end cap in pagination label
johnyanarella Mar 17, 2026
a1a9973
chore(release): @nve/elements-v1.64.1 [skip ci]
semantic-release-bot Mar 17, 2026
fa59cea
chore(ci): context linting and env hook
coryrylan Mar 18, 2026
3c9e094
chore(docs): update examples and fix error handling in shortcodes
coryrylan Mar 18, 2026
0a2b9ec
chore(ci): update to vite 8
coryrylan Mar 17, 2026
a9d01cd
feat(labs-cli): support cross platform binaries and upgrade command
coryrylan Mar 17, 2026
b5c9c60
chore(release): @nve/elements-v1.65.0 [skip ci]
semantic-release-bot Mar 19, 2026
c3b33dc
chore(release): @nve-labs/cli-v0.11.0 [skip ci]
semantic-release-bot Mar 19, 2026
aa4c1fe
fix(labs-cli): release script
coryrylan Mar 19, 2026
4a7021a
chore(release): @nve-labs/cli-v0.11.1 [skip ci]
semantic-release-bot Mar 19, 2026
c5aa94c
chore(ci): eslint ts complexity
coryrylan Mar 18, 2026
6fe747d
chore(labs-cli): reduce complexity
coryrylan Mar 18, 2026
350e40f
fix(labs-cli): installation scripts and update version handling
coryrylan Mar 19, 2026
ecf0d29
chore(release): @nve-labs/cli-v0.11.2 [skip ci]
semantic-release-bot Mar 19, 2026
2655162
chore(ci): update metrics
coryrylan Mar 19, 2026
4114cd9
chore(ci): migrate internals projects
coryrylan Mar 19, 2026
d85d7d6
fix(elements): scoped registry object fallback
coryrylan Mar 20, 2026
6b80fca
chore(release): @nve/elements-v1.65.1 [skip ci]
semantic-release-bot Mar 20, 2026
e108c5a
fix(elements): grid column max-content
coryrylan Mar 20, 2026
d253748
chore(release): @nve/elements-v1.65.2 [skip ci]
semantic-release-bot Mar 20, 2026
0cdf381
fix(labs-lint): correct combobox false positives in validator and lint
johnyanarella Mar 20, 2026
e1bcdae
chore(release): @nve-labs/lint-v0.14.1 [skip ci]
semantic-release-bot Mar 20, 2026
b0d6380
fix(elements): support for dynamically added options in combobox
coryrylan Mar 20, 2026
fcacb73
fix(elements): fallback registry
coryrylan Mar 20, 2026
99a306e
chore(release): @nve/elements-v1.65.3 [skip ci]
semantic-release-bot Mar 20, 2026
0b2b92e
chore(labs-forms): reduce cyclomatic complexity
coryrylan Mar 20, 2026
49b91a5
chore(internals): reduce cyclomatic complexity
coryrylan Mar 20, 2026
9cdb2fe
chore(monaco): reduce cyclomatic complexity
coryrylan Mar 20, 2026
110fe23
chore(elements): reduce cyclomatic complexity
coryrylan Mar 20, 2026
e744196
chore(ci): drop react 18 starter
coryrylan Mar 20, 2026
38dd762
chore(ci): simplify starters
coryrylan Mar 20, 2026
93383fe
fix(elements): incorrect root node warning
coryrylan Mar 20, 2026
254bf0b
chore(release): @nve/elements-v1.65.4 [skip ci]
semantic-release-bot Mar 23, 2026
c1c28e4
fix(elements): duplicate version fallback check
coryrylan Mar 21, 2026
e850c07
chore(release): @nve/elements-v1.65.5 [skip ci]
semantic-release-bot Mar 23, 2026
3daebb4
chore(internals): typescript type enabled lint rules
coryrylan Mar 23, 2026
d80eca7
chore(labs-cli): typescript type enabled lint rules
coryrylan Mar 23, 2026
b17bedf
chore(labs-code): typescript type enabled lint rules
coryrylan Mar 23, 2026
deddde9
chore(elements): typescript type enabled lint rules
coryrylan Mar 23, 2026
86e0fea
chore(labs-forms): typescript type enabled lint rules
coryrylan Mar 23, 2026
a6374d2
chore(internals): typescript type enabled lint rules
coryrylan Mar 23, 2026
c506063
chore(labs-lint): typescript type enabled lint rules
coryrylan Mar 23, 2026
87377b8
chore(monaco): typescript type enabled lint rules
coryrylan Mar 23, 2026
889b51c
chore(docs): typescript type enabled lint rules
coryrylan Mar 23, 2026
a4584b5
chore(ci): update project configuration and add worktree management s…
coryrylan Mar 20, 2026
4323efd
chore(ci): rename directory
coryrylan Mar 23, 2026
fa5233e
chore(ci): update to typescript 6.0
coryrylan Mar 23, 2026
b207cd9
chore(ci): update semantic release deps
coryrylan Mar 24, 2026
58b3e04
chore(ci): semantic release update
coryrylan Mar 24, 2026
3a28848
feat(labs-cli): support codex project setup
coryrylan Mar 23, 2026
f2214fb
chore(ci): semantic release scope
coryrylan Mar 24, 2026
e7e6705
chore(release): @nve-labs/cli-v0.12.0 [skip ci]
semantic-release-bot Mar 24, 2026
8d3aa95
fix(labs-cli): add code signing for macos binaries
coryrylan Mar 25, 2026
7be3491
chore(release): @nve-labs/cli-v0.12.1 [skip ci]
semantic-release-bot Mar 25, 2026
cd65316
chore(ci): migrate and remove internal metrics
coryrylan Mar 24, 2026
928ed04
chore(docs): add agent harness guidelines doc and context file
coryrylan Mar 25, 2026
f83cd54
fix(elements): bundle side effects import
coryrylan Mar 26, 2026
46447b5
chore(release): @nve/elements-v1.65.6 [skip ci]
semantic-release-bot Mar 30, 2026
dc72a1a
feat(elements): add --track-background for nve-range unfilled track
WillGeller Mar 26, 2026
3cccdee
fix(docs): update stale cdn fallback versions in canvas-editable
WillGeller Mar 26, 2026
0dbfc42
feat(docs): use local bundle builds for iframe previews on localhost
WillGeller Mar 30, 2026
4eb8954
chore(release): @nve/elements-v1.66.0 [skip ci]
semantic-release-bot Mar 30, 2026
23acfd9
chore(ci): enable env vars for conditional builds
coryrylan Mar 25, 2026
3ff4ac5
fix(labs-cli): update check issue
coryrylan Mar 25, 2026
06d77b0
chore(docs): update env url paths
coryrylan Mar 26, 2026
0b7eabb
chore(starters): remove external links
coryrylan Mar 26, 2026
80d6a3e
chore(ci): cleanup build env
coryrylan Mar 26, 2026
23ec9b4
chore(release): @nve-labs/cli-v0.12.2 [skip ci]
semantic-release-bot Mar 31, 2026
e78f872
fix(elements): update aria-orientation and event config
coryrylan Mar 31, 2026
d376615
chore(elements): add tests
coryrylan Mar 31, 2026
68637fb
chore(release): @nve/elements-v1.66.1 [skip ci]
semantic-release-bot Mar 31, 2026
ce2f2e6
chore(docs): cdn path updates
coryrylan Mar 31, 2026
9a68b3b
chore(docs): cli deployment path for windows binary
coryrylan Mar 31, 2026
7c5d555
chore(docs): env var fixes
coryrylan Mar 31, 2026
d1325e8
chore(docs): icon docs cleanup
coryrylan Apr 2, 2026
5cbe1c5
fix(labs-cli): simplify update check logic and improve notification h…
coryrylan Apr 2, 2026
96333a7
chore(release): @nve-labs/cli-v0.12.3 [skip ci]
semantic-release-bot Apr 2, 2026
31ecf15
chore(docs): nve-button guidelines only
mbransn Mar 17, 2026
91c7784
chore(ci): align publish configs
coryrylan Apr 3, 2026
a63a714
fix(elements): register dropdown-group in bundle
WillGeller Mar 31, 2026
0f26f9c
feat(internals): add bundle registration rule
WillGeller Mar 31, 2026
953902a
chore(release): @nve/elements-v1.66.2 [skip ci]
semantic-release-bot Apr 3, 2026
2bc7438
chore(starters): upgrade nextjs
coryrylan Apr 3, 2026
1a19cdf
chore(starters): update angular
coryrylan Apr 3, 2026
5c88d2c
chore(elements): update svgo
coryrylan Apr 3, 2026
f3a6d67
fix(labs-cli): update sdk version
coryrylan Apr 3, 2026
c28d578
chore(ci): fix publish configs
coryrylan Apr 3, 2026
5fd7000
chore(docs): update html minify
coryrylan Apr 3, 2026
2413220
chore(ci): update lockfile
coryrylan Apr 3, 2026
56b2198
chore(release): @nve-labs/cli-v0.12.4 [skip ci]
semantic-release-bot Apr 3, 2026
c0fd4ff
chore(ci): update workspace for external release
coryrylan Apr 4, 2026
f1698e9
chore(ci): add spdx license headers
coryrylan Apr 4, 2026
8444403
chore(ci): regenerate lockfile after migration
coryrylan Apr 4, 2026
610ce63
chore(ci): add dependency audit report
coryrylan Apr 4, 2026
1a730b2
fix(core): reset versions
coryrylan Apr 4, 2026
b0543bb
fix(forms): reset versions
coryrylan Apr 4, 2026
8bba4fd
fix(styles): reset versions
coryrylan Apr 4, 2026
84e0bf2
fix(themes): reset versions
coryrylan Apr 4, 2026
cb78058
fix(lint): reset versions
coryrylan Apr 4, 2026
ee3ce87
fix(cli): reset versions
coryrylan Apr 4, 2026
83e855d
fix(code): reset versions
coryrylan Apr 4, 2026
89f5cc5
fix(create): reset versions
coryrylan Apr 4, 2026
0796512
fix(markdown): reset versions
coryrylan Apr 4, 2026
ce620b0
fix(monaco): reset versions
coryrylan Apr 4, 2026
5491c7a
chore(deps): bump markdown-it from 14.1.0 to 14.1.1
dependabot[bot] Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 20 additions & 0 deletions .claude/hooks/format-prettier.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Exit early if no file path
if [[ -z "$FILE_PATH" ]]; then
exit 0
fi

# Run Prettier on the specific file
OUTPUT=$(cd "$CLAUDE_PROJECT_DIR" && pnpm exec prettier --write --ignore-unknown --no-error-on-unmatched-pattern "$FILE_PATH" 2>&1) || EXIT_CODE=$?

if [[ ${EXIT_CODE:-0} -ne 0 && -n "$OUTPUT" ]]; then
echo "$OUTPUT" >&2
exit 2
fi

exit 0
41 changes: 41 additions & 0 deletions .claude/hooks/guard-critical-files.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Exit early if no file path
if [[ -z "$FILE_PATH" ]]; then
exit 0
fi

# Resolve to a path relative to the project directory for consistent matching
REL_PATH="${FILE_PATH#"$CLAUDE_PROJECT_DIR"/}"

# Protected slow-layer infrastructure files
PROTECTED_FILES=(
"pnpm-workspace.yaml"
"commitlint.config.js"
"release.config.cjs"
"package.json"
"pnpm-lock.yaml"
".nvmrc"
".husky"
"config"
)

# Check if the file is a root-level protected file
BASENAME=$(basename "$REL_PATH")
DIRNAME=$(dirname "$REL_PATH")

for PROTECTED in "${PROTECTED_FILES[@]}"; do
# Only protect root-level files (dirname is . or matches project dir)
if [[ "$BASENAME" == "$PROTECTED" && ("$DIRNAME" == "." || "$FILE_PATH" == "$CLAUDE_PROJECT_DIR/$PROTECTED") ]]; then
echo "BLOCKED: '$PROTECTED' is a critical infrastructure file (slow-layer)." >&2
echo "These files affect the entire monorepo and should only be modified when the user explicitly requests it." >&2
echo "If the user has asked for this change, re-run the command to confirm." >&2
exit 2
fi
done

exit 0
29 changes: 29 additions & 0 deletions .claude/hooks/guard-destructive.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Exit early if not a git command
if [[ -z "$COMMAND" ]] || ! echo "$COMMAND" | grep -qE '^\s*git\s'; then
exit 0
fi

block() {
echo "BLOCKED: Destructive git operation detected." >&2
echo " Command: $COMMAND" >&2
echo " Reason: $1." >&2
echo "" >&2
echo "Per AGENTS.md policy, destructive git operations require explicit user confirmation." >&2
echo "If the user has explicitly requested this operation, ask them to run it manually." >&2
exit 2
}

echo "$COMMAND" | grep -qF "reset --hard" && block "git reset --hard discards all uncommitted changes irreversibly"
echo "$COMMAND" | grep -qF "push --force" && block "git push --force can overwrite remote history and destroy teammates' work"
echo "$COMMAND" | grep -qF "push -f" && block "git push -f can overwrite remote history and destroy teammates' work"
echo "$COMMAND" | grep -qF "clean -f" && block "git clean -f permanently deletes untracked files"
echo "$COMMAND" | grep -qF "checkout -- ." && block "git checkout -- . discards all unstaged changes irreversibly"
echo "$COMMAND" | grep -qF "branch -D" && block "git branch -D force-deletes a branch without merge checks"

exit 0
35 changes: 35 additions & 0 deletions .claude/hooks/guard-package-manager.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Exit early if empty or not an npm/yarn command
if [[ -z "$COMMAND" ]]; then
exit 0
fi

block() {
echo "BLOCKED: Wrong package manager detected." >&2
echo " Command: $COMMAND" >&2
echo " Reason: $1." >&2
echo "" >&2
echo "This project uses pnpm exclusively. Replace '$2' with '$3' and try again." >&2
exit 2
}

# Block npm and npx
if echo "$COMMAND" | grep -qE '(^|\s|&&|\|\||;)npm(\s|$)'; then
block "npm is not the package manager for this monorepo" "npm" "pnpm"
fi

if echo "$COMMAND" | grep -qE '(^|\s|&&|\|\||;)npx(\s|$)'; then
block "Use 'pnpm dlx' instead of 'npx' in this monorepo" "npx" "pnpm dlx"
fi

# Block yarn
if echo "$COMMAND" | grep -qE '(^|\s|&&|\|\||;)yarn(\s|$)'; then
block "yarn is not the package manager for this monorepo" "yarn" "pnpm"
fi

exit 0
38 changes: 38 additions & 0 deletions .claude/hooks/lint-commitlint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Exit early if not a git commit command
if [[ -z "$COMMAND" ]] || ! echo "$COMMAND" | grep -qE '^\s*git\s+commit\b'; then
exit 0
fi

# Extract commit message header (first line) from -m flag
# Supports: -m "msg", -m 'msg', -m "$(cat <<'EOF'\n...\nEOF\n)"
MSG=""
if echo "$COMMAND" | grep -qE '\$\(cat\s+<<'; then
# HEREDOC pattern: jq decodes JSON \n to real newlines, so the command is multi-line.
# Extract the first non-blank content line after the <<...EOF marker line.
MSG=$(echo "$COMMAND" | awk '
/<<.*EOF/ { found=1; next }
found && /^[[:space:]]*$/ { next }
found && /^[[:space:]]*EOF[[:space:]]*$/ { exit }
found { sub(/^[[:space:]]+/, ""); print; exit }
')
elif echo "$COMMAND" | grep -qE "\-m\s+'"; then
# Single-quoted message
MSG=$(echo "$COMMAND" | sed -n "s/.*-m[[:space:]]*'\\([^']*\\)'.*/\\1/p" | head -1)
elif echo "$COMMAND" | grep -qE '\-m\s+"'; then
# Double-quoted message
MSG=$(echo "$COMMAND" | sed -n 's/.*-m[[:space:]]*"\([^"]*\)".*/\1/p' | head -1)
fi

# If we couldn't extract a message, let git handle validation
if [[ -z "$MSG" ]]; then
exit 0
fi

# Run commitlint on the extracted message
echo "$MSG" | pnpm exec commitlint 2>&1
73 changes: 73 additions & 0 deletions .claude/hooks/lint-eslint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Exit early if no file path
if [[ -z "$FILE_PATH" ]]; then
exit 0
fi

# Only lint .ts, .js, and .css files
case "$FILE_PATH" in
*.ts|*.js|*.css) ;;
*) exit 0 ;;
esac

# Skip directories that should not be linted
case "$FILE_PATH" in
*/dist/*|*/node_modules/*|*/__screenshots__/*|*/generated/*) exit 0 ;;
esac

# Resolve the project directory by walking up from the file looking for eslint.config.js
DIR=$(dirname "$FILE_PATH")
PROJECT_DIR=""
while [[ "$DIR" != "/" && "$DIR" != "." ]]; do
if [[ -f "$DIR/eslint.config.js" ]]; then
PROJECT_DIR="$DIR"
break
fi
DIR=$(dirname "$DIR")
done

# Exit if no eslint config found (e.g., root-level files)
if [[ -z "$PROJECT_DIR" ]]; then
exit 0
fi

# Compute the file path relative to the project directory
REL_PATH=$(realpath --relative-to="$PROJECT_DIR" "$FILE_PATH" 2>/dev/null) || REL_PATH="${FILE_PATH#"$PROJECT_DIR"/}"

# Rules that should warn but not block (transient during refactoring)
SOFT_RULES="no-unused-vars|@typescript-eslint/no-unused-vars"

# Run ESLint with JSON output to classify errors
JSON_OUTPUT=$(cd "$PROJECT_DIR" && pnpm exec eslint -c ./eslint.config.js --no-warn-ignored --cache --cache-location .eslintcache/ --format json "$REL_PATH" 2>/dev/null) || true

# Check if there are any hard errors (not in the soft rules list)
HARD_ERRORS=$(echo "$JSON_OUTPUT" | jq -r --arg soft "$SOFT_RULES" '
[.[].messages[] | select(.severity == 2) | select(.ruleId | test($soft) | not)] | length
') 2>/dev/null || HARD_ERRORS="0"

TOTAL_ERRORS=$(echo "$JSON_OUTPUT" | jq -r '
[.[].messages[] | select(.severity == 2)] | length
') 2>/dev/null || TOTAL_ERRORS="0"

# No errors at all — pass silently
if [[ "$TOTAL_ERRORS" == "0" ]]; then
exit 0
fi

# Get human-readable output for display
READABLE=$(cd "$PROJECT_DIR" && pnpm exec eslint -c ./eslint.config.js --no-warn-ignored --color --cache --cache-location .eslintcache/ "$REL_PATH" 2>&1) || true

if [[ "$HARD_ERRORS" != "0" ]]; then
# Hard errors present — block
echo "$READABLE" >&2
exit 2
else
# Only soft errors (unused vars/imports) — warn but don't block
echo "$READABLE" >&2
exit 0
fi
53 changes: 53 additions & 0 deletions .claude/hooks/lint-stylelint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Exit early if no file path
if [[ -z "$FILE_PATH" ]]; then
exit 0
fi

# Only lint .css files
case "$FILE_PATH" in
*.css) ;;
*) exit 0 ;;
esac

# Skip directories that should not be linted
case "$FILE_PATH" in
*/dist/*|*/node_modules/*|*/vendor/*) exit 0 ;;
esac

# Resolve the repo root (location of stylelint.config.mjs)
REPO_ROOT="$CLAUDE_PROJECT_DIR"

# Walk up from the file to find the nearest package.json with a lint:style wireit task
DIR=$(dirname "$FILE_PATH")
PROJECT_DIR=""
while [[ "$DIR" != "/" && "$DIR" != "." ]]; do
if [[ -f "$DIR/package.json" ]] && jq -e '.wireit["lint:style"]' "$DIR/package.json" >/dev/null 2>&1; then
PROJECT_DIR="$DIR"
break
fi
DIR=$(dirname "$DIR")
done

# Exit if no matching project found (file is in a project without stylelint)
if [[ -z "$PROJECT_DIR" ]]; then
exit 0
fi

# Compute the file path relative to the project directory
REL_PATH=$(realpath --relative-to="$PROJECT_DIR" "$FILE_PATH" 2>/dev/null) || REL_PATH="${FILE_PATH#"$PROJECT_DIR"/}"

# Run Stylelint from the project directory
OUTPUT=$(cd "$PROJECT_DIR" && pnpm exec stylelint --config="$REPO_ROOT/stylelint.config.mjs" --color "$REL_PATH" 2>&1) || EXIT_CODE=$?

if [[ ${EXIT_CODE:-0} -ne 0 && -n "$OUTPUT" ]]; then
echo "$OUTPUT" >&2
exit 2
fi

exit 0
36 changes: 36 additions & 0 deletions .claude/hooks/lint-vale.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Exit early if no file path
if [[ -z "$FILE_PATH" ]]; then
exit 0
fi

# Only lint .md and .ts files
case "$FILE_PATH" in
*.md|*.ts) ;;
*) exit 0 ;;
esac

# Skip test files and excluded paths (matches vale --glob exclusions)
case "$FILE_PATH" in
*.test.*|*/starters/*|*/404/*|*/vendor/*|*/changelog/*|*/icons/*|*/generated/*|*/dist/*|*/LICENSE*|*/CHANGELOG*) exit 0 ;;
esac

# Skip Claude plan and memory files
case "$FILE_PATH" in
*/.claude/plans/*|*/.claude/projects/*) exit 0 ;;
esac

# Run Vale on the specific file
OUTPUT=$(cd "$CLAUDE_PROJECT_DIR" && config/vale/bin/vale --config .vale.ini "$FILE_PATH" 2>&1) || EXIT_CODE=$?

if [[ ${EXIT_CODE:-0} -ne 0 && -n "$OUTPUT" ]]; then
echo "$OUTPUT" >&2
exit 2
fi

exit 0
28 changes: 28 additions & 0 deletions .claude/hooks/session-start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -euo pipefail

INPUT=$(cat)

NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
if [[ ! -s "$NVM_DIR/nvm.sh" ]]; then
echo "nvm not found at $NVM_DIR/nvm.sh" >&2
exit 0
fi

source "$NVM_DIR/nvm.sh"

cd "$CLAUDE_PROJECT_DIR"

nvm install 2>&1 >/dev/null
corepack enable 2>&1 >/dev/null
corepack prepare --activate 2>&1 >/dev/null

INSTALL_OUTPUT=$(pnpm i --frozen-lockfile --prefer-offline 2>&1) || {
echo "pnpm install failed:" >&2
echo "$INSTALL_OUTPUT" >&2
exit 0
}

NODE_V=$(node --version)
PNPM_V=$(pnpm --version)
echo "Environment ready: node $NODE_V, pnpm $PNPM_V. Dependencies installed."
4 changes: 4 additions & 0 deletions .claude/hooks/stop.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -e
cd "$CLAUDE_PROJECT_DIR" 2>/dev/null || cd "$(git rev-parse --show-toplevel)" 2>/dev/null || exit 0
pnpm run agent:stop
Loading
Loading