openkitt 0.1.2

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 (234) hide show
  1. package/README.md +236 -0
  2. package/dist/ast/engine.d.ts +26 -0
  3. package/dist/ast/engine.js +130 -0
  4. package/dist/ast/engine.js.map +1 -0
  5. package/dist/ast/operations.d.ts +13 -0
  6. package/dist/ast/operations.js +329 -0
  7. package/dist/ast/operations.js.map +1 -0
  8. package/dist/ast/validator.d.ts +19 -0
  9. package/dist/ast/validator.js +281 -0
  10. package/dist/ast/validator.js.map +1 -0
  11. package/dist/audit/logger.d.ts +14 -0
  12. package/dist/audit/logger.js +102 -0
  13. package/dist/audit/logger.js.map +1 -0
  14. package/dist/cli.d.ts +4 -0
  15. package/dist/cli.js +401 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/commands/create-confirm.d.ts +13 -0
  18. package/dist/commands/create-confirm.js +38 -0
  19. package/dist/commands/create-confirm.js.map +1 -0
  20. package/dist/commands/create-infra.d.ts +20 -0
  21. package/dist/commands/create-infra.js +63 -0
  22. package/dist/commands/create-infra.js.map +1 -0
  23. package/dist/commands/create-manifest.d.ts +10 -0
  24. package/dist/commands/create-manifest.js +21 -0
  25. package/dist/commands/create-manifest.js.map +1 -0
  26. package/dist/commands/create-packages.d.ts +17 -0
  27. package/dist/commands/create-packages.js +69 -0
  28. package/dist/commands/create-packages.js.map +1 -0
  29. package/dist/commands/create-pipeline.d.ts +15 -0
  30. package/dist/commands/create-pipeline.js +57 -0
  31. package/dist/commands/create-pipeline.js.map +1 -0
  32. package/dist/commands/create-scaffolding.d.ts +12 -0
  33. package/dist/commands/create-scaffolding.js +137 -0
  34. package/dist/commands/create-scaffolding.js.map +1 -0
  35. package/dist/commands/create-staging.d.ts +13 -0
  36. package/dist/commands/create-staging.js +17 -0
  37. package/dist/commands/create-staging.js.map +1 -0
  38. package/dist/commands/create-transforms.d.ts +10 -0
  39. package/dist/commands/create-transforms.js +33 -0
  40. package/dist/commands/create-transforms.js.map +1 -0
  41. package/dist/commands/create.d.ts +2 -0
  42. package/dist/commands/create.js +155 -0
  43. package/dist/commands/create.js.map +1 -0
  44. package/dist/commands/delete.d.ts +2 -0
  45. package/dist/commands/delete.js +83 -0
  46. package/dist/commands/delete.js.map +1 -0
  47. package/dist/commands/deploy.d.ts +5 -0
  48. package/dist/commands/deploy.js +371 -0
  49. package/dist/commands/deploy.js.map +1 -0
  50. package/dist/commands/domain.d.ts +2 -0
  51. package/dist/commands/domain.js +90 -0
  52. package/dist/commands/domain.js.map +1 -0
  53. package/dist/commands/env.d.ts +2 -0
  54. package/dist/commands/env.js +153 -0
  55. package/dist/commands/env.js.map +1 -0
  56. package/dist/commands/help.d.ts +3 -0
  57. package/dist/commands/help.js +107 -0
  58. package/dist/commands/help.js.map +1 -0
  59. package/dist/commands/init.d.ts +2 -0
  60. package/dist/commands/init.js +217 -0
  61. package/dist/commands/init.js.map +1 -0
  62. package/dist/commands/list.d.ts +2 -0
  63. package/dist/commands/list.js +142 -0
  64. package/dist/commands/list.js.map +1 -0
  65. package/dist/commands/login.d.ts +2 -0
  66. package/dist/commands/login.js +235 -0
  67. package/dist/commands/login.js.map +1 -0
  68. package/dist/commands/logs.d.ts +2 -0
  69. package/dist/commands/logs.js +90 -0
  70. package/dist/commands/logs.js.map +1 -0
  71. package/dist/commands/publish.d.ts +2 -0
  72. package/dist/commands/publish.js +113 -0
  73. package/dist/commands/publish.js.map +1 -0
  74. package/dist/commands/run.d.ts +14 -0
  75. package/dist/commands/run.js +196 -0
  76. package/dist/commands/run.js.map +1 -0
  77. package/dist/commands/settings.d.ts +3 -0
  78. package/dist/commands/settings.js +278 -0
  79. package/dist/commands/settings.js.map +1 -0
  80. package/dist/commands/status.d.ts +2 -0
  81. package/dist/commands/status.js +88 -0
  82. package/dist/commands/status.js.map +1 -0
  83. package/dist/commands/versions.d.ts +2 -0
  84. package/dist/commands/versions.js +242 -0
  85. package/dist/commands/versions.js.map +1 -0
  86. package/dist/credentials/config.d.ts +12 -0
  87. package/dist/credentials/config.js +196 -0
  88. package/dist/credentials/config.js.map +1 -0
  89. package/dist/credentials/encryption.d.ts +9 -0
  90. package/dist/credentials/encryption.js +100 -0
  91. package/dist/credentials/encryption.js.map +1 -0
  92. package/dist/credentials/keychain.d.ts +8 -0
  93. package/dist/credentials/keychain.js +236 -0
  94. package/dist/credentials/keychain.js.map +1 -0
  95. package/dist/credentials/railway.d.ts +9 -0
  96. package/dist/credentials/railway.js +69 -0
  97. package/dist/credentials/railway.js.map +1 -0
  98. package/dist/llm/client.d.ts +59 -0
  99. package/dist/llm/client.js +530 -0
  100. package/dist/llm/client.js.map +1 -0
  101. package/dist/llm/operations.d.ts +39 -0
  102. package/dist/llm/operations.js +131 -0
  103. package/dist/llm/operations.js.map +1 -0
  104. package/dist/llm/rate-limiter.d.ts +20 -0
  105. package/dist/llm/rate-limiter.js +57 -0
  106. package/dist/llm/rate-limiter.js.map +1 -0
  107. package/dist/llm/scaffolding.d.ts +51 -0
  108. package/dist/llm/scaffolding.js +118 -0
  109. package/dist/llm/scaffolding.js.map +1 -0
  110. package/dist/manifest/drift.d.ts +6 -0
  111. package/dist/manifest/drift.js +45 -0
  112. package/dist/manifest/drift.js.map +1 -0
  113. package/dist/manifest/reader.d.ts +12 -0
  114. package/dist/manifest/reader.js +99 -0
  115. package/dist/manifest/reader.js.map +1 -0
  116. package/dist/manifest/types.d.ts +31 -0
  117. package/dist/manifest/types.js +2 -0
  118. package/dist/manifest/types.js.map +1 -0
  119. package/dist/manifest/writer.d.ts +9 -0
  120. package/dist/manifest/writer.js +142 -0
  121. package/dist/manifest/writer.js.map +1 -0
  122. package/dist/mcp/client.d.ts +21 -0
  123. package/dist/mcp/client.js +213 -0
  124. package/dist/mcp/client.js.map +1 -0
  125. package/dist/mcp/lifecycle.d.ts +12 -0
  126. package/dist/mcp/lifecycle.js +149 -0
  127. package/dist/mcp/lifecycle.js.map +1 -0
  128. package/dist/mcp/project-guard.d.ts +14 -0
  129. package/dist/mcp/project-guard.js +27 -0
  130. package/dist/mcp/project-guard.js.map +1 -0
  131. package/dist/prompts/operations.d.ts +1 -0
  132. package/dist/prompts/operations.js +160 -0
  133. package/dist/prompts/operations.js.map +1 -0
  134. package/dist/prompts/scaffolding.d.ts +1 -0
  135. package/dist/prompts/scaffolding.js +331 -0
  136. package/dist/prompts/scaffolding.js.map +1 -0
  137. package/dist/prompts/version.d.ts +2 -0
  138. package/dist/prompts/version.js +3 -0
  139. package/dist/prompts/version.js.map +1 -0
  140. package/dist/sandbox/command-allowlist.d.ts +6 -0
  141. package/dist/sandbox/command-allowlist.js +103 -0
  142. package/dist/sandbox/command-allowlist.js.map +1 -0
  143. package/dist/sandbox/package-allowlist.d.ts +6 -0
  144. package/dist/sandbox/package-allowlist.js +49 -0
  145. package/dist/sandbox/package-allowlist.js.map +1 -0
  146. package/dist/sandbox/scanner.d.ts +25 -0
  147. package/dist/sandbox/scanner.js +196 -0
  148. package/dist/sandbox/scanner.js.map +1 -0
  149. package/dist/sandbox/staging.d.ts +12 -0
  150. package/dist/sandbox/staging.js +107 -0
  151. package/dist/sandbox/staging.js.map +1 -0
  152. package/dist/scaffold/frameworks/express.d.ts +3 -0
  153. package/dist/scaffold/frameworks/express.js +242 -0
  154. package/dist/scaffold/frameworks/express.js.map +1 -0
  155. package/dist/scaffold/frameworks/hono.d.ts +3 -0
  156. package/dist/scaffold/frameworks/hono.js +238 -0
  157. package/dist/scaffold/frameworks/hono.js.map +1 -0
  158. package/dist/scaffold/frameworks/nextjs.d.ts +3 -0
  159. package/dist/scaffold/frameworks/nextjs.js +447 -0
  160. package/dist/scaffold/frameworks/nextjs.js.map +1 -0
  161. package/dist/scaffold/frameworks/tanstack-start.d.ts +3 -0
  162. package/dist/scaffold/frameworks/tanstack-start.js +280 -0
  163. package/dist/scaffold/frameworks/tanstack-start.js.map +1 -0
  164. package/dist/scaffold/index.d.ts +4 -0
  165. package/dist/scaffold/index.js +138 -0
  166. package/dist/scaffold/index.js.map +1 -0
  167. package/dist/scaffold/integrations/backend.d.ts +3 -0
  168. package/dist/scaffold/integrations/backend.js +403 -0
  169. package/dist/scaffold/integrations/backend.js.map +1 -0
  170. package/dist/scaffold/integrations/posthog.d.ts +2 -0
  171. package/dist/scaffold/integrations/posthog.js +21 -0
  172. package/dist/scaffold/integrations/posthog.js.map +1 -0
  173. package/dist/scaffold/integrations/sentry.d.ts +2 -0
  174. package/dist/scaffold/integrations/sentry.js +16 -0
  175. package/dist/scaffold/integrations/sentry.js.map +1 -0
  176. package/dist/scaffold/integrations/storybook.d.ts +2 -0
  177. package/dist/scaffold/integrations/storybook.js +79 -0
  178. package/dist/scaffold/integrations/storybook.js.map +1 -0
  179. package/dist/scaffold/integrations/vitest.d.ts +2 -0
  180. package/dist/scaffold/integrations/vitest.js +37 -0
  181. package/dist/scaffold/integrations/vitest.js.map +1 -0
  182. package/dist/scaffold/package-builder.d.ts +3 -0
  183. package/dist/scaffold/package-builder.js +136 -0
  184. package/dist/scaffold/package-builder.js.map +1 -0
  185. package/dist/scaffold/packages.d.ts +4 -0
  186. package/dist/scaffold/packages.js +144 -0
  187. package/dist/scaffold/packages.js.map +1 -0
  188. package/dist/scaffold/types.d.ts +20 -0
  189. package/dist/scaffold/types.js +2 -0
  190. package/dist/scaffold/types.js.map +1 -0
  191. package/dist/types.d.ts +11 -0
  192. package/dist/types.js +2 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/auth-guard.d.ts +5 -0
  195. package/dist/utils/auth-guard.js +52 -0
  196. package/dist/utils/auth-guard.js.map +1 -0
  197. package/dist/utils/cleanup.d.ts +2 -0
  198. package/dist/utils/cleanup.js +37 -0
  199. package/dist/utils/cleanup.js.map +1 -0
  200. package/dist/utils/constraints.d.ts +11 -0
  201. package/dist/utils/constraints.js +162 -0
  202. package/dist/utils/constraints.js.map +1 -0
  203. package/dist/utils/display.d.ts +32 -0
  204. package/dist/utils/display.js +103 -0
  205. package/dist/utils/display.js.map +1 -0
  206. package/dist/utils/global-config.d.ts +8 -0
  207. package/dist/utils/global-config.js +39 -0
  208. package/dist/utils/global-config.js.map +1 -0
  209. package/dist/utils/pm.d.ts +4 -0
  210. package/dist/utils/pm.js +40 -0
  211. package/dist/utils/pm.js.map +1 -0
  212. package/dist/utils/prerequisites.d.ts +9 -0
  213. package/dist/utils/prerequisites.js +96 -0
  214. package/dist/utils/prerequisites.js.map +1 -0
  215. package/dist/utils/prompts.d.ts +25 -0
  216. package/dist/utils/prompts.js +148 -0
  217. package/dist/utils/prompts.js.map +1 -0
  218. package/dist/utils/validation.d.ts +9 -0
  219. package/dist/utils/validation.js +38 -0
  220. package/dist/utils/validation.js.map +1 -0
  221. package/dist/versions/compat.d.ts +13 -0
  222. package/dist/versions/compat.js +127 -0
  223. package/dist/versions/compat.js.map +1 -0
  224. package/dist/versions/integrity.d.ts +9 -0
  225. package/dist/versions/integrity.js +60 -0
  226. package/dist/versions/integrity.js.map +1 -0
  227. package/dist/versions/parser.d.ts +13 -0
  228. package/dist/versions/parser.js +106 -0
  229. package/dist/versions/parser.js.map +1 -0
  230. package/dist/versions/registry.d.ts +30 -0
  231. package/dist/versions/registry.js +165 -0
  232. package/dist/versions/registry.js.map +1 -0
  233. package/package.json +58 -0
  234. package/scripts/publish.sh +254 -0
@@ -0,0 +1,127 @@
1
+ import { satisfies, validRange, coerce } from 'semver';
2
+ import { INTEGRATION_NPM_MAP } from './registry.js';
3
+ // vitest↔vite coupling lives in `dependencies`, not `peerDependencies` —
4
+ // npm enforces this via the bundled dep, not peer resolution, so we check it manually.
5
+ const DEPENDENCY_COUPLING = [
6
+ { pkg: 'vitest', pkgRange: '>=2.0.0 <3.0.0', dep: 'vite', depRange: '^5.0.0' },
7
+ { pkg: 'vitest', pkgRange: '>=3.0.0 <4.0.0', dep: 'vite', depRange: '^5.0.0 || ^6.0.0' },
8
+ { pkg: 'vitest', pkgRange: '>=4.0.0', dep: 'vite', depRange: '^6.0.0 || ^7.0.0' },
9
+ ];
10
+ // Primary versions are keyed by display name (e.g. "Sentry JS"), secondary by npm name.
11
+ // These maps bridge between the two naming schemes.
12
+ const PEER_CHECK_PACKAGES = {
13
+ 'Sentry JS': '@sentry/react',
14
+ 'Next.js': 'next',
15
+ 'TanStack Start': '@tanstack/react-start',
16
+ 'Vitest': 'vitest',
17
+ };
18
+ const PEER_TO_DISPLAY_NAME = {
19
+ 'react': 'React',
20
+ 'react-dom': 'React',
21
+ 'vite': 'Vite',
22
+ 'next': 'Next.js',
23
+ };
24
+ async function fetchManifest(pkg, version) {
25
+ try {
26
+ const res = await fetch(`https://registry.npmjs.org/${pkg}/${version}`, {
27
+ signal: AbortSignal.timeout(5000),
28
+ });
29
+ if (!res.ok)
30
+ return null;
31
+ return (await res.json());
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ function resolveInstalledVersion(peer, versions) {
38
+ if (versions[peer] !== null && versions[peer] !== undefined) {
39
+ return versions[peer];
40
+ }
41
+ const displayName = PEER_TO_DISPLAY_NAME[peer];
42
+ if (displayName && versions[displayName] !== undefined) {
43
+ return versions[displayName];
44
+ }
45
+ return null;
46
+ }
47
+ function checkRange(installed, range) {
48
+ if (!validRange(range))
49
+ return null;
50
+ const coerced = coerce(installed)?.version ?? installed;
51
+ return satisfies(coerced, range, { includePrerelease: false });
52
+ }
53
+ export async function checkCompatibility(displayVersions, resolvedIntegrations, framework) {
54
+ const errors = [];
55
+ const warnings = [];
56
+ const allVersions = { ...displayVersions };
57
+ const toCheck = [];
58
+ for (const [displayName, npmName] of Object.entries(PEER_CHECK_PACKAGES)) {
59
+ const isFramework = (displayName === 'TanStack Start' && framework === 'tanstack-start') ||
60
+ (displayName === 'Next.js' && framework === 'nextjs');
61
+ const isIntegration = resolvedIntegrations.some((i) => INTEGRATION_NPM_MAP[displayName] === npmName || i === npmName);
62
+ const isPinned = displayVersions[displayName] !== undefined;
63
+ if ((isFramework || isIntegration) && isPinned) {
64
+ toCheck.push({ displayName, npmName });
65
+ }
66
+ }
67
+ const manifests = await Promise.all(toCheck.map(async ({ displayName, npmName }) => {
68
+ const version = displayVersions[displayName];
69
+ const manifest = await fetchManifest(npmName, version);
70
+ return { npmName, version, manifest };
71
+ }));
72
+ for (const { npmName, version, manifest } of manifests) {
73
+ if (!manifest?.peerDependencies)
74
+ continue;
75
+ const meta = manifest.peerDependenciesMeta ?? {};
76
+ for (const [peer, range] of Object.entries(manifest.peerDependencies)) {
77
+ const optional = meta[peer]?.optional ?? false;
78
+ const installed = resolveInstalledVersion(peer, allVersions);
79
+ if (installed === null)
80
+ continue;
81
+ const satisfied = checkRange(installed, range);
82
+ if (satisfied === true || satisfied === null)
83
+ continue;
84
+ const issue = {
85
+ package: `${npmName}@${version}`,
86
+ version,
87
+ peer,
88
+ required: range,
89
+ installed,
90
+ optional,
91
+ };
92
+ if (optional) {
93
+ warnings.push(issue);
94
+ }
95
+ else {
96
+ errors.push(issue);
97
+ }
98
+ }
99
+ }
100
+ for (const coupling of DEPENDENCY_COUPLING) {
101
+ const pkgDisplayEntry = Object.entries(INTEGRATION_NPM_MAP).find(([, npm]) => npm === coupling.pkg);
102
+ if (!pkgDisplayEntry)
103
+ continue;
104
+ const pkgVersion = displayVersions[pkgDisplayEntry[0]];
105
+ if (!pkgVersion)
106
+ continue;
107
+ const pkgCoerced = coerce(pkgVersion)?.version ?? pkgVersion;
108
+ if (!validRange(coupling.pkgRange) || !satisfies(pkgCoerced, coupling.pkgRange))
109
+ continue;
110
+ const depInstalled = resolveInstalledVersion(coupling.dep, allVersions);
111
+ if (!depInstalled)
112
+ continue;
113
+ const satisfied = checkRange(depInstalled, coupling.depRange);
114
+ if (satisfied === true || satisfied === null)
115
+ continue;
116
+ errors.push({
117
+ package: `${coupling.pkg}@${pkgVersion}`,
118
+ version: pkgVersion,
119
+ peer: coupling.dep,
120
+ required: coupling.depRange,
121
+ installed: depInstalled,
122
+ optional: false,
123
+ });
124
+ }
125
+ return { errors, warnings };
126
+ }
127
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.js","sourceRoot":"","sources":["../../src/versions/compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { VersionEntry } from './parser.js';
2
+ export declare function generateVersionsHash(entries: VersionEntry[]): string;
3
+ export declare function writeVersionsLock(workspaceDir: string, hash: string): void;
4
+ export declare function readVersionsLock(workspaceDir: string): string | null;
5
+ export declare function validateVersionsIntegrity(workspaceDir: string, entries: VersionEntry[]): {
6
+ valid: boolean;
7
+ currentHash: string;
8
+ storedHash: string | null;
9
+ };
@@ -0,0 +1,60 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { chmodSync, existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ import { platform } from 'node:os';
4
+ import { join } from 'node:path';
5
+ const FILE_MODE = 0o600;
6
+ function isWindows() {
7
+ return platform() === 'win32';
8
+ }
9
+ function normalizeEntries(entries) {
10
+ const lines = [...entries]
11
+ .sort((a, b) => a.integration.localeCompare(b.integration))
12
+ .map((entry) => `${entry.integration}=${entry.version}`);
13
+ if (lines.length === 0) {
14
+ return '';
15
+ }
16
+ return `${lines.join('\n')}\n`;
17
+ }
18
+ export function generateVersionsHash(entries) {
19
+ const normalized = normalizeEntries(entries);
20
+ return createHash('sha256').update(normalized, 'utf-8').digest('hex');
21
+ }
22
+ export function writeVersionsLock(workspaceDir, hash) {
23
+ const lockPath = join(workspaceDir, 'versions.lock');
24
+ const tempPath = join(workspaceDir, `versions.lock.tmp-${process.pid}-${Date.now()}`);
25
+ const payload = `${hash.trim()}\n`;
26
+ try {
27
+ writeFileSync(tempPath, payload, { encoding: 'utf-8', mode: FILE_MODE });
28
+ if (!isWindows()) {
29
+ chmodSync(tempPath, FILE_MODE);
30
+ }
31
+ renameSync(tempPath, lockPath);
32
+ if (!isWindows()) {
33
+ chmodSync(lockPath, FILE_MODE);
34
+ }
35
+ }
36
+ catch (error) {
37
+ if (existsSync(tempPath)) {
38
+ unlinkSync(tempPath);
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+ export function readVersionsLock(workspaceDir) {
44
+ const lockPath = join(workspaceDir, 'versions.lock');
45
+ if (!existsSync(lockPath)) {
46
+ return null;
47
+ }
48
+ const value = readFileSync(lockPath, 'utf-8').trim();
49
+ return value.length > 0 ? value : null;
50
+ }
51
+ export function validateVersionsIntegrity(workspaceDir, entries) {
52
+ const currentHash = generateVersionsHash(entries);
53
+ const storedHash = readVersionsLock(workspaceDir);
54
+ return {
55
+ valid: storedHash !== null && storedHash === currentHash,
56
+ currentHash,
57
+ storedHash,
58
+ };
59
+ }
60
+ //# sourceMappingURL=integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity.js","sourceRoot":"","sources":["../../src/versions/integrity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface VersionEntry {
2
+ integration: string;
3
+ version: string;
4
+ }
5
+ export interface ParseResult {
6
+ entries: VersionEntry[];
7
+ errors: string[];
8
+ }
9
+ export declare const INTEGRATION_ALLOWLIST: readonly ["TailwindCSS", "shadcn/ui", "Drizzle ORM", "Prisma", "Better Auth", "Stripe SDK", "Polar SDK", "Resend SDK", "TanStack Start", "Next.js", "Express.js", "Hono", "Vitest", "Playwright", "Storybook", "PostHog JS", "Sentry JS", "BullMQ", "Trigger.dev SDK", "Railway CLI"];
10
+ export declare function isValidSemver(version: string): boolean;
11
+ export declare function parseVersionsTable(content: string): ParseResult;
12
+ export declare function generateVersionsMarkdown(entries: VersionEntry[]): string;
13
+ export declare function getDefaultVersions(): VersionEntry[];
@@ -0,0 +1,106 @@
1
+ export const INTEGRATION_ALLOWLIST = [
2
+ 'TailwindCSS',
3
+ 'shadcn/ui',
4
+ 'Drizzle ORM',
5
+ 'Prisma',
6
+ 'Better Auth',
7
+ 'Stripe SDK',
8
+ 'Polar SDK',
9
+ 'Resend SDK',
10
+ 'TanStack Start',
11
+ 'Next.js',
12
+ 'Express.js',
13
+ 'Hono',
14
+ 'Vitest',
15
+ 'Playwright',
16
+ 'Storybook',
17
+ 'PostHog JS',
18
+ 'Sentry JS',
19
+ 'BullMQ',
20
+ 'Trigger.dev SDK',
21
+ 'Railway CLI',
22
+ ];
23
+ const SEMVER_REGEX = /^\d+\.\d+\.\d+$/;
24
+ const TABLE_ROW_REGEX = /^\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|$/;
25
+ const ALLOWLIST_SET = new Set(INTEGRATION_ALLOWLIST);
26
+ function isSeparatorCell(value) {
27
+ return /^:?-{3,}:?$/.test(value.trim());
28
+ }
29
+ function isHeaderRow(integration, version) {
30
+ return integration.toLowerCase() === 'integration' && version.toLowerCase() === 'version';
31
+ }
32
+ function isSeparatorRow(integration, version) {
33
+ return isSeparatorCell(integration) && isSeparatorCell(version);
34
+ }
35
+ export function isValidSemver(version) {
36
+ return SEMVER_REGEX.test(version);
37
+ }
38
+ export function parseVersionsTable(content) {
39
+ const entries = [];
40
+ const errors = [];
41
+ const lines = content.split(/\r?\n/);
42
+ for (const line of lines) {
43
+ const match = TABLE_ROW_REGEX.exec(line);
44
+ if (!match) {
45
+ continue;
46
+ }
47
+ const integration = match[1].trim();
48
+ const version = match[2].trim();
49
+ if (isHeaderRow(integration, version) || isSeparatorRow(integration, version)) {
50
+ continue;
51
+ }
52
+ let isValid = true;
53
+ if (!ALLOWLIST_SET.has(integration)) {
54
+ errors.push(`Unknown integration: ${integration}`);
55
+ isValid = false;
56
+ }
57
+ if (!isValidSemver(version)) {
58
+ errors.push(`Invalid semver for ${integration}: ${version}`);
59
+ isValid = false;
60
+ }
61
+ if (isValid) {
62
+ entries.push({ integration, version });
63
+ }
64
+ }
65
+ return { entries, errors };
66
+ }
67
+ export function generateVersionsMarkdown(entries) {
68
+ const integrationHeader = 'Integration';
69
+ const versionHeader = 'Version';
70
+ const integrationWidth = Math.max(integrationHeader.length, ...entries.map((entry) => entry.integration.length));
71
+ const versionWidth = Math.max(versionHeader.length, ...entries.map((entry) => entry.version.length));
72
+ const toRow = (integration, version) => `| ${integration.padEnd(integrationWidth)} | ${version.padEnd(versionWidth)} |`;
73
+ const lines = [
74
+ '# KITT — Pinned Versions',
75
+ '',
76
+ toRow(integrationHeader, versionHeader),
77
+ `| ${'-'.repeat(integrationWidth)} | ${'-'.repeat(versionWidth)} |`,
78
+ ...entries.map((entry) => toRow(entry.integration, entry.version)),
79
+ ];
80
+ return `${lines.join('\n')}\n`;
81
+ }
82
+ export function getDefaultVersions() {
83
+ return [
84
+ { integration: 'TailwindCSS', version: '4.1.0' },
85
+ { integration: 'shadcn/ui', version: '3.8.5' },
86
+ { integration: 'Drizzle ORM', version: '0.38.0' },
87
+ { integration: 'Prisma', version: '6.5.0' },
88
+ { integration: 'Better Auth', version: '1.2.0' },
89
+ { integration: 'Stripe SDK', version: '17.0.0' },
90
+ { integration: 'Polar SDK', version: '0.15.0' },
91
+ { integration: 'Resend SDK', version: '4.2.0' },
92
+ { integration: 'TanStack Start', version: '1.162.4' },
93
+ { integration: 'Next.js', version: '15.2.0' },
94
+ { integration: 'Express.js', version: '5.0.0' },
95
+ { integration: 'Hono', version: '4.7.0' },
96
+ { integration: 'Vitest', version: '3.1.0' },
97
+ { integration: 'Playwright', version: '1.50.0' },
98
+ { integration: 'Storybook', version: '8.6.0' },
99
+ { integration: 'PostHog JS', version: '1.200.0' },
100
+ { integration: 'Sentry JS', version: '9.5.0' },
101
+ { integration: 'BullMQ', version: '5.34.0' },
102
+ { integration: 'Trigger.dev SDK', version: '3.3.0' },
103
+ { integration: 'Railway CLI', version: '3.20.0' },
104
+ ];
105
+ }
106
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/versions/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { VersionEntry } from './parser.js';
2
+ export declare const INTEGRATION_NPM_MAP: Record<string, string>;
3
+ /**
4
+ * Secondary packages: implementation-level deps that aren't user-visible integrations.
5
+ * These have independent version tracks (e.g. @sentry/vite-plugin is 5.x while @sentry/node is 9.x).
6
+ * Always fetched live from npm at /create time — never pinned in versions.md.
7
+ */
8
+ export declare const SECONDARY_PACKAGE_LIST: readonly string[];
9
+ /**
10
+ * Fetches latest versions for all secondary packages in parallel.
11
+ * Returns a Record mapping npm package name → version string.
12
+ * Packages that fail to resolve are omitted (LLM falls back to hardcoded hints in the prompt).
13
+ */
14
+ export declare function fetchSecondaryVersions(): Promise<Record<string, string>>;
15
+ export interface RegistryCheckResult {
16
+ integration: string;
17
+ currentVersion: string;
18
+ latestVersion: string;
19
+ updateAvailable: boolean;
20
+ }
21
+ export declare function fetchLatestVersion(npmPackage: string): Promise<string | null>;
22
+ export declare function fetchLatestVersions(npmPackages: string[]): Promise<Record<string, string>>;
23
+ export declare function checkRegistryVersions(entries: VersionEntry[]): Promise<RegistryCheckResult[]>;
24
+ export interface VersionExistenceResult {
25
+ integration: string;
26
+ npmPackage: string;
27
+ version: string;
28
+ exists: boolean;
29
+ }
30
+ export declare function verifyVersionsExist(versions: Record<string, string>, integrations: string[]): Promise<VersionExistenceResult[]>;
@@ -0,0 +1,165 @@
1
+ const REQUEST_TIMEOUT_MS = 5_000;
2
+ export const INTEGRATION_NPM_MAP = {
3
+ TailwindCSS: 'tailwindcss',
4
+ 'shadcn/ui': 'shadcn',
5
+ 'Drizzle ORM': 'drizzle-orm',
6
+ Prisma: 'prisma',
7
+ 'Better Auth': 'better-auth',
8
+ 'Stripe SDK': 'stripe',
9
+ 'Polar SDK': '@polar-sh/sdk',
10
+ 'Resend SDK': 'resend',
11
+ 'TanStack Start': '@tanstack/react-start',
12
+ 'Next.js': 'next',
13
+ 'Express.js': 'express',
14
+ Hono: 'hono',
15
+ Vitest: 'vitest',
16
+ Playwright: '@playwright/test',
17
+ Storybook: 'storybook',
18
+ 'PostHog JS': 'posthog-js',
19
+ 'Sentry JS': '@sentry/node',
20
+ BullMQ: 'bullmq',
21
+ 'Trigger.dev SDK': '@trigger.dev/sdk',
22
+ 'Railway CLI': '@railway/cli',
23
+ };
24
+ /**
25
+ * Secondary packages: implementation-level deps that aren't user-visible integrations.
26
+ * These have independent version tracks (e.g. @sentry/vite-plugin is 5.x while @sentry/node is 9.x).
27
+ * Always fetched live from npm at /create time — never pinned in versions.md.
28
+ */
29
+ export const SECONDARY_PACKAGE_LIST = [
30
+ '@sentry/vite-plugin',
31
+ '@sentry/react',
32
+ '@sentry/nextjs',
33
+ 'vite-tsconfig-paths',
34
+ '@vitejs/plugin-react',
35
+ '@tailwindcss/vite',
36
+ '@tailwindcss/postcss',
37
+ '@tanstack/router-plugin',
38
+ '@tanstack/react-router',
39
+ '@tanstack/react-query',
40
+ '@types/react',
41
+ '@types/react-dom',
42
+ 'react',
43
+ 'react-dom',
44
+ 'typescript',
45
+ 'vite',
46
+ 'vitest',
47
+ '@testing-library/react',
48
+ '@testing-library/jest-dom',
49
+ ];
50
+ /**
51
+ * Fetches latest versions for all secondary packages in parallel.
52
+ * Returns a Record mapping npm package name → version string.
53
+ * Packages that fail to resolve are omitted (LLM falls back to hardcoded hints in the prompt).
54
+ */
55
+ export async function fetchSecondaryVersions() {
56
+ const settled = await Promise.allSettled(SECONDARY_PACKAGE_LIST.map(async (pkg) => ({
57
+ pkg,
58
+ version: await fetchLatestVersion(pkg),
59
+ })));
60
+ const result = {};
61
+ for (const r of settled) {
62
+ if (r.status === 'fulfilled' && r.value.version !== null) {
63
+ result[r.value.pkg] = r.value.version;
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ function readVersion(payload) {
69
+ if (typeof payload !== 'object' || payload === null) {
70
+ return null;
71
+ }
72
+ const value = payload.version;
73
+ return typeof value === 'string' ? value : null;
74
+ }
75
+ export async function fetchLatestVersion(npmPackage) {
76
+ const controller = new AbortController();
77
+ const timeoutId = setTimeout(() => {
78
+ controller.abort();
79
+ }, REQUEST_TIMEOUT_MS);
80
+ try {
81
+ const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(npmPackage)}/latest`, {
82
+ signal: controller.signal,
83
+ });
84
+ if (!response.ok) {
85
+ return null;
86
+ }
87
+ const payload = await response.json();
88
+ return readVersion(payload);
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ finally {
94
+ clearTimeout(timeoutId);
95
+ }
96
+ }
97
+ export async function fetchLatestVersions(npmPackages) {
98
+ const settled = await Promise.allSettled(npmPackages.map(async (pkg) => ({ pkg, version: await fetchLatestVersion(pkg) })));
99
+ const result = {};
100
+ for (const r of settled) {
101
+ if (r.status === 'fulfilled' && r.value.version !== null) {
102
+ result[r.value.pkg] = r.value.version;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ export async function checkRegistryVersions(entries) {
108
+ const tasks = entries.flatMap((entry) => {
109
+ const npmPackage = INTEGRATION_NPM_MAP[entry.integration];
110
+ return npmPackage ? [{ entry, npmPackage }] : [];
111
+ });
112
+ const settledResults = await Promise.allSettled(tasks.map(async ({ entry, npmPackage }) => {
113
+ const latestVersion = await fetchLatestVersion(npmPackage);
114
+ if (latestVersion === null) {
115
+ return null;
116
+ }
117
+ return {
118
+ integration: entry.integration,
119
+ currentVersion: entry.version,
120
+ latestVersion,
121
+ updateAvailable: latestVersion !== entry.version,
122
+ };
123
+ }));
124
+ const results = [];
125
+ for (const settled of settledResults) {
126
+ if (settled.status === 'fulfilled' && settled.value !== null) {
127
+ results.push(settled.value);
128
+ }
129
+ }
130
+ return results;
131
+ }
132
+ async function versionExistsOnNpm(npmPackage, version) {
133
+ const controller = new AbortController();
134
+ const timeoutId = setTimeout(() => { controller.abort(); }, REQUEST_TIMEOUT_MS);
135
+ try {
136
+ const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(npmPackage)}/${encodeURIComponent(version)}`, { method: 'HEAD', signal: controller.signal });
137
+ return response.ok;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ finally {
143
+ clearTimeout(timeoutId);
144
+ }
145
+ }
146
+ export async function verifyVersionsExist(versions, integrations) {
147
+ const tasks = integrations.flatMap((integration) => {
148
+ const version = versions[integration];
149
+ const npmPackage = INTEGRATION_NPM_MAP[integration];
150
+ if (!version || !npmPackage) {
151
+ return [];
152
+ }
153
+ return [{ integration, npmPackage, version }];
154
+ });
155
+ const settled = await Promise.allSettled(tasks.map(async ({ integration, npmPackage, version }) => ({
156
+ integration,
157
+ npmPackage,
158
+ version,
159
+ exists: await versionExistsOnNpm(npmPackage, version),
160
+ })));
161
+ return settled
162
+ .filter((r) => r.status === 'fulfilled')
163
+ .map((r) => r.value);
164
+ }
165
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/versions/registry.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "openkitt",
3
+ "version": "0.1.2",
4
+ "description": "AI-powered monorepo scaffolding CLI",
5
+ "keywords": [
6
+ "cli",
7
+ "scaffolding",
8
+ "monorepo",
9
+ "ai",
10
+ "railway",
11
+ "nextjs",
12
+ "tanstack",
13
+ "hono",
14
+ "express"
15
+ ],
16
+ "homepage": "https://github.com/openkitt/kitt-cli",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/openkitt/kitt-cli.git"
20
+ },
21
+ "license": "MIT",
22
+ "author": "KITT Contributors",
23
+ "type": "module",
24
+ "bin": {
25
+ "kitt": "./dist/cli.js",
26
+ "openkitt": "./dist/cli.js"
27
+ },
28
+ "files": [
29
+ "dist/",
30
+ "templates/",
31
+ "scripts/"
32
+ ],
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "dev": "tsc --watch",
36
+ "test": "vitest run",
37
+ "test:watch": "vitest",
38
+ "prepublishOnly": "npm run build"
39
+ },
40
+ "engines": {
41
+ "node": ">=20.0.0"
42
+ },
43
+ "dependencies": {
44
+ "@anthropic-ai/sdk": "^0.66.0",
45
+ "@clack/prompts": "^0.11.0",
46
+ "@google/generative-ai": "^0.24.1",
47
+ "@railway/mcp-server": "^0.1.8",
48
+ "commander": "^14.0.1",
49
+ "openai": "^6.6.0",
50
+ "picocolors": "^1.1.1",
51
+ "ts-morph": "^27.0.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^24.3.0",
55
+ "typescript": "^5.9.2",
56
+ "vitest": "^3.2.4"
57
+ }
58
+ }