@every-env/compound-plugin 0.9.0 → 0.12.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/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +5 -1
- package/CHANGELOG.md +42 -0
- package/CLAUDE.md +3 -3
- package/README.md +49 -15
- package/docs/plans/2026-02-14-feat-auto-detect-install-and-gemini-sync-plan.md +360 -0
- package/docs/plans/2026-02-25-feat-windsurf-global-scope-support-plan.md +627 -0
- package/docs/plans/2026-03-01-feat-ce-command-aliases-backwards-compatible-deprecation-plan.md +261 -0
- package/docs/plans/feature_opencode-commands-as-md-and-config-merge.md +574 -0
- package/docs/solutions/adding-converter-target-providers.md +692 -0
- package/docs/solutions/plugin-versioning-requirements.md +3 -3
- package/docs/specs/windsurf.md +477 -0
- package/package.json +1 -1
- package/plans/landing-page-launchkit-refresh.md +2 -2
- package/plugins/compound-engineering/.claude-plugin/plugin.json +2 -2
- package/plugins/compound-engineering/CHANGELOG.md +72 -1
- package/plugins/compound-engineering/CLAUDE.md +9 -7
- package/plugins/compound-engineering/README.md +10 -7
- package/plugins/compound-engineering/agents/research/git-history-analyzer.md +1 -1
- package/plugins/compound-engineering/agents/research/learnings-researcher.md +1 -1
- package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +1 -1
- package/plugins/compound-engineering/commands/ce/brainstorm.md +145 -0
- package/plugins/compound-engineering/commands/ce/compound.md +240 -0
- package/plugins/compound-engineering/commands/ce/plan.md +636 -0
- package/plugins/compound-engineering/commands/ce/review.md +525 -0
- package/plugins/compound-engineering/commands/ce/work.md +470 -0
- package/plugins/compound-engineering/commands/create-agent-skill.md +1 -1
- package/plugins/compound-engineering/commands/deepen-plan.md +6 -6
- package/plugins/compound-engineering/commands/deploy-docs.md +1 -1
- package/plugins/compound-engineering/commands/feature-video.md +15 -6
- package/plugins/compound-engineering/commands/heal-skill.md +1 -1
- package/plugins/compound-engineering/commands/lfg.md +3 -3
- package/plugins/compound-engineering/commands/slfg.md +3 -3
- package/plugins/compound-engineering/commands/test-xcode.md +2 -2
- package/plugins/compound-engineering/commands/workflows/brainstorm.md +4 -123
- package/plugins/compound-engineering/commands/workflows/compound.md +4 -234
- package/plugins/compound-engineering/commands/workflows/plan.md +4 -562
- package/plugins/compound-engineering/commands/workflows/review.md +4 -522
- package/plugins/compound-engineering/commands/workflows/work.md +4 -448
- package/plugins/compound-engineering/skills/brainstorming/SKILL.md +3 -3
- package/plugins/compound-engineering/skills/document-review/SKILL.md +1 -1
- package/plugins/compound-engineering/skills/file-todos/SKILL.md +1 -1
- package/plugins/compound-engineering/skills/git-worktree/SKILL.md +5 -5
- package/plugins/compound-engineering/skills/proof/SKILL.md +185 -0
- package/plugins/compound-engineering/skills/resolve-pr-parallel/SKILL.md +1 -1
- package/plugins/compound-engineering/skills/setup/SKILL.md +2 -2
- package/src/commands/convert.ts +101 -24
- package/src/commands/install.ts +102 -45
- package/src/commands/sync.ts +58 -38
- package/src/converters/claude-to-openclaw.ts +240 -0
- package/src/converters/claude-to-opencode.ts +12 -10
- package/src/converters/claude-to-qwen.ts +238 -0
- package/src/converters/claude-to-windsurf.ts +205 -0
- package/src/sync/gemini.ts +76 -0
- package/src/targets/index.ts +60 -1
- package/src/targets/openclaw.ts +96 -0
- package/src/targets/opencode.ts +76 -10
- package/src/targets/qwen.ts +64 -0
- package/src/targets/windsurf.ts +104 -0
- package/src/types/openclaw.ts +52 -0
- package/src/types/opencode.ts +7 -8
- package/src/types/qwen.ts +48 -0
- package/src/types/windsurf.ts +34 -0
- package/src/utils/detect-tools.ts +46 -0
- package/src/utils/files.ts +7 -0
- package/src/utils/resolve-output.ts +50 -0
- package/src/utils/secrets.ts +24 -0
- package/tests/cli.test.ts +78 -0
- package/tests/converter.test.ts +43 -10
- package/tests/detect-tools.test.ts +96 -0
- package/tests/openclaw-converter.test.ts +200 -0
- package/tests/opencode-writer.test.ts +142 -5
- package/tests/qwen-converter.test.ts +238 -0
- package/tests/resolve-output.test.ts +131 -0
- package/tests/sync-gemini.test.ts +106 -0
- package/tests/windsurf-converter.test.ts +573 -0
- package/tests/windsurf-writer.test.ts +359 -0
- package/docs/css/docs.css +0 -675
- package/docs/css/style.css +0 -2886
- package/docs/index.html +0 -1046
- package/docs/js/main.js +0 -225
- package/docs/pages/agents.html +0 -649
- package/docs/pages/changelog.html +0 -534
- package/docs/pages/commands.html +0 -523
- package/docs/pages/getting-started.html +0 -582
- package/docs/pages/mcp-servers.html +0 -409
- package/docs/pages/skills.html +0 -611
package/docs/js/main.js
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Compounding Engineering Documentation
|
|
3
|
-
* Main JavaScript functionality
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
7
|
-
initMobileNav();
|
|
8
|
-
initSmoothScroll();
|
|
9
|
-
initCopyCode();
|
|
10
|
-
initThemeToggle();
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Mobile Navigation Toggle
|
|
15
|
-
*/
|
|
16
|
-
function initMobileNav() {
|
|
17
|
-
const mobileToggle = document.querySelector('[data-mobile-toggle]');
|
|
18
|
-
const navigation = document.querySelector('[data-navigation]');
|
|
19
|
-
|
|
20
|
-
if (!mobileToggle || !navigation) return;
|
|
21
|
-
|
|
22
|
-
mobileToggle.addEventListener('click', () => {
|
|
23
|
-
navigation.classList.toggle('open');
|
|
24
|
-
mobileToggle.classList.toggle('active');
|
|
25
|
-
|
|
26
|
-
// Update aria-expanded
|
|
27
|
-
const isOpen = navigation.classList.contains('open');
|
|
28
|
-
mobileToggle.setAttribute('aria-expanded', isOpen);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// Close menu when clicking outside
|
|
32
|
-
document.addEventListener('click', (event) => {
|
|
33
|
-
if (!mobileToggle.contains(event.target) && !navigation.contains(event.target)) {
|
|
34
|
-
navigation.classList.remove('open');
|
|
35
|
-
mobileToggle.classList.remove('active');
|
|
36
|
-
mobileToggle.setAttribute('aria-expanded', 'false');
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// Close menu when clicking a nav link
|
|
41
|
-
navigation.querySelectorAll('.nav-link').forEach(link => {
|
|
42
|
-
link.addEventListener('click', () => {
|
|
43
|
-
navigation.classList.remove('open');
|
|
44
|
-
mobileToggle.classList.remove('active');
|
|
45
|
-
mobileToggle.setAttribute('aria-expanded', 'false');
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Smooth Scroll for Anchor Links
|
|
52
|
-
*/
|
|
53
|
-
function initSmoothScroll() {
|
|
54
|
-
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
55
|
-
anchor.addEventListener('click', function(e) {
|
|
56
|
-
const targetId = this.getAttribute('href');
|
|
57
|
-
if (targetId === '#') return;
|
|
58
|
-
|
|
59
|
-
const targetElement = document.querySelector(targetId);
|
|
60
|
-
if (!targetElement) return;
|
|
61
|
-
|
|
62
|
-
e.preventDefault();
|
|
63
|
-
|
|
64
|
-
const navHeight = document.querySelector('.nav-container')?.offsetHeight || 0;
|
|
65
|
-
const targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset - navHeight - 24;
|
|
66
|
-
|
|
67
|
-
window.scrollTo({
|
|
68
|
-
top: targetPosition,
|
|
69
|
-
behavior: 'smooth'
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// Update URL without jumping
|
|
73
|
-
history.pushState(null, null, targetId);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Copy Code Functionality
|
|
80
|
-
*/
|
|
81
|
-
function initCopyCode() {
|
|
82
|
-
document.querySelectorAll('.card-code-block').forEach(block => {
|
|
83
|
-
// Create copy button
|
|
84
|
-
const copyBtn = document.createElement('button');
|
|
85
|
-
copyBtn.className = 'copy-btn';
|
|
86
|
-
copyBtn.innerHTML = '<i class="fa-regular fa-copy"></i>';
|
|
87
|
-
copyBtn.setAttribute('aria-label', 'Copy code');
|
|
88
|
-
copyBtn.setAttribute('title', 'Copy to clipboard');
|
|
89
|
-
|
|
90
|
-
// Style the button
|
|
91
|
-
copyBtn.style.cssText = `
|
|
92
|
-
position: absolute;
|
|
93
|
-
top: 8px;
|
|
94
|
-
right: 8px;
|
|
95
|
-
padding: 6px 10px;
|
|
96
|
-
background: rgba(255, 255, 255, 0.1);
|
|
97
|
-
border: none;
|
|
98
|
-
border-radius: 6px;
|
|
99
|
-
color: #94a3b8;
|
|
100
|
-
cursor: pointer;
|
|
101
|
-
opacity: 0;
|
|
102
|
-
transition: all 0.2s ease;
|
|
103
|
-
font-size: 14px;
|
|
104
|
-
`;
|
|
105
|
-
|
|
106
|
-
// Make parent relative for positioning
|
|
107
|
-
block.style.position = 'relative';
|
|
108
|
-
block.appendChild(copyBtn);
|
|
109
|
-
|
|
110
|
-
// Show/hide on hover
|
|
111
|
-
block.addEventListener('mouseenter', () => {
|
|
112
|
-
copyBtn.style.opacity = '1';
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
block.addEventListener('mouseleave', () => {
|
|
116
|
-
copyBtn.style.opacity = '0';
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
// Copy functionality
|
|
120
|
-
copyBtn.addEventListener('click', async () => {
|
|
121
|
-
const code = block.querySelector('code');
|
|
122
|
-
if (!code) return;
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
await navigator.clipboard.writeText(code.textContent);
|
|
126
|
-
copyBtn.innerHTML = '<i class="fa-solid fa-check"></i>';
|
|
127
|
-
copyBtn.style.color = '#34d399';
|
|
128
|
-
|
|
129
|
-
setTimeout(() => {
|
|
130
|
-
copyBtn.innerHTML = '<i class="fa-regular fa-copy"></i>';
|
|
131
|
-
copyBtn.style.color = '#94a3b8';
|
|
132
|
-
}, 2000);
|
|
133
|
-
} catch (err) {
|
|
134
|
-
console.error('Failed to copy:', err);
|
|
135
|
-
copyBtn.innerHTML = '<i class="fa-solid fa-xmark"></i>';
|
|
136
|
-
copyBtn.style.color = '#f87171';
|
|
137
|
-
|
|
138
|
-
setTimeout(() => {
|
|
139
|
-
copyBtn.innerHTML = '<i class="fa-regular fa-copy"></i>';
|
|
140
|
-
copyBtn.style.color = '#94a3b8';
|
|
141
|
-
}, 2000);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Theme Toggle (Light/Dark)
|
|
149
|
-
*/
|
|
150
|
-
function initThemeToggle() {
|
|
151
|
-
// Check for saved theme preference or default to dark
|
|
152
|
-
const savedTheme = localStorage.getItem('theme') || 'dark';
|
|
153
|
-
document.documentElement.className = `theme-${savedTheme}`;
|
|
154
|
-
|
|
155
|
-
// Create theme toggle button if it doesn't exist
|
|
156
|
-
const existingToggle = document.querySelector('[data-theme-toggle]');
|
|
157
|
-
if (existingToggle) {
|
|
158
|
-
existingToggle.addEventListener('click', toggleTheme);
|
|
159
|
-
updateThemeToggleIcon(existingToggle, savedTheme);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function toggleTheme() {
|
|
164
|
-
const html = document.documentElement;
|
|
165
|
-
const currentTheme = html.classList.contains('theme-dark') ? 'dark' : 'light';
|
|
166
|
-
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
|
167
|
-
|
|
168
|
-
html.className = `theme-${newTheme}`;
|
|
169
|
-
localStorage.setItem('theme', newTheme);
|
|
170
|
-
|
|
171
|
-
const toggle = document.querySelector('[data-theme-toggle]');
|
|
172
|
-
if (toggle) {
|
|
173
|
-
updateThemeToggleIcon(toggle, newTheme);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function updateThemeToggleIcon(toggle, theme) {
|
|
178
|
-
const icon = toggle.querySelector('i');
|
|
179
|
-
if (icon) {
|
|
180
|
-
icon.className = theme === 'dark' ? 'fa-solid fa-sun' : 'fa-solid fa-moon';
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Intersection Observer for Animation on Scroll
|
|
186
|
-
*/
|
|
187
|
-
function initScrollAnimations() {
|
|
188
|
-
const observerOptions = {
|
|
189
|
-
threshold: 0.1,
|
|
190
|
-
rootMargin: '0px 0px -50px 0px'
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
const observer = new IntersectionObserver((entries) => {
|
|
194
|
-
entries.forEach(entry => {
|
|
195
|
-
if (entry.isIntersecting) {
|
|
196
|
-
entry.target.classList.add('visible');
|
|
197
|
-
observer.unobserve(entry.target);
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
}, observerOptions);
|
|
201
|
-
|
|
202
|
-
document.querySelectorAll('.agent-card, .command-card, .skill-card, .mcp-card, .stat-card').forEach(card => {
|
|
203
|
-
card.style.opacity = '0';
|
|
204
|
-
card.style.transform = 'translateY(20px)';
|
|
205
|
-
card.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
|
|
206
|
-
observer.observe(card);
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Add visible class styles
|
|
211
|
-
const style = document.createElement('style');
|
|
212
|
-
style.textContent = `
|
|
213
|
-
.agent-card.visible,
|
|
214
|
-
.command-card.visible,
|
|
215
|
-
.skill-card.visible,
|
|
216
|
-
.mcp-card.visible,
|
|
217
|
-
.stat-card.visible {
|
|
218
|
-
opacity: 1 !important;
|
|
219
|
-
transform: translateY(0) !important;
|
|
220
|
-
}
|
|
221
|
-
`;
|
|
222
|
-
document.head.appendChild(style);
|
|
223
|
-
|
|
224
|
-
// Initialize scroll animations after a short delay
|
|
225
|
-
setTimeout(initScrollAnimations, 100);
|