create-specfuse 0.7.0 → 0.9.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 (110) hide show
  1. package/README.md +55 -144
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7 -10
  5. package/dist/index.js.map +1 -1
  6. package/dist/prompts.d.ts +2 -2
  7. package/dist/prompts.d.ts.map +1 -1
  8. package/dist/prompts.js +3 -82
  9. package/dist/prompts.js.map +1 -1
  10. package/dist/scaffolder.d.ts.map +1 -1
  11. package/dist/scaffolder.js +7 -44
  12. package/dist/scaffolder.js.map +1 -1
  13. package/dist/templates/claude-md.d.ts.map +1 -1
  14. package/dist/templates/claude-md.js +7 -23
  15. package/dist/templates/claude-md.js.map +1 -1
  16. package/dist/templates/claude-settings.d.ts +1 -2
  17. package/dist/templates/claude-settings.d.ts.map +1 -1
  18. package/dist/templates/claude-settings.js +2 -2
  19. package/dist/templates/claude-settings.js.map +1 -1
  20. package/dist/templates/fusereview-skill.d.ts +1 -1
  21. package/dist/templates/fusereview-skill.d.ts.map +1 -1
  22. package/dist/templates/fusereview-skill.js +2 -10
  23. package/dist/templates/fusereview-skill.js.map +1 -1
  24. package/dist/templates/gitignore.d.ts +1 -2
  25. package/dist/templates/gitignore.d.ts.map +1 -1
  26. package/dist/templates/gitignore.js +2 -11
  27. package/dist/templates/gitignore.js.map +1 -1
  28. package/dist/templates/openspec-config.d.ts +1 -2
  29. package/dist/templates/openspec-config.d.ts.map +1 -1
  30. package/dist/templates/openspec-config.js +34 -3
  31. package/dist/templates/openspec-config.js.map +1 -1
  32. package/dist/types.d.ts +0 -24
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/utils/tools.d.ts +0 -3
  35. package/dist/utils/tools.d.ts.map +1 -1
  36. package/dist/utils/tools.js +25 -38
  37. package/dist/utils/tools.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/stacks/bash.d.ts +0 -5
  40. package/dist/stacks/bash.d.ts.map +0 -1
  41. package/dist/stacks/bash.js +0 -66
  42. package/dist/stacks/bash.js.map +0 -1
  43. package/dist/stacks/cpp-cmake.d.ts +0 -5
  44. package/dist/stacks/cpp-cmake.d.ts.map +0 -1
  45. package/dist/stacks/cpp-cmake.js +0 -74
  46. package/dist/stacks/cpp-cmake.js.map +0 -1
  47. package/dist/stacks/detect.d.ts +0 -11
  48. package/dist/stacks/detect.d.ts.map +0 -1
  49. package/dist/stacks/detect.js +0 -104
  50. package/dist/stacks/detect.js.map +0 -1
  51. package/dist/stacks/dotnet.d.ts +0 -5
  52. package/dist/stacks/dotnet.d.ts.map +0 -1
  53. package/dist/stacks/dotnet.js +0 -68
  54. package/dist/stacks/dotnet.js.map +0 -1
  55. package/dist/stacks/elixir.d.ts +0 -5
  56. package/dist/stacks/elixir.d.ts.map +0 -1
  57. package/dist/stacks/elixir.js +0 -68
  58. package/dist/stacks/elixir.js.map +0 -1
  59. package/dist/stacks/go.d.ts +0 -5
  60. package/dist/stacks/go.d.ts.map +0 -1
  61. package/dist/stacks/go.js +0 -68
  62. package/dist/stacks/go.js.map +0 -1
  63. package/dist/stacks/index.d.ts +0 -7
  64. package/dist/stacks/index.d.ts.map +0 -1
  65. package/dist/stacks/index.js +0 -84
  66. package/dist/stacks/index.js.map +0 -1
  67. package/dist/stacks/java-gradle.d.ts +0 -5
  68. package/dist/stacks/java-gradle.d.ts.map +0 -1
  69. package/dist/stacks/java-gradle.js +0 -69
  70. package/dist/stacks/java-gradle.js.map +0 -1
  71. package/dist/stacks/java-maven.d.ts +0 -5
  72. package/dist/stacks/java-maven.d.ts.map +0 -1
  73. package/dist/stacks/java-maven.js +0 -67
  74. package/dist/stacks/java-maven.js.map +0 -1
  75. package/dist/stacks/kotlin.d.ts +0 -5
  76. package/dist/stacks/kotlin.d.ts.map +0 -1
  77. package/dist/stacks/kotlin.js +0 -69
  78. package/dist/stacks/kotlin.js.map +0 -1
  79. package/dist/stacks/php.d.ts +0 -5
  80. package/dist/stacks/php.d.ts.map +0 -1
  81. package/dist/stacks/php.js +0 -68
  82. package/dist/stacks/php.js.map +0 -1
  83. package/dist/stacks/python-fastapi.d.ts +0 -5
  84. package/dist/stacks/python-fastapi.d.ts.map +0 -1
  85. package/dist/stacks/python-fastapi.js +0 -75
  86. package/dist/stacks/python-fastapi.js.map +0 -1
  87. package/dist/stacks/ruby.d.ts +0 -5
  88. package/dist/stacks/ruby.d.ts.map +0 -1
  89. package/dist/stacks/ruby.js +0 -69
  90. package/dist/stacks/ruby.js.map +0 -1
  91. package/dist/stacks/rust.d.ts +0 -5
  92. package/dist/stacks/rust.d.ts.map +0 -1
  93. package/dist/stacks/rust.js +0 -65
  94. package/dist/stacks/rust.js.map +0 -1
  95. package/dist/stacks/scala-sbt.d.ts +0 -5
  96. package/dist/stacks/scala-sbt.d.ts.map +0 -1
  97. package/dist/stacks/scala-sbt.js +0 -68
  98. package/dist/stacks/scala-sbt.js.map +0 -1
  99. package/dist/stacks/schema.d.ts +0 -91
  100. package/dist/stacks/schema.d.ts.map +0 -1
  101. package/dist/stacks/schema.js +0 -23
  102. package/dist/stacks/schema.js.map +0 -1
  103. package/dist/stacks/swift.d.ts +0 -5
  104. package/dist/stacks/swift.d.ts.map +0 -1
  105. package/dist/stacks/swift.js +0 -69
  106. package/dist/stacks/swift.js.map +0 -1
  107. package/dist/stacks/typescript-react.d.ts +0 -5
  108. package/dist/stacks/typescript-react.d.ts.map +0 -1
  109. package/dist/stacks/typescript-react.js +0 -73
  110. package/dist/stacks/typescript-react.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/stacks/detect.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAEzE;AAED,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAEvD;AAiFD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBvE"}
@@ -1,104 +0,0 @@
1
- import { access, readdir } from 'node:fs/promises';
2
- import path from 'node:path';
3
- let _configs = [];
4
- export function registerDetectionConfigs(configs) {
5
- _configs = configs;
6
- }
7
- export function getDetectionConfigs() {
8
- return _configs;
9
- }
10
- async function exists(p) {
11
- try {
12
- await access(p);
13
- return true;
14
- }
15
- catch {
16
- return false;
17
- }
18
- }
19
- async function detectByMarkers(targetDir, configs) {
20
- const detected = new Set();
21
- for (const config of configs) {
22
- let found = false;
23
- for (const marker of config.markerFiles) {
24
- if (marker.includes('*')) {
25
- try {
26
- const entries = await readdir(targetDir);
27
- const pattern = marker.replace('*', '');
28
- if (entries.some(e => e.endsWith(pattern))) {
29
- found = true;
30
- break;
31
- }
32
- }
33
- catch {
34
- continue;
35
- }
36
- }
37
- else if (await exists(path.join(targetDir, marker))) {
38
- found = true;
39
- break;
40
- }
41
- }
42
- if (!found) {
43
- for (const dir of config.markerDirs) {
44
- if (await exists(path.join(targetDir, dir))) {
45
- found = true;
46
- break;
47
- }
48
- }
49
- }
50
- if (found) {
51
- detected.add(config.stackId);
52
- }
53
- }
54
- return Array.from(detected);
55
- }
56
- async function detectByExtensions(targetDir, configs) {
57
- let entries;
58
- try {
59
- entries = await readdir(targetDir);
60
- }
61
- catch {
62
- return [];
63
- }
64
- const extMap = new Map();
65
- for (const config of configs) {
66
- for (const ext of config.fileExtensions) {
67
- if (!extMap.has(ext)) {
68
- extMap.set(ext, config.stackId);
69
- }
70
- }
71
- }
72
- const detected = new Set();
73
- for (const entry of entries) {
74
- const ext = path.extname(entry).toLowerCase();
75
- const stackId = extMap.get(ext);
76
- if (stackId) {
77
- detected.add(stackId);
78
- }
79
- }
80
- return Array.from(detected);
81
- }
82
- export async function detectStacks(targetDir) {
83
- try {
84
- const configs = getDetectionConfigs();
85
- if (configs.length === 0)
86
- return [];
87
- const markerResults = await detectByMarkers(targetDir, configs);
88
- let detected;
89
- if (markerResults.length > 0) {
90
- detected = markerResults;
91
- }
92
- else {
93
- detected = await detectByExtensions(targetDir, configs);
94
- }
95
- const priorityMap = new Map();
96
- configs.forEach((c, i) => priorityMap.set(c.stackId, c.priority * 1000 + i));
97
- detected.sort((a, b) => (priorityMap.get(a) ?? 999) - (priorityMap.get(b) ?? 999));
98
- return detected;
99
- }
100
- catch {
101
- return [];
102
- }
103
- }
104
- //# sourceMappingURL=detect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/stacks/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,IAAI,QAAQ,GAAsB,EAAE,CAAC;AAErC,MAAM,UAAU,wBAAwB,CAAC,OAA0B;IACjE,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,OAA0B;IAC1E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC;QAElB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;oBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACxC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;wBAC3C,KAAK,GAAG,IAAI,CAAC;wBACb,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBACtD,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC5C,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB,EAAE,OAA0B;IAC7E,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChE,IAAI,QAAkB,CAAC;QAEvB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,aAAa,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7E,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAEnF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare const dotnetStack: StackProfile;
4
- export declare const dotnetDetectionConfig: DetectionConfig;
5
- //# sourceMappingURL=dotnet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/stacks/dotnet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,WAAW,EAAE,YA2DzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,eAMnC,CAAC"}
@@ -1,68 +0,0 @@
1
- export const dotnetStack = {
2
- id: 'dotnet',
3
- label: '.NET (C#)',
4
- languages: ['C#'],
5
- architecture: 'Clean Architecture / Onion',
6
- commands: {
7
- build: 'dotnet build',
8
- test: 'dotnet test',
9
- lint: 'dotnet format --verify-no-changes',
10
- format: 'dotnet format',
11
- },
12
- errorHandling: 'C# exceptions + Result pattern + FluentValidation',
13
- concurrency: 'C# async/await + Task + Channel + Parallel.ForEachAsync',
14
- permissions: [
15
- 'Bash(dotnet *)',
16
- 'Bash(nuget *)',
17
- ],
18
- gitignorePatterns: [
19
- '/bin/',
20
- '/obj/',
21
- '*.user',
22
- '*.suo',
23
- '.vs/',
24
- '*.nupkg',
25
- ],
26
- openspecContext: `Tech stack: .NET (C#)
27
- Build: dotnet build
28
- Testing: dotnet test
29
- Code style: dotnet format
30
- Architecture: Clean Architecture / Onion
31
- Error handling: C# exceptions + Result pattern + FluentValidation
32
- Concurrency: C# async/await + Task + Channel + Parallel.ForEachAsync`,
33
- openspecRules: {
34
- proposal: [
35
- 'Always include a "Non-goals" section to explicitly scope out what this change does NOT do',
36
- 'Include "Trade-offs" section with at least 2 alternative approaches considered',
37
- 'Must reference affected projects/namespaces by name',
38
- 'Keep proposals under 800 words',
39
- ],
40
- design: [
41
- 'Must include a dependency diagram (ASCII or mermaid) showing module relationships',
42
- 'Must specify public API surface (interfaces, class signatures)',
43
- 'Must address error handling strategy for the change',
44
- 'Must address concurrency implications if applicable',
45
- ],
46
- specs: [
47
- 'Each spec must be independently testable',
48
- 'Specs must define both success and failure behaviors',
49
- 'Include boundary conditions and edge cases',
50
- 'Reference specific types/interfaces, not vague descriptions',
51
- ],
52
- tasks: [
53
- 'Break tasks into chunks of max 2 hours of work',
54
- 'Each task must have a clear "done" definition verifiable by running a command',
55
- 'Tasks must follow TDD order - write test first, then implement, then refactor',
56
- 'Every task must include a verification command (dotnet test / specific test project)',
57
- 'Mark blocking dependencies explicitly between tasks',
58
- ],
59
- },
60
- };
61
- export const dotnetDetectionConfig = {
62
- stackId: 'dotnet',
63
- markerFiles: ['*.csproj', '*.sln', '*.fsproj'],
64
- markerDirs: [],
65
- fileExtensions: ['.cs', '.fs'],
66
- priority: 10,
67
- };
68
- //# sourceMappingURL=dotnet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotnet.js","sourceRoot":"","sources":["../../src/stacks/dotnet.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,YAAY,EAAE,4BAA4B;IAC1C,QAAQ,EAAE;QACR,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE,eAAe;KACxB;IACD,aAAa,EAAE,mDAAmD;IAClE,WAAW,EAAE,yDAAyD;IACtE,WAAW,EAAE;QACX,gBAAgB;QAChB,eAAe;KAChB;IACD,iBAAiB,EAAE;QACjB,OAAO;QACP,OAAO;QACP,QAAQ;QACR,OAAO;QACP,MAAM;QACN,SAAS;KACV;IACD,eAAe,EAAE;;;;;;qEAMkD;IACnE,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,qDAAqD;YACrD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,mFAAmF;YACnF,gEAAgE;YAChE,qDAAqD;YACrD,qDAAqD;SACtD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,6DAA6D;SAC9D;QACD,KAAK,EAAE;YACL,gDAAgD;YAChD,+EAA+E;YAC/E,+EAA+E;YAC/E,sFAAsF;YACtF,qDAAqD;SACtD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC;IAC9C,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAC9B,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare const elixirStack: StackProfile;
4
- export declare const elixirDetectionConfig: DetectionConfig;
5
- //# sourceMappingURL=elixir.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elixir.d.ts","sourceRoot":"","sources":["../../src/stacks/elixir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,WAAW,EAAE,YA2DzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,eAMnC,CAAC"}
@@ -1,68 +0,0 @@
1
- export const elixirStack = {
2
- id: 'elixir',
3
- label: 'Elixir (Mix)',
4
- languages: ['Elixir'],
5
- architecture: 'OTP / Supervision tree / GenServer',
6
- commands: {
7
- build: 'mix compile',
8
- test: 'mix test',
9
- lint: 'mix credo --strict',
10
- format: 'mix format',
11
- },
12
- errorHandling: 'Elixir pattern matching + {:ok, _}/{:error, _} tuples + supervisors',
13
- concurrency: 'Elixir processes + GenServer + Task + OTP supervision trees',
14
- permissions: [
15
- 'Bash(mix *)',
16
- 'Bash(iex *)',
17
- 'Bash(elixir *)',
18
- ],
19
- gitignorePatterns: [
20
- '/_build/',
21
- '/deps/',
22
- '/cover/',
23
- '*.ez',
24
- '.elixir_ls/',
25
- ],
26
- openspecContext: `Tech stack: Elixir (Mix)
27
- Build: mix compile
28
- Testing: mix test
29
- Code style: mix credo --strict + mix format
30
- Architecture: OTP / Supervision tree / GenServer
31
- Error handling: Elixir pattern matching + {:ok, _}/{:error, _} tuples + supervisors
32
- Concurrency: Elixir processes + GenServer + Task + OTP supervision trees`,
33
- openspecRules: {
34
- proposal: [
35
- 'Always include a "Non-goals" section to explicitly scope out what this change does NOT do',
36
- 'Include "Trade-offs" section with at least 2 alternative approaches considered',
37
- 'Must reference affected applications/modules by name',
38
- 'Keep proposals under 800 words',
39
- ],
40
- design: [
41
- 'Must include a dependency diagram (ASCII or mermaid) showing module relationships',
42
- 'Must specify public API surface (module functions, GenServer callbacks)',
43
- 'Must address error handling strategy for the change',
44
- 'Must address supervision tree implications if applicable',
45
- ],
46
- specs: [
47
- 'Each spec must be independently testable',
48
- 'Specs must define both success and failure behaviors',
49
- 'Include boundary conditions and edge cases',
50
- 'Reference specific modules/functions, not vague descriptions',
51
- ],
52
- tasks: [
53
- 'Break tasks into chunks of max 2 hours of work',
54
- 'Each task must have a clear "done" definition verifiable by running a command',
55
- 'Tasks must follow TDD order - write test first, then implement, then refactor',
56
- 'Every task must include a verification command (mix test / specific test module)',
57
- 'Mark blocking dependencies explicitly between tasks',
58
- ],
59
- },
60
- };
61
- export const elixirDetectionConfig = {
62
- stackId: 'elixir',
63
- markerFiles: ['mix.exs', 'mix.lock'],
64
- markerDirs: [],
65
- fileExtensions: ['.ex', '.exs'],
66
- priority: 10,
67
- };
68
- //# sourceMappingURL=elixir.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elixir.js","sourceRoot":"","sources":["../../src/stacks/elixir.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,cAAc;IACrB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,YAAY,EAAE,oCAAoC;IAClD,QAAQ,EAAE;QACR,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,YAAY;KACrB;IACD,aAAa,EAAE,qEAAqE;IACpF,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE;QACX,aAAa;QACb,aAAa;QACb,gBAAgB;KACjB;IACD,iBAAiB,EAAE;QACjB,UAAU;QACV,QAAQ;QACR,SAAS;QACT,MAAM;QACN,aAAa;KACd;IACD,eAAe,EAAE;;;;;;yEAMsD;IACvE,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,sDAAsD;YACtD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,mFAAmF;YACnF,yEAAyE;YACzE,qDAAqD;YACrD,0DAA0D;SAC3D;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,8DAA8D;SAC/D;QACD,KAAK,EAAE;YACL,gDAAgD;YAChD,+EAA+E;YAC/E,+EAA+E;YAC/E,kFAAkF;YAClF,qDAAqD;SACtD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IACpC,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare const goStack: StackProfile;
4
- export declare const goDetectionConfig: DetectionConfig;
5
- //# sourceMappingURL=go.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/stacks/go.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,OAAO,EAAE,YA2DrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAM/B,CAAC"}
package/dist/stacks/go.js DELETED
@@ -1,68 +0,0 @@
1
- export const goStack = {
2
- id: 'go',
3
- label: 'Go',
4
- languages: ['Go'],
5
- architecture: 'Clean Architecture / Hexagonal (Ports & Adapters)',
6
- commands: {
7
- build: 'go build ./...',
8
- test: 'go test ./...',
9
- lint: 'golangci-lint run',
10
- format: 'gofmt -w .',
11
- },
12
- errorHandling: 'Go explicit error returns (if err != nil)',
13
- concurrency: 'Go goroutines + channels',
14
- permissions: [
15
- 'Bash(go test *)',
16
- 'Bash(go build *)',
17
- 'Bash(go vet *)',
18
- 'Bash(golangci-lint *)',
19
- 'Bash(gofmt *)',
20
- ],
21
- gitignorePatterns: [
22
- '/bin/',
23
- '/dist/',
24
- '/vendor/',
25
- ],
26
- openspecContext: `Tech stack: Go backend services
27
- Build: go build
28
- Testing: go test
29
- Code style: gofmt + golangci-lint
30
- Architecture: Clean Architecture / Hexagonal (ports & adapters)
31
- Error handling: Go explicit error returns
32
- Concurrency: Go goroutines + channels`,
33
- openspecRules: {
34
- proposal: [
35
- 'Always include a "Non-goals" section to explicitly scope out what this change does NOT do',
36
- 'Include "Trade-offs" section with at least 2 alternative approaches considered',
37
- 'Must reference affected packages by name',
38
- 'Keep proposals under 800 words',
39
- ],
40
- design: [
41
- 'Must include a dependency diagram (ASCII or mermaid) showing package relationships',
42
- 'Must specify public API surface (interfaces, exported function signatures)',
43
- 'Must address error handling strategy for the change',
44
- 'Must address concurrency implications if applicable',
45
- ],
46
- specs: [
47
- 'Each spec must be independently testable',
48
- 'Specs must define both success and failure behaviors',
49
- 'Include boundary conditions and edge cases',
50
- 'Reference specific interfaces/types, not vague descriptions',
51
- ],
52
- tasks: [
53
- 'Break tasks into chunks of max 2 hours of work',
54
- 'Each task must have a clear "done" definition verifiable by running a command',
55
- 'Tasks must follow TDD order - write test first, then implement, then refactor',
56
- 'Every task must include a verification command (go test / specific test function)',
57
- 'Mark blocking dependencies explicitly between tasks',
58
- ],
59
- },
60
- };
61
- export const goDetectionConfig = {
62
- stackId: 'go',
63
- markerFiles: ['go.mod', 'go.sum'],
64
- markerDirs: [],
65
- fileExtensions: ['.go'],
66
- priority: 10,
67
- };
68
- //# sourceMappingURL=go.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"go.js","sourceRoot":"","sources":["../../src/stacks/go.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAiB;IACnC,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,YAAY,EAAE,mDAAmD;IACjE,QAAQ,EAAE;QACR,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,YAAY;KACrB;IACD,aAAa,EAAE,2CAA2C;IAC1D,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE;QACX,iBAAiB;QACjB,kBAAkB;QAClB,gBAAgB;QAChB,uBAAuB;QACvB,eAAe;KAChB;IACD,iBAAiB,EAAE;QACjB,OAAO;QACP,QAAQ;QACR,UAAU;KACX;IACD,eAAe,EAAE;;;;;;sCAMmB;IACpC,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,0CAA0C;YAC1C,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,oFAAoF;YACpF,4EAA4E;YAC5E,qDAAqD;YACrD,qDAAqD;SACtD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,6DAA6D;SAC9D;QACD,KAAK,EAAE;YACL,gDAAgD;YAChD,+EAA+E;YAC/E,+EAA+E;YAC/E,mFAAmF;YACnF,qDAAqD;SACtD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACjC,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC,KAAK,CAAC;IACvB,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare function getBuiltinStacks(): StackProfile[];
4
- export declare function getStack(id: string): StackProfile | undefined;
5
- export declare function getDetectionConfigs(): DetectionConfig[];
6
- export declare function loadCustomStack(filePath: string): Promise<StackProfile>;
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stacks/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyCnD,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE7D;AAED,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAEvD;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoB7E"}
@@ -1,84 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import { parse as parseYAML } from 'yaml';
3
- import { stackProfileSchema } from './schema.js';
4
- import { rustStack, rustDetectionConfig } from './rust.js';
5
- import { goStack, goDetectionConfig } from './go.js';
6
- import { typescriptReactStack, typescriptReactDetectionConfig } from './typescript-react.js';
7
- import { pythonFastapiStack, pythonFastapiDetectionConfig } from './python-fastapi.js';
8
- import { bashStack, bashDetectionConfig } from './bash.js';
9
- import { javaMavenStack, javaMavenDetectionConfig } from './java-maven.js';
10
- import { javaGradleStack, javaGradleDetectionConfig } from './java-gradle.js';
11
- import { cppCmakeStack, cppCmakeDetectionConfig } from './cpp-cmake.js';
12
- import { rubyStack, rubyDetectionConfig } from './ruby.js';
13
- import { phpStack, phpDetectionConfig } from './php.js';
14
- import { kotlinStack, kotlinDetectionConfig } from './kotlin.js';
15
- import { swiftStack, swiftDetectionConfig } from './swift.js';
16
- import { elixirStack, elixirDetectionConfig } from './elixir.js';
17
- import { scalaSbtStack, scalaSbtDetectionConfig } from './scala-sbt.js';
18
- import { dotnetStack, dotnetDetectionConfig } from './dotnet.js';
19
- import { registerDetectionConfigs } from './detect.js';
20
- const BUILTIN_STACKS = [
21
- rustStack,
22
- goStack,
23
- typescriptReactStack,
24
- pythonFastapiStack,
25
- bashStack,
26
- javaMavenStack,
27
- javaGradleStack,
28
- cppCmakeStack,
29
- rubyStack,
30
- phpStack,
31
- kotlinStack,
32
- swiftStack,
33
- elixirStack,
34
- scalaSbtStack,
35
- dotnetStack,
36
- ];
37
- const DETECTION_CONFIGS = [
38
- rustDetectionConfig,
39
- goDetectionConfig,
40
- typescriptReactDetectionConfig,
41
- pythonFastapiDetectionConfig,
42
- bashDetectionConfig,
43
- javaMavenDetectionConfig,
44
- javaGradleDetectionConfig,
45
- cppCmakeDetectionConfig,
46
- rubyDetectionConfig,
47
- phpDetectionConfig,
48
- kotlinDetectionConfig,
49
- swiftDetectionConfig,
50
- elixirDetectionConfig,
51
- scalaSbtDetectionConfig,
52
- dotnetDetectionConfig,
53
- ];
54
- // Register detection configs at module load time
55
- registerDetectionConfigs(DETECTION_CONFIGS);
56
- export function getBuiltinStacks() {
57
- return BUILTIN_STACKS;
58
- }
59
- export function getStack(id) {
60
- return BUILTIN_STACKS.find((s) => s.id === id);
61
- }
62
- export function getDetectionConfigs() {
63
- return DETECTION_CONFIGS;
64
- }
65
- export async function loadCustomStack(filePath) {
66
- const raw = await readFile(filePath, 'utf-8');
67
- const ext = filePath.toLowerCase();
68
- let data;
69
- if (ext.endsWith('.json')) {
70
- data = JSON.parse(raw);
71
- }
72
- else {
73
- data = parseYAML(raw);
74
- }
75
- const result = stackProfileSchema.safeParse(data);
76
- if (!result.success) {
77
- const issues = result.error.issues
78
- .map((i) => ` - ${i.path.join('.')}: ${i.message}`)
79
- .join('\n');
80
- throw new Error(`Invalid stack profile in ${filePath}:\n${issues}`);
81
- }
82
- return result.data;
83
- }
84
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stacks/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare const javaGradleStack: StackProfile;
4
- export declare const javaGradleDetectionConfig: DetectionConfig;
5
- //# sourceMappingURL=java-gradle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"java-gradle.d.ts","sourceRoot":"","sources":["../../src/stacks/java-gradle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,EAAE,YA4D7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,eAMvC,CAAC"}
@@ -1,69 +0,0 @@
1
- export const javaGradleStack = {
2
- id: 'java-gradle',
3
- label: 'Java (Gradle)',
4
- languages: ['Java'],
5
- architecture: 'Clean Architecture / Layered (Controller -> Service -> Repository)',
6
- commands: {
7
- build: 'gradle build -x test',
8
- test: 'gradle test',
9
- lint: 'gradle checkstyleMain',
10
- format: 'gradle spotlessApply',
11
- },
12
- errorHandling: 'Java checked/unchecked exceptions + custom exception hierarchy',
13
- concurrency: 'Java virtual threads (Project Loom) + CompletableFuture',
14
- permissions: [
15
- 'Bash(gradle *)',
16
- 'Bash(gradlew *)',
17
- 'Bash(java *)',
18
- ],
19
- gitignorePatterns: [
20
- '/build/',
21
- '.gradle/',
22
- '*.class',
23
- '*.jar',
24
- '.idea/',
25
- '*.iml',
26
- ],
27
- openspecContext: `Tech stack: Java (Gradle) backend services
28
- Build: gradle build
29
- Testing: gradle test
30
- Code style: checkstyle + spotless
31
- Architecture: Clean Architecture / Layered (Controller -> Service -> Repository)
32
- Error handling: Java checked/unchecked exceptions + custom exception hierarchy
33
- Concurrency: Java virtual threads (Project Loom) + CompletableFuture`,
34
- openspecRules: {
35
- proposal: [
36
- 'Always include a "Non-goals" section to explicitly scope out what this change does NOT do',
37
- 'Include "Trade-offs" section with at least 2 alternative approaches considered',
38
- 'Must reference affected modules/packages by name',
39
- 'Keep proposals under 800 words',
40
- ],
41
- design: [
42
- 'Must include a dependency diagram (ASCII or mermaid) showing module relationships',
43
- 'Must specify public API surface (interfaces, class signatures, endpoint contracts)',
44
- 'Must address error handling strategy for the change',
45
- 'Must address concurrency implications if applicable',
46
- ],
47
- specs: [
48
- 'Each spec must be independently testable',
49
- 'Specs must define both success and failure behaviors',
50
- 'Include boundary conditions and edge cases',
51
- 'Reference specific classes/interfaces, not vague descriptions',
52
- ],
53
- tasks: [
54
- 'Break tasks into chunks of max 2 hours of work',
55
- 'Each task must have a clear "done" definition verifiable by running a command',
56
- 'Tasks must follow TDD order - write test first, then implement, then refactor',
57
- 'Every task must include a verification command (gradle test / specific test class)',
58
- 'Mark blocking dependencies explicitly between tasks',
59
- ],
60
- },
61
- };
62
- export const javaGradleDetectionConfig = {
63
- stackId: 'java-gradle',
64
- markerFiles: ['build.gradle', 'build.gradle.kts', 'gradlew'],
65
- markerDirs: [],
66
- fileExtensions: ['.java'],
67
- priority: 10,
68
- };
69
- //# sourceMappingURL=java-gradle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"java-gradle.js","sourceRoot":"","sources":["../../src/stacks/java-gradle.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,eAAe;IACtB,SAAS,EAAE,CAAC,MAAM,CAAC;IACnB,YAAY,EAAE,oEAAoE;IAClF,QAAQ,EAAE;QACR,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,sBAAsB;KAC/B;IACD,aAAa,EAAE,gEAAgE;IAC/E,WAAW,EAAE,yDAAyD;IACtE,WAAW,EAAE;QACX,gBAAgB;QAChB,iBAAiB;QACjB,cAAc;KACf;IACD,iBAAiB,EAAE;QACjB,SAAS;QACT,UAAU;QACV,SAAS;QACT,OAAO;QACP,QAAQ;QACR,OAAO;KACR;IACD,eAAe,EAAE;;;;;;qEAMkD;IACnE,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,kDAAkD;YAClD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,mFAAmF;YACnF,oFAAoF;YACpF,qDAAqD;YACrD,qDAAqD;SACtD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,+DAA+D;SAChE;QACD,KAAK,EAAE;YACL,gDAAgD;YAChD,+EAA+E;YAC/E,+EAA+E;YAC/E,oFAAoF;YACpF,qDAAqD;SACtD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAoB;IACxD,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,SAAS,CAAC;IAC5D,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC,OAAO,CAAC;IACzB,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare const javaMavenStack: StackProfile;
4
- export declare const javaMavenDetectionConfig: DetectionConfig;
5
- //# sourceMappingURL=java-maven.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"java-maven.d.ts","sourceRoot":"","sources":["../../src/stacks/java-maven.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,YA0D5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC"}
@@ -1,67 +0,0 @@
1
- export const javaMavenStack = {
2
- id: 'java-maven',
3
- label: 'Java (Maven)',
4
- languages: ['Java'],
5
- architecture: 'Clean Architecture / Layered (Controller -> Service -> Repository)',
6
- commands: {
7
- build: 'mvn package -DskipTests',
8
- test: 'mvn test',
9
- lint: 'mvn checkstyle:check',
10
- format: 'mvn spotless:apply',
11
- },
12
- errorHandling: 'Java checked/unchecked exceptions + custom exception hierarchy',
13
- concurrency: 'Java virtual threads (Project Loom) + CompletableFuture',
14
- permissions: [
15
- 'Bash(mvn *)',
16
- 'Bash(java *)',
17
- ],
18
- gitignorePatterns: [
19
- '/target/',
20
- '*.class',
21
- '*.jar',
22
- '.idea/',
23
- '*.iml',
24
- ],
25
- openspecContext: `Tech stack: Java (Maven) backend services
26
- Build: mvn package
27
- Testing: mvn test
28
- Code style: checkstyle + spotless
29
- Architecture: Clean Architecture / Layered (Controller -> Service -> Repository)
30
- Error handling: Java checked/unchecked exceptions + custom exception hierarchy
31
- Concurrency: Java virtual threads (Project Loom) + CompletableFuture`,
32
- openspecRules: {
33
- proposal: [
34
- 'Always include a "Non-goals" section to explicitly scope out what this change does NOT do',
35
- 'Include "Trade-offs" section with at least 2 alternative approaches considered',
36
- 'Must reference affected modules/packages by name',
37
- 'Keep proposals under 800 words',
38
- ],
39
- design: [
40
- 'Must include a dependency diagram (ASCII or mermaid) showing module relationships',
41
- 'Must specify public API surface (interfaces, class signatures, endpoint contracts)',
42
- 'Must address error handling strategy for the change',
43
- 'Must address concurrency implications if applicable',
44
- ],
45
- specs: [
46
- 'Each spec must be independently testable',
47
- 'Specs must define both success and failure behaviors',
48
- 'Include boundary conditions and edge cases',
49
- 'Reference specific classes/interfaces, not vague descriptions',
50
- ],
51
- tasks: [
52
- 'Break tasks into chunks of max 2 hours of work',
53
- 'Each task must have a clear "done" definition verifiable by running a command',
54
- 'Tasks must follow TDD order - write test first, then implement, then refactor',
55
- 'Every task must include a verification command (mvn test / specific test class)',
56
- 'Mark blocking dependencies explicitly between tasks',
57
- ],
58
- },
59
- };
60
- export const javaMavenDetectionConfig = {
61
- stackId: 'java-maven',
62
- markerFiles: ['pom.xml'],
63
- markerDirs: ['src/main/java'],
64
- fileExtensions: ['.java'],
65
- priority: 10,
66
- };
67
- //# sourceMappingURL=java-maven.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"java-maven.js","sourceRoot":"","sources":["../../src/stacks/java-maven.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,cAAc;IACrB,SAAS,EAAE,CAAC,MAAM,CAAC;IACnB,YAAY,EAAE,oEAAoE;IAClF,QAAQ,EAAE;QACR,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,oBAAoB;KAC7B;IACD,aAAa,EAAE,gEAAgE;IAC/E,WAAW,EAAE,yDAAyD;IACtE,WAAW,EAAE;QACX,aAAa;QACb,cAAc;KACf;IACD,iBAAiB,EAAE;QACjB,UAAU;QACV,SAAS;QACT,OAAO;QACP,QAAQ;QACR,OAAO;KACR;IACD,eAAe,EAAE;;;;;;qEAMkD;IACnE,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,kDAAkD;YAClD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,mFAAmF;YACnF,oFAAoF;YACpF,qDAAqD;YACrD,qDAAqD;SACtD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,+DAA+D;SAChE;QACD,KAAK,EAAE;YACL,gDAAgD;YAChD,+EAA+E;YAC/E,+EAA+E;YAC/E,iFAAiF;YACjF,qDAAqD;SACtD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,CAAC,SAAS,CAAC;IACxB,UAAU,EAAE,CAAC,eAAe,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAO,CAAC;IACzB,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { StackProfile } from '../types.js';
2
- import type { DetectionConfig } from './detect.js';
3
- export declare const kotlinStack: StackProfile;
4
- export declare const kotlinDetectionConfig: DetectionConfig;
5
- //# sourceMappingURL=kotlin.d.ts.map