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 @@
1
+ {"version":3,"file":"railway.js","sourceRoot":"","sources":["../../src/credentials/railway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAQ9C,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,QAAQ,CAAC,mBAAmB,EAAE;YAC5B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,2BAA2B;SACnC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,EAAE;YACxC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,MAAM;aACjB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,QAAQ,CAAC,eAAe,EAAE;YACxB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,OAAO,MAAM,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,kCAAkC;SAC1C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE;YACzB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { type LlmProvider } from '../credentials/config.js';
2
+ import { type RateLimiter } from './rate-limiter.js';
3
+ type UnifiedUsage = {
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ };
7
+ export interface LlmMessageOptions {
8
+ systemPrompt: string;
9
+ userMessage: string;
10
+ maxTokens?: number;
11
+ modelOverride?: string;
12
+ onChunk?: (chunkText: string, totalChars: number) => void;
13
+ }
14
+ export interface LlmToolDefinition {
15
+ name: string;
16
+ description: string;
17
+ inputSchema: Record<string, unknown>;
18
+ }
19
+ export interface LlmToolMessageOptions {
20
+ systemPrompt: string;
21
+ userMessage: string;
22
+ tools: LlmToolDefinition[];
23
+ maxTokens?: number;
24
+ }
25
+ export interface LlmToolCall {
26
+ id: string;
27
+ name: string;
28
+ arguments: Record<string, unknown>;
29
+ }
30
+ export interface LlmToolResult {
31
+ toolCallId: string;
32
+ content: string;
33
+ isError?: boolean;
34
+ }
35
+ export interface LlmResponse {
36
+ content: string;
37
+ usage?: UnifiedUsage;
38
+ }
39
+ export interface LlmToolResponse {
40
+ content: string;
41
+ toolCalls: LlmToolCall[];
42
+ usage?: UnifiedUsage;
43
+ stopReason: string;
44
+ }
45
+ export interface LlmClient {
46
+ sendMessage(options: LlmMessageOptions): Promise<LlmResponse>;
47
+ sendMessageWithTools(options: LlmToolMessageOptions): Promise<LlmToolResponse>;
48
+ sendToolResults(options: {
49
+ conversationHistory: unknown[];
50
+ toolResults: LlmToolResult[];
51
+ systemPrompt: string;
52
+ tools: LlmToolDefinition[];
53
+ maxTokens?: number;
54
+ }): Promise<LlmToolResponse>;
55
+ getProvider(): LlmProvider;
56
+ getModel(): string;
57
+ }
58
+ export declare function createLlmClient(rateLimiter: RateLimiter): Promise<LlmClient>;
59
+ export {};
@@ -0,0 +1,530 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { createAuditLogger } from '../audit/logger.js';
3
+ import { getLlmApiKey, getLlmConfig } from '../credentials/config.js';
4
+ import { PROMPT_VERSION } from '../prompts/version.js';
5
+ import { estimateTokens } from './rate-limiter.js';
6
+ const auditLogger = createAuditLogger('.');
7
+ const DEFAULT_MAX_TOKENS = 8192;
8
+ async function loadProvider(provider) {
9
+ switch (provider) {
10
+ case 'anthropic':
11
+ return (await import('@anthropic-ai/sdk')).default;
12
+ case 'openai':
13
+ return (await import('openai')).default;
14
+ case 'gemini':
15
+ return (await import('@google/generative-ai')).GoogleGenerativeAI;
16
+ }
17
+ }
18
+ function normalizeToolSchema(tools) {
19
+ return tools.map((tool) => ({
20
+ name: tool.name,
21
+ description: tool.description,
22
+ input_schema: tool.inputSchema,
23
+ }));
24
+ }
25
+ function parseToolArguments(rawArguments) {
26
+ if (typeof rawArguments === 'string') {
27
+ try {
28
+ const parsed = JSON.parse(rawArguments);
29
+ if (parsed && typeof parsed === 'object') {
30
+ return parsed;
31
+ }
32
+ return {};
33
+ }
34
+ catch {
35
+ return {};
36
+ }
37
+ }
38
+ if (rawArguments && typeof rawArguments === 'object') {
39
+ return rawArguments;
40
+ }
41
+ return {};
42
+ }
43
+ function ensureMaxTokens(maxTokens) {
44
+ return maxTokens ?? DEFAULT_MAX_TOKENS;
45
+ }
46
+ function ensureRateLimit(rateLimiter, provider, model, estimatedTokens) {
47
+ const check = rateLimiter.canMakeCall();
48
+ if (check.allowed) {
49
+ return;
50
+ }
51
+ auditLogger.llmCall(provider, model, PROMPT_VERSION, estimatedTokens, 'FAILED');
52
+ throw new Error(check.reason ?? 'LLM call limit reached for this session.');
53
+ }
54
+ async function executeWithAudit(options) {
55
+ const { provider, model, estimatedTokens, rateLimiter, operation } = options;
56
+ try {
57
+ const response = await operation();
58
+ auditLogger.llmCall(provider, model, PROMPT_VERSION, estimatedTokens, 'SUCCESS');
59
+ return response;
60
+ }
61
+ catch (error) {
62
+ auditLogger.llmCall(provider, model, PROMPT_VERSION, estimatedTokens, 'FAILED');
63
+ throw error;
64
+ }
65
+ finally {
66
+ rateLimiter.recordCall(estimatedTokens);
67
+ }
68
+ }
69
+ function mapUsage(usage) {
70
+ if (!usage) {
71
+ return undefined;
72
+ }
73
+ return {
74
+ inputTokens: usage.input_tokens ?? 0,
75
+ outputTokens: usage.output_tokens ?? 0,
76
+ };
77
+ }
78
+ function mapOpenAiUsage(usage) {
79
+ if (!usage) {
80
+ return undefined;
81
+ }
82
+ return {
83
+ inputTokens: usage.prompt_tokens ?? 0,
84
+ outputTokens: usage.completion_tokens ?? 0,
85
+ };
86
+ }
87
+ function mapGeminiUsage(usage) {
88
+ if (!usage) {
89
+ return undefined;
90
+ }
91
+ return {
92
+ inputTokens: usage.promptTokenCount ?? 0,
93
+ outputTokens: usage.candidatesTokenCount ?? 0,
94
+ };
95
+ }
96
+ function createAnthropicClient(Provider, apiKey, model, rateLimiter) {
97
+ const client = new Provider({ apiKey });
98
+ const provider = 'anthropic';
99
+ return {
100
+ getProvider() {
101
+ return provider;
102
+ },
103
+ getModel() {
104
+ return model;
105
+ },
106
+ async sendMessage(options) {
107
+ const estimatedTokens = estimateTokens(options.systemPrompt, options.userMessage);
108
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
109
+ return executeWithAudit({
110
+ provider,
111
+ model,
112
+ estimatedTokens,
113
+ rateLimiter,
114
+ operation: async () => {
115
+ if (options.onChunk) {
116
+ const activeModel = options.modelOverride ?? model;
117
+ const stream = await client.messages.create({
118
+ model: activeModel,
119
+ system: [{ type: 'text', text: options.systemPrompt, cache_control: { type: 'ephemeral' } }],
120
+ max_tokens: ensureMaxTokens(options.maxTokens),
121
+ messages: [{ role: 'user', content: options.userMessage }],
122
+ stream: true,
123
+ });
124
+ let content = '';
125
+ let inputTokens = 0;
126
+ let outputTokens = 0;
127
+ for await (const event of stream) {
128
+ if (event.type === 'message_start' && event.usage) {
129
+ inputTokens = event.usage.input_tokens ?? 0;
130
+ }
131
+ if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta.text) {
132
+ content += event.delta.text;
133
+ options.onChunk(event.delta.text, content.length);
134
+ }
135
+ if (event.type === 'message_delta' && event.usage) {
136
+ outputTokens = event.usage.output_tokens ?? 0;
137
+ }
138
+ }
139
+ return {
140
+ content,
141
+ usage: { inputTokens, outputTokens },
142
+ };
143
+ }
144
+ const response = await client.messages.create({
145
+ model: options.modelOverride ?? model,
146
+ system: [{ type: 'text', text: options.systemPrompt, cache_control: { type: 'ephemeral' } }],
147
+ max_tokens: ensureMaxTokens(options.maxTokens),
148
+ messages: [{ role: 'user', content: options.userMessage }],
149
+ });
150
+ const content = response.content
151
+ .filter((block) => block.type === 'text')
152
+ .map((block) => block.text)
153
+ .join('\n');
154
+ return {
155
+ content,
156
+ usage: mapUsage(response.usage),
157
+ };
158
+ },
159
+ });
160
+ },
161
+ async sendMessageWithTools(options) {
162
+ const estimatedTokens = estimateTokens(options.systemPrompt, options.userMessage);
163
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
164
+ return executeWithAudit({
165
+ provider,
166
+ model,
167
+ estimatedTokens,
168
+ rateLimiter,
169
+ operation: async () => {
170
+ const response = await client.messages.create({
171
+ model,
172
+ system: [{ type: 'text', text: options.systemPrompt, cache_control: { type: 'ephemeral' } }],
173
+ max_tokens: ensureMaxTokens(options.maxTokens),
174
+ messages: [{ role: 'user', content: options.userMessage }],
175
+ tools: normalizeToolSchema(options.tools),
176
+ });
177
+ const content = response.content
178
+ .filter((block) => block.type === 'text')
179
+ .map((block) => block.text)
180
+ .join('\n');
181
+ const toolCalls = response.content
182
+ .filter((block) => block.type === 'tool_use')
183
+ .map((block) => ({
184
+ id: block.id,
185
+ name: block.name,
186
+ arguments: block.input,
187
+ }));
188
+ return {
189
+ content,
190
+ toolCalls,
191
+ usage: mapUsage(response.usage),
192
+ stopReason: response.stop_reason ?? 'end_turn',
193
+ };
194
+ },
195
+ });
196
+ },
197
+ async sendToolResults(options) {
198
+ const toolPayload = JSON.stringify(options.toolResults);
199
+ const estimatedTokens = estimateTokens(options.systemPrompt, toolPayload);
200
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
201
+ return executeWithAudit({
202
+ provider,
203
+ model,
204
+ estimatedTokens,
205
+ rateLimiter,
206
+ operation: async () => {
207
+ const response = await client.messages.create({
208
+ model,
209
+ system: [{ type: 'text', text: options.systemPrompt, cache_control: { type: 'ephemeral' } }],
210
+ max_tokens: ensureMaxTokens(options.maxTokens),
211
+ tools: normalizeToolSchema(options.tools),
212
+ messages: [
213
+ ...options.conversationHistory,
214
+ {
215
+ role: 'user',
216
+ content: options.toolResults.map((result) => ({
217
+ type: 'tool_result',
218
+ tool_use_id: result.toolCallId,
219
+ content: result.content,
220
+ is_error: result.isError ?? false,
221
+ })),
222
+ },
223
+ ],
224
+ });
225
+ const content = response.content
226
+ .filter((block) => block.type === 'text')
227
+ .map((block) => block.text)
228
+ .join('\n');
229
+ const toolCalls = response.content
230
+ .filter((block) => block.type === 'tool_use')
231
+ .map((block) => ({
232
+ id: block.id,
233
+ name: block.name,
234
+ arguments: block.input,
235
+ }));
236
+ return {
237
+ content,
238
+ toolCalls,
239
+ usage: mapUsage(response.usage),
240
+ stopReason: response.stop_reason ?? 'end_turn',
241
+ };
242
+ },
243
+ });
244
+ },
245
+ };
246
+ }
247
+ function createOpenAiClient(Provider, apiKey, model, rateLimiter) {
248
+ const client = new Provider({ apiKey });
249
+ const provider = 'openai';
250
+ return {
251
+ getProvider() {
252
+ return provider;
253
+ },
254
+ getModel() {
255
+ return model;
256
+ },
257
+ async sendMessage(options) {
258
+ const estimatedTokens = estimateTokens(options.systemPrompt, options.userMessage);
259
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
260
+ return executeWithAudit({
261
+ provider,
262
+ model,
263
+ estimatedTokens,
264
+ rateLimiter,
265
+ operation: async () => {
266
+ const response = await client.chat.completions.create({
267
+ model,
268
+ messages: [
269
+ { role: 'system', content: options.systemPrompt },
270
+ { role: 'user', content: options.userMessage },
271
+ ],
272
+ max_tokens: ensureMaxTokens(options.maxTokens),
273
+ });
274
+ const message = response.choices[0]?.message;
275
+ return {
276
+ content: message?.content ?? '',
277
+ usage: mapOpenAiUsage(response.usage),
278
+ };
279
+ },
280
+ });
281
+ },
282
+ async sendMessageWithTools(options) {
283
+ const estimatedTokens = estimateTokens(options.systemPrompt, options.userMessage);
284
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
285
+ return executeWithAudit({
286
+ provider,
287
+ model,
288
+ estimatedTokens,
289
+ rateLimiter,
290
+ operation: async () => {
291
+ const response = await client.chat.completions.create({
292
+ model,
293
+ messages: [
294
+ { role: 'system', content: options.systemPrompt },
295
+ { role: 'user', content: options.userMessage },
296
+ ],
297
+ max_tokens: ensureMaxTokens(options.maxTokens),
298
+ tools: options.tools.map((tool) => ({
299
+ type: 'function',
300
+ function: {
301
+ name: tool.name,
302
+ description: tool.description,
303
+ parameters: tool.inputSchema,
304
+ },
305
+ })),
306
+ });
307
+ const choice = response.choices[0];
308
+ const toolCalls = (choice?.message.tool_calls ?? []).map((toolCall) => ({
309
+ id: toolCall.id,
310
+ name: toolCall.function.name,
311
+ arguments: parseToolArguments(toolCall.function.arguments),
312
+ }));
313
+ return {
314
+ content: choice?.message.content ?? '',
315
+ toolCalls,
316
+ usage: mapOpenAiUsage(response.usage),
317
+ stopReason: choice?.finish_reason ?? 'stop',
318
+ };
319
+ },
320
+ });
321
+ },
322
+ async sendToolResults(options) {
323
+ const toolPayload = JSON.stringify(options.toolResults);
324
+ const estimatedTokens = estimateTokens(options.systemPrompt, toolPayload);
325
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
326
+ return executeWithAudit({
327
+ provider,
328
+ model,
329
+ estimatedTokens,
330
+ rateLimiter,
331
+ operation: async () => {
332
+ const response = await client.chat.completions.create({
333
+ model,
334
+ messages: [
335
+ { role: 'system', content: options.systemPrompt },
336
+ ...options.conversationHistory,
337
+ ...options.toolResults.map((result) => ({
338
+ role: 'tool',
339
+ tool_call_id: result.toolCallId,
340
+ content: result.content,
341
+ })),
342
+ ],
343
+ max_tokens: ensureMaxTokens(options.maxTokens),
344
+ tools: options.tools.map((tool) => ({
345
+ type: 'function',
346
+ function: {
347
+ name: tool.name,
348
+ description: tool.description,
349
+ parameters: tool.inputSchema,
350
+ },
351
+ })),
352
+ });
353
+ const choice = response.choices[0];
354
+ const toolCalls = (choice?.message.tool_calls ?? []).map((toolCall) => ({
355
+ id: toolCall.id,
356
+ name: toolCall.function.name,
357
+ arguments: parseToolArguments(toolCall.function.arguments),
358
+ }));
359
+ return {
360
+ content: choice?.message.content ?? '',
361
+ toolCalls,
362
+ usage: mapOpenAiUsage(response.usage),
363
+ stopReason: choice?.finish_reason ?? 'stop',
364
+ };
365
+ },
366
+ });
367
+ },
368
+ };
369
+ }
370
+ function createGeminiClient(Provider, apiKey, model, rateLimiter) {
371
+ const client = new Provider(apiKey);
372
+ const provider = 'gemini';
373
+ return {
374
+ getProvider() {
375
+ return provider;
376
+ },
377
+ getModel() {
378
+ return model;
379
+ },
380
+ async sendMessage(options) {
381
+ const estimatedTokens = estimateTokens(options.systemPrompt, options.userMessage);
382
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
383
+ return executeWithAudit({
384
+ provider,
385
+ model,
386
+ estimatedTokens,
387
+ rateLimiter,
388
+ operation: async () => {
389
+ const modelClient = client.getGenerativeModel({
390
+ model,
391
+ systemInstruction: options.systemPrompt,
392
+ });
393
+ const response = await modelClient.generateContent({
394
+ contents: [{ role: 'user', parts: [{ text: options.userMessage }] }],
395
+ generationConfig: { maxOutputTokens: ensureMaxTokens(options.maxTokens) },
396
+ });
397
+ return {
398
+ content: response.response.text(),
399
+ usage: mapGeminiUsage(response.response.usageMetadata),
400
+ };
401
+ },
402
+ });
403
+ },
404
+ async sendMessageWithTools(options) {
405
+ const estimatedTokens = estimateTokens(options.systemPrompt, options.userMessage);
406
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
407
+ return executeWithAudit({
408
+ provider,
409
+ model,
410
+ estimatedTokens,
411
+ rateLimiter,
412
+ operation: async () => {
413
+ const modelClient = client.getGenerativeModel({
414
+ model,
415
+ systemInstruction: options.systemPrompt,
416
+ tools: [
417
+ {
418
+ functionDeclarations: options.tools.map((tool) => ({
419
+ name: tool.name,
420
+ description: tool.description,
421
+ parameters: tool.inputSchema,
422
+ })),
423
+ },
424
+ ],
425
+ });
426
+ const response = await modelClient.generateContent({
427
+ contents: [{ role: 'user', parts: [{ text: options.userMessage }] }],
428
+ generationConfig: { maxOutputTokens: ensureMaxTokens(options.maxTokens) },
429
+ });
430
+ const candidate = response.response.candidates?.[0];
431
+ const parts = candidate?.content?.parts ?? [];
432
+ const toolCalls = parts
433
+ .filter((part) => part.functionCall)
434
+ .map((part) => ({
435
+ id: randomUUID(),
436
+ name: part.functionCall?.name ?? 'unknown',
437
+ arguments: parseToolArguments(part.functionCall?.args),
438
+ }));
439
+ const content = parts
440
+ .filter((part) => typeof part.text === 'string' && part.text.length > 0)
441
+ .map((part) => part.text)
442
+ .join('\n');
443
+ return {
444
+ content,
445
+ toolCalls,
446
+ usage: mapGeminiUsage(response.response.usageMetadata),
447
+ stopReason: candidate?.finishReason ?? 'STOP',
448
+ };
449
+ },
450
+ });
451
+ },
452
+ async sendToolResults(options) {
453
+ const toolPayload = JSON.stringify(options.toolResults);
454
+ const estimatedTokens = estimateTokens(options.systemPrompt, toolPayload);
455
+ ensureRateLimit(rateLimiter, provider, model, estimatedTokens);
456
+ return executeWithAudit({
457
+ provider,
458
+ model,
459
+ estimatedTokens,
460
+ rateLimiter,
461
+ operation: async () => {
462
+ const modelClient = client.getGenerativeModel({
463
+ model,
464
+ systemInstruction: options.systemPrompt,
465
+ tools: [
466
+ {
467
+ functionDeclarations: options.tools.map((tool) => ({
468
+ name: tool.name,
469
+ description: tool.description,
470
+ parameters: tool.inputSchema,
471
+ })),
472
+ },
473
+ ],
474
+ });
475
+ const toolResultSummary = options.toolResults
476
+ .map((result) => `Tool ${result.toolCallId}: ${result.content}`)
477
+ .join('\n');
478
+ const response = await modelClient.generateContent({
479
+ contents: [
480
+ ...options.conversationHistory,
481
+ {
482
+ role: 'user',
483
+ parts: [{ text: `Tool results:\n${toolResultSummary}` }],
484
+ },
485
+ ],
486
+ generationConfig: { maxOutputTokens: ensureMaxTokens(options.maxTokens) },
487
+ });
488
+ const candidate = response.response.candidates?.[0];
489
+ const parts = candidate?.content?.parts ?? [];
490
+ const toolCalls = parts
491
+ .filter((part) => part.functionCall)
492
+ .map((part) => ({
493
+ id: randomUUID(),
494
+ name: part.functionCall?.name ?? 'unknown',
495
+ arguments: parseToolArguments(part.functionCall?.args),
496
+ }));
497
+ const content = parts
498
+ .filter((part) => typeof part.text === 'string' && part.text.length > 0)
499
+ .map((part) => part.text)
500
+ .join('\n');
501
+ return {
502
+ content,
503
+ toolCalls,
504
+ usage: mapGeminiUsage(response.response.usageMetadata),
505
+ stopReason: candidate?.finishReason ?? 'STOP',
506
+ };
507
+ },
508
+ });
509
+ },
510
+ };
511
+ }
512
+ export async function createLlmClient(rateLimiter) {
513
+ const [llmConfig, apiKey] = await Promise.all([getLlmConfig(), getLlmApiKey()]);
514
+ if (!llmConfig) {
515
+ throw new Error('LLM provider is not configured. Run /login llm to configure it.');
516
+ }
517
+ if (!apiKey) {
518
+ throw new Error('LLM API key is not configured. Run /login llm to configure it.');
519
+ }
520
+ const Provider = await loadProvider(llmConfig.provider);
521
+ switch (llmConfig.provider) {
522
+ case 'anthropic':
523
+ return createAnthropicClient(Provider, apiKey, llmConfig.model, rateLimiter);
524
+ case 'openai':
525
+ return createOpenAiClient(Provider, apiKey, llmConfig.model, rateLimiter);
526
+ case 'gemini':
527
+ return createGeminiClient(Provider, apiKey, llmConfig.model, rateLimiter);
528
+ }
529
+ }
530
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { LlmClient } from './client.js';
2
+ import type { WorkspaceManifest } from '../manifest/types.js';
3
+ import type { McpClient } from '../mcp/client.js';
4
+ import type { ProjectGuard } from '../mcp/project-guard.js';
5
+ export interface OperationsContext {
6
+ command: string;
7
+ args: string[];
8
+ workspace: {
9
+ name: string;
10
+ packageManager: string;
11
+ railway?: {
12
+ projectId: string;
13
+ linkedAt: string;
14
+ };
15
+ apps: Record<string, {
16
+ type: string;
17
+ framework: string;
18
+ integrations: string[];
19
+ railway?: {
20
+ serviceId: string;
21
+ domain?: string;
22
+ };
23
+ }>;
24
+ packages: Record<string, {
25
+ active: boolean;
26
+ consumers: string[];
27
+ clients?: string[];
28
+ }>;
29
+ };
30
+ }
31
+ interface ExecuteOperationsOptions {
32
+ llmClient: LlmClient;
33
+ mcpClient: McpClient;
34
+ context: OperationsContext;
35
+ projectGuard?: ProjectGuard;
36
+ }
37
+ export declare function buildOperationsContext(command: string, args: string[], manifest: WorkspaceManifest): OperationsContext;
38
+ export declare function executeOperations(options: ExecuteOperationsOptions): Promise<string>;
39
+ export {};