ctxinit 0.1.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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +484 -0
  3. package/bin/ctx.js +3 -0
  4. package/dist/analysis/index.d.ts +2 -0
  5. package/dist/analysis/index.d.ts.map +1 -0
  6. package/dist/analysis/index.js +18 -0
  7. package/dist/analysis/index.js.map +1 -0
  8. package/dist/analysis/static-analysis.d.ts +79 -0
  9. package/dist/analysis/static-analysis.d.ts.map +1 -0
  10. package/dist/analysis/static-analysis.js +279 -0
  11. package/dist/analysis/static-analysis.js.map +1 -0
  12. package/dist/bootstrap/index.d.ts +8 -0
  13. package/dist/bootstrap/index.d.ts.map +1 -0
  14. package/dist/bootstrap/index.js +13 -0
  15. package/dist/bootstrap/index.js.map +1 -0
  16. package/dist/bootstrap/orchestrator.d.ts +48 -0
  17. package/dist/bootstrap/orchestrator.d.ts.map +1 -0
  18. package/dist/bootstrap/orchestrator.js +363 -0
  19. package/dist/bootstrap/orchestrator.js.map +1 -0
  20. package/dist/bootstrap/validator.d.ts +25 -0
  21. package/dist/bootstrap/validator.d.ts.map +1 -0
  22. package/dist/bootstrap/validator.js +412 -0
  23. package/dist/bootstrap/validator.js.map +1 -0
  24. package/dist/build/atomic.d.ts +74 -0
  25. package/dist/build/atomic.d.ts.map +1 -0
  26. package/dist/build/atomic.js +235 -0
  27. package/dist/build/atomic.js.map +1 -0
  28. package/dist/build/index.d.ts +10 -0
  29. package/dist/build/index.d.ts.map +1 -0
  30. package/dist/build/index.js +26 -0
  31. package/dist/build/index.js.map +1 -0
  32. package/dist/build/lock.d.ts +102 -0
  33. package/dist/build/lock.d.ts.map +1 -0
  34. package/dist/build/lock.js +297 -0
  35. package/dist/build/lock.js.map +1 -0
  36. package/dist/build/manifest.d.ts +138 -0
  37. package/dist/build/manifest.d.ts.map +1 -0
  38. package/dist/build/manifest.js +269 -0
  39. package/dist/build/manifest.js.map +1 -0
  40. package/dist/build/orchestrator.d.ts +103 -0
  41. package/dist/build/orchestrator.d.ts.map +1 -0
  42. package/dist/build/orchestrator.js +524 -0
  43. package/dist/build/orchestrator.js.map +1 -0
  44. package/dist/cli/bootstrap.d.ts +77 -0
  45. package/dist/cli/bootstrap.d.ts.map +1 -0
  46. package/dist/cli/bootstrap.js +527 -0
  47. package/dist/cli/bootstrap.js.map +1 -0
  48. package/dist/cli/build.d.ts +32 -0
  49. package/dist/cli/build.d.ts.map +1 -0
  50. package/dist/cli/build.js +156 -0
  51. package/dist/cli/build.js.map +1 -0
  52. package/dist/cli/diff.d.ts +23 -0
  53. package/dist/cli/diff.d.ts.map +1 -0
  54. package/dist/cli/diff.js +226 -0
  55. package/dist/cli/diff.js.map +1 -0
  56. package/dist/cli/hooks.d.ts +29 -0
  57. package/dist/cli/hooks.d.ts.map +1 -0
  58. package/dist/cli/hooks.js +176 -0
  59. package/dist/cli/hooks.js.map +1 -0
  60. package/dist/cli/init.d.ts +53 -0
  61. package/dist/cli/init.d.ts.map +1 -0
  62. package/dist/cli/init.js +254 -0
  63. package/dist/cli/init.js.map +1 -0
  64. package/dist/cli/lint.d.ts +46 -0
  65. package/dist/cli/lint.d.ts.map +1 -0
  66. package/dist/cli/lint.js +210 -0
  67. package/dist/cli/lint.js.map +1 -0
  68. package/dist/cli/migrate.d.ts +28 -0
  69. package/dist/cli/migrate.d.ts.map +1 -0
  70. package/dist/cli/migrate.js +350 -0
  71. package/dist/cli/migrate.js.map +1 -0
  72. package/dist/cli/verify.d.ts +21 -0
  73. package/dist/cli/verify.d.ts.map +1 -0
  74. package/dist/cli/verify.js +209 -0
  75. package/dist/cli/verify.js.map +1 -0
  76. package/dist/cli.d.ts +8 -0
  77. package/dist/cli.d.ts.map +1 -0
  78. package/dist/cli.js +262 -0
  79. package/dist/cli.js.map +1 -0
  80. package/dist/compiler/agents-compiler.d.ts +24 -0
  81. package/dist/compiler/agents-compiler.d.ts.map +1 -0
  82. package/dist/compiler/agents-compiler.js +192 -0
  83. package/dist/compiler/agents-compiler.js.map +1 -0
  84. package/dist/compiler/base-compiler.d.ts +152 -0
  85. package/dist/compiler/base-compiler.d.ts.map +1 -0
  86. package/dist/compiler/base-compiler.js +180 -0
  87. package/dist/compiler/base-compiler.js.map +1 -0
  88. package/dist/compiler/claude-compiler.d.ts +24 -0
  89. package/dist/compiler/claude-compiler.d.ts.map +1 -0
  90. package/dist/compiler/claude-compiler.js +182 -0
  91. package/dist/compiler/claude-compiler.js.map +1 -0
  92. package/dist/compiler/cursor-compiler.d.ts +33 -0
  93. package/dist/compiler/cursor-compiler.d.ts.map +1 -0
  94. package/dist/compiler/cursor-compiler.js +136 -0
  95. package/dist/compiler/cursor-compiler.js.map +1 -0
  96. package/dist/compiler/index.d.ts +7 -0
  97. package/dist/compiler/index.d.ts.map +1 -0
  98. package/dist/compiler/index.js +24 -0
  99. package/dist/compiler/index.js.map +1 -0
  100. package/dist/compiler/rule-selector.d.ts +115 -0
  101. package/dist/compiler/rule-selector.d.ts.map +1 -0
  102. package/dist/compiler/rule-selector.js +273 -0
  103. package/dist/compiler/rule-selector.js.map +1 -0
  104. package/dist/compiler/token-estimator.d.ts +74 -0
  105. package/dist/compiler/token-estimator.d.ts.map +1 -0
  106. package/dist/compiler/token-estimator.js +191 -0
  107. package/dist/compiler/token-estimator.js.map +1 -0
  108. package/dist/config/index.d.ts +2 -0
  109. package/dist/config/index.d.ts.map +1 -0
  110. package/dist/config/index.js +18 -0
  111. package/dist/config/index.js.map +1 -0
  112. package/dist/config/loader.d.ts +48 -0
  113. package/dist/config/loader.d.ts.map +1 -0
  114. package/dist/config/loader.js +175 -0
  115. package/dist/config/loader.js.map +1 -0
  116. package/dist/git/gitignore.d.ts +59 -0
  117. package/dist/git/gitignore.d.ts.map +1 -0
  118. package/dist/git/gitignore.js +268 -0
  119. package/dist/git/gitignore.js.map +1 -0
  120. package/dist/git/hooks.d.ts +34 -0
  121. package/dist/git/hooks.d.ts.map +1 -0
  122. package/dist/git/hooks.js +129 -0
  123. package/dist/git/hooks.js.map +1 -0
  124. package/dist/git/husky.d.ts +52 -0
  125. package/dist/git/husky.d.ts.map +1 -0
  126. package/dist/git/husky.js +219 -0
  127. package/dist/git/husky.js.map +1 -0
  128. package/dist/git/index.d.ts +9 -0
  129. package/dist/git/index.d.ts.map +1 -0
  130. package/dist/git/index.js +15 -0
  131. package/dist/git/index.js.map +1 -0
  132. package/dist/index.d.ts +6 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +23 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/llm/base-provider.d.ts +43 -0
  137. package/dist/llm/base-provider.d.ts.map +1 -0
  138. package/dist/llm/base-provider.js +91 -0
  139. package/dist/llm/base-provider.js.map +1 -0
  140. package/dist/llm/index.d.ts +17 -0
  141. package/dist/llm/index.d.ts.map +1 -0
  142. package/dist/llm/index.js +36 -0
  143. package/dist/llm/index.js.map +1 -0
  144. package/dist/llm/prompts/bootstrap-prompt.d.ts +27 -0
  145. package/dist/llm/prompts/bootstrap-prompt.d.ts.map +1 -0
  146. package/dist/llm/prompts/bootstrap-prompt.js +278 -0
  147. package/dist/llm/prompts/bootstrap-prompt.js.map +1 -0
  148. package/dist/llm/prompts/index.d.ts +5 -0
  149. package/dist/llm/prompts/index.d.ts.map +1 -0
  150. package/dist/llm/prompts/index.js +11 -0
  151. package/dist/llm/prompts/index.js.map +1 -0
  152. package/dist/llm/provider-factory.d.ts +27 -0
  153. package/dist/llm/provider-factory.d.ts.map +1 -0
  154. package/dist/llm/provider-factory.js +213 -0
  155. package/dist/llm/provider-factory.js.map +1 -0
  156. package/dist/llm/providers/claude-api.d.ts +21 -0
  157. package/dist/llm/providers/claude-api.d.ts.map +1 -0
  158. package/dist/llm/providers/claude-api.js +110 -0
  159. package/dist/llm/providers/claude-api.js.map +1 -0
  160. package/dist/llm/providers/claude-code.d.ts +21 -0
  161. package/dist/llm/providers/claude-code.d.ts.map +1 -0
  162. package/dist/llm/providers/claude-code.js +120 -0
  163. package/dist/llm/providers/claude-code.js.map +1 -0
  164. package/dist/llm/providers/codex-cli.d.ts +25 -0
  165. package/dist/llm/providers/codex-cli.d.ts.map +1 -0
  166. package/dist/llm/providers/codex-cli.js +129 -0
  167. package/dist/llm/providers/codex-cli.js.map +1 -0
  168. package/dist/llm/providers/cursor-cli.d.ts +24 -0
  169. package/dist/llm/providers/cursor-cli.d.ts.map +1 -0
  170. package/dist/llm/providers/cursor-cli.js +106 -0
  171. package/dist/llm/providers/cursor-cli.js.map +1 -0
  172. package/dist/llm/providers/gemini-api.d.ts +20 -0
  173. package/dist/llm/providers/gemini-api.d.ts.map +1 -0
  174. package/dist/llm/providers/gemini-api.js +121 -0
  175. package/dist/llm/providers/gemini-api.js.map +1 -0
  176. package/dist/llm/providers/gemini-cli.d.ts +20 -0
  177. package/dist/llm/providers/gemini-cli.d.ts.map +1 -0
  178. package/dist/llm/providers/gemini-cli.js +109 -0
  179. package/dist/llm/providers/gemini-cli.js.map +1 -0
  180. package/dist/llm/providers/interactive.d.ts +42 -0
  181. package/dist/llm/providers/interactive.d.ts.map +1 -0
  182. package/dist/llm/providers/interactive.js +200 -0
  183. package/dist/llm/providers/interactive.js.map +1 -0
  184. package/dist/llm/providers/openai-api.d.ts +21 -0
  185. package/dist/llm/providers/openai-api.d.ts.map +1 -0
  186. package/dist/llm/providers/openai-api.js +107 -0
  187. package/dist/llm/providers/openai-api.js.map +1 -0
  188. package/dist/llm/types.d.ts +128 -0
  189. package/dist/llm/types.d.ts.map +1 -0
  190. package/dist/llm/types.js +8 -0
  191. package/dist/llm/types.js.map +1 -0
  192. package/dist/parser/index.d.ts +3 -0
  193. package/dist/parser/index.d.ts.map +1 -0
  194. package/dist/parser/index.js +19 -0
  195. package/dist/parser/index.js.map +1 -0
  196. package/dist/parser/path-security.d.ts +40 -0
  197. package/dist/parser/path-security.d.ts.map +1 -0
  198. package/dist/parser/path-security.js +183 -0
  199. package/dist/parser/path-security.js.map +1 -0
  200. package/dist/parser/rule-parser.d.ts +50 -0
  201. package/dist/parser/rule-parser.d.ts.map +1 -0
  202. package/dist/parser/rule-parser.js +203 -0
  203. package/dist/parser/rule-parser.js.map +1 -0
  204. package/dist/schemas/config.d.ts +202 -0
  205. package/dist/schemas/config.d.ts.map +1 -0
  206. package/dist/schemas/config.js +96 -0
  207. package/dist/schemas/config.js.map +1 -0
  208. package/dist/schemas/index.d.ts +3 -0
  209. package/dist/schemas/index.d.ts.map +1 -0
  210. package/dist/schemas/index.js +19 -0
  211. package/dist/schemas/index.js.map +1 -0
  212. package/dist/schemas/rule.d.ts +67 -0
  213. package/dist/schemas/rule.d.ts.map +1 -0
  214. package/dist/schemas/rule.js +44 -0
  215. package/dist/schemas/rule.js.map +1 -0
  216. package/package.json +69 -0
  217. package/templates/architecture.md +35 -0
  218. package/templates/bootstrap-prompt.md +242 -0
  219. package/templates/config.yaml +25 -0
  220. package/templates/project.md +44 -0
  221. package/templates/rules/example.md +36 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Git Hooks Generator
4
+ *
5
+ * Generates pre-commit hook scripts for ctx integration.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generatePreCommitHook = generatePreCommitHook;
9
+ exports.generateStandalonePreCommitHook = generateStandalonePreCommitHook;
10
+ exports.getAutoStagedFiles = getAutoStagedFiles;
11
+ /**
12
+ * Generate pre-commit hook script content
13
+ */
14
+ function generatePreCommitHook(options = {}) {
15
+ const { incremental = true, autoStage = true, skipValidation = false, verbose = false, quiet = false, } = options;
16
+ // Build the ctx command
17
+ const cmdParts = ['npx ctx build'];
18
+ if (incremental)
19
+ cmdParts.push('--incremental');
20
+ if (skipValidation)
21
+ cmdParts.push('--skip-validation');
22
+ if (verbose)
23
+ cmdParts.push('--verbose');
24
+ if (quiet)
25
+ cmdParts.push('--quiet');
26
+ const ctxCommand = cmdParts.join(' ');
27
+ // Generate the hook script
28
+ const script = `#!/usr/bin/env sh
29
+ . "$(dirname -- "$0")/_/husky.sh"
30
+
31
+ # ctx pre-commit hook
32
+ # Automatically builds context files and stages them for commit
33
+
34
+ # Run ctx build
35
+ ${ctxCommand}
36
+ BUILD_EXIT_CODE=$?
37
+
38
+ # Check if build succeeded
39
+ if [ $BUILD_EXIT_CODE -ne 0 ]; then
40
+ echo ""
41
+ echo "❌ ctx build failed with exit code $BUILD_EXIT_CODE"
42
+ echo ""
43
+ if [ $BUILD_EXIT_CODE -eq 1 ]; then
44
+ echo " Validation errors found. Fix the issues above and try again."
45
+ elif [ $BUILD_EXIT_CODE -eq 2 ]; then
46
+ echo " Runtime error occurred. Check the error message above."
47
+ fi
48
+ echo ""
49
+ exit $BUILD_EXIT_CODE
50
+ fi
51
+
52
+ ${autoStage
53
+ ? `# Stage compiled outputs (including deletions)
54
+ STAGED_ANY=0
55
+
56
+ # Stage CLAUDE.md
57
+ if [ -f "CLAUDE.md" ]; then
58
+ git add -A "CLAUDE.md"
59
+ STAGED_ANY=1
60
+ fi
61
+
62
+ # Stage AGENTS.md
63
+ if [ -f "AGENTS.md" ]; then
64
+ git add -A "AGENTS.md"
65
+ STAGED_ANY=1
66
+ fi
67
+
68
+ # Stage .cursor/rules (handles additions/modifications/deletions)
69
+ if [ -d ".cursor/rules" ]; then
70
+ git add -A ".cursor/rules"
71
+ STAGED_ANY=1
72
+ fi
73
+
74
+ if [ $STAGED_ANY -eq 1 ]; then
75
+ ${!quiet ? 'echo "✅ Staged compiled context files"' : ''}
76
+ fi`
77
+ : '# Auto-staging disabled'}
78
+
79
+ exit 0
80
+ `;
81
+ return script;
82
+ }
83
+ /**
84
+ * Generate a minimal pre-commit hook (without husky.sh sourcing)
85
+ * For use in non-husky setups
86
+ */
87
+ function generateStandalonePreCommitHook(options = {}) {
88
+ const { incremental = true, autoStage = true, skipValidation = false, verbose = false, quiet = false, } = options;
89
+ // Build the ctx command
90
+ const cmdParts = ['npx ctx build'];
91
+ if (incremental)
92
+ cmdParts.push('--incremental');
93
+ if (skipValidation)
94
+ cmdParts.push('--skip-validation');
95
+ if (verbose)
96
+ cmdParts.push('--verbose');
97
+ if (quiet)
98
+ cmdParts.push('--quiet');
99
+ const ctxCommand = cmdParts.join(' ');
100
+ const script = `#!/bin/sh
101
+ # ctx pre-commit hook (standalone)
102
+
103
+ # Run ctx build
104
+ ${ctxCommand}
105
+ BUILD_EXIT_CODE=$?
106
+
107
+ if [ $BUILD_EXIT_CODE -ne 0 ]; then
108
+ echo "❌ ctx build failed"
109
+ exit $BUILD_EXIT_CODE
110
+ fi
111
+
112
+ ${autoStage
113
+ ? `# Stage outputs
114
+ [ -f "CLAUDE.md" ] && git add -A "CLAUDE.md"
115
+ [ -f "AGENTS.md" ] && git add -A "AGENTS.md"
116
+ [ -d ".cursor/rules" ] && git add -A ".cursor/rules" 2>/dev/null`
117
+ : ''}
118
+
119
+ exit 0
120
+ `;
121
+ return script;
122
+ }
123
+ /**
124
+ * Get the list of files that will be auto-staged
125
+ */
126
+ function getAutoStagedFiles() {
127
+ return ['CLAUDE.md', 'AGENTS.md', '.cursor/rules/*.mdc'];
128
+ }
129
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/git/hooks.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAqBH,sDA4EC;AAMD,0EA2CC;AAKD,gDAEC;AAvID;;GAEG;AACH,SAAgB,qBAAqB,CAAC,UAA4B,EAAE;IAClE,MAAM,EACJ,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,IAAI,EAChB,cAAc,GAAG,KAAK,EACtB,OAAO,GAAG,KAAK,EACf,KAAK,GAAG,KAAK,GACd,GAAG,OAAO,CAAC;IAEZ,wBAAwB;IACxB,MAAM,QAAQ,GAAG,CAAC,eAAe,CAAC,CAAC;IACnC,IAAI,WAAW;QAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,cAAc;QAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,OAAO;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,2BAA2B;IAC3B,MAAM,MAAM,GAAG;;;;;;;EAOf,UAAU;;;;;;;;;;;;;;;;;EAkBV,SAAS;QACP,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;IAsBF,CAAC,KAAK,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE;GACvD;QACC,CAAC,CAAC,yBACN;;;CAGC,CAAC;IAEA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,+BAA+B,CAAC,UAA4B,EAAE;IAC5E,MAAM,EACJ,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,IAAI,EAChB,cAAc,GAAG,KAAK,EACtB,OAAO,GAAG,KAAK,EACf,KAAK,GAAG,KAAK,GACd,GAAG,OAAO,CAAC;IAEZ,wBAAwB;IACxB,MAAM,QAAQ,GAAG,CAAC,eAAe,CAAC,CAAC;IACnC,IAAI,WAAW;QAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,cAAc;QAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,OAAO;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG;;;;EAIf,UAAU;;;;;;;;EASV,SAAS;QACP,CAAC,CAAC;;;iEAG2D;QAC7D,CAAC,CAAC,EACN;;;CAGC,CAAC;IAEA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Husky Manager
3
+ *
4
+ * Manages Husky installation and configuration for git hooks.
5
+ */
6
+ /**
7
+ * Husky installation status
8
+ */
9
+ export interface HuskyStatus {
10
+ /** Whether Husky is installed as a dependency */
11
+ installed: boolean;
12
+ /** Whether Husky is initialized (.husky directory exists) */
13
+ initialized: boolean;
14
+ /** Husky version if installed */
15
+ version?: string;
16
+ /** Whether pre-commit hook exists */
17
+ hasPreCommitHook: boolean;
18
+ /** Whether our ctx hook is already configured */
19
+ hasCtxHook: boolean;
20
+ }
21
+ /**
22
+ * Husky Manager class
23
+ */
24
+ export declare class HuskyManager {
25
+ private projectRoot;
26
+ constructor(projectRoot: string);
27
+ /**
28
+ * Check Husky installation status
29
+ */
30
+ checkStatus(): Promise<HuskyStatus>;
31
+ /**
32
+ * Install Husky as a dev dependency
33
+ */
34
+ install(): Promise<boolean>;
35
+ /**
36
+ * Initialize Husky (create .husky directory)
37
+ */
38
+ initialize(): Promise<boolean>;
39
+ /**
40
+ * Add pre-commit hook
41
+ */
42
+ addPreCommitHook(hookContent: string): Promise<boolean>;
43
+ /**
44
+ * Remove ctx hook from pre-commit
45
+ */
46
+ removeCtxHook(): Promise<boolean>;
47
+ /**
48
+ * Detect which package manager is being used
49
+ */
50
+ private detectPackageManager;
51
+ }
52
+ //# sourceMappingURL=husky.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"husky.d.ts","sourceRoot":"","sources":["../../src/git/husky.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iDAAiD;IACjD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IA+CzC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAwBjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAuBpC;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC7D;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IA+BvC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAS7B"}
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ /**
3
+ * Husky Manager
4
+ *
5
+ * Manages Husky installation and configuration for git hooks.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.HuskyManager = void 0;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const child_process_1 = require("child_process");
45
+ /**
46
+ * Husky Manager class
47
+ */
48
+ class HuskyManager {
49
+ projectRoot;
50
+ constructor(projectRoot) {
51
+ this.projectRoot = projectRoot;
52
+ }
53
+ /**
54
+ * Check Husky installation status
55
+ */
56
+ async checkStatus() {
57
+ const status = {
58
+ installed: false,
59
+ initialized: false,
60
+ hasPreCommitHook: false,
61
+ hasCtxHook: false,
62
+ };
63
+ // Check if Husky is in package.json dependencies
64
+ const packageJsonPath = path.join(this.projectRoot, 'package.json');
65
+ if (fs.existsSync(packageJsonPath)) {
66
+ try {
67
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
68
+ const deps = {
69
+ ...packageJson.dependencies,
70
+ ...packageJson.devDependencies,
71
+ };
72
+ if (deps.husky) {
73
+ status.installed = true;
74
+ status.version = deps.husky.replace(/[\^~]/g, '');
75
+ }
76
+ }
77
+ catch {
78
+ // Ignore JSON parse errors
79
+ }
80
+ }
81
+ // Check if .husky directory exists
82
+ const huskyDir = path.join(this.projectRoot, '.husky');
83
+ status.initialized = fs.existsSync(huskyDir);
84
+ // Check if pre-commit hook exists
85
+ const preCommitPath = path.join(huskyDir, 'pre-commit');
86
+ status.hasPreCommitHook = fs.existsSync(preCommitPath);
87
+ // Check if our ctx hook is configured
88
+ if (status.hasPreCommitHook) {
89
+ try {
90
+ const hookContent = fs.readFileSync(preCommitPath, 'utf-8');
91
+ status.hasCtxHook = hookContent.includes('ctx build');
92
+ }
93
+ catch {
94
+ // Ignore read errors
95
+ }
96
+ }
97
+ return status;
98
+ }
99
+ /**
100
+ * Install Husky as a dev dependency
101
+ */
102
+ async install() {
103
+ try {
104
+ // Detect package manager
105
+ const packageManager = this.detectPackageManager();
106
+ // Install Husky
107
+ const installCmd = packageManager === 'yarn'
108
+ ? 'yarn add -D husky'
109
+ : packageManager === 'pnpm'
110
+ ? 'pnpm add -D husky'
111
+ : 'npm install -D husky';
112
+ (0, child_process_1.execSync)(installCmd, {
113
+ cwd: this.projectRoot,
114
+ stdio: 'pipe',
115
+ });
116
+ return true;
117
+ }
118
+ catch {
119
+ return false;
120
+ }
121
+ }
122
+ /**
123
+ * Initialize Husky (create .husky directory)
124
+ */
125
+ async initialize() {
126
+ try {
127
+ // Run husky init or husky install depending on version
128
+ const result = (0, child_process_1.spawnSync)('npx', ['husky', 'init'], {
129
+ cwd: this.projectRoot,
130
+ stdio: 'pipe',
131
+ });
132
+ if (result.status !== 0) {
133
+ // Try older husky install command
134
+ const legacyResult = (0, child_process_1.spawnSync)('npx', ['husky', 'install'], {
135
+ cwd: this.projectRoot,
136
+ stdio: 'pipe',
137
+ });
138
+ return legacyResult.status === 0;
139
+ }
140
+ return true;
141
+ }
142
+ catch {
143
+ return false;
144
+ }
145
+ }
146
+ /**
147
+ * Add pre-commit hook
148
+ */
149
+ async addPreCommitHook(hookContent) {
150
+ try {
151
+ const huskyDir = path.join(this.projectRoot, '.husky');
152
+ // Ensure .husky directory exists
153
+ if (!fs.existsSync(huskyDir)) {
154
+ await fs.promises.mkdir(huskyDir, { recursive: true });
155
+ }
156
+ const preCommitPath = path.join(huskyDir, 'pre-commit');
157
+ // Check if pre-commit already exists
158
+ if (fs.existsSync(preCommitPath)) {
159
+ const existingContent = await fs.promises.readFile(preCommitPath, 'utf-8');
160
+ // If ctx build is already there, don't duplicate
161
+ if (existingContent.includes('ctx build')) {
162
+ return true;
163
+ }
164
+ // Append to existing hook
165
+ const updatedContent = existingContent.trim() + '\n\n' + hookContent;
166
+ await fs.promises.writeFile(preCommitPath, updatedContent, { mode: 0o755 });
167
+ }
168
+ else {
169
+ // Create new hook
170
+ await fs.promises.writeFile(preCommitPath, hookContent, { mode: 0o755 });
171
+ }
172
+ return true;
173
+ }
174
+ catch {
175
+ return false;
176
+ }
177
+ }
178
+ /**
179
+ * Remove ctx hook from pre-commit
180
+ */
181
+ async removeCtxHook() {
182
+ try {
183
+ const preCommitPath = path.join(this.projectRoot, '.husky', 'pre-commit');
184
+ if (!fs.existsSync(preCommitPath)) {
185
+ return true;
186
+ }
187
+ const content = await fs.promises.readFile(preCommitPath, 'utf-8');
188
+ // Remove ctx-related lines
189
+ const lines = content.split('\n');
190
+ const filteredLines = lines.filter((line) => !line.includes('ctx build') && !line.includes('# ctx pre-commit'));
191
+ const newContent = filteredLines.join('\n').trim();
192
+ if (newContent === '#!/usr/bin/env sh' || newContent === '#!/bin/sh') {
193
+ // Hook is now empty, remove the file
194
+ await fs.promises.unlink(preCommitPath);
195
+ }
196
+ else {
197
+ await fs.promises.writeFile(preCommitPath, newContent + '\n', { mode: 0o755 });
198
+ }
199
+ return true;
200
+ }
201
+ catch {
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Detect which package manager is being used
207
+ */
208
+ detectPackageManager() {
209
+ if (fs.existsSync(path.join(this.projectRoot, 'pnpm-lock.yaml'))) {
210
+ return 'pnpm';
211
+ }
212
+ if (fs.existsSync(path.join(this.projectRoot, 'yarn.lock'))) {
213
+ return 'yarn';
214
+ }
215
+ return 'npm';
216
+ }
217
+ }
218
+ exports.HuskyManager = HuskyManager;
219
+ //# sourceMappingURL=husky.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"husky.js","sourceRoot":"","sources":["../../src/git/husky.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Git Integration Module
3
+ *
4
+ * Provides Husky hook setup, gitignore management, and pre-commit integration.
5
+ */
6
+ export { HuskyManager, type HuskyStatus } from './husky';
7
+ export { GitignoreManager, type GitignoreOptions } from './gitignore';
8
+ export { generatePreCommitHook, type PreCommitOptions } from './hooks';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * Git Integration Module
4
+ *
5
+ * Provides Husky hook setup, gitignore management, and pre-commit integration.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generatePreCommitHook = exports.GitignoreManager = exports.HuskyManager = void 0;
9
+ var husky_1 = require("./husky");
10
+ Object.defineProperty(exports, "HuskyManager", { enumerable: true, get: function () { return husky_1.HuskyManager; } });
11
+ var gitignore_1 = require("./gitignore");
12
+ Object.defineProperty(exports, "GitignoreManager", { enumerable: true, get: function () { return gitignore_1.GitignoreManager; } });
13
+ var hooks_1 = require("./hooks");
14
+ Object.defineProperty(exports, "generatePreCommitHook", { enumerable: true, get: function () { return hooks_1.generatePreCommitHook; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,iCAAyD;AAAhD,qGAAA,YAAY,OAAA;AACrB,yCAAsE;AAA7D,6GAAA,gBAAgB,OAAA;AACzB,iCAAuE;AAA9D,8GAAA,qBAAqB,OAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './schemas';
2
+ export * from './config';
3
+ export * from './parser';
4
+ export * from './analysis';
5
+ export * from './compiler';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // ctxinit - Unified context architecture for AI coding assistants
18
+ __exportStar(require("./schemas"), exports);
19
+ __exportStar(require("./config"), exports);
20
+ __exportStar(require("./parser"), exports);
21
+ __exportStar(require("./analysis"), exports);
22
+ __exportStar(require("./compiler"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAkE;AAClE,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,6CAA2B;AAC3B,6CAA2B"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Base LLM Provider
3
+ *
4
+ * Abstract base class for all LLM providers with common functionality.
5
+ */
6
+ import { LLMProvider, LLMProviderType, LLMProviderConfig, LLMProviderCapabilities, LLMRequest, LLMResponse } from './types';
7
+ /**
8
+ * Abstract base provider class
9
+ */
10
+ export declare abstract class BaseLLMProvider implements LLMProvider {
11
+ protected config: LLMProviderConfig;
12
+ constructor(config: LLMProviderConfig);
13
+ /**
14
+ * Log verbose debug information if verbose mode is enabled
15
+ */
16
+ protected log(message: string, data?: unknown): void;
17
+ abstract get type(): LLMProviderType;
18
+ abstract get name(): string;
19
+ abstract get capabilities(): LLMProviderCapabilities;
20
+ abstract isAvailable(): Promise<boolean>;
21
+ abstract complete(request: LLMRequest): Promise<LLMResponse>;
22
+ /**
23
+ * Get effective max tokens from config or default
24
+ */
25
+ protected getMaxTokens(request: LLMRequest): number;
26
+ /**
27
+ * Get effective temperature from config or default
28
+ */
29
+ protected getTemperature(request: LLMRequest): number;
30
+ /**
31
+ * Get timeout in milliseconds
32
+ */
33
+ protected getTimeout(): number;
34
+ /**
35
+ * Build combined prompt from messages
36
+ */
37
+ protected buildPromptFromMessages(request: LLMRequest): string;
38
+ /**
39
+ * Parse JSON from LLM response, handling markdown code blocks
40
+ */
41
+ protected parseJsonResponse<T>(content: string): T;
42
+ }
43
+ //# sourceMappingURL=base-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/llm/base-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,8BAAsB,eAAgB,YAAW,WAAW;IAC1D,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAExB,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAWpD,QAAQ,KAAK,IAAI,IAAI,eAAe,CAAC;IACrC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;IAC5B,QAAQ,KAAK,YAAY,IAAI,uBAAuB,CAAC;IAErD,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAE5D;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAInD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAIrD;;OAEG;IACH,SAAS,CAAC,UAAU,IAAI,MAAM;IAI9B;;OAEG;IACH,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAoB9D;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;CAmBnD"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Base LLM Provider
4
+ *
5
+ * Abstract base class for all LLM providers with common functionality.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BaseLLMProvider = void 0;
9
+ /**
10
+ * Abstract base provider class
11
+ */
12
+ class BaseLLMProvider {
13
+ config;
14
+ constructor(config) {
15
+ this.config = config;
16
+ }
17
+ /**
18
+ * Log verbose debug information if verbose mode is enabled
19
+ */
20
+ log(message, data) {
21
+ if (this.config.verbose) {
22
+ const prefix = `[${this.type}]`;
23
+ if (data !== undefined) {
24
+ console.error(`${prefix} ${message}:`, data);
25
+ }
26
+ else {
27
+ console.error(`${prefix} ${message}`);
28
+ }
29
+ }
30
+ }
31
+ /**
32
+ * Get effective max tokens from config or default
33
+ */
34
+ getMaxTokens(request) {
35
+ return request.maxTokens ?? this.config.maxTokens ?? 4096;
36
+ }
37
+ /**
38
+ * Get effective temperature from config or default
39
+ */
40
+ getTemperature(request) {
41
+ return request.temperature ?? this.config.temperature ?? 0.7;
42
+ }
43
+ /**
44
+ * Get timeout in milliseconds
45
+ */
46
+ getTimeout() {
47
+ return this.config.timeout ?? 120000; // 2 minutes default
48
+ }
49
+ /**
50
+ * Build combined prompt from messages
51
+ */
52
+ buildPromptFromMessages(request) {
53
+ const parts = [];
54
+ if (request.systemPrompt) {
55
+ parts.push(request.systemPrompt);
56
+ }
57
+ for (const msg of request.messages) {
58
+ if (msg.role === 'system') {
59
+ parts.push(msg.content);
60
+ }
61
+ else if (msg.role === 'user') {
62
+ parts.push(`User: ${msg.content}`);
63
+ }
64
+ else if (msg.role === 'assistant') {
65
+ parts.push(`Assistant: ${msg.content}`);
66
+ }
67
+ }
68
+ return parts.join('\n\n');
69
+ }
70
+ /**
71
+ * Parse JSON from LLM response, handling markdown code blocks
72
+ */
73
+ parseJsonResponse(content) {
74
+ // Remove markdown code blocks if present
75
+ let jsonStr = content.trim();
76
+ // Handle ```json ... ``` blocks
77
+ const jsonBlockMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
78
+ if (jsonBlockMatch) {
79
+ jsonStr = jsonBlockMatch[1].trim();
80
+ }
81
+ try {
82
+ return JSON.parse(jsonStr);
83
+ }
84
+ catch (error) {
85
+ throw new Error(`Failed to parse JSON from LLM response: ${error.message}\n` +
86
+ `Response content: ${content.slice(0, 500)}...`);
87
+ }
88
+ }
89
+ }
90
+ exports.BaseLLMProvider = BaseLLMProvider;
91
+ //# sourceMappingURL=base-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/llm/base-provider.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH;;GAEG;AACH,MAAsB,eAAe;IACzB,MAAM,CAAoB;IAEpC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACO,GAAG,CAAC,OAAe,EAAE,IAAc;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;YAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IASD;;OAEG;IACO,YAAY,CAAC,OAAmB;QACxC,OAAO,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5D,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,OAAmB;QAC1C,OAAO,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC;IAC/D,CAAC;IAED;;OAEG;IACO,UAAU;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,oBAAoB;IAC5D,CAAC;IAED;;OAEG;IACO,uBAAuB,CAAC,OAAmB;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACO,iBAAiB,CAAI,OAAe;QAC5C,yCAAyC;QACzC,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE7B,gCAAgC;QAChC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACrE,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,2CAA4C,KAAe,CAAC,OAAO,IAAI;gBACvE,qBAAqB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA9FD,0CA8FC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * LLM Module
3
+ *
4
+ * Unified interface for LLM providers (API and CLI).
5
+ */
6
+ export { LLMProviderType, LLMProviderConfig, LLMMessage, LLMRequest, LLMResponse, LLMProvider, LLMProviderCapabilities, BootstrapLLMOutput, ProviderDetectionResult, } from './types';
7
+ export { BaseLLMProvider } from './base-provider';
8
+ export { ClaudeAPIProvider } from './providers/claude-api';
9
+ export { ClaudeCodeProvider } from './providers/claude-code';
10
+ export { OpenAIAPIProvider } from './providers/openai-api';
11
+ export { GeminiAPIProvider } from './providers/gemini-api';
12
+ export { GeminiCLIProvider } from './providers/gemini-cli';
13
+ export { CursorCLIProvider } from './providers/cursor-cli';
14
+ export { CodexCLIProvider } from './providers/codex-cli';
15
+ export { InteractiveProvider, StdinProvider } from './providers/interactive';
16
+ export { createProvider, detectProviders, autoSelectProvider, listProviderTypes, } from './provider-factory';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7E,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}