cnb-ai 1.0.0 → 1.0.3

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/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import { serve } from '@hono/node-server';
3
+ import { app, normalizedPrefix } from "./index.js";
4
+ // Start server
5
+ const port = process.env.PORT || 3000;
6
+ const displayPath = normalizedPrefix || '/';
7
+ console.log(`cnb-ai v1.0.3`);
8
+ console.log(`Server is running on http://localhost:${port}${displayPath}`);
9
+ console.log(`CNB_AI_PREFIX: ${normalizedPrefix || '(none)'}`);
10
+ serve({
11
+ fetch: app.fetch,
12
+ hostname: '0.0.0.0',
13
+ port: Number(port)
14
+ });
15
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,eAAe;AACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AACtC,MAAM,WAAW,GAAG,gBAAgB,IAAI,GAAG,CAAC;AAE5C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,GAAG,WAAW,EAAE,CAAC,CAAC;AAC3E,OAAO,CAAC,GAAG,CAAC,kBAAkB,gBAAgB,IAAI,QAAQ,EAAE,CAAC,CAAC;AAE9D,KAAK,CAAC;IACJ,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;CACnB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Hono } from 'hono';
2
+ declare const normalizedPrefix: string;
3
+ declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
4
+ export { app, normalizedPrefix };
5
+ export default app;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB5B,QAAA,MAAM,gBAAgB,QAAiC,CAAC;AAGxD,QAAA,MAAM,GAAG,4EAA8B,CAAC;AAyCxC,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;AACjC,eAAe,GAAG,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ import { Hono } from 'hono';
2
+ import { cors } from 'hono/cors';
3
+ import { logger } from 'hono/logger';
4
+ import { prettyJSON } from 'hono/pretty-json';
5
+ import v1 from "./v1/index.js";
6
+ // Get prefix path from environment variable (e.g., '/api-gateway')
7
+ const CNB_AI_PREFIX = process.env.CNB_AI_PREFIX || '';
8
+ // Normalize prefix path (ensure it starts with / and doesn't end with /)
9
+ const normalizePrefix = (prefix) => {
10
+ if (!prefix)
11
+ return '';
12
+ let normalized = prefix.startsWith('/') ? prefix : `/${prefix}`;
13
+ normalized = normalized.endsWith('/') ? normalized.slice(0, -1) : normalized;
14
+ return normalized;
15
+ };
16
+ const normalizedPrefix = normalizePrefix(CNB_AI_PREFIX);
17
+ // Create Hono app instance
18
+ const app = new Hono({ strict: false });
19
+ // Apply basePath if configured
20
+ const baseApp = normalizedPrefix ? app.basePath(normalizedPrefix) : app;
21
+ // Middleware
22
+ baseApp.use('*', logger());
23
+ baseApp.use('*', prettyJSON());
24
+ baseApp.use('*', cors());
25
+ // Root handler - returns API info
26
+ baseApp.get('/', (c) => {
27
+ return c.json({
28
+ name: 'cnb-ai',
29
+ version: '1.0.3',
30
+ status: 'running',
31
+ message: 'Welcome to cnb-ai API',
32
+ prefix: normalizedPrefix || null
33
+ });
34
+ });
35
+ // Health check handler
36
+ baseApp.get('/health', (c) => {
37
+ return c.json({ status: 'ok', timestamp: new Date().toISOString() });
38
+ });
39
+ // Mount API routes
40
+ baseApp.route('/v1', v1);
41
+ baseApp.route('/', v1);
42
+ // 404 handler
43
+ baseApp.notFound((c) => {
44
+ return c.json({ error: 'Not Found', status: 404 }, 404);
45
+ });
46
+ // Error handler
47
+ baseApp.onError((err, c) => {
48
+ console.error('Error:', err);
49
+ return c.json({ error: 'Internal Server Error', message: err.message, status: 500 }, 500);
50
+ });
51
+ export { app, normalizedPrefix };
52
+ export default app;
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,QAAA,MAAM,MAAM,4EAAa,CAAC;AA2C1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { Hono } from 'hono';
2
+ const router = new Hono();
3
+ // POST /chat/completions
4
+ router.post('/completions', async (c) => {
5
+ try {
6
+ console.log(process.env.CNB_REPO_SLUG);
7
+ const cnbRepoSlug = process.env.CNB_REPO_SLUG;
8
+ const cnbToken = process.env.CNB_TOKEN;
9
+ const cnbApiEndpoint = process.env.CNB_API_ENDPOINT;
10
+ if (!cnbRepoSlug || !cnbToken) {
11
+ return c.json({ error: 'Missing CNB_REPO_SLUG or CNB_TOKEN configuration' }, 500);
12
+ }
13
+ // Get request body
14
+ const body = await c.req.text();
15
+ const res = await fetch(`${cnbApiEndpoint}/${cnbRepoSlug}/-/ai/chat/completions`, {
16
+ method: 'POST',
17
+ headers: {
18
+ 'Content-Type': 'application/json',
19
+ 'Accept': 'application/json',
20
+ 'Authorization': `Bearer ${cnbToken}`,
21
+ },
22
+ body: body,
23
+ redirect: 'follow',
24
+ });
25
+ // Stream response back
26
+ return new Response(res.body, {
27
+ status: res.status,
28
+ headers: {
29
+ 'Content-Type': res.headers.get('Content-Type') || 'application/json',
30
+ 'Cache-Control': 'no-store',
31
+ },
32
+ });
33
+ }
34
+ catch (e) {
35
+ const error = e;
36
+ return c.json({ error: error.message || 'Internal error' }, 500);
37
+ }
38
+ });
39
+ export default router;
40
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,yBAAyB;AACzB,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QACvC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAEpD,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kDAAkD,EAAE,EAAE,GAAG,CAAC,CAAC;QACpF,CAAC;QAED,mBAAmB;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAEhC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,IAAI,WAAW,wBAAwB,EAAE;YAChF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,QAAQ,EAAE,kBAAkB;gBAC5B,eAAe,EAAE,UAAU,QAAQ,EAAE;aACtC;YACD,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,uBAAuB;QACvB,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE;gBACP,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kBAAkB;gBACrE,eAAe,EAAE,UAAU;aAC5B;SACF,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,CAAU,CAAC;QACzB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/routes/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,QAAA,MAAM,MAAM,4EAAa,CAAC;AAa1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Hono } from 'hono';
2
+ const router = new Hono();
3
+ // GET /models
4
+ router.get('/', (c) => {
5
+ return c.json({
6
+ data: [
7
+ { id: 'hunyuan-2.0-thinking-20251109', object: 'model', owned_by: 'CNB' },
8
+ { id: 'hunyuan-2.0-instruct-20251111', object: 'model', owned_by: 'CNB' }
9
+ ],
10
+ object: 'list'
11
+ });
12
+ });
13
+ export default router;
14
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/routes/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,cAAc;AACd,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;IACpB,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE,+BAA+B,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;YACzE,EAAE,EAAE,EAAE,+BAA+B,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC1E;QACD,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const api: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
3
+ export default api;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,QAAA,MAAM,GAAG,4EAA8B,CAAC;AAmBxC,eAAe,GAAG,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Hono } from 'hono';
2
+ import chatRouter from "../routes/chat.js";
3
+ import modelsRouter from "../routes/models.js";
4
+ // Create v1 API router
5
+ const api = new Hono({ strict: false });
6
+ // Mount routes
7
+ api.route('/chat', chatRouter);
8
+ api.route('/models', modelsRouter);
9
+ // API info
10
+ api.get('/', (c) => {
11
+ return c.json({
12
+ version: 'v1',
13
+ endpoints: {
14
+ chat: {
15
+ completions: '/chat/completions (POST)'
16
+ },
17
+ models: '/models (GET)'
18
+ }
19
+ });
20
+ });
21
+ export default api;
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAE/C,uBAAuB;AACvB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAExC,eAAe;AACf,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/B,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEnC,WAAW;AACX,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,OAAO,EAAE,IAAI;QACb,SAAS,EAAE;YACT,IAAI,EAAE;gBACJ,WAAW,EAAE,0BAA0B;aACxC;YACD,MAAM,EAAE,eAAe;SACxB;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,46 @@
1
1
  {
2
2
  "name": "cnb-ai",
3
- "version": "1.0.0",
4
- "description": "",
5
- "main": "index.js",
3
+ "version": "1.0.3",
4
+ "description": "CNB AI - AI powered API service",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "cnb-ai": "dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
6
14
  "scripts": {
15
+ "dev": "npx tsx watch src/index.ts",
16
+ "start": "npx tsx src/index.ts",
17
+ "build": "tsc",
18
+ "prepublishOnly": "npm run build",
7
19
  "test": "echo \"Error: no test specified\" && exit 1"
8
20
  },
9
- "keywords": [],
21
+ "keywords": [
22
+ "ai",
23
+ "cnb",
24
+ "api",
25
+ "chat",
26
+ "llm"
27
+ ],
10
28
  "author": "",
11
- "license": "ISC",
12
- "type": "commonjs"
29
+ "license": "MIT",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://cnb.cool/cnb/ai.git"
33
+ },
34
+ "engines": {
35
+ "node": ">=18.0.0"
36
+ },
37
+ "dependencies": {
38
+ "@hono/node-server": "^1.19.11",
39
+ "hono": "^4.12.5"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^25.3.5",
43
+ "tsx": "^4.21.0",
44
+ "typescript": "^5.9.3"
45
+ }
13
46
  }
package/index.js DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * cnb-ai - AI powered CLI tool
3
- */
4
-
5
- module.exports = {
6
- name: 'cnb-ai',
7
- version: '1.0.0',
8
- greet: function() {
9
- return 'Hello from cnb-ai!';
10
- }
11
- };