daemora 1.0.4 → 1.0.6
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/LICENSE +663 -0
- package/README.md +69 -19
- package/SOUL.md +29 -26
- package/config/mcp.json +126 -66
- package/daemora-ui/README.md +11 -0
- package/package.json +12 -2
- package/skills/api-development.md +35 -0
- package/skills/artifacts-builder/SKILL.md +74 -0
- package/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/brand-guidelines.md +73 -0
- package/skills/browser.md +77 -0
- package/skills/changelog-generator.md +104 -0
- package/skills/coding.md +26 -10
- package/skills/content-research-writer.md +538 -0
- package/skills/data-analysis.md +27 -0
- package/skills/debugging.md +33 -0
- package/skills/devops.md +37 -0
- package/skills/document-docx.md +197 -0
- package/skills/document-pdf.md +294 -0
- package/skills/document-pptx.md +484 -0
- package/skills/document-xlsx.md +289 -0
- package/skills/domain-name-brainstormer.md +212 -0
- package/skills/file-organizer.md +433 -0
- package/skills/frontend-design.md +42 -0
- package/skills/image-enhancer.md +99 -0
- package/skills/invoice-organizer.md +446 -0
- package/skills/lead-research-assistant.md +199 -0
- package/skills/mcp-builder/SKILL.md +328 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/meeting-insights-analyzer.md +327 -0
- package/skills/orchestration.md +93 -0
- package/skills/raffle-winner-picker.md +159 -0
- package/skills/slack-gif-creator/SKILL.md +646 -0
- package/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/skills/slack-gif-creator/core/easing.py +230 -0
- package/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/skills/slack-gif-creator/core/typography.py +357 -0
- package/skills/slack-gif-creator/core/validators.py +264 -0
- package/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/skills/slack-gif-creator/templates/explode.py +331 -0
- package/skills/slack-gif-creator/templates/fade.py +329 -0
- package/skills/slack-gif-creator/templates/flip.py +291 -0
- package/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/skills/slack-gif-creator/templates/morph.py +329 -0
- package/skills/slack-gif-creator/templates/move.py +293 -0
- package/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/skills/slack-gif-creator/templates/shake.py +127 -0
- package/skills/slack-gif-creator/templates/slide.py +291 -0
- package/skills/slack-gif-creator/templates/spin.py +269 -0
- package/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/skills/system-admin.md +44 -0
- package/skills/tailored-resume-generator.md +345 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/video-downloader.md +99 -0
- package/skills/web-development.md +32 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/src/agents/SubAgentManager.js +134 -16
- package/src/agents/systemPrompt.js +427 -0
- package/src/api/openai-compat.js +212 -0
- package/src/channels/TelegramChannel.js +5 -2
- package/src/channels/index.js +7 -10
- package/src/cli.js +281 -55
- package/src/config/agentProfiles.js +1 -0
- package/src/config/default.js +15 -1
- package/src/config/models.js +314 -78
- package/src/config/permissions.js +12 -0
- package/src/core/AgentLoop.js +70 -50
- package/src/core/Compaction.js +111 -11
- package/src/core/MessageQueue.js +90 -0
- package/src/core/Task.js +13 -0
- package/src/core/TaskQueue.js +1 -1
- package/src/core/TaskRunner.js +81 -6
- package/src/index.js +725 -59
- package/src/mcp/MCPAgentRunner.js +48 -11
- package/src/mcp/MCPManager.js +40 -2
- package/src/models/ModelRouter.js +74 -4
- package/src/safety/DockerSandbox.js +212 -0
- package/src/safety/ExecApproval.js +118 -0
- package/src/scheduler/Heartbeat.js +56 -21
- package/src/services/cleanup.js +106 -0
- package/src/services/sessions.js +39 -1
- package/src/setup/wizard.js +125 -75
- package/src/skills/SkillLoader.js +132 -17
- package/src/storage/TaskStore.js +19 -1
- package/src/tools/browserAutomation.js +615 -104
- package/src/tools/executeCommand.js +19 -1
- package/src/tools/index.js +7 -1
- package/src/tools/manageAgents.js +55 -4
- package/src/tools/replyWithFile.js +62 -0
- package/src/tools/screenCapture.js +12 -1
- package/src/tools/taskManager.js +164 -0
- package/src/tools/useMCP.js +3 -1
- package/src/utils/Embeddings.js +236 -12
- package/src/webhooks/WebhookHandler.js +107 -0
- package/src/systemPrompt.js +0 -528
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-development
|
|
3
|
+
description: REST API design, endpoint implementation, request validation, error handling
|
|
4
|
+
triggers: api, rest, endpoint, route, controller, middleware, request, response, http, express, fastify, status code, authentication, authorization, jwt, oauth, cors, rate limit
|
|
5
|
+
---
|
|
6
|
+
## Workflow: Design → Implement → Validate → Test → Document
|
|
7
|
+
|
|
8
|
+
1. **Design** — define routes, HTTP methods, request/response shapes. Follow REST conventions.
|
|
9
|
+
2. **Implement** — write handler, validation, business logic. Keep handlers thin.
|
|
10
|
+
3. **Validate** — validate request body/params/query at the boundary. Return 400 for bad input.
|
|
11
|
+
4. **Test** — `curl` or write a test. Check success + error cases + edge cases.
|
|
12
|
+
5. **Document** — update API docs or add inline route comments.
|
|
13
|
+
|
|
14
|
+
## REST Conventions
|
|
15
|
+
- `GET /items` → list, `GET /items/:id` → get one
|
|
16
|
+
- `POST /items` → create (201), `PUT /items/:id` → replace, `PATCH /items/:id` → partial update
|
|
17
|
+
- `DELETE /items/:id` → delete (204 or 200)
|
|
18
|
+
- Plural nouns for resources. No verbs in URLs.
|
|
19
|
+
|
|
20
|
+
## Status Codes
|
|
21
|
+
- 200 OK, 201 Created, 204 No Content
|
|
22
|
+
- 400 Bad Request (validation), 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict
|
|
23
|
+
- 429 Too Many Requests, 500 Internal Server Error
|
|
24
|
+
|
|
25
|
+
## Error Format
|
|
26
|
+
```json
|
|
27
|
+
{ "error": { "message": "human readable", "code": "MACHINE_CODE", "details": {} } }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Security
|
|
31
|
+
- Validate all input at the boundary — never trust client data
|
|
32
|
+
- Use parameterized queries (no SQL injection)
|
|
33
|
+
- Rate limit public endpoints
|
|
34
|
+
- Don't expose stack traces in production errors
|
|
35
|
+
- Authenticate before authorize
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: artifacts-builder
|
|
3
|
+
description: Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn/ui). Use for complex artifacts requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX artifacts.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Artifacts Builder
|
|
8
|
+
|
|
9
|
+
To build powerful frontend claude.ai artifacts, follow these steps:
|
|
10
|
+
1. Initialize the frontend repo using `scripts/init-artifact.sh`
|
|
11
|
+
2. Develop your artifact by editing the generated code
|
|
12
|
+
3. Bundle all code into a single HTML file using `scripts/bundle-artifact.sh`
|
|
13
|
+
4. Display artifact to user
|
|
14
|
+
5. (Optional) Test the artifact
|
|
15
|
+
|
|
16
|
+
**Stack**: React 18 + TypeScript + Vite + Parcel (bundling) + Tailwind CSS + shadcn/ui
|
|
17
|
+
|
|
18
|
+
## Design & Style Guidelines
|
|
19
|
+
|
|
20
|
+
VERY IMPORTANT: To avoid what is often referred to as "AI slop", avoid using excessive centered layouts, purple gradients, uniform rounded corners, and Inter font.
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
### Step 1: Initialize Project
|
|
25
|
+
|
|
26
|
+
Run the initialization script to create a new React project:
|
|
27
|
+
```bash
|
|
28
|
+
bash scripts/init-artifact.sh <project-name>
|
|
29
|
+
cd <project-name>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
This creates a fully configured project with:
|
|
33
|
+
- ✅ React + TypeScript (via Vite)
|
|
34
|
+
- ✅ Tailwind CSS 3.4.1 with shadcn/ui theming system
|
|
35
|
+
- ✅ Path aliases (`@/`) configured
|
|
36
|
+
- ✅ 40+ shadcn/ui components pre-installed
|
|
37
|
+
- ✅ All Radix UI dependencies included
|
|
38
|
+
- ✅ Parcel configured for bundling (via .parcelrc)
|
|
39
|
+
- ✅ Node 18+ compatibility (auto-detects and pins Vite version)
|
|
40
|
+
|
|
41
|
+
### Step 2: Develop Your Artifact
|
|
42
|
+
|
|
43
|
+
To build the artifact, edit the generated files. See **Common Development Tasks** below for guidance.
|
|
44
|
+
|
|
45
|
+
### Step 3: Bundle to Single HTML File
|
|
46
|
+
|
|
47
|
+
To bundle the React app into a single HTML artifact:
|
|
48
|
+
```bash
|
|
49
|
+
bash scripts/bundle-artifact.sh
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
This creates `bundle.html` - a self-contained artifact with all JavaScript, CSS, and dependencies inlined. This file can be directly shared in Claude conversations as an artifact.
|
|
53
|
+
|
|
54
|
+
**Requirements**: Your project must have an `index.html` in the root directory.
|
|
55
|
+
|
|
56
|
+
**What the script does**:
|
|
57
|
+
- Installs bundling dependencies (parcel, @parcel/config-default, parcel-resolver-tspaths, html-inline)
|
|
58
|
+
- Creates `.parcelrc` config with path alias support
|
|
59
|
+
- Builds with Parcel (no source maps)
|
|
60
|
+
- Inlines all assets into single HTML using html-inline
|
|
61
|
+
|
|
62
|
+
### Step 4: Share Artifact with User
|
|
63
|
+
|
|
64
|
+
Finally, share the bundled HTML file in conversation with the user so they can view it as an artifact.
|
|
65
|
+
|
|
66
|
+
### Step 5: Testing/Visualizing the Artifact (Optional)
|
|
67
|
+
|
|
68
|
+
Note: This is a completely optional step. Only perform if necessary or requested.
|
|
69
|
+
|
|
70
|
+
To test/visualize the artifact, use available tools (including other Skills or built-in tools like Playwright or Puppeteer). In general, avoid testing the artifact upfront as it adds latency between the request and when the finished artifact can be seen. Test later, after presenting the artifact, if requested or if issues arise.
|
|
71
|
+
|
|
72
|
+
## Reference
|
|
73
|
+
|
|
74
|
+
- **shadcn/ui components**: https://ui.shadcn.com/docs/components
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
echo "📦 Bundling React app to single HTML artifact..."
|
|
5
|
+
|
|
6
|
+
# Check if we're in a project directory
|
|
7
|
+
if [ ! -f "package.json" ]; then
|
|
8
|
+
echo "❌ Error: No package.json found. Run this script from your project root."
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
# Check if index.html exists
|
|
13
|
+
if [ ! -f "index.html" ]; then
|
|
14
|
+
echo "❌ Error: No index.html found in project root."
|
|
15
|
+
echo " This script requires an index.html entry point."
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Install bundling dependencies
|
|
20
|
+
echo "📦 Installing bundling dependencies..."
|
|
21
|
+
pnpm add -D parcel @parcel/config-default parcel-resolver-tspaths html-inline
|
|
22
|
+
|
|
23
|
+
# Create Parcel config with tspaths resolver
|
|
24
|
+
if [ ! -f ".parcelrc" ]; then
|
|
25
|
+
echo "🔧 Creating Parcel configuration with path alias support..."
|
|
26
|
+
cat > .parcelrc << 'EOF'
|
|
27
|
+
{
|
|
28
|
+
"extends": "@parcel/config-default",
|
|
29
|
+
"resolvers": ["parcel-resolver-tspaths", "..."]
|
|
30
|
+
}
|
|
31
|
+
EOF
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Clean previous build
|
|
35
|
+
echo "🧹 Cleaning previous build..."
|
|
36
|
+
rm -rf dist bundle.html
|
|
37
|
+
|
|
38
|
+
# Build with Parcel
|
|
39
|
+
echo "🔨 Building with Parcel..."
|
|
40
|
+
pnpm exec parcel build index.html --dist-dir dist --no-source-maps
|
|
41
|
+
|
|
42
|
+
# Inline everything into single HTML
|
|
43
|
+
echo "🎯 Inlining all assets into single HTML file..."
|
|
44
|
+
pnpm exec html-inline dist/index.html > bundle.html
|
|
45
|
+
|
|
46
|
+
# Get file size
|
|
47
|
+
FILE_SIZE=$(du -h bundle.html | cut -f1)
|
|
48
|
+
|
|
49
|
+
echo ""
|
|
50
|
+
echo "✅ Bundle complete!"
|
|
51
|
+
echo "📄 Output: bundle.html ($FILE_SIZE)"
|
|
52
|
+
echo ""
|
|
53
|
+
echo "You can now use this single HTML file as an artifact in Claude conversations."
|
|
54
|
+
echo "To test locally: open bundle.html in your browser"
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Exit on error
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
# Detect Node version
|
|
7
|
+
NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
|
|
8
|
+
|
|
9
|
+
echo "🔍 Detected Node.js version: $NODE_VERSION"
|
|
10
|
+
|
|
11
|
+
if [ "$NODE_VERSION" -lt 18 ]; then
|
|
12
|
+
echo "❌ Error: Node.js 18 or higher is required"
|
|
13
|
+
echo " Current version: $(node -v)"
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Set Vite version based on Node version
|
|
18
|
+
if [ "$NODE_VERSION" -ge 20 ]; then
|
|
19
|
+
VITE_VERSION="latest"
|
|
20
|
+
echo "✅ Using Vite latest (Node 20+)"
|
|
21
|
+
else
|
|
22
|
+
VITE_VERSION="5.4.11"
|
|
23
|
+
echo "✅ Using Vite $VITE_VERSION (Node 18 compatible)"
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Detect OS and set sed syntax
|
|
27
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
28
|
+
SED_INPLACE="sed -i ''"
|
|
29
|
+
else
|
|
30
|
+
SED_INPLACE="sed -i"
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Check if pnpm is installed
|
|
34
|
+
if ! command -v pnpm &> /dev/null; then
|
|
35
|
+
echo "📦 pnpm not found. Installing pnpm..."
|
|
36
|
+
npm install -g pnpm
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Check if project name is provided
|
|
40
|
+
if [ -z "$1" ]; then
|
|
41
|
+
echo "❌ Usage: ./create-react-shadcn-complete.sh <project-name>"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
PROJECT_NAME="$1"
|
|
46
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
47
|
+
COMPONENTS_TARBALL="$SCRIPT_DIR/shadcn-components.tar.gz"
|
|
48
|
+
|
|
49
|
+
# Check if components tarball exists
|
|
50
|
+
if [ ! -f "$COMPONENTS_TARBALL" ]; then
|
|
51
|
+
echo "❌ Error: shadcn-components.tar.gz not found in script directory"
|
|
52
|
+
echo " Expected location: $COMPONENTS_TARBALL"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo "🚀 Creating new React + Vite project: $PROJECT_NAME"
|
|
57
|
+
|
|
58
|
+
# Create new Vite project (always use latest create-vite, pin vite version later)
|
|
59
|
+
pnpm create vite "$PROJECT_NAME" --template react-ts
|
|
60
|
+
|
|
61
|
+
# Navigate into project directory
|
|
62
|
+
cd "$PROJECT_NAME"
|
|
63
|
+
|
|
64
|
+
echo "🧹 Cleaning up Vite template..."
|
|
65
|
+
$SED_INPLACE '/<link rel="icon".*vite\.svg/d' index.html
|
|
66
|
+
$SED_INPLACE 's/<title>.*<\/title>/<title>'"$PROJECT_NAME"'<\/title>/' index.html
|
|
67
|
+
|
|
68
|
+
echo "📦 Installing base dependencies..."
|
|
69
|
+
pnpm install
|
|
70
|
+
|
|
71
|
+
# Pin Vite version for Node 18
|
|
72
|
+
if [ "$NODE_VERSION" -lt 20 ]; then
|
|
73
|
+
echo "📌 Pinning Vite to $VITE_VERSION for Node 18 compatibility..."
|
|
74
|
+
pnpm add -D vite@$VITE_VERSION
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
echo "📦 Installing Tailwind CSS and dependencies..."
|
|
78
|
+
pnpm install -D tailwindcss@3.4.1 postcss autoprefixer @types/node tailwindcss-animate
|
|
79
|
+
pnpm install class-variance-authority clsx tailwind-merge lucide-react next-themes
|
|
80
|
+
|
|
81
|
+
echo "⚙️ Creating Tailwind and PostCSS configuration..."
|
|
82
|
+
cat > postcss.config.js << 'EOF'
|
|
83
|
+
export default {
|
|
84
|
+
plugins: {
|
|
85
|
+
tailwindcss: {},
|
|
86
|
+
autoprefixer: {},
|
|
87
|
+
},
|
|
88
|
+
}
|
|
89
|
+
EOF
|
|
90
|
+
|
|
91
|
+
echo "📝 Configuring Tailwind with shadcn theme..."
|
|
92
|
+
cat > tailwind.config.js << 'EOF'
|
|
93
|
+
/** @type {import('tailwindcss').Config} */
|
|
94
|
+
module.exports = {
|
|
95
|
+
darkMode: ["class"],
|
|
96
|
+
content: [
|
|
97
|
+
"./index.html",
|
|
98
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
99
|
+
],
|
|
100
|
+
theme: {
|
|
101
|
+
extend: {
|
|
102
|
+
colors: {
|
|
103
|
+
border: "hsl(var(--border))",
|
|
104
|
+
input: "hsl(var(--input))",
|
|
105
|
+
ring: "hsl(var(--ring))",
|
|
106
|
+
background: "hsl(var(--background))",
|
|
107
|
+
foreground: "hsl(var(--foreground))",
|
|
108
|
+
primary: {
|
|
109
|
+
DEFAULT: "hsl(var(--primary))",
|
|
110
|
+
foreground: "hsl(var(--primary-foreground))",
|
|
111
|
+
},
|
|
112
|
+
secondary: {
|
|
113
|
+
DEFAULT: "hsl(var(--secondary))",
|
|
114
|
+
foreground: "hsl(var(--secondary-foreground))",
|
|
115
|
+
},
|
|
116
|
+
destructive: {
|
|
117
|
+
DEFAULT: "hsl(var(--destructive))",
|
|
118
|
+
foreground: "hsl(var(--destructive-foreground))",
|
|
119
|
+
},
|
|
120
|
+
muted: {
|
|
121
|
+
DEFAULT: "hsl(var(--muted))",
|
|
122
|
+
foreground: "hsl(var(--muted-foreground))",
|
|
123
|
+
},
|
|
124
|
+
accent: {
|
|
125
|
+
DEFAULT: "hsl(var(--accent))",
|
|
126
|
+
foreground: "hsl(var(--accent-foreground))",
|
|
127
|
+
},
|
|
128
|
+
popover: {
|
|
129
|
+
DEFAULT: "hsl(var(--popover))",
|
|
130
|
+
foreground: "hsl(var(--popover-foreground))",
|
|
131
|
+
},
|
|
132
|
+
card: {
|
|
133
|
+
DEFAULT: "hsl(var(--card))",
|
|
134
|
+
foreground: "hsl(var(--card-foreground))",
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
borderRadius: {
|
|
138
|
+
lg: "var(--radius)",
|
|
139
|
+
md: "calc(var(--radius) - 2px)",
|
|
140
|
+
sm: "calc(var(--radius) - 4px)",
|
|
141
|
+
},
|
|
142
|
+
keyframes: {
|
|
143
|
+
"accordion-down": {
|
|
144
|
+
from: { height: "0" },
|
|
145
|
+
to: { height: "var(--radix-accordion-content-height)" },
|
|
146
|
+
},
|
|
147
|
+
"accordion-up": {
|
|
148
|
+
from: { height: "var(--radix-accordion-content-height)" },
|
|
149
|
+
to: { height: "0" },
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
animation: {
|
|
153
|
+
"accordion-down": "accordion-down 0.2s ease-out",
|
|
154
|
+
"accordion-up": "accordion-up 0.2s ease-out",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
plugins: [require("tailwindcss-animate")],
|
|
159
|
+
}
|
|
160
|
+
EOF
|
|
161
|
+
|
|
162
|
+
# Add Tailwind directives and CSS variables to index.css
|
|
163
|
+
echo "🎨 Adding Tailwind directives and CSS variables..."
|
|
164
|
+
cat > src/index.css << 'EOF'
|
|
165
|
+
@tailwind base;
|
|
166
|
+
@tailwind components;
|
|
167
|
+
@tailwind utilities;
|
|
168
|
+
|
|
169
|
+
@layer base {
|
|
170
|
+
:root {
|
|
171
|
+
--background: 0 0% 100%;
|
|
172
|
+
--foreground: 0 0% 3.9%;
|
|
173
|
+
--card: 0 0% 100%;
|
|
174
|
+
--card-foreground: 0 0% 3.9%;
|
|
175
|
+
--popover: 0 0% 100%;
|
|
176
|
+
--popover-foreground: 0 0% 3.9%;
|
|
177
|
+
--primary: 0 0% 9%;
|
|
178
|
+
--primary-foreground: 0 0% 98%;
|
|
179
|
+
--secondary: 0 0% 96.1%;
|
|
180
|
+
--secondary-foreground: 0 0% 9%;
|
|
181
|
+
--muted: 0 0% 96.1%;
|
|
182
|
+
--muted-foreground: 0 0% 45.1%;
|
|
183
|
+
--accent: 0 0% 96.1%;
|
|
184
|
+
--accent-foreground: 0 0% 9%;
|
|
185
|
+
--destructive: 0 84.2% 60.2%;
|
|
186
|
+
--destructive-foreground: 0 0% 98%;
|
|
187
|
+
--border: 0 0% 89.8%;
|
|
188
|
+
--input: 0 0% 89.8%;
|
|
189
|
+
--ring: 0 0% 3.9%;
|
|
190
|
+
--radius: 0.5rem;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.dark {
|
|
194
|
+
--background: 0 0% 3.9%;
|
|
195
|
+
--foreground: 0 0% 98%;
|
|
196
|
+
--card: 0 0% 3.9%;
|
|
197
|
+
--card-foreground: 0 0% 98%;
|
|
198
|
+
--popover: 0 0% 3.9%;
|
|
199
|
+
--popover-foreground: 0 0% 98%;
|
|
200
|
+
--primary: 0 0% 98%;
|
|
201
|
+
--primary-foreground: 0 0% 9%;
|
|
202
|
+
--secondary: 0 0% 14.9%;
|
|
203
|
+
--secondary-foreground: 0 0% 98%;
|
|
204
|
+
--muted: 0 0% 14.9%;
|
|
205
|
+
--muted-foreground: 0 0% 63.9%;
|
|
206
|
+
--accent: 0 0% 14.9%;
|
|
207
|
+
--accent-foreground: 0 0% 98%;
|
|
208
|
+
--destructive: 0 62.8% 30.6%;
|
|
209
|
+
--destructive-foreground: 0 0% 98%;
|
|
210
|
+
--border: 0 0% 14.9%;
|
|
211
|
+
--input: 0 0% 14.9%;
|
|
212
|
+
--ring: 0 0% 83.1%;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@layer base {
|
|
217
|
+
* {
|
|
218
|
+
@apply border-border;
|
|
219
|
+
}
|
|
220
|
+
body {
|
|
221
|
+
@apply bg-background text-foreground;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
EOF
|
|
225
|
+
|
|
226
|
+
# Add path aliases to tsconfig.json
|
|
227
|
+
echo "🔧 Adding path aliases to tsconfig.json..."
|
|
228
|
+
node -e "
|
|
229
|
+
const fs = require('fs');
|
|
230
|
+
const config = JSON.parse(fs.readFileSync('tsconfig.json', 'utf8'));
|
|
231
|
+
config.compilerOptions = config.compilerOptions || {};
|
|
232
|
+
config.compilerOptions.baseUrl = '.';
|
|
233
|
+
config.compilerOptions.paths = { '@/*': ['./src/*'] };
|
|
234
|
+
fs.writeFileSync('tsconfig.json', JSON.stringify(config, null, 2));
|
|
235
|
+
"
|
|
236
|
+
|
|
237
|
+
# Add path aliases to tsconfig.app.json
|
|
238
|
+
echo "🔧 Adding path aliases to tsconfig.app.json..."
|
|
239
|
+
node -e "
|
|
240
|
+
const fs = require('fs');
|
|
241
|
+
const path = 'tsconfig.app.json';
|
|
242
|
+
const content = fs.readFileSync(path, 'utf8');
|
|
243
|
+
// Remove comments manually
|
|
244
|
+
const lines = content.split('\n').filter(line => !line.trim().startsWith('//'));
|
|
245
|
+
const jsonContent = lines.join('\n');
|
|
246
|
+
const config = JSON.parse(jsonContent.replace(/\/\*[\s\S]*?\*\//g, '').replace(/,(\s*[}\]])/g, '\$1'));
|
|
247
|
+
config.compilerOptions = config.compilerOptions || {};
|
|
248
|
+
config.compilerOptions.baseUrl = '.';
|
|
249
|
+
config.compilerOptions.paths = { '@/*': ['./src/*'] };
|
|
250
|
+
fs.writeFileSync(path, JSON.stringify(config, null, 2));
|
|
251
|
+
"
|
|
252
|
+
|
|
253
|
+
# Update vite.config.ts
|
|
254
|
+
echo "⚙️ Updating Vite configuration..."
|
|
255
|
+
cat > vite.config.ts << 'EOF'
|
|
256
|
+
import path from "path";
|
|
257
|
+
import react from "@vitejs/plugin-react";
|
|
258
|
+
import { defineConfig } from "vite";
|
|
259
|
+
|
|
260
|
+
export default defineConfig({
|
|
261
|
+
plugins: [react()],
|
|
262
|
+
resolve: {
|
|
263
|
+
alias: {
|
|
264
|
+
"@": path.resolve(__dirname, "./src"),
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
});
|
|
268
|
+
EOF
|
|
269
|
+
|
|
270
|
+
# Install all shadcn/ui dependencies
|
|
271
|
+
echo "📦 Installing shadcn/ui dependencies..."
|
|
272
|
+
pnpm install @radix-ui/react-accordion @radix-ui/react-aspect-ratio @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-collapsible @radix-ui/react-context-menu @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-hover-card @radix-ui/react-label @radix-ui/react-menubar @radix-ui/react-navigation-menu @radix-ui/react-popover @radix-ui/react-progress @radix-ui/react-radio-group @radix-ui/react-scroll-area @radix-ui/react-select @radix-ui/react-separator @radix-ui/react-slider @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-toggle @radix-ui/react-toggle-group @radix-ui/react-tooltip
|
|
273
|
+
pnpm install sonner cmdk vaul embla-carousel-react react-day-picker react-resizable-panels date-fns react-hook-form @hookform/resolvers zod
|
|
274
|
+
|
|
275
|
+
# Extract shadcn components from tarball
|
|
276
|
+
echo "📦 Extracting shadcn/ui components..."
|
|
277
|
+
tar -xzf "$COMPONENTS_TARBALL" -C src/
|
|
278
|
+
|
|
279
|
+
# Create components.json for reference
|
|
280
|
+
echo "📝 Creating components.json config..."
|
|
281
|
+
cat > components.json << 'EOF'
|
|
282
|
+
{
|
|
283
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
284
|
+
"style": "default",
|
|
285
|
+
"rsc": false,
|
|
286
|
+
"tsx": true,
|
|
287
|
+
"tailwind": {
|
|
288
|
+
"config": "tailwind.config.js",
|
|
289
|
+
"css": "src/index.css",
|
|
290
|
+
"baseColor": "slate",
|
|
291
|
+
"cssVariables": true,
|
|
292
|
+
"prefix": ""
|
|
293
|
+
},
|
|
294
|
+
"aliases": {
|
|
295
|
+
"components": "@/components",
|
|
296
|
+
"utils": "@/lib/utils",
|
|
297
|
+
"ui": "@/components/ui",
|
|
298
|
+
"lib": "@/lib",
|
|
299
|
+
"hooks": "@/hooks"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
EOF
|
|
303
|
+
|
|
304
|
+
echo "✅ Setup complete! You can now use Tailwind CSS and shadcn/ui in your project."
|
|
305
|
+
echo ""
|
|
306
|
+
echo "📦 Included components (40+ total):"
|
|
307
|
+
echo " - accordion, alert, aspect-ratio, avatar, badge, breadcrumb"
|
|
308
|
+
echo " - button, calendar, card, carousel, checkbox, collapsible"
|
|
309
|
+
echo " - command, context-menu, dialog, drawer, dropdown-menu"
|
|
310
|
+
echo " - form, hover-card, input, label, menubar, navigation-menu"
|
|
311
|
+
echo " - popover, progress, radio-group, resizable, scroll-area"
|
|
312
|
+
echo " - select, separator, sheet, skeleton, slider, sonner"
|
|
313
|
+
echo " - switch, table, tabs, textarea, toast, toggle, toggle-group, tooltip"
|
|
314
|
+
echo ""
|
|
315
|
+
echo "To start developing:"
|
|
316
|
+
echo " cd $PROJECT_NAME"
|
|
317
|
+
echo " pnpm dev"
|
|
318
|
+
echo ""
|
|
319
|
+
echo "📚 Import components like:"
|
|
320
|
+
echo " import { Button } from '@/components/ui/button'"
|
|
321
|
+
echo " import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'"
|
|
322
|
+
echo " import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog'"
|
|
Binary file
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brand-guidelines
|
|
3
|
+
description: Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Anthropic Brand Styling
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
To access Anthropic's official brand identity and style resources, use this skill.
|
|
12
|
+
|
|
13
|
+
**Keywords**: branding, corporate identity, visual identity, post-processing, styling, brand colors, typography, Anthropic brand, visual formatting, visual design
|
|
14
|
+
|
|
15
|
+
## Brand Guidelines
|
|
16
|
+
|
|
17
|
+
### Colors
|
|
18
|
+
|
|
19
|
+
**Main Colors:**
|
|
20
|
+
|
|
21
|
+
- Dark: `#141413` - Primary text and dark backgrounds
|
|
22
|
+
- Light: `#faf9f5` - Light backgrounds and text on dark
|
|
23
|
+
- Mid Gray: `#b0aea5` - Secondary elements
|
|
24
|
+
- Light Gray: `#e8e6dc` - Subtle backgrounds
|
|
25
|
+
|
|
26
|
+
**Accent Colors:**
|
|
27
|
+
|
|
28
|
+
- Orange: `#d97757` - Primary accent
|
|
29
|
+
- Blue: `#6a9bcc` - Secondary accent
|
|
30
|
+
- Green: `#788c5d` - Tertiary accent
|
|
31
|
+
|
|
32
|
+
### Typography
|
|
33
|
+
|
|
34
|
+
- **Headings**: Poppins (with Arial fallback)
|
|
35
|
+
- **Body Text**: Lora (with Georgia fallback)
|
|
36
|
+
- **Note**: Fonts should be pre-installed in your environment for best results
|
|
37
|
+
|
|
38
|
+
## Features
|
|
39
|
+
|
|
40
|
+
### Smart Font Application
|
|
41
|
+
|
|
42
|
+
- Applies Poppins font to headings (24pt and larger)
|
|
43
|
+
- Applies Lora font to body text
|
|
44
|
+
- Automatically falls back to Arial/Georgia if custom fonts unavailable
|
|
45
|
+
- Preserves readability across all systems
|
|
46
|
+
|
|
47
|
+
### Text Styling
|
|
48
|
+
|
|
49
|
+
- Headings (24pt+): Poppins font
|
|
50
|
+
- Body text: Lora font
|
|
51
|
+
- Smart color selection based on background
|
|
52
|
+
- Preserves text hierarchy and formatting
|
|
53
|
+
|
|
54
|
+
### Shape and Accent Colors
|
|
55
|
+
|
|
56
|
+
- Non-text shapes use accent colors
|
|
57
|
+
- Cycles through orange, blue, and green accents
|
|
58
|
+
- Maintains visual interest while staying on-brand
|
|
59
|
+
|
|
60
|
+
## Technical Details
|
|
61
|
+
|
|
62
|
+
### Font Management
|
|
63
|
+
|
|
64
|
+
- Uses system-installed Poppins and Lora fonts when available
|
|
65
|
+
- Provides automatic fallback to Arial (headings) and Georgia (body)
|
|
66
|
+
- No font installation required - works with existing system fonts
|
|
67
|
+
- For best results, pre-install Poppins and Lora fonts in your environment
|
|
68
|
+
|
|
69
|
+
### Color Application
|
|
70
|
+
|
|
71
|
+
- Uses RGB color values for precise brand matching
|
|
72
|
+
- Applied via python-pptx's RGBColor class
|
|
73
|
+
- Maintains color fidelity across different systems
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: Web browsing, scraping, form filling, testing, automation with accessibility snapshots
|
|
4
|
+
triggers: browser, browse, scrape, web page, click, fill form, login, automate, screenshot, navigate, website, open page, test site, check page
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Snapshot-First Workflow (MANDATORY)
|
|
8
|
+
|
|
9
|
+
1. **Navigate** → `browserAction("navigate", "https://example.com")`
|
|
10
|
+
2. **Snapshot** → `browserAction("snapshot")` — get ARIA tree with refs (e1, e2, ...)
|
|
11
|
+
3. **Act using refs** → `browserAction("click", "e5")`, `browserAction("fill", "e3", "hello")`
|
|
12
|
+
4. **Verify** → snapshot again or screenshot to confirm result
|
|
13
|
+
5. **Repeat** until task is done
|
|
14
|
+
|
|
15
|
+
## Why Refs > CSS Selectors
|
|
16
|
+
- Refs (e1, e5) come from accessibility tree — stable, semantic
|
|
17
|
+
- CSS selectors break on class name changes, dynamic IDs
|
|
18
|
+
- Always take a fresh snapshot after navigation or major page changes
|
|
19
|
+
|
|
20
|
+
## Key Actions
|
|
21
|
+
|
|
22
|
+
### Navigation
|
|
23
|
+
- `navigate(url)` — go to URL (localhost allowed)
|
|
24
|
+
- `reload`, `goBack`, `goForward`
|
|
25
|
+
|
|
26
|
+
### Inspection
|
|
27
|
+
- `snapshot()` — ARIA tree with refs. Use `snapshot("interactive")` for only clickable/fillable elements
|
|
28
|
+
- `screenshot(path?)` — pixel capture. Use `screenshot(selector)` for element screenshot
|
|
29
|
+
- `getText(selector|ref?)` — text content
|
|
30
|
+
- `getContent(selector?)` — innerHTML
|
|
31
|
+
- `getLinks` — all links on page
|
|
32
|
+
- `console(filter?,limit?)` — browser console logs. filter: "all", "error", "warn", "log"
|
|
33
|
+
|
|
34
|
+
### Interaction
|
|
35
|
+
- `click(ref|selector, opts?)` — click. opts: "double", "right", "middle"
|
|
36
|
+
- `fill(ref|selector, value)` — clear + fill input
|
|
37
|
+
- `type(ref|selector, text)` — keystroke-by-keystroke typing
|
|
38
|
+
- `hover(ref|selector)` — mouse hover
|
|
39
|
+
- `selectOption(ref|selector, value)` — dropdown selection
|
|
40
|
+
- `pressKey(key)` — Enter, Tab, Escape, ArrowDown, etc.
|
|
41
|
+
- `scroll(direction|ref|selector, amount?)` — up/down/left/right or scroll to element
|
|
42
|
+
- `drag(source, target)` — drag and drop
|
|
43
|
+
|
|
44
|
+
### Waiting
|
|
45
|
+
- `waitFor(selector)` — wait for element
|
|
46
|
+
- `waitFor("text:Loading complete")` — wait for text on page
|
|
47
|
+
- `waitFor("url:/dashboard")` — wait for URL change
|
|
48
|
+
- `waitFor("js:document.readyState==='complete'")` — JS predicate
|
|
49
|
+
- `waitFor("networkidle")` — wait for network idle
|
|
50
|
+
- `waitForNavigation(timeout?)` — wait for page navigation
|
|
51
|
+
|
|
52
|
+
### State
|
|
53
|
+
- `getCookies(domain?)`, `setCookie(json)`, `clearCookies`
|
|
54
|
+
- `getStorage(local|session, key?)`, `setStorage(json)`, `clearStorage(local|session)`
|
|
55
|
+
|
|
56
|
+
### Files
|
|
57
|
+
- `upload(ref|selector, filePath)` — file input upload
|
|
58
|
+
- `download(ref|selector)` — click + capture download
|
|
59
|
+
- `pdf(path?)` — save page as PDF
|
|
60
|
+
|
|
61
|
+
### Tabs
|
|
62
|
+
- `newTab(url?)`, `switchTab(targetId)`, `listTabs`, `closeTab(targetId?)`
|
|
63
|
+
|
|
64
|
+
### Other
|
|
65
|
+
- `resize("1920x1080")` — change viewport
|
|
66
|
+
- `highlight(ref|selector)` — visual highlight for 3s
|
|
67
|
+
- `evaluate(js)` — run JavaScript
|
|
68
|
+
- `handleDialog(accept|dismiss, text?)`
|
|
69
|
+
- `newSession(profile?)` — fresh session (preserves cookies per profile)
|
|
70
|
+
- `status` — browser state
|
|
71
|
+
- `close` — shutdown
|
|
72
|
+
|
|
73
|
+
## Don't
|
|
74
|
+
- Don't use CSS selectors when you have refs from a snapshot
|
|
75
|
+
- Don't skip snapshot — blind clicking fails on dynamic pages
|
|
76
|
+
- Don't forget to take a fresh snapshot after navigation changes the page
|
|
77
|
+
- Don't assume element positions — always verify with snapshot or screenshot
|