@riligar/agents-kit 1.9.0 → 1.10.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.
@@ -0,0 +1,127 @@
1
+ # Code Style
2
+
3
+ All code must follow the RiLiGar formatting standards enforced by Prettier.
4
+
5
+ ## Formatting Rules
6
+
7
+ | Rule | Value | Example |
8
+ | --- | --- | --- |
9
+ | Indentation | 4 spaces | ` const x = 1` |
10
+ | Tabs | Never | Use spaces only |
11
+ | Semicolons | Never | `const x = 1` not `const x = 1;` |
12
+ | Quotes | Single | `'string'` not `"string"` |
13
+ | Trailing Commas | ES5 | Arrays and objects, not function params |
14
+ | Bracket Spacing | Yes | `{ key: value }` not `{key: value}` |
15
+ | Arrow Parens | Avoid | `x => x` not `(x) => x` |
16
+ | Line Endings | LF | Unix-style |
17
+ | Print Width | 300 | Long lines allowed |
18
+ | JSX Attributes | One per line | See below |
19
+
20
+ ## JSX Formatting
21
+
22
+ ```jsx
23
+ // Good - one attribute per line
24
+ <Button
25
+ variant="filled"
26
+ color="blue"
27
+ onClick={handleClick}
28
+ >
29
+ Submit
30
+ </Button>
31
+
32
+ // Bad - multiple attributes on same line
33
+ <Button variant="filled" color="blue" onClick={handleClick}>Submit</Button>
34
+ ```
35
+
36
+ ## Code Examples
37
+
38
+ ```javascript
39
+ // Good
40
+ const getUserData = async id => {
41
+ const response = await fetch(`/api/users/${id}`)
42
+ return response.json()
43
+ }
44
+
45
+ const config = {
46
+ apiUrl: 'https://api.example.com',
47
+ timeout: 5000,
48
+ retries: 3,
49
+ }
50
+
51
+ // Bad
52
+ const getUserData = async (id) => {
53
+ const response = await fetch("/api/users/" + id);
54
+ return response.json();
55
+ };
56
+
57
+ const config = {apiUrl: "https://api.example.com", timeout: 5000, retries: 3}
58
+ ```
59
+
60
+ ## Object and Array Formatting
61
+
62
+ ```javascript
63
+ // Good - trailing comma
64
+ const options = {
65
+ name: 'app',
66
+ version: '1.0.0',
67
+ debug: true,
68
+ }
69
+
70
+ const items = [
71
+ 'first',
72
+ 'second',
73
+ 'third',
74
+ ]
75
+
76
+ // Bad - no trailing comma
77
+ const options = {
78
+ name: 'app',
79
+ version: '1.0.0',
80
+ debug: true
81
+ }
82
+ ```
83
+
84
+ ## Import Organization
85
+
86
+ ```javascript
87
+ // 1. External dependencies
88
+ import { useState, useEffect } from 'react'
89
+ import { Button, Text } from '@mantine/core'
90
+
91
+ // 2. Internal modules
92
+ import { useAuth } from '@/hooks/useAuth'
93
+ import { api } from '@/services/api'
94
+
95
+ // 3. Components
96
+ import { Header } from '@/components/Header'
97
+
98
+ // 4. Styles, assets, types (if any)
99
+ import styles from './styles.module.css'
100
+ ```
101
+
102
+ ## Prettier Config Reference
103
+
104
+ ```json
105
+ {
106
+ "printWidth": 300,
107
+ "singleAttributePerLine": true,
108
+ "tabWidth": 4,
109
+ "useTabs": false,
110
+ "semi": false,
111
+ "singleQuote": true,
112
+ "quoteProps": "as-needed",
113
+ "trailingComma": "es5",
114
+ "bracketSpacing": true,
115
+ "bracketSameLine": false,
116
+ "arrowParens": "avoid",
117
+ "endOfLine": "lf"
118
+ }
119
+ ```
120
+
121
+ ## Auto-Format
122
+
123
+ Run Prettier before committing:
124
+
125
+ ```bash
126
+ bunx prettier --write .
127
+ ```
@@ -1,18 +1,96 @@
1
- # Conventional Commits Standards
1
+ # Conventional Commits
2
2
 
3
- All commits in this repository must follow the Conventional Commits specification. This ensures that our automated release pipeline can correctly calculate version bumps and generate changelogs.
3
+ All commits must follow the Conventional Commits specification for automated releases and changelogs.
4
4
 
5
5
  ## Format
6
6
 
7
- `<type>(<scope>): <description>`
7
+ ```
8
+ <type>(<scope>): <description>
8
9
 
9
- ## Types
10
+ [optional body]
10
11
 
11
- - `feat`: A new feature (triggers a MINOR version bump)
12
- - `fix`: A bug fix (triggers a PATCH version bump)
13
- - `docs`: Documentation only changes
14
- - `style`: Changes that do not affect the meaning of the code
15
- - `refactor`: A code change that neither fixes a bug nor adds a feature
16
- - `perf`: A code change that improves performance
17
- - `test`: Adding missing tests or correcting existing tests
18
- - `chore`: Changes to the build process or auxiliary tools and libraries
12
+ [optional footer(s)]
13
+ ```
14
+
15
+ ## Types and Version Bumps
16
+
17
+ | Type | Description | Version Bump |
18
+ | --- | --- | --- |
19
+ | `feat` | New feature | MINOR |
20
+ | `fix` | Bug fix | PATCH |
21
+ | `docs` | Documentation changes | PATCH (if scope: README) |
22
+ | `style` | Code style (formatting, no logic change) | PATCH |
23
+ | `refactor` | Code refactoring (no new feature, no fix) | PATCH |
24
+ | `perf` | Performance improvement | PATCH |
25
+ | `test` | Adding or fixing tests | No release |
26
+ | `chore` | Build process, dependencies, tooling | No release |
27
+ | `chore(release)` | Automated release commits | No release (skip CI) |
28
+
29
+ ## Breaking Changes
30
+
31
+ For MAJOR version bumps, add `BREAKING CHANGE:` in the footer or `!` after type:
32
+
33
+ ```
34
+ feat!: remove deprecated API endpoints
35
+
36
+ BREAKING CHANGE: The /v1/users endpoint has been removed. Use /v2/users instead.
37
+ ```
38
+
39
+ ## Scope (Optional)
40
+
41
+ Scope provides context. Common scopes:
42
+
43
+ - `feat(auth)`: Authentication feature
44
+ - `fix(api)`: API bug fix
45
+ - `docs(README)`: README update
46
+ - `refactor(components)`: Component refactoring
47
+
48
+ ## Examples
49
+
50
+ ```bash
51
+ # Feature (MINOR bump)
52
+ feat: add dark mode toggle to settings
53
+
54
+ # Bug fix (PATCH bump)
55
+ fix: resolve race condition in form submission
56
+
57
+ # Documentation (PATCH bump if README)
58
+ docs(README): update installation instructions
59
+
60
+ # Refactor (PATCH bump)
61
+ refactor: extract validation logic to separate module
62
+
63
+ # Style (PATCH bump)
64
+ style: format code with prettier
65
+
66
+ # Chore (no release)
67
+ chore: update dependencies
68
+
69
+ # Breaking change (MAJOR bump)
70
+ feat!: redesign authentication flow
71
+
72
+ BREAKING CHANGE: Session tokens now use JWT format.
73
+ ```
74
+
75
+ ## Branches
76
+
77
+ | Branch | Release Type | Tag |
78
+ | --- | --- | --- |
79
+ | `prod` | Production release | `v1.2.3` |
80
+ | `main` | Pre-release | `v1.2.3-rc.1` |
81
+
82
+ ## Quick Reference
83
+
84
+ ```bash
85
+ # Good
86
+ feat: add user profile page
87
+ fix(auth): handle expired tokens gracefully
88
+ docs: update API documentation
89
+ refactor(utils): simplify date formatting
90
+
91
+ # Bad
92
+ added new feature # no type
93
+ feat add something # missing colon
94
+ Feat: Add Something # wrong case
95
+ feat(): empty scope # don't use empty scope
96
+ ```
@@ -0,0 +1,116 @@
1
+ # JavaScript Only
2
+
3
+ RiLiGar projects use **JavaScript ES6+ exclusively**. TypeScript is prohibited.
4
+
5
+ ## Why No TypeScript
6
+
7
+ - **Simplicity** — Less tooling, faster builds, no compilation step
8
+ - **Bun Native** — Bun runs JavaScript directly with excellent performance
9
+ - **Reduced Complexity** — No type gymnastics, no `any` escapes, no config overhead
10
+ - **Runtime Validation** — Use runtime checks where needed (Zod, validators)
11
+
12
+ ## Allowed
13
+
14
+ ```javascript
15
+ // Modern JavaScript ES6+
16
+ const fetchUser = async id => {
17
+ const response = await fetch(`/api/users/${id}`)
18
+ return response.json()
19
+ }
20
+
21
+ // Destructuring
22
+ const { name, email } = user
23
+
24
+ // Spread operator
25
+ const newConfig = { ...config, debug: true }
26
+
27
+ // Optional chaining
28
+ const city = user?.address?.city
29
+
30
+ // Nullish coalescing
31
+ const value = input ?? 'default'
32
+
33
+ // Array methods
34
+ const names = users.map(u => u.name).filter(Boolean)
35
+ ```
36
+
37
+ ## Prohibited
38
+
39
+ ```typescript
40
+ // NO TypeScript files
41
+ // ❌ .ts, .tsx files
42
+ // ❌ tsconfig.json
43
+ // ❌ Type annotations
44
+
45
+ // Bad
46
+ const fetchUser = async (id: string): Promise<User> => { ... }
47
+ interface User { name: string; email: string }
48
+ type Status = 'active' | 'inactive'
49
+
50
+ // Good (JavaScript)
51
+ const fetchUser = async id => { ... }
52
+ ```
53
+
54
+ ## File Extensions
55
+
56
+ | Allowed | Prohibited |
57
+ | --- | --- |
58
+ | `.js` | `.ts` |
59
+ | `.jsx` | `.tsx` |
60
+ | `.mjs` | `.mts` |
61
+ | `.cjs` | `.cts` |
62
+
63
+ ## Runtime Validation (When Needed)
64
+
65
+ For API boundaries or user input, use runtime validation:
66
+
67
+ ```javascript
68
+ // Using Zod for runtime validation
69
+ import { z } from 'zod'
70
+
71
+ const UserSchema = z.object({
72
+ name: z.string().min(1),
73
+ email: z.string().email(),
74
+ age: z.number().optional(),
75
+ })
76
+
77
+ const validateUser = data => {
78
+ return UserSchema.parse(data)
79
+ }
80
+ ```
81
+
82
+ ## JSDoc (Optional)
83
+
84
+ If documentation is needed, use JSDoc comments:
85
+
86
+ ```javascript
87
+ /**
88
+ * Fetches user data from the API
89
+ * @param {string} id - The user ID
90
+ * @returns {Promise<Object>} The user data
91
+ */
92
+ const fetchUser = async id => {
93
+ const response = await fetch(`/api/users/${id}`)
94
+ return response.json()
95
+ }
96
+ ```
97
+
98
+ ## IDE Support
99
+
100
+ For better IDE experience without TypeScript:
101
+
102
+ 1. Use JSDoc annotations where helpful
103
+ 2. Configure VS Code `jsconfig.json` for path aliases
104
+ 3. Rely on Prettier for consistent formatting
105
+
106
+ ```json
107
+ // jsconfig.json
108
+ {
109
+ "compilerOptions": {
110
+ "baseUrl": ".",
111
+ "paths": {
112
+ "@/*": ["src/*"]
113
+ }
114
+ }
115
+ }
116
+ ```
@@ -0,0 +1,168 @@
1
+ # Naming Conventions
2
+
3
+ Consistent naming across all RiLiGar projects.
4
+
5
+ ## Quick Reference
6
+
7
+ | Element | Convention | Example |
8
+ | --- | --- | --- |
9
+ | Components | PascalCase | `UserProfile`, `NavBar` |
10
+ | Functions | camelCase | `getUserData`, `handleSubmit` |
11
+ | Variables | camelCase | `userName`, `isLoading` |
12
+ | Constants | SCREAMING_SNAKE | `API_URL`, `MAX_RETRIES` |
13
+ | Files (components) | PascalCase | `UserProfile.jsx` |
14
+ | Files (utilities) | camelCase | `formatDate.js` |
15
+ | Directories | kebab-case | `user-profile/`, `api-utils/` |
16
+ | CSS classes | kebab-case | `nav-bar`, `user-card` |
17
+ | Database tables | snake_case | `user_profiles`, `order_items` |
18
+ | API endpoints | kebab-case | `/api/user-profiles`, `/api/order-items` |
19
+
20
+ ## Components
21
+
22
+ ```javascript
23
+ // File: UserProfile.jsx
24
+ // Component name matches file name
25
+
26
+ // Good
27
+ const UserProfile = ({ user }) => {
28
+ return <div>{user.name}</div>
29
+ }
30
+
31
+ export default UserProfile
32
+
33
+ // Bad
34
+ const userProfile = ({ user }) => { ... } // lowercase
35
+ const User_Profile = ({ user }) => { ... } // underscore
36
+ ```
37
+
38
+ ## Functions and Variables
39
+
40
+ ```javascript
41
+ // Good
42
+ const getUserById = async id => { ... }
43
+ const isAuthenticated = true
44
+ const handleFormSubmit = event => { ... }
45
+ const totalItemCount = items.length
46
+
47
+ // Bad
48
+ const GetUserById = async id => { ... } // PascalCase
49
+ const is_authenticated = true // snake_case
50
+ const handle_form_submit = event => { ... } // snake_case
51
+ ```
52
+
53
+ ## Constants
54
+
55
+ ```javascript
56
+ // Good
57
+ const API_BASE_URL = 'https://api.example.com'
58
+ const MAX_RETRY_ATTEMPTS = 3
59
+ const DEFAULT_PAGE_SIZE = 20
60
+
61
+ // Bad
62
+ const apiBaseUrl = 'https://api.example.com' // camelCase
63
+ const maxRetryAttempts = 3 // camelCase
64
+ ```
65
+
66
+ ## Booleans
67
+
68
+ Prefix with `is`, `has`, `can`, `should`:
69
+
70
+ ```javascript
71
+ // Good
72
+ const isLoading = true
73
+ const hasPermission = user.role === 'admin'
74
+ const canEdit = hasPermission && !isLocked
75
+ const shouldRefresh = lastUpdate < threshold
76
+
77
+ // Bad
78
+ const loading = true
79
+ const permission = true
80
+ const edit = true
81
+ ```
82
+
83
+ ## Event Handlers
84
+
85
+ Prefix with `handle` or `on`:
86
+
87
+ ```javascript
88
+ // In component definition - use "handle"
89
+ const handleClick = () => { ... }
90
+ const handleSubmit = event => { ... }
91
+ const handleInputChange = value => { ... }
92
+
93
+ // In props - use "on"
94
+ <Button onClick={handleClick} />
95
+ <Form onSubmit={handleSubmit} />
96
+ <Input onChange={handleInputChange} />
97
+ ```
98
+
99
+ ## Hooks
100
+
101
+ Prefix with `use`:
102
+
103
+ ```javascript
104
+ // Good
105
+ const useAuth = () => { ... }
106
+ const useLocalStorage = key => { ... }
107
+ const useFetch = url => { ... }
108
+
109
+ // Bad
110
+ const auth = () => { ... }
111
+ const getFromLocalStorage = key => { ... }
112
+ ```
113
+
114
+ ## Directory Structure
115
+
116
+ ```
117
+ src/
118
+ ├── components/ # kebab-case directories
119
+ │ ├── user-profile/
120
+ │ │ ├── UserProfile.jsx # PascalCase component
121
+ │ │ └── UserAvatar.jsx
122
+ │ └── nav-bar/
123
+ │ └── NavBar.jsx
124
+ ├── hooks/
125
+ │ ├── useAuth.js # camelCase hook files
126
+ │ └── useFetch.js
127
+ ├── utils/
128
+ │ ├── formatDate.js # camelCase utility files
129
+ │ └── validateEmail.js
130
+ └── services/
131
+ └── api.js
132
+ ```
133
+
134
+ ## Database and API
135
+
136
+ ```javascript
137
+ // Database tables - snake_case
138
+ // user_profiles, order_items, payment_transactions
139
+
140
+ // API endpoints - kebab-case
141
+ // GET /api/user-profiles
142
+ // POST /api/order-items
143
+ // GET /api/payment-transactions/:id
144
+
145
+ // API response keys - camelCase (for JavaScript consumption)
146
+ {
147
+ "userId": 123,
148
+ "userName": "john",
149
+ "createdAt": "2024-01-01"
150
+ }
151
+ ```
152
+
153
+ ## Abbreviations
154
+
155
+ Treat abbreviations as words:
156
+
157
+ ```javascript
158
+ // Good
159
+ const userId = 123
160
+ const apiUrl = '/api'
161
+ const htmlContent = '<div>...</div>'
162
+ const xmlParser = new Parser()
163
+
164
+ // Bad
165
+ const userID = 123 // ID should be Id
166
+ const APIURL = '/api' // Should be ApiUrl
167
+ const HTMLContent = '<div>...</div>'
168
+ ```
@@ -0,0 +1,121 @@
1
+ # Pull Request Guidelines
2
+
3
+ Standards for creating and reviewing Pull Requests in RiLiGar projects.
4
+
5
+ ## PR Title
6
+
7
+ Follow Conventional Commits format:
8
+
9
+ ```
10
+ <type>(<scope>): <description>
11
+ ```
12
+
13
+ Examples:
14
+ - `feat(auth): add magic link authentication`
15
+ - `fix(api): handle timeout errors gracefully`
16
+ - `refactor(components): extract shared button styles`
17
+
18
+ ## PR Description Template
19
+
20
+ ```markdown
21
+ ## Summary
22
+ <!-- 1-3 bullet points describing what this PR does -->
23
+
24
+ - Add magic link authentication flow
25
+ - Create email template for magic links
26
+ - Update auth middleware to handle magic tokens
27
+
28
+ ## Test Plan
29
+ <!-- How to verify this PR works -->
30
+
31
+ - [ ] Sign up with email and verify magic link arrives
32
+ - [ ] Click magic link and verify redirect to dashboard
33
+ - [ ] Verify expired links show appropriate error
34
+ - [ ] Test on mobile browsers
35
+ ```
36
+
37
+ ## PR Size
38
+
39
+ Keep PRs small and focused:
40
+
41
+ | Size | Lines Changed | Recommendation |
42
+ | --- | --- | --- |
43
+ | Small | < 100 | Ideal |
44
+ | Medium | 100-300 | Acceptable |
45
+ | Large | 300-500 | Split if possible |
46
+ | Too Large | > 500 | Must split |
47
+
48
+ ## Branch Naming
49
+
50
+ ```
51
+ <type>/<short-description>
52
+
53
+ feat/magic-link-auth
54
+ fix/timeout-handling
55
+ refactor/button-components
56
+ docs/api-documentation
57
+ ```
58
+
59
+ ## Checklist Before Submitting
60
+
61
+ ```markdown
62
+ - [ ] Code follows RiLiGar style guidelines
63
+ - [ ] No TypeScript (JavaScript only)
64
+ - [ ] Prettier formatting applied
65
+ - [ ] No console.log or debug code
66
+ - [ ] Tests pass locally
67
+ - [ ] Self-reviewed the diff
68
+ - [ ] PR title follows Conventional Commits
69
+ - [ ] Description includes test plan
70
+ ```
71
+
72
+ ## Review Process
73
+
74
+ ### For Authors
75
+
76
+ 1. **Self-review first** — Read your own diff before requesting review
77
+ 2. **Small PRs** — Easier to review, faster to merge
78
+ 3. **Clear description** — Explain the "why", not just the "what"
79
+ 4. **Respond promptly** — Address feedback within 24 hours
80
+
81
+ ### For Reviewers
82
+
83
+ 1. **Be constructive** — Suggest improvements, don't just criticize
84
+ 2. **Ask questions** — If something is unclear, ask
85
+ 3. **Approve when ready** — Don't block on nitpicks
86
+ 4. **Review within 24h** — Keep the flow moving
87
+
88
+ ## Comment Prefixes
89
+
90
+ Use prefixes to clarify intent:
91
+
92
+ | Prefix | Meaning |
93
+ | --- | --- |
94
+ | `nit:` | Minor suggestion, non-blocking |
95
+ | `question:` | Seeking clarification |
96
+ | `suggestion:` | Alternative approach to consider |
97
+ | `issue:` | Must be addressed before merge |
98
+ | `praise:` | Highlighting good code |
99
+
100
+ Examples:
101
+ ```
102
+ nit: Could rename this to `fetchUserData` for clarity
103
+
104
+ question: Is there a reason we're not using the existing `useAuth` hook here?
105
+
106
+ issue: This will cause a memory leak - need to cleanup the subscription
107
+
108
+ praise: Nice use of early returns here, very readable!
109
+ ```
110
+
111
+ ## Merge Strategy
112
+
113
+ - **Squash and merge** — Default for feature branches
114
+ - **Merge commit** — For release branches
115
+ - **Rebase** — Avoid (rewrites history)
116
+
117
+ ## After Merge
118
+
119
+ 1. Delete the feature branch
120
+ 2. Verify deployment (if applicable)
121
+ 3. Close related issues
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riligar/agents-kit",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },