@yarkingulacti/agentic-scaffold 0.7.0 → 0.8.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 (59) hide show
  1. package/README.md +63 -26
  2. package/dist/bin/index.d.ts +2 -0
  3. package/dist/bin/index.js +111 -0
  4. package/dist/bin/index.js.map +1 -0
  5. package/dist/src/config.d.ts +70 -0
  6. package/dist/src/config.js +115 -0
  7. package/dist/src/config.js.map +1 -0
  8. package/dist/src/detect.d.ts +16 -0
  9. package/dist/src/detect.js +104 -0
  10. package/dist/src/detect.js.map +1 -0
  11. package/dist/src/fs-utils.d.ts +14 -0
  12. package/dist/src/fs-utils.js +86 -0
  13. package/dist/src/fs-utils.js.map +1 -0
  14. package/dist/src/prompts.d.ts +4 -0
  15. package/dist/src/prompts.js +46 -0
  16. package/dist/src/prompts.js.map +1 -0
  17. package/dist/src/scaffold.d.ts +2 -0
  18. package/dist/src/scaffold.js +136 -0
  19. package/dist/src/scaffold.js.map +1 -0
  20. package/dist/src/templates.d.ts +5 -0
  21. package/dist/src/templates.js +44 -0
  22. package/dist/src/templates.js.map +1 -0
  23. package/dist/src/ui.d.ts +6 -0
  24. package/dist/src/ui.js +38 -0
  25. package/dist/src/ui.js.map +1 -0
  26. package/dist/src/unscaffold.d.ts +4 -0
  27. package/dist/src/unscaffold.js +75 -0
  28. package/dist/src/unscaffold.js.map +1 -0
  29. package/package.json +29 -8
  30. package/templates/docs/CODING_PRINCIPLES.md +1 -1
  31. package/templates/docs/agents/domain.md.hbs +21 -18
  32. package/templates/docs/agents/issue-tracker.md.hbs +4 -4
  33. package/templates/docs/agents/session-close.md.hbs +5 -5
  34. package/templates/docs/context/INDEX.md +1 -1
  35. package/templates/hooks/post-bugfix.md.hbs +3 -3
  36. package/templates/hooks/post-feature.md.hbs +4 -4
  37. package/templates/hooks/post-session.md.hbs +6 -6
  38. package/templates/hooks/pre-feature.md.hbs +3 -3
  39. package/templates/root/AGENTS.md.hbs +21 -21
  40. package/templates/root/BUSINESS_LOGIC.md.hbs +2 -2
  41. package/templates/root/CLAUDE.md.hbs +21 -21
  42. package/templates/scripts/memory_common.py.hbs +5 -5
  43. package/templates/skills/bugfix/SKILL.md +2 -2
  44. package/templates/skills/create-hook/SKILL.md +8 -8
  45. package/templates/skills/diagnose/SKILL.md +1 -1
  46. package/templates/skills/fill-docs/SKILL.md +8 -8
  47. package/templates/skills/implement/SKILL.md +6 -6
  48. package/templates/skills/issue/SKILL.md +2 -2
  49. package/templates/skills/monthly/SKILL.md +1 -1
  50. package/templates/skills/next/SKILL.md +28 -0
  51. package/templates/skills/status/SKILL.md +2 -2
  52. package/templates/skills/summary/SKILL.md +2 -2
  53. package/templates/skills/today/SKILL.md +4 -4
  54. package/templates/skills/weekly/SKILL.md +2 -2
  55. package/bin/index.js +0 -93
  56. package/src/detect.js +0 -96
  57. package/src/prompts.js +0 -45
  58. package/src/scaffold.js +0 -352
  59. package/src/ui.js +0 -44
package/README.md CHANGED
@@ -64,34 +64,44 @@ npx @yarkingulacti/agentic-scaffold --skip-skills --skip-scripts --skip-hooks
64
64
 
65
65
  # Pre-configure values
66
66
  npx @yarkingulacti/agentic-scaffold --project-name "my-app" --issue-tracker github
67
+
68
+ # Remove all scaffolded files (asks for confirmation)
69
+ npx @yarkingulacti/agentic-scaffold un
70
+
71
+ # Remove without confirmation
72
+ npx @yarkingulacti/agentic-scaffold un --force
67
73
  ```
68
74
 
69
75
  ## What you get
70
76
 
71
77
  ```
72
78
  project/
73
- ├── AGENTS.md # Agent config (entry point for AI agents)
74
- ├── CLAUDE.md # Mirror of AGENTS.md
75
- ├── BUSINESS_LOGIC.md # Shell fill with your domain
76
- ├── .gitignore
77
- ├── docs/
78
- ├── CODING_PRINCIPLES.md # Operating rules for code
79
- ├── adr/TEMPLATE.md # Architecture Decision Record template
80
- ├── agents/
81
- ├── domain.md # How to consume domain docs
82
- ├── session-close.md # Post-coding session workflow
83
- ├── issue-tracker.md # Issue tracker conventions
84
- │ │ └── triage-labels.md # Triage status vocabulary
85
- │ ├── context/
86
- │ │ ├── INDEX.md # Section index for CONTEXT.md
87
- │ │ └── glossary.md # Ubiquitous language glossary
88
- │ ├── engineering/README.md
89
- └── product/README.md
90
- ├── .agents/skills/ # Agent skill definitions (21 skills)
91
- ├── .agents/hooks/ # Pre/post lifecycle hooks for agent workflows
92
- ├── scripts/ # Markdown memory indexing pipeline
93
- ├── .scratchpad/ # Local detailed planning
94
- └── .history/ # Shipped work summaries
79
+ ├── AGENTS.md -> .agentic-scaffold/AGENTS.md # Symlink entry point
80
+ ├── CLAUDE.md -> .agentic-scaffold/CLAUDE.md # Symlink entry point
81
+ └── .agentic-scaffold/ # Single wrapper directory
82
+ ├── AGENTS.md # Agent config (entry point for AI agents)
83
+ ├── CLAUDE.md # Mirror of AGENTS.md
84
+ ├── BUSINESS_LOGIC.md # Shell fill with your domain
85
+ ├── .gitignore
86
+ ├── docs/
87
+ │ ├── CODING_PRINCIPLES.md # Operating rules for code
88
+ │ ├── adr/TEMPLATE.md # Architecture Decision Record template
89
+ │ ├── agents/
90
+ │ │ ├── domain.md # How to consume domain docs
91
+ ├── session-close.md # Post-coding session workflow
92
+ │ │ ├── issue-tracker.md # Issue tracker conventions
93
+ │ │ └── triage-labels.md # Triage status vocabulary
94
+ │ ├── context/
95
+ │ ├── INDEX.md # Section index for CONTEXT.md
96
+ │ │ └── glossary.md # Ubiquitous language glossary
97
+ ├── engineering/README.md
98
+ │ └── product/README.md
99
+ ├── .agents/
100
+ │ ├── skills/ # Agent skill definitions (22 skills)
101
+ │ └── hooks/ # Pre/post lifecycle hooks
102
+ ├── scripts/ # Markdown memory indexing pipeline
103
+ ├── .scratchpad/ # Local detailed planning
104
+ └── .history/ # Shipped work summaries
95
105
  ```
96
106
 
97
107
  ## Auto-detection
@@ -126,6 +136,19 @@ CLI flags.
126
136
  - **`--skip-hooks` flag** — skip the hooks component group.
127
137
  - **98 tests** — detection, scaffolding, CLI, and hooks tested end-to-end.
128
138
 
139
+ ## New in v0.7.1
140
+
141
+ - **`unscaffold` command** — `npx @yarkingulacti/agentic-scaffold un` removes all scaffolded files and symlinks interactively; `--force` skips confirmation.
142
+ - **`next` skill** — new agent skill for planning and executing the next development step.
143
+ - **Template refinements** — improved task/issue descriptions, clearer checklists, refined AGENTS.md/CLAUDE.md formatting across all templates.
144
+ - **164 tests** — detection, scaffolding, CLI, unscaffold, and all hooks tested end-to-end.
145
+
146
+ ## New in v0.6
147
+
148
+ - **Interactive mode redesign** — shows detected project profile before prompts, pre-fills prompts with detected values, and per-file conflict resolver that asks before overwriting existing files.
149
+ - **MEMORY.md golden rules** — feature branches mandatory for new features, every release gets a version tag.
150
+ - **Per-file conflict resolution** — `askOverwrite()` prompt lets you decide for each existing file during scaffolding.
151
+
129
152
  ## New in v0.5
130
153
 
131
154
  - **`fill-docs` skill** — new agent skill that interviews you to complete placeholder content in BUSINESS_LOGIC.md, glossary, and other scaffolded docs.
@@ -154,12 +177,26 @@ CLI flags.
154
177
 
155
178
  ## After scaffolding
156
179
 
157
- 1. Fill in `BUSINESS_LOGIC.md` with your product domain.
180
+ 1. Fill in `.agentic-scaffold/BUSINESS_LOGIC.md` with your product domain.
158
181
  2. Run `npm install` / `pnpm install` for your project's actual dependencies.
159
182
  3. `python3 -m venv .venv && pip install sqlite-vec` if you want vector memory.
160
- 4. Install the skills in your AI tool (e.g. opencode) — each `.agents/skills/*/SKILL.md` is self-contained.
161
- 5. Customize `docs/agents/triage-labels.md` to match your tracker's vocabulary.
162
- 6. Use the `fill-docs` skill (`.agents/skills/fill-docs/SKILL.md`) to complete scaffolded documentation.
183
+ 4. Install the skills in your AI tool (e.g. opencode) — each `.agentic-scaffold/.agents/skills/*/SKILL.md` is self-contained.
184
+ 5. Customize `.agentic-scaffold/docs/agents/triage-labels.md` to match your tracker's vocabulary.
185
+ 6. Use the `fill-docs` skill (`.agentic-scaffold/.agents/skills/fill-docs/SKILL.md`) to complete scaffolded documentation.
186
+
187
+ ## Unscaffold
188
+
189
+ Remove all scaffolded files in one command:
190
+
191
+ ```bash
192
+ # Interactive (asks for confirmation)
193
+ npx @yarkingulacti/agentic-scaffold un
194
+
195
+ # Non-interactive
196
+ npx @yarkingulacti/agentic-scaffold un --force
197
+ ```
198
+
199
+ This removes the entire `.agentic-scaffold/` directory and the root-level symlinks (AGENTS.md, CLAUDE.md). Your project files are left untouched.
163
200
 
164
201
  ## Open source
165
202
 
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ import yargs from "yargs";
3
+ import { hideBin } from "yargs/helpers";
4
+ import { scaffold } from "../src/scaffold.js";
5
+ import { unscaffold } from "../src/unscaffold.js";
6
+ function scaffoldBuilder(y) {
7
+ return y
8
+ .epilogue("Tiers:\n" +
9
+ " Zero-config Run with no flags — auto-detect project, scaffold only\n" +
10
+ " what's missing. Never overwrites existing files.\n" +
11
+ " Flag mode Override auto-detection with --package-manager,\n" +
12
+ " --ci-provider, --ai-tools, etc. Add --force to overwrite.\n" +
13
+ " Interactive Run with -i / --interactive for step-by-step prompts.")
14
+ .example("$0", "Zero-config: auto-detect and scaffold missing files")
15
+ .example("$0 --force", "Force overwrite existing files")
16
+ .example("$0 --ci-provider github", "Override auto-detected CI provider")
17
+ .example("$0 --ai-tools opencode,cursor", "Generate configs for specific AI tools")
18
+ .example("$0 -i", "Interactive mode with prompts")
19
+ .option("interactive", {
20
+ alias: "i",
21
+ type: "boolean",
22
+ description: "Run in interactive mode with prompts",
23
+ default: false,
24
+ })
25
+ .option("target", {
26
+ alias: "t",
27
+ type: "string",
28
+ description: "Target directory (default: current working directory)",
29
+ default: process.cwd(),
30
+ })
31
+ .option("only", {
32
+ type: "string",
33
+ description: "Comma-separated component groups to include: docs,scripts,skills,all",
34
+ default: "all",
35
+ })
36
+ .option("skip-skills", {
37
+ type: "boolean",
38
+ description: "Skip agent skill definitions",
39
+ })
40
+ .option("skip-hooks", {
41
+ type: "boolean",
42
+ description: "Skip agent lifecycle hook templates",
43
+ })
44
+ .option("skip-scripts", {
45
+ type: "boolean",
46
+ description: "Skip memory scripts",
47
+ default: false,
48
+ })
49
+ .option("skip-docs", {
50
+ type: "boolean",
51
+ description: "Skip docs folder",
52
+ default: false,
53
+ })
54
+ .option("project-name", {
55
+ type: "string",
56
+ description: "Project name (used in generated files)",
57
+ })
58
+ .option("issue-tracker", {
59
+ type: "string",
60
+ choices: ["linear", "github", "both"],
61
+ description: "Issue tracker type",
62
+ })
63
+ .option("force", {
64
+ alias: "f",
65
+ type: "boolean",
66
+ description: "Overwrite existing files",
67
+ default: false,
68
+ })
69
+ .option("package-manager", {
70
+ type: "string",
71
+ choices: ["npm", "yarn", "pnpm", "pip", "poetry", "go-mod", "cargo"],
72
+ description: "Package manager (overrides auto-detection)",
73
+ })
74
+ .option("ci-provider", {
75
+ type: "string",
76
+ choices: ["github", "gitlab", "circleci"],
77
+ description: "CI provider (overrides auto-detection)",
78
+ })
79
+ .option("ai-tools", {
80
+ type: "string",
81
+ description: "Comma-separated AI tools to configure: opencode,cursor,copilot",
82
+ })
83
+ .option("script-language", {
84
+ type: "string",
85
+ choices: ["python", "node", "docker"],
86
+ description: "Memory script language (overrides auto-detection)",
87
+ });
88
+ }
89
+ function unBuilder(y) {
90
+ return y
91
+ .option("target", {
92
+ alias: "t",
93
+ type: "string",
94
+ description: "Target directory (default: current working directory)",
95
+ default: process.cwd(),
96
+ })
97
+ .option("force", {
98
+ alias: "f",
99
+ type: "boolean",
100
+ description: "Remove without confirmation",
101
+ default: false,
102
+ });
103
+ }
104
+ const _argv = yargs(hideBin(process.argv))
105
+ .command(["$0", "scaffold"], "Scaffold agentic configuration into a project", scaffoldBuilder, (argv) => scaffold(argv))
106
+ .command("un", "Remove scaffolded files from a project", unBuilder, (argv) => unscaffold(argv))
107
+ .demandCommand(1, "Use --help to see available commands")
108
+ .help()
109
+ .parse();
110
+ _argv;
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../bin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ export declare const DEFAULTS: {
2
+ projectDescription: string;
3
+ issueTracker: string;
4
+ scriptLanguage: string;
5
+ };
6
+ export interface ScaffoldArgs {
7
+ target?: string;
8
+ projectName?: string;
9
+ projectDescription?: string;
10
+ issueTracker?: string;
11
+ packageManager?: string;
12
+ ciProvider?: string;
13
+ aiTools?: string;
14
+ scriptLanguage?: string;
15
+ force?: boolean;
16
+ interactive?: boolean;
17
+ only?: string;
18
+ skipDocs?: boolean;
19
+ skipSkills?: boolean;
20
+ skipScripts?: boolean;
21
+ skipHooks?: boolean;
22
+ }
23
+ export interface ScaffoldConfig {
24
+ target: string;
25
+ scaffoldDir: string;
26
+ projectName: string;
27
+ projectDescription: string;
28
+ languages: string[];
29
+ issueTracker: string;
30
+ packageManager: string | null;
31
+ ciProvider: string | null;
32
+ aiTools: string[];
33
+ scriptLanguage: string;
34
+ force: boolean;
35
+ interactive: boolean;
36
+ include: Set<string>;
37
+ }
38
+ export interface TrackerDoc {
39
+ name: string;
40
+ description: string;
41
+ trackerDoc: string;
42
+ short: string;
43
+ statusTable: string;
44
+ envFile: string;
45
+ envTemplate: string;
46
+ }
47
+ export interface HandlebarsData {
48
+ projectName: string;
49
+ projectDescription: string;
50
+ scriptsDir: string;
51
+ issueTrackerName: string;
52
+ issueTrackerDescription: string;
53
+ issueTrackerShort: string;
54
+ statusTable: string;
55
+ trackerDoc: string;
56
+ envFile: string;
57
+ envTemplate: string;
58
+ packageManager: string | null;
59
+ ciProvider: string | null;
60
+ scriptLanguage: string;
61
+ scaffoldVersion: string;
62
+ incompleteFiles: IncompleteFile[];
63
+ }
64
+ export interface IncompleteFile {
65
+ file: string;
66
+ sections: string;
67
+ }
68
+ export declare function resolveConfig(argv: ScaffoldArgs): ScaffoldConfig;
69
+ export declare function buildHandlebars(config: ScaffoldConfig, version: string): HandlebarsData;
70
+ export declare function buildIncompleteFiles(config: ScaffoldConfig): IncompleteFile[];
@@ -0,0 +1,115 @@
1
+ import { join } from "node:path";
2
+ import { detectProjectProfile } from "./detect.js";
3
+ export const DEFAULTS = {
4
+ projectDescription: "A project.",
5
+ issueTracker: "linear",
6
+ scriptLanguage: "python",
7
+ };
8
+ const ISSUE_TRACKER_DOCS = {
9
+ linear: {
10
+ name: "Linear",
11
+ description: "Short implementation records live in Linear. Local, detailed planning lives in `.agentic-scaffold/.scratchpad/<feature>/`. See `.agentic-scaffold/docs/agents/issue-tracker.md`.",
12
+ trackerDoc: "Linear",
13
+ short: "Short issue records live in Linear. Local detailed planning lives in `.agentic-scaffold/.scratchpad/`.",
14
+ statusTable: [
15
+ "| Label | Status string | Meaning |",
16
+ "|-------|--------------|---------|",
17
+ "| needs-triage | `needs-triage` | Maintainer needs to evaluate this issue |",
18
+ "| needs-info | `needs-info` | Waiting on reporter for more information |",
19
+ "| ready-for-agent | `ready-for-agent` | Fully specified, ready for an AI agent |",
20
+ "| ready-for-human | `ready-for-human` | Requires human implementation |",
21
+ "| wontfix | `wontfix` | Will not be actioned |",
22
+ ].join("\n"),
23
+ envFile: ".env.linear\n.env.linear.local",
24
+ envTemplate: "LINEAR_TEAM_KEY=\nLINEAR_PROJECT_ID=",
25
+ },
26
+ github: {
27
+ name: "GitHub Issues",
28
+ description: "Short implementation records live in GitHub Issues. Local, detailed planning lives in `.agentic-scaffold/.scratchpad/<feature>/`. See `.agentic-scaffold/docs/agents/issue-tracker.md`.",
29
+ trackerDoc: "GitHub Issues",
30
+ short: "Short issue records live in GitHub Issues. Local detailed planning lives in `.scratchpad/`.",
31
+ statusTable: [
32
+ "| Label | Meaning |",
33
+ "|-------|---------|",
34
+ "| `needs-triage` | Maintainer needs to evaluate this issue |",
35
+ "| `needs-info` | Waiting on reporter for more information |",
36
+ "| `ready-for-agent` | Fully specified, ready for an AI agent |",
37
+ "| `ready-for-human` | Requires human implementation |",
38
+ "| `wontfix` | Will not be actioned |",
39
+ ].join("\n"),
40
+ envFile: "",
41
+ envTemplate: "",
42
+ },
43
+ };
44
+ function resolveIncludes(argv) {
45
+ if (argv.only && argv.only !== "all") {
46
+ return new Set(argv.only.split(",").map((s) => s.trim()));
47
+ }
48
+ const set = new Set(["docs", "scripts", "skills", "hooks"]);
49
+ if (argv.skipDocs)
50
+ set.delete("docs");
51
+ if (argv.skipScripts)
52
+ set.delete("scripts");
53
+ if (argv.skipSkills)
54
+ set.delete("skills");
55
+ if (argv.skipHooks)
56
+ set.delete("hooks");
57
+ return set;
58
+ }
59
+ export function resolveConfig(argv) {
60
+ const target = argv.target || process.cwd();
61
+ const profile = detectProjectProfile(target);
62
+ return {
63
+ target,
64
+ scaffoldDir: join(target, ".agentic-scaffold"),
65
+ projectName: argv.projectName ?? profile.projectName ?? target.split("/").filter(Boolean).pop() ?? "project",
66
+ projectDescription: argv.projectDescription ?? DEFAULTS.projectDescription,
67
+ languages: profile.languages,
68
+ issueTracker: argv.issueTracker ?? profile.issueTracker ?? DEFAULTS.issueTracker,
69
+ packageManager: argv.packageManager ?? profile.packageManager ?? null,
70
+ ciProvider: argv.ciProvider ?? profile.ciProvider ?? null,
71
+ aiTools: argv.aiTools
72
+ ? argv.aiTools
73
+ .split(",")
74
+ .map((s) => s.trim())
75
+ .filter(Boolean)
76
+ : profile.aiTools,
77
+ scriptLanguage: argv.scriptLanguage ?? profile.scriptLanguage ?? DEFAULTS.scriptLanguage,
78
+ force: argv.force ?? false,
79
+ interactive: argv.interactive ?? false,
80
+ include: resolveIncludes(argv),
81
+ };
82
+ }
83
+ export function buildHandlebars(config, version) {
84
+ const tracker = ISSUE_TRACKER_DOCS[config.issueTracker] || ISSUE_TRACKER_DOCS.linear;
85
+ return {
86
+ projectName: config.projectName,
87
+ projectDescription: config.projectDescription,
88
+ scriptsDir: ".agentic-scaffold/scripts",
89
+ issueTrackerName: tracker.name,
90
+ issueTrackerDescription: tracker.description,
91
+ issueTrackerShort: tracker.short,
92
+ statusTable: tracker.statusTable,
93
+ trackerDoc: tracker.trackerDoc,
94
+ envFile: tracker.envFile,
95
+ envTemplate: tracker.envTemplate,
96
+ packageManager: config.packageManager,
97
+ ciProvider: config.ciProvider,
98
+ scriptLanguage: config.scriptLanguage,
99
+ scaffoldVersion: version,
100
+ incompleteFiles: buildIncompleteFiles(config),
101
+ };
102
+ }
103
+ export function buildIncompleteFiles(config) {
104
+ const files = [
105
+ {
106
+ file: ".agentic-scaffold/BUSINESS_LOGIC.md",
107
+ sections: "Core Domain Concepts, Non-Negotiable Rules, Architecture Decisions",
108
+ },
109
+ ];
110
+ if (config.include.has("docs")) {
111
+ files.push({ file: ".agentic-scaffold/docs/context/glossary.md", sections: "domain term definitions" }, { file: ".agentic-scaffold/docs/product/README.md", sections: "product spec descriptions" }, { file: ".agentic-scaffold/docs/engineering/README.md", sections: "implementation conventions" });
112
+ }
113
+ return files;
114
+ }
115
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface ProjectProfile {
2
+ projectName: string;
3
+ languages: string[];
4
+ packageManager: string | null;
5
+ ciProvider: string | null;
6
+ aiTools: string[];
7
+ issueTracker: string | null;
8
+ scriptLanguage: string | null;
9
+ hasDockerfile: boolean;
10
+ hasEnvExample: boolean;
11
+ hasContributing: boolean;
12
+ hasChangelog: boolean;
13
+ hasApiDocs: boolean;
14
+ hasMigrations: boolean;
15
+ }
16
+ export declare function detectProjectProfile(targetDir: string): ProjectProfile;
@@ -0,0 +1,104 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ export function detectProjectProfile(targetDir) {
4
+ const projectName = targetDir.split("/").filter(Boolean).pop() || "project";
5
+ return {
6
+ projectName,
7
+ languages: detectLanguages(targetDir),
8
+ packageManager: detectPackageManager(targetDir),
9
+ ciProvider: detectCIProvider(targetDir),
10
+ aiTools: detectAITools(targetDir),
11
+ issueTracker: detectIssueTracker(targetDir),
12
+ scriptLanguage: detectScriptLanguage(targetDir),
13
+ hasDockerfile: existsSync(join(targetDir, "Dockerfile")),
14
+ hasEnvExample: existsSync(join(targetDir, ".env.example")),
15
+ hasContributing: existsSync(join(targetDir, "CONTRIBUTING.md")),
16
+ hasChangelog: existsSync(join(targetDir, "CHANGELOG.md")),
17
+ hasApiDocs: existsSync(join(targetDir, "docs", "api")),
18
+ hasMigrations: migrationDirs.some((dir) => existsSync(join(targetDir, dir))),
19
+ };
20
+ }
21
+ const migrationDirs = ["migrations", "db/migrations", "prisma/migrations", "alembic"];
22
+ function detectLanguages(targetDir) {
23
+ const languages = [];
24
+ if (existsSync(join(targetDir, "package.json"))) {
25
+ try {
26
+ const pkg = JSON.parse(readFileSync(join(targetDir, "package.json"), "utf-8"));
27
+ const deps = pkg.devDependencies;
28
+ const prodDeps = pkg.dependencies;
29
+ if (deps?.typescript || prodDeps?.typescript) {
30
+ languages.push("ts");
31
+ }
32
+ else {
33
+ languages.push("js");
34
+ }
35
+ }
36
+ catch {
37
+ languages.push("js");
38
+ }
39
+ }
40
+ if (existsSync(join(targetDir, "requirements.txt"))) {
41
+ languages.push("python");
42
+ }
43
+ if (existsSync(join(targetDir, "pyproject.toml"))) {
44
+ languages.push("python");
45
+ }
46
+ if (existsSync(join(targetDir, "go.mod"))) {
47
+ languages.push("go");
48
+ }
49
+ if (existsSync(join(targetDir, "Cargo.toml"))) {
50
+ languages.push("rust");
51
+ }
52
+ return languages;
53
+ }
54
+ function detectPackageManager(targetDir) {
55
+ if (existsSync(join(targetDir, "pnpm-lock.yaml")))
56
+ return "pnpm";
57
+ if (existsSync(join(targetDir, "yarn.lock")))
58
+ return "yarn";
59
+ if (existsSync(join(targetDir, "package-lock.json")))
60
+ return "npm";
61
+ if (existsSync(join(targetDir, "poetry.lock")))
62
+ return "poetry";
63
+ if (existsSync(join(targetDir, "Pipfile.lock")))
64
+ return "pip";
65
+ return null;
66
+ }
67
+ function detectCIProvider(targetDir) {
68
+ if (existsSync(join(targetDir, ".github", "workflows")))
69
+ return "github";
70
+ if (existsSync(join(targetDir, ".gitlab-ci.yml")))
71
+ return "gitlab";
72
+ if (existsSync(join(targetDir, ".circleci", "config.yml")))
73
+ return "circleci";
74
+ return null;
75
+ }
76
+ function detectAITools(targetDir) {
77
+ const tools = [];
78
+ if (existsSync(join(targetDir, "opencode.json")))
79
+ tools.push("opencode");
80
+ if (existsSync(join(targetDir, ".cursorrules")))
81
+ tools.push("cursor");
82
+ if (existsSync(join(targetDir, ".copilot-instructions.md")))
83
+ tools.push("copilot");
84
+ if (existsSync(join(targetDir, ".windsurfrules")))
85
+ tools.push("windsurf");
86
+ if (existsSync(join(targetDir, ".clinerules")))
87
+ tools.push("cline");
88
+ return tools;
89
+ }
90
+ function detectIssueTracker(targetDir) {
91
+ if (existsSync(join(targetDir, ".github")))
92
+ return "github";
93
+ return null;
94
+ }
95
+ function detectScriptLanguage(targetDir) {
96
+ if (existsSync(join(targetDir, "package.json")))
97
+ return "node";
98
+ if (existsSync(join(targetDir, "requirements.txt")))
99
+ return "python";
100
+ if (existsSync(join(targetDir, "pyproject.toml")))
101
+ return "python";
102
+ return null;
103
+ }
104
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface WriteOptions {
2
+ interactive?: boolean;
3
+ force?: boolean;
4
+ onProgress?: () => void;
5
+ }
6
+ export declare function write(targetPath: string, content: string, options?: WriteOptions): Promise<string>;
7
+ export declare function copyFile(src: string, dest: string, options?: WriteOptions): Promise<string>;
8
+ export declare function copyStaticDir(srcDir: string, destDir: string, options?: WriteOptions): Promise<string[]>;
9
+ export declare function createSymlinks(target: string, _scaffoldDir: string): string[];
10
+ export interface DirEntry {
11
+ name: string;
12
+ full: string;
13
+ }
14
+ export declare function walkDir(dir: string): DirEntry[];