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,278 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ import { homedir, platform } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { confirm, isCancel } from '@clack/prompts';
6
+ import { createAuditLogger } from '../audit/logger.js';
7
+ import { findWorkspaceRoot, isKittWorkspace, readManifest } from '../manifest/reader.js';
8
+ import { writeManifest } from '../manifest/writer.js';
9
+ import { error, success, warn } from '../utils/display.js';
10
+ import { DEFAULT_PM, getLockfile } from '../utils/pm.js';
11
+ const SUPPORTED_PACKAGE_MANAGERS = ['bun', 'npm', 'pnpm', 'yarn'];
12
+ const CONFIG_DIR = join(homedir(), '.kitt');
13
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
14
+ const DIR_MODE = 0o700;
15
+ const FILE_MODE = 0o600;
16
+ const PM_ARTIFACTS = {
17
+ bun: ['bunfig.toml', 'bun.lockb'],
18
+ npm: ['package-lock.json'],
19
+ pnpm: ['pnpm-workspace.yaml', 'pnpm-lock.yaml'],
20
+ yarn: ['yarn.lock', '.yarnrc.yml'],
21
+ };
22
+ function isWindows() {
23
+ return platform() === 'win32';
24
+ }
25
+ function ensureConfigDir() {
26
+ if (!existsSync(CONFIG_DIR)) {
27
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: DIR_MODE });
28
+ }
29
+ if (!isWindows()) {
30
+ chmodSync(CONFIG_DIR, DIR_MODE);
31
+ }
32
+ }
33
+ function isPackageManager(value) {
34
+ return value === 'bun' || value === 'npm' || value === 'pnpm' || value === 'yarn';
35
+ }
36
+ function readGlobalConfig() {
37
+ ensureConfigDir();
38
+ if (!existsSync(CONFIG_FILE)) {
39
+ return {};
40
+ }
41
+ const raw = readFileSync(CONFIG_FILE, 'utf-8').trim();
42
+ if (raw.length === 0) {
43
+ return {};
44
+ }
45
+ try {
46
+ const parsed = JSON.parse(raw);
47
+ if (!parsed || typeof parsed !== 'object') {
48
+ return {};
49
+ }
50
+ return parsed;
51
+ }
52
+ catch {
53
+ return {};
54
+ }
55
+ }
56
+ function writeGlobalConfig(config) {
57
+ ensureConfigDir();
58
+ const tempFile = `${CONFIG_FILE}.tmp-${process.pid}-${Date.now()}`;
59
+ const payload = `${JSON.stringify(config, null, 2)}\n`;
60
+ try {
61
+ writeFileSync(tempFile, payload, { encoding: 'utf-8', mode: FILE_MODE });
62
+ if (!isWindows()) {
63
+ chmodSync(tempFile, FILE_MODE);
64
+ }
65
+ renameSync(tempFile, CONFIG_FILE);
66
+ if (!isWindows()) {
67
+ chmodSync(CONFIG_FILE, FILE_MODE);
68
+ }
69
+ }
70
+ catch (writeError) {
71
+ if (existsSync(tempFile)) {
72
+ unlinkSync(tempFile);
73
+ }
74
+ throw writeError;
75
+ }
76
+ }
77
+ function readDefaultPackageManager() {
78
+ const config = readGlobalConfig();
79
+ const packageManager = config.settings?.packageManager;
80
+ return isPackageManager(packageManager) ? packageManager : DEFAULT_PM;
81
+ }
82
+ function writeDefaultPackageManager(packageManager) {
83
+ const config = readGlobalConfig();
84
+ writeGlobalConfig({
85
+ ...config,
86
+ settings: {
87
+ ...(config.settings ?? {}),
88
+ packageManager,
89
+ },
90
+ });
91
+ }
92
+ export function readAutoOpenBrowser() {
93
+ const config = readGlobalConfig();
94
+ const val = config.settings?.autoOpenBrowser;
95
+ return typeof val === 'boolean' ? val : true;
96
+ }
97
+ function writeAutoOpenBrowser(value) {
98
+ const config = readGlobalConfig();
99
+ writeGlobalConfig({
100
+ ...config,
101
+ settings: {
102
+ ...(config.settings ?? {}),
103
+ autoOpenBrowser: value,
104
+ },
105
+ });
106
+ }
107
+ function removePackageManagerArtifacts(workspaceDir, packageManager) {
108
+ const lockfile = getLockfile(packageManager);
109
+ const artifacts = PM_ARTIFACTS[packageManager].includes(lockfile)
110
+ ? PM_ARTIFACTS[packageManager]
111
+ : [...PM_ARTIFACTS[packageManager], lockfile];
112
+ for (const artifact of artifacts) {
113
+ rmSync(join(workspaceDir, artifact), { force: true });
114
+ }
115
+ }
116
+ function ensureWorkspaceFieldInRootPackageJson(workspaceDir) {
117
+ const packageJsonPath = join(workspaceDir, 'package.json');
118
+ const raw = readFileSync(packageJsonPath, 'utf-8');
119
+ const parsed = JSON.parse(raw);
120
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
121
+ throw new Error('Root package.json must contain a JSON object.');
122
+ }
123
+ const packageJson = parsed;
124
+ const workspaces = packageJson.workspaces;
125
+ const expected = ['apps/*', 'packages/*'];
126
+ if (Array.isArray(workspaces) && workspaces.length > 0) {
127
+ return;
128
+ }
129
+ packageJson.workspaces = expected;
130
+ writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`, 'utf-8');
131
+ }
132
+ function writePackageManagerFiles(workspaceDir, packageManager) {
133
+ if (packageManager === 'bun') {
134
+ writeFileSync(join(workspaceDir, 'bunfig.toml'), '[install]\n', 'utf-8');
135
+ return;
136
+ }
137
+ if (packageManager === 'pnpm') {
138
+ writeFileSync(join(workspaceDir, 'pnpm-workspace.yaml'), 'packages:\n - "apps/*"\n - "packages/*"\n', 'utf-8');
139
+ return;
140
+ }
141
+ if (packageManager === 'npm' || packageManager === 'yarn') {
142
+ ensureWorkspaceFieldInRootPackageJson(workspaceDir);
143
+ }
144
+ }
145
+ function getInstallCommand(packageManager) {
146
+ if (packageManager === 'bun') {
147
+ return 'bun install';
148
+ }
149
+ if (packageManager === 'npm') {
150
+ return 'npm install';
151
+ }
152
+ if (packageManager === 'pnpm') {
153
+ return 'pnpm install';
154
+ }
155
+ return 'yarn install';
156
+ }
157
+ function printUsage() {
158
+ warn('Usage: /settings OR /settings set <key> <value>');
159
+ warn('Keys: packageManager <bun|npm|pnpm|yarn> | autoOpenBrowser <true|false>');
160
+ }
161
+ function printSettings(packageManager, autoOpenBrowser) {
162
+ console.log(`packageManager = ${packageManager}`);
163
+ console.log(`autoOpenBrowser = ${String(autoOpenBrowser)}`);
164
+ }
165
+ async function maybeConfirmMigration(context, fromPm, toPm) {
166
+ if (context.yes) {
167
+ return true;
168
+ }
169
+ const oldArtifacts = PM_ARTIFACTS[fromPm].join(' and ');
170
+ const addConfig = toPm === 'pnpm'
171
+ ? 'Generate pnpm-workspace.yaml'
172
+ : toPm === 'bun'
173
+ ? 'Generate bunfig.toml'
174
+ : 'Ensure root package.json has workspaces';
175
+ const shouldProceed = await confirm({
176
+ message: `⚠ Changing workspace package manager from ${fromPm} → ${toPm}.\n` +
177
+ ' This will:\n' +
178
+ ` - Remove ${oldArtifacts}\n` +
179
+ ` - ${addConfig}\n` +
180
+ ` - Run ${getInstallCommand(toPm)} to generate ${getLockfile(toPm)}\n` +
181
+ ' Proceed?',
182
+ initialValue: false,
183
+ });
184
+ if (isCancel(shouldProceed)) {
185
+ warn('Cancelled.');
186
+ return false;
187
+ }
188
+ if (!shouldProceed) {
189
+ warn('Cancelled.');
190
+ return false;
191
+ }
192
+ return true;
193
+ }
194
+ function migrateWorkspacePackageManager(workspaceDir, fromPm, toPm) {
195
+ removePackageManagerArtifacts(workspaceDir, fromPm);
196
+ writePackageManagerFiles(workspaceDir, toPm);
197
+ execSync(getInstallCommand(toPm), { cwd: workspaceDir, stdio: 'inherit' });
198
+ }
199
+ async function runDisplayMode(workspaceDir) {
200
+ const autoOpen = readAutoOpenBrowser();
201
+ if (isKittWorkspace(workspaceDir)) {
202
+ const manifest = readManifest(workspaceDir);
203
+ if (!manifest) {
204
+ error('Failed to read .kitt/manifest.json');
205
+ return;
206
+ }
207
+ printSettings(manifest.workspace.packageManager, autoOpen);
208
+ return;
209
+ }
210
+ printSettings(readDefaultPackageManager(), autoOpen);
211
+ }
212
+ async function runSetMode(context, workspaceDir, args) {
213
+ const key = args[1];
214
+ const rawValue = args[2]?.toLowerCase();
215
+ // --- autoOpenBrowser ---
216
+ if (key === 'autoOpenBrowser') {
217
+ if (rawValue !== 'true' && rawValue !== 'false') {
218
+ error(`Invalid autoOpenBrowser value: "${args[2]}". Expected true or false`);
219
+ return;
220
+ }
221
+ const boolVal = rawValue === 'true';
222
+ writeAutoOpenBrowser(boolVal);
223
+ success(`autoOpenBrowser set to ${String(boolVal)}`);
224
+ return;
225
+ }
226
+ // --- packageManager ---
227
+ if (key !== 'packageManager') {
228
+ error(`Unknown setting: ${key}`);
229
+ return;
230
+ }
231
+ if (!isPackageManager(rawValue)) {
232
+ error(`Invalid packageManager: ${args[2]}. Expected one of ${SUPPORTED_PACKAGE_MANAGERS.join(', ')}`);
233
+ return;
234
+ }
235
+ if (!isKittWorkspace(workspaceDir)) {
236
+ writeDefaultPackageManager(rawValue);
237
+ success(`Default package manager set to ${rawValue}. Will be used on next /init.`);
238
+ return;
239
+ }
240
+ const manifest = readManifest(workspaceDir);
241
+ if (!manifest) {
242
+ error('Failed to read .kitt/manifest.json');
243
+ return;
244
+ }
245
+ const currentPm = manifest.workspace.packageManager;
246
+ if (currentPm === rawValue) {
247
+ success(`Already using ${rawValue}`);
248
+ return;
249
+ }
250
+ const shouldProceed = await maybeConfirmMigration(context, currentPm, rawValue);
251
+ if (!shouldProceed) {
252
+ return;
253
+ }
254
+ migrateWorkspacePackageManager(workspaceDir, currentPm, rawValue);
255
+ writeManifest(workspaceDir, {
256
+ ...manifest,
257
+ workspace: {
258
+ ...manifest.workspace,
259
+ packageManager: rawValue,
260
+ },
261
+ });
262
+ const logger = createAuditLogger(workspaceDir);
263
+ logger.cmd('/settings set packageManager', 'SUCCESS', `${currentPm} -> ${rawValue}`);
264
+ success(`Workspace migrated to ${rawValue}`);
265
+ }
266
+ export default async function settingsCommand(context, args) {
267
+ const workspaceDir = findWorkspaceRoot(process.cwd()) ?? '.';
268
+ if (args.length === 0) {
269
+ await runDisplayMode(workspaceDir);
270
+ return;
271
+ }
272
+ if (args[0] === 'set' && args.length >= 3) {
273
+ await runSetMode(context, workspaceDir, args);
274
+ return;
275
+ }
276
+ printUsage();
277
+ }
278
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AppContext } from '../types.js';
2
+ export default function statusCommand(_context: AppContext, _args: string[], _commandKey: string): Promise<void>;
@@ -0,0 +1,88 @@
1
+ import pc from 'picocolors';
2
+ import { createAuditLogger } from '../audit/logger.js';
3
+ import { isLlmConfigured } from '../credentials/config.js';
4
+ import { createLlmClient } from '../llm/client.js';
5
+ import { buildOperationsContext, executeOperations } from '../llm/operations.js';
6
+ import { createRateLimiter } from '../llm/rate-limiter.js';
7
+ import { detectDrift } from '../manifest/drift.js';
8
+ import { findWorkspaceRoot, isKittWorkspace, readManifest } from '../manifest/reader.js';
9
+ import { createMcpClient } from '../mcp/client.js';
10
+ import { shutdownMcpServer, spawnMcpServer } from '../mcp/lifecycle.js';
11
+ import { createProjectGuard } from '../mcp/project-guard.js';
12
+ import { error, info, success, warn } from '../utils/display.js';
13
+ export default async function statusCommand(_context, _args, _commandKey) {
14
+ const workspaceDir = findWorkspaceRoot(process.cwd()) ?? '.';
15
+ const logger = createAuditLogger(workspaceDir);
16
+ logger.cmd('/status', 'START');
17
+ if (!isKittWorkspace(workspaceDir)) {
18
+ error('Not a KITT workspace.');
19
+ logger.cmd('/status', 'FAILED', 'not a workspace');
20
+ return;
21
+ }
22
+ const manifest = readManifest(workspaceDir);
23
+ if (!manifest) {
24
+ error('Could not read manifest.');
25
+ logger.cmd('/status', 'FAILED', 'manifest read failed');
26
+ return;
27
+ }
28
+ info(`${pc.bold('Workspace:')} ${pc.cyan(manifest.workspace.name)}`);
29
+ info(`${pc.bold('Package manager:')} ${pc.cyan(manifest.workspace.packageManager)}`);
30
+ const projectId = manifest.workspace.railway?.projectId;
31
+ if (projectId) {
32
+ info(`${pc.bold('Railway project:')} ${pc.cyan(projectId)}`);
33
+ }
34
+ else {
35
+ warn('Railway project is not linked. Run /init or /link to connect this workspace.');
36
+ }
37
+ const drift = detectDrift(workspaceDir, manifest);
38
+ const driftMessages = [
39
+ ...drift.orphanedDirectories.map((directory) => `${directory} exists on disk but not in manifest`),
40
+ ...drift.missingDirectories.map((directory) => `${directory} is in manifest but directory is missing`),
41
+ ];
42
+ if (driftMessages.length === 0) {
43
+ success('No drift detected.');
44
+ }
45
+ else {
46
+ warn('Drift detected:');
47
+ for (const message of driftMessages) {
48
+ info(` - ${message}`);
49
+ }
50
+ }
51
+ if (!projectId) {
52
+ logger.cmd('/status', 'SUCCESS');
53
+ return;
54
+ }
55
+ if (!(await isLlmConfigured())) {
56
+ warn('LLM provider is not configured. Run /login llm to enable Railway status checks.');
57
+ logger.cmd('/status', 'SUCCESS');
58
+ return;
59
+ }
60
+ let mcpClient = null;
61
+ try {
62
+ const rateLimiter = createRateLimiter();
63
+ const llmClient = await createLlmClient(rateLimiter);
64
+ const server = await spawnMcpServer();
65
+ mcpClient = await createMcpClient(server);
66
+ await mcpClient.initialize();
67
+ const projectGuard = createProjectGuard(projectId);
68
+ const operationsContext = buildOperationsContext('status', [], manifest);
69
+ const operationsResult = await executeOperations({
70
+ llmClient,
71
+ mcpClient,
72
+ context: operationsContext,
73
+ projectGuard,
74
+ });
75
+ info(operationsResult);
76
+ logger.cmd('/status', 'SUCCESS');
77
+ }
78
+ catch (operationError) {
79
+ const detail = operationError instanceof Error ? operationError.message : String(operationError);
80
+ error(`Status command failed: ${detail}`);
81
+ logger.cmd('/status', 'FAILED', detail);
82
+ }
83
+ finally {
84
+ mcpClient?.close();
85
+ await shutdownMcpServer();
86
+ }
87
+ }
88
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AppContext } from '../types.js';
2
+ export default function versionsCommand(_context: AppContext, args: string[], commandKey: string): Promise<void>;
@@ -0,0 +1,242 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import * as p from '@clack/prompts';
4
+ import pc from 'picocolors';
5
+ import { createAuditLogger } from '../audit/logger.js';
6
+ import { findWorkspaceRoot, isKittWorkspace } from '../manifest/reader.js';
7
+ import { error, info, success, warn } from '../utils/display.js';
8
+ import { generateVersionsHash, writeVersionsLock } from '../versions/integrity.js';
9
+ import { checkRegistryVersions } from '../versions/registry.js';
10
+ import { generateVersionsMarkdown, INTEGRATION_ALLOWLIST, isValidSemver, parseVersionsTable, } from '../versions/parser.js';
11
+ const TABLE_HEADER_INTEGRATION = 'Integration';
12
+ const TABLE_HEADER_VERSION = 'Version';
13
+ const REGISTRY_TABLE_HEADER_CURRENT = 'Current';
14
+ const REGISTRY_TABLE_HEADER_LATEST = 'Latest';
15
+ const REGISTRY_TABLE_HEADER_STATUS = 'Status';
16
+ function formatVersionTable(entries) {
17
+ const integrationWidth = Math.max(TABLE_HEADER_INTEGRATION.length, ...entries.map((entry) => entry.integration.length));
18
+ const versionWidth = Math.max(TABLE_HEADER_VERSION.length, ...entries.map((entry) => entry.version.length));
19
+ const separatorWidth = integrationWidth + 6 + versionWidth;
20
+ const rows = [
21
+ `${pc.bold(TABLE_HEADER_INTEGRATION.padEnd(integrationWidth))} ${pc.bold(TABLE_HEADER_VERSION)}`,
22
+ pc.dim('─'.repeat(separatorWidth)),
23
+ ];
24
+ for (const entry of entries) {
25
+ rows.push(`${entry.integration.padEnd(integrationWidth)} ${entry.version.padEnd(versionWidth)}`);
26
+ }
27
+ return rows;
28
+ }
29
+ function formatRegistryTable(results) {
30
+ const integrationWidth = Math.max(TABLE_HEADER_INTEGRATION.length, ...results.map((result) => result.integration.length));
31
+ const currentWidth = Math.max(REGISTRY_TABLE_HEADER_CURRENT.length, ...results.map((result) => result.currentVersion.length));
32
+ const latestWidth = Math.max(REGISTRY_TABLE_HEADER_LATEST.length, ...results.map((result) => result.latestVersion.length));
33
+ const statusWidth = Math.max(REGISTRY_TABLE_HEADER_STATUS.length, 'Up to date'.length);
34
+ const separatorWidth = integrationWidth + 2 + currentWidth + 2 + latestWidth + 2 + statusWidth;
35
+ const rows = [
36
+ `${pc.bold(TABLE_HEADER_INTEGRATION.padEnd(integrationWidth))} ${pc.bold(REGISTRY_TABLE_HEADER_CURRENT.padEnd(currentWidth))} ${pc.bold(REGISTRY_TABLE_HEADER_LATEST.padEnd(latestWidth))} ${pc.bold(REGISTRY_TABLE_HEADER_STATUS)}`,
37
+ pc.dim('─'.repeat(separatorWidth)),
38
+ ];
39
+ for (const result of results) {
40
+ const status = result.updateAvailable ? pc.yellow('Update') : pc.green('Up to date');
41
+ rows.push(`${result.integration.padEnd(integrationWidth)} ${result.currentVersion.padEnd(currentWidth)} ${result.latestVersion.padEnd(latestWidth)} ${status.padEnd(statusWidth)}`);
42
+ }
43
+ return rows;
44
+ }
45
+ function loadVersionsContext(logger) {
46
+ const workspaceDir = findWorkspaceRoot(process.cwd()) ?? '.';
47
+ if (!isKittWorkspace(workspaceDir)) {
48
+ error('Not a KITT workspace. Run /init first.');
49
+ logger.cmd('/versions', 'FAILED', 'not a workspace');
50
+ return null;
51
+ }
52
+ const versionsPath = join(workspaceDir, 'versions.md');
53
+ if (!existsSync(versionsPath)) {
54
+ error('versions.md not found in workspace root.');
55
+ logger.cmd('/versions', 'FAILED', 'versions.md missing');
56
+ return null;
57
+ }
58
+ const versionsMarkdown = readFileSync(versionsPath, 'utf-8');
59
+ const result = parseVersionsTable(versionsMarkdown);
60
+ for (const parseError of result.errors) {
61
+ warn(parseError);
62
+ }
63
+ return {
64
+ workspaceDir,
65
+ versionsPath,
66
+ entries: result.entries,
67
+ };
68
+ }
69
+ function writeVersionsFiles(versionsContext, entries) {
70
+ writeFileSync(versionsContext.versionsPath, generateVersionsMarkdown(entries), 'utf-8');
71
+ const hash = generateVersionsHash(entries);
72
+ writeVersionsLock(versionsContext.workspaceDir, hash);
73
+ }
74
+ async function runRegistryCheck(logger, commandName) {
75
+ const versionsContext = loadVersionsContext(logger);
76
+ if (versionsContext === null) {
77
+ return null;
78
+ }
79
+ info('Checking npm registry for updates...');
80
+ const results = await checkRegistryVersions(versionsContext.entries);
81
+ if (results.length === 0) {
82
+ warn('Could not reach npm registry. Check your network connection.');
83
+ logger.cmd('/versions', 'FAILED', `${commandName} registry check failed`);
84
+ return null;
85
+ }
86
+ const rows = formatRegistryTable(results);
87
+ for (const row of rows) {
88
+ console.log(row);
89
+ }
90
+ const updates = results.filter((result) => result.updateAvailable).length;
91
+ if (updates > 0) {
92
+ info(`${updates} updates available. Run /versions update to apply.`);
93
+ }
94
+ else {
95
+ success('All integrations are up to date.');
96
+ }
97
+ return {
98
+ ...versionsContext,
99
+ results,
100
+ };
101
+ }
102
+ async function runVersionsBaseCommand(logger) {
103
+ const versionsContext = loadVersionsContext(logger);
104
+ if (versionsContext === null) {
105
+ return;
106
+ }
107
+ const rows = formatVersionTable(versionsContext.entries);
108
+ for (const row of rows) {
109
+ console.log(row);
110
+ }
111
+ info(`${versionsContext.entries.length} integrations pinned.`);
112
+ logger.cmd('/versions', 'SUCCESS');
113
+ }
114
+ function resolveSubcommand(commandKey, args) {
115
+ if (commandKey.startsWith('versions:')) {
116
+ return commandKey.slice('versions:'.length);
117
+ }
118
+ return args[0] ?? null;
119
+ }
120
+ function resolveSubcommandArgs(commandKey, args) {
121
+ if (commandKey.startsWith('versions:')) {
122
+ return args;
123
+ }
124
+ return args.slice(1);
125
+ }
126
+ async function runVersionsCheckCommand(logger) {
127
+ const checkContext = await runRegistryCheck(logger, '/versions check');
128
+ if (checkContext === null) {
129
+ return;
130
+ }
131
+ logger.cmd('/versions', 'SUCCESS', '/versions check completed');
132
+ }
133
+ async function runVersionsUpdateCommand(logger) {
134
+ const checkContext = await runRegistryCheck(logger, '/versions update');
135
+ if (checkContext === null) {
136
+ return;
137
+ }
138
+ const updatable = checkContext.results.filter((result) => result.updateAvailable);
139
+ if (updatable.length === 0) {
140
+ logger.cmd('/versions', 'SUCCESS', '/versions update completed with no updates');
141
+ return;
142
+ }
143
+ const selected = await p.multiselect({
144
+ message: 'Select integrations to update:',
145
+ options: updatable.map((result) => ({
146
+ value: result.integration,
147
+ label: `${result.integration} ${result.currentVersion} → ${result.latestVersion}`,
148
+ })),
149
+ });
150
+ if (p.isCancel(selected)) {
151
+ warn('Version update cancelled.');
152
+ logger.cmd('/versions', 'FAILED', '/versions update cancelled');
153
+ return;
154
+ }
155
+ const selectedSet = new Set(selected);
156
+ if (selectedSet.size === 0) {
157
+ info('No integrations selected for update.');
158
+ logger.cmd('/versions', 'SUCCESS', '/versions update completed with empty selection');
159
+ return;
160
+ }
161
+ const latestVersionMap = new Map(updatable.map((result) => [result.integration, result.latestVersion]));
162
+ const updatedEntries = checkContext.entries.map((entry) => {
163
+ const latestVersion = latestVersionMap.get(entry.integration);
164
+ if (!selectedSet.has(entry.integration) || latestVersion === undefined) {
165
+ return entry;
166
+ }
167
+ return {
168
+ integration: entry.integration,
169
+ version: latestVersion,
170
+ };
171
+ });
172
+ writeVersionsFiles(checkContext, updatedEntries);
173
+ success('versions.md updated');
174
+ success('versions.lock regenerated');
175
+ logger.cmd('/versions', 'SUCCESS', `/versions update applied to ${selectedSet.size} integration(s)`);
176
+ }
177
+ function normalizeSetArgs(commandKey, args) {
178
+ const subcommandArgs = resolveSubcommandArgs(commandKey, args);
179
+ if (subcommandArgs.length !== 2) {
180
+ return null;
181
+ }
182
+ return [subcommandArgs[0], subcommandArgs[1]];
183
+ }
184
+ async function runVersionsSetCommand(logger, commandKey, args) {
185
+ const setArgs = normalizeSetArgs(commandKey, args);
186
+ if (setArgs === null) {
187
+ error('Usage: /versions set <integration> <version>');
188
+ logger.cmd('/versions', 'FAILED', '/versions set missing args');
189
+ return;
190
+ }
191
+ const [integration, version] = setArgs;
192
+ const integrationSet = new Set(INTEGRATION_ALLOWLIST);
193
+ if (!integrationSet.has(integration)) {
194
+ error(`Unknown integration: ${integration}. Run /versions to see available integrations.`);
195
+ logger.cmd('/versions', 'FAILED', `/versions set unknown integration: ${integration}`);
196
+ return;
197
+ }
198
+ if (!isValidSemver(version)) {
199
+ error(`Invalid version: ${version}. Expected format: major.minor.patch`);
200
+ logger.cmd('/versions', 'FAILED', `/versions set invalid semver: ${version}`);
201
+ return;
202
+ }
203
+ const versionsContext = loadVersionsContext(logger);
204
+ if (versionsContext === null) {
205
+ return;
206
+ }
207
+ const existingEntryIndex = versionsContext.entries.findIndex((entry) => entry.integration === integration);
208
+ const updatedEntries = [...versionsContext.entries];
209
+ if (existingEntryIndex >= 0) {
210
+ updatedEntries[existingEntryIndex] = { integration, version };
211
+ }
212
+ else {
213
+ updatedEntries.push({ integration, version });
214
+ }
215
+ writeVersionsFiles(versionsContext, updatedEntries);
216
+ success(`${integration} pinned to ${version} in versions.md`);
217
+ success('versions.lock regenerated');
218
+ logger.cmd('/versions', 'SUCCESS', `/versions set pinned ${integration} to ${version}`);
219
+ }
220
+ export default async function versionsCommand(_context, args, commandKey) {
221
+ const workspaceDir = findWorkspaceRoot(process.cwd()) ?? '.';
222
+ const logger = createAuditLogger(workspaceDir);
223
+ const sub = resolveSubcommand(commandKey, args);
224
+ if (!sub || sub === 'list') {
225
+ await runVersionsBaseCommand(logger);
226
+ return;
227
+ }
228
+ if (sub === 'check') {
229
+ await runVersionsCheckCommand(logger);
230
+ return;
231
+ }
232
+ if (sub === 'update') {
233
+ await runVersionsUpdateCommand(logger);
234
+ return;
235
+ }
236
+ if (sub === 'set') {
237
+ await runVersionsSetCommand(logger, commandKey, args);
238
+ return;
239
+ }
240
+ warn('Unknown versions subcommand: ' + sub + '. Try: check, update, set');
241
+ }
242
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"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"}