@pzy560117/opensuper 0.2.6
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/LICENSE +21 -0
- package/README.md +362 -0
- package/assets/manifest.json +21 -0
- package/assets/skills/opensuper/SKILL.md +268 -0
- package/assets/skills/opensuper/scripts/opensuper-archive.sh +255 -0
- package/assets/skills/opensuper/scripts/opensuper-guard.sh +407 -0
- package/assets/skills/opensuper/scripts/opensuper-state.sh +680 -0
- package/assets/skills/opensuper/scripts/opensuper-yaml-validate.sh +157 -0
- package/assets/skills/opensuper-archive/SKILL.md +69 -0
- package/assets/skills/opensuper-build/SKILL.md +194 -0
- package/assets/skills/opensuper-design/SKILL.md +84 -0
- package/assets/skills/opensuper-hotfix/SKILL.md +146 -0
- package/assets/skills/opensuper-open/SKILL.md +82 -0
- package/assets/skills/opensuper-tweak/SKILL.md +133 -0
- package/assets/skills/opensuper-verify/SKILL.md +139 -0
- package/assets/skills-zh/opensuper/SKILL.md +271 -0
- package/assets/skills-zh/opensuper-archive/SKILL.md +69 -0
- package/assets/skills-zh/opensuper-build/SKILL.md +194 -0
- package/assets/skills-zh/opensuper-design/SKILL.md +84 -0
- package/assets/skills-zh/opensuper-hotfix/SKILL.md +152 -0
- package/assets/skills-zh/opensuper-open/SKILL.md +84 -0
- package/assets/skills-zh/opensuper-tweak/SKILL.md +139 -0
- package/assets/skills-zh/opensuper-verify/SKILL.md +154 -0
- package/bin/opensuper.js +3 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +63 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +191 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +17 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +242 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +108 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +28 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +193 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/detect.d.ts +13 -0
- package/dist/core/detect.d.ts.map +1 -0
- package/dist/core/detect.js +101 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/openspec.d.ts +5 -0
- package/dist/core/openspec.d.ts.map +1 -0
- package/dist/core/openspec.js +58 -0
- package/dist/core/openspec.js.map +1 -0
- package/dist/core/platforms.d.ts +15 -0
- package/dist/core/platforms.d.ts.map +1 -0
- package/dist/core/platforms.js +48 -0
- package/dist/core/platforms.js.map +1 -0
- package/dist/core/skills.d.ts +22 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +59 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/superpowers.d.ts +5 -0
- package/dist/core/superpowers.d.ts.map +1 -0
- package/dist/core/superpowers.js +60 -0
- package/dist/core/superpowers.js.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/utils/file-system.d.ts +25 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +53 -0
- package/dist/utils/file-system.js.map +1 -0
- package/package.json +60 -0
- package/scripts/postinstall.js +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,iBAAS,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;GAGG;AACH,iBAAe,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAmBtD;AAED,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAoBxE;AAED,iBAAe,SAAS,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,EACnD,kBAAkB,GAAE,QAAQ,EAAO,GAClC,OAAO,CAAC,OAAO,CAAC,CAuClB;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import { fileExists, readDir } from '../utils/file-system.js';
|
|
4
|
+
import { PLATFORMS } from './platforms.js';
|
|
5
|
+
const SUPERPOWERS_SKILLS = [
|
|
6
|
+
'brainstorming',
|
|
7
|
+
'using-superpowers',
|
|
8
|
+
'writing-plans',
|
|
9
|
+
'test-driven-development',
|
|
10
|
+
'subagent-driven-development',
|
|
11
|
+
];
|
|
12
|
+
function getBaseDir(scope, projectPath) {
|
|
13
|
+
return scope === 'global' ? os.homedir() : projectPath;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if superpowers are installed via Claude Code plugin system.
|
|
17
|
+
* Looks in ~/.claude/plugins/cache/{marketplace}/superpowers/{version}/skills/
|
|
18
|
+
*/
|
|
19
|
+
async function hasPluginSuperpowers() {
|
|
20
|
+
const claudeDir = process.env.CLAUDE_CONFIG_DIR || path.join(os.homedir(), '.claude');
|
|
21
|
+
const pluginsCacheDir = path.join(claudeDir, 'plugins', 'cache');
|
|
22
|
+
const marketplaceEntries = await readDir(pluginsCacheDir);
|
|
23
|
+
for (const marketplace of marketplaceEntries) {
|
|
24
|
+
const superpowersDir = path.join(pluginsCacheDir, marketplace, 'superpowers');
|
|
25
|
+
if (!(await fileExists(superpowersDir)))
|
|
26
|
+
continue;
|
|
27
|
+
const versionEntries = await readDir(superpowersDir);
|
|
28
|
+
for (const version of versionEntries) {
|
|
29
|
+
const skillsDir = path.join(superpowersDir, version, 'skills');
|
|
30
|
+
const skills = await readDir(skillsDir);
|
|
31
|
+
if (SUPERPOWERS_SKILLS.some((name) => skills.includes(name))) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
async function detectPlatforms(projectPath) {
|
|
39
|
+
const detected = new Set();
|
|
40
|
+
for (const platform of PLATFORMS) {
|
|
41
|
+
if (platform.detectionPaths && platform.detectionPaths.length > 0) {
|
|
42
|
+
for (const p of platform.detectionPaths) {
|
|
43
|
+
if (await fileExists(path.join(projectPath, p))) {
|
|
44
|
+
detected.add(platform.id);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const dirPath = path.join(projectPath, platform.skillsDir);
|
|
51
|
+
if (await fileExists(dirPath)) {
|
|
52
|
+
detected.add(platform.id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return detected;
|
|
57
|
+
}
|
|
58
|
+
async function hasSkills(baseDir, platform, component, _selectedPlatforms = []) {
|
|
59
|
+
const skillsDir = path.join(baseDir, platform.skillsDir, 'skills');
|
|
60
|
+
const entries = await readDir(skillsDir);
|
|
61
|
+
switch (component) {
|
|
62
|
+
case 'openspec':
|
|
63
|
+
if (entries.some((e) => e.startsWith('openspec-')))
|
|
64
|
+
return true;
|
|
65
|
+
break;
|
|
66
|
+
case 'superpowers':
|
|
67
|
+
if (SUPERPOWERS_SKILLS.some((name) => entries.includes(name)))
|
|
68
|
+
return true;
|
|
69
|
+
break;
|
|
70
|
+
case 'opensuper':
|
|
71
|
+
if (entries.some((e) => e.startsWith('opensuper')))
|
|
72
|
+
return true;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
if (baseDir !== os.homedir()) {
|
|
76
|
+
const globalSkillsDir = path.join(os.homedir(), platform.skillsDir, 'skills');
|
|
77
|
+
const globalEntries = await readDir(globalSkillsDir);
|
|
78
|
+
switch (component) {
|
|
79
|
+
case 'openspec':
|
|
80
|
+
if (globalEntries.some((e) => e.startsWith('openspec-')))
|
|
81
|
+
return true;
|
|
82
|
+
break;
|
|
83
|
+
case 'superpowers':
|
|
84
|
+
if (SUPERPOWERS_SKILLS.some((name) => globalEntries.includes(name)))
|
|
85
|
+
return true;
|
|
86
|
+
break;
|
|
87
|
+
case 'opensuper':
|
|
88
|
+
if (globalEntries.some((e) => e.startsWith('opensuper')))
|
|
89
|
+
return true;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check Claude Code plugin cache for plugin-installed superpowers
|
|
94
|
+
if (component === 'superpowers' && platform.id === 'claude') {
|
|
95
|
+
if (await hasPluginSuperpowers())
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
export { detectPlatforms, hasSkills, hasPluginSuperpowers, getBaseDir };
|
|
101
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { InstallScope } from './types.js';
|
|
2
|
+
declare function isCommandAvailable(command: string): boolean;
|
|
3
|
+
declare function installOpenSpec(projectPath: string, toolIds: string[], scope: InstallScope): Promise<'installed' | 'failed' | 'skipped'>;
|
|
4
|
+
export { installOpenSpec, isCommandAvailable };
|
|
5
|
+
//# sourceMappingURL=openspec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openspec.d.ts","sourceRoot":"","sources":["../../src/core/openspec.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQpD;AAqBD,iBAAe,eAAe,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CA6B7C;AAED,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { PLATFORMS } from './platforms.js';
|
|
3
|
+
const VALID_TOOL_IDS = new Set(PLATFORMS.map((p) => p.openspecToolId));
|
|
4
|
+
function isCommandAvailable(command) {
|
|
5
|
+
try {
|
|
6
|
+
const checkCmd = process.platform === 'win32' ? `where ${command}` : `which ${command}`;
|
|
7
|
+
execSync(checkCmd, { stdio: 'pipe', timeout: 10_000 });
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async function ensureOpenSpecCli(scope, projectPath) {
|
|
15
|
+
if (isCommandAvailable('openspec')) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
console.log(` Installing OpenSpec CLI...`);
|
|
19
|
+
try {
|
|
20
|
+
const npmCmd = scope === 'global'
|
|
21
|
+
? 'npm install -g @fission-ai/openspec@latest'
|
|
22
|
+
: 'npm install @fission-ai/openspec@latest';
|
|
23
|
+
execSync(npmCmd, { cwd: projectPath, stdio: 'pipe', timeout: 120_000 });
|
|
24
|
+
return isCommandAvailable('openspec');
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error(` Failed to install OpenSpec CLI: ${error.message}`);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function installOpenSpec(projectPath, toolIds, scope) {
|
|
32
|
+
const cliReady = await ensureOpenSpecCli(scope, projectPath);
|
|
33
|
+
if (!cliReady) {
|
|
34
|
+
console.error(` OpenSpec CLI not available. Install manually: npm install -g @fission-ai/openspec@latest`);
|
|
35
|
+
return 'failed';
|
|
36
|
+
}
|
|
37
|
+
const unknownIds = toolIds.filter((id) => !VALID_TOOL_IDS.has(id));
|
|
38
|
+
if (unknownIds.length > 0) {
|
|
39
|
+
throw new Error(`Unknown tool IDs: ${unknownIds.join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const flags = ['--tools', toolIds.join(','), scope === 'global' ? '--global' : '']
|
|
43
|
+
.filter(Boolean)
|
|
44
|
+
.join(' ');
|
|
45
|
+
execSync(`openspec init ${flags}`, {
|
|
46
|
+
cwd: projectPath,
|
|
47
|
+
stdio: 'pipe',
|
|
48
|
+
timeout: 120_000,
|
|
49
|
+
});
|
|
50
|
+
return 'installed';
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(` OpenSpec init failed: ${error.message}`);
|
|
54
|
+
return 'failed';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export { installOpenSpec, isCommandAvailable };
|
|
58
|
+
//# sourceMappingURL=openspec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openspec.js","sourceRoot":"","sources":["../../src/core/openspec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform Definitions
|
|
3
|
+
*
|
|
4
|
+
* Supported AI coding platforms, mirroring OpenSpec's AI_TOOLS config.
|
|
5
|
+
* Reference: OpenSpec/src/core/config.ts
|
|
6
|
+
*/
|
|
7
|
+
export interface Platform {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
skillsDir: string;
|
|
11
|
+
detectionPaths?: string[];
|
|
12
|
+
openspecToolId: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const PLATFORMS: Platform[];
|
|
15
|
+
//# sourceMappingURL=platforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platforms.d.ts","sourceRoot":"","sources":["../../src/core/platforms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EAwC/B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform Definitions
|
|
3
|
+
*
|
|
4
|
+
* Supported AI coding platforms, mirroring OpenSpec's AI_TOOLS config.
|
|
5
|
+
* Reference: OpenSpec/src/core/config.ts
|
|
6
|
+
*/
|
|
7
|
+
export const PLATFORMS = [
|
|
8
|
+
{ id: 'claude', name: 'Claude Code', skillsDir: '.claude', openspecToolId: 'claude' },
|
|
9
|
+
{ id: 'cursor', name: 'Cursor', skillsDir: '.cursor', openspecToolId: 'cursor' },
|
|
10
|
+
{ id: 'codex', name: 'Codex', skillsDir: '.codex', openspecToolId: 'codex' },
|
|
11
|
+
{ id: 'opencode', name: 'OpenCode', skillsDir: '.opencode', openspecToolId: 'opencode' },
|
|
12
|
+
{ id: 'windsurf', name: 'Windsurf', skillsDir: '.windsurf', openspecToolId: 'windsurf' },
|
|
13
|
+
{ id: 'cline', name: 'Cline', skillsDir: '.cline', openspecToolId: 'cline' },
|
|
14
|
+
{ id: 'roocode', name: 'RooCode', skillsDir: '.roo', openspecToolId: 'roocode' },
|
|
15
|
+
{ id: 'continue', name: 'Continue', skillsDir: '.continue', openspecToolId: 'continue' },
|
|
16
|
+
{
|
|
17
|
+
id: 'github-copilot',
|
|
18
|
+
name: 'GitHub Copilot',
|
|
19
|
+
skillsDir: '.github',
|
|
20
|
+
detectionPaths: [
|
|
21
|
+
'.github/copilot-instructions.md',
|
|
22
|
+
'.github/instructions',
|
|
23
|
+
'.github/prompts',
|
|
24
|
+
'.github/skills',
|
|
25
|
+
],
|
|
26
|
+
openspecToolId: 'github-copilot',
|
|
27
|
+
},
|
|
28
|
+
{ id: 'gemini', name: 'Gemini CLI', skillsDir: '.gemini', openspecToolId: 'gemini' },
|
|
29
|
+
{ id: 'amazon-q', name: 'Amazon Q Developer', skillsDir: '.amazonq', openspecToolId: 'amazon-q' },
|
|
30
|
+
{ id: 'qwen', name: 'Qwen Code', skillsDir: '.qwen', openspecToolId: 'qwen' },
|
|
31
|
+
{ id: 'kilocode', name: 'Kilo Code', skillsDir: '.kilocode', openspecToolId: 'kilocode' },
|
|
32
|
+
{ id: 'auggie', name: 'Auggie (Augment CLI)', skillsDir: '.augment', openspecToolId: 'auggie' },
|
|
33
|
+
{ id: 'kiro', name: 'Kiro', skillsDir: '.kiro', openspecToolId: 'kiro' },
|
|
34
|
+
{ id: 'lingma', name: 'Lingma', skillsDir: '.lingma', openspecToolId: 'lingma' },
|
|
35
|
+
{ id: 'junie', name: 'Junie', skillsDir: '.junie', openspecToolId: 'junie' },
|
|
36
|
+
{ id: 'codebuddy', name: 'CodeBuddy Code', skillsDir: '.codebuddy', openspecToolId: 'codebuddy' },
|
|
37
|
+
{ id: 'costrict', name: 'CoStrict', skillsDir: '.cospec', openspecToolId: 'costrict' },
|
|
38
|
+
{ id: 'crush', name: 'Crush', skillsDir: '.crush', openspecToolId: 'crush' },
|
|
39
|
+
{ id: 'factory', name: 'Factory Droid', skillsDir: '.factory', openspecToolId: 'factory' },
|
|
40
|
+
{ id: 'iflow', name: 'iFlow', skillsDir: '.iflow', openspecToolId: 'iflow' },
|
|
41
|
+
{ id: 'pi', name: 'Pi', skillsDir: '.pi', openspecToolId: 'pi' },
|
|
42
|
+
{ id: 'qoder', name: 'Qoder', skillsDir: '.qoder', openspecToolId: 'qoder' },
|
|
43
|
+
{ id: 'antigravity', name: 'Antigravity', skillsDir: '.agent', openspecToolId: 'antigravity' },
|
|
44
|
+
{ id: 'bob', name: 'Bob Shell', skillsDir: '.bob', openspecToolId: 'bob' },
|
|
45
|
+
{ id: 'forgecode', name: 'ForgeCode', skillsDir: '.forge', openspecToolId: 'forgecode' },
|
|
46
|
+
{ id: 'trae', name: 'Trae', skillsDir: '.trae', openspecToolId: 'trae' },
|
|
47
|
+
];
|
|
48
|
+
//# sourceMappingURL=platforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/core/platforms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Platform } from './platforms.js';
|
|
2
|
+
type LanguageConfig = {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
skillsDir: string;
|
|
6
|
+
};
|
|
7
|
+
type Manifest = {
|
|
8
|
+
version: string;
|
|
9
|
+
skills: string[];
|
|
10
|
+
languages?: LanguageConfig[];
|
|
11
|
+
};
|
|
12
|
+
declare function getAssetsDir(): string;
|
|
13
|
+
declare function copyOpenSuperSkillsForPlatform(baseDir: string, platform: Platform, overwrite: boolean, languageSkillsDir?: string): Promise<{
|
|
14
|
+
copied: number;
|
|
15
|
+
skipped: number;
|
|
16
|
+
}>;
|
|
17
|
+
declare function readManifest(): Promise<Manifest>;
|
|
18
|
+
declare function getManifestSkills(): Promise<string[]>;
|
|
19
|
+
declare function createWorkingDirs(projectPath: string): Promise<void>;
|
|
20
|
+
export { copyOpenSuperSkillsForPlatform, readManifest, getManifestSkills, createWorkingDirs, getAssetsDir, };
|
|
21
|
+
export type { Manifest, LanguageConfig };
|
|
22
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF,iBAAS,YAAY,IAAI,MAAM,CAE9B;AAED,iBAAe,8BAA8B,CAC3C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,EAClB,iBAAiB,GAAE,MAAiB,GACnC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC9C;AAED,iBAAe,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAI/C;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGpD;AAED,iBAAe,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE;AAED,OAAO,EACL,8BAA8B,EAC9B,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,CAAC;AACF,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { fileExists, readJson, copyFile, ensureDir } from '../utils/file-system.js';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = path.dirname(__filename);
|
|
6
|
+
function getAssetsDir() {
|
|
7
|
+
return path.resolve(__dirname, '..', '..', 'assets');
|
|
8
|
+
}
|
|
9
|
+
async function copyOpenSuperSkillsForPlatform(baseDir, platform, overwrite, languageSkillsDir = 'skills') {
|
|
10
|
+
const assetsDir = getAssetsDir();
|
|
11
|
+
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
12
|
+
if (!(await fileExists(manifestPath))) {
|
|
13
|
+
throw new Error(`Manifest not found at ${manifestPath}`);
|
|
14
|
+
}
|
|
15
|
+
const manifest = await readJson(manifestPath);
|
|
16
|
+
if (!manifest || !Array.isArray(manifest.skills)) {
|
|
17
|
+
throw new Error(`Invalid manifest at ${manifestPath}: "skills" must be an array`);
|
|
18
|
+
}
|
|
19
|
+
let copied = 0;
|
|
20
|
+
let skippedCount = 0;
|
|
21
|
+
for (const skillRelPath of manifest.skills) {
|
|
22
|
+
const isScript = skillRelPath.includes('/scripts/');
|
|
23
|
+
const sourceDir = isScript ? 'skills' : languageSkillsDir;
|
|
24
|
+
const src = path.join(assetsDir, sourceDir, skillRelPath);
|
|
25
|
+
const dest = path.join(baseDir, platform.skillsDir, 'skills', skillRelPath);
|
|
26
|
+
if (!overwrite && (await fileExists(dest))) {
|
|
27
|
+
skippedCount++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
await copyFile(src, dest);
|
|
32
|
+
copied++;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error(` Failed to copy ${skillRelPath}: ${err.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { copied, skipped: skippedCount };
|
|
39
|
+
}
|
|
40
|
+
async function readManifest() {
|
|
41
|
+
const assetsDir = getAssetsDir();
|
|
42
|
+
const manifestPath = path.join(assetsDir, 'manifest.json');
|
|
43
|
+
return readJson(manifestPath);
|
|
44
|
+
}
|
|
45
|
+
async function getManifestSkills() {
|
|
46
|
+
const manifest = await readManifest();
|
|
47
|
+
return manifest.skills;
|
|
48
|
+
}
|
|
49
|
+
async function createWorkingDirs(projectPath) {
|
|
50
|
+
const dirs = [
|
|
51
|
+
path.join(projectPath, 'docs', 'superpowers', 'specs'),
|
|
52
|
+
path.join(projectPath, 'docs', 'superpowers', 'plans'),
|
|
53
|
+
];
|
|
54
|
+
for (const dir of dirs) {
|
|
55
|
+
await ensureDir(dir);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export { copyOpenSuperSkillsForPlatform, readManifest, getManifestSkills, createWorkingDirs, getAssetsDir, };
|
|
59
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { InstallScope } from './types.js';
|
|
2
|
+
declare const SKILLS_AGENT_MAP: Record<string, string>;
|
|
3
|
+
declare function installSuperpowersForPlatforms(projectPath: string, scope: InstallScope, platformIds: string[]): Promise<'installed' | 'failed' | 'skipped'>;
|
|
4
|
+
export { installSuperpowersForPlatforms, SKILLS_AGENT_MAP };
|
|
5
|
+
//# sourceMappingURL=superpowers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,QAAA,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6B5C,CAAC;AAIF,iBAAe,8BAA8B,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CA4B7C;AAED,OAAO,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
const SKILLS_AGENT_MAP = {
|
|
3
|
+
claude: 'claude-code',
|
|
4
|
+
cursor: 'cursor',
|
|
5
|
+
codex: 'codex',
|
|
6
|
+
opencode: 'opencode',
|
|
7
|
+
windsurf: 'windsurf',
|
|
8
|
+
cline: 'cline',
|
|
9
|
+
roocode: 'roo-code',
|
|
10
|
+
continue: 'continue',
|
|
11
|
+
'github-copilot': 'github-copilot',
|
|
12
|
+
gemini: 'gemini',
|
|
13
|
+
'amazon-q': 'amazon-q',
|
|
14
|
+
qwen: 'qwen',
|
|
15
|
+
kilocode: 'kilo-code',
|
|
16
|
+
auggie: 'augment',
|
|
17
|
+
kiro: 'kiro',
|
|
18
|
+
lingma: 'lingma',
|
|
19
|
+
junie: 'junie',
|
|
20
|
+
codebuddy: 'codebuddy',
|
|
21
|
+
costrict: 'costrict',
|
|
22
|
+
crush: 'crush',
|
|
23
|
+
factory: 'factory',
|
|
24
|
+
iflow: 'iflow',
|
|
25
|
+
pi: 'pi',
|
|
26
|
+
qoder: 'qoder',
|
|
27
|
+
antigravity: 'antigravity',
|
|
28
|
+
bob: 'bob',
|
|
29
|
+
forgecode: 'forge',
|
|
30
|
+
trae: 'trae',
|
|
31
|
+
};
|
|
32
|
+
const VALID_PLATFORM_IDS = new Set(Object.keys(SKILLS_AGENT_MAP));
|
|
33
|
+
async function installSuperpowersForPlatforms(projectPath, scope, platformIds) {
|
|
34
|
+
const unknownIds = platformIds.filter((id) => !VALID_PLATFORM_IDS.has(id));
|
|
35
|
+
if (unknownIds.length > 0) {
|
|
36
|
+
throw new Error(`Unknown platform IDs: ${unknownIds.join(', ')}`);
|
|
37
|
+
}
|
|
38
|
+
const agentNames = platformIds.map((id) => SKILLS_AGENT_MAP[id]).filter(Boolean);
|
|
39
|
+
if (agentNames.length === 0) {
|
|
40
|
+
console.error(` No valid agent names resolved for platforms: ${platformIds.join(', ')}`);
|
|
41
|
+
return 'failed';
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const flags = ['-y', scope === 'global' ? '-g' : '', `--agent ${agentNames.join(',')}`]
|
|
45
|
+
.filter(Boolean)
|
|
46
|
+
.join(' ');
|
|
47
|
+
execSync(`npx skills add obra/superpowers ${flags}`, {
|
|
48
|
+
cwd: projectPath,
|
|
49
|
+
stdio: 'pipe',
|
|
50
|
+
timeout: 120_000,
|
|
51
|
+
});
|
|
52
|
+
return 'installed';
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error(` Superpowers install failed: ${error.message}`);
|
|
56
|
+
return 'failed';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export { installSuperpowersForPlatforms, SKILLS_AGENT_MAP };
|
|
60
|
+
//# sourceMappingURL=superpowers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,MAAM,gBAAgB,GAA2B;IAC/C,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,gBAAgB;IAClC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,UAAU;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAElE,KAAK,UAAU,8BAA8B,CAC3C,WAAmB,EACnB,KAAmB,EACnB,WAAqB;IAErB,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oDAAoD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aACpF,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,QAAQ,CAAC,mCAAmC,KAAK,EAAE,EAAE;YACnD,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure a directory exists, creating it recursively if needed.
|
|
3
|
+
*/
|
|
4
|
+
export declare function ensureDir(dir: string): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Copy a file from src to dest, creating parent directories if needed.
|
|
7
|
+
*/
|
|
8
|
+
export declare function copyFile(src: string, dest: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if a file or directory exists.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Read and parse a JSON file.
|
|
15
|
+
*/
|
|
16
|
+
export declare function readJson<T = unknown>(filePath: string): Promise<T>;
|
|
17
|
+
/**
|
|
18
|
+
* Write content to a file, creating parent directories if needed.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* List entries in a directory. Returns empty array if directory doesn't exist.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readDir(dirPath: string): Promise<string[]>;
|
|
25
|
+
//# sourceMappingURL=file-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGxE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMhE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Ensure a directory exists, creating it recursively if needed.
|
|
5
|
+
*/
|
|
6
|
+
export async function ensureDir(dir) {
|
|
7
|
+
await fs.mkdir(dir, { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Copy a file from src to dest, creating parent directories if needed.
|
|
11
|
+
*/
|
|
12
|
+
export async function copyFile(src, dest) {
|
|
13
|
+
await ensureDir(path.dirname(dest));
|
|
14
|
+
await fs.copyFile(src, dest);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if a file or directory exists.
|
|
18
|
+
*/
|
|
19
|
+
export async function fileExists(filePath) {
|
|
20
|
+
try {
|
|
21
|
+
await fs.access(filePath);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Read and parse a JSON file.
|
|
30
|
+
*/
|
|
31
|
+
export async function readJson(filePath) {
|
|
32
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Write content to a file, creating parent directories if needed.
|
|
37
|
+
*/
|
|
38
|
+
export async function writeFile(filePath, content) {
|
|
39
|
+
await ensureDir(path.dirname(filePath));
|
|
40
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* List entries in a directory. Returns empty array if directory doesn't exist.
|
|
44
|
+
*/
|
|
45
|
+
export async function readDir(dirPath) {
|
|
46
|
+
try {
|
|
47
|
+
return await fs.readdir(dirPath);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=file-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IACtD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAc,QAAgB;IAC1D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pzy560117/opensuper",
|
|
3
|
+
"version": "0.2.6",
|
|
4
|
+
"description": "OpenSpec + Superpowers dual-star development workflow",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"opensuper",
|
|
7
|
+
"openspec",
|
|
8
|
+
"superpowers",
|
|
9
|
+
"skills",
|
|
10
|
+
"workflow"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"author": "benym",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"bin": "./bin/opensuper.js",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"bin",
|
|
22
|
+
"assets",
|
|
23
|
+
"scripts/postinstall.js",
|
|
24
|
+
"!dist/**/*.test.js",
|
|
25
|
+
"!dist/**/__tests__"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "node build.js",
|
|
29
|
+
"dev": "tsc --watch",
|
|
30
|
+
"test": "vitest run",
|
|
31
|
+
"test:coverage": "vitest run --coverage",
|
|
32
|
+
"test:watch": "vitest",
|
|
33
|
+
"lint": "eslint src/",
|
|
34
|
+
"lint:fix": "eslint src/ --fix",
|
|
35
|
+
"format": "prettier --write src/",
|
|
36
|
+
"format:check": "prettier --check src/",
|
|
37
|
+
"test:shell": "node scripts/run-bats.js test/shell/*.bats",
|
|
38
|
+
"prepare": "pnpm run build",
|
|
39
|
+
"prepublishOnly": "node scripts/prepublish-check.js && pnpm run build",
|
|
40
|
+
"postinstall": "node scripts/postinstall.js"
|
|
41
|
+
},
|
|
42
|
+
"packageManager": "pnpm@10.18.3",
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=20"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@eslint/js": "^10.0.1",
|
|
48
|
+
"@types/node": "^24.2.0",
|
|
49
|
+
"@vitest/coverage-v8": "^4.1.6",
|
|
50
|
+
"eslint": "^10.4.0",
|
|
51
|
+
"prettier": "^3.8.3",
|
|
52
|
+
"typescript": "^5.9.3",
|
|
53
|
+
"typescript-eslint": "^8.59.3",
|
|
54
|
+
"vitest": "^4.1.6"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@inquirer/prompts": "^8.4.3",
|
|
58
|
+
"commander": "^14.0.0"
|
|
59
|
+
}
|
|
60
|
+
}
|