pondorasti 0.1.36 → 0.1.37
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.
- package/Brewfile +2 -1
- package/dotfiles/claude/settings.json +2 -1
- package/dotfiles/cursor/settings.json +2 -2
- package/dotfiles/nvim/lazy-lock.json +10 -10
- package/dotfiles/opencode/opencode.json +4 -0
- package/package.json +2 -2
- package/src/tools/dotfiles.ts +2 -0
- package/src/utils/github.test.ts +28 -0
- package/src/utils/github.ts +44 -13
- package/dotfiles/agents/skills/rams/SKILL.md +0 -111
package/Brewfile
CHANGED
|
@@ -5,6 +5,7 @@ tap "anomalyco/tap" # Tap for opencode and related tools
|
|
|
5
5
|
# Development Tools
|
|
6
6
|
brew "lazygit" # Terminal UI for git commands - makes git operations visual and intuitive
|
|
7
7
|
brew "docker" # Docker CLI - command-line interface for interacting with Docker
|
|
8
|
+
brew "colima" # Docker-compatible container runtime for macOS using Lima
|
|
8
9
|
cask "orbstack" # Fast, lightweight Docker & Linux VM runtime for macOS
|
|
9
10
|
brew "lazydocker" # Terminal UI for Docker - manage containers, images, and volumes easily
|
|
10
11
|
brew "neovim" # Hyperextensible Vim-based text editor - modern fork with better plugin support
|
|
@@ -18,6 +19,7 @@ brew "rbenv" # Ruby version manager - simple, light
|
|
|
18
19
|
brew "stripe/stripe-cli/stripe" # Stripe CLI for testing and managing Stripe resources
|
|
19
20
|
brew "supabase" # Supabase CLI for local development and deployment
|
|
20
21
|
brew "flyctl" # Fly.io CLI for app deployment and infrastructure management
|
|
22
|
+
brew "cloudflare-wrangler" # Cloudflare Wrangler CLI for Workers development and deployment
|
|
21
23
|
brew "mysql" # Open source relational database management system
|
|
22
24
|
brew "anomalyco/tap/opencode" # Open source code editor/IDE
|
|
23
25
|
|
|
@@ -44,7 +46,6 @@ cask "cursor" # AI-powered code editor built to make
|
|
|
44
46
|
cask "zed" # High-performance code editor designed for collaboration with humans and AI
|
|
45
47
|
cask "claude" # Claude AI assistant desktop application
|
|
46
48
|
cask "claude-code" # Claude AI coding assistant for the terminal
|
|
47
|
-
cask "clawdbot" # Personal AI assistant with menu bar control and voice wake
|
|
48
49
|
cask "codex" # OpenAI's Codex CLI - coding agent that runs in your terminal
|
|
49
50
|
cask "opencode-desktop" # Desktop app for OpenCode AI coding assistant
|
|
50
51
|
cask "android-studio" # Official IDE for Android app development
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
"workbench.colorTheme": "Default Dark Modern",
|
|
26
26
|
"workbench.preferredDarkColorTheme": "Default Dark Modern",
|
|
27
27
|
"workbench.preferredLightColorTheme": "Default Light Modern",
|
|
28
|
-
"workbench.sideBar.location": "right",
|
|
29
28
|
"workbench.tree.enableStickyScroll": true,
|
|
30
29
|
|
|
31
30
|
"terminal.integrated.fontFamily": "MesloLGS Nerd Font Mono",
|
|
@@ -51,5 +50,6 @@
|
|
|
51
50
|
},
|
|
52
51
|
"cursor.cpp.disabledLanguages": [
|
|
53
52
|
"plaintext"
|
|
54
|
-
]
|
|
53
|
+
],
|
|
54
|
+
"workbench.sideBar.location": "right"
|
|
55
55
|
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"LazyVim": { "branch": "main", "commit": "28db03f958d58dfff3c647ce28fdc1cb88ac158d" },
|
|
3
|
-
"blink.cmp": { "branch": "main", "commit": "
|
|
3
|
+
"blink.cmp": { "branch": "main", "commit": "4b18c32adef2898f95cdef6192cbd5796c1a332d" },
|
|
4
4
|
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
|
5
|
-
"catppuccin": { "branch": "main", "commit": "
|
|
5
|
+
"catppuccin": { "branch": "main", "commit": "0a5de4da015a175f416d6ef1eda84661623e0500" },
|
|
6
6
|
"conform.nvim": { "branch": "master", "commit": "c2526f1cde528a66e086ab1668e996d162c75f4f" },
|
|
7
7
|
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
|
|
8
8
|
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
|
9
|
-
"gitsigns.nvim": { "branch": "main", "commit": "
|
|
9
|
+
"gitsigns.nvim": { "branch": "main", "commit": "9f3c6dd7868bcc116e9c1c1929ce063b978fa519" },
|
|
10
10
|
"grug-far.nvim": { "branch": "main", "commit": "275dbedc96e61a6b8d1dfb28ba51586ddd233dcf" },
|
|
11
11
|
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
|
12
12
|
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
|
13
13
|
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
|
14
|
-
"mason-lspconfig.nvim": { "branch": "main", "commit": "
|
|
14
|
+
"mason-lspconfig.nvim": { "branch": "main", "commit": "21c2a84ce368e99b18f52ab348c4c02c32c02fcf" },
|
|
15
15
|
"mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" },
|
|
16
|
-
"mini.ai": { "branch": "main", "commit": "
|
|
17
|
-
"mini.icons": { "branch": "main", "commit": "
|
|
16
|
+
"mini.ai": { "branch": "main", "commit": "b0247752cf629ce7c6bd0a1efd82fb58ff60f9d6" },
|
|
17
|
+
"mini.icons": { "branch": "main", "commit": "68c178e0958d95b3977a771f3445429b1bded985" },
|
|
18
18
|
"mini.pairs": { "branch": "main", "commit": "4089aa6ea6423e02e1a8326a7a7a00159f6f5e04" },
|
|
19
19
|
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
|
20
20
|
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
|
21
|
-
"nvim-lint": { "branch": "master", "commit": "
|
|
22
|
-
"nvim-lspconfig": { "branch": "master", "commit": "
|
|
23
|
-
"nvim-treesitter": { "branch": "main", "commit": "
|
|
21
|
+
"nvim-lint": { "branch": "master", "commit": "486474c2ace8d78d28995074dbdbe29011bc63d0" },
|
|
22
|
+
"nvim-lspconfig": { "branch": "master", "commit": "44acfe887d4056f704ccc4f17513ed41c9e2b2e6" },
|
|
23
|
+
"nvim-treesitter": { "branch": "main", "commit": "ecdae44baefeffceade8b0c752d80ececad28e76" },
|
|
24
24
|
"nvim-treesitter-textobjects": { "branch": "main", "commit": "a0e182ae21fda68c59d1f36c9ed45600aef50311" },
|
|
25
|
-
"nvim-ts-autotag": { "branch": "main", "commit": "
|
|
25
|
+
"nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" },
|
|
26
26
|
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
|
|
27
27
|
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
|
28
28
|
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pondorasti",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.37",
|
|
4
4
|
"description": "CLI for pondorasti",
|
|
5
5
|
"author": "Alexandru Ţurcanu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"build:sign": "codesign --deep --force --sign - --entitlements entitlements.plist dist/pd"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"ink": "^6.
|
|
34
|
+
"ink": "^6.8.0",
|
|
35
35
|
"ink-gradient": "^4.0.0",
|
|
36
36
|
"ink-spinner": "^5.0.0",
|
|
37
37
|
"react": "^19.2.4",
|
package/src/tools/dotfiles.ts
CHANGED
|
@@ -13,6 +13,7 @@ enum DotfilesPackage {
|
|
|
13
13
|
Claude = "claude",
|
|
14
14
|
Agents = "agents",
|
|
15
15
|
Nvim = "nvim",
|
|
16
|
+
Opencode = "opencode",
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
const PACKAGE_TARGET_PATHS: Partial<Record<DotfilesPackage, string>> = {
|
|
@@ -20,6 +21,7 @@ const PACKAGE_TARGET_PATHS: Partial<Record<DotfilesPackage, string>> = {
|
|
|
20
21
|
[DotfilesPackage.Claude]: "~/.claude",
|
|
21
22
|
[DotfilesPackage.Agents]: "~/.claude", // OpenCode also reads from ~/.claude/skills/
|
|
22
23
|
[DotfilesPackage.Nvim]: "~/.config/nvim",
|
|
24
|
+
[DotfilesPackage.Opencode]: "~/.config/opencode",
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
function isDotfilesPackage(value: string): value is DotfilesPackage {
|
package/src/utils/github.test.ts
CHANGED
|
@@ -51,6 +51,13 @@ describe("parseGitHubUrl", () => {
|
|
|
51
51
|
})
|
|
52
52
|
})
|
|
53
53
|
|
|
54
|
+
test("parses commits URLs", () => {
|
|
55
|
+
expect(parseGitHubUrl("https://github.com/owner/repo/commits/main/")).toEqual({
|
|
56
|
+
owner: "owner",
|
|
57
|
+
repo: "repo",
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
|
|
54
61
|
test("parses blob URLs (file paths)", () => {
|
|
55
62
|
expect(parseGitHubUrl("https://github.com/owner/repo/blob/main/file.ts")).toEqual({
|
|
56
63
|
owner: "owner",
|
|
@@ -65,6 +72,13 @@ describe("parseGitHubUrl", () => {
|
|
|
65
72
|
})
|
|
66
73
|
})
|
|
67
74
|
|
|
75
|
+
test("parses other GitHub subpages", () => {
|
|
76
|
+
expect(parseGitHubUrl("https://github.com/owner/repo/pull/123/files")).toEqual({
|
|
77
|
+
owner: "owner",
|
|
78
|
+
repo: "repo",
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
|
|
68
82
|
test("handles trailing slashes", () => {
|
|
69
83
|
expect(parseGitHubUrl("https://github.com/owner/repo/")).toEqual({
|
|
70
84
|
owner: "owner",
|
|
@@ -79,6 +93,20 @@ describe("parseGitHubUrl", () => {
|
|
|
79
93
|
})
|
|
80
94
|
})
|
|
81
95
|
|
|
96
|
+
test("handles query params and hash fragments", () => {
|
|
97
|
+
expect(parseGitHubUrl("https://github.com/owner/repo?tab=readme-ov-file#top")).toEqual({
|
|
98
|
+
owner: "owner",
|
|
99
|
+
repo: "repo",
|
|
100
|
+
})
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
test("parses github.com URLs without protocol", () => {
|
|
104
|
+
expect(parseGitHubUrl("github.com/owner/repo/issues/1")).toEqual({
|
|
105
|
+
owner: "owner",
|
|
106
|
+
repo: "repo",
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
82
110
|
test("returns null for invalid URLs", () => {
|
|
83
111
|
expect(parseGitHubUrl("not-a-valid-url")).toBeNull()
|
|
84
112
|
})
|
package/src/utils/github.ts
CHANGED
|
@@ -1,20 +1,51 @@
|
|
|
1
1
|
export const parseGitHubUrl = (url: string): { owner: string; repo: string } | null => {
|
|
2
|
-
const normalized = url.trim()
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
const normalized = url.trim()
|
|
3
|
+
if (!normalized) {
|
|
4
|
+
return null
|
|
5
|
+
}
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const toResult = (owner: string | undefined, repo: string | undefined) => {
|
|
8
|
+
if (!owner || !repo) {
|
|
9
|
+
return null
|
|
10
|
+
}
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return { owner: match[1], repo: match[2] }
|
|
12
|
+
const cleanRepo = repo.replace(/\.git$/i, "")
|
|
13
|
+
if (!cleanRepo) {
|
|
14
|
+
return null
|
|
16
15
|
}
|
|
16
|
+
|
|
17
|
+
return { owner, repo: cleanRepo }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Handles owner/repo (with optional trailing slash)
|
|
21
|
+
const shortMatch = normalized.match(/^([^/:?#\s]+)\/([^/?#]+?)(?:\.git)?\/?$/)
|
|
22
|
+
if (shortMatch) {
|
|
23
|
+
return toResult(shortMatch[1], shortMatch[2])
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Handles git@github.com:owner/repo(.git)
|
|
27
|
+
const sshMatch = normalized.match(/^git@github\.com:([^/]+)\/([^/?#]+?)(?:\.git)?\/?$/i)
|
|
28
|
+
if (sshMatch) {
|
|
29
|
+
return toResult(sshMatch[1], sshMatch[2])
|
|
17
30
|
}
|
|
18
31
|
|
|
19
|
-
|
|
32
|
+
// Allows github.com/owner/repo without protocol
|
|
33
|
+
const urlCandidate = normalized.match(/^github\.com\//i) ? `https://${normalized}` : normalized
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const parsed = new URL(urlCandidate)
|
|
37
|
+
const host = parsed.hostname.toLowerCase()
|
|
38
|
+
if (host !== "github.com" && host !== "www.github.com") {
|
|
39
|
+
return null
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const segments = parsed.pathname.split("/").filter(Boolean)
|
|
43
|
+
if (segments.length < 2) {
|
|
44
|
+
return null
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return toResult(segments[0], segments[1])
|
|
48
|
+
} catch {
|
|
49
|
+
return null
|
|
50
|
+
}
|
|
20
51
|
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: rams
|
|
3
|
-
description: Run accessibility and visual design review
|
|
4
|
-
metadata:
|
|
5
|
-
author: rams.ai
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Rams Design Review
|
|
9
|
-
|
|
10
|
-
You are Rams, an expert design engineer reviewing code for accessibility and visual design issues.
|
|
11
|
-
|
|
12
|
-
## Mode
|
|
13
|
-
|
|
14
|
-
If `$ARGUMENTS` is provided, analyze that specific file.
|
|
15
|
-
If `$ARGUMENTS` is empty, ask the user which file(s) to review, or offer to scan the project for component files.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 1. Accessibility Review (WCAG 2.1)
|
|
20
|
-
|
|
21
|
-
### Critical (Must Fix)
|
|
22
|
-
|
|
23
|
-
| Check | WCAG | What to look for |
|
|
24
|
-
| --------------------------- | ----- | -------------------------------------------------------------------------------- |
|
|
25
|
-
| Images without alt | 1.1.1 | `<img>` without `alt` attribute |
|
|
26
|
-
| Icon-only buttons | 4.1.2 | `<button>` with only SVG/icon, no `aria-label` |
|
|
27
|
-
| Form inputs without labels | 1.3.1 | `<input>`, `<select>`, `<textarea>` without associated `<label>` or `aria-label` |
|
|
28
|
-
| Non-semantic click handlers | 2.1.1 | `<div onClick>` or `<span onClick>` without `role`, `tabIndex`, `onKeyDown` |
|
|
29
|
-
| Missing link destination | 2.1.1 | `<a>` without `href` using only `onClick` |
|
|
30
|
-
|
|
31
|
-
### Serious (Should Fix)
|
|
32
|
-
|
|
33
|
-
| Check | WCAG | What to look for |
|
|
34
|
-
| ------------------------- | ----- | ------------------------------------------------------------------- |
|
|
35
|
-
| Focus outline removed | 2.4.7 | `outline-none` or `outline: none` without visible focus replacement |
|
|
36
|
-
| Missing keyboard handlers | 2.1.1 | Interactive elements with `onClick` but no `onKeyDown`/`onKeyUp` |
|
|
37
|
-
| Color-only information | 1.4.1 | Status/error indicated only by color (no icon/text) |
|
|
38
|
-
| Touch target too small | 2.5.5 | Clickable elements smaller than 44x44px |
|
|
39
|
-
|
|
40
|
-
### Moderate (Consider Fixing)
|
|
41
|
-
|
|
42
|
-
| Check | WCAG | What to look for |
|
|
43
|
-
| -------------------------------- | ----- | ------------------------------------------- |
|
|
44
|
-
| Heading hierarchy | 1.3.1 | Skipped heading levels (h1 → h3) |
|
|
45
|
-
| Positive tabIndex | 2.4.3 | `tabIndex` > 0 (disrupts natural tab order) |
|
|
46
|
-
| Role without required attributes | 4.1.2 | `role="button"` without `tabIndex="0"` |
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 2. Visual Design Review
|
|
51
|
-
|
|
52
|
-
### Layout & Spacing
|
|
53
|
-
|
|
54
|
-
- Inconsistent spacing values
|
|
55
|
-
- Overflow issues, alignment problems
|
|
56
|
-
- Z-index conflicts
|
|
57
|
-
|
|
58
|
-
### Typography
|
|
59
|
-
|
|
60
|
-
- Mixed font families, weights, or sizes
|
|
61
|
-
- Line height issues
|
|
62
|
-
- Missing font fallbacks
|
|
63
|
-
|
|
64
|
-
### Color & Contrast
|
|
65
|
-
|
|
66
|
-
- Contrast ratio below 4.5:1
|
|
67
|
-
- Missing hover/focus states
|
|
68
|
-
- Dark mode inconsistencies
|
|
69
|
-
|
|
70
|
-
### Components
|
|
71
|
-
|
|
72
|
-
- Missing button states (disabled, loading, hover, active, focus)
|
|
73
|
-
- Missing form field states (error, success, disabled)
|
|
74
|
-
- Inconsistent borders, shadows, or icon sizing
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Output Format
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
═══════════════════════════════════════════════════
|
|
82
|
-
RAMS DESIGN REVIEW: [filename]
|
|
83
|
-
═══════════════════════════════════════════════════
|
|
84
|
-
|
|
85
|
-
CRITICAL (X issues)
|
|
86
|
-
───────────────────
|
|
87
|
-
[A11Y] Line 24: Button missing accessible name
|
|
88
|
-
<button><CloseIcon /></button>
|
|
89
|
-
Fix: Add aria-label="Close"
|
|
90
|
-
WCAG: 4.1.2
|
|
91
|
-
|
|
92
|
-
SERIOUS (X issues)
|
|
93
|
-
──────────────────
|
|
94
|
-
...
|
|
95
|
-
|
|
96
|
-
═══════════════════════════════════════════════════
|
|
97
|
-
SUMMARY: X critical, X serious, X moderate
|
|
98
|
-
Score: XX/100
|
|
99
|
-
═══════════════════════════════════════════════════
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## Guidelines
|
|
105
|
-
|
|
106
|
-
1. Read the file(s) first before making assessments
|
|
107
|
-
2. Be specific with line numbers and code snippets
|
|
108
|
-
3. Provide fixes, not just problems
|
|
109
|
-
4. Prioritize critical accessibility issues first
|
|
110
|
-
|
|
111
|
-
If asked, offer to fix the issues directly.
|