@lifeaitools/rdc-skills 0.8.7

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.
Files changed (97) hide show
  1. package/.claude/settings.json +15 -0
  2. package/.claude-plugin/marketplace.json +21 -0
  3. package/.claude-plugin/plugin.json +11 -0
  4. package/.github/workflows/publish.yml +25 -0
  5. package/.github/workflows/self-test.yml +53 -0
  6. package/CHANGELOG.md +246 -0
  7. package/LICENSE +21 -0
  8. package/MANIFEST.md +190 -0
  9. package/README.md +188 -0
  10. package/README.sandbox.md +3 -0
  11. package/assets/watcher/viewer.html +164 -0
  12. package/commands/build.md +183 -0
  13. package/commands/collab.md +180 -0
  14. package/commands/deploy.md +138 -0
  15. package/commands/fixit.md +112 -0
  16. package/commands/handoff.md +173 -0
  17. package/commands/help.md +88 -0
  18. package/commands/overnight.md +220 -0
  19. package/commands/plan.md +158 -0
  20. package/commands/preplan.md +131 -0
  21. package/commands/prototype.md +145 -0
  22. package/commands/release.md +159 -0
  23. package/commands/report.md +99 -0
  24. package/commands/review.md +120 -0
  25. package/commands/self-test.md +107 -0
  26. package/commands/status.md +86 -0
  27. package/commands/watch.md +92 -0
  28. package/commands/workitems.md +132 -0
  29. package/guides/.gitkeep +0 -0
  30. package/guides/agent-bootstrap.md +191 -0
  31. package/guides/agents/backend.md +104 -0
  32. package/guides/agents/content.md +94 -0
  33. package/guides/agents/cs2.md +56 -0
  34. package/guides/agents/data.md +87 -0
  35. package/guides/agents/design.md +77 -0
  36. package/guides/agents/frontend.md +92 -0
  37. package/guides/agents/infrastructure.md +81 -0
  38. package/guides/agents/setup.md +279 -0
  39. package/guides/agents/verify.md +132 -0
  40. package/guides/agents/viz.md +106 -0
  41. package/guides/backend.md +146 -0
  42. package/guides/content.md +147 -0
  43. package/guides/cs2.md +190 -0
  44. package/guides/data.md +123 -0
  45. package/guides/design.md +116 -0
  46. package/guides/frontend.md +151 -0
  47. package/guides/infrastructure.md +179 -0
  48. package/guides/output-contract.md +98 -0
  49. package/hooks/no-stop-open-epics.js +125 -0
  50. package/package.json +31 -0
  51. package/rules/work-items-rpc.md +399 -0
  52. package/scripts/install-rdc-skills.js +559 -0
  53. package/scripts/install.ps1 +165 -0
  54. package/scripts/install.sh +132 -0
  55. package/scripts/lib/assertions.mjs +264 -0
  56. package/scripts/lib/manifest-schema.mjs +607 -0
  57. package/scripts/lib/runner.mjs +429 -0
  58. package/scripts/lib/sandbox.mjs +435 -0
  59. package/scripts/self-test.mjs +1108 -0
  60. package/scripts/uninstall.ps1 +77 -0
  61. package/scripts/uninstall.sh +69 -0
  62. package/scripts/update.ps1 +43 -0
  63. package/scripts/update.sh +43 -0
  64. package/scripts/watch-init.mjs +100 -0
  65. package/skills/.gitkeep +0 -0
  66. package/skills/build/SKILL.md +238 -0
  67. package/skills/collab/SKILL.md +218 -0
  68. package/skills/deploy/SKILL.md +144 -0
  69. package/skills/fixit/SKILL.md +112 -0
  70. package/skills/handoff/SKILL.md +175 -0
  71. package/skills/help/SKILL.md +101 -0
  72. package/skills/overnight/SKILL.md +220 -0
  73. package/skills/plan/SKILL.md +96 -0
  74. package/skills/preplan/SKILL.md +87 -0
  75. package/skills/prototype/SKILL.md +151 -0
  76. package/skills/release/SKILL.md +221 -0
  77. package/skills/report/SKILL.md +101 -0
  78. package/skills/review/SKILL.md +120 -0
  79. package/skills/self-test/SKILL.md +127 -0
  80. package/skills/status/SKILL.md +86 -0
  81. package/skills/tests/README.md +29 -0
  82. package/skills/tests/rdc-build.test.json +22 -0
  83. package/skills/tests/rdc-deploy.test.json +15 -0
  84. package/skills/tests/rdc-fixit.test.json +21 -0
  85. package/skills/tests/rdc-handoff.test.json +14 -0
  86. package/skills/tests/rdc-overnight.test.json +21 -0
  87. package/skills/tests/rdc-plan.test.json +14 -0
  88. package/skills/tests/rdc-preplan.test.json +15 -0
  89. package/skills/tests/rdc-prototype.test.json +14 -0
  90. package/skills/tests/rdc-release.test.json +15 -0
  91. package/skills/tests/rdc-report.test.json +14 -0
  92. package/skills/tests/rdc-review.test.json +14 -0
  93. package/skills/tests/rdc-status.test.json +16 -0
  94. package/skills/tests/rdc-workitems.test.json +15 -0
  95. package/skills/watch/SKILL.md +92 -0
  96. package/skills/workitems/SKILL.md +147 -0
  97. package/tests/validate-skills.js +183 -0
@@ -0,0 +1,116 @@
1
+ # Design Agent Guide — Base
2
+ > Role-based context for design system, branding, and visual agents. Generic patterns across projects.
3
+
4
+ ---
5
+
6
+ ## Design Principles
7
+
8
+ Projects typically define core design principles. Check the overlay for:
9
+ - Philosophy guiding all visual decisions
10
+ - Accessibility standards
11
+ - Motion/animation philosophy
12
+ - Dark/light mode strategy
13
+ - Tone and voice guidelines
14
+
15
+ ---
16
+
17
+ ## Brand Palettes
18
+
19
+ The project specifies:
20
+ - Primary colors per brand
21
+ - Accent/secondary colors
22
+ - Neutrals and grays
23
+ - Dark mode vs light mode variations
24
+ - Color semantics (error, success, warning, etc.)
25
+
26
+ Check the overlay for exact hex values and CSS variable names.
27
+
28
+ ---
29
+
30
+ ## Token Inheritance / Design Tokens
31
+
32
+ Some projects use design token systems. The overlay specifies:
33
+ - Whether tokens are centralized or distributed
34
+ - How tokens are versioned
35
+ - Export formats (JSON, CSS, Figma, etc.)
36
+ - Token hierarchy and relationships
37
+
38
+ ---
39
+
40
+ ## Typography
41
+
42
+ The project specifies:
43
+ - Primary UI font(s)
44
+ - Display/heading font
45
+ - Mono font for code
46
+ - Type scale (sizes and weights)
47
+ - Line heights and letter spacing
48
+
49
+ Never hardcode `font-family` — always use tokens or CSS variables.
50
+
51
+ ---
52
+
53
+ ## Component Variant Axes
54
+
55
+ Most design systems define variant axes. Check overlay for which axes apply:
56
+ - Brand / product line
57
+ - Visual style (default, minimal, heritage, etc.)
58
+ - Size and density
59
+ - Shape (rounded, sharp, pill, etc.)
60
+ - Motion (static, subtle, rich)
61
+ - State (default, hover, disabled, etc.)
62
+
63
+ Every component should support relevant axes on day one.
64
+
65
+ ---
66
+
67
+ ## OG Images / Social Cards
68
+
69
+ The project specifies:
70
+ - Dimensions (1200×630 is standard)
71
+ - Format (PNG, JPG)
72
+ - Design spec (fonts, colors, layout)
73
+ - Generation process (Python/Pillow, Node, etc.)
74
+ - File location and naming convention
75
+
76
+ ---
77
+
78
+ ## Asset Organization
79
+
80
+ The project specifies:
81
+ - Where to store images (folder structure)
82
+ - Naming convention (kebab-case patterns)
83
+ - File formats (WebP for photos, SVG for icons, etc.)
84
+ - Optimization requirements
85
+
86
+ ---
87
+
88
+ ## Animation and Motion
89
+
90
+ The project specifies:
91
+ - Whether animations are used (CRUD vs public pages)
92
+ - Motion library (Framer, Aceternity, custom, etc.)
93
+ - Easing and duration tokens
94
+ - `prefers-reduced-motion` compliance
95
+
96
+ ---
97
+
98
+ ## Accessibility
99
+
100
+ The project specifies:
101
+ - WCAG compliance level (A, AA, AAA)
102
+ - Color contrast requirements
103
+ - Focus indicators
104
+ - Keyboard navigation patterns
105
+ - Screen reader expectations
106
+
107
+ ---
108
+
109
+ ## Specialist Context — Read Project Overlay
110
+
111
+ Your task may require reading additional project-specific guides for:
112
+ - Brand system architecture (token inheritance, export)
113
+ - OG image generation scripts
114
+ - Design token tools and workflows
115
+ - Specific app brand palettes
116
+ - Component inventory and patterns
@@ -0,0 +1,151 @@
1
+ # Frontend Agent Guide — Base
2
+ > Role-based context for frontend/UI agents. Generic patterns across projects.
3
+
4
+ ---
5
+
6
+ ## Core Import Rule
7
+
8
+ **ALWAYS import from the project's component library.** NEVER import directly from headless UI libraries, animation libs, or icon libraries.
9
+
10
+ ```ts
11
+ // Correct (project import)
12
+ import { Button, DataTable, Card } from "@project/ui";
13
+
14
+ // Wrong - never do this
15
+ import { Button } from "@/components/ui/button";
16
+ import { motion } from "framer-motion";
17
+ ```
18
+
19
+ The project overlay will specify the exact import path.
20
+
21
+ ---
22
+
23
+ ## Component Tier Architecture
24
+
25
+ Most projects organize components into tiers. Check the project overlay for:
26
+ - **Tier 1** — Headless/primitive components (forms, layout, data)
27
+ - **Tier 2** — Domain-specific components (app-specific business logic UI)
28
+ - **Tier 3** — Animated effects (hero sections, public pages)
29
+ - **Tier 4** — Brand/personality components (marketing, accent effects)
30
+
31
+ Use the right tier for the context:
32
+ - CRUD/admin UI → Tiers 1-2
33
+ - Public/marketing pages → Tiers 3-4
34
+
35
+ ---
36
+
37
+ ## Component Creation Contract
38
+
39
+ All new components must follow the standard contract:
40
+
41
+ ```tsx
42
+ "use client"; // only if uses hooks/browser APIs
43
+ import * as React from "react";
44
+ import { cn } from "../lib/utils"; // from project's UI lib
45
+
46
+ interface MyComponentProps extends React.HTMLAttributes<HTMLDivElement> {
47
+ variant?: "default" | "outline";
48
+ }
49
+
50
+ const MyComponent = React.forwardRef<HTMLDivElement, MyComponentProps>(
51
+ ({ className, variant = "default", ...props }, ref) => (
52
+ <div ref={ref} className={cn("base-classes", className)} {...props} />
53
+ )
54
+ );
55
+ MyComponent.displayName = "MyComponent";
56
+ export { MyComponent };
57
+ ```
58
+
59
+ Then re-export from the project's index. Placement:
60
+ - Generic UI: `packages/ui/src/components/`
61
+ - Animated effects: `packages/ui/src/components/effects/` or similar subdirectory
62
+ - Brand accents: `packages/ui/src/components/brand/` or similar
63
+
64
+ ---
65
+
66
+ ## Variant Axes — Every Component
67
+
68
+ Every component must support variant axes. Use CVA (class-variance-authority) or equivalent.
69
+
70
+ | Axis | Examples | When it matters |
71
+ |------|----------|----------------|
72
+ | Brand | app-specific brands | Every component |
73
+ | Visual style | default / heritage / minimal / quiet | Different expression per context |
74
+ | Size | xs / sm / md / lg / xl / 2xl | Hero ≠ sidebar |
75
+ | Shape | sharp / soft / pill / circle | Cards, buttons, badges |
76
+ | Density | compact / comfortable / spacious | Data-heavy vs editorial |
77
+ | State | default / hover / active / disabled / loading | Interactive components |
78
+
79
+ Every custom component ships with its variant matrix on day one.
80
+
81
+ ---
82
+
83
+ ## Styling Rules
84
+
85
+ - **Tailwind utility classes only** — never inline styles
86
+ - **Never hardcode colors** — always use CSS variables from the project
87
+ - **Class merging** via `cn()` from project's UI library
88
+ - **No Tailwind conflicts** — use design tokens for everything
89
+
90
+ ---
91
+
92
+ ## Typography
93
+
94
+ Never hardcode `font-family` — use CSS variables or Tailwind classes.
95
+
96
+ The project overlay specifies:
97
+ - Primary UI font
98
+ - Display/heading font
99
+ - Mono font for code
100
+ - Type scale (text-xs through text-4xl)
101
+
102
+ ---
103
+
104
+ ## Tailwind Rules
105
+
106
+ - **Content paths** -- every `tailwind.config.ts` must include the project's UI package
107
+ - **Class merging** -- always use `cn()` from project's UI library
108
+ - **Colors** -- CSS variables only, never hardcode hex
109
+ - **Spacing** -- 4px scale (or project-specific)
110
+ - **Border radius** -- use project's radius token
111
+
112
+ ---
113
+
114
+ ## Asset Handling
115
+
116
+ The project specifies folder structure, naming convention, and usage patterns.
117
+
118
+ General pattern:
119
+ - Store in `apps/[app]/public/images/[category]/`
120
+ - Naming: `[type]-[name]-[variant].[ext]` (lowercase kebab-case)
121
+ - Always use framework Image component with `width`, `height`, `alt`
122
+
123
+ ---
124
+
125
+ ## Next.js / React-Specific Patterns
126
+
127
+ Check project overlay for:
128
+ - Framework version (Next.js 13/14, React 18/19, etc.)
129
+ - App Router vs Pages Router
130
+ - Dynamic import patterns for browser-only libs
131
+ - transpilePackages config for monorepo
132
+ - Middleware patterns
133
+
134
+ ---
135
+
136
+ ## Dependencies Managed by Project UI Library
137
+
138
+ Most dependencies (Radix, TanStack, recharts, framer-motion, CodeMirror, etc.) are managed by the project's UI package. Apps don't install them separately.
139
+
140
+ ---
141
+
142
+ ## Specialist Context — Read Project Overlay
143
+
144
+ Your task may require reading additional project-specific rule files.
145
+
146
+ The project overlay will indicate what specialized guides are needed for:
147
+ - Brand system work
148
+ - Design token inheritance
149
+ - Specific app pages or routes
150
+ - Image/asset handling
151
+ - OG image generation
@@ -0,0 +1,179 @@
1
+ # Infrastructure Agent Guide — Base
2
+ > Role-based context for infra/deployment/DevOps agents. Generic patterns across projects.
3
+
4
+ ---
5
+
6
+ ## Rule 1: NEVER Work Around Broken Infrastructure
7
+
8
+ When a service is unavailable, STOP and report BLOCKED. Do not:
9
+ - Use curl when service APIs are down
10
+ - Use workarounds or alternative approaches
11
+ - Skip verification steps
12
+ - Assume service will return to normal
13
+
14
+ **Report immediately:**
15
+
16
+ ```
17
+ BLOCKED: [service name] is not responding.
18
+
19
+ Fix: [specific action for your project's infrastructure stack]
20
+
21
+ I cannot proceed until this is resolved.
22
+ ```
23
+
24
+ ---
25
+
26
+ ## Deployment Tools
27
+
28
+ Check project overlay for:
29
+ - Primary deployment platform (Coolify, Vercel, AWS, GCP, etc.)
30
+ - MCP connectors or REST API access
31
+ - Authentication method (API token, OAuth, etc.)
32
+ - Credential location (clauth daemon, env vars, etc.)
33
+
34
+ ---
35
+
36
+ ## Server Infrastructure
37
+
38
+ The project specifies:
39
+ - Server IP/hostname
40
+ - Dashboard URL
41
+ - Default region/availability zones
42
+ - Server/environment IDs (UUIDs or identifiers)
43
+
44
+ ---
45
+
46
+ ## DNS Rules
47
+
48
+ The project specifies:
49
+ - Wildcard DNS patterns vs individual records
50
+ - Cloudflare or other DNS provider
51
+ - Proxy rules (orange cloud, DNS-only, etc.)
52
+ - SSL/TLS provisioning method
53
+
54
+ Check overlay for **critical rules** — DNS misconfigurations break deployments.
55
+
56
+ ---
57
+
58
+ ## Deployment Registry
59
+
60
+ The project likely has a registry/database table tracking all deployments. Before ANY deploy, verify:
61
+ ```
62
+ Lookup: <slug> or <domain>
63
+ Returns: UUID, repo location, build command, build type, domain, status
64
+ ```
65
+
66
+ **NEVER guess** UUIDs, domains, or build commands. Always look them up.
67
+
68
+ ---
69
+
70
+ ## Watch Paths
71
+
72
+ For monorepo deploys, the project specifies:
73
+ - Watch path patterns per app type
74
+ - Why watch paths matter (prevents unnecessary rebuilds)
75
+ - How to set watch paths (usually via API or config)
76
+
77
+ Without correct watch paths, every push triggers ALL apps to rebuild.
78
+
79
+ ---
80
+
81
+ ## Build Types
82
+
83
+ The project specifies supported build types:
84
+ - Next.js monorepo
85
+ - Vite / Node
86
+ - Static HTML
87
+ - Docker
88
+ - etc.
89
+
90
+ Check overlay for:
91
+ - Build pack (nixpacks, docker, static, etc.)
92
+ - Required environment variables
93
+ - Node version constraints
94
+ - Build command and install command
95
+
96
+ ---
97
+
98
+ ## Environment Tiers
99
+
100
+ The project specifies deployment environments:
101
+ - **development** -- free to experiment
102
+ - **staging** -- test before production
103
+ - **production** -- live traffic, needs confirmation
104
+
105
+ Check overlay for which tier each app is in and confirmation requirements.
106
+
107
+ ---
108
+
109
+ ## Deploy Checklist
110
+
111
+ Standard pattern:
112
+ 1. Check git status (divergence, unpushed commits)
113
+ 2. Confirm with user (especially for production)
114
+ 3. Push to trigger auto-deploy (if webhook configured)
115
+ 4. Verify deployment success (health check, status endpoint)
116
+ 5. Check cache headers (if behind CDN)
117
+
118
+ ---
119
+
120
+ ## New App Deployment
121
+
122
+ The project specifies:
123
+ - DNS pattern (wildcard subdomains vs custom domains)
124
+ - Coolify/deployment platform setup
125
+ - GitHub repo connection
126
+ - Watch paths configuration
127
+ - Registry update requirement
128
+
129
+ ---
130
+
131
+ ## Credential Safety
132
+
133
+ - MCP connectors first (if available)
134
+ - clauth daemon second (localhost:52437)
135
+ - Never print keys to stdout
136
+ - Never hardcode credentials
137
+ - Never ask user for keys
138
+ - If daemon is down: report BLOCKED
139
+
140
+ ---
141
+
142
+ ## Git Workflow
143
+
144
+ The project specifies:
145
+ - Primary branch for features (develop, main, etc.)
146
+ - Force-push rules (usually: NEVER force-push main)
147
+ - Commit message format
148
+ - Auto-commit patterns
149
+
150
+ ---
151
+
152
+ ## Service Health Checks
153
+
154
+ The project specifies how to health-check each service:
155
+ - Ping endpoint
156
+ - Status endpoint
157
+ - Log location
158
+ - Fallback if primary method fails
159
+
160
+ ---
161
+
162
+ ## Troubleshooting Patterns
163
+
164
+ The project specifies common issues and fixes:
165
+ - 502/503 errors (check container logs, port mismatch)
166
+ - Disk full (clean Docker cache)
167
+ - SSL provisioning failures (check DNS config)
168
+ - Build failures (check environment variables, Node version)
169
+
170
+ ---
171
+
172
+ ## Specialist Context — Read Project Overlay
173
+
174
+ Your task may require reading additional project-specific guides for:
175
+ - Full deployment registry schema
176
+ - Complete DNS rules (critical for subdomains)
177
+ - Build type details
178
+ - CI/CD pipeline configuration
179
+ - Scaling and performance tuning
@@ -0,0 +1,98 @@
1
+ # RDC Skill Output Contract
2
+ > Every `rdc:*` skill MUST follow this contract. Non-negotiable.
3
+
4
+ ## Why
5
+
6
+ The user has zero visibility when skills narrate tool calls and dump raw output.
7
+ A wall of JSON, MCP responses, and "let me check X..." chatter buries the one
8
+ thing they need: **is this working or not, and what step are we on?**
9
+
10
+ ## The contract
11
+
12
+ 1. **One checklist per invocation.** Show it upfront, update it in place as items
13
+ progress, print it again at the end with a 1-line verdict.
14
+
15
+ 2. **Checklist markers:**
16
+ - `[ ]` pending
17
+ - `[~]` in progress (currently executing)
18
+ - `[x]` done
19
+ - `[!]` failed
20
+ - `[-]` skipped (with one-word reason in parens)
21
+
22
+ 3. **NO narration of tool calls.** Forbidden phrases: "Let me...", "I'll check...",
23
+ "Now reading...", "Let me fetch...", "Let me verify...". Tool calls happen
24
+ silently. The checklist is the communication channel.
25
+
26
+ 4. **NO raw tool output in chat.** No MCP JSON, no log dumps, no UUIDs, no
27
+ SQL result tables, no curl bodies — unless a checklist item explicitly asks
28
+ for one (e.g., "show HTTP status"). Everything else is consumed silently and
29
+ folded into checklist state.
30
+
31
+ 5. **Failures are one sentence.** When `[!]` fires, print ONE sentence on what
32
+ failed and what you're doing about it. Stack traces, full error messages,
33
+ and debug dumps go in memory, not in chat.
34
+
35
+ 6. **Verdict line.** End every invocation with one line:
36
+ - `✅ <skill>: <outcome> in Nm Ns`
37
+ - `⚠️ <skill>: <N findings> — <next action>`
38
+ - `❌ <skill>: <one-sentence reason>`
39
+
40
+ 7. **Interactive checklists only when human input is required.** If the skill
41
+ needs a decision (pick an epic, confirm a destructive op), ask ONE question,
42
+ then resume.
43
+
44
+ 8. **TaskCreate is internal.** If you use TaskCreate/TodoWrite for internal
45
+ tracking, that's fine — but the checklist shown to the user is the one
46
+ defined in the skill's markdown, not the raw task list.
47
+
48
+ ## Template
49
+
50
+ Every skill invocation prints, in order:
51
+
52
+ ```
53
+ <Skill Name>: <one-line subject>
54
+ [ ] Step 1
55
+ [ ] Step 2
56
+ [ ] Step 3
57
+ ...
58
+ ```
59
+
60
+ Then executes silently, re-rendering the checklist when state changes (tools
61
+ like CLI agents that stream output should refresh in place). At the end:
62
+
63
+ ```
64
+ <Skill Name>: <one-line subject>
65
+ [x] Step 1
66
+ [x] Step 2
67
+ [x] Step 3
68
+ ✅ <verdict>
69
+ ```
70
+
71
+ ## What the skill may additionally emit
72
+
73
+ - **One question at a time** when input is required
74
+ - **One-sentence status updates** at major state transitions (optional)
75
+ - **Final artifacts** if the skill's output is itself a file/report/diff — link,
76
+ don't inline the full content
77
+
78
+ ## What the skill MUST NOT emit
79
+
80
+ - Tool call narration
81
+ - Raw MCP responses
82
+ - JSON dumps
83
+ - Log tails
84
+ - SQL result grids
85
+ - UUIDs unless asked
86
+ - "I'm going to..." preambles
87
+ - "Let me now..." transitions
88
+ - Summaries of what just happened (the checklist shows it)
89
+ - Apologies for verbosity
90
+
91
+ ## Enforcement
92
+
93
+ If a skill violates this contract, the user will say "squelch" — at which point
94
+ any in-flight narration stops, only the checklist + verdict is shown for the
95
+ remainder of the session.
96
+
97
+ Skills SHOULD self-enforce by treating every tool call as silent and every
98
+ user-facing emission as a deliberate checklist update.
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Stop hook — block Claude from stopping when open epics exist.
4
+ *
5
+ * Fires on every Stop event where Claude decided to end_turn.
6
+ * Queries get_open_epics() via Supabase REST.
7
+ * Only blocks if epics with status=todo exist — in_progress means another session owns them.
8
+ * Only fires in the regen-root project (scope guard on event.cwd).
9
+ *
10
+ * Exit codes:
11
+ * 0 = allow stop
12
+ * 2 = block stop (todo epics remain)
13
+ *
14
+ * PROJECT CONFIG REQUIRED in .env.local:
15
+ * NEXT_PUBLIC_SUPABASE_URL=https://<ref>.supabase.co
16
+ * NEXT_PUBLIC_SUPABASE_ANON_KEY=<key>
17
+ *
18
+ * PROJECT SCOPE in package.json or plugin config:
19
+ * "hookScope": "regen-root" ← folder name that must appear in event.cwd
20
+ */
21
+
22
+ const fs = require('fs');
23
+ const path = require('path');
24
+
25
+ // ── Config — override these per project ──────────────────────────────────────
26
+
27
+ const PROJECT_SCOPE = 'regen-root'; // only block in sessions inside this folder name
28
+ const OVERNIGHT_SENTINEL = 'C:/Dev/regen-root/.rdc/overnight.lock'; // only fire when this exists
29
+ const ENV_PATHS = [
30
+ 'C:/Dev/regen-root/apps/rdc-marketing-engine/.env.local',
31
+ 'C:/Dev/regen-root/.env.local',
32
+ ];
33
+ const SUPABASE_URL = process.env.SUPABASE_URL || readEnvVar('NEXT_PUBLIC_SUPABASE_URL');
34
+
35
+ function readEnvVar(key) {
36
+ for (const p of ENV_PATHS) {
37
+ try {
38
+ const contents = fs.readFileSync(p, 'utf8');
39
+ const match = contents.match(new RegExp(`^${key}=(.+)$`, 'm'));
40
+ if (match) return match[1].trim();
41
+ } catch {}
42
+ }
43
+ return null;
44
+ }
45
+
46
+ async function getOpenEpics(anonKey, supabaseUrl) {
47
+ const url = `${supabaseUrl}/rest/v1/rpc/get_open_epics`;
48
+ const res = await fetch(url, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Content-Type': 'application/json',
52
+ 'apikey': anonKey,
53
+ 'Authorization': `Bearer ${anonKey}`,
54
+ },
55
+ body: JSON.stringify({}),
56
+ });
57
+ if (!res.ok) return [];
58
+ const data = await res.json();
59
+ if (Array.isArray(data) && data.length > 0 && data[0].get_open_epics) {
60
+ return data[0].get_open_epics;
61
+ }
62
+ if (Array.isArray(data)) return data;
63
+ return [];
64
+ }
65
+
66
+ async function main() {
67
+ let event = {};
68
+ try {
69
+ const raw = fs.readFileSync('/dev/stdin', 'utf8');
70
+ event = JSON.parse(raw);
71
+ } catch {}
72
+
73
+ // Scope guard — only apply to sessions inside PROJECT_SCOPE folder
74
+ const cwd = event.cwd || process.cwd();
75
+ const normalised = cwd.replace(/\\/g, '/').toLowerCase();
76
+ if (!normalised.includes(PROJECT_SCOPE.toLowerCase())) {
77
+ process.exit(0);
78
+ }
79
+
80
+ // Overnight gate — only block when rdc:overnight is actively running.
81
+ // The overnight skill creates this sentinel at start and removes it on exit.
82
+ // Interactive sessions never see this file, so they stop freely.
83
+ if (!fs.existsSync(OVERNIGHT_SENTINEL)) {
84
+ process.exit(0);
85
+ }
86
+
87
+ // Only block Claude's own end_turn — never block user-forced stops
88
+ const stopReason = event.stop_reason || event.reason || '';
89
+ if (stopReason && stopReason !== 'end_turn') {
90
+ process.exit(0);
91
+ }
92
+
93
+ const anonKey = readEnvVar('NEXT_PUBLIC_SUPABASE_ANON_KEY');
94
+ const supabaseUrl = SUPABASE_URL || readEnvVar('NEXT_PUBLIC_SUPABASE_URL');
95
+ if (!anonKey || !supabaseUrl) {
96
+ process.exit(0); // Can't verify — silent pass
97
+ }
98
+
99
+ let epics = [];
100
+ try {
101
+ epics = await getOpenEpics(anonKey, supabaseUrl);
102
+ } catch {
103
+ process.exit(0);
104
+ }
105
+
106
+ // Only block on todo — in_progress means another session already owns it
107
+ const actionable = epics.filter(e => (e.status || '').toLowerCase() === 'todo');
108
+
109
+ if (actionable.length === 0) {
110
+ process.exit(0);
111
+ }
112
+
113
+ const titles = actionable.slice(0, 3).map(e => ` • [${e.priority}] ${e.title}`).join('\n');
114
+ const more = actionable.length > 3 ? `\n … and ${actionable.length - 3} more` : '';
115
+
116
+ process.stderr.write(
117
+ `\n🚫 STOP BLOCKED — ${actionable.length} open epic(s) remain in queue:\n${titles}${more}\n\n` +
118
+ `Continue working. Pick the highest-priority epic and proceed.\n` +
119
+ `Only stop when get_open_epics() returns empty.\n\n`
120
+ );
121
+
122
+ process.exit(2);
123
+ }
124
+
125
+ main().catch(() => process.exit(0));
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@lifeaitools/rdc-skills",
3
+ "version": "0.8.7",
4
+ "description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight builds",
5
+ "keywords": [
6
+ "claude-code",
7
+ "claude-code-plugin",
8
+ "rdc",
9
+ "skills",
10
+ "ai-agents"
11
+ ],
12
+ "author": "LIFEAI",
13
+ "license": "MIT",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/LIFEAI/rdc-skills.git"
17
+ },
18
+ "claude": {
19
+ "type": "plugin",
20
+ "skills": "skills/",
21
+ "guides": "guides/",
22
+ "version": "0.8.7",
23
+ "commands": "commands/"
24
+ },
25
+ "scripts": {
26
+ "install-rdc-skills": "node scripts/install-rdc-skills.js",
27
+ "uninstall:win": "powershell -ExecutionPolicy Bypass -File scripts/uninstall.ps1",
28
+ "uninstall:unix": "bash scripts/uninstall.sh",
29
+ "validate": "node tests/validate-skills.js"
30
+ }
31
+ }