super-opencode 1.1.2 → 1.2.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 (48) hide show
  1. package/.opencode/agents/architect.md +54 -31
  2. package/.opencode/agents/backend.md +61 -34
  3. package/.opencode/agents/data-agent.md +422 -0
  4. package/.opencode/agents/devops-agent.md +331 -0
  5. package/.opencode/agents/frontend.md +63 -36
  6. package/.opencode/agents/mobile-agent.md +636 -0
  7. package/.opencode/agents/optimizer.md +25 -18
  8. package/.opencode/agents/pm-agent.md +114 -50
  9. package/.opencode/agents/quality.md +36 -29
  10. package/.opencode/agents/researcher.md +30 -21
  11. package/.opencode/agents/reviewer.md +39 -32
  12. package/.opencode/agents/security.md +42 -34
  13. package/.opencode/agents/writer.md +42 -31
  14. package/.opencode/commands/soc-analyze.md +55 -31
  15. package/.opencode/commands/soc-brainstorm.md +48 -26
  16. package/.opencode/commands/soc-cleanup.md +47 -25
  17. package/.opencode/commands/soc-deploy.md +271 -0
  18. package/.opencode/commands/soc-design.md +51 -26
  19. package/.opencode/commands/soc-explain.md +46 -23
  20. package/.opencode/commands/soc-git.md +47 -25
  21. package/.opencode/commands/soc-help.md +35 -14
  22. package/.opencode/commands/soc-implement.md +59 -29
  23. package/.opencode/commands/soc-improve.md +42 -20
  24. package/.opencode/commands/soc-onboard.md +329 -0
  25. package/.opencode/commands/soc-plan.md +215 -0
  26. package/.opencode/commands/soc-pm.md +40 -18
  27. package/.opencode/commands/soc-research.md +43 -20
  28. package/.opencode/commands/soc-review.md +39 -18
  29. package/.opencode/commands/soc-test.md +43 -21
  30. package/.opencode/commands/soc-validate.md +221 -0
  31. package/.opencode/commands/soc-workflow.md +38 -17
  32. package/.opencode/skills/confidence-check/SKILL.md +26 -19
  33. package/.opencode/skills/debug-protocol/SKILL.md +27 -17
  34. package/.opencode/skills/decision-log/SKILL.md +236 -0
  35. package/.opencode/skills/doc-sync/SKILL.md +345 -0
  36. package/.opencode/skills/package-manager/SKILL.md +502 -0
  37. package/.opencode/skills/package-manager/scripts/README.md +106 -0
  38. package/.opencode/skills/package-manager/scripts/detect-package-manager.sh +796 -0
  39. package/.opencode/skills/reflexion/SKILL.md +18 -11
  40. package/.opencode/skills/security-audit/SKILL.md +19 -14
  41. package/.opencode/skills/self-check/SKILL.md +30 -14
  42. package/.opencode/skills/simplification/SKILL.md +19 -5
  43. package/.opencode/skills/tech-debt/SKILL.md +245 -0
  44. package/LICENSE +1 -1
  45. package/README.md +126 -9
  46. package/dist/cli.js +143 -41
  47. package/package.json +27 -12
  48. package/.opencode/settings.json +0 -3
package/README.md CHANGED
@@ -16,7 +16,7 @@ Super-OpenCode provides a structured framework for AI-assisted software developm
16
16
 
17
17
  ### Prerequisites
18
18
 
19
- - Node.js 18+
19
+ - Node.js 18+
20
20
  - npm, pnpm, or yarn
21
21
 
22
22
  ### Quick Install
@@ -32,6 +32,7 @@ super-opencode
32
32
  ```
33
33
 
34
34
  The installer will guide you through:
35
+
35
36
  1. Choosing installation scope (global or project)
36
37
  2. Selecting components to install (agents, commands, skills, core)
37
38
  3. Configuring optional MCP servers (Context7, Serena, Tavily, etc.)
@@ -39,8 +40,15 @@ The installer will guide you through:
39
40
  ### Manual Install
40
41
 
41
42
  After npm install, the framework files will be available at:
42
- - **Global**: `~/.opencode/`
43
- - **Project**: `./opencode.json` in your project directory
43
+
44
+ **Global Installation:**
45
+
46
+ - **Linux/macOS**: `~/.config/opencode/`
47
+ - **Windows**: `%APPDATA%\opencode\`
48
+
49
+ **Project Installation:**
50
+
51
+ - **All Platforms**: Files are copied to the current working directory under `.opencode/` and `AGENTS.md`
44
52
 
45
53
  ## Features
46
54
 
@@ -71,6 +79,7 @@ Reusable capabilities that agents can invoke:
71
79
  - **reflexion**: Post-action analysis and learning
72
80
  - **debug-protocol**: Root cause analysis workflow
73
81
  - **simplification**: Complexity reduction
82
+ - **package-manager**: Multi-language package manager detection (npm, yarn, pnpm, poetry, cargo, and 40+ more)
74
83
 
75
84
  ### Slash Commands
76
85
 
@@ -91,11 +100,62 @@ Pre-built workflows for common tasks:
91
100
  - `/soc-improve` - Continuous improvement
92
101
  - `/soc-help` - Help and documentation
93
102
 
103
+ ### Package Manager Detection
104
+
105
+ Super-OpenCode includes a powerful multi-language package manager detection system that automatically identifies the correct package manager for any project:
106
+
107
+ **Supported Languages:** JavaScript/TypeScript, Python, Go, Rust, Java, Ruby, PHP, .NET, Elixir, Haskell, C/C++, Swift, Scala, Clojure, Julia, R
108
+
109
+ **Quick Usage:**
110
+
111
+ ```bash
112
+ # After installing super-opencode
113
+ detect-pm
114
+
115
+ # Or use directly from node_modules
116
+ npx super-opencode detect-pm
117
+
118
+ # Get JSON output for CI/CD
119
+ detect-pm --json
120
+
121
+ # Detect specific language
122
+ detect-pm python
123
+ detect-pm javascript
124
+ ```
125
+
126
+ **Example Output:**
127
+
128
+ ```json
129
+ {
130
+ "languages": [
131
+ {
132
+ "language": "javascript",
133
+ "package_manager": "pnpm",
134
+ "confidence": 95,
135
+ "commands": {
136
+ "install": "pnpm install --frozen-lockfile",
137
+ "add": "pnpm add"
138
+ }
139
+ }
140
+ ]
141
+ }
142
+ ```
143
+
144
+ **CI/CD Integration:**
145
+
146
+ ```yaml
147
+ - name: Detect Package Manager
148
+ run: |
149
+ PM=$(npx detect-pm --recommend)
150
+ $PM install
151
+ ```
152
+
94
153
  ### MCP Server Integration
95
154
 
96
155
  The framework supports configuration of various MCP servers:
97
156
 
98
157
  **Recommended (Core)**:
158
+
99
159
  - Context7 - Official documentation lookup
100
160
  - Serena - Codebase analysis and navigation
101
161
  - Tavily Search - Web search for research
@@ -103,6 +163,7 @@ The framework supports configuration of various MCP servers:
103
163
  - Sequential Thinking - Multi-step reasoning
104
164
 
105
165
  **Optional**:
166
+
106
167
  - GitHub - GitHub API integration
107
168
  - SQLite - Database operations
108
169
  - Chrome DevTools - Browser debugging
@@ -146,21 +207,25 @@ super-opencode/
146
207
  ### Example Workflows
147
208
 
148
209
  #### Implement a Feature
210
+
149
211
  ```bash
150
212
  /soc-implement "User Authentication" --agent backend
151
213
  ```
152
214
 
153
215
  #### Design a System
216
+
154
217
  ```bash
155
218
  /soc-design "Microservices Architecture"
156
219
  ```
157
220
 
158
221
  #### Code Review
222
+
159
223
  ```bash
160
224
  /soc-review
161
225
  ```
162
226
 
163
227
  #### Research
228
+
164
229
  ```bash
165
230
  /soc-research "Best practices for React state management"
166
231
  ```
@@ -170,25 +235,30 @@ super-opencode/
170
235
  Super-OpenCode enforces a structured development approach:
171
236
 
172
237
  ### 1. Evidence-Based Development
238
+
173
239
  - Always verify with official sources
174
240
  - Use context7 MCP for documentation lookup
175
241
  - Check existing code before implementing
176
242
  - Never guess or make assumptions
177
243
 
178
244
  ### 2. Confidence-First Implementation
245
+
179
246
  - Check confidence before starting work
180
247
  - **≄90%**: Proceed with implementation
181
248
  - **70-89%**: Investigate more, present alternatives
182
249
  - **<70%**: STOP - ask questions, gather context
183
250
 
184
251
  ### 3. Parallel-First Execution
252
+
185
253
  - Use Wave → Checkpoint → Wave pattern
186
254
  - Batch read operations together
187
255
  - Analyze together before editing
188
256
  - 3.5x faster than sequential execution
189
257
 
190
258
  ### 4. Self-Correction Protocol
259
+
191
260
  When errors occur:
261
+
192
262
  1. STOP - Don't retry immediately
193
263
  2. INVESTIGATE - Research root cause
194
264
  3. HYPOTHESIZE - Form theory with evidence
@@ -200,44 +270,91 @@ When errors occur:
200
270
 
201
271
  ### OpenCode Configuration
202
272
 
203
- After installation, configuration is stored in:
204
- - **Global**: `~/.config/opencode/opencode.json`
205
- - **Project**: `./opencode.json`
273
+ After installation, configuration is stored in platform-specific locations:
274
+
275
+ **Global Configuration:**
276
+
277
+ - **Linux**: `~/.config/opencode/opencode.json` (follows XDG Base Directory Specification)
278
+ - **macOS**: `~/Library/Application Support/opencode/opencode.json`
279
+ - **Windows**: `%APPDATA%\opencode\opencode.json` (typically `C:\Users\<username>\AppData\Roaming\opencode\opencode.json`)
280
+
281
+ **Project Configuration:**
282
+
283
+ - **All Platforms**: `./opencode.json` in your project root
284
+
285
+ **Environment Variables:**
286
+
287
+ - `OPENCODE_CONFIG_DIR`: Override the global config directory
288
+ - `OPENCODE_CONFIG`: Override the full path to the config file
289
+ - `OPENCODE_CONFIG_CONTENT`: Provide inline JSON configuration
290
+
291
+ ### Framework Installation Locations
292
+
293
+ When installing Super-OpenCode globally:
294
+
295
+ - **Linux**: `~/.config/opencode/` (follows XDG Base Directory Specification)
296
+ - **macOS**: `~/.config/opencode/` (same as Linux for consistency with OpenCode)
297
+ - **Windows**: `%APPDATA%\opencode\` (typically `C:\Users\<username>\AppData\Roaming\opencode\`)
298
+
299
+ **Note**: Framework files (agents, commands, skills) are stored alongside the OpenCode config file for easy access.
300
+
301
+ **Project Installation:**
302
+
303
+ - **All Platforms**: Current working directory (where you run the installer)
206
304
 
207
305
  ### MCP Server Configuration
208
306
 
209
- MCP servers are configured in the `mcp` section of your config:
307
+ MCP servers are configured in the `mcp` section of your config. According to the [OpenCode MCP documentation](https://opencode.ai/docs/mcp-servers):
210
308
 
211
309
  ```json
212
310
  {
311
+ "$schema": "https://opencode.ai/config.json",
213
312
  "mcp": {
214
313
  "context7": {
215
314
  "type": "local",
216
- "command": ["npx", "-y", "@upstash/context7-mcp"]
315
+ "command": ["npx", "-y", "@upstash/context7-mcp"],
316
+ "enabled": true
217
317
  },
218
318
  "filesystem": {
219
319
  "type": "local",
220
- "command": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
320
+ "command": [
321
+ "npx",
322
+ "-y",
323
+ "@modelcontextprotocol/server-filesystem",
324
+ "/path/to/project"
325
+ ]
326
+ },
327
+ "tavily": {
328
+ "type": "local",
329
+ "command": ["npx", "-y", "tavily-mcp@latest"],
330
+ "environment": {
331
+ "TAVILY_API_KEY": "your-api-key"
332
+ }
221
333
  }
222
334
  }
223
335
  }
224
336
  ```
225
337
 
338
+ **Note**: MCP servers can be enabled/disabled per agent by modifying the agent configuration. For more details, see the [official OpenCode MCP docs](https://opencode.ai/docs/mcp-servers).
339
+
226
340
  ## Quality Standards
227
341
 
228
342
  ### Code Quality
343
+
229
344
  - All public functions require docstrings
230
345
  - Use type hints where supported
231
346
  - Follow existing project patterns
232
347
  - Include usage examples for complex functions
233
348
 
234
349
  ### Documentation Quality
350
+
235
351
  - Current with "Last Verified" dates
236
352
  - Minimal but necessary information
237
353
  - Clear with concrete examples
238
354
  - Practical and copy-paste ready
239
355
 
240
356
  ### Testing Standards
357
+
241
358
  - Write tests for new functionality
242
359
  - Aim for >80% code coverage
243
360
  - Include edge cases and error conditions
package/dist/cli.js CHANGED
@@ -10,26 +10,80 @@ import ora from "ora";
10
10
  const __filename = fileURLToPath(import.meta.url);
11
11
  const __dirname = path.dirname(__filename);
12
12
  const FRAMEWORK_DIR = path.join(__dirname, "..");
13
- const MCP_KEY = "mcp";
14
- const MCP_SERVERS_KEY = "mcpServers";
15
- const CONFIG_FILENAME = "opencode.json";
16
- const FALLBACK_FILENAME = "mcp_settings.json";
17
13
  /**
18
- * Validates that a resolved path is within the allowed base directory
19
- * @throws Error if path traversal is detected
14
+ * Get the platform-specific global configuration directory for OpenCode
15
+ * Follows XDG Base Directory Specification on Linux, standard locations on macOS and Windows
20
16
  */
21
- function resolveSafePath(baseDir, targetPath) {
22
- const resolvedBase = path.resolve(baseDir);
23
- const resolvedTarget = path.resolve(targetPath);
24
- // Normalize paths for cross-platform comparison
25
- const normalizedBase = path.normalize(resolvedBase).toLowerCase();
26
- const normalizedTarget = path.normalize(resolvedTarget).toLowerCase();
27
- if (!normalizedTarget.startsWith(normalizedBase + path.sep) &&
28
- normalizedTarget !== normalizedBase) {
29
- throw new Error(`Path traversal detected: ${resolvedTarget} is outside ${resolvedBase}`);
17
+ function getGlobalConfigDir() {
18
+ const platform = os.platform();
19
+ const homeDir = os.homedir();
20
+ // Check for OPENCODE_CONFIG_DIR environment variable first
21
+ const envConfigDir = process.env.OPENCODE_CONFIG_DIR;
22
+ if (envConfigDir) {
23
+ return path.resolve(envConfigDir);
24
+ }
25
+ if (platform === "win32") {
26
+ // Windows: %APPDATA%\opencode or %LOCALAPPDATA%\opencode
27
+ const appData = process.env.APPDATA || path.join(homeDir, "AppData", "Roaming");
28
+ return path.join(appData, "opencode");
29
+ }
30
+ else {
31
+ // macOS and Linux: use ~/.config/opencode per spec
32
+ const xdgConfigHome = process.env.XDG_CONFIG_HOME;
33
+ if (xdgConfigHome) {
34
+ return path.join(xdgConfigHome, "opencode");
35
+ }
36
+ // Default: ~/.config/opencode
37
+ return path.join(homeDir, ".config", "opencode");
30
38
  }
31
- return resolvedTarget;
32
39
  }
40
+ /**
41
+ * Get the framework installation directory
42
+ * Returns the appropriate directory based on installation scope
43
+ *
44
+ * Note: According to OpenCode spec, framework files (agents, skills, commands)
45
+ * should be in ~/.config/opencode/ alongside the opencode.json config file
46
+ */
47
+ function getFrameworkInstallDir(scope) {
48
+ if (scope === "global") {
49
+ // For global installations, use the config directory (NOT data directory)
50
+ // This places agents/, skills/, commands/ alongside opencode.json
51
+ return getGlobalConfigDir();
52
+ }
53
+ // For project installations, use current working directory
54
+ return process.cwd();
55
+ }
56
+ /**
57
+ * Get the path to the opencode.json configuration file
58
+ */
59
+ function getConfigFilePath(scope, targetDir) {
60
+ if (scope === "global") {
61
+ return path.join(getGlobalConfigDir(), CONFIG_FILENAME);
62
+ }
63
+ return path.join(targetDir, CONFIG_FILENAME);
64
+ }
65
+ /**
66
+ * Get the default allowed paths for Filesystem MCP based on platform
67
+ */
68
+ function getDefaultFilesystemPaths(targetDir) {
69
+ const platform = os.platform();
70
+ const homeDir = os.homedir();
71
+ // Always include the target project directory
72
+ const paths = [targetDir];
73
+ if (platform === "win32") {
74
+ // Windows: include Documents folder and home
75
+ paths.push(path.join(homeDir, "Documents"));
76
+ }
77
+ else {
78
+ // Unix-like: include home directory
79
+ paths.push(homeDir);
80
+ }
81
+ return paths;
82
+ }
83
+ const MCP_KEY = "mcp";
84
+ const MCP_SERVERS_KEY = "mcpServers";
85
+ const CONFIG_FILENAME = "opencode.json";
86
+ const FALLBACK_FILENAME = "mcp_settings.json";
33
87
  function sanitizePaths(pathInput) {
34
88
  const paths = pathInput
35
89
  .split(",")
@@ -152,8 +206,15 @@ function getMcpServerConfig(serverId, envVars, targetDir) {
152
206
  return configs[serverId];
153
207
  }
154
208
  async function copyFile(src, dest, targetDir, overwrite) {
155
- const srcPath = resolveSafePath(FRAMEWORK_DIR, src);
156
- const destPath = resolveSafePath(targetDir, dest);
209
+ const srcPath = path.join(FRAMEWORK_DIR, src);
210
+ const destPath = path.join(targetDir, dest);
211
+ // Only validate destination path (user-controlled)
212
+ const resolvedDest = path.resolve(destPath);
213
+ const resolvedTarget = path.resolve(targetDir);
214
+ if (!resolvedDest.startsWith(resolvedTarget + path.sep) &&
215
+ resolvedDest !== resolvedTarget) {
216
+ throw new Error(`Path traversal detected: ${resolvedDest} is outside ${resolvedTarget}`);
217
+ }
157
218
  if (await fs.pathExists(srcPath)) {
158
219
  try {
159
220
  await fs.copy(srcPath, destPath, { overwrite });
@@ -166,12 +227,17 @@ async function copyFile(src, dest, targetDir, overwrite) {
166
227
  }
167
228
  }
168
229
  }
169
- async function installModules(modules, targetDir, overwrite) {
230
+ async function installModules(modules, targetDir, overwrite, scope) {
231
+ // For global installs, copy directly to targetDir/agents (no .opencode wrapper)
232
+ // For project installs, copy to targetDir/.opencode/agents
233
+ const agentsDest = scope === "global" ? "agents" : ".opencode/agents";
234
+ const commandsDest = scope === "global" ? "commands" : ".opencode/commands";
235
+ const skillsDest = scope === "global" ? "skills" : ".opencode/skills";
170
236
  const moduleMap = {
171
237
  core: ["README.md", "README.md"],
172
- agents: [".opencode/agents", ".opencode/agents"],
173
- commands: [".opencode/commands", ".opencode/commands"],
174
- skills: [".opencode/skills", ".opencode/skills"],
238
+ agents: [".opencode/agents", agentsDest],
239
+ commands: [".opencode/commands", commandsDest],
240
+ skills: [".opencode/skills", skillsDest],
175
241
  };
176
242
  for (const module of modules) {
177
243
  const [src, dest] = moduleMap[module] || [];
@@ -181,7 +247,6 @@ async function installModules(modules, targetDir, overwrite) {
181
247
  await fs.ensureDir(path.join(targetDir, ".opencode"));
182
248
  await copyFile("AGENTS.md", "AGENTS.md", targetDir, overwrite);
183
249
  await copyFile("LICENSE", "LICENSE", targetDir, overwrite);
184
- await copyFile(".opencode/settings.json", ".opencode/settings.json", targetDir, overwrite);
185
250
  }
186
251
  }
187
252
  }
@@ -237,22 +302,43 @@ async function collectEnvVars(serverDef) {
237
302
  return envVars;
238
303
  }
239
304
  async function configureFilesystemMcp(targetDir) {
305
+ const defaultPaths = getDefaultFilesystemPaths(targetDir);
240
306
  const { allowedPaths: pathsInput } = await inquirer.prompt([
241
307
  {
242
308
  type: "input",
243
309
  name: "allowedPaths",
244
310
  message: "Enter absolute paths for Filesystem MCP (comma separated):",
245
- default: targetDir,
311
+ default: defaultPaths.join(", "),
246
312
  },
247
313
  ]);
248
314
  const sanitizedPaths = sanitizePaths(pathsInput);
315
+ // Validate that paths exist and are accessible
316
+ const validPaths = [];
317
+ for (const p of sanitizedPaths) {
318
+ try {
319
+ const stats = await fs.stat(p);
320
+ if (stats.isDirectory()) {
321
+ validPaths.push(p);
322
+ }
323
+ else {
324
+ console.warn(chalk.yellow(`āš ļø Skipping non-directory path: ${p}`));
325
+ }
326
+ }
327
+ catch {
328
+ console.warn(chalk.yellow(`āš ļø Path does not exist or is not accessible: ${p}`));
329
+ }
330
+ }
331
+ if (validPaths.length === 0) {
332
+ console.warn(chalk.yellow("āš ļø No valid paths provided. Using target directory only."));
333
+ validPaths.push(targetDir);
334
+ }
249
335
  return {
250
336
  type: "local",
251
337
  command: [
252
338
  "npx",
253
339
  "-y",
254
340
  "@modelcontextprotocol/server-filesystem",
255
- ...sanitizedPaths,
341
+ ...validPaths,
256
342
  ],
257
343
  };
258
344
  }
@@ -276,9 +362,7 @@ async function collectMcpServerConfigs(selectedServers, targetDir) {
276
362
  return mcpServers;
277
363
  }
278
364
  async function writeMcpConfiguration(mcpServers, scope, targetDir) {
279
- const configPath = scope === "global"
280
- ? path.join(os.homedir(), ".config", "opencode", CONFIG_FILENAME)
281
- : path.join(targetDir, CONFIG_FILENAME);
365
+ const configPath = getConfigFilePath(scope, targetDir);
282
366
  let finalSettings = {};
283
367
  let writeTarget = configPath;
284
368
  if (scope === "global") {
@@ -325,26 +409,38 @@ async function handleMcpInstallation(scope, targetDir) {
325
409
  }
326
410
  async function main() {
327
411
  console.log(chalk.cyan.bold("\nšŸš€ Welcome to Super-OpenCode Installer\n"));
412
+ // Show platform info
413
+ const platform = os.platform();
414
+ const homeDir = os.homedir();
415
+ console.log(chalk.gray(`Platform: ${platform} | Home: ${homeDir}\n`));
416
+ // Display installation options info before selection
417
+ console.log(chalk.cyan("šŸ“¦ Installation Options:\n"));
418
+ console.log(chalk.white("šŸŒ Global Install (Recommended)"));
419
+ console.log(chalk.gray(` Framework: ${getGlobalConfigDir()}`));
420
+ console.log(chalk.gray(` Config: ${path.join(getGlobalConfigDir(), "opencode.json")}`));
421
+ console.log(chalk.gray(` Available for all projects\n`));
422
+ console.log(chalk.white("šŸ“ Project Install (Current Directory)"));
423
+ console.log(chalk.gray(` Framework: ${process.cwd()}`));
424
+ console.log(chalk.gray(` Config: ${path.join(process.cwd(), "opencode.json")}`));
425
+ console.log(chalk.gray(` Project-specific only\n`));
328
426
  const scopeAnswer = await inquirer.prompt([
329
427
  {
330
428
  type: "list",
331
429
  name: "scope",
332
430
  message: "Where would you like to install Super-OpenCode?",
333
431
  choices: [
334
- { name: "Global (Recommended for User-wide access)", value: "global" },
335
- { name: "Project (Current Directory)", value: "project" },
432
+ { name: "šŸŒ Global (Recommended)", value: "global" },
433
+ { name: "šŸ“ Project (Current Directory)", value: "project" },
336
434
  ],
337
435
  default: "global",
338
436
  },
339
437
  ]);
340
- const targetDir = scopeAnswer.scope === "global"
341
- ? path.join(os.homedir(), ".opencode")
342
- : process.cwd();
438
+ const targetDir = getFrameworkInstallDir(scopeAnswer.scope);
343
439
  const questions = [
344
440
  {
345
441
  type: "confirm",
346
442
  name: "proceed",
347
- message: `Install Super-OpenCode to ${chalk.yellow(targetDir)}?`,
443
+ message: `\nšŸ“¦ Ready to install to:\n ${chalk.cyan(targetDir)}\n\n ${chalk.gray("This will create:")}\n ${chalk.gray("• Framework files (agents, commands, skills)")}\n ${chalk.gray("• Configuration file (opencode.json)")}\n\nProceed with installation?`,
348
444
  default: true,
349
445
  },
350
446
  {
@@ -353,7 +449,7 @@ async function main() {
353
449
  message: "Select components to install:",
354
450
  choices: [
355
451
  {
356
- name: "Core (README, LICENSE, AGENTS.md, settings.json)",
452
+ name: "Core (README, LICENSE, AGENTS.md)",
357
453
  value: "core",
358
454
  checked: true,
359
455
  },
@@ -375,6 +471,7 @@ async function main() {
375
471
  when: (answers) => answers.proceed,
376
472
  },
377
473
  ];
474
+ // biome-ignore lint/suspicious/noExplicitAny: inquirer types are complex, using any for compatibility
378
475
  const answers = await inquirer.prompt(questions);
379
476
  if (!answers.proceed) {
380
477
  console.log(chalk.yellow("Installation cancelled."));
@@ -383,19 +480,24 @@ async function main() {
383
480
  const spinner = ora("Installing Super-OpenCode...").start();
384
481
  try {
385
482
  const { modules, overwrite } = answers;
386
- await installModules(modules, targetDir, overwrite);
483
+ await installModules(modules, targetDir, overwrite, scopeAnswer.scope);
387
484
  spinner.stop();
388
485
  await handleMcpInstallation(scopeAnswer.scope, targetDir);
389
486
  spinner.start();
390
487
  spinner.succeed(chalk.green("Installation complete!"));
391
- console.log("\nNext steps:");
488
+ console.log(chalk.green.bold("\n✨ Installation Summary\n"));
489
+ console.log(chalk.white(`šŸ“¦ Framework: ${chalk.cyan(targetDir)}`));
490
+ console.log(chalk.white(`āš™ļø Config: ${chalk.cyan(getConfigFilePath(scopeAnswer.scope, targetDir))}\n`));
491
+ console.log(chalk.yellow.bold("Next Steps:\n"));
492
+ console.log(chalk.white("1. šŸ“– Read AGENTS.md for workflow guidelines"));
493
+ console.log(chalk.white("2. šŸ”§ Configure MCP servers if needed"));
494
+ console.log(chalk.white("3. šŸš€ Start using: super-opencode --help\n"));
392
495
  if (scopeAnswer.scope === "global") {
393
- console.log(chalk.white(`1. Framework installed to: ${chalk.cyan(targetDir)}`));
394
- console.log(chalk.white(`2. Configuration updated at: ${chalk.cyan(path.join(os.homedir(), ".config", "opencode", "opencode.json"))}`));
496
+ console.log(chalk.gray("šŸ’” The framework is now available globally"));
497
+ console.log(chalk.gray(" Use 'super-opencode' command from any project\n"));
395
498
  }
396
499
  else {
397
- console.log(chalk.white("1. Read AGENTS.md to understand the workflow."));
398
- console.log(chalk.white("2. Configuration updated in ./opencode.json"));
500
+ console.log(chalk.gray("šŸ’” The framework is installed in the current project only\n"));
399
501
  }
400
502
  }
401
503
  catch (error) {
package/package.json CHANGED
@@ -1,26 +1,21 @@
1
1
  {
2
2
  "name": "super-opencode",
3
- "version": "1.1.2",
4
- "description": "Super-OpenCode Framework Installer",
3
+ "version": "1.2.0",
4
+ "description": "Multi-language package manager detection and OpenCode agent framework. Auto-detects npm, yarn, pnpm, poetry, cargo, and 40+ package managers across 16 programming languages.",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
7
7
  "bin": {
8
- "super-opencode": "./dist/cli.js"
8
+ "super-opencode": "./dist/cli.js",
9
+ "detect-pm": "./.opencode/skills/package-manager/scripts/detect-package-manager.sh"
9
10
  },
10
11
  "files": [
11
12
  "dist",
12
13
  "AGENTS.md",
13
14
  ".opencode",
14
15
  "README.md",
15
- "LICENSE"
16
+ "LICENSE",
17
+ "!.opencode/skills/package-manager/scripts/test*"
16
18
  ],
17
- "scripts": {
18
- "build": "tsc",
19
- "lint": "biome check src/",
20
- "format": "biome check --write src/",
21
- "prepublishOnly": "npm run build",
22
- "test": "echo \"Error: no test specified\" && exit 1"
23
- },
24
19
  "keywords": [
25
20
  "opencode",
26
21
  "agent",
@@ -29,6 +24,17 @@
29
24
  ],
30
25
  "author": "lst97",
31
26
  "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/lst97/super-opencode.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/lst97/super-opencode/issues"
33
+ },
34
+ "homepage": "https://github.com/lst97/super-opencode#readme",
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
32
38
  "dependencies": {
33
39
  "chalk": "^5.6.2",
34
40
  "fs-extra": "^11.3.3",
@@ -41,5 +47,14 @@
41
47
  "@types/node": "^25.0.10",
42
48
  "ts-node": "^10.9.2",
43
49
  "typescript": "^5.9.3"
50
+ },
51
+ "scripts": {
52
+ "build": "tsc",
53
+ "lint": "biome check src/",
54
+ "format": "biome check --write src/",
55
+ "validate": "npm run check-files && npm run check-scripts",
56
+ "check-files": "node -e \"console.log('Package files:', require('fs').readdirSync('.'))\"",
57
+ "check-scripts": "bash .opencode/skills/package-manager/scripts/detect-package-manager.sh --help > /dev/null && echo 'āœ“ Package manager detection script works'",
58
+ "test": "echo 'Tests not implemented - validation only' && npm run validate"
44
59
  }
45
- }
60
+ }
@@ -1,3 +0,0 @@
1
- {
2
- "version": "1.1.0"
3
- }