sparkecoder 0.1.58 → 0.1.60
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/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +74 -27
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +88 -34
- package/dist/cli.js.map +1 -1
- package/dist/{index-DqLDYWhb.d.ts → index-Csad1Nx4.d.ts} +5 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +87 -33
- package/dist/index.js.map +1 -1
- package/dist/{search-DINnDTgj.d.ts → search-BETuS1vh.d.ts} +1 -1
- package/dist/server/index.js +87 -33
- package/dist/server/index.js.map +1 -1
- package/dist/skills/default/browser.md +143 -0
- package/dist/skills/default/code-review.md +122 -0
- package/dist/skills/default/debugging.md +105 -0
- package/dist/skills/default/refactoring.md +197 -0
- package/dist/tools/index.d.ts +18 -3
- package/dist/tools/index.js +74 -27
- package/dist/tools/index.js.map +1 -1
- package/package.json +4 -1
- package/src/skills/default/browser.md +143 -0
- package/src/skills/default/code-review.md +122 -0
- package/src/skills/default/debugging.md +105 -0
- package/src/skills/default/refactoring.md +197 -0
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- /package/web/.next/standalone/web/.next/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_ssgManifest.js +0 -0
- /package/web/.next/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_buildManifest.js +0 -0
- /package/web/.next/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{TuFKgULSvgTGHxXzZoeMo → R5xiWSOp_Nqqe_js-LROo}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sparkecoder",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.60",
|
|
4
4
|
"description": "A powerful coding agent CLI with HTTP API for development environments",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"dist",
|
|
35
|
+
"src/skills/default",
|
|
35
36
|
"web/.next/standalone",
|
|
36
37
|
"web/.next/static",
|
|
37
38
|
"web/.next/BUILD_ID",
|
|
@@ -55,6 +56,7 @@
|
|
|
55
56
|
"ora": "^8.1.1",
|
|
56
57
|
"resumable-stream": "^2.2.10",
|
|
57
58
|
"vscode-jsonrpc": "^8.2.0",
|
|
59
|
+
"agent-browser": "^0.14.0",
|
|
58
60
|
"zod": "^3.24.0"
|
|
59
61
|
},
|
|
60
62
|
"devDependencies": {
|
|
@@ -98,6 +100,7 @@
|
|
|
98
100
|
"dev:watch": "tsx watch --clear-screen=false src/cli.ts",
|
|
99
101
|
"build": "tsup",
|
|
100
102
|
"start": "NODE_ENV=production node dist/cli.js",
|
|
103
|
+
"postinstall": "agent-browser install 2>/dev/null || true",
|
|
101
104
|
"typecheck": "tsc --noEmit",
|
|
102
105
|
"test": "vitest run",
|
|
103
106
|
"test:watch": "vitest",
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Browser Automation
|
|
3
|
+
description: Web browser automation using agent-browser for navigation, interaction, screenshots, and testing
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Browser Automation Skill
|
|
7
|
+
|
|
8
|
+
Use `agent-browser` for all web browser automation tasks including navigation, form filling, clicking, screenshots, and testing.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
If Chromium hasn't been installed yet, run:
|
|
13
|
+
```bash
|
|
14
|
+
agent-browser install
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Core Workflow
|
|
18
|
+
|
|
19
|
+
Every browser automation follows this pattern:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 1. Navigate to a page
|
|
23
|
+
agent-browser open <url>
|
|
24
|
+
|
|
25
|
+
# 2. Snapshot to get element refs
|
|
26
|
+
agent-browser snapshot -i
|
|
27
|
+
|
|
28
|
+
# 3. Interact using refs from the snapshot
|
|
29
|
+
agent-browser click @e2
|
|
30
|
+
agent-browser fill @e3 "text"
|
|
31
|
+
|
|
32
|
+
# 4. Re-snapshot after page changes
|
|
33
|
+
agent-browser snapshot -i
|
|
34
|
+
|
|
35
|
+
# 5. Close when done
|
|
36
|
+
agent-browser close
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Element Refs
|
|
40
|
+
|
|
41
|
+
The `snapshot -i` command returns a compact accessibility tree where each interactive element has a unique ref like `@e1`, `@e2`. Use these refs for all interactions - they are deterministic and point to the exact element from the snapshot.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
agent-browser snapshot -i
|
|
45
|
+
# Output:
|
|
46
|
+
# @e1 [heading] "Example Domain"
|
|
47
|
+
# @e2 [link] "More information..."
|
|
48
|
+
# @e3 [textbox] "Email"
|
|
49
|
+
# @e4 [button] "Submit"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Common Commands
|
|
53
|
+
|
|
54
|
+
### Navigation
|
|
55
|
+
```bash
|
|
56
|
+
agent-browser open example.com
|
|
57
|
+
agent-browser open example.com --headed # Show browser window for debugging
|
|
58
|
+
agent-browser back # Go back
|
|
59
|
+
agent-browser forward # Go forward
|
|
60
|
+
agent-browser reload # Reload page
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Interaction
|
|
64
|
+
```bash
|
|
65
|
+
agent-browser click @e2 # Click by ref
|
|
66
|
+
agent-browser fill @e3 "test@example.com" # Fill input
|
|
67
|
+
agent-browser select @e4 "option1" # Select dropdown option
|
|
68
|
+
agent-browser check @e5 # Check checkbox
|
|
69
|
+
agent-browser uncheck @e5 # Uncheck checkbox
|
|
70
|
+
agent-browser hover @e2 # Hover over element
|
|
71
|
+
agent-browser focus @e3 # Focus element
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Reading Content
|
|
75
|
+
```bash
|
|
76
|
+
agent-browser get text @e1 # Get text content of element
|
|
77
|
+
agent-browser get value @e3 # Get input value
|
|
78
|
+
agent-browser get attribute @e2 href # Get attribute value
|
|
79
|
+
agent-browser snapshot # Full page accessibility tree
|
|
80
|
+
agent-browser snapshot -i # Interactive elements only
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Screenshots
|
|
84
|
+
```bash
|
|
85
|
+
agent-browser screenshot # Save to temp directory
|
|
86
|
+
agent-browser screenshot page.png # Save to specific path
|
|
87
|
+
agent-browser screenshot --fullpage # Full page screenshot
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
After taking a screenshot, use `read_file` to view it:
|
|
91
|
+
```
|
|
92
|
+
read_file({ path: "page.png" })
|
|
93
|
+
```
|
|
94
|
+
The `read_file` tool supports images (png, jpg, gif, webp) and will display them visually so you can analyze the page.
|
|
95
|
+
|
|
96
|
+
### Waiting
|
|
97
|
+
```bash
|
|
98
|
+
agent-browser wait @e1 # Wait for element to appear
|
|
99
|
+
agent-browser wait --load networkidle # Wait for network idle
|
|
100
|
+
agent-browser wait --url "**/dashboard" # Wait for URL pattern
|
|
101
|
+
agent-browser wait 2000 # Wait milliseconds
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Sessions
|
|
105
|
+
```bash
|
|
106
|
+
agent-browser sessions # List active sessions
|
|
107
|
+
agent-browser close # Close current session
|
|
108
|
+
agent-browser close --all # Close all sessions
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Command Chaining
|
|
112
|
+
|
|
113
|
+
Chain commands with `&&` when you don't need intermediate output:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Open, wait, and snapshot in one call
|
|
117
|
+
agent-browser open example.com && agent-browser wait --load networkidle && agent-browser snapshot -i
|
|
118
|
+
|
|
119
|
+
# Fill a form
|
|
120
|
+
agent-browser fill @e1 "user@example.com" && agent-browser fill @e2 "password" && agent-browser click @e3
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Run commands separately when you need to parse output first (e.g., snapshot to discover refs before interacting).
|
|
124
|
+
|
|
125
|
+
## CSS Selectors
|
|
126
|
+
|
|
127
|
+
CSS selectors and semantic locators also work:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
agent-browser click "#submit"
|
|
131
|
+
agent-browser fill "#email" "test@example.com"
|
|
132
|
+
agent-browser find role button click --name "Submit"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Best Practices
|
|
136
|
+
|
|
137
|
+
1. **Always snapshot before interacting** - You need refs to click/fill elements
|
|
138
|
+
2. **Re-snapshot after navigation or page changes** - Refs become stale after the page changes
|
|
139
|
+
3. **Use `--headed` for debugging** - Shows the browser window so you can see what's happening
|
|
140
|
+
4. **Use `wait` for dynamic content** - Pages with async loading need waits before snapshots
|
|
141
|
+
5. **Chain when possible** - Reduces round trips for simple sequences
|
|
142
|
+
6. **Close when done** - Always close the browser session when finished
|
|
143
|
+
7. **Use refs over CSS selectors** - Refs from snapshots are more reliable and context-efficient
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Code Review
|
|
3
|
+
description: Best practices and checklist for reviewing code changes
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code Review Skill
|
|
7
|
+
|
|
8
|
+
This skill provides guidelines and checklists for conducting thorough code reviews.
|
|
9
|
+
|
|
10
|
+
## Code Review Checklist
|
|
11
|
+
|
|
12
|
+
### Functionality
|
|
13
|
+
- [ ] Does the code do what it's supposed to do?
|
|
14
|
+
- [ ] Are edge cases handled properly?
|
|
15
|
+
- [ ] Is error handling appropriate and complete?
|
|
16
|
+
- [ ] Are there any obvious bugs or logic errors?
|
|
17
|
+
|
|
18
|
+
### Code Quality
|
|
19
|
+
- [ ] Is the code readable and self-documenting?
|
|
20
|
+
- [ ] Are variable and function names descriptive?
|
|
21
|
+
- [ ] Is there appropriate commenting for complex logic?
|
|
22
|
+
- [ ] Does the code follow DRY (Don't Repeat Yourself) principles?
|
|
23
|
+
- [ ] Is the code modular and well-organized?
|
|
24
|
+
|
|
25
|
+
### Style & Consistency
|
|
26
|
+
- [ ] Does the code follow the project's style guide?
|
|
27
|
+
- [ ] Is formatting consistent with the rest of the codebase?
|
|
28
|
+
- [ ] Are imports organized properly?
|
|
29
|
+
- [ ] Is there consistent use of language features?
|
|
30
|
+
|
|
31
|
+
### Performance
|
|
32
|
+
- [ ] Are there any obvious performance issues?
|
|
33
|
+
- [ ] Are database queries optimized?
|
|
34
|
+
- [ ] Is there unnecessary computation in loops?
|
|
35
|
+
- [ ] Are resources properly managed (memory, connections, etc.)?
|
|
36
|
+
|
|
37
|
+
### Security
|
|
38
|
+
- [ ] Is user input validated and sanitized?
|
|
39
|
+
- [ ] Are there any SQL injection vulnerabilities?
|
|
40
|
+
- [ ] Are secrets/credentials properly handled?
|
|
41
|
+
- [ ] Is authentication/authorization implemented correctly?
|
|
42
|
+
- [ ] Are there any XSS vulnerabilities?
|
|
43
|
+
|
|
44
|
+
### Testing
|
|
45
|
+
- [ ] Are there adequate unit tests?
|
|
46
|
+
- [ ] Do tests cover edge cases?
|
|
47
|
+
- [ ] Are tests readable and maintainable?
|
|
48
|
+
- [ ] Do all tests pass?
|
|
49
|
+
|
|
50
|
+
### Documentation
|
|
51
|
+
- [ ] Is public API documented?
|
|
52
|
+
- [ ] Are complex algorithms explained?
|
|
53
|
+
- [ ] Is README updated if needed?
|
|
54
|
+
- [ ] Are breaking changes documented?
|
|
55
|
+
|
|
56
|
+
## Review Process
|
|
57
|
+
|
|
58
|
+
### 1. Understand the Context
|
|
59
|
+
- Read the PR description and related issues
|
|
60
|
+
- Understand the motivation for the change
|
|
61
|
+
- Check if the approach aligns with project architecture
|
|
62
|
+
|
|
63
|
+
### 2. High-Level Review
|
|
64
|
+
- Review the overall structure and approach
|
|
65
|
+
- Check if the solution is appropriate for the problem
|
|
66
|
+
- Look for architectural concerns
|
|
67
|
+
|
|
68
|
+
### 3. Detailed Review
|
|
69
|
+
- Go through each file change
|
|
70
|
+
- Check for bugs, edge cases, and logic errors
|
|
71
|
+
- Verify code quality and style
|
|
72
|
+
|
|
73
|
+
### 4. Run the Code
|
|
74
|
+
- Pull the branch and test locally if possible
|
|
75
|
+
- Verify the functionality works as expected
|
|
76
|
+
- Test edge cases and error scenarios
|
|
77
|
+
|
|
78
|
+
### 5. Provide Feedback
|
|
79
|
+
- Be specific and constructive
|
|
80
|
+
- Explain why something is an issue
|
|
81
|
+
- Suggest alternatives when requesting changes
|
|
82
|
+
- Praise good solutions and improvements
|
|
83
|
+
|
|
84
|
+
## Giving Good Feedback
|
|
85
|
+
|
|
86
|
+
### Do
|
|
87
|
+
- Be respectful and constructive
|
|
88
|
+
- Focus on the code, not the person
|
|
89
|
+
- Ask questions to understand intent
|
|
90
|
+
- Provide specific suggestions
|
|
91
|
+
- Acknowledge good work
|
|
92
|
+
|
|
93
|
+
### Don't
|
|
94
|
+
- Be condescending or dismissive
|
|
95
|
+
- Nitpick on trivial issues
|
|
96
|
+
- Request changes for personal preference
|
|
97
|
+
- Leave vague comments like "fix this"
|
|
98
|
+
|
|
99
|
+
### Comment Examples
|
|
100
|
+
|
|
101
|
+
**Good:**
|
|
102
|
+
```
|
|
103
|
+
Consider using a Map instead of an object here for better performance
|
|
104
|
+
with frequent lookups. Maps have O(1) lookup time and handle
|
|
105
|
+
non-string keys better.
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Bad:**
|
|
109
|
+
```
|
|
110
|
+
This is wrong.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Common Issues to Watch For
|
|
114
|
+
|
|
115
|
+
1. **Null/Undefined Checks** - Missing null checks that could cause runtime errors
|
|
116
|
+
2. **Resource Leaks** - Connections, file handles, or memory not properly released
|
|
117
|
+
3. **Race Conditions** - Concurrent access issues in async code
|
|
118
|
+
4. **Error Swallowing** - Catching errors without proper handling or logging
|
|
119
|
+
5. **Magic Numbers** - Unexplained numeric constants
|
|
120
|
+
6. **Copy-Paste Code** - Duplicated logic that should be extracted
|
|
121
|
+
7. **Over-Engineering** - Unnecessary complexity for simple problems
|
|
122
|
+
8. **Under-Engineering** - Missing error handling, validation, or edge cases
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Debugging
|
|
3
|
+
description: Systematic approaches for debugging code issues and errors
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debugging Skill
|
|
7
|
+
|
|
8
|
+
This skill provides systematic approaches for debugging code issues and errors.
|
|
9
|
+
|
|
10
|
+
## Debugging Process
|
|
11
|
+
|
|
12
|
+
### 1. Reproduce the Issue
|
|
13
|
+
- Identify the exact steps to reproduce the bug
|
|
14
|
+
- Note any error messages, stack traces, or unexpected behavior
|
|
15
|
+
- Determine if the issue is consistent or intermittent
|
|
16
|
+
|
|
17
|
+
### 2. Gather Information
|
|
18
|
+
- Read relevant log files and error output
|
|
19
|
+
- Check recent code changes (use `git log` and `git diff`)
|
|
20
|
+
- Review configuration files and environment variables
|
|
21
|
+
- Examine the state of the system when the error occurs
|
|
22
|
+
|
|
23
|
+
### 3. Isolate the Problem
|
|
24
|
+
- Use binary search to narrow down the problematic code
|
|
25
|
+
- Create minimal reproduction cases
|
|
26
|
+
- Test individual components in isolation
|
|
27
|
+
- Check for common culprits:
|
|
28
|
+
- Null/undefined values
|
|
29
|
+
- Type mismatches
|
|
30
|
+
- Race conditions
|
|
31
|
+
- Resource leaks
|
|
32
|
+
- Configuration errors
|
|
33
|
+
|
|
34
|
+
### 4. Form and Test Hypotheses
|
|
35
|
+
- Based on gathered information, form theories about the cause
|
|
36
|
+
- Test each hypothesis methodically
|
|
37
|
+
- Keep track of what you've tried and the results
|
|
38
|
+
- Don't assume - verify each step
|
|
39
|
+
|
|
40
|
+
### 5. Fix and Verify
|
|
41
|
+
- Make the minimal change needed to fix the issue
|
|
42
|
+
- Write tests to prevent regression
|
|
43
|
+
- Verify the fix doesn't introduce new problems
|
|
44
|
+
- Document the root cause and solution
|
|
45
|
+
|
|
46
|
+
## Common Debugging Techniques
|
|
47
|
+
|
|
48
|
+
### Console/Log Debugging
|
|
49
|
+
```javascript
|
|
50
|
+
console.log('Variable value:', variable);
|
|
51
|
+
console.log('Reached checkpoint:', checkpointName);
|
|
52
|
+
console.trace('Stack trace at this point');
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Binary Search Debugging
|
|
56
|
+
- Comment out half the suspect code
|
|
57
|
+
- If the problem persists, the bug is in the remaining half
|
|
58
|
+
- Repeat until you isolate the problematic line
|
|
59
|
+
|
|
60
|
+
### Rubber Duck Debugging
|
|
61
|
+
- Explain the code line by line to yourself (or a rubber duck)
|
|
62
|
+
- Often the act of explaining reveals the issue
|
|
63
|
+
|
|
64
|
+
### Git Bisect
|
|
65
|
+
```bash
|
|
66
|
+
git bisect start
|
|
67
|
+
git bisect bad # Current commit is broken
|
|
68
|
+
git bisect good <commit> # Known good commit
|
|
69
|
+
# Git will checkout commits for you to test
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Error Categories
|
|
73
|
+
|
|
74
|
+
### Syntax Errors
|
|
75
|
+
- Missing brackets, quotes, or semicolons
|
|
76
|
+
- Typos in variable/function names
|
|
77
|
+
- Invalid language constructs
|
|
78
|
+
|
|
79
|
+
### Runtime Errors
|
|
80
|
+
- Null pointer exceptions
|
|
81
|
+
- Division by zero
|
|
82
|
+
- Array index out of bounds
|
|
83
|
+
- Type errors
|
|
84
|
+
|
|
85
|
+
### Logic Errors
|
|
86
|
+
- Incorrect algorithm implementation
|
|
87
|
+
- Wrong conditional logic
|
|
88
|
+
- Off-by-one errors
|
|
89
|
+
- State management issues
|
|
90
|
+
|
|
91
|
+
### Integration Errors
|
|
92
|
+
- API contract mismatches
|
|
93
|
+
- Configuration problems
|
|
94
|
+
- Dependency version conflicts
|
|
95
|
+
- Environment differences
|
|
96
|
+
|
|
97
|
+
## Best Practices
|
|
98
|
+
|
|
99
|
+
1. **Don't panic** - Take a systematic approach
|
|
100
|
+
2. **Read the error message** - It often tells you exactly what's wrong
|
|
101
|
+
3. **Check the obvious first** - Typos, syntax, configuration
|
|
102
|
+
4. **Use version control** - `git diff` to see recent changes
|
|
103
|
+
5. **Keep notes** - Document what you've tried and learned
|
|
104
|
+
6. **Take breaks** - Fresh eyes often spot issues faster
|
|
105
|
+
7. **Ask for help** - A second perspective can be invaluable
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Refactoring
|
|
3
|
+
description: Patterns and techniques for safely improving code structure
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Refactoring Skill
|
|
7
|
+
|
|
8
|
+
This skill provides patterns and techniques for safely improving code structure without changing behavior.
|
|
9
|
+
|
|
10
|
+
## Refactoring Principles
|
|
11
|
+
|
|
12
|
+
### 1. Make it Work, Make it Right, Make it Fast
|
|
13
|
+
- First, get the code working correctly
|
|
14
|
+
- Then, clean up and improve structure
|
|
15
|
+
- Finally, optimize for performance if needed
|
|
16
|
+
|
|
17
|
+
### 2. Small, Incremental Changes
|
|
18
|
+
- Make one small change at a time
|
|
19
|
+
- Test after each change
|
|
20
|
+
- Commit frequently to track progress
|
|
21
|
+
|
|
22
|
+
### 3. Preserve Behavior
|
|
23
|
+
- The external behavior should remain unchanged
|
|
24
|
+
- Tests should pass before and after refactoring
|
|
25
|
+
- If no tests exist, write them first
|
|
26
|
+
|
|
27
|
+
## Common Refactoring Patterns
|
|
28
|
+
|
|
29
|
+
### Extract Function
|
|
30
|
+
**When:** A code block can be grouped and named
|
|
31
|
+
```javascript
|
|
32
|
+
// Before
|
|
33
|
+
function processOrder(order) {
|
|
34
|
+
// ... lots of code ...
|
|
35
|
+
let total = 0;
|
|
36
|
+
for (const item of order.items) {
|
|
37
|
+
total += item.price * item.quantity;
|
|
38
|
+
}
|
|
39
|
+
// ... more code ...
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// After
|
|
43
|
+
function calculateTotal(items) {
|
|
44
|
+
return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function processOrder(order) {
|
|
48
|
+
// ... lots of code ...
|
|
49
|
+
const total = calculateTotal(order.items);
|
|
50
|
+
// ... more code ...
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Extract Variable
|
|
55
|
+
**When:** An expression is complex or used multiple times
|
|
56
|
+
```javascript
|
|
57
|
+
// Before
|
|
58
|
+
if (order.items.length > 0 && order.status === 'pending' && order.total > 100) {
|
|
59
|
+
applyDiscount(order);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// After
|
|
63
|
+
const isEligibleForDiscount =
|
|
64
|
+
order.items.length > 0 &&
|
|
65
|
+
order.status === 'pending' &&
|
|
66
|
+
order.total > 100;
|
|
67
|
+
|
|
68
|
+
if (isEligibleForDiscount) {
|
|
69
|
+
applyDiscount(order);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Replace Conditional with Polymorphism
|
|
74
|
+
**When:** Multiple conditionals check the same type
|
|
75
|
+
```javascript
|
|
76
|
+
// Before
|
|
77
|
+
function getArea(shape) {
|
|
78
|
+
switch (shape.type) {
|
|
79
|
+
case 'circle': return Math.PI * shape.radius ** 2;
|
|
80
|
+
case 'rectangle': return shape.width * shape.height;
|
|
81
|
+
case 'triangle': return (shape.base * shape.height) / 2;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// After
|
|
86
|
+
class Circle {
|
|
87
|
+
getArea() { return Math.PI * this.radius ** 2; }
|
|
88
|
+
}
|
|
89
|
+
class Rectangle {
|
|
90
|
+
getArea() { return this.width * this.height; }
|
|
91
|
+
}
|
|
92
|
+
class Triangle {
|
|
93
|
+
getArea() { return (this.base * this.height) / 2; }
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Replace Magic Numbers with Constants
|
|
98
|
+
**When:** Numeric literals appear in code
|
|
99
|
+
```javascript
|
|
100
|
+
// Before
|
|
101
|
+
if (user.age >= 18) {
|
|
102
|
+
allowAccess();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// After
|
|
106
|
+
const MINIMUM_AGE = 18;
|
|
107
|
+
if (user.age >= MINIMUM_AGE) {
|
|
108
|
+
allowAccess();
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Introduce Parameter Object
|
|
113
|
+
**When:** Multiple parameters are often passed together
|
|
114
|
+
```javascript
|
|
115
|
+
// Before
|
|
116
|
+
function createUser(firstName, lastName, email, phone, address, city, country) {
|
|
117
|
+
// ...
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// After
|
|
121
|
+
function createUser(personalInfo, contactInfo) {
|
|
122
|
+
// ...
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Replace Nested Conditionals with Guard Clauses
|
|
127
|
+
**When:** Code has deep nesting from conditionals
|
|
128
|
+
```javascript
|
|
129
|
+
// Before
|
|
130
|
+
function getPayAmount(employee) {
|
|
131
|
+
if (employee.isSeparated) {
|
|
132
|
+
return separatedAmount();
|
|
133
|
+
} else {
|
|
134
|
+
if (employee.isRetired) {
|
|
135
|
+
return retiredAmount();
|
|
136
|
+
} else {
|
|
137
|
+
return normalPayAmount();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// After
|
|
143
|
+
function getPayAmount(employee) {
|
|
144
|
+
if (employee.isSeparated) return separatedAmount();
|
|
145
|
+
if (employee.isRetired) return retiredAmount();
|
|
146
|
+
return normalPayAmount();
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Refactoring Process
|
|
151
|
+
|
|
152
|
+
### 1. Ensure Test Coverage
|
|
153
|
+
- Write tests for existing behavior if none exist
|
|
154
|
+
- All tests should pass before starting
|
|
155
|
+
|
|
156
|
+
### 2. Identify Code Smells
|
|
157
|
+
- Long functions
|
|
158
|
+
- Large classes
|
|
159
|
+
- Duplicate code
|
|
160
|
+
- Complex conditionals
|
|
161
|
+
- Long parameter lists
|
|
162
|
+
- Feature envy
|
|
163
|
+
- Primitive obsession
|
|
164
|
+
|
|
165
|
+
### 3. Apply Appropriate Refactoring
|
|
166
|
+
- Choose the right pattern for the smell
|
|
167
|
+
- Make small, incremental changes
|
|
168
|
+
- Run tests after each change
|
|
169
|
+
|
|
170
|
+
### 4. Review and Iterate
|
|
171
|
+
- Check if the code is clearer
|
|
172
|
+
- Look for further improvements
|
|
173
|
+
- Ensure performance hasn't degraded
|
|
174
|
+
|
|
175
|
+
## Code Smells Reference
|
|
176
|
+
|
|
177
|
+
| Smell | Description | Common Refactorings |
|
|
178
|
+
|-------|-------------|---------------------|
|
|
179
|
+
| Long Method | Function does too much | Extract Function |
|
|
180
|
+
| Large Class | Class has too many responsibilities | Extract Class |
|
|
181
|
+
| Duplicate Code | Same code in multiple places | Extract Function, Template Method |
|
|
182
|
+
| Long Parameter List | Too many function parameters | Introduce Parameter Object |
|
|
183
|
+
| Feature Envy | Method uses other class's data too much | Move Method |
|
|
184
|
+
| Data Clumps | Same data items often appear together | Extract Class |
|
|
185
|
+
| Primitive Obsession | Overuse of primitives instead of objects | Replace Primitive with Object |
|
|
186
|
+
| Switch Statements | Complex switch/case logic | Replace with Polymorphism |
|
|
187
|
+
| Speculative Generality | Unused abstraction for "future" use | Remove |
|
|
188
|
+
| Dead Code | Unreachable or unused code | Remove |
|
|
189
|
+
|
|
190
|
+
## Safety Checklist
|
|
191
|
+
|
|
192
|
+
- [ ] Tests exist and pass before starting
|
|
193
|
+
- [ ] Making one small change at a time
|
|
194
|
+
- [ ] Running tests after each change
|
|
195
|
+
- [ ] Committing after each successful refactoring
|
|
196
|
+
- [ ] External behavior is preserved
|
|
197
|
+
- [ ] No new features added during refactoring
|
package/web/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
R5xiWSOp_Nqqe_js-LROo
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
R5xiWSOp_Nqqe_js-LROo
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"static/chunks/a6dad97d9634a72d.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
10
|
+
"static/R5xiWSOp_Nqqe_js-LROo/_ssgManifest.js",
|
|
11
|
+
"static/R5xiWSOp_Nqqe_js-LROo/_buildManifest.js"
|
|
12
12
|
],
|
|
13
13
|
"rootMainFiles": [
|
|
14
14
|
"static/chunks/651e187cc15d66de.js",
|
|
@@ -319,8 +319,8 @@
|
|
|
319
319
|
"dynamicRoutes": {},
|
|
320
320
|
"notFoundRoutes": [],
|
|
321
321
|
"preview": {
|
|
322
|
-
"previewModeId": "
|
|
323
|
-
"previewModeSigningKey": "
|
|
324
|
-
"previewModeEncryptionKey": "
|
|
322
|
+
"previewModeId": "4c7fd0375bf76068ee7630cde933a5d6",
|
|
323
|
+
"previewModeSigningKey": "d24a1e7b408c10e6fb163c5ae40956136efdfaee542536f540fdc7e6fc4395cc",
|
|
324
|
+
"previewModeEncryptionKey": "a952bf6e752927afcd312e78f0b7d029459c3431a2fbcc1910d9c5dc2a45ab5d"
|
|
325
325
|
}
|
|
326
326
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/651e187cc15d66de.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[488287,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n3:I[174895,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n4:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"ViewportBoundary\"]\n9:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"MetadataBoundary\"]\nb:I[552576,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--R5xiWSOp_Nqqe_js_LROo--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/651e187cc15d66de.js"/><script src="/_next/static/chunks/b9ad1584d4e11d12.js" async=""></script><script src="/_next/static/chunks/a14243261b055626.js" async=""></script><script src="/_next/static/chunks/186e0c1b3ff43c9c.js" async=""></script><script src="/_next/static/chunks/862ced58ce21a270.js" async=""></script><script src="/_next/static/chunks/turbopack-597558bb7b6982f6.js" async=""></script><script src="/_next/static/chunks/9b5512fb633ef95d.js" async=""></script><script src="/_next/static/chunks/0f1cf11540868e42.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><link rel="icon" href="/favicon.ico?favicon.e3cbed1b.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/651e187cc15d66de.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[488287,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n3:I[174895,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n4:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"ViewportBoundary\"]\n9:I[151858,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"MetadataBoundary\"]\nb:I[552576,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"R5xiWSOp_Nqqe_js-LROo\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[349310,[\"/_next/static/chunks/9b5512fb633ef95d.js\",\"/_next/static/chunks/0f1cf11540868e42.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.e3cbed1b.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"1\",{}]]\n"])</script></body></html>
|