@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.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +362 -0
  3. package/assets/manifest.json +21 -0
  4. package/assets/skills/opensuper/SKILL.md +268 -0
  5. package/assets/skills/opensuper/scripts/opensuper-archive.sh +255 -0
  6. package/assets/skills/opensuper/scripts/opensuper-guard.sh +407 -0
  7. package/assets/skills/opensuper/scripts/opensuper-state.sh +680 -0
  8. package/assets/skills/opensuper/scripts/opensuper-yaml-validate.sh +157 -0
  9. package/assets/skills/opensuper-archive/SKILL.md +69 -0
  10. package/assets/skills/opensuper-build/SKILL.md +194 -0
  11. package/assets/skills/opensuper-design/SKILL.md +84 -0
  12. package/assets/skills/opensuper-hotfix/SKILL.md +146 -0
  13. package/assets/skills/opensuper-open/SKILL.md +82 -0
  14. package/assets/skills/opensuper-tweak/SKILL.md +133 -0
  15. package/assets/skills/opensuper-verify/SKILL.md +139 -0
  16. package/assets/skills-zh/opensuper/SKILL.md +271 -0
  17. package/assets/skills-zh/opensuper-archive/SKILL.md +69 -0
  18. package/assets/skills-zh/opensuper-build/SKILL.md +194 -0
  19. package/assets/skills-zh/opensuper-design/SKILL.md +84 -0
  20. package/assets/skills-zh/opensuper-hotfix/SKILL.md +152 -0
  21. package/assets/skills-zh/opensuper-open/SKILL.md +84 -0
  22. package/assets/skills-zh/opensuper-tweak/SKILL.md +139 -0
  23. package/assets/skills-zh/opensuper-verify/SKILL.md +154 -0
  24. package/bin/opensuper.js +3 -0
  25. package/dist/cli/index.d.ts +2 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +63 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/commands/doctor.d.ts +9 -0
  30. package/dist/commands/doctor.d.ts.map +1 -0
  31. package/dist/commands/doctor.js +191 -0
  32. package/dist/commands/doctor.js.map +1 -0
  33. package/dist/commands/init.d.ts +17 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +242 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/status.d.ts +6 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +108 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/commands/update.d.ts +28 -0
  42. package/dist/commands/update.d.ts.map +1 -0
  43. package/dist/commands/update.js +193 -0
  44. package/dist/commands/update.js.map +1 -0
  45. package/dist/core/detect.d.ts +13 -0
  46. package/dist/core/detect.d.ts.map +1 -0
  47. package/dist/core/detect.js +101 -0
  48. package/dist/core/detect.js.map +1 -0
  49. package/dist/core/openspec.d.ts +5 -0
  50. package/dist/core/openspec.d.ts.map +1 -0
  51. package/dist/core/openspec.js +58 -0
  52. package/dist/core/openspec.js.map +1 -0
  53. package/dist/core/platforms.d.ts +15 -0
  54. package/dist/core/platforms.d.ts.map +1 -0
  55. package/dist/core/platforms.js +48 -0
  56. package/dist/core/platforms.js.map +1 -0
  57. package/dist/core/skills.d.ts +22 -0
  58. package/dist/core/skills.d.ts.map +1 -0
  59. package/dist/core/skills.js +59 -0
  60. package/dist/core/skills.js.map +1 -0
  61. package/dist/core/superpowers.d.ts +5 -0
  62. package/dist/core/superpowers.d.ts.map +1 -0
  63. package/dist/core/superpowers.js +60 -0
  64. package/dist/core/superpowers.js.map +1 -0
  65. package/dist/core/types.d.ts +2 -0
  66. package/dist/core/types.d.ts.map +1 -0
  67. package/dist/core/types.js +2 -0
  68. package/dist/core/types.js.map +1 -0
  69. package/dist/utils/file-system.d.ts +25 -0
  70. package/dist/utils/file-system.d.ts.map +1 -0
  71. package/dist/utils/file-system.js +53 -0
  72. package/dist/utils/file-system.js.map +1 -0
  73. package/package.json +60 -0
  74. package/scripts/postinstall.js +44 -0
@@ -0,0 +1,242 @@
1
+ import path from 'path';
2
+ import os from 'os';
3
+ import { checkbox, select } from '@inquirer/prompts';
4
+ import { PLATFORMS } from '../core/platforms.js';
5
+ import { detectPlatforms, hasSkills, getBaseDir } from '../core/detect.js';
6
+ import { copyOpenSuperSkillsForPlatform, createWorkingDirs, } from '../core/skills.js';
7
+ import { installOpenSpec } from '../core/openspec.js';
8
+ import { installSuperpowersForPlatforms } from '../core/superpowers.js';
9
+ const LANGUAGES = [
10
+ { id: 'en', name: 'English', skillsDir: 'skills' },
11
+ { id: 'zh', name: '中文', skillsDir: 'skills-zh' },
12
+ ];
13
+ const OPENSUPER_BANNER = [
14
+ ` ██████╗ ██████╗ ███╗ ███╗███████╗████████╗`,
15
+ ` ██╔════╝██╔═══██╗████╗ ████║██╔════╝╚══██╔══╝`,
16
+ ` ██║ ██║ ██║██╔████╔██║█████╗ ██║ `,
17
+ ` ██║ ██║ ██║██║╚██╔╝██║██╔══╝ ██║ `,
18
+ ` ╚██████╗╚██████╔╝██║ ╚═╝ ██║███████╗ ██║ `,
19
+ ` ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ `,
20
+ ` OpenSpec + Superpowers Workflow `,
21
+ ].join('\n');
22
+ async function selectScope(options) {
23
+ if (options.yes)
24
+ return 'project';
25
+ return select({
26
+ message: 'Install scope:',
27
+ choices: [
28
+ { name: 'Project (current directory)', value: 'project' },
29
+ { name: 'Global (home directory)', value: 'global' },
30
+ ],
31
+ });
32
+ }
33
+ async function selectLanguage(options) {
34
+ if (options.yes)
35
+ return LANGUAGES[0];
36
+ const langId = await select({
37
+ message: 'Language for OpenSuper skills:',
38
+ choices: LANGUAGES.map((lang) => ({ name: lang.name, value: lang.id })),
39
+ });
40
+ return LANGUAGES.find((l) => l.id === langId) ?? LANGUAGES[0];
41
+ }
42
+ async function selectPlatforms(detected, options) {
43
+ const choices = PLATFORMS.map((p) => ({
44
+ name: `${p.name}${detected.has(p.id) ? ' (detected)' : ''}`,
45
+ value: p.id,
46
+ checked: detected.has(p.id),
47
+ }));
48
+ if (options.yes) {
49
+ const selected = [...detected];
50
+ return selected.length > 0 ? selected : PLATFORMS.map((p) => p.id);
51
+ }
52
+ return checkbox({ message: 'Select platforms to set up:', choices, required: true });
53
+ }
54
+ async function promptOverwriteChoice(componentName, platformName) {
55
+ return select({
56
+ message: `${componentName} already installed on ${platformName}. What to do?`,
57
+ choices: [
58
+ { name: 'Overwrite', value: 'overwrite' },
59
+ { name: 'Skip', value: 'skip' },
60
+ ],
61
+ });
62
+ }
63
+ async function promptBulkOverwriteChoice(platformName, components) {
64
+ return select({
65
+ message: `${platformName} already has ${components.join(', ')} installed. What to do?`,
66
+ choices: [
67
+ { name: 'Overwrite all existing components', value: 'overwrite-all' },
68
+ { name: 'Skip all existing components', value: 'skip-all' },
69
+ { name: 'Choose per component', value: 'choose' },
70
+ ],
71
+ });
72
+ }
73
+ function applyBulkOverwriteChoice(plan, choice) {
74
+ const action = choice === 'overwrite-all' ? 'overwrite' : 'skip';
75
+ return {
76
+ ...plan,
77
+ osAction: plan.osAction === 'install' ? action : plan.osAction,
78
+ spAction: plan.spAction === 'install' ? action : plan.spAction,
79
+ cmAction: plan.cmAction === 'install' ? action : plan.cmAction,
80
+ };
81
+ }
82
+ function resolveAction(hasExisting, options) {
83
+ if (!hasExisting)
84
+ return 'install';
85
+ if (options.overwrite)
86
+ return 'overwrite';
87
+ if (options.skipExisting)
88
+ return 'skip';
89
+ if (options.yes)
90
+ return 'skip';
91
+ return 'install';
92
+ }
93
+ function displaySummary(results, scope) {
94
+ const scopeLabel = scope === 'global' ? os.homedir() : 'project';
95
+ console.log(`\n OpenSuper setup complete! (scope: ${scopeLabel})\n`);
96
+ const installed = results.filter((r) => r.openspec === 'installed' || r.superpowers === 'installed' || r.opensuper === 'installed');
97
+ const skipped = results.filter((r) => r.openspec === 'skipped' && r.superpowers === 'skipped' && r.opensuper === 'skipped');
98
+ const failed = results.filter((r) => r.openspec === 'failed' || r.superpowers === 'failed' || r.opensuper === 'failed');
99
+ if (installed.length > 0) {
100
+ console.log(` Installed:`);
101
+ for (const r of installed) {
102
+ console.log(` ${r.platform.name} -> ${r.platform.skillsDir}/skills/`);
103
+ }
104
+ }
105
+ if (skipped.length > 0) {
106
+ console.log(` Skipped: ${skipped.map((r) => r.platform.name).join(', ')}`);
107
+ }
108
+ if (failed.length > 0) {
109
+ console.log(` Failed: ${failed.map((r) => r.platform.name).join(', ')}`);
110
+ }
111
+ if (scope === 'project') {
112
+ console.log(`\n Working directories: docs/superpowers/specs/, docs/superpowers/plans/`);
113
+ }
114
+ console.log(`\n Get started:`);
115
+ console.log(` /opensuper "your idea" — Start a new change with full workflow`);
116
+ console.log(` /opensuper-hotfix — Quick bug fix (skip brainstorming)`);
117
+ console.log(` /opensuper-tweak — Small change (skip brainstorming and plan)\n`);
118
+ }
119
+ export async function initCommand(targetPath, options = {}) {
120
+ const projectPath = path.resolve(targetPath);
121
+ const log = options.json ? () => undefined : console.log;
122
+ log(`\n${OPENSUPER_BANNER}\n`);
123
+ log(` Setting up OpenSuper in ${projectPath}\n`);
124
+ const detected = await detectPlatforms(projectPath);
125
+ const scope = await selectScope(options);
126
+ const language = await selectLanguage(options);
127
+ log(` Language: ${language.name}`);
128
+ const selectedPlatformIds = await selectPlatforms(detected, options);
129
+ if (selectedPlatformIds.length === 0) {
130
+ if (options.json) {
131
+ console.log(JSON.stringify({
132
+ projectPath,
133
+ scope,
134
+ language: language.id,
135
+ selectedPlatforms: [],
136
+ results: [],
137
+ }, null, 2));
138
+ return;
139
+ }
140
+ log('\n No platforms selected. Exiting.\n');
141
+ return;
142
+ }
143
+ const selectedPlatforms = PLATFORMS.filter((p) => selectedPlatformIds.includes(p.id));
144
+ const baseDir = getBaseDir(scope, projectPath);
145
+ const plans = [];
146
+ for (const platform of selectedPlatforms) {
147
+ const hasOS = await hasSkills(baseDir, platform, 'openspec', selectedPlatforms);
148
+ const hasSP = await hasSkills(baseDir, platform, 'superpowers', selectedPlatforms);
149
+ const hasCM = await hasSkills(baseDir, platform, 'opensuper', selectedPlatforms);
150
+ let osAction = resolveAction(hasOS, options);
151
+ let spAction = resolveAction(hasSP, options);
152
+ let cmAction = resolveAction(hasCM, options);
153
+ if (!options.yes) {
154
+ const existingComponents = [
155
+ hasOS && osAction === 'install' ? 'OpenSpec' : null,
156
+ hasSP && spAction === 'install' ? 'Superpowers' : null,
157
+ hasCM && cmAction === 'install' ? 'OpenSuper' : null,
158
+ ].filter((component) => Boolean(component));
159
+ if (existingComponents.length > 1) {
160
+ const bulkChoice = await promptBulkOverwriteChoice(platform.name, existingComponents);
161
+ if (bulkChoice !== 'choose') {
162
+ ({ osAction, spAction, cmAction } = applyBulkOverwriteChoice({ osAction, spAction, cmAction }, bulkChoice));
163
+ }
164
+ }
165
+ if (osAction === 'install' && hasOS) {
166
+ osAction = await promptOverwriteChoice('OpenSpec', platform.name);
167
+ }
168
+ if (spAction === 'install' && hasSP) {
169
+ spAction = await promptOverwriteChoice('Superpowers', platform.name);
170
+ }
171
+ if (cmAction === 'install' && hasCM) {
172
+ cmAction = await promptOverwriteChoice('OpenSuper', platform.name);
173
+ }
174
+ }
175
+ plans.push({ platform, osAction, spAction, cmAction, hasOS, hasSP, hasCM });
176
+ }
177
+ const osToolIds = plans
178
+ .filter((p) => p.osAction !== 'skip')
179
+ .map((p) => p.platform.openspecToolId);
180
+ let osGlobalStatus = 'skipped';
181
+ if (osToolIds.length > 0) {
182
+ log(`\n Installing OpenSpec for: ${osToolIds.join(', ')}`);
183
+ osGlobalStatus = await installOpenSpec(projectPath, osToolIds, scope);
184
+ log(` OpenSpec: ${osGlobalStatus}`);
185
+ }
186
+ else {
187
+ log(`\n OpenSpec: all skipped`);
188
+ }
189
+ const spPlatformIds = plans.filter((p) => p.spAction !== 'skip').map((p) => p.platform.id);
190
+ let spGlobalStatus = 'skipped';
191
+ if (spPlatformIds.length > 0) {
192
+ log(`\n Installing Superpowers for: ${spPlatformIds.join(', ')}`);
193
+ spGlobalStatus = await installSuperpowersForPlatforms(projectPath, scope, spPlatformIds);
194
+ log(` Superpowers: ${spGlobalStatus}`);
195
+ }
196
+ else {
197
+ log(`\n Superpowers: all skipped`);
198
+ }
199
+ const results = [];
200
+ for (const plan of plans) {
201
+ const { platform, cmAction } = plan;
202
+ const skillsPath = `${scope === 'global' ? '~/' : ''}${platform.skillsDir}/skills/`;
203
+ let cmStatus = 'skipped';
204
+ if (cmAction !== 'skip') {
205
+ const { copied } = await copyOpenSuperSkillsForPlatform(baseDir, platform, cmAction === 'overwrite', language.skillsDir);
206
+ cmStatus = copied > 0 ? 'installed' : 'skipped';
207
+ log(` OpenSuper -> ${platform.name}: ${cmStatus} (${copied} files) -> ${skillsPath}`);
208
+ }
209
+ else {
210
+ log(` OpenSuper -> ${platform.name}: skipped (already exists)`);
211
+ }
212
+ results.push({
213
+ platform,
214
+ openspec: osToolIds.includes(platform.openspecToolId) ? osGlobalStatus : 'skipped',
215
+ superpowers: plan.spAction !== 'skip' ? spGlobalStatus : 'skipped',
216
+ opensuper: cmStatus,
217
+ });
218
+ }
219
+ if (scope === 'project') {
220
+ await createWorkingDirs(projectPath);
221
+ }
222
+ if (options.json) {
223
+ console.log(JSON.stringify({
224
+ projectPath,
225
+ scope,
226
+ language: language.id,
227
+ selectedPlatforms: selectedPlatformIds,
228
+ results: results.map((result) => ({
229
+ platform: result.platform.id,
230
+ platformName: result.platform.name,
231
+ openspec: result.openspec,
232
+ superpowers: result.superpowers,
233
+ opensuper: result.opensuper,
234
+ })),
235
+ workingDirsCreated: scope === 'project',
236
+ }, null, 2));
237
+ return;
238
+ }
239
+ displaySummary(results, scope);
240
+ }
241
+ export { applyBulkOverwriteChoice };
242
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface StatusOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function statusCommand(targetPath: string, options?: StatusOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAsHA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,108 @@
1
+ import path from 'path';
2
+ import { fileExists, readDir } from '../utils/file-system.js';
3
+ import { promises as fs } from 'fs';
4
+ function getNextCommand(phase) {
5
+ switch (phase) {
6
+ case 'open':
7
+ return '/opensuper-open';
8
+ case 'design':
9
+ return '/opensuper-design';
10
+ case 'build':
11
+ return '/opensuper-build';
12
+ case 'verify':
13
+ return '/opensuper-verify';
14
+ case 'archive':
15
+ return '/opensuper-archive';
16
+ default:
17
+ return null;
18
+ }
19
+ }
20
+ async function countTasks(tasksPath) {
21
+ if (!(await fileExists(tasksPath)))
22
+ return { done: 0, total: 0 };
23
+ const content = await fs.readFile(tasksPath, 'utf-8');
24
+ const lines = content.split('\n');
25
+ const total = lines.filter((l) => /^\s*- \[[ x]\]/.test(l)).length;
26
+ const done = lines.filter((l) => /^\s*- \[x\]/i.test(l)).length;
27
+ return { done, total };
28
+ }
29
+ async function readOpenSuperState(changesDir, changeName) {
30
+ const yamlPath = path.join(changesDir, changeName, '.opensuper.yaml');
31
+ if (!(await fileExists(yamlPath)))
32
+ return null;
33
+ const raw = await fs.readFile(yamlPath, 'utf-8');
34
+ const state = {};
35
+ for (const line of raw.split('\n')) {
36
+ const stripped = line.replace(/\s+#.*$/, '');
37
+ const match = stripped.match(/^(\w[\w_]*):\s*(.*)/);
38
+ if (match)
39
+ state[match[1]] = match[2].trim();
40
+ }
41
+ return state;
42
+ }
43
+ async function getActiveChanges(projectPath) {
44
+ const changesDir = path.join(projectPath, 'openspec', 'changes');
45
+ if (!(await fileExists(changesDir)))
46
+ return [];
47
+ const entries = await readDir(changesDir);
48
+ const changes = [];
49
+ for (const entry of entries) {
50
+ const changeDir = path.join(changesDir, entry);
51
+ const stat = await fs.stat(changeDir);
52
+ if (!stat.isDirectory())
53
+ continue;
54
+ const state = await readOpenSuperState(changesDir, entry);
55
+ if (!state)
56
+ continue;
57
+ if (state.archived === 'true')
58
+ continue;
59
+ const { done, total } = await countTasks(path.join(changeDir, 'tasks.md'));
60
+ changes.push({
61
+ name: entry,
62
+ workflow: state.workflow ?? 'full',
63
+ phase: state.phase ?? 'unknown',
64
+ buildMode: state.build_mode ?? 'null',
65
+ isolation: state.isolation ?? 'null',
66
+ verifyMode: state.verify_mode ?? 'null',
67
+ verifyResult: state.verify_result ?? 'pending',
68
+ designDoc: state.design_doc === 'null' ? null : (state.design_doc ?? null),
69
+ plan: state.plan === 'null' ? null : (state.plan ?? null),
70
+ tasksCompleted: done,
71
+ tasksTotal: total,
72
+ nextCommand: getNextCommand(state.phase ?? 'unknown'),
73
+ });
74
+ }
75
+ return changes;
76
+ }
77
+ function displayStatus(changes) {
78
+ if (changes.length === 0) {
79
+ console.log('No active changes.\n');
80
+ return;
81
+ }
82
+ console.log('Active Changes:\n');
83
+ for (let i = 0; i < changes.length; i++) {
84
+ const c = changes[i];
85
+ const taskStr = c.tasksTotal > 0 ? ` [${c.tasksCompleted}/${c.tasksTotal} tasks]` : '';
86
+ console.log(` ${i + 1}. ${c.name} [phase: ${c.phase}${taskStr}]`);
87
+ console.log(` workflow: ${c.workflow} | build_mode: ${c.buildMode}`);
88
+ if (c.designDoc)
89
+ console.log(` design: ${c.designDoc}`);
90
+ if (c.plan)
91
+ console.log(` plan: ${c.plan}`);
92
+ if (c.phase === 'verify')
93
+ console.log(` verify_result: ${c.verifyResult}`);
94
+ if (c.nextCommand)
95
+ console.log(` next: ${c.nextCommand}`);
96
+ console.log();
97
+ }
98
+ }
99
+ export async function statusCommand(targetPath, options = {}) {
100
+ const projectPath = path.resolve(targetPath);
101
+ const changes = await getActiveChanges(projectPath);
102
+ if (options.json) {
103
+ console.log(JSON.stringify({ changes }, null, 2));
104
+ return;
105
+ }
106
+ displayStatus(changes);
107
+ }
108
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type Platform } from '../core/platforms.js';
2
+ import type { InstallScope } from '../core/types.js';
3
+ interface UpdateOptions {
4
+ json?: boolean;
5
+ language?: string;
6
+ scope?: InstallScope;
7
+ skipNpm?: boolean;
8
+ }
9
+ type SkillLanguage = 'en' | 'zh';
10
+ interface InstalledOpenSuperTarget {
11
+ scope: InstallScope;
12
+ platform: Platform;
13
+ language: SkillLanguage;
14
+ }
15
+ interface DetectTargetsOptions {
16
+ scopes?: InstallScope[];
17
+ globalBaseDir?: string;
18
+ }
19
+ declare function detectInstalledOpenSuperLanguage(baseDir: string, platform: Platform): Promise<SkillLanguage>;
20
+ declare function detectInstalledOpenSuperTargets(projectPath: string, options?: DetectTargetsOptions): Promise<InstalledOpenSuperTarget[]>;
21
+ declare function detectOpenSuperPackageScope(projectPath: string, packageRoot?: string): Promise<InstallScope>;
22
+ declare function buildNpmUpdateArgs(scope: InstallScope): string[];
23
+ declare function formatNpmUpdateCommand(scope: InstallScope): string;
24
+ declare function formatSkillUpdateCommand(scope: InstallScope, platform: Platform, languageSkillsDir: string): string;
25
+ export declare function updateCommand(targetPath: string, options?: UpdateOptions): Promise<void>;
26
+ export { buildNpmUpdateArgs, detectOpenSuperPackageScope, detectInstalledOpenSuperLanguage, detectInstalledOpenSuperTargets, formatNpmUpdateCommand, formatSkillUpdateCommand, };
27
+ export type { InstalledOpenSuperTarget, SkillLanguage };
28
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AASA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,UAAU,wBAAwB;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAoBD,iBAAe,gCAAgC,CAC7C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAiBxB;AAED,iBAAe,+BAA+B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAmBrC;AAOD,iBAAe,2BAA2B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,SAAyE,GACnF,OAAO,CAAC,YAAY,CAAC,CAsBvB;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAIzD;AAED,iBAAS,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE3D;AAED,iBAAS,wBAAwB,CAC/B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAGR;AAiBD,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAmHf;AAED,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,gCAAgC,EAChC,+BAA+B,EAC/B,sBAAsB,EACtB,wBAAwB,GACzB,CAAC;AACF,YAAY,EAAE,wBAAwB,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,193 @@
1
+ import path from 'path';
2
+ import os from 'os';
3
+ import { createRequire } from 'module';
4
+ import { promises as fs } from 'fs';
5
+ import { fileURLToPath } from 'url';
6
+ import { spawn } from 'child_process';
7
+ import { fileExists, readDir, readJson } from '../utils/file-system.js';
8
+ import { getBaseDir } from '../core/detect.js';
9
+ import { copyOpenSuperSkillsForPlatform, getManifestSkills } from '../core/skills.js';
10
+ import { PLATFORMS } from '../core/platforms.js';
11
+ const require = createRequire(import.meta.url);
12
+ const { version } = require('../../package.json');
13
+ const PACKAGE_NAME = '@pzy560117/opensuper';
14
+ function languageToSkillsDir(language, fallback) {
15
+ return (language ?? fallback) === 'zh' ? 'skills-zh' : 'skills';
16
+ }
17
+ function getScopedBaseDir(scope, projectPath, globalBaseDir = os.homedir()) {
18
+ return scope === 'global' ? globalBaseDir : projectPath;
19
+ }
20
+ async function hasLocalOpenSuperSkills(baseDir, platform) {
21
+ const skillsDir = path.join(baseDir, platform.skillsDir, 'skills');
22
+ const entries = await readDir(skillsDir);
23
+ return entries.some((entry) => entry.startsWith('opensuper'));
24
+ }
25
+ async function detectInstalledOpenSuperLanguage(baseDir, platform) {
26
+ const skillsDir = path.join(baseDir, platform.skillsDir, 'skills');
27
+ const entries = (await readDir(skillsDir)).filter((entry) => entry.startsWith('opensuper'));
28
+ for (const entry of entries) {
29
+ const skillPath = path.join(skillsDir, entry, 'SKILL.md');
30
+ if (!(await fileExists(skillPath)))
31
+ continue;
32
+ try {
33
+ const content = await fs.readFile(skillPath, 'utf-8');
34
+ if (/[\u3400-\u9fff]/u.test(content))
35
+ return 'zh';
36
+ }
37
+ catch {
38
+ // Fall through to the default English asset set if the file cannot be read.
39
+ }
40
+ }
41
+ return 'en';
42
+ }
43
+ async function detectInstalledOpenSuperTargets(projectPath, options = {}) {
44
+ const scopes = options.scopes ?? ['project', 'global'];
45
+ const targets = [];
46
+ for (const scope of scopes) {
47
+ const baseDir = getScopedBaseDir(scope, projectPath, options.globalBaseDir);
48
+ for (const platform of PLATFORMS) {
49
+ if (!(await hasLocalOpenSuperSkills(baseDir, platform)))
50
+ continue;
51
+ targets.push({
52
+ scope,
53
+ platform,
54
+ language: await detectInstalledOpenSuperLanguage(baseDir, platform),
55
+ });
56
+ }
57
+ }
58
+ return targets;
59
+ }
60
+ function isSameOrInside(childPath, parentPath) {
61
+ const relative = path.relative(path.resolve(parentPath), path.resolve(childPath));
62
+ return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
63
+ }
64
+ async function detectOpenSuperPackageScope(projectPath, packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..')) {
65
+ const localPackageRoot = path.join(projectPath, 'node_modules', 'opensuper');
66
+ if (isSameOrInside(packageRoot, localPackageRoot))
67
+ return 'project';
68
+ const packageJsonPath = path.join(projectPath, 'package.json');
69
+ if (await fileExists(packageJsonPath)) {
70
+ const pkg = await readJson(packageJsonPath);
71
+ if (pkg.dependencies?.[PACKAGE_NAME] ||
72
+ pkg.devDependencies?.[PACKAGE_NAME] ||
73
+ pkg.optionalDependencies?.[PACKAGE_NAME]) {
74
+ return 'project';
75
+ }
76
+ }
77
+ return 'global';
78
+ }
79
+ function buildNpmUpdateArgs(scope) {
80
+ return scope === 'global'
81
+ ? ['install', '-g', `${PACKAGE_NAME}@latest`]
82
+ : ['install', `${PACKAGE_NAME}@latest`];
83
+ }
84
+ function formatNpmUpdateCommand(scope) {
85
+ return ['npm', ...buildNpmUpdateArgs(scope)].join(' ');
86
+ }
87
+ function formatSkillUpdateCommand(scope, platform, languageSkillsDir) {
88
+ const destPrefix = scope === 'global' ? '~/' : '';
89
+ return `copy assets/${languageSkillsDir} -> ${destPrefix}${platform.skillsDir}/skills/ (${scope})`;
90
+ }
91
+ function getNpmExecutable() {
92
+ return process.platform === 'win32' ? 'npm.cmd' : 'npm';
93
+ }
94
+ async function updateOpenSuperNpmPackage(scope, projectPath) {
95
+ const args = buildNpmUpdateArgs(scope);
96
+ const cwd = scope === 'global' ? process.cwd() : projectPath;
97
+ return new Promise((resolve) => {
98
+ const child = spawn(getNpmExecutable(), args, { cwd, stdio: 'inherit' });
99
+ child.on('error', () => resolve(false));
100
+ child.on('exit', (code) => resolve(code === 0));
101
+ });
102
+ }
103
+ export async function updateCommand(targetPath, options = {}) {
104
+ const projectPath = path.resolve(targetPath);
105
+ const log = options.json ? () => undefined : console.log;
106
+ log(`\n OpenSuper Update v${version}\n`);
107
+ const packageScope = options.scope ?? (await detectOpenSuperPackageScope(projectPath));
108
+ let npmStatus = 'skipped';
109
+ if (!options.skipNpm) {
110
+ log(` Updating npm package (${packageScope} scope)...`);
111
+ log(` $ ${formatNpmUpdateCommand(packageScope)}`);
112
+ const npmUpdated = await updateOpenSuperNpmPackage(packageScope, projectPath);
113
+ if (npmUpdated) {
114
+ npmStatus = 'updated';
115
+ log(` npm package: updated to latest ${PACKAGE_NAME}`);
116
+ }
117
+ else {
118
+ npmStatus = 'failed';
119
+ log(` npm package: update failed, continuing with bundled skills`);
120
+ }
121
+ }
122
+ const targets = await detectInstalledOpenSuperTargets(projectPath, {
123
+ scopes: options.scope ? [options.scope] : undefined,
124
+ });
125
+ if (targets.length === 0) {
126
+ if (options.json) {
127
+ console.log(JSON.stringify({
128
+ npm: {
129
+ scope: options.skipNpm ? 'skipped' : packageScope,
130
+ status: npmStatus,
131
+ command: options.skipNpm ? null : formatNpmUpdateCommand(packageScope),
132
+ },
133
+ skills: { totalCopied: 0, targets: [] },
134
+ }, null, 2));
135
+ return;
136
+ }
137
+ log('\n No platforms with opensuper skills installed. Run `opensuper init` first.\n');
138
+ return;
139
+ }
140
+ log(`\n Updating opensuper skills on ${targets.length} installed target(s):`);
141
+ for (const target of targets) {
142
+ const language = options.language ?? target.language;
143
+ const scopeLabel = target.scope === 'global' ? 'global' : `project (${projectPath})`;
144
+ const languageSkillsDir = languageToSkillsDir(options.language, target.language);
145
+ log(` - ${target.platform.name} (${scopeLabel}, ${language})`);
146
+ log(` $ ${formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir)}`);
147
+ }
148
+ // Copy skills for each platform (overwrite)
149
+ log(`\n Copying ${(await getManifestSkills()).length} skill files...\n`);
150
+ let totalCopied = 0;
151
+ const targetResults = [];
152
+ for (const target of targets) {
153
+ const baseDir = getBaseDir(target.scope, projectPath);
154
+ const languageSkillsDir = languageToSkillsDir(options.language, target.language);
155
+ const { copied, skipped } = await copyOpenSuperSkillsForPlatform(baseDir, target.platform, true, languageSkillsDir);
156
+ totalCopied += copied;
157
+ targetResults.push({
158
+ scope: target.scope,
159
+ platform: target.platform.id,
160
+ platformName: target.platform.name,
161
+ language: options.language ?? target.language,
162
+ source: languageSkillsDir,
163
+ copied,
164
+ skipped,
165
+ command: formatSkillUpdateCommand(target.scope, target.platform, languageSkillsDir),
166
+ });
167
+ log(` ${target.platform.name} (${target.scope}, ${languageSkillsDir}): ${copied} copied, ${skipped} skipped`);
168
+ }
169
+ if (options.json) {
170
+ console.log(JSON.stringify({
171
+ npm: {
172
+ scope: options.skipNpm ? 'skipped' : packageScope,
173
+ status: npmStatus,
174
+ command: options.skipNpm ? null : formatNpmUpdateCommand(packageScope),
175
+ },
176
+ skills: {
177
+ totalCopied,
178
+ targets: targetResults,
179
+ },
180
+ }, null, 2));
181
+ return;
182
+ }
183
+ const languages = [...new Set(targetResults.map((target) => target.language))].join(', ');
184
+ const scopes = [...new Set(targetResults.map((target) => target.scope))].join(', ');
185
+ log(`\n Summary:`);
186
+ log(` npm: ${npmStatus}${options.skipNpm ? '' : ` (${packageScope})`}`);
187
+ log(` skills: ${targets.length} target(s), ${totalCopied} files updated`);
188
+ log(` scope: ${scopes}`);
189
+ log(` language: ${languages}`);
190
+ log(`\n Update complete.\n`);
191
+ }
192
+ export { buildNpmUpdateArgs, detectOpenSuperPackageScope, detectInstalledOpenSuperLanguage, detectInstalledOpenSuperTargets, formatNpmUpdateCommand, formatSkillUpdateCommand, };
193
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type Platform } from './platforms.js';
2
+ import type { InstallScope } from './types.js';
3
+ declare function getBaseDir(scope: InstallScope, projectPath: string): string;
4
+ /**
5
+ * Check if superpowers are installed via Claude Code plugin system.
6
+ * Looks in ~/.claude/plugins/cache/{marketplace}/superpowers/{version}/skills/
7
+ */
8
+ declare function hasPluginSuperpowers(): Promise<boolean>;
9
+ declare function detectPlatforms(projectPath: string): Promise<Set<string>>;
10
+ declare function hasSkills(baseDir: string, platform: Platform, component: 'openspec' | 'superpowers' | 'opensuper', _selectedPlatforms?: Platform[]): Promise<boolean>;
11
+ export { detectPlatforms, hasSkills, hasPluginSuperpowers, getBaseDir };
12
+ export type { InstallScope };
13
+ //# sourceMappingURL=detect.d.ts.map