create-specfuse 0.2.3
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/README.md +203 -0
- package/bin/create-specfuse.js +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +3 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +103 -0
- package/dist/prompts.js.map +1 -0
- package/dist/scaffolder.d.ts +3 -0
- package/dist/scaffolder.d.ts.map +1 -0
- package/dist/scaffolder.js +233 -0
- package/dist/scaffolder.js.map +1 -0
- package/dist/stacks/bash.d.ts +5 -0
- package/dist/stacks/bash.d.ts.map +1 -0
- package/dist/stacks/bash.js +66 -0
- package/dist/stacks/bash.js.map +1 -0
- package/dist/stacks/cpp-cmake.d.ts +5 -0
- package/dist/stacks/cpp-cmake.d.ts.map +1 -0
- package/dist/stacks/cpp-cmake.js +74 -0
- package/dist/stacks/cpp-cmake.js.map +1 -0
- package/dist/stacks/detect.d.ts +11 -0
- package/dist/stacks/detect.d.ts.map +1 -0
- package/dist/stacks/detect.js +104 -0
- package/dist/stacks/detect.js.map +1 -0
- package/dist/stacks/dotnet.d.ts +5 -0
- package/dist/stacks/dotnet.d.ts.map +1 -0
- package/dist/stacks/dotnet.js +68 -0
- package/dist/stacks/dotnet.js.map +1 -0
- package/dist/stacks/elixir.d.ts +5 -0
- package/dist/stacks/elixir.d.ts.map +1 -0
- package/dist/stacks/elixir.js +68 -0
- package/dist/stacks/elixir.js.map +1 -0
- package/dist/stacks/go.d.ts +5 -0
- package/dist/stacks/go.d.ts.map +1 -0
- package/dist/stacks/go.js +68 -0
- package/dist/stacks/go.js.map +1 -0
- package/dist/stacks/index.d.ts +7 -0
- package/dist/stacks/index.d.ts.map +1 -0
- package/dist/stacks/index.js +84 -0
- package/dist/stacks/index.js.map +1 -0
- package/dist/stacks/java-gradle.d.ts +5 -0
- package/dist/stacks/java-gradle.d.ts.map +1 -0
- package/dist/stacks/java-gradle.js +69 -0
- package/dist/stacks/java-gradle.js.map +1 -0
- package/dist/stacks/java-maven.d.ts +5 -0
- package/dist/stacks/java-maven.d.ts.map +1 -0
- package/dist/stacks/java-maven.js +67 -0
- package/dist/stacks/java-maven.js.map +1 -0
- package/dist/stacks/kotlin.d.ts +5 -0
- package/dist/stacks/kotlin.d.ts.map +1 -0
- package/dist/stacks/kotlin.js +69 -0
- package/dist/stacks/kotlin.js.map +1 -0
- package/dist/stacks/php.d.ts +5 -0
- package/dist/stacks/php.d.ts.map +1 -0
- package/dist/stacks/php.js +68 -0
- package/dist/stacks/php.js.map +1 -0
- package/dist/stacks/python-fastapi.d.ts +5 -0
- package/dist/stacks/python-fastapi.d.ts.map +1 -0
- package/dist/stacks/python-fastapi.js +75 -0
- package/dist/stacks/python-fastapi.js.map +1 -0
- package/dist/stacks/ruby.d.ts +5 -0
- package/dist/stacks/ruby.d.ts.map +1 -0
- package/dist/stacks/ruby.js +69 -0
- package/dist/stacks/ruby.js.map +1 -0
- package/dist/stacks/rust.d.ts +5 -0
- package/dist/stacks/rust.d.ts.map +1 -0
- package/dist/stacks/rust.js +65 -0
- package/dist/stacks/rust.js.map +1 -0
- package/dist/stacks/scala-sbt.d.ts +5 -0
- package/dist/stacks/scala-sbt.d.ts.map +1 -0
- package/dist/stacks/scala-sbt.js +68 -0
- package/dist/stacks/scala-sbt.js.map +1 -0
- package/dist/stacks/schema.d.ts +91 -0
- package/dist/stacks/schema.d.ts.map +1 -0
- package/dist/stacks/schema.js +23 -0
- package/dist/stacks/schema.js.map +1 -0
- package/dist/stacks/swift.d.ts +5 -0
- package/dist/stacks/swift.d.ts.map +1 -0
- package/dist/stacks/swift.js +69 -0
- package/dist/stacks/swift.js.map +1 -0
- package/dist/stacks/typescript-react.d.ts +5 -0
- package/dist/stacks/typescript-react.d.ts.map +1 -0
- package/dist/stacks/typescript-react.js +73 -0
- package/dist/stacks/typescript-react.js.map +1 -0
- package/dist/templates/claude-md.d.ts +4 -0
- package/dist/templates/claude-md.d.ts.map +1 -0
- package/dist/templates/claude-md.js +241 -0
- package/dist/templates/claude-md.js.map +1 -0
- package/dist/templates/claude-settings.d.ts +3 -0
- package/dist/templates/claude-settings.d.ts.map +1 -0
- package/dist/templates/claude-settings.js +27 -0
- package/dist/templates/claude-settings.js.map +1 -0
- package/dist/templates/gitignore.d.ts +3 -0
- package/dist/templates/gitignore.d.ts.map +1 -0
- package/dist/templates/gitignore.js +39 -0
- package/dist/templates/gitignore.js.map +1 -0
- package/dist/templates/grill-me-skill.d.ts +2 -0
- package/dist/templates/grill-me-skill.d.ts.map +1 -0
- package/dist/templates/grill-me-skill.js +20 -0
- package/dist/templates/grill-me-skill.js.map +1 -0
- package/dist/templates/openspec-config.d.ts +3 -0
- package/dist/templates/openspec-config.d.ts.map +1 -0
- package/dist/templates/openspec-config.js +8 -0
- package/dist/templates/openspec-config.js.map +1 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +5 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +17 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/git.d.ts +4 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +21 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/tools.d.ts +7 -0
- package/dist/utils/tools.d.ts.map +1 -0
- package/dist/utils/tools.js +82 -0
- package/dist/utils/tools.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const SHARED_PERMISSIONS = [
|
|
2
|
+
'Bash(git status *)',
|
|
3
|
+
'Bash(git diff *)',
|
|
4
|
+
'Bash(git log *)',
|
|
5
|
+
'Bash(git branch *)',
|
|
6
|
+
'Bash(git add *)',
|
|
7
|
+
'Bash(git stash *)',
|
|
8
|
+
'Bash(git worktree *)',
|
|
9
|
+
'Bash(git init *)',
|
|
10
|
+
'Bash(git clone *)',
|
|
11
|
+
'Bash(openspec *)',
|
|
12
|
+
'Bash(find *)',
|
|
13
|
+
'Bash(ls *)',
|
|
14
|
+
'Bash(rg *)',
|
|
15
|
+
'Bash(grep *)',
|
|
16
|
+
'Bash(wc *)',
|
|
17
|
+
'Bash(tree *)',
|
|
18
|
+
'WebSearch',
|
|
19
|
+
];
|
|
20
|
+
export function composeClaudeSettings(stack) {
|
|
21
|
+
return {
|
|
22
|
+
permissions: {
|
|
23
|
+
allow: [...stack.permissions, ...SHARED_PERMISSIONS],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=claude-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../src/templates/claude-settings.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG;IACzB,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,cAAc;IACd,WAAW;CACZ,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,KAAmB;IACvD,OAAO;QACL,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,kBAAkB,CAAC;SACrD;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/templates/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgChD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQ5D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const SHARED_PATTERNS = [
|
|
2
|
+
'# IDE',
|
|
3
|
+
'.idea/',
|
|
4
|
+
'.vscode/',
|
|
5
|
+
'*.swp',
|
|
6
|
+
'*.swo',
|
|
7
|
+
'*~',
|
|
8
|
+
'',
|
|
9
|
+
'# OS',
|
|
10
|
+
'.DS_Store',
|
|
11
|
+
'Thumbs.db',
|
|
12
|
+
'',
|
|
13
|
+
'# Environment',
|
|
14
|
+
'.env',
|
|
15
|
+
'.env.local',
|
|
16
|
+
'.env.*.local',
|
|
17
|
+
'',
|
|
18
|
+
'# Logs',
|
|
19
|
+
'*.log',
|
|
20
|
+
'',
|
|
21
|
+
'# CodeGraph',
|
|
22
|
+
'.codegraph/',
|
|
23
|
+
'',
|
|
24
|
+
'# Grill review backups',
|
|
25
|
+
'.grill-backup/',
|
|
26
|
+
'',
|
|
27
|
+
'# Temporary',
|
|
28
|
+
'/tmp/',
|
|
29
|
+
];
|
|
30
|
+
export function composeGitignore(stack) {
|
|
31
|
+
const lines = [
|
|
32
|
+
'# Build & Dependencies',
|
|
33
|
+
...stack.gitignorePatterns,
|
|
34
|
+
'',
|
|
35
|
+
...SHARED_PATTERNS,
|
|
36
|
+
];
|
|
37
|
+
return lines.join('\n') + '\n';
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/templates/gitignore.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG;IACtB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,OAAO;IACP,IAAI;IACJ,EAAE;IACF,MAAM;IACN,WAAW;IACX,WAAW;IACX,EAAE;IACF,eAAe;IACf,MAAM;IACN,YAAY;IACZ,cAAc;IACd,EAAE;IACF,QAAQ;IACR,OAAO;IACP,EAAE;IACF,aAAa;IACb,aAAa;IACb,EAAE;IACF,wBAAwB;IACxB,gBAAgB;IAChB,EAAE;IACF,aAAa;IACb,OAAO;CACR,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,GAAG,KAAK,CAAC,iBAAiB;QAC1B,EAAE;QACF,GAAG,eAAe;KACnB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grill-me-skill.d.ts","sourceRoot":"","sources":["../../src/templates/grill-me-skill.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,IAAI,MAAM,CAkB5C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function composeGrillMeSkill() {
|
|
2
|
+
return `---
|
|
3
|
+
name: grill-me
|
|
4
|
+
description: Pre-apply review — stress-test all artifacts before implementation. Use when artifacts are complete and you want a structured review before /opsx:apply.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Activate the **Pre-Apply Review (Grill)** protocol defined in CLAUDE.md.
|
|
8
|
+
|
|
9
|
+
Follow the "Pre-Apply Review (Grill)" section rules exactly:
|
|
10
|
+
1. Backup change directory to \`.grill-backup/\` before grill begins
|
|
11
|
+
2. Review all artifacts (proposal, design, specs, tasks) one question at a time
|
|
12
|
+
3. Each question: [blocking/non-blocking] + issue + recommended answer + modification preview
|
|
13
|
+
4. Direct-modify artifacts on acceptance (user must see final diff before write)
|
|
14
|
+
5. Run consistency scan before summary
|
|
15
|
+
6. Output summary and prompt \`/opsx:apply\`
|
|
16
|
+
|
|
17
|
+
Exit commands: \`grill-stop\` (keep changes), \`grill-abort\` (rollback from backup).
|
|
18
|
+
`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=grill-me-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grill-me-skill.js","sourceRoot":"","sources":["../../src/templates/grill-me-skill.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;CAgBR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openspec-config.d.ts","sourceRoot":"","sources":["../../src/templates/openspec-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAMlE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openspec-config.js","sourceRoot":"","sources":["../../src/templates/openspec-config.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,GAAoB;IACxD,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,eAAe;QAClC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa;KAC/B,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface StackCommands {
|
|
2
|
+
build: string;
|
|
3
|
+
test: string;
|
|
4
|
+
lint: string;
|
|
5
|
+
format?: string;
|
|
6
|
+
typecheck?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface StackProfile {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
languages: string[];
|
|
12
|
+
framework?: string;
|
|
13
|
+
architecture: string;
|
|
14
|
+
commands: StackCommands;
|
|
15
|
+
errorHandling: string;
|
|
16
|
+
concurrency: string;
|
|
17
|
+
permissions: string[];
|
|
18
|
+
gitignorePatterns: string[];
|
|
19
|
+
openspecContext: string;
|
|
20
|
+
openspecRules: Record<string, string[]>;
|
|
21
|
+
}
|
|
22
|
+
export interface ProjectConfig {
|
|
23
|
+
projectName: string;
|
|
24
|
+
stack: StackProfile;
|
|
25
|
+
initGit: boolean;
|
|
26
|
+
initOpenspec: boolean;
|
|
27
|
+
initCodegraph: boolean;
|
|
28
|
+
targetDir: string;
|
|
29
|
+
isExisting: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface TemplateContext {
|
|
32
|
+
projectName: string;
|
|
33
|
+
stack: StackProfile;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACrB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function createDir(dir: string): Promise<void>;
|
|
2
|
+
export declare function writeText(filePath: string, content: string): Promise<void>;
|
|
3
|
+
export declare function writeJSON(filePath: string, obj: object): Promise<void>;
|
|
4
|
+
export declare function writeYAML(filePath: string, obj: object): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E"}
|
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { stringify as toYAML } from 'yaml';
|
|
4
|
+
export async function createDir(dir) {
|
|
5
|
+
await mkdir(dir, { recursive: true });
|
|
6
|
+
}
|
|
7
|
+
export async function writeText(filePath, content) {
|
|
8
|
+
await createDir(path.dirname(filePath));
|
|
9
|
+
await writeFile(filePath, content, 'utf-8');
|
|
10
|
+
}
|
|
11
|
+
export async function writeJSON(filePath, obj) {
|
|
12
|
+
await writeText(filePath, JSON.stringify(obj, null, 2) + '\n');
|
|
13
|
+
}
|
|
14
|
+
export async function writeYAML(filePath, obj) {
|
|
15
|
+
await writeText(filePath, toYAML(obj, { lineWidth: 120 }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IAC3D,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IAC3D,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const exec = promisify(execFile);
|
|
4
|
+
export async function gitInit(cwd) {
|
|
5
|
+
await exec('git', ['init'], { cwd });
|
|
6
|
+
await exec('git', ['branch', '-M', 'main'], { cwd });
|
|
7
|
+
}
|
|
8
|
+
export async function gitInitialCommit(cwd) {
|
|
9
|
+
await exec('git', ['add', '-A'], { cwd });
|
|
10
|
+
await exec('git', ['commit', '-m', 'chore: scaffold project with fusion methodology'], { cwd });
|
|
11
|
+
}
|
|
12
|
+
export async function tryOpenspecInit(cwd) {
|
|
13
|
+
try {
|
|
14
|
+
await exec('openspec', ['init', '--tools', 'claude', '--force'], { cwd });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW;IACvC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,iDAAiD,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function detectCodegraph(): Promise<boolean>;
|
|
2
|
+
export declare function installCodegraph(): Promise<boolean>;
|
|
3
|
+
export declare function initCodegraph(cwd: string): Promise<boolean>;
|
|
4
|
+
export declare function detectOpenspec(): Promise<boolean>;
|
|
5
|
+
export declare function installOpenspec(): Promise<boolean>;
|
|
6
|
+
export declare function initOpenspec(cwd: string): Promise<boolean>;
|
|
7
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/utils/tools.ts"],"names":[],"mappings":"AASA,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAUzD;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASjE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQhE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { exec as execCb } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const execShell = promisify(execCb);
|
|
4
|
+
const homedir = process.env.HOME || process.env.USERPROFILE || '';
|
|
5
|
+
const LOCAL_BIN = `${homedir}/.local/bin`;
|
|
6
|
+
const ENV_WITH_LOCAL_BIN = { ...process.env, PATH: `${LOCAL_BIN}:${process.env.PATH}` };
|
|
7
|
+
export async function detectCodegraph() {
|
|
8
|
+
try {
|
|
9
|
+
await execShell('codegraph --version', { env: ENV_WITH_LOCAL_BIN });
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function installCodegraph() {
|
|
17
|
+
if (process.platform === 'win32') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
await execShell('curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh');
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function initCodegraph(cwd) {
|
|
29
|
+
try {
|
|
30
|
+
const env = { ...ENV_WITH_LOCAL_BIN, CI: 'true' };
|
|
31
|
+
await execShell('codegraph init -i', { cwd, env });
|
|
32
|
+
await execShell('codegraph install -y', { cwd, env });
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function detectOpenspec() {
|
|
40
|
+
try {
|
|
41
|
+
await execShell('openspec --version');
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export async function installOpenspec() {
|
|
49
|
+
try {
|
|
50
|
+
await execShell('npm install -g @fission-ai/openspec');
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function initOpenspec(cwd) {
|
|
58
|
+
try {
|
|
59
|
+
await execShell('openspec init --tools claude --force', { cwd });
|
|
60
|
+
await configureOpenspecProfile();
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function configureOpenspecProfile() {
|
|
68
|
+
try {
|
|
69
|
+
await execShell('openspec config set profile custom');
|
|
70
|
+
const workflows = ['propose', 'explore', 'new', 'continue', 'apply', 'ff', 'sync', 'archive', 'bulk-archive', 'verify', 'onboard'];
|
|
71
|
+
const { readFileSync, writeFileSync } = await import('node:fs');
|
|
72
|
+
const { execSync } = await import('node:child_process');
|
|
73
|
+
const configPath = execSync('openspec config path', { encoding: 'utf-8' }).trim();
|
|
74
|
+
const config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
75
|
+
config.workflows = workflows;
|
|
76
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// non-fatal
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/utils/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-specfuse",
|
|
3
|
+
"version": "0.2.3",
|
|
4
|
+
"description": "Scaffold projects with OpenSpec + Superpowers fusion methodology",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-specfuse": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"bin",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18.0.0"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"dev": "tsc --watch"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@inquirer/prompts": "^7.8.0",
|
|
24
|
+
"chalk": "^5.5.0",
|
|
25
|
+
"commander": "^14.0.0",
|
|
26
|
+
"ora": "^8.2.0",
|
|
27
|
+
"yaml": "^2.8.2",
|
|
28
|
+
"zod": "^3.24.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^22.0.0",
|
|
32
|
+
"typescript": "^5.8.0",
|
|
33
|
+
"vitest": "^3.2.0"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"openspec",
|
|
37
|
+
"superpowers",
|
|
38
|
+
"scaffolding",
|
|
39
|
+
"ai-coding",
|
|
40
|
+
"tdd",
|
|
41
|
+
"claude-code"
|
|
42
|
+
],
|
|
43
|
+
"license": "MIT"
|
|
44
|
+
}
|