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