kie-ruby 0.1.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.
- checksums.yaml +7 -0
- data/.claude/agents/project-environment-setup.md +149 -0
- data/.claude/commands/soba/implement.md +93 -0
- data/.claude/commands/soba/plan.md +98 -0
- data/.claude/commands/soba/review.md +91 -0
- data/.claude/commands/soba/revise.md +79 -0
- data/.devcontainer/LICENSE +21 -0
- data/.devcontainer/README.md +85 -0
- data/.devcontainer/bin/devcontainer-common.sh +36 -0
- data/.devcontainer/bin/down +55 -0
- data/.devcontainer/bin/init +159 -0
- data/.devcontainer/bin/rebuild +10 -0
- data/.devcontainer/bin/up +11 -0
- data/.devcontainer/compose.yaml +12 -0
- data/.devcontainer/compose.yaml.template +8 -0
- data/.devcontainer/devcontainer.json +30 -0
- data/.devcontainer/devcontainer.local.json +3 -0
- data/.devcontainer/scripts/setup.sh +12 -0
- data/.lefthook/rubocop-autofix.sh +51 -0
- data/.soba/config.yml +78 -0
- data/CHANGELOG.md +23 -0
- data/CLAUDE.md +20 -0
- data/LICENSE +21 -0
- data/README.md +310 -0
- data/Rakefile +12 -0
- data/docs/business/INDEX.md +3 -0
- data/docs/business/overview.md +35 -0
- data/docs/development/INDEX.md +3 -0
- data/docs/development/technical-design.md +77 -0
- data/docs/document_system.md +58 -0
- data/lefthook.yml +8 -0
- data/lib/kie/client.rb +36 -0
- data/lib/kie/errors.rb +43 -0
- data/lib/kie/general_engine.rb +56 -0
- data/lib/kie/general_task.rb +106 -0
- data/lib/kie/middleware/raise_error.rb +46 -0
- data/lib/kie/model_definition.rb +10 -0
- data/lib/kie/model_registry.rb +36 -0
- data/lib/kie/models/nano_banana_pro.rb +17 -0
- data/lib/kie/models/suno_v4.rb +14 -0
- data/lib/kie/models/suno_v4_5.rb +14 -0
- data/lib/kie/models/suno_v4_5_all.rb +14 -0
- data/lib/kie/models/suno_v4_5_plus.rb +14 -0
- data/lib/kie/models/suno_v5.rb +14 -0
- data/lib/kie/suno_engine.rb +129 -0
- data/lib/kie/suno_task.rb +99 -0
- data/lib/kie/task.rb +69 -0
- data/lib/kie/version.rb +5 -0
- data/lib/kie.rb +26 -0
- data/sig/kie.rbs +6 -0
- metadata +110 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
echo "Stopping devcontainer..."
|
|
4
|
+
|
|
5
|
+
# Get the directory where this script is located
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
ENV_FILE="$SCRIPT_DIR/../.env"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
9
|
+
PROJECT_NAME="$(basename "$PROJECT_ROOT")"
|
|
10
|
+
|
|
11
|
+
# Load COMPOSE_PROJECT_NAME from .env file
|
|
12
|
+
if [ -f "$ENV_FILE" ]; then
|
|
13
|
+
# Source the .env file to get COMPOSE_PROJECT_NAME
|
|
14
|
+
export $(grep -E '^COMPOSE_PROJECT_NAME=' "$ENV_FILE" | xargs)
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Use COMPOSE_PROJECT_NAME from .env or fallback to directory name with _devcontainer suffix
|
|
18
|
+
if [ -z "$COMPOSE_PROJECT_NAME" ]; then
|
|
19
|
+
COMPOSE_PROJECT_NAME="${PROJECT_NAME}_devcontainer"
|
|
20
|
+
echo "Warning: COMPOSE_PROJECT_NAME not found in .env, using default: $COMPOSE_PROJECT_NAME"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
echo "Compose project name: $COMPOSE_PROJECT_NAME"
|
|
24
|
+
|
|
25
|
+
# Stop containers managed by docker compose if compose files exist
|
|
26
|
+
cd .devcontainer 2>/dev/null || true
|
|
27
|
+
if [ -f "compose.yaml" ] || [ -f "compose.yml" ]; then
|
|
28
|
+
if [ -f "compose.yaml" ]; then
|
|
29
|
+
echo "Running docker compose down..."
|
|
30
|
+
docker compose --env-file .env -f compose.yaml down
|
|
31
|
+
elif [ -f "compose.yml" ]; then
|
|
32
|
+
echo "Running docker compose down..."
|
|
33
|
+
docker compose --env-file .env -f compose.yml down
|
|
34
|
+
fi
|
|
35
|
+
else
|
|
36
|
+
echo "No compose file found, skipping docker compose down"
|
|
37
|
+
fi
|
|
38
|
+
cd - >/dev/null 2>&1 || true
|
|
39
|
+
|
|
40
|
+
# Stop containers by project name (regardless of compose file existence)
|
|
41
|
+
echo "Searching for containers with project name: $PROJECT_NAME"
|
|
42
|
+
CONTAINER_IDS=$(docker ps -q --filter "name=${PROJECT_NAME}")
|
|
43
|
+
|
|
44
|
+
if [ -n "$CONTAINER_IDS" ]; then
|
|
45
|
+
echo "Found containers to stop:"
|
|
46
|
+
docker ps --filter "name=${PROJECT_NAME}" --format "table {{.Names}}\t{{.Status}}"
|
|
47
|
+
echo ""
|
|
48
|
+
echo "Stopping containers..."
|
|
49
|
+
docker stop $CONTAINER_IDS
|
|
50
|
+
echo "Containers stopped."
|
|
51
|
+
else
|
|
52
|
+
echo "No running containers found with project name: $PROJECT_NAME"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
echo "Devcontainer cleanup completed."
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
DEVCONTAINER_DIR="$(dirname "$SCRIPT_DIR")"
|
|
7
|
+
PROJECT_ROOT="$(dirname "$DEVCONTAINER_DIR")"
|
|
8
|
+
|
|
9
|
+
# Colors for output
|
|
10
|
+
RED='\033[0;31m'
|
|
11
|
+
GREEN='\033[0;32m'
|
|
12
|
+
YELLOW='\033[1;33m'
|
|
13
|
+
NC='\033[0m' # No Color
|
|
14
|
+
|
|
15
|
+
# Check if already initialized
|
|
16
|
+
if [ -f "$DEVCONTAINER_DIR/compose.yaml" ]; then
|
|
17
|
+
echo -e "${YELLOW}This project has already been initialized.${NC}"
|
|
18
|
+
echo ""
|
|
19
|
+
# Try to extract configuration from compose.yaml
|
|
20
|
+
if grep -q "ports:" "$DEVCONTAINER_DIR/compose.yaml" 2>/dev/null; then
|
|
21
|
+
echo "Current configuration: Web application with ports"
|
|
22
|
+
grep -A10 "ports:" "$DEVCONTAINER_DIR/compose.yaml" | grep -E "^[ ]*-" | sed 's/.*"\([0-9]*\):.*/ - Port \1/'
|
|
23
|
+
else
|
|
24
|
+
echo "Current configuration: No ports configured"
|
|
25
|
+
fi
|
|
26
|
+
echo ""
|
|
27
|
+
read -p "Do you want to reinitialize? (y/N): " reinit
|
|
28
|
+
if [[ ! "$reinit" =~ ^[Yy]$ ]]; then
|
|
29
|
+
echo "Initialization cancelled."
|
|
30
|
+
exit 0
|
|
31
|
+
fi
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
echo -e "${GREEN}=== DevContainer Project Initialization ===${NC}"
|
|
35
|
+
echo ""
|
|
36
|
+
|
|
37
|
+
# Project type selection
|
|
38
|
+
echo "Select your project type:"
|
|
39
|
+
echo " 1) Web Application (with ports)"
|
|
40
|
+
echo " 2) CLI Tool (no ports)"
|
|
41
|
+
echo " 3) Library/Package (no ports)"
|
|
42
|
+
echo " 4) Custom (configure manually)"
|
|
43
|
+
echo ""
|
|
44
|
+
read -p "Enter your choice (1-4): " project_type
|
|
45
|
+
|
|
46
|
+
case $project_type in
|
|
47
|
+
1)
|
|
48
|
+
PROJECT_TYPE="web"
|
|
49
|
+
echo ""
|
|
50
|
+
echo "Enter the ports your application needs (space-separated)."
|
|
51
|
+
echo "Examples:"
|
|
52
|
+
echo " - Next.js/React: 3000"
|
|
53
|
+
echo " - API + Frontend: 3000 8080"
|
|
54
|
+
echo " - Full stack with DB: 3000 8080 5432"
|
|
55
|
+
echo ""
|
|
56
|
+
read -p "Ports: " -a PORTS
|
|
57
|
+
|
|
58
|
+
if [ ${#PORTS[@]} -eq 0 ]; then
|
|
59
|
+
echo -e "${RED}Error: Web applications require at least one port.${NC}"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
;;
|
|
63
|
+
2)
|
|
64
|
+
PROJECT_TYPE="cli"
|
|
65
|
+
PORTS=()
|
|
66
|
+
echo -e "${GREEN}CLI tool configuration selected (no ports).${NC}"
|
|
67
|
+
;;
|
|
68
|
+
3)
|
|
69
|
+
PROJECT_TYPE="library"
|
|
70
|
+
PORTS=()
|
|
71
|
+
echo -e "${GREEN}Library/Package configuration selected (no ports).${NC}"
|
|
72
|
+
;;
|
|
73
|
+
4)
|
|
74
|
+
PROJECT_TYPE="custom"
|
|
75
|
+
read -p "Do you need port forwarding? (y/N): " need_ports
|
|
76
|
+
if [[ "$need_ports" =~ ^[Yy]$ ]]; then
|
|
77
|
+
echo ""
|
|
78
|
+
read -p "Enter ports (space-separated): " -a PORTS
|
|
79
|
+
else
|
|
80
|
+
PORTS=()
|
|
81
|
+
fi
|
|
82
|
+
;;
|
|
83
|
+
*)
|
|
84
|
+
echo -e "${RED}Invalid choice. Exiting.${NC}"
|
|
85
|
+
exit 1
|
|
86
|
+
;;
|
|
87
|
+
esac
|
|
88
|
+
|
|
89
|
+
# Generate compose.yaml from template
|
|
90
|
+
echo ""
|
|
91
|
+
echo -e "${GREEN}Generating Docker Compose configuration...${NC}"
|
|
92
|
+
|
|
93
|
+
# Build ports section
|
|
94
|
+
if [ ${#PORTS[@]} -gt 0 ]; then
|
|
95
|
+
PORTS_SECTION="ports:"
|
|
96
|
+
for port in "${PORTS[@]}"; do
|
|
97
|
+
PORTS_SECTION="$PORTS_SECTION\n - \"${port}:${port}\""
|
|
98
|
+
done
|
|
99
|
+
# Replace placeholder with ports section
|
|
100
|
+
sed "s| {{PORTS_SECTION}}| ${PORTS_SECTION}|" "$DEVCONTAINER_DIR/compose.yaml.template" | sed 's/\\n/\n/g' > "$DEVCONTAINER_DIR/compose.yaml"
|
|
101
|
+
|
|
102
|
+
# Generate devcontainer.local.json
|
|
103
|
+
PORTS_JSON=$(printf '%s,' "${PORTS[@]}" | sed 's/,$//')
|
|
104
|
+
cat > "$DEVCONTAINER_DIR/devcontainer.local.json" <<EOF
|
|
105
|
+
{
|
|
106
|
+
"forwardPorts": [${PORTS_JSON}]
|
|
107
|
+
}
|
|
108
|
+
EOF
|
|
109
|
+
|
|
110
|
+
echo "✓ Port forwarding configured: ${PORTS[*]}"
|
|
111
|
+
else
|
|
112
|
+
# No ports needed - remove the placeholder line entirely
|
|
113
|
+
sed '/{{PORTS_SECTION}}/d' "$DEVCONTAINER_DIR/compose.yaml.template" > "$DEVCONTAINER_DIR/compose.yaml"
|
|
114
|
+
|
|
115
|
+
# Create empty port forwarding config
|
|
116
|
+
cat > "$DEVCONTAINER_DIR/devcontainer.local.json" <<EOF
|
|
117
|
+
{
|
|
118
|
+
"forwardPorts": []
|
|
119
|
+
}
|
|
120
|
+
EOF
|
|
121
|
+
|
|
122
|
+
echo -e "${GREEN}✓ No port forwarding configured${NC}"
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Add comment to compose.yaml about configuration
|
|
126
|
+
if [ -f "$DEVCONTAINER_DIR/compose.yaml" ]; then
|
|
127
|
+
# Prepend configuration info as comment
|
|
128
|
+
{
|
|
129
|
+
echo "# DevContainer configuration"
|
|
130
|
+
echo "# Generated: $(date -u +"%Y-%m-%d %H:%M:%S UTC")"
|
|
131
|
+
echo "# Project type: ${PROJECT_TYPE}"
|
|
132
|
+
if [ ${#PORTS[@]} -gt 0 ]; then
|
|
133
|
+
echo "# Ports: ${PORTS[*]}"
|
|
134
|
+
else
|
|
135
|
+
echo "# Ports: none"
|
|
136
|
+
fi
|
|
137
|
+
echo ""
|
|
138
|
+
cat "$DEVCONTAINER_DIR/compose.yaml"
|
|
139
|
+
} > "$DEVCONTAINER_DIR/compose.yaml.tmp"
|
|
140
|
+
mv "$DEVCONTAINER_DIR/compose.yaml.tmp" "$DEVCONTAINER_DIR/compose.yaml"
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
echo ""
|
|
144
|
+
echo -e "${GREEN}=== Initialization Complete ===${NC}"
|
|
145
|
+
echo ""
|
|
146
|
+
echo "Configuration summary:"
|
|
147
|
+
echo " Project Type: ${PROJECT_TYPE}"
|
|
148
|
+
if [ ${#PORTS[@]} -gt 0 ]; then
|
|
149
|
+
echo " Forwarded Ports: ${PORTS[*]}"
|
|
150
|
+
else
|
|
151
|
+
echo " Forwarded Ports: none"
|
|
152
|
+
fi
|
|
153
|
+
echo ""
|
|
154
|
+
echo -e "${GREEN}You can now open this project in VS Code with DevContainers.${NC}"
|
|
155
|
+
echo ""
|
|
156
|
+
echo "Next steps:"
|
|
157
|
+
echo " 1. The compose.yaml file has been generated (gitignored)"
|
|
158
|
+
echo " 2. Open in VS Code: code . (then Reopen in Container)"
|
|
159
|
+
echo " 3. Or use DevContainer CLI: devcontainer up --workspace-folder ."
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Get the directory where this script is located
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
|
|
6
|
+
# Source the common functions
|
|
7
|
+
source "$SCRIPT_DIR/devcontainer-common.sh"
|
|
8
|
+
|
|
9
|
+
# Rebuild and start devcontainer
|
|
10
|
+
up_devcontainer "--remove-existing-container"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Get the directory where this script is located
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
|
|
6
|
+
# Source the common functions
|
|
7
|
+
source "$SCRIPT_DIR/devcontainer-common.sh"
|
|
8
|
+
|
|
9
|
+
# Start devcontainer and connect to it
|
|
10
|
+
up_devcontainer ""
|
|
11
|
+
exec_devcontainer
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# DevContainer configuration
|
|
2
|
+
# Generated: 2026-01-10 04:57:22 UTC
|
|
3
|
+
# Project type: library
|
|
4
|
+
# Ports: none
|
|
5
|
+
|
|
6
|
+
services:
|
|
7
|
+
app:
|
|
8
|
+
image: mcr.microsoft.com/vscode/devcontainers/base:ubuntu-24.04
|
|
9
|
+
volumes:
|
|
10
|
+
- ../..:/workspaces
|
|
11
|
+
command: sleep infinity
|
|
12
|
+
network_mode: bridge
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Claude Code",
|
|
3
|
+
"dockerComposeFile": "compose.yaml",
|
|
4
|
+
"service": "app",
|
|
5
|
+
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
|
6
|
+
"features": {
|
|
7
|
+
"ghcr.io/anthropics/devcontainer-features/claude-code:latest": {},
|
|
8
|
+
"ghcr.io/roul/devcontainer-features/mise-python:1": {},
|
|
9
|
+
"ghcr.io/roul/devcontainer-features/mise-node:1": {},
|
|
10
|
+
"ghcr.io/roul/devcontainer-features/mise-ruby:1": {},
|
|
11
|
+
"ghcr.io/devcontainers/features/github-cli:1": {},
|
|
12
|
+
"ghcr.io/devcontainers-extra/features/tmux-apt-get:1": {},
|
|
13
|
+
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
|
14
|
+
"version": "latest",
|
|
15
|
+
"moby": true,
|
|
16
|
+
"dockerDashComposeVersion": "v2",
|
|
17
|
+
"installDockerBuildx": true
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"mounts": [
|
|
21
|
+
"type=bind,consistency=cached,source=${localEnv:HOME}/.gitconfig,target=/home/vscode/.gitconfig,readonly",
|
|
22
|
+
"type=bind,consistency=cached,source=${localEnv:HOME}/.config/gh,target=/home/vscode/.config/gh",
|
|
23
|
+
"type=bind,consistency=cached,source=${localEnv:HOME}/.claude,target=/home/vscode/.claude",
|
|
24
|
+
"type=bind,consistency=cached,source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh"
|
|
25
|
+
],
|
|
26
|
+
"forwardPorts": [],
|
|
27
|
+
// Ports are configured via devcontainer.local.json after running init script
|
|
28
|
+
"postCreateCommand": "/bin/bash .devcontainer/scripts/setup.sh",
|
|
29
|
+
"initializeCommand": "/bin/bash -c 'if [ ! -f .devcontainer/compose.yaml ]; then echo \"ERROR: Project not initialized. Run: .devcontainer/bin/init\"; exit 1; fi'"
|
|
30
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
curl -L https://github.com/douhashi/soba/releases/latest/download/soba_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/x86_64/; s/aarch64/arm64/').tar.gz | tar xz -C /tmp && mkdir -p ~/.local/bin &&mv /tmp/soba ~/.local/bin/
|
|
2
|
+
|
|
3
|
+
# Setup bash environment
|
|
4
|
+
cat >> ~/.bashrc << 'EOF'
|
|
5
|
+
|
|
6
|
+
# Custom settings for devcontainer
|
|
7
|
+
export LANG=en_US.UTF-8
|
|
8
|
+
export TERM=xterm-256color
|
|
9
|
+
alias vim='nvim'
|
|
10
|
+
alias claude='claude --dangerously-skip-permissions'
|
|
11
|
+
EOF
|
|
12
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Exit if no files provided
|
|
4
|
+
if [ $# -eq 0 ]; then
|
|
5
|
+
exit 0
|
|
6
|
+
fi
|
|
7
|
+
|
|
8
|
+
# Filter only Ruby files
|
|
9
|
+
ruby_files=()
|
|
10
|
+
for file in "$@"; do
|
|
11
|
+
if [[ "$file" == *.rb ]]; then
|
|
12
|
+
ruby_files+=("$file")
|
|
13
|
+
fi
|
|
14
|
+
done
|
|
15
|
+
|
|
16
|
+
# Exit if no Ruby files
|
|
17
|
+
if [ ${#ruby_files[@]} -eq 0 ]; then
|
|
18
|
+
exit 0
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Run RuboCop with auto-fix
|
|
22
|
+
bundle exec rubocop -a "${ruby_files[@]}"
|
|
23
|
+
rubocop_exit_code=$?
|
|
24
|
+
|
|
25
|
+
# Check if any staged files were modified by auto-fix
|
|
26
|
+
modified_files=()
|
|
27
|
+
for file in "${ruby_files[@]}"; do
|
|
28
|
+
if [ -f "$file" ] && ! git diff --quiet "$file" 2>/dev/null; then
|
|
29
|
+
modified_files+=("$file")
|
|
30
|
+
fi
|
|
31
|
+
done
|
|
32
|
+
|
|
33
|
+
# If files were modified by auto-fix, show message and fail
|
|
34
|
+
if [ ${#modified_files[@]} -gt 0 ]; then
|
|
35
|
+
echo ""
|
|
36
|
+
echo "=============================================="
|
|
37
|
+
echo " RuboCop has auto-fixed the following files:"
|
|
38
|
+
echo "=============================================="
|
|
39
|
+
for file in "${modified_files[@]}"; do
|
|
40
|
+
echo " - $file"
|
|
41
|
+
done
|
|
42
|
+
echo ""
|
|
43
|
+
echo "Please review the changes, then re-stage and commit:"
|
|
44
|
+
echo " git add ${modified_files[*]}"
|
|
45
|
+
echo " git commit"
|
|
46
|
+
echo "=============================================="
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# Return RuboCop's exit code
|
|
51
|
+
exit $rubocop_exit_code
|
data/.soba/config.yml
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# GitHub settings
|
|
2
|
+
github:
|
|
3
|
+
# Authentication method: 'gh', 'env', or omit for auto-detect
|
|
4
|
+
# Use 'gh' to use GitHub CLI authentication (gh auth token)
|
|
5
|
+
# Use 'env' to use environment variable
|
|
6
|
+
auth_method: gh # or 'env', or omit for auto-detect
|
|
7
|
+
|
|
8
|
+
# Personal Access Token (required when auth_method is 'env' or omitted)
|
|
9
|
+
# Can use environment variable
|
|
10
|
+
# token: ${GITHUB_TOKEN}
|
|
11
|
+
|
|
12
|
+
# Target repository (format: owner/repo)
|
|
13
|
+
repository: douhashi/kie-ruby
|
|
14
|
+
|
|
15
|
+
# Workflow settings
|
|
16
|
+
workflow:
|
|
17
|
+
# Issue polling interval in seconds (default: 20)
|
|
18
|
+
interval: 20
|
|
19
|
+
# Use tmux for Claude execution (default: true)
|
|
20
|
+
use_tmux: true
|
|
21
|
+
# Enable automatic PR merging (default: true)
|
|
22
|
+
auto_merge_enabled: true
|
|
23
|
+
# Clean up tmux windows for closed issues (default: true)
|
|
24
|
+
closed_issue_cleanup_enabled: true
|
|
25
|
+
# Cleanup interval in seconds (default: 300)
|
|
26
|
+
closed_issue_cleanup_interval: 300
|
|
27
|
+
# Command delay for tmux panes in seconds (default: 3)
|
|
28
|
+
tmux_command_delay: 3
|
|
29
|
+
|
|
30
|
+
# Slack notifications
|
|
31
|
+
slack:
|
|
32
|
+
# Webhook URL for Slack notifications
|
|
33
|
+
# Get your webhook URL from: https://api.slack.com/messaging/webhooks
|
|
34
|
+
webhook_url: ${SLACK_WEBHOOK_URL}
|
|
35
|
+
# Enable notifications for phase starts (default: false)
|
|
36
|
+
notifications_enabled: false
|
|
37
|
+
|
|
38
|
+
# Git settings
|
|
39
|
+
git:
|
|
40
|
+
# Base path for git worktrees (default: /tmp/soba/worktrees)
|
|
41
|
+
worktree_base_path: /tmp/soba/worktrees
|
|
42
|
+
# Base branch for rebase operations and worktree creation (default: main)
|
|
43
|
+
base_branch: main
|
|
44
|
+
|
|
45
|
+
# Logging settings
|
|
46
|
+
log:
|
|
47
|
+
# Log file output path (default: .soba/logs/soba-{pid}.log)
|
|
48
|
+
# ${PID} will be replaced with actual process ID at runtime
|
|
49
|
+
output_path: .soba/logs/soba-${PID}.log
|
|
50
|
+
# Number of log files to retain (default: 10)
|
|
51
|
+
retention_count: 10
|
|
52
|
+
# Log level: debug, info, warn, error (default: info)
|
|
53
|
+
level: info
|
|
54
|
+
# Log format: "text" or "json" (default: text)
|
|
55
|
+
format: text
|
|
56
|
+
|
|
57
|
+
# Phase commands (optional - for custom Claude commands)
|
|
58
|
+
phase:
|
|
59
|
+
plan:
|
|
60
|
+
command: claude
|
|
61
|
+
options:
|
|
62
|
+
- --dangerously-skip-permissions
|
|
63
|
+
parameter: '/soba:plan {{issue-number}}'
|
|
64
|
+
implement:
|
|
65
|
+
command: claude
|
|
66
|
+
options:
|
|
67
|
+
- --dangerously-skip-permissions
|
|
68
|
+
parameter: '/soba:implement {{issue-number}}'
|
|
69
|
+
review:
|
|
70
|
+
command: claude
|
|
71
|
+
options:
|
|
72
|
+
- --dangerously-skip-permissions
|
|
73
|
+
parameter: '/soba:review {{issue-number}}'
|
|
74
|
+
revise:
|
|
75
|
+
command: claude
|
|
76
|
+
options:
|
|
77
|
+
- --dangerously-skip-permissions
|
|
78
|
+
parameter: '/soba:revise {{issue-number}}'
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0] - 2025-01-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Initial release of kie-ruby client library
|
|
13
|
+
- Support for General API models
|
|
14
|
+
- `nano-banana-pro` for image generation
|
|
15
|
+
- Support for Suno API models
|
|
16
|
+
- `V4`, `V4_5`, `V4_5PLUS`, `V4_5ALL`, `V5` for music generation
|
|
17
|
+
- Unified `Kie::Client` interface for all models
|
|
18
|
+
- Automatic polling with `task.wait(timeout:, interval:)`
|
|
19
|
+
- Structured exception classes for error handling
|
|
20
|
+
- `AuthenticationError`, `InsufficientCreditsError`, `RateLimitError`
|
|
21
|
+
- `ContentPolicyError`, `TaskFailedError`, `TimeoutError`
|
|
22
|
+
- Model registry for extensible model definitions
|
|
23
|
+
- Input validation for Suno models (prompt, style, title length)
|
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Guideline
|
|
2
|
+
|
|
3
|
+
## Top-Level Rules
|
|
4
|
+
|
|
5
|
+
- Run independent processes concurrently, not sequentially.
|
|
6
|
+
- Think only in English; respond only in Japanese.
|
|
7
|
+
- Use **Contex7 MCP** to check library usage.
|
|
8
|
+
- Save temp design notes as `./.tmp/` in Markdown.
|
|
9
|
+
- After **Write/Edit**, always verify with **Read**, even if system says "(no content)".
|
|
10
|
+
- Be critical, not obedient—but stay respectful.
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
- Document System: @docs/document_system.md
|
|
15
|
+
|
|
16
|
+
## Documents
|
|
17
|
+
|
|
18
|
+
- Business: @docs/business/INDEX.md
|
|
19
|
+
- Development: @docs/development/INDEX.md
|
|
20
|
+
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Sho DOUHASHI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|