beth-copilot 1.0.3 → 1.0.5
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 +0 -0
- package/bin/cli.js +222 -7
- package/package.json +1 -1
- package/templates/.github/agents/beth.agent.md +0 -0
- package/templates/.github/agents/developer.agent.md +0 -0
- package/templates/.github/agents/product-manager.agent.md +0 -0
- package/templates/.github/agents/researcher.agent.md +0 -0
- package/templates/.github/agents/security-reviewer.agent.md +0 -0
- package/templates/.github/agents/tester.agent.md +0 -0
- package/templates/.github/agents/ux-designer.agent.md +0 -0
- package/templates/.github/copilot-instructions.md +0 -0
- package/templates/.github/skills/framer-components/SKILL.md +0 -0
- package/templates/.github/skills/prd/SKILL.md +0 -0
- package/templates/.github/skills/security-analysis/SKILL.md +0 -0
- package/templates/.github/skills/shadcn-ui/SKILL.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
- package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
- package/templates/.vscode/settings.json +16 -0
- package/templates/AGENTS.md +95 -70
- package/templates/Backlog.md +0 -0
- package/templates/mcp.json.example +0 -0
package/README.md
CHANGED
|
File without changes
|
package/bin/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { fileURLToPath } from 'url';
|
|
|
4
4
|
import { dirname, join, relative } from 'path';
|
|
5
5
|
import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync, readFileSync, writeFileSync } from 'fs';
|
|
6
6
|
import { createRequire } from 'module';
|
|
7
|
+
import { execSync, spawn } from 'child_process';
|
|
7
8
|
|
|
8
9
|
const require = createRequire(import.meta.url);
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -74,6 +75,131 @@ async function checkForUpdates() {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
function isBacklogCliInstalled() {
|
|
79
|
+
try {
|
|
80
|
+
execSync('backlog --version', { stdio: 'ignore' });
|
|
81
|
+
return true;
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function isBeadsInstalled() {
|
|
88
|
+
try {
|
|
89
|
+
execSync('bd --version', { stdio: 'ignore' });
|
|
90
|
+
return true;
|
|
91
|
+
} catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function isBeadsInitialized(cwd) {
|
|
97
|
+
// Check if .beads directory exists in the project
|
|
98
|
+
return existsSync(join(cwd, '.beads'));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function promptYesNo(question) {
|
|
102
|
+
const readline = await import('readline');
|
|
103
|
+
const rl = readline.createInterface({
|
|
104
|
+
input: process.stdin,
|
|
105
|
+
output: process.stdout
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
return new Promise((resolve) => {
|
|
109
|
+
rl.question(`${question} (y/N) `, (answer) => {
|
|
110
|
+
rl.close();
|
|
111
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async function installBacklogCli() {
|
|
117
|
+
log('\nInstalling backlog.md CLI...', COLORS.cyan);
|
|
118
|
+
|
|
119
|
+
return new Promise((resolve) => {
|
|
120
|
+
const child = spawn('npm', ['install', '-g', 'backlog.md'], {
|
|
121
|
+
stdio: 'inherit',
|
|
122
|
+
shell: true
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
child.on('close', (code) => {
|
|
126
|
+
if (code === 0) {
|
|
127
|
+
logSuccess('backlog.md CLI installed successfully!');
|
|
128
|
+
resolve(true);
|
|
129
|
+
} else {
|
|
130
|
+
logWarning('Failed to install backlog.md CLI. You can install it manually:');
|
|
131
|
+
logInfo('npm i -g backlog.md');
|
|
132
|
+
logInfo(' or');
|
|
133
|
+
logInfo('bun i -g backlog.md');
|
|
134
|
+
resolve(false);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
child.on('error', () => {
|
|
139
|
+
logWarning('Failed to install backlog.md CLI. You can install it manually:');
|
|
140
|
+
logInfo('npm i -g backlog.md');
|
|
141
|
+
resolve(false);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async function installBeads() {
|
|
147
|
+
log('\nInstalling beads CLI...', COLORS.cyan);
|
|
148
|
+
logInfo('curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
|
|
149
|
+
|
|
150
|
+
return new Promise((resolve) => {
|
|
151
|
+
const child = spawn('bash', ['-c', 'curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash'], {
|
|
152
|
+
stdio: 'inherit',
|
|
153
|
+
shell: true
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
child.on('close', (code) => {
|
|
157
|
+
if (code === 0) {
|
|
158
|
+
logSuccess('beads CLI installed successfully!');
|
|
159
|
+
resolve(true);
|
|
160
|
+
} else {
|
|
161
|
+
logError('Failed to install beads CLI.');
|
|
162
|
+
logInfo('Install manually: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
|
|
163
|
+
logInfo('Learn more: https://github.com/steveyegge/beads');
|
|
164
|
+
resolve(false);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
child.on('error', () => {
|
|
169
|
+
logError('Failed to install beads CLI.');
|
|
170
|
+
logInfo('Install manually: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
|
|
171
|
+
resolve(false);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
async function initializeBeads(cwd) {
|
|
177
|
+
log('\nInitializing beads in project...', COLORS.cyan);
|
|
178
|
+
|
|
179
|
+
return new Promise((resolve) => {
|
|
180
|
+
const child = spawn('bd', ['init'], {
|
|
181
|
+
stdio: 'inherit',
|
|
182
|
+
shell: true,
|
|
183
|
+
cwd
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
child.on('close', (code) => {
|
|
187
|
+
if (code === 0) {
|
|
188
|
+
logSuccess('beads initialized successfully!');
|
|
189
|
+
resolve(true);
|
|
190
|
+
} else {
|
|
191
|
+
logWarning('Failed to initialize beads. Run manually: bd init');
|
|
192
|
+
resolve(false);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
child.on('error', () => {
|
|
197
|
+
logWarning('Failed to initialize beads. Run manually: bd init');
|
|
198
|
+
resolve(false);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
77
203
|
function showHelp() {
|
|
78
204
|
console.log(`
|
|
79
205
|
${COLORS.bright}Beth${COLORS.reset} - AI Orchestrator for GitHub Copilot
|
|
@@ -86,6 +212,7 @@ ${COLORS.bright}Options:${COLORS.reset}
|
|
|
86
212
|
--force Overwrite existing files
|
|
87
213
|
--skip-backlog Don't create Backlog.md
|
|
88
214
|
--skip-mcp Don't create mcp.json.example
|
|
215
|
+
--skip-beads Skip beads check (not recommended)
|
|
89
216
|
|
|
90
217
|
${COLORS.bright}Examples:${COLORS.reset}
|
|
91
218
|
npx beth-copilot init Set up Beth in current project
|
|
@@ -95,14 +222,15 @@ ${COLORS.bright}What gets installed:${COLORS.reset}
|
|
|
95
222
|
.github/agents/ 8 specialized AI agents
|
|
96
223
|
.github/skills/ 6 domain knowledge modules
|
|
97
224
|
.github/copilot-instructions.md Copilot configuration
|
|
225
|
+
.vscode/settings.json Recommended VS Code settings
|
|
98
226
|
AGENTS.md Workflow documentation
|
|
99
227
|
Backlog.md Task tracking file
|
|
100
228
|
mcp.json.example Optional MCP server config
|
|
101
229
|
|
|
102
230
|
${COLORS.bright}After installation:${COLORS.reset}
|
|
103
231
|
1. Open project in VS Code
|
|
104
|
-
2.
|
|
105
|
-
3. Type @Beth
|
|
232
|
+
2. Open Copilot Chat (Ctrl+Alt+I / Cmd+Alt+I)
|
|
233
|
+
3. Type @Beth to start working
|
|
106
234
|
|
|
107
235
|
${COLORS.bright}Documentation:${COLORS.reset}
|
|
108
236
|
https://github.com/stephschofield/beth
|
|
@@ -139,7 +267,7 @@ function copyDirRecursive(src, dest, options = {}) {
|
|
|
139
267
|
}
|
|
140
268
|
|
|
141
269
|
async function init(options = {}) {
|
|
142
|
-
const { force = false, skipBacklog = false, skipMcp = false } = options;
|
|
270
|
+
const { force = false, skipBacklog = false, skipMcp = false, skipBeads = false } = options;
|
|
143
271
|
const cwd = process.cwd();
|
|
144
272
|
|
|
145
273
|
// Check for updates
|
|
@@ -218,6 +346,28 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
|
|
|
218
346
|
}
|
|
219
347
|
}
|
|
220
348
|
|
|
349
|
+
// Copy .vscode/settings.json (recommended settings for agent mode)
|
|
350
|
+
const vscodeSrc = join(TEMPLATES_DIR, '.vscode');
|
|
351
|
+
const vscodeDest = join(cwd, '.vscode');
|
|
352
|
+
|
|
353
|
+
if (existsSync(vscodeSrc)) {
|
|
354
|
+
if (!existsSync(vscodeDest)) {
|
|
355
|
+
mkdirSync(vscodeDest, { recursive: true });
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const settingsSrc = join(vscodeSrc, 'settings.json');
|
|
359
|
+
const settingsDest = join(vscodeDest, 'settings.json');
|
|
360
|
+
|
|
361
|
+
if (existsSync(settingsSrc)) {
|
|
362
|
+
if (existsSync(settingsDest) && !force) {
|
|
363
|
+
logWarning('Skipped (exists): .vscode/settings.json');
|
|
364
|
+
} else {
|
|
365
|
+
copyFileSync(settingsSrc, settingsDest);
|
|
366
|
+
copiedFiles.push('.vscode/settings.json');
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
221
371
|
// Summary
|
|
222
372
|
console.log('');
|
|
223
373
|
if (copiedFiles.length > 0) {
|
|
@@ -227,13 +377,77 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
|
|
|
227
377
|
logWarning('No files were copied. Use --force to overwrite existing files.');
|
|
228
378
|
}
|
|
229
379
|
|
|
380
|
+
// Check for beads CLI (REQUIRED for Beth)
|
|
381
|
+
if (!skipBeads) {
|
|
382
|
+
console.log('');
|
|
383
|
+
log('Checking beads (required for task tracking)...', COLORS.cyan);
|
|
384
|
+
|
|
385
|
+
if (!isBeadsInstalled()) {
|
|
386
|
+
logWarning('beads CLI is not installed.');
|
|
387
|
+
logInfo('Beth requires beads for task tracking. Agents use it to coordinate work.');
|
|
388
|
+
logInfo('Learn more: https://github.com/steveyegge/beads');
|
|
389
|
+
console.log('');
|
|
390
|
+
|
|
391
|
+
const shouldInstallBeads = await promptYesNo('Install beads CLI now? (required)');
|
|
392
|
+
if (shouldInstallBeads) {
|
|
393
|
+
const installed = await installBeads();
|
|
394
|
+
if (!installed) {
|
|
395
|
+
logError('beads installation failed. Beth requires beads to function.');
|
|
396
|
+
logInfo('Install manually and run "beth init" again.');
|
|
397
|
+
process.exit(1);
|
|
398
|
+
}
|
|
399
|
+
} else {
|
|
400
|
+
logError('beads is required for Beth to function.');
|
|
401
|
+
logInfo('Install beads and run "beth init" again:');
|
|
402
|
+
logInfo(' curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
|
|
403
|
+
process.exit(1);
|
|
404
|
+
}
|
|
405
|
+
} else {
|
|
406
|
+
logSuccess('beads CLI is installed');
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// Initialize beads in the project if not already done
|
|
410
|
+
if (!isBeadsInitialized(cwd)) {
|
|
411
|
+
logInfo('beads not initialized in this project.');
|
|
412
|
+
const shouldInitBeads = await promptYesNo('Initialize beads now?');
|
|
413
|
+
if (shouldInitBeads) {
|
|
414
|
+
await initializeBeads(cwd);
|
|
415
|
+
} else {
|
|
416
|
+
logWarning('Remember to run "bd init" before using Beth.');
|
|
417
|
+
}
|
|
418
|
+
} else {
|
|
419
|
+
logSuccess('beads is initialized in this project');
|
|
420
|
+
}
|
|
421
|
+
} else {
|
|
422
|
+
logWarning('Skipped beads check (--skip-beads). Beth may not function correctly.');
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Check for backlog.md CLI (optional)
|
|
426
|
+
if (!skipBacklog && !isBacklogCliInstalled()) {
|
|
427
|
+
console.log('');
|
|
428
|
+
logWarning('backlog.md CLI is not installed (optional).');
|
|
429
|
+
logInfo('The CLI provides TUI boards, web UI, and task management commands.');
|
|
430
|
+
logInfo('Learn more: https://github.com/MrLesk/Backlog.md');
|
|
431
|
+
console.log('');
|
|
432
|
+
|
|
433
|
+
const shouldInstall = await promptYesNo('Would you like to install the backlog.md CLI globally?');
|
|
434
|
+
if (shouldInstall) {
|
|
435
|
+
await installBacklogCli();
|
|
436
|
+
} else {
|
|
437
|
+
logInfo('Skipped. You can install it later with: npm i -g backlog.md');
|
|
438
|
+
}
|
|
439
|
+
} else if (!skipBacklog) {
|
|
440
|
+
logSuccess('backlog.md CLI is already installed');
|
|
441
|
+
}
|
|
442
|
+
|
|
230
443
|
// Next steps
|
|
231
444
|
console.log(`
|
|
232
445
|
${COLORS.bright}Next steps:${COLORS.reset}
|
|
233
446
|
1. Open this project in VS Code
|
|
234
|
-
2.
|
|
235
|
-
3.
|
|
236
|
-
|
|
447
|
+
2. Open Copilot Chat (${COLORS.cyan}Ctrl+Alt+I${COLORS.reset} / ${COLORS.cyan}Cmd+Alt+I${COLORS.reset})
|
|
448
|
+
3. Type ${COLORS.cyan}@Beth${COLORS.reset} to start - she's your orchestrator
|
|
449
|
+
|
|
450
|
+
${COLORS.bright}Pro tip:${COLORS.reset} Start every session with ${COLORS.cyan}@Beth${COLORS.reset} and let her route work to the right specialists.
|
|
237
451
|
|
|
238
452
|
${COLORS.bright}Documentation:${COLORS.reset}
|
|
239
453
|
https://github.com/stephschofield/beth
|
|
@@ -244,7 +458,7 @@ ${COLORS.cyan}"They broke my wings and forgot I had claws."${COLORS.reset}
|
|
|
244
458
|
|
|
245
459
|
// Input validation constants
|
|
246
460
|
const ALLOWED_COMMANDS = ['init', 'help', '--help', '-h'];
|
|
247
|
-
const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp'];
|
|
461
|
+
const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp', '--skip-beads'];
|
|
248
462
|
const MAX_ARG_LENGTH = 50;
|
|
249
463
|
|
|
250
464
|
// Validate and sanitize input
|
|
@@ -273,6 +487,7 @@ const options = {
|
|
|
273
487
|
force: args.includes('--force'),
|
|
274
488
|
skipBacklog: args.includes('--skip-backlog'),
|
|
275
489
|
skipMcp: args.includes('--skip-mcp'),
|
|
490
|
+
skipBeads: args.includes('--skip-beads'),
|
|
276
491
|
};
|
|
277
492
|
|
|
278
493
|
// Validate unknown flags
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md
CHANGED
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md
CHANGED
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md
CHANGED
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Beth Agent System - Recommended Settings
|
|
3
|
+
// These settings enable full agent orchestration capabilities
|
|
4
|
+
|
|
5
|
+
// Required: Allow Beth to delegate work to specialist agents
|
|
6
|
+
"chat.customAgentInSubagent.enabled": true,
|
|
7
|
+
|
|
8
|
+
// Enable agent mode in Copilot Chat
|
|
9
|
+
"chat.agent.enabled": true,
|
|
10
|
+
|
|
11
|
+
// Enable thinking/reasoning for complex tasks
|
|
12
|
+
"github.copilot.chat.agent.thinkingTool": true,
|
|
13
|
+
|
|
14
|
+
// Consistent locale for agent responses
|
|
15
|
+
"github.copilot.chat.localeOverride": "en"
|
|
16
|
+
}
|
package/templates/AGENTS.md
CHANGED
|
@@ -1,70 +1,95 @@
|
|
|
1
|
-
# Agent Instructions
|
|
2
|
-
|
|
3
|
-
This project uses
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
1
|
+
# Agent Instructions
|
|
2
|
+
|
|
3
|
+
This project uses a **dual tracking system**:
|
|
4
|
+
|
|
5
|
+
| Tool | Audience | Purpose |
|
|
6
|
+
|------|----------|---------|
|
|
7
|
+
| [beads](https://github.com/steveyegge/beads) (`bd`) | Agents | Active work, dependencies, blockers, structured memory |
|
|
8
|
+
| [Backlog.md](Backlog.md) | Humans | Completed work archive, decisions, readable changelog |
|
|
9
|
+
|
|
10
|
+
**The rule:** beads is always current. Backlog.md gets updated when work completes.
|
|
11
|
+
|
|
12
|
+
## Quick Setup
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Install beads
|
|
16
|
+
curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
|
17
|
+
|
|
18
|
+
# Initialize in your project
|
|
19
|
+
bd init
|
|
20
|
+
|
|
21
|
+
# Run doctor to verify setup
|
|
22
|
+
bd doctor
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick Reference
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Simple task
|
|
29
|
+
bd create "Issue title" --description="What needs to be done" -l in_progress
|
|
30
|
+
|
|
31
|
+
# Epic for complex work
|
|
32
|
+
bd create "Feature name" --type epic -p 1
|
|
33
|
+
|
|
34
|
+
# Subtask with parent
|
|
35
|
+
bd create "Subtask" --parent <epic-id>
|
|
36
|
+
|
|
37
|
+
# Task with dependency
|
|
38
|
+
bd create "Blocked task" --deps "<blocker-id>"
|
|
39
|
+
|
|
40
|
+
# List issues / see what's ready
|
|
41
|
+
bd list
|
|
42
|
+
bd ready
|
|
43
|
+
|
|
44
|
+
# View dependencies
|
|
45
|
+
bd dep tree <id>
|
|
46
|
+
|
|
47
|
+
# Close an issue
|
|
48
|
+
bd close <id>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Workflow
|
|
52
|
+
|
|
53
|
+
### Simple Tasks
|
|
54
|
+
1. `bd create "Task" -l in_progress`
|
|
55
|
+
2. Do the work
|
|
56
|
+
3. `bd close <id>`
|
|
57
|
+
4. Update Backlog.md if significant
|
|
58
|
+
5. Commit and push
|
|
59
|
+
|
|
60
|
+
### Complex Work (Multi-Agent)
|
|
61
|
+
1. `bd create "Feature" --type epic -p 1`
|
|
62
|
+
2. Break into subtasks with `--parent` and `--deps`
|
|
63
|
+
3. `bd ready` to find unblocked work
|
|
64
|
+
4. Route to specialists with issue IDs
|
|
65
|
+
5. Close subtasks as they complete
|
|
66
|
+
6. `bd epic close-eligible` when all children done
|
|
67
|
+
7. Update Backlog.md with summary
|
|
68
|
+
8. Commit and push
|
|
69
|
+
|
|
70
|
+
## Landing the Plane (Session Completion)
|
|
71
|
+
|
|
72
|
+
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
|
|
73
|
+
|
|
74
|
+
**MANDATORY WORKFLOW:**
|
|
75
|
+
|
|
76
|
+
1. **Close beads issues** - `bd close <id>` for completed work
|
|
77
|
+
2. **Create follow-up issues** - `bd create` for any remaining work
|
|
78
|
+
3. **Update Backlog.md** - Add summary to Completed section for significant work
|
|
79
|
+
4. **Run quality gates** (if code changed) - Tests, linters, builds
|
|
80
|
+
5. **PUSH TO REMOTE** - This is MANDATORY:
|
|
81
|
+
```bash
|
|
82
|
+
git add -A
|
|
83
|
+
git commit -m "description of work"
|
|
84
|
+
git pull --rebase
|
|
85
|
+
git push
|
|
86
|
+
git status # MUST show "up to date with origin"
|
|
87
|
+
```
|
|
88
|
+
6. **Verify** - All changes committed AND pushed
|
|
89
|
+
7. **Hand off** - Provide context for next session
|
|
90
|
+
|
|
91
|
+
**CRITICAL RULES:**
|
|
92
|
+
- Work is NOT complete until `git push` succeeds
|
|
93
|
+
- NEVER stop before pushing - that leaves work stranded locally
|
|
94
|
+
- NEVER say "ready to push when you are" - YOU must push
|
|
95
|
+
- If push fails, resolve and retry until it succeeds
|
package/templates/Backlog.md
CHANGED
|
File without changes
|
|
File without changes
|