@kuckit/ai-module 3.0.7 → 3.0.8
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.
package/dist/server/module.js
CHANGED
|
@@ -88,6 +88,10 @@ const kuckitModule = defineKuckitModule({
|
|
|
88
88
|
description: "Streaming AI chat powered by Vercel AI SDK",
|
|
89
89
|
version: "0.1.0",
|
|
90
90
|
capabilities: ["nav.item", "api.public"],
|
|
91
|
+
postInstallMessage: `Add to your .env:
|
|
92
|
+
GOOGLE_GENERATIVE_AI_API_KEY=your-api-key-here
|
|
93
|
+
|
|
94
|
+
Get your API key from: https://aistudio.google.com/apikey`,
|
|
91
95
|
async register(ctx) {
|
|
92
96
|
const { container, config: moduleConfig } = ctx;
|
|
93
97
|
container.register({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","names":[],"sources":["../../src/server/use-cases/stream-chat.ts","../../src/server/validation/chat.schema.ts","../../src/server/router/ai.router.ts","../../src/server/module.ts"],"sourcesContent":["import { streamText, convertToModelMessages, type UIMessage } from 'ai'\nimport type { Logger } from '@kuckit/domain'\nimport type { LanguageModel } from 'ai'\n\nexport interface StreamChatDeps {\n\taiProvider: LanguageModel\n\tlogger: Logger\n}\n\nexport interface StreamChatInput {\n\tmessages: UIMessage[]\n}\n\nexport const makeStreamChat = ({ aiProvider, logger }: StreamChatDeps) => {\n\treturn async (input: StreamChatInput) => {\n\t\tlogger.debug('Starting AI chat stream', { messageCount: input.messages.length })\n\n\t\tconst result = streamText({\n\t\t\tmodel: aiProvider,\n\t\t\tmessages: convertToModelMessages(input.messages),\n\t\t})\n\n\t\treturn result\n\t}\n}\n\nexport type StreamChat = ReturnType<typeof makeStreamChat>\n","import { z } from 'zod'\n\nexport const messagePartSchema = z.discriminatedUnion('type', [\n\tz.object({ type: z.literal('text'), text: z.string(), state: z.string().optional() }),\n\tz.object({ type: z.literal('image'), image: z.string() }),\n\tz.object({ type: z.literal('step-start') }),\n])\n\nexport const uiMessageSchema = z.object({\n\tid: z.string(),\n\trole: z.enum(['user', 'assistant', 'system']),\n\tcontent: z.string().optional(),\n\tparts: z.array(messagePartSchema).optional(),\n})\n\nexport const chatRequestSchema = z.object({\n\tmessages: z.array(uiMessageSchema).min(1, 'At least one message is required'),\n})\n\nexport type ChatRequest = z.infer<typeof chatRequestSchema>\nexport type UIMessage = z.infer<typeof uiMessageSchema>\n","import { Router, type Request, type Response } from 'express'\nimport type { ScopedRequest } from '@kuckit/sdk'\nimport { chatRequestSchema } from '../validation/chat.schema'\nimport type { StreamChat } from '../use-cases/stream-chat'\nimport type { Logger } from '@kuckit/domain'\nimport type { LanguageModel, UIMessage } from 'ai'\n\ninterface AICradle {\n\tstreamChat: StreamChat\n\trequestLogger: Logger\n\taiProvider: LanguageModel\n\tsession?: { user?: { id?: string } } | null\n}\n\nexport const createAiRouter = (): Router => {\n\tconst router = Router()\n\n\trouter.post('/chat', async (req: Request, res: Response) => {\n\t\tconst scope = (req as ScopedRequest<AICradle>).scope\n\t\tif (!scope) {\n\t\t\treturn res.status(500).json({ error: 'Internal server error' })\n\t\t}\n\t\tconst { session, requestLogger: logger, streamChat } = scope.cradle\n\n\t\t// Auth check - require authenticated user\n\t\tif (!session?.user?.id) {\n\t\t\tlogger.warn('Unauthenticated AI chat request')\n\t\t\tres.status(401).json({ error: 'Authentication required' })\n\t\t\treturn\n\t\t}\n\n\t\t// Validate input\n\t\tconst parseResult = chatRequestSchema.safeParse(req.body)\n\t\tif (!parseResult.success) {\n\t\t\tlogger.warn('Invalid AI chat request', { errors: parseResult.error.flatten() })\n\t\t\tres.status(400).json({\n\t\t\t\terror: 'Invalid request',\n\t\t\t\tdetails: parseResult.error.flatten(),\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst { messages } = parseResult.data\n\t\t\tconst result = await streamChat({ messages: messages as UIMessage[] })\n\t\t\tresult.pipeUIMessageStreamToResponse(res)\n\t\t} catch (error) {\n\t\t\t// Only send error if headers not sent (streaming may have started)\n\t\t\tif (!res.headersSent) {\n\t\t\t\tlogger.error('AI chat failed', { error })\n\t\t\t\tres.status(500).json({ error: 'AI chat failed' })\n\t\t\t} else {\n\t\t\t\tlogger.error('AI chat stream failed after headers sent', { error })\n\t\t\t}\n\t\t}\n\t})\n\n\treturn router\n}\n","import { defineKuckitModule, asFunction, type KuckitModuleContext } from '@kuckit/sdk'\nimport { makeStreamChat } from './use-cases/stream-chat'\nimport { createAiRouter } from './router/ai.router'\n\nexport interface AIModuleConfig {\n\t/** Optional API key override. Falls back to GOOGLE_GENERATIVE_AI_API_KEY env var */\n\tapiKey?: string\n\t/** Model ID to use. Defaults to 'gemini-2.5-flash' */\n\tmodel?: string\n}\n\nexport const kuckitModule = defineKuckitModule<AIModuleConfig>({\n\tid: 'kuckit.ai',\n\tdisplayName: 'AI Chat',\n\tdescription: 'Streaming AI chat powered by Vercel AI SDK',\n\tversion: '0.1.0',\n\tcapabilities: ['nav.item', 'api.public'],\n\n\tasync register(ctx: KuckitModuleContext<AIModuleConfig>) {\n\t\tconst { container, config: moduleConfig } = ctx\n\n\t\tcontainer.register({\n\t\t\t// AI provider - registered by this module, not core\n\t\t\taiProvider: asFunction(() => {\n\t\t\t\tconst apiKey = moduleConfig?.apiKey ?? process.env.GOOGLE_GENERATIVE_AI_API_KEY\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'AI module requires GOOGLE_GENERATIVE_AI_API_KEY environment variable or apiKey in module config'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// Lazy import to avoid loading @ai-sdk/google at module load time\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-require-imports\n\t\t\t\tconst { google } = require('@ai-sdk/google')\n\t\t\t\tconst modelId = moduleConfig?.model ?? 'gemini-2.5-flash'\n\t\t\t\treturn google(modelId)\n\t\t\t}).singleton(),\n\n\t\t\tstreamChat: asFunction(({ aiProvider, logger }) =>\n\t\t\t\tmakeStreamChat({ aiProvider, logger })\n\t\t\t).scoped(),\n\t\t})\n\t},\n\n\tregisterApi(ctx) {\n\t\tconst aiRouter = createAiRouter()\n\n\t\tctx.addApiRegistration({\n\t\t\ttype: 'rest-router',\n\t\t\tname: 'ai',\n\t\t\trouter: aiRouter,\n\t\t})\n\t},\n\n\tasync onBootstrap(ctx: KuckitModuleContext<AIModuleConfig>) {\n\t\tconst { container } = ctx\n\t\tconst logger = container.resolve('logger')\n\t\tlogger.info('AI Chat module initialized')\n\t},\n\n\tasync onShutdown(ctx: KuckitModuleContext<AIModuleConfig>) {\n\t\tconst { container } = ctx\n\t\tconst logger = container.resolve('logger')\n\t\tlogger.info('AI Chat module shutting down')\n\t},\n})\n"],"mappings":";;;;;;;;;;;AAaA,MAAa,kBAAkB,EAAE,YAAY,aAA6B;AACzE,QAAO,OAAO,UAA2B;AACxC,SAAO,MAAM,2BAA2B,EAAE,cAAc,MAAM,SAAS,QAAQ,CAAC;AAOhF,SALe,WAAW;GACzB,OAAO;GACP,UAAU,uBAAuB,MAAM,SAAS;GAChD,CAAC;;;;;;AClBJ,MAAa,oBAAoB,EAAE,mBAAmB,QAAQ;CAC7D,EAAE,OAAO;EAAE,MAAM,EAAE,QAAQ,OAAO;EAAE,MAAM,EAAE,QAAQ;EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU;EAAE,CAAC;CACrF,EAAE,OAAO;EAAE,MAAM,EAAE,QAAQ,QAAQ;EAAE,OAAO,EAAE,QAAQ;EAAE,CAAC;CACzD,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,aAAa,EAAE,CAAC;CAC3C,CAAC;AAEF,MAAa,kBAAkB,EAAE,OAAO;CACvC,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,KAAK;EAAC;EAAQ;EAAa;EAAS,CAAC;CAC7C,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,OAAO,EAAE,MAAM,kBAAkB,CAAC,UAAU;CAC5C,CAAC;AAEF,MAAa,oBAAoB,EAAE,OAAO,EACzC,UAAU,EAAE,MAAM,gBAAgB,CAAC,IAAI,GAAG,mCAAmC,EAC7E,CAAC;;;;ACHF,MAAa,uBAA+B;CAC3C,MAAM,SAAS,QAAQ;AAEvB,QAAO,KAAK,SAAS,OAAO,KAAc,QAAkB;EAC3D,MAAM,QAAS,IAAgC;AAC/C,MAAI,CAAC,MACJ,QAAO,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,yBAAyB,CAAC;EAEhE,MAAM,EAAE,SAAS,eAAe,QAAQ,eAAe,MAAM;AAG7D,MAAI,CAAC,SAAS,MAAM,IAAI;AACvB,UAAO,KAAK,kCAAkC;AAC9C,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,2BAA2B,CAAC;AAC1D;;EAID,MAAM,cAAc,kBAAkB,UAAU,IAAI,KAAK;AACzD,MAAI,CAAC,YAAY,SAAS;AACzB,UAAO,KAAK,2BAA2B,EAAE,QAAQ,YAAY,MAAM,SAAS,EAAE,CAAC;AAC/E,OAAI,OAAO,IAAI,CAAC,KAAK;IACpB,OAAO;IACP,SAAS,YAAY,MAAM,SAAS;IACpC,CAAC;AACF;;AAGD,MAAI;GACH,MAAM,EAAE,aAAa,YAAY;AAEjC,IADe,MAAM,WAAW,EAAY,UAAyB,CAAC,EAC/D,8BAA8B,IAAI;WACjC,OAAO;AAEf,OAAI,CAAC,IAAI,aAAa;AACrB,WAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC;AACzC,QAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,kBAAkB,CAAC;SAEjD,QAAO,MAAM,4CAA4C,EAAE,OAAO,CAAC;;GAGpE;AAEF,QAAO;;;;;AC9CR,MAAa,eAAe,mBAAmC;CAC9D,IAAI;CACJ,aAAa;CACb,aAAa;CACb,SAAS;CACT,cAAc,CAAC,YAAY,aAAa;
|
|
1
|
+
{"version":3,"file":"module.js","names":[],"sources":["../../src/server/use-cases/stream-chat.ts","../../src/server/validation/chat.schema.ts","../../src/server/router/ai.router.ts","../../src/server/module.ts"],"sourcesContent":["import { streamText, convertToModelMessages, type UIMessage } from 'ai'\nimport type { Logger } from '@kuckit/domain'\nimport type { LanguageModel } from 'ai'\n\nexport interface StreamChatDeps {\n\taiProvider: LanguageModel\n\tlogger: Logger\n}\n\nexport interface StreamChatInput {\n\tmessages: UIMessage[]\n}\n\nexport const makeStreamChat = ({ aiProvider, logger }: StreamChatDeps) => {\n\treturn async (input: StreamChatInput) => {\n\t\tlogger.debug('Starting AI chat stream', { messageCount: input.messages.length })\n\n\t\tconst result = streamText({\n\t\t\tmodel: aiProvider,\n\t\t\tmessages: convertToModelMessages(input.messages),\n\t\t})\n\n\t\treturn result\n\t}\n}\n\nexport type StreamChat = ReturnType<typeof makeStreamChat>\n","import { z } from 'zod'\n\nexport const messagePartSchema = z.discriminatedUnion('type', [\n\tz.object({ type: z.literal('text'), text: z.string(), state: z.string().optional() }),\n\tz.object({ type: z.literal('image'), image: z.string() }),\n\tz.object({ type: z.literal('step-start') }),\n])\n\nexport const uiMessageSchema = z.object({\n\tid: z.string(),\n\trole: z.enum(['user', 'assistant', 'system']),\n\tcontent: z.string().optional(),\n\tparts: z.array(messagePartSchema).optional(),\n})\n\nexport const chatRequestSchema = z.object({\n\tmessages: z.array(uiMessageSchema).min(1, 'At least one message is required'),\n})\n\nexport type ChatRequest = z.infer<typeof chatRequestSchema>\nexport type UIMessage = z.infer<typeof uiMessageSchema>\n","import { Router, type Request, type Response } from 'express'\nimport type { ScopedRequest } from '@kuckit/sdk'\nimport { chatRequestSchema } from '../validation/chat.schema'\nimport type { StreamChat } from '../use-cases/stream-chat'\nimport type { Logger } from '@kuckit/domain'\nimport type { LanguageModel, UIMessage } from 'ai'\n\ninterface AICradle {\n\tstreamChat: StreamChat\n\trequestLogger: Logger\n\taiProvider: LanguageModel\n\tsession?: { user?: { id?: string } } | null\n}\n\nexport const createAiRouter = (): Router => {\n\tconst router = Router()\n\n\trouter.post('/chat', async (req: Request, res: Response) => {\n\t\tconst scope = (req as ScopedRequest<AICradle>).scope\n\t\tif (!scope) {\n\t\t\treturn res.status(500).json({ error: 'Internal server error' })\n\t\t}\n\t\tconst { session, requestLogger: logger, streamChat } = scope.cradle\n\n\t\t// Auth check - require authenticated user\n\t\tif (!session?.user?.id) {\n\t\t\tlogger.warn('Unauthenticated AI chat request')\n\t\t\tres.status(401).json({ error: 'Authentication required' })\n\t\t\treturn\n\t\t}\n\n\t\t// Validate input\n\t\tconst parseResult = chatRequestSchema.safeParse(req.body)\n\t\tif (!parseResult.success) {\n\t\t\tlogger.warn('Invalid AI chat request', { errors: parseResult.error.flatten() })\n\t\t\tres.status(400).json({\n\t\t\t\terror: 'Invalid request',\n\t\t\t\tdetails: parseResult.error.flatten(),\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst { messages } = parseResult.data\n\t\t\tconst result = await streamChat({ messages: messages as UIMessage[] })\n\t\t\tresult.pipeUIMessageStreamToResponse(res)\n\t\t} catch (error) {\n\t\t\t// Only send error if headers not sent (streaming may have started)\n\t\t\tif (!res.headersSent) {\n\t\t\t\tlogger.error('AI chat failed', { error })\n\t\t\t\tres.status(500).json({ error: 'AI chat failed' })\n\t\t\t} else {\n\t\t\t\tlogger.error('AI chat stream failed after headers sent', { error })\n\t\t\t}\n\t\t}\n\t})\n\n\treturn router\n}\n","import { defineKuckitModule, asFunction, type KuckitModuleContext } from '@kuckit/sdk'\nimport { makeStreamChat } from './use-cases/stream-chat'\nimport { createAiRouter } from './router/ai.router'\n\nexport interface AIModuleConfig {\n\t/** Optional API key override. Falls back to GOOGLE_GENERATIVE_AI_API_KEY env var */\n\tapiKey?: string\n\t/** Model ID to use. Defaults to 'gemini-2.5-flash' */\n\tmodel?: string\n}\n\nexport const kuckitModule = defineKuckitModule<AIModuleConfig>({\n\tid: 'kuckit.ai',\n\tdisplayName: 'AI Chat',\n\tdescription: 'Streaming AI chat powered by Vercel AI SDK',\n\tversion: '0.1.0',\n\tcapabilities: ['nav.item', 'api.public'],\n\tpostInstallMessage: `Add to your .env:\n GOOGLE_GENERATIVE_AI_API_KEY=your-api-key-here\n\nGet your API key from: https://aistudio.google.com/apikey`,\n\n\tasync register(ctx: KuckitModuleContext<AIModuleConfig>) {\n\t\tconst { container, config: moduleConfig } = ctx\n\n\t\tcontainer.register({\n\t\t\t// AI provider - registered by this module, not core\n\t\t\taiProvider: asFunction(() => {\n\t\t\t\tconst apiKey = moduleConfig?.apiKey ?? process.env.GOOGLE_GENERATIVE_AI_API_KEY\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'AI module requires GOOGLE_GENERATIVE_AI_API_KEY environment variable or apiKey in module config'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t// Lazy import to avoid loading @ai-sdk/google at module load time\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-require-imports\n\t\t\t\tconst { google } = require('@ai-sdk/google')\n\t\t\t\tconst modelId = moduleConfig?.model ?? 'gemini-2.5-flash'\n\t\t\t\treturn google(modelId)\n\t\t\t}).singleton(),\n\n\t\t\tstreamChat: asFunction(({ aiProvider, logger }) =>\n\t\t\t\tmakeStreamChat({ aiProvider, logger })\n\t\t\t).scoped(),\n\t\t})\n\t},\n\n\tregisterApi(ctx) {\n\t\tconst aiRouter = createAiRouter()\n\n\t\tctx.addApiRegistration({\n\t\t\ttype: 'rest-router',\n\t\t\tname: 'ai',\n\t\t\trouter: aiRouter,\n\t\t})\n\t},\n\n\tasync onBootstrap(ctx: KuckitModuleContext<AIModuleConfig>) {\n\t\tconst { container } = ctx\n\t\tconst logger = container.resolve('logger')\n\t\tlogger.info('AI Chat module initialized')\n\t},\n\n\tasync onShutdown(ctx: KuckitModuleContext<AIModuleConfig>) {\n\t\tconst { container } = ctx\n\t\tconst logger = container.resolve('logger')\n\t\tlogger.info('AI Chat module shutting down')\n\t},\n})\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kuckit/ai-module",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.8",
|
|
4
4
|
"description": "AI chat streaming module for Kuckit applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server/module.js",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"prepublishOnly": "npm run build && node ../../scripts/resolve-workspace-protocols.cjs && node ../../scripts/check-no-workspace-protocol.cjs"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@kuckit/domain": "^3.0.
|
|
34
|
-
"@kuckit/sdk": "^3.0.
|
|
35
|
-
"@kuckit/sdk-react": "^3.0.
|
|
33
|
+
"@kuckit/domain": "^3.0.8",
|
|
34
|
+
"@kuckit/sdk": "^3.0.8",
|
|
35
|
+
"@kuckit/sdk-react": "^3.0.8",
|
|
36
36
|
"react": "^18 || ^19",
|
|
37
37
|
"typescript": "^5",
|
|
38
38
|
"express": "^4 || ^5"
|