cc-codeconductor 0.4.3 → 0.5.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.
- package/README.md +1 -1
- package/dist/index.js +2642 -226
- package/package.json +1 -1
- package/presets/agy/skills/evaluation/SKILL.md +6 -0
- package/presets/agy/skills/openspec/SKILL.md +32 -0
- package/presets/agy/workflows/cc-openspec.md +62 -0
- package/presets/agy/workflows/cc-scorecard.md +17 -0
- package/presets/claude/commands/cc/openspec.md +144 -0
- package/presets/claude/commands/cc/review.md +13 -2
- package/presets/claude/commands/cc/scorecard.md +65 -0
- package/presets/claude/skills/evaluation/SKILL.md +42 -0
- package/presets/claude/skills/openspec/SKILL.md +54 -0
- package/presets/codex/AGENTS.md +57 -0
- package/presets/cursor/.cursorignore +15 -0
- package/presets/cursor/AGENTS.md +504 -0
- package/presets/cursor/agents/architect.md +211 -0
- package/presets/cursor/agents/complexity-auditor.md +76 -0
- package/presets/cursor/agents/contract-builder.md +75 -0
- package/presets/cursor/agents/docs.md +180 -0
- package/presets/cursor/agents/goal-planner.md +71 -0
- package/presets/cursor/agents/implementer.md +161 -0
- package/presets/cursor/agents/orchestrator.md +377 -0
- package/presets/cursor/agents/repo-explorer.md +100 -0
- package/presets/cursor/agents/reviewer.md +237 -0
- package/presets/cursor/agents/security-reviewer.md +113 -0
- package/presets/cursor/agents/task-coach.md +145 -0
- package/presets/cursor/agents/tester.md +241 -0
- package/presets/cursor/commands/cc/api-contract.md +58 -0
- package/presets/cursor/commands/cc/db-migration.md +58 -0
- package/presets/cursor/commands/cc/feature.md +115 -0
- package/presets/cursor/commands/cc/fix.md +121 -0
- package/presets/cursor/commands/cc/openspec.md +144 -0
- package/presets/cursor/commands/cc/pagespeed.md +103 -0
- package/presets/cursor/commands/cc/refactor.md +148 -0
- package/presets/cursor/commands/cc/review.md +137 -0
- package/presets/cursor/commands/cc/scorecard.md +65 -0
- package/presets/cursor/commands/cc/tdd-cycle.md +226 -0
- package/presets/cursor/commands/cc/test-plan.md +138 -0
- package/presets/cursor/rules/behavioral-discipline.mdc +14 -0
- package/presets/cursor/rules/context-budget.mdc +12 -0
- package/presets/cursor/rules/orchestration.mdc +12 -0
- package/presets/cursor/rules/yagni-stdlib.mdc +11 -0
- package/presets/cursor/skills/android/SKILL.md +122 -0
- package/presets/cursor/skills/api-versioning/SKILL.md +394 -0
- package/presets/cursor/skills/astro/SKILL.md +322 -0
- package/presets/cursor/skills/auth-token-inspector/SKILL.md +33 -0
- package/presets/cursor/skills/code-review/SKILL.md +208 -0
- package/presets/cursor/skills/conductor-setup/SKILL.md +127 -0
- package/presets/cursor/skills/django-orm/SKILL.md +463 -0
- package/presets/cursor/skills/django-testing/SKILL.md +417 -0
- package/presets/cursor/skills/django-uv/SKILL.md +409 -0
- package/presets/cursor/skills/drizzle-schema-architect/SKILL.md +54 -0
- package/presets/cursor/skills/evaluation/SKILL.md +8 -0
- package/presets/cursor/skills/fastapi-pydantic-strict/SKILL.md +46 -0
- package/presets/cursor/skills/find-skills/SKILL.md +144 -0
- package/presets/cursor/skills/jpa-nplusone-detector/SKILL.md +49 -0
- package/presets/cursor/skills/jpa-postgres/SKILL.md +626 -0
- package/presets/cursor/skills/laravel-specialist/SKILL.md +267 -0
- package/presets/cursor/skills/laravel-specialist/references/eloquent.md +351 -0
- package/presets/cursor/skills/laravel-specialist/references/livewire.md +512 -0
- package/presets/cursor/skills/laravel-specialist/references/queues.md +423 -0
- package/presets/cursor/skills/laravel-specialist/references/routing.md +362 -0
- package/presets/cursor/skills/laravel-specialist/references/testing.md +522 -0
- package/presets/cursor/skills/livewire-alpine-bridge/SKILL.md +39 -0
- package/presets/cursor/skills/multi-agent-orchestration/README.md +144 -0
- package/presets/cursor/skills/multi-agent-orchestration/SKILL.md +579 -0
- package/presets/cursor/skills/multi-agent-orchestration/examples/framework_implementations.py +362 -0
- package/presets/cursor/skills/multi-agent-orchestration/examples/orchestration_patterns.py +411 -0
- package/presets/cursor/skills/multi-agent-orchestration/scripts/agent_communication.py +334 -0
- package/presets/cursor/skills/multi-agent-orchestration/scripts/benchmarking.py +341 -0
- package/presets/cursor/skills/multi-agent-orchestration/scripts/workflow_management.py +334 -0
- package/presets/cursor/skills/nextjs-typescript/SKILL.md +394 -0
- package/presets/cursor/skills/openspec/SKILL.md +52 -0
- package/presets/cursor/skills/pagespeed-insights/SKILL.md +445 -0
- package/presets/cursor/skills/pagespeed-insights/reference.md +50 -0
- package/presets/cursor/skills/pagespeed-perf/SKILL.md +281 -0
- package/presets/cursor/skills/php-pro/SKILL.md +210 -0
- package/presets/cursor/skills/php-pro/references/async-patterns.md +412 -0
- package/presets/cursor/skills/php-pro/references/laravel-patterns.md +377 -0
- package/presets/cursor/skills/php-pro/references/modern-php-features.md +323 -0
- package/presets/cursor/skills/php-pro/references/symfony-patterns.md +466 -0
- package/presets/cursor/skills/php-pro/references/testing-quality.md +466 -0
- package/presets/cursor/skills/python/SKILL.md +613 -0
- package/presets/cursor/skills/python-django-stack/SKILL.md +500 -0
- package/presets/cursor/skills/python-fastapi-stack/SKILL.md +464 -0
- package/presets/cursor/skills/security/SKILL.md +384 -0
- package/presets/cursor/skills/seo-analytics-injector/SKILL.md +44 -0
- package/presets/cursor/skills/spring-auth-auditor/SKILL.md +33 -0
- package/presets/cursor/skills/spring-boot-feature/SKILL.md +566 -0
- package/presets/cursor/skills/spring-boot-kotlin/SKILL.md +408 -0
- package/presets/cursor/skills/spring-boot-testing-strategy/SKILL.md +479 -0
- package/presets/cursor/skills/sqlalchemy/SKILL.md +473 -0
- package/presets/cursor/skills/tailwind-responsive-auditor/SKILL.md +32 -0
- package/presets/cursor/skills/tdd-mutation-tester/SKILL.md +28 -0
- package/presets/cursor/skills/testing-tdd/SKILL.md +592 -0
- package/presets/cursor/skills/workflow-orchestration-patterns/SKILL.md +98 -0
- package/presets/cursor/skills/workflow-orchestration-patterns/references/details.md +223 -0
- package/presets/opencode/agents/architect.md +1 -2
- package/presets/opencode/agents/complexity-auditor.md +1 -0
- package/presets/opencode/agents/contract-builder.md +93 -0
- package/presets/opencode/agents/docs.md +1 -2
- package/presets/opencode/agents/goal-planner.md +82 -0
- package/presets/opencode/agents/implementer.md +9 -2
- package/presets/opencode/agents/orchestrator.md +50 -12
- package/presets/opencode/agents/repo-explorer.md +0 -1
- package/presets/opencode/agents/reviewer.md +23 -2
- package/presets/opencode/agents/security-reviewer.md +129 -0
- package/presets/opencode/agents/task-coach.md +1 -2
- package/presets/opencode/agents/tester.md +1 -2
- package/presets/opencode/commands/cc-openspec.md +61 -0
- package/presets/opencode/commands/cc-scorecard.md +16 -0
- package/presets/opencode/prompts/v0.5.0/architect.md +222 -0
- package/presets/opencode/prompts/v0.5.0/complexity-auditor.md +91 -0
- package/presets/opencode/prompts/v0.5.0/contract-builder.md +84 -0
- package/presets/opencode/prompts/v0.5.0/docs.md +190 -0
- package/presets/opencode/prompts/v0.5.0/goal-planner.md +80 -0
- package/presets/opencode/prompts/v0.5.0/implementer.md +171 -0
- package/presets/opencode/prompts/v0.5.0/orchestrator.md +388 -0
- package/presets/opencode/prompts/v0.5.0/repo-explorer.md +111 -0
- package/presets/opencode/prompts/v0.5.0/reviewer.md +248 -0
- package/presets/opencode/prompts/v0.5.0/security-reviewer.md +123 -0
- package/presets/opencode/prompts/v0.5.0/task-coach.md +156 -0
- package/presets/opencode/prompts/v0.5.0/tester.md +252 -0
- package/presets/opencode/skills/evaluation/SKILL.md +6 -0
- package/presets/opencode/skills/openspec/SKILL.md +50 -0
- package/presets/templates/BACKLOG.md +33 -0
- package/presets/templates/execution-profile.yml +6 -0
- package/presets/templates/model-comparison.md +11 -0
- package/presets/templates/regression-checklist.yml +10 -0
- package/src/presets/manifests/agy.yml +2 -2
- package/src/presets/manifests/claude.yml +2 -2
- package/src/presets/manifests/codex.yml +2 -2
- package/src/presets/manifests/cursor.yml +19 -3
- package/src/presets/manifests/gemini.yml +2 -2
- package/src/presets/manifests/opencode.yml +2 -2
- package/src/presets/models/agy.yml +21 -0
- package/src/presets/models/claude.yml +18 -0
- package/src/presets/models/codex.yml +18 -0
- package/src/presets/models/cursor.yml +39 -9
- package/src/presets/models/gemini.yml +18 -0
- package/src/presets/models/opencode.yml +18 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: auth-token-inspector
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
name: Auth Token Inspector
|
|
5
|
+
description: >
|
|
6
|
+
Audits token storage mechanisms to prevent XSS-based JWT theft.
|
|
7
|
+
user-invokable: true
|
|
8
|
+
license: MIT
|
|
9
|
+
metadata:
|
|
10
|
+
author: lgzarturo
|
|
11
|
+
category: security
|
|
12
|
+
compatibility:
|
|
13
|
+
tools: [claude, codex, gemini, agy, opencode]
|
|
14
|
+
stacks:
|
|
15
|
+
languages: [typescript, javascript, python, kotlin, java, php]
|
|
16
|
+
paths:
|
|
17
|
+
- "**/*.{ts,tsx,py,kt,php}"
|
|
18
|
+
---
|
|
19
|
+
# Auth Token Inspector
|
|
20
|
+
|
|
21
|
+
## Core Principles
|
|
22
|
+
|
|
23
|
+
1. **Secure Storage**: JWTs or session tokens must NOT be stored in `localStorage` or `sessionStorage` due to vulnerability to Cross-Site Scripting (XSS).
|
|
24
|
+
2. **HttpOnly Cookies**: Deliver tokens via `HttpOnly`, `Secure`, and `SameSite=Strict` (or `Lax`) cookies to protect them from client-side JS access.
|
|
25
|
+
3. **Short Expiration**: Ensure access tokens have short expiration times, and implement secure, rotation-enabled refresh tokens stored in cookies.
|
|
26
|
+
|
|
27
|
+
## Storage Comparison
|
|
28
|
+
|
|
29
|
+
| Storage Mode | Vulnerable to XSS | Vulnerable to CSRF | Recommended |
|
|
30
|
+
| :--- | :--- | :--- | :--- |
|
|
31
|
+
| **localStorage** | Yes (High Risk) | No | **NO** |
|
|
32
|
+
| **sessionStorage** | Yes (High Risk) | No | **NO** |
|
|
33
|
+
| **HttpOnly Cookie** | No (Secure) | Yes (Mitigated via SameSite/Tokens) | **YES** |
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: code-review
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
name: Code Review
|
|
5
|
+
description: >
|
|
6
|
+
Provides a structured framework for conducting thorough code reviews covering correctness, security, architecture alignment, performance, and technical debt.
|
|
7
|
+
|
|
8
|
+
user-invokable: true
|
|
9
|
+
license: MIT
|
|
10
|
+
metadata:
|
|
11
|
+
author: lgzarturo
|
|
12
|
+
category: review
|
|
13
|
+
|
|
14
|
+
compatibility:
|
|
15
|
+
tools: [claude, codex, gemini, agy, opencode]
|
|
16
|
+
stacks:
|
|
17
|
+
languages: []
|
|
18
|
+
frameworks: []
|
|
19
|
+
|
|
20
|
+
risk:
|
|
21
|
+
level: low
|
|
22
|
+
can_execute_shell: false
|
|
23
|
+
can_modify_files: true
|
|
24
|
+
requires_network: false
|
|
25
|
+
|
|
26
|
+
inputs: []
|
|
27
|
+
|
|
28
|
+
outputs: []
|
|
29
|
+
|
|
30
|
+
quality:
|
|
31
|
+
reviewed_by: codeconductor-core
|
|
32
|
+
version: 0.1.0
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Code Review
|
|
38
|
+
|
|
39
|
+
## Review Axes
|
|
40
|
+
|
|
41
|
+
Every finding must reference exactly one axis. This prevents vague feedback and
|
|
42
|
+
makes it actionable.
|
|
43
|
+
|
|
44
|
+
| Axis | What to check |
|
|
45
|
+
|------|--------------|
|
|
46
|
+
| **Correctness** | Does the logic handle all cases in the acceptance criteria? |
|
|
47
|
+
| **Security** | Injection vectors, secret exposure, auth bypasses, insecure defaults |
|
|
48
|
+
| **Architecture** | Does the code follow existing patterns and module boundaries? |
|
|
49
|
+
| **Performance** | N+1 queries, unnecessary allocations, blocking I/O in hot paths |
|
|
50
|
+
| **Error handling** | Are failure cases handled explicitly and safely? |
|
|
51
|
+
| **Test coverage** | Do tests verify the acceptance criteria, not just happy paths? |
|
|
52
|
+
| **Scope** | Are there changes outside the stated task boundary? |
|
|
53
|
+
| **Technical debt** | Does the implementation introduce debt without acknowledging it? |
|
|
54
|
+
|
|
55
|
+
## Finding Categories
|
|
56
|
+
|
|
57
|
+
### CRITICAL — must be resolved before merge
|
|
58
|
+
|
|
59
|
+
- Logic failures that violate acceptance criteria
|
|
60
|
+
- Security vulnerabilities (injection, auth bypass, secret exposure)
|
|
61
|
+
- Data loss or corruption risk
|
|
62
|
+
- Breaking changes to public API or shared contracts
|
|
63
|
+
- Missing error handling that causes silent failures
|
|
64
|
+
|
|
65
|
+
### WARNING — should be resolved before merge
|
|
66
|
+
|
|
67
|
+
- Missing edge case coverage in tests
|
|
68
|
+
- Scope creep (changes outside the task boundary)
|
|
69
|
+
- Pattern inconsistency that will confuse future maintainers
|
|
70
|
+
- Performance issue that will degrade under load
|
|
71
|
+
- Missing input validation at system boundaries
|
|
72
|
+
|
|
73
|
+
### SUGGESTION — optional improvement
|
|
74
|
+
|
|
75
|
+
- Naming clarity improvements
|
|
76
|
+
- Extracting a reusable abstraction
|
|
77
|
+
- Test readability
|
|
78
|
+
- Documentation gaps on non-obvious behavior
|
|
79
|
+
|
|
80
|
+
## Review Report Format
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
## Review Report
|
|
84
|
+
|
|
85
|
+
**Task**: [objective from task card]
|
|
86
|
+
**Verdict**: [approved | approved with warnings | blocked]
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### CRITICAL
|
|
91
|
+
|
|
92
|
+
- [ ] [C1] `path/to/file:line` — [description]
|
|
93
|
+
Axis: [axis] | Evidence: `[quoted code]` | Required action: [what must change]
|
|
94
|
+
|
|
95
|
+
_(none)_ if no critical findings
|
|
96
|
+
|
|
97
|
+
### WARNING
|
|
98
|
+
|
|
99
|
+
- [ ] [W1] `path/to/file:line` — [description]
|
|
100
|
+
Axis: [axis] | Recommended action: [what should change]
|
|
101
|
+
|
|
102
|
+
_(none)_ if no warning findings
|
|
103
|
+
|
|
104
|
+
### SUGGESTION
|
|
105
|
+
|
|
106
|
+
- [ ] [S1] — [description] | Rationale: [brief reason]
|
|
107
|
+
|
|
108
|
+
_(none)_ if no suggestions
|
|
109
|
+
|
|
110
|
+
### Summary
|
|
111
|
+
|
|
112
|
+
- Critical: [count] | Warning: [count] | Suggestion: [count]
|
|
113
|
+
- **Verdict justification**: [one sentence]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Verdict rules:**
|
|
117
|
+
|
|
118
|
+
- `blocked` — any CRITICAL finding present
|
|
119
|
+
- `approved with warnings` — no CRITICAL, at least one WARNING
|
|
120
|
+
- `approved` — no CRITICAL, no WARNING
|
|
121
|
+
|
|
122
|
+
## What to Check — by Axis
|
|
123
|
+
|
|
124
|
+
### Correctness
|
|
125
|
+
|
|
126
|
+
- Does every acceptance criterion have a corresponding code path?
|
|
127
|
+
- Are null/empty/zero values handled explicitly?
|
|
128
|
+
- Are boundary conditions checked (off-by-one, empty collections, max values)?
|
|
129
|
+
- Do conditional branches cover all cases (exhaustive when/switch)?
|
|
130
|
+
|
|
131
|
+
### Security
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
Injection: SQL, command, LDAP, XML — is input sanitized or parameterized?
|
|
135
|
+
Auth: is the endpoint protected? are role checks correct?
|
|
136
|
+
Secrets: no hardcoded credentials, tokens, or keys in source
|
|
137
|
+
Headers: are security headers set (CSP, HSTS, X-Frame-Options)?
|
|
138
|
+
CORS: is the origin whitelist explicit, not wildcard?
|
|
139
|
+
Dependencies: are new dependencies from trusted sources?
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Performance
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
N+1 queries: does a loop call the database per iteration?
|
|
146
|
+
Eager loading: are JOINs or includes used where needed?
|
|
147
|
+
Pagination: are all list endpoints paginated?
|
|
148
|
+
Caching: is expensive computation cached at an appropriate layer?
|
|
149
|
+
Index: do new query filters have corresponding DB indexes?
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Error Handling
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
Are exceptions caught at the right layer (not swallowed silently)?
|
|
156
|
+
Is the error response format consistent with the rest of the API?
|
|
157
|
+
Is the original exception logged before translating to a user-facing error?
|
|
158
|
+
Are transient failures retried with backoff, or propagated immediately?
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## What NOT to Flag
|
|
162
|
+
|
|
163
|
+
**Personal style preferences.** If the code follows the project's established
|
|
164
|
+
conventions, do not flag it because you would have written it differently.
|
|
165
|
+
|
|
166
|
+
**Trivial naming.** Variable names are a SUGGESTION at most, never a WARNING.
|
|
167
|
+
Do not block a PR over naming unless the name is genuinely misleading.
|
|
168
|
+
|
|
169
|
+
**Tests for trivial code.** Do not demand tests for getters, setters, or data
|
|
170
|
+
class construction. Test behavior, not boilerplate.
|
|
171
|
+
|
|
172
|
+
**Refactors not in scope.** If you notice an improvement opportunity outside
|
|
173
|
+
the task boundary, log it as a SUGGESTION. Do not block the PR for work that
|
|
174
|
+
was not requested.
|
|
175
|
+
|
|
176
|
+
**Framework defaults.** Do not second-guess framework conventions (Spring
|
|
177
|
+
dependency injection, Next.js file-based routing). Trust the framework.
|
|
178
|
+
|
|
179
|
+
## Exact Diff Recommendations
|
|
180
|
+
|
|
181
|
+
When a finding requires a code change, provide the exact replacement:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
# Current code (path/to/file:42)
|
|
185
|
+
val user = userRepository.findById(id)
|
|
186
|
+
return user.name // NPE if not found
|
|
187
|
+
|
|
188
|
+
# Recommended fix
|
|
189
|
+
val user = userRepository.findById(id)
|
|
190
|
+
?: throw NotFoundException("User $id not found")
|
|
191
|
+
return user.name
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Vague instructions ("handle the null case") force the author to guess your
|
|
195
|
+
intent. Exact diffs remove ambiguity and speed up the review cycle.
|
|
196
|
+
|
|
197
|
+
## Prioritization Order
|
|
198
|
+
|
|
199
|
+
When multiple findings exist, address them in this order:
|
|
200
|
+
|
|
201
|
+
1. Security — security issues can silently compromise users or data
|
|
202
|
+
2. Correctness — broken behavior defeats the purpose of the change
|
|
203
|
+
3. Error handling — silent failures are hard to debug in production
|
|
204
|
+
4. Test coverage — gaps mean regressions will be invisible
|
|
205
|
+
5. Performance — degrade gradually; fix before it causes incidents
|
|
206
|
+
6. Architecture — inconsistency compounds over time
|
|
207
|
+
7. Technical debt — acknowledge and track; do not always block for it
|
|
208
|
+
8. Suggestions — apply at author's discretion
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: conductor-setup
|
|
3
|
+
description: Configure a Rails project to work with Conductor (parallel coding agents)
|
|
4
|
+
allowed-tools: Bash(chmod *), Bash(bundle *), Bash(npm *), Bash(script/server)
|
|
5
|
+
context: fork
|
|
6
|
+
risk: unknown
|
|
7
|
+
source: community
|
|
8
|
+
metadata:
|
|
9
|
+
author: Shpigford
|
|
10
|
+
version: "1.0"
|
|
11
|
+
|
|
12
|
+
disable-model-invocation: true
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Set up this Rails project for Conductor, the Mac app for parallel coding agents.
|
|
16
|
+
|
|
17
|
+
## When to Use
|
|
18
|
+
- You need to configure a Rails project so it runs correctly inside Conductor workspaces.
|
|
19
|
+
- The project should support parallel coding agents with isolated ports, Redis settings, and shared secrets.
|
|
20
|
+
- You want the standard `conductor.json`, `bin/conductor-setup`, and `script/server` scaffolding for a Rails repo.
|
|
21
|
+
|
|
22
|
+
# What to Create
|
|
23
|
+
|
|
24
|
+
## 1. conductor.json (project root)
|
|
25
|
+
|
|
26
|
+
Create `conductor.json` in the project root if it doesn't already exist:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"scripts": {
|
|
31
|
+
"setup": "bin/conductor-setup",
|
|
32
|
+
"run": "script/server"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 2. bin/conductor-setup (executable)
|
|
38
|
+
|
|
39
|
+
Create `bin/conductor-setup` if it doesn't already exist:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
#!/bin/bash
|
|
43
|
+
set -e
|
|
44
|
+
|
|
45
|
+
# Symlink .env from repo root (where secrets live, outside worktrees)
|
|
46
|
+
[ -f "$CONDUCTOR_ROOT_PATH/.env" ] && ln -sf "$CONDUCTOR_ROOT_PATH/.env" .env
|
|
47
|
+
|
|
48
|
+
# Symlink Rails master key
|
|
49
|
+
[ -f "$CONDUCTOR_ROOT_PATH/config/master.key" ] && ln -sf "$CONDUCTOR_ROOT_PATH/config/master.key" config/master.key
|
|
50
|
+
|
|
51
|
+
# Install dependencies
|
|
52
|
+
bundle install
|
|
53
|
+
npm install
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Make it executable with `chmod +x bin/conductor-setup`.
|
|
57
|
+
|
|
58
|
+
## 3. script/server (executable)
|
|
59
|
+
|
|
60
|
+
Create the `script` directory if needed, then create `script/server` if it doesn't already exist:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
#!/bin/bash
|
|
64
|
+
|
|
65
|
+
# === Port Configuration ===
|
|
66
|
+
export PORT=${CONDUCTOR_PORT:-3000}
|
|
67
|
+
export VITE_RUBY_PORT=$((PORT + 1000))
|
|
68
|
+
|
|
69
|
+
# === Redis Isolation ===
|
|
70
|
+
if [ -n "$CONDUCTOR_WORKSPACE_NAME" ]; then
|
|
71
|
+
HASH=$(printf '%s' "$CONDUCTOR_WORKSPACE_NAME" | cksum | cut -d' ' -f1)
|
|
72
|
+
REDIS_DB=$((HASH % 16))
|
|
73
|
+
export REDIS_URL="redis://localhost:6379/${REDIS_DB}"
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
exec bin/dev
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Make it executable with `chmod +x script/server`.
|
|
80
|
+
|
|
81
|
+
## 4. Update Rails Config Files
|
|
82
|
+
|
|
83
|
+
For each of the following files, if they exist and contain Redis configuration, update them to use `ENV.fetch('REDIS_URL', ...)` or `ENV['REDIS_URL']` with a fallback:
|
|
84
|
+
|
|
85
|
+
### config/initializers/sidekiq.rb
|
|
86
|
+
If this file exists and configures Redis, update it to use:
|
|
87
|
+
```ruby
|
|
88
|
+
redis_url = ENV.fetch('REDIS_URL', 'redis://localhost:6379/0')
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### config/cable.yml
|
|
92
|
+
If this file exists, update the development adapter to use:
|
|
93
|
+
```yaml
|
|
94
|
+
development:
|
|
95
|
+
adapter: redis
|
|
96
|
+
url: <%= ENV.fetch('REDIS_URL', 'redis://localhost:6379/1') %>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### config/environments/development.rb
|
|
100
|
+
If this file configures Redis for caching, update to use:
|
|
101
|
+
```ruby
|
|
102
|
+
config.cache_store = :redis_cache_store, { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') }
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### config/initializers/rack_attack.rb
|
|
106
|
+
If this file exists and configures a Redis cache store, update to use:
|
|
107
|
+
```ruby
|
|
108
|
+
Rack::Attack.cache.store = ActiveSupport::Cache::RedisCacheStore.new(url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0'))
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
# Implementation Notes
|
|
112
|
+
|
|
113
|
+
- **Don't overwrite existing files**: Check if conductor.json, bin/conductor-setup, and script/server exist before creating them. If they exist, skip creation and inform the user.
|
|
114
|
+
- **Rails config updates**: Only modify Redis-related configuration. If a file doesn't exist or doesn't use Redis, skip it gracefully.
|
|
115
|
+
- **Create directories as needed**: Create `script/` directory if it doesn't exist.
|
|
116
|
+
|
|
117
|
+
# Verification
|
|
118
|
+
|
|
119
|
+
After creating the files:
|
|
120
|
+
1. Confirm all Conductor files exist and scripts are executable
|
|
121
|
+
2. Run `script/server` to verify it starts without errors
|
|
122
|
+
3. Check that Rails configs properly reference `ENV['REDIS_URL']` or `ENV.fetch('REDIS_URL', ...)`
|
|
123
|
+
|
|
124
|
+
## Limitations
|
|
125
|
+
- Use this skill only when the task clearly matches the scope described above.
|
|
126
|
+
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
|
|
127
|
+
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
|