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.
Files changed (123) hide show
  1. package/README.md +203 -0
  2. package/bin/create-specfuse.js +2 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +35 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/prompts.d.ts +3 -0
  8. package/dist/prompts.d.ts.map +1 -0
  9. package/dist/prompts.js +103 -0
  10. package/dist/prompts.js.map +1 -0
  11. package/dist/scaffolder.d.ts +3 -0
  12. package/dist/scaffolder.d.ts.map +1 -0
  13. package/dist/scaffolder.js +233 -0
  14. package/dist/scaffolder.js.map +1 -0
  15. package/dist/stacks/bash.d.ts +5 -0
  16. package/dist/stacks/bash.d.ts.map +1 -0
  17. package/dist/stacks/bash.js +66 -0
  18. package/dist/stacks/bash.js.map +1 -0
  19. package/dist/stacks/cpp-cmake.d.ts +5 -0
  20. package/dist/stacks/cpp-cmake.d.ts.map +1 -0
  21. package/dist/stacks/cpp-cmake.js +74 -0
  22. package/dist/stacks/cpp-cmake.js.map +1 -0
  23. package/dist/stacks/detect.d.ts +11 -0
  24. package/dist/stacks/detect.d.ts.map +1 -0
  25. package/dist/stacks/detect.js +104 -0
  26. package/dist/stacks/detect.js.map +1 -0
  27. package/dist/stacks/dotnet.d.ts +5 -0
  28. package/dist/stacks/dotnet.d.ts.map +1 -0
  29. package/dist/stacks/dotnet.js +68 -0
  30. package/dist/stacks/dotnet.js.map +1 -0
  31. package/dist/stacks/elixir.d.ts +5 -0
  32. package/dist/stacks/elixir.d.ts.map +1 -0
  33. package/dist/stacks/elixir.js +68 -0
  34. package/dist/stacks/elixir.js.map +1 -0
  35. package/dist/stacks/go.d.ts +5 -0
  36. package/dist/stacks/go.d.ts.map +1 -0
  37. package/dist/stacks/go.js +68 -0
  38. package/dist/stacks/go.js.map +1 -0
  39. package/dist/stacks/index.d.ts +7 -0
  40. package/dist/stacks/index.d.ts.map +1 -0
  41. package/dist/stacks/index.js +84 -0
  42. package/dist/stacks/index.js.map +1 -0
  43. package/dist/stacks/java-gradle.d.ts +5 -0
  44. package/dist/stacks/java-gradle.d.ts.map +1 -0
  45. package/dist/stacks/java-gradle.js +69 -0
  46. package/dist/stacks/java-gradle.js.map +1 -0
  47. package/dist/stacks/java-maven.d.ts +5 -0
  48. package/dist/stacks/java-maven.d.ts.map +1 -0
  49. package/dist/stacks/java-maven.js +67 -0
  50. package/dist/stacks/java-maven.js.map +1 -0
  51. package/dist/stacks/kotlin.d.ts +5 -0
  52. package/dist/stacks/kotlin.d.ts.map +1 -0
  53. package/dist/stacks/kotlin.js +69 -0
  54. package/dist/stacks/kotlin.js.map +1 -0
  55. package/dist/stacks/php.d.ts +5 -0
  56. package/dist/stacks/php.d.ts.map +1 -0
  57. package/dist/stacks/php.js +68 -0
  58. package/dist/stacks/php.js.map +1 -0
  59. package/dist/stacks/python-fastapi.d.ts +5 -0
  60. package/dist/stacks/python-fastapi.d.ts.map +1 -0
  61. package/dist/stacks/python-fastapi.js +75 -0
  62. package/dist/stacks/python-fastapi.js.map +1 -0
  63. package/dist/stacks/ruby.d.ts +5 -0
  64. package/dist/stacks/ruby.d.ts.map +1 -0
  65. package/dist/stacks/ruby.js +69 -0
  66. package/dist/stacks/ruby.js.map +1 -0
  67. package/dist/stacks/rust.d.ts +5 -0
  68. package/dist/stacks/rust.d.ts.map +1 -0
  69. package/dist/stacks/rust.js +65 -0
  70. package/dist/stacks/rust.js.map +1 -0
  71. package/dist/stacks/scala-sbt.d.ts +5 -0
  72. package/dist/stacks/scala-sbt.d.ts.map +1 -0
  73. package/dist/stacks/scala-sbt.js +68 -0
  74. package/dist/stacks/scala-sbt.js.map +1 -0
  75. package/dist/stacks/schema.d.ts +91 -0
  76. package/dist/stacks/schema.d.ts.map +1 -0
  77. package/dist/stacks/schema.js +23 -0
  78. package/dist/stacks/schema.js.map +1 -0
  79. package/dist/stacks/swift.d.ts +5 -0
  80. package/dist/stacks/swift.d.ts.map +1 -0
  81. package/dist/stacks/swift.js +69 -0
  82. package/dist/stacks/swift.js.map +1 -0
  83. package/dist/stacks/typescript-react.d.ts +5 -0
  84. package/dist/stacks/typescript-react.d.ts.map +1 -0
  85. package/dist/stacks/typescript-react.js +73 -0
  86. package/dist/stacks/typescript-react.js.map +1 -0
  87. package/dist/templates/claude-md.d.ts +4 -0
  88. package/dist/templates/claude-md.d.ts.map +1 -0
  89. package/dist/templates/claude-md.js +241 -0
  90. package/dist/templates/claude-md.js.map +1 -0
  91. package/dist/templates/claude-settings.d.ts +3 -0
  92. package/dist/templates/claude-settings.d.ts.map +1 -0
  93. package/dist/templates/claude-settings.js +27 -0
  94. package/dist/templates/claude-settings.js.map +1 -0
  95. package/dist/templates/gitignore.d.ts +3 -0
  96. package/dist/templates/gitignore.d.ts.map +1 -0
  97. package/dist/templates/gitignore.js +39 -0
  98. package/dist/templates/gitignore.js.map +1 -0
  99. package/dist/templates/grill-me-skill.d.ts +2 -0
  100. package/dist/templates/grill-me-skill.d.ts.map +1 -0
  101. package/dist/templates/grill-me-skill.js +20 -0
  102. package/dist/templates/grill-me-skill.js.map +1 -0
  103. package/dist/templates/openspec-config.d.ts +3 -0
  104. package/dist/templates/openspec-config.d.ts.map +1 -0
  105. package/dist/templates/openspec-config.js +8 -0
  106. package/dist/templates/openspec-config.js.map +1 -0
  107. package/dist/types.d.ts +35 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/fs.d.ts +5 -0
  112. package/dist/utils/fs.d.ts.map +1 -0
  113. package/dist/utils/fs.js +17 -0
  114. package/dist/utils/fs.js.map +1 -0
  115. package/dist/utils/git.d.ts +4 -0
  116. package/dist/utils/git.d.ts.map +1 -0
  117. package/dist/utils/git.js +21 -0
  118. package/dist/utils/git.js.map +1 -0
  119. package/dist/utils/tools.d.ts +7 -0
  120. package/dist/utils/tools.d.ts.map +1 -0
  121. package/dist/utils/tools.js +82 -0
  122. package/dist/utils/tools.js.map +1 -0
  123. package/package.json +44 -0
@@ -0,0 +1,68 @@
1
+ export const scalaSbtStack = {
2
+ id: 'scala-sbt',
3
+ label: 'Scala (sbt)',
4
+ languages: ['Scala'],
5
+ architecture: 'Functional / Layered (ZIO / Cats Effect)',
6
+ commands: {
7
+ build: 'sbt compile',
8
+ test: 'sbt test',
9
+ lint: 'sbt scalafmtCheck',
10
+ format: 'sbt scalafmt',
11
+ },
12
+ errorHandling: 'Scala Either/Option + ZIO error channel + custom ADTs',
13
+ concurrency: 'Scala Future + ZIO fibers + Cats Effect IO',
14
+ permissions: [
15
+ 'Bash(sbt *)',
16
+ 'Bash(scala *)',
17
+ 'Bash(scalac *)',
18
+ ],
19
+ gitignorePatterns: [
20
+ '/target/',
21
+ '/project/target/',
22
+ '.bsp/',
23
+ '.metals/',
24
+ '.bloop/',
25
+ ],
26
+ openspecContext: `Tech stack: Scala (sbt)
27
+ Build: sbt compile
28
+ Testing: sbt test
29
+ Code style: scalafmt + scalafmtCheck
30
+ Architecture: Functional / Layered (ZIO / Cats Effect)
31
+ Error handling: Scala Either/Option + ZIO error channel + custom ADTs
32
+ Concurrency: Scala Future + ZIO fibers + Cats Effect IO`,
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 subprojects/packages 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 (traits, case classes, type 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/traits, 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 (sbt test / specific test suite)',
57
+ 'Mark blocking dependencies explicitly between tasks',
58
+ ],
59
+ },
60
+ };
61
+ export const scalaSbtDetectionConfig = {
62
+ stackId: 'scala-sbt',
63
+ markerFiles: ['build.sbt'],
64
+ markerDirs: ['project/'],
65
+ fileExtensions: ['.scala', '.sc'],
66
+ priority: 10,
67
+ };
68
+ //# sourceMappingURL=scala-sbt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scala-sbt.js","sourceRoot":"","sources":["../../src/stacks/scala-sbt.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,YAAY,EAAE,0CAA0C;IACxD,QAAQ,EAAE;QACR,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,cAAc;KACvB;IACD,aAAa,EAAE,uDAAuD;IACtE,WAAW,EAAE,4CAA4C;IACzD,WAAW,EAAE;QACX,aAAa;QACb,eAAe;QACf,gBAAgB;KACjB;IACD,iBAAiB,EAAE;QACjB,UAAU;QACV,kBAAkB;QAClB,OAAO;QACP,UAAU;QACV,SAAS;KACV;IACD,eAAe,EAAE;;;;;;wDAMqC;IACtD,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,sDAAsD;YACtD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,mFAAmF;YACnF,yEAAyE;YACzE,qDAAqD;YACrD,qDAAqD;SACtD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,yDAAyD;SAC1D;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,uBAAuB,GAAoB;IACtD,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,UAAU,EAAE,CAAC,UAAU,CAAC;IACxB,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjC,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { z } from 'zod';
2
+ export declare const stackCommandsSchema: z.ZodObject<{
3
+ build: z.ZodString;
4
+ test: z.ZodString;
5
+ lint: z.ZodString;
6
+ format: z.ZodOptional<z.ZodString>;
7
+ typecheck: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ build: string;
10
+ test: string;
11
+ lint: string;
12
+ format?: string | undefined;
13
+ typecheck?: string | undefined;
14
+ }, {
15
+ build: string;
16
+ test: string;
17
+ lint: string;
18
+ format?: string | undefined;
19
+ typecheck?: string | undefined;
20
+ }>;
21
+ export declare const stackProfileSchema: z.ZodObject<{
22
+ id: z.ZodString;
23
+ label: z.ZodString;
24
+ languages: z.ZodArray<z.ZodString, "many">;
25
+ framework: z.ZodOptional<z.ZodString>;
26
+ architecture: z.ZodString;
27
+ commands: z.ZodObject<{
28
+ build: z.ZodString;
29
+ test: z.ZodString;
30
+ lint: z.ZodString;
31
+ format: z.ZodOptional<z.ZodString>;
32
+ typecheck: z.ZodOptional<z.ZodString>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ build: string;
35
+ test: string;
36
+ lint: string;
37
+ format?: string | undefined;
38
+ typecheck?: string | undefined;
39
+ }, {
40
+ build: string;
41
+ test: string;
42
+ lint: string;
43
+ format?: string | undefined;
44
+ typecheck?: string | undefined;
45
+ }>;
46
+ errorHandling: z.ZodString;
47
+ concurrency: z.ZodString;
48
+ permissions: z.ZodArray<z.ZodString, "many">;
49
+ gitignorePatterns: z.ZodArray<z.ZodString, "many">;
50
+ openspecContext: z.ZodString;
51
+ openspecRules: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ id: string;
54
+ label: string;
55
+ languages: string[];
56
+ architecture: string;
57
+ commands: {
58
+ build: string;
59
+ test: string;
60
+ lint: string;
61
+ format?: string | undefined;
62
+ typecheck?: string | undefined;
63
+ };
64
+ errorHandling: string;
65
+ concurrency: string;
66
+ permissions: string[];
67
+ gitignorePatterns: string[];
68
+ openspecContext: string;
69
+ openspecRules: Record<string, string[]>;
70
+ framework?: string | undefined;
71
+ }, {
72
+ id: string;
73
+ label: string;
74
+ languages: string[];
75
+ architecture: string;
76
+ commands: {
77
+ build: string;
78
+ test: string;
79
+ lint: string;
80
+ format?: string | undefined;
81
+ typecheck?: string | undefined;
82
+ };
83
+ errorHandling: string;
84
+ concurrency: string;
85
+ permissions: string[];
86
+ gitignorePatterns: string[];
87
+ openspecContext: string;
88
+ openspecRules: Record<string, string[]>;
89
+ framework?: string | undefined;
90
+ }>;
91
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/stacks/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa7B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ export const stackCommandsSchema = z.object({
3
+ build: z.string().min(1),
4
+ test: z.string().min(1),
5
+ lint: z.string().min(1),
6
+ format: z.string().optional(),
7
+ typecheck: z.string().optional(),
8
+ });
9
+ export const stackProfileSchema = z.object({
10
+ id: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Must be kebab-case'),
11
+ label: z.string().min(1),
12
+ languages: z.array(z.string().min(1)).min(1),
13
+ framework: z.string().optional(),
14
+ architecture: z.string().min(1),
15
+ commands: stackCommandsSchema,
16
+ errorHandling: z.string().min(1),
17
+ concurrency: z.string().min(1),
18
+ permissions: z.array(z.string().min(1)).min(1),
19
+ gitignorePatterns: z.array(z.string().min(1)).min(1),
20
+ openspecContext: z.string().min(1),
21
+ openspecRules: z.record(z.string(), z.array(z.string().min(1))),
22
+ });
23
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/stacks/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,QAAQ,EAAE,mBAAmB;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { StackProfile } from '../types.js';
2
+ import type { DetectionConfig } from './detect.js';
3
+ export declare const swiftStack: StackProfile;
4
+ export declare const swiftDetectionConfig: DetectionConfig;
5
+ //# sourceMappingURL=swift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../src/stacks/swift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,UAAU,EAAE,YA4DxB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAMlC,CAAC"}
@@ -0,0 +1,69 @@
1
+ export const swiftStack = {
2
+ id: 'swift',
3
+ label: 'Swift (SPM)',
4
+ languages: ['Swift'],
5
+ architecture: 'Protocol-oriented / MVVM',
6
+ commands: {
7
+ build: 'swift build',
8
+ test: 'swift test',
9
+ lint: 'swiftlint',
10
+ format: 'swift-format format -r Sources/',
11
+ },
12
+ errorHandling: 'Swift Error protocol + Result type + do-try-catch',
13
+ concurrency: 'Swift structured concurrency (async/await + TaskGroup + actors)',
14
+ permissions: [
15
+ 'Bash(swift *)',
16
+ 'Bash(swiftlint *)',
17
+ 'Bash(swift-format *)',
18
+ 'Bash(xcodebuild *)',
19
+ ],
20
+ gitignorePatterns: [
21
+ '.build/',
22
+ '*.xcodeproj/',
23
+ '*.xcworkspace/',
24
+ 'DerivedData/',
25
+ 'Package.resolved',
26
+ ],
27
+ openspecContext: `Tech stack: Swift (Swift Package Manager)
28
+ Build: swift build
29
+ Testing: swift test
30
+ Code style: swiftlint + swift-format
31
+ Architecture: Protocol-oriented / MVVM
32
+ Error handling: Swift Error protocol + Result type + do-try-catch
33
+ Concurrency: Swift structured concurrency (async/await + TaskGroup + actors)`,
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/targets 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 (protocols, struct/class signatures)',
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 types/protocols, 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 (swift test / specific test target)',
58
+ 'Mark blocking dependencies explicitly between tasks',
59
+ ],
60
+ },
61
+ };
62
+ export const swiftDetectionConfig = {
63
+ stackId: 'swift',
64
+ markerFiles: ['Package.swift'],
65
+ markerDirs: [],
66
+ fileExtensions: ['.swift'],
67
+ priority: 10,
68
+ };
69
+ //# sourceMappingURL=swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/stacks/swift.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,YAAY,EAAE,0BAA0B;IACxC,QAAQ,EAAE;QACR,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,iCAAiC;KAC1C;IACD,aAAa,EAAE,mDAAmD;IAClE,WAAW,EAAE,iEAAiE;IAC9E,WAAW,EAAE;QACX,eAAe;QACf,mBAAmB;QACnB,sBAAsB;QACtB,oBAAoB;KACrB;IACD,iBAAiB,EAAE;QACjB,SAAS;QACT,cAAc;QACd,gBAAgB;QAChB,cAAc;QACd,kBAAkB;KACnB;IACD,eAAe,EAAE;;;;;;6EAM0D;IAC3E,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,iDAAiD;YACjD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,mFAAmF;YACnF,sEAAsE;YACtE,qDAAqD;YACrD,qDAAqD;SACtD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,4DAA4D;SAC7D;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,oBAAoB,GAAoB;IACnD,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,CAAC,eAAe,CAAC;IAC9B,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { StackProfile } from '../types.js';
2
+ import type { DetectionConfig } from './detect.js';
3
+ export declare const typescriptReactStack: StackProfile;
4
+ export declare const typescriptReactDetectionConfig: DetectionConfig;
5
+ //# sourceMappingURL=typescript-react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-react.d.ts","sourceRoot":"","sources":["../../src/stacks/typescript-react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,oBAAoB,EAAE,YAgElC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,eAM5C,CAAC"}
@@ -0,0 +1,73 @@
1
+ export const typescriptReactStack = {
2
+ id: 'typescript-react',
3
+ label: 'TypeScript + React',
4
+ languages: ['TypeScript'],
5
+ framework: 'React',
6
+ architecture: 'Component-based / Feature-sliced',
7
+ commands: {
8
+ build: 'npm run build',
9
+ test: 'npx vitest run',
10
+ lint: 'npx eslint .',
11
+ format: 'npx prettier --write .',
12
+ typecheck: 'npx tsc --noEmit',
13
+ },
14
+ errorHandling: 'TypeScript strict mode + Error boundaries + React Suspense',
15
+ concurrency: 'React concurrent features + async/await',
16
+ permissions: [
17
+ 'Bash(npm test *)',
18
+ 'Bash(npm run *)',
19
+ 'Bash(npx vitest *)',
20
+ 'Bash(npx tsc *)',
21
+ 'Bash(npx eslint *)',
22
+ 'Bash(npx prettier *)',
23
+ ],
24
+ gitignorePatterns: [
25
+ 'node_modules/',
26
+ '/dist/',
27
+ '/build/',
28
+ '.next/',
29
+ '*.tsbuildinfo',
30
+ ],
31
+ openspecContext: `Tech stack: TypeScript + React frontend / full-stack
32
+ Build: npm run build
33
+ Testing: vitest
34
+ Code style: ESLint + Prettier
35
+ Architecture: Component-based / Feature-sliced
36
+ Error handling: TypeScript strict mode + Error boundaries
37
+ Concurrency: React concurrent features + async/await`,
38
+ openspecRules: {
39
+ proposal: [
40
+ 'Always include a "Non-goals" section to explicitly scope out what this change does NOT do',
41
+ 'Include "Trade-offs" section with at least 2 alternative approaches considered',
42
+ 'Must reference affected components/modules by name',
43
+ 'Keep proposals under 800 words',
44
+ ],
45
+ design: [
46
+ 'Must include a component hierarchy diagram',
47
+ 'Must specify public API surface (props interfaces, hook signatures)',
48
+ 'Must address state management strategy',
49
+ 'Must address accessibility (a11y) implications',
50
+ ],
51
+ specs: [
52
+ 'Each spec must be independently testable',
53
+ 'Specs must define both success and failure behaviors',
54
+ 'Include boundary conditions and edge cases',
55
+ 'Reference specific component/hook names, not vague descriptions',
56
+ ],
57
+ tasks: [
58
+ 'Break tasks into chunks of max 2 hours of work',
59
+ 'Each task must have a clear "done" definition verifiable by running a command',
60
+ 'Tasks must follow TDD order - write test first, then implement, then refactor',
61
+ 'Every task must include a verification command (npx vitest run / specific test)',
62
+ 'Mark blocking dependencies explicitly between tasks',
63
+ ],
64
+ },
65
+ };
66
+ export const typescriptReactDetectionConfig = {
67
+ stackId: 'typescript-react',
68
+ markerFiles: ['package.json', 'tsconfig.json'],
69
+ markerDirs: [],
70
+ fileExtensions: ['.tsx', '.ts'],
71
+ priority: 20,
72
+ };
73
+ //# sourceMappingURL=typescript-react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-react.js","sourceRoot":"","sources":["../../src/stacks/typescript-react.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,CAAC,YAAY,CAAC;IACzB,SAAS,EAAE,OAAO;IAClB,YAAY,EAAE,kCAAkC;IAChD,QAAQ,EAAE;QACR,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,wBAAwB;QAChC,SAAS,EAAE,kBAAkB;KAC9B;IACD,aAAa,EAAE,4DAA4D;IAC3E,WAAW,EAAE,yCAAyC;IACtD,WAAW,EAAE;QACX,kBAAkB;QAClB,iBAAiB;QACjB,oBAAoB;QACpB,iBAAiB;QACjB,oBAAoB;QACpB,sBAAsB;KACvB;IACD,iBAAiB,EAAE;QACjB,eAAe;QACf,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,eAAe;KAChB;IACD,eAAe,EAAE;;;;;;qDAMkC;IACnD,aAAa,EAAE;QACb,QAAQ,EAAE;YACR,2FAA2F;YAC3F,gFAAgF;YAChF,oDAAoD;YACpD,gCAAgC;SACjC;QACD,MAAM,EAAE;YACN,4CAA4C;YAC5C,qEAAqE;YACrE,wCAAwC;YACxC,gDAAgD;SACjD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,sDAAsD;YACtD,4CAA4C;YAC5C,iEAAiE;SAClE;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,8BAA8B,GAAoB;IAC7D,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;IAC9C,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;IAC/B,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TemplateContext } from '../types.js';
2
+ export declare function renderGrillReview(): string;
3
+ export declare function composeCLAUDEmd(ctx: TemplateContext): string;
4
+ //# sourceMappingURL=claude-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAC;AAgJjE,wBAAgB,iBAAiB,IAAI,MAAM,CA+D1C;AAaD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAgC5D"}
@@ -0,0 +1,241 @@
1
+ function renderTechStack(stack) {
2
+ const lines = [
3
+ '## Tech Stack',
4
+ ...stack.languages.map((l) => `- Language: ${l}`),
5
+ ];
6
+ if (stack.framework)
7
+ lines.push(`- Framework: ${stack.framework}`);
8
+ lines.push(`- Architecture: ${stack.architecture}`, `- Build: \`${stack.commands.build}\``, `- Test: \`${stack.commands.test}\``, `- Lint: \`${stack.commands.lint}\``);
9
+ if (stack.commands.format)
10
+ lines.push(`- Format: \`${stack.commands.format}\``);
11
+ if (stack.commands.typecheck)
12
+ lines.push(`- Typecheck: \`${stack.commands.typecheck}\``);
13
+ return lines.join('\n');
14
+ }
15
+ function renderCommitConvention() {
16
+ return `## Commit Convention
17
+ - Use conventional commits: feat:, fix:, refactor:, test:, docs:, chore:
18
+ - All commit messages in English`;
19
+ }
20
+ function renderPathA() {
21
+ return `### Path A: One-Shot Proposal
22
+
23
+ When \`/opsx:propose\` is invoked:
24
+
25
+ 1. **MUST activate Superpowers \`brainstorming\` as a pre-requisite skill.**
26
+ - Ask ONE question at a time (Socratic method). Never fire multiple questions in a single turn.
27
+ - Proactively present 2-3 architectural alternatives with explicit trade-offs.
28
+ - **STOP brainstorming BEFORE its "Write design doc" step (step 6).** Do NOT write to \`docs/superpowers/specs/\`. All spec files are managed exclusively by OpenSpec.
29
+ - Only after human confirms the approach, generate ALL artifacts (proposal -> design -> specs -> tasks) in one pass.
30
+
31
+ 2. Every proposal artifact MUST contain:
32
+ - **Non-goals** section (what this change explicitly does NOT do)
33
+ - **Trade-offs** section (alternatives considered and why they were rejected)
34
+ - **Verification strategy** (how we know this change works)`;
35
+ }
36
+ function renderPathB() {
37
+ return `### Path B: Step-by-Step Change
38
+
39
+ When \`/opsx:new\` is invoked:
40
+
41
+ 1. Follow the \`openspec-new-change\` skill steps normally: ask what to build, create the change directory, show status.
42
+
43
+ 2. **BEFORE drafting the first artifact (proposal), MUST activate Superpowers \`brainstorming\`.**
44
+ - Use Socratic questioning to clarify scope, non-goals, and trade-offs.
45
+ - **STOP brainstorming BEFORE its "Write design doc" step (step 6).** Do NOT write to \`docs/superpowers/specs/\`. All spec files are managed exclusively by OpenSpec.
46
+ - Only after the user confirms the approach, draft the proposal artifact.
47
+
48
+ 3. When \`/opsx:continue\` is invoked to advance to the next artifact:
49
+ - Read current \`openspec status --change <name>\` to find the next "ready" artifact.
50
+ - Fetch instructions via \`openspec instructions <artifact-id> --change <name>\`.
51
+ - For **proposal** artifacts: apply brainstorming rules (Non-goals, Trade-offs, Verification strategy).
52
+ - For **design** artifacts: MUST include dependency diagram, public API surface, error handling strategy.
53
+ - For **specs** artifacts: each spec must be independently testable with success + failure behaviors.
54
+ - For **tasks** artifacts: enforce TDD order, max 2-hour chunks, verification commands per task.
55
+ - After drafting each artifact, STOP and wait for user review before advancing.
56
+
57
+ 4. **Pace control: one artifact per \`/opsx:continue\` invocation.**
58
+ - Never auto-advance to the next artifact without explicit user confirmation.
59
+ - This is the key difference from Path A — the user controls the rhythm.`;
60
+ }
61
+ function renderExploration() {
62
+ return `### Exploration
63
+
64
+ When \`/opsx:explore\` is invoked:
65
+
66
+ 1. Enter thinking-partner mode. No artifact creation, no directory scaffolding.
67
+ 2. Activate Superpowers \`brainstorming\` for structured exploration.
68
+ 3. Output is conversational — conclusions can later feed into Path A or Path B.
69
+
70
+ 4. **Worktree isolation (exploration):**
71
+ When exploration needs to produce actual code (PoC, prototype), SHOULD create a worktree:
72
+ - Exploration may generate substantial code that will ultimately be discarded
73
+ - Exploration involves modifying existing code to validate hypotheses
74
+ Discarding a worktree costs zero — prevents exploration artifacts from polluting the main branch.`;
75
+ }
76
+ function renderApplyPhase(stack) {
77
+ return `### Phase 2: Apply / Implement
78
+
79
+ When \`/opsx:apply\` is invoked:
80
+
81
+ 1. **MUST activate Superpowers \`test-driven-development\` as a pre-requisite skill.**
82
+ - For every task in \`tasks.md\`, follow strict Red-Green-Refactor:
83
+ a. Write a failing test FIRST
84
+ b. Write minimal code to make it pass
85
+ c. Refactor while keeping tests green
86
+
87
+ 2. **MUST activate Superpowers \`verification-before-completion\` before marking ANY task done.**
88
+ - **IRON LAW: NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.**
89
+ - Before checking off a task \`[x]\`, you MUST:
90
+ a. Run the actual verification command in the terminal (\`${stack.commands.test}\`)
91
+ b. Paste the raw output as evidence
92
+ c. Only then mark the task complete
93
+ - "I believe it works" or "it should pass" is NEVER acceptable.
94
+
95
+ 3. **Subagent discipline** (when using parallel agents):
96
+ - Each subagent works in its own git worktree
97
+ - Each subagent runs its own tests independently
98
+ - Main agent verifies integration after merging subagent work
99
+
100
+ 4. **Subagent-Driven Development trigger conditions:**
101
+ When ALL of the following are met, SHOULD enable subagent mode:
102
+ - \`tasks.md\` contains ≥ 6 pending implementation tasks
103
+ - Most tasks have no \`blocked by\` dependency on each other
104
+ - Tasks map to different modules/files with clear module boundaries
105
+ - Session context window is >40% consumed
106
+
107
+ Execution discipline when enabled:
108
+ - Each subagent works in its own isolated git worktree
109
+ - Each subagent independently follows TDD and runs its own tests
110
+ - Main agent performs two-stage review per subagent output (spec compliance → code quality)
111
+ - Main agent runs full integration tests after merging
112
+ - Subagents MUST NOT implement the same module in parallel; independent modules may be parallelized
113
+
114
+ 5. **Git Worktree isolation trigger conditions:**
115
+ When ANY of the following are met, SHOULD create a worktree before apply begins:
116
+ - Change involves destructive refactoring (replacing core modules, migrating data structures)
117
+ - Multiple \`/opsx:new\` changes are being worked on in parallel
118
+ - Rollback cost of failure is high (change affects multiple consumers)
119
+
120
+ Worktree is NOT needed when:
121
+ - Single-file bugfix
122
+ - Adding a new independent module (no impact on existing code)
123
+ - Documentation or configuration adjustments`;
124
+ }
125
+ function renderVerifyPhase(stack) {
126
+ return `### Phase 3: Verify / Archive
127
+
128
+ Before \`/opsx:archive\`:
129
+
130
+ 1. Run \`/opsx:verify\` to validate implementation matches all specs
131
+ 2. Run full test suite (\`${stack.commands.test}\`) and paste evidence
132
+ 3. Run linter (\`${stack.commands.lint}\`) with zero warnings`;
133
+ }
134
+ export function renderGrillReview() {
135
+ return `### Pre-Apply Review (Grill)
136
+
137
+ When all artifacts (proposal, design, specs, tasks) are complete, the AI MUST prompt:
138
+ > "All artifacts are ready. Recommend running \`/grill-me\` for a pre-apply review before implementation. Or run \`/opsx:apply\` directly to skip review."
139
+
140
+ If the user runs \`/opsx:apply\` without prior grill, this is treated as an implicit skip — no blocking.
141
+
142
+ **Protocol:**
143
+
144
+ 1. **Backup**: Copy the change directory to \`.grill-backup/\` before grill begins. Clean stale backups if present.
145
+ 2. **Review**: Ask ONE question at a time. Each question includes:
146
+ - Problem classification: \`[blocking]\` or \`[non-blocking]\`
147
+ - The specific issue found
148
+ - A recommended answer
149
+ - A modification preview (dry-run diff showing what will change)
150
+ 3. **User response**: If the user accepts, write the change. Core principle: **user must see the final diff before any write.**
151
+ 4. **Cleanup**: Delete \`.grill-backup/\` after successful completion.
152
+
153
+ **Review Dimensions** (select by relevance, not all required):
154
+ - Scope boundary — are goals/non-goals clear with no ambiguity?
155
+ - Error paths — are exceptions, edge cases, and failures covered?
156
+ - Dependency risk — new dependencies assessed? Impact on existing modules?
157
+ - Testability — can every spec be verified with current test infrastructure?
158
+ - Security — input validation, permissions, data exposure risks?
159
+ - Performance impact — O(n²), blocking IO, memory pressure?
160
+ - Backward compatibility — any breaking changes to existing APIs/behaviors?
161
+
162
+ **Problem Classification:**
163
+ - **Blocking** (must resolve before apply): artifact contradictions, uncovered edge cases, missing error handling, security risks, untestable specs. User may override with explicit acknowledgment.
164
+ - **Non-blocking** (recorded, not enforced): naming style, optional optimizations, alternative approaches, documentation wording.
165
+
166
+ **Exit Commands:**
167
+ - \`grill-stop\`: Exit grill, keep all modifications made so far.
168
+ - \`grill-abort\`: Exit grill, rollback all modifications from \`.grill-backup/\`.
169
+ - Ambiguous expressions ("stop", "算了"): AI MUST ask for clarification — "exit grill review, or abandon the entire change?"
170
+
171
+ **Soft Limit:** After 15 questions, self-assess whether remaining issues are blocking-level. If none remain, proceed to summary.
172
+
173
+ **Consistency Scan** (before summary):
174
+ Run a final check across all artifacts for:
175
+ - Reference integrity — every goal in proposal maps to design/specs/tasks
176
+ - Terminology consistency — same concepts use same names throughout
177
+ - Logical conflict detection — no artifact contradicts another
178
+
179
+ If scan finds issues, continue grill to resolve them.
180
+
181
+ **Summary Format** (on completion):
182
+ \`\`\`
183
+ ## Grill Review Summary
184
+
185
+ Blocking (resolved):
186
+ - [dimension] description of resolved issue
187
+
188
+ Suggestions (recorded, non-blocking):
189
+ - [dimension] description of suggestion
190
+
191
+ Modified artifacts: <list of changed files>
192
+
193
+ Consistency scan: ✅ PASS
194
+
195
+ Run /opsx:apply to start implementation.
196
+ \`\`\``;
197
+ }
198
+ function renderGeneralRules() {
199
+ return `### General Rules
200
+
201
+ - **Always run \`openspec\` commands from the project root directory.**
202
+ - **Never skip TDD.** Even for "simple" changes. Especially for "simple" changes.
203
+ - **Never trust memory over terminal output.** Always verify current state.
204
+ - **One concern per commit.** Keep commits atomic and reversible.
205
+ - **Fail loud, fail early.** Prefer compile-time errors over runtime surprises.
206
+ - **Dependencies flow inward.** Domain logic never imports infrastructure.`;
207
+ }
208
+ export function composeCLAUDEmd(ctx) {
209
+ const sections = [
210
+ `# Project CLAUDE.md`,
211
+ '',
212
+ renderTechStack(ctx.stack),
213
+ '',
214
+ renderCommitConvention(),
215
+ '',
216
+ '---',
217
+ '',
218
+ '<!-- FUSION:START -->',
219
+ '## OpenSpec & Superpowers Composite Workflow Constraints',
220
+ '',
221
+ 'This project enforces a fused OpenSpec + Superpowers engineering pipeline.',
222
+ 'AI agents MUST follow these rules without exception.',
223
+ '',
224
+ renderPathA(),
225
+ '',
226
+ renderPathB(),
227
+ '',
228
+ renderExploration(),
229
+ '',
230
+ renderGrillReview(),
231
+ '',
232
+ renderApplyPhase(ctx.stack),
233
+ '',
234
+ renderVerifyPhase(ctx.stack),
235
+ '',
236
+ renderGeneralRules(),
237
+ '<!-- FUSION:END -->',
238
+ ];
239
+ return sections.join('\n') + '\n';
240
+ }
241
+ //# sourceMappingURL=claude-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,KAAmB;IAC1C,MAAM,KAAK,GAAG;QACZ,eAAe;QACf,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;KAClD,CAAC;IACF,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CACR,mBAAmB,KAAK,CAAC,YAAY,EAAE,EACvC,cAAc,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EACtC,aAAa,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,EACpC,aAAa,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CACrC,CAAC;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO;;iCAEwB,CAAC;AAClC,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;+DAasD,CAAC;AAChE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;4EAsBmE,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;qGAY4F,CAAC;AACtG,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB;IAC3C,OAAO;;;;;;;;;;;;;iEAawD,KAAK,CAAC,QAAQ,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAiCpC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAmB;IAC5C,OAAO;;;;;4BAKmB,KAAK,CAAC,QAAQ,CAAC,IAAI;mBAC5B,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6DF,CAAC;AACR,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;2EAOkE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,QAAQ,GAAG;QACf,qBAAqB;QACrB,EAAE;QACF,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,EAAE;QACF,sBAAsB,EAAE;QACxB,EAAE;QACF,KAAK;QACL,EAAE;QACF,uBAAuB;QACvB,0DAA0D;QAC1D,EAAE;QACF,4EAA4E;QAC5E,sDAAsD;QACtD,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,EAAE;QACF,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B,EAAE;QACF,kBAAkB,EAAE;QACpB,qBAAqB;KACtB,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StackProfile } from '../types.js';
2
+ export declare function composeClaudeSettings(stack: StackProfile): object;
3
+ //# sourceMappingURL=claude-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../src/templates/claude-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsBhD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAMjE"}