@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.
Files changed (87) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +5 -1
  3. package/CHANGELOG.md +42 -0
  4. package/CLAUDE.md +3 -3
  5. package/README.md +49 -15
  6. package/docs/plans/2026-02-14-feat-auto-detect-install-and-gemini-sync-plan.md +360 -0
  7. package/docs/plans/2026-02-25-feat-windsurf-global-scope-support-plan.md +627 -0
  8. package/docs/plans/2026-03-01-feat-ce-command-aliases-backwards-compatible-deprecation-plan.md +261 -0
  9. package/docs/plans/feature_opencode-commands-as-md-and-config-merge.md +574 -0
  10. package/docs/solutions/adding-converter-target-providers.md +692 -0
  11. package/docs/solutions/plugin-versioning-requirements.md +3 -3
  12. package/docs/specs/windsurf.md +477 -0
  13. package/package.json +1 -1
  14. package/plans/landing-page-launchkit-refresh.md +2 -2
  15. package/plugins/compound-engineering/.claude-plugin/plugin.json +2 -2
  16. package/plugins/compound-engineering/CHANGELOG.md +72 -1
  17. package/plugins/compound-engineering/CLAUDE.md +9 -7
  18. package/plugins/compound-engineering/README.md +10 -7
  19. package/plugins/compound-engineering/agents/research/git-history-analyzer.md +1 -1
  20. package/plugins/compound-engineering/agents/research/learnings-researcher.md +1 -1
  21. package/plugins/compound-engineering/agents/review/code-simplicity-reviewer.md +1 -1
  22. package/plugins/compound-engineering/commands/ce/brainstorm.md +145 -0
  23. package/plugins/compound-engineering/commands/ce/compound.md +240 -0
  24. package/plugins/compound-engineering/commands/ce/plan.md +636 -0
  25. package/plugins/compound-engineering/commands/ce/review.md +525 -0
  26. package/plugins/compound-engineering/commands/ce/work.md +470 -0
  27. package/plugins/compound-engineering/commands/create-agent-skill.md +1 -1
  28. package/plugins/compound-engineering/commands/deepen-plan.md +6 -6
  29. package/plugins/compound-engineering/commands/deploy-docs.md +1 -1
  30. package/plugins/compound-engineering/commands/feature-video.md +15 -6
  31. package/plugins/compound-engineering/commands/heal-skill.md +1 -1
  32. package/plugins/compound-engineering/commands/lfg.md +3 -3
  33. package/plugins/compound-engineering/commands/slfg.md +3 -3
  34. package/plugins/compound-engineering/commands/test-xcode.md +2 -2
  35. package/plugins/compound-engineering/commands/workflows/brainstorm.md +4 -123
  36. package/plugins/compound-engineering/commands/workflows/compound.md +4 -234
  37. package/plugins/compound-engineering/commands/workflows/plan.md +4 -562
  38. package/plugins/compound-engineering/commands/workflows/review.md +4 -522
  39. package/plugins/compound-engineering/commands/workflows/work.md +4 -448
  40. package/plugins/compound-engineering/skills/brainstorming/SKILL.md +3 -3
  41. package/plugins/compound-engineering/skills/document-review/SKILL.md +1 -1
  42. package/plugins/compound-engineering/skills/file-todos/SKILL.md +1 -1
  43. package/plugins/compound-engineering/skills/git-worktree/SKILL.md +5 -5
  44. package/plugins/compound-engineering/skills/proof/SKILL.md +185 -0
  45. package/plugins/compound-engineering/skills/resolve-pr-parallel/SKILL.md +1 -1
  46. package/plugins/compound-engineering/skills/setup/SKILL.md +2 -2
  47. package/src/commands/convert.ts +101 -24
  48. package/src/commands/install.ts +102 -45
  49. package/src/commands/sync.ts +58 -38
  50. package/src/converters/claude-to-openclaw.ts +240 -0
  51. package/src/converters/claude-to-opencode.ts +12 -10
  52. package/src/converters/claude-to-qwen.ts +238 -0
  53. package/src/converters/claude-to-windsurf.ts +205 -0
  54. package/src/sync/gemini.ts +76 -0
  55. package/src/targets/index.ts +60 -1
  56. package/src/targets/openclaw.ts +96 -0
  57. package/src/targets/opencode.ts +76 -10
  58. package/src/targets/qwen.ts +64 -0
  59. package/src/targets/windsurf.ts +104 -0
  60. package/src/types/openclaw.ts +52 -0
  61. package/src/types/opencode.ts +7 -8
  62. package/src/types/qwen.ts +48 -0
  63. package/src/types/windsurf.ts +34 -0
  64. package/src/utils/detect-tools.ts +46 -0
  65. package/src/utils/files.ts +7 -0
  66. package/src/utils/resolve-output.ts +50 -0
  67. package/src/utils/secrets.ts +24 -0
  68. package/tests/cli.test.ts +78 -0
  69. package/tests/converter.test.ts +43 -10
  70. package/tests/detect-tools.test.ts +96 -0
  71. package/tests/openclaw-converter.test.ts +200 -0
  72. package/tests/opencode-writer.test.ts +142 -5
  73. package/tests/qwen-converter.test.ts +238 -0
  74. package/tests/resolve-output.test.ts +131 -0
  75. package/tests/sync-gemini.test.ts +106 -0
  76. package/tests/windsurf-converter.test.ts +573 -0
  77. package/tests/windsurf-writer.test.ts +359 -0
  78. package/docs/css/docs.css +0 -675
  79. package/docs/css/style.css +0 -2886
  80. package/docs/index.html +0 -1046
  81. package/docs/js/main.js +0 -225
  82. package/docs/pages/agents.html +0 -649
  83. package/docs/pages/changelog.html +0 -534
  84. package/docs/pages/commands.html +0 -523
  85. package/docs/pages/getting-started.html +0 -582
  86. package/docs/pages/mcp-servers.html +0 -409
  87. 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);