@diegoaltoworks/chatter 0.18.0 → 0.20.0
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/README.md +2 -0
- package/dist/auth/apikeys.d.ts.map +1 -1
- package/dist/client/src/Chat.d.ts.map +1 -1
- package/dist/client/src/ChatBot.d.ts.map +1 -1
- package/dist/client/src/ChatButton.d.ts.map +1 -1
- package/dist/client/src/markdown.d.ts.map +1 -1
- package/dist/core/llm.d.ts +6 -3
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/pipeline.d.ts +33 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/prompts.d.ts.map +1 -1
- package/dist/core/retrieval.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11897 -1893
- package/dist/index.mjs +11894 -1893
- package/dist/mcp-server/cost-tracker.d.ts.map +1 -1
- package/dist/mcp-server/logger.d.ts.map +1 -1
- package/dist/mcp-server/rate-limiter.d.ts.map +1 -1
- package/dist/mcp-server.js +4 -2
- package/dist/mcp-server.mjs +4 -2
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/cors.d.ts.map +1 -1
- package/dist/middleware/jwt.d.ts.map +1 -1
- package/dist/middleware/ratelimit.d.ts.map +1 -1
- package/dist/middleware/referrer.d.ts.map +1 -1
- package/dist/middleware/session.d.ts.map +1 -1
- package/dist/routes/openai.d.ts +34 -0
- package/dist/routes/openai.d.ts.map +1 -0
- package/dist/routes/openai.test.d.ts +8 -0
- package/dist/routes/openai.test.d.ts.map +1 -0
- package/dist/routes/private.d.ts.map +1 -1
- package/dist/routes/public.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/static/chatter.js +1 -1
- package/dist/types.d.ts +13 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/mcp-server/cost-tracker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,QAAQ,CAgBX;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ
|
|
1
|
+
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/mcp-server/cost-tracker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,QAAQ,CAgBX;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ;IAEzC,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,SAAS;EAEZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/mcp-server/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErE;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAiB;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/mcp-server/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErE;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,YAAY,aAAa,UAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,EAG1D;IAED;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,WAAW,EAAE,EACnC,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAiCf;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,aAAa,UAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,SAAS,CAEvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/mcp-server/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;;;OAKG;
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/mcp-server/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;;;OAKG;IACH,YAAY,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAQ,EAI1C;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAoB1B;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK5B;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvB;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI,CAEf;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASrC;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAQ,GAAG,WAAW,GAAG,IAAI,CAEjG"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -53,14 +53,16 @@ function scrubOutput(text) {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// src/core/llm.ts
|
|
56
|
+
var DEFAULT_MODEL = "gpt-4o";
|
|
56
57
|
async function completeOnce({
|
|
57
58
|
client,
|
|
58
59
|
system,
|
|
59
60
|
messages,
|
|
60
|
-
temperature = 0.2
|
|
61
|
+
temperature = 0.2,
|
|
62
|
+
model = DEFAULT_MODEL
|
|
61
63
|
}) {
|
|
62
64
|
const res = await client.chat.completions.create({
|
|
63
|
-
model
|
|
65
|
+
model,
|
|
64
66
|
temperature,
|
|
65
67
|
messages: [{ role: "system", content: system }, ...messages]
|
|
66
68
|
});
|
package/dist/mcp-server.mjs
CHANGED
|
@@ -19,14 +19,16 @@ function scrubOutput(text) {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// src/core/llm.ts
|
|
22
|
+
var DEFAULT_MODEL = "gpt-4o";
|
|
22
23
|
async function completeOnce({
|
|
23
24
|
client,
|
|
24
25
|
system,
|
|
25
26
|
messages,
|
|
26
|
-
temperature = 0.2
|
|
27
|
+
temperature = 0.2,
|
|
28
|
+
model = DEFAULT_MODEL
|
|
27
29
|
}) {
|
|
28
30
|
const res = await client.chat.completions.create({
|
|
29
|
-
model
|
|
31
|
+
model,
|
|
30
32
|
temperature,
|
|
31
33
|
messages: [{ role: "system", content: system }, ...messages]
|
|
32
34
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,OAGjB,OAAO,QAAQ,IAAI;;8BAuC9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/middleware/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK1C;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/middleware/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK1C;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,oBAAqB,MAAM,EAAE,SAAe,OAAO,QAAQ,IAAI,kCAyB/E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/middleware/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAO9C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/middleware/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAO9C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,OAwBZ,OAAO,QAAQ,IAAI;;8BAa/D;AAGD,eAAO,MAAM,iBAAiB,MAhBe,OAAO,QAAQ,IAAI;;6BAgBS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ratelimit.d.ts","sourceRoot":"","sources":["../../src/middleware/ratelimit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAkB9C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"ratelimit.d.ts","sourceRoot":"","sources":["../../src/middleware/ratelimit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAkB9C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa;IAsBnD,WAAW,QACQ,OAAO,QAAQ,IAAI;;;IAwBtC,YAAY,QACO,OAAO,QAAQ,IAAI;;;EAQzC;AAID,eAAO,MAAM,WAAW,YArCD,OAAO,QAAQ,IAAI;;6BAqCW,CAAC;AACtD,eAAO,MAAM,YAAY,YAbF,OAAO,QAAQ,IAAI;;6BAaa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"referrer.d.ts","sourceRoot":"","sources":["../../src/middleware/referrer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"referrer.d.ts","sourceRoot":"","sources":["../../src/middleware/referrer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,OACrC,OAAO,QAAQ,IAAI;;8BA8CrC;AAGD,eAAO,MAAM,mBAAmB,wBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middleware/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG1C;;;GAGG;AACH,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middleware/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG1C;;;GAGG;AACH,wBAAgB,kBAAkB,QACf,OAAO,QAAQ,IAAI;;8BAkCrC;AAGD,eAAO,MAAM,uBAAuB,2BAAqB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI-compatible chat completions routes.
|
|
3
|
+
*
|
|
4
|
+
* Exposes the RAG pipeline over the standard OpenAI wire format so any
|
|
5
|
+
* off-the-shelf chat UI or SDK (deep-chat, assistant-ui, the official
|
|
6
|
+
* OpenAI clients, Vercel AI SDK, ...) can talk to Chatter without a
|
|
7
|
+
* bespoke adapter:
|
|
8
|
+
*
|
|
9
|
+
* POST /v1/chat/completions → public pipeline (API key)
|
|
10
|
+
* POST /api/private/v1/chat/completions → private pipeline (JWT)
|
|
11
|
+
*
|
|
12
|
+
* Both support `stream: true` (SSE `chat.completion.chunk` events ending
|
|
13
|
+
* with `data: [DONE]`) and non-streaming JSON responses.
|
|
14
|
+
*
|
|
15
|
+
* Hardening notes:
|
|
16
|
+
* - The upstream model is always the server-configured one; a client's
|
|
17
|
+
* `model` field is accepted for wire compatibility but never used to
|
|
18
|
+
* pick the upstream model (callers must not control spend).
|
|
19
|
+
* - Incoming `system`/`tool` messages are dropped: the system prompt is
|
|
20
|
+
* owned by the server (guardrails + persona + retrieved context).
|
|
21
|
+
* - The public route requires a real JWT API key via `Authorization:
|
|
22
|
+
* Bearer` or `x-api-key`; widget-only session/demo keys are not valid.
|
|
23
|
+
*/
|
|
24
|
+
import { Hono } from "hono";
|
|
25
|
+
import { type PipelineMessage } from "../core/pipeline";
|
|
26
|
+
import type { ServerDependencies } from "../types";
|
|
27
|
+
/**
|
|
28
|
+
* Normalize OpenAI-format messages to the pipeline format.
|
|
29
|
+
* Accepts string content and text content-part arrays; drops system/tool
|
|
30
|
+
* messages. Returns null when nothing usable remains.
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizeMessages(raw: unknown): PipelineMessage[] | null;
|
|
33
|
+
export declare function openaiRoutes(deps: ServerDependencies): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
34
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/routes/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,KAAK,eAAe,EAAkC,MAAM,kBAAkB,CAAC;AAGxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,EAAE,GAAG,IAAI,CA8BxE;AASD,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,8EAsHpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.test.d.ts","sourceRoot":"","sources":["../../src/routes/openai.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../../src/routes/private.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../../src/routes/private.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AASnD,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,8EAqDrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/routes/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/routes/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AASnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,8EA8DpD"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,uFAwJvD"}
|
package/dist/static/chatter.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";var Chatter=(()=>{var M=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var A=(n,t)=>{for(var e in t)M(n,e,{get:t[e],enumerable:!0})},_=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of O(t))!x.call(n,i)&&i!==e&&M(n,i,{get:()=>t[i],enumerable:!(s=B(t,i))||s.enumerable});return n};var P=n=>_(M({},"__esModule",{value:!0}),n);var U={};A(U,{Chat:()=>m,ChatBot:()=>p,ChatButton:()=>C});var p=class{constructor(t){if(!t.host)throw new Error("host is required");if(!t.mode||!["public","private"].includes(t.mode))throw new Error('mode must be either "public" or "private"');if(!t.apiKey)throw new Error("apiKey is required");if(t.mode==="private"&&!t.token)throw new Error("token is required for private mode");let e=t.host.trim();!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${e.startsWith("localhost")||e.startsWith("127.0.0.1")?"http://":"https://"}${e}`),this.baseUrl=e.replace(/\/$/,""),this.mode=t.mode,this.apiKey=t.apiKey,this.token=t.token,this.endpoint=`${this.baseUrl}/api/${this.mode}/chat`}getHeaders(t=!1){let e={"Content-Type":"application/json"};return this.apiKey&&(e["x-api-key"]=this.apiKey),this.mode==="private"&&this.token&&(e.Authorization=`Bearer ${this.token}`),t&&(e.Accept="text/event-stream"),e}async sendMessage(t){let e=await fetch(this.endpoint,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({message:t})});if(!e.ok){let i=await e.json().catch(()=>({error:"Unknown error"}));throw new Error(`API Error: ${i.error||e.statusText}`)}return(await e.json()).reply}async sendConversation(t){if(!Array.isArray(t)||t.length===0)throw new Error("messages must be a non-empty array");let e=await fetch(this.endpoint,{method:"POST",headers:this.getHeaders(),body:JSON.stringify({messages:t})});if(!e.ok){let i=await e.json().catch(()=>({error:"Unknown error"}));throw new Error(`API Error: ${i.error||e.statusText}`)}return(await e.json()).reply}async streamMessage(t,e){await this.stream({message:t},e)}async streamConversation(t,e){if(!Array.isArray(t)||t.length===0)throw new Error("messages must be a non-empty array");await this.stream({messages:t},e)}async stream(t,e){let{onChunk:s,onEnd:i,onError:r}=e;try{let o=await fetch(`${this.endpoint}?stream=1`,{method:"POST",headers:this.getHeaders(!0),body:JSON.stringify(t)});if(!o.ok){let a=await o.json().catch(()=>({error:"Unknown error"}));throw new Error(`API Error: ${a.error||o.statusText}`)}if(!o.body)throw new Error("Response body is null");let h=o.body.getReader(),d=new TextDecoder,c="";for(;;){let{done:a,value:g}=await h.read();if(a)break;c+=d.decode(g,{stream:!0});let f=c.split(`
|
|
2
|
-
`);c=f.pop()||"";for(let v of f)if(v.startsWith("data: ")){let y=v.slice(6);try{let E=JSON.parse(y);E.delta&&s(E.delta)}catch{}}else if(v.startsWith("event: end")){i&&i();return}}i&&i()}catch(o){if(r)r(o);else throw o}}};var q=/^(https?:|mailto:|\/|#)/i,k="CODE",S="ENDCODE";function l(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function I(n){let t=n.trim();return q.test(t)?
|
|
2
|
+
`);c=f.pop()||"";for(let v of f)if(v.startsWith("data: ")){let y=v.slice(6);try{let E=JSON.parse(y);E.delta&&s(E.delta)}catch{}}else if(v.startsWith("event: end")){i&&i();return}}i&&i()}catch(o){if(r)r(o);else throw o}}};var q=/^(https?:|mailto:|\/|#)/i,k="CODE",S="ENDCODE";function l(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function I(n){let t=n.trim();return q.test(t)?t:"#"}function L(n){let t=[],e=n.replace(/`([^`\n]+)`/g,(i,r)=>{let o=t.push(r)-1;return`${k}${o}${S}`});e=e.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"([^&]*)")?\)/g,(i,r,o,h)=>{let d=I(o),c=h?` title="${h}"`:"";return`<a href="${d}" target="_blank" rel="noopener noreferrer"${c}>${r}</a>`}),e=e.replace(/(\*\*|__)(?=\S)([\s\S]+?)(?<=\S)\1/g,"<strong>$2</strong>"),e=e.replace(/(?<!\*)\*(?!\*)(?=\S)([\s\S]+?)(?<=\S)\*(?!\*)/g,"<em>$1</em>"),e=e.replace(/(?<![A-Za-z0-9_])_(?=\S)([\s\S]+?)(?<=\S)_(?![A-Za-z0-9_])/g,"<em>$1</em>");let s=new RegExp(`${k}(\\d+)${S}`,"g");return e=e.replace(s,(i,r)=>`<code>${t[Number(r)]??""}</code>`),e}function $(n,t){if(n.length===0)return;let e=n.join(`
|
|
3
3
|
`),s=L(l(e)).replace(/\n/g,"<br>");t.push(`<p>${s}</p>`),n.length=0}function w(n,t){if(!n)return null;let e=n.items.map(s=>`<li>${L(l(s))}</li>`).join("");return t.push(`<${n.type}>${e}</${n.type}>`),null}function H(n,t){if(n.length===0)return;let e=T(n.join(`
|
|
4
4
|
`));t.push(`<blockquote>${e}</blockquote>`),n.length=0}function T(n){if(!n)return"";let t=n.replace(/\r\n?/g,`
|
|
5
5
|
`).split(`
|
package/dist/types.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ export interface ChatterConfig {
|
|
|
63
63
|
openai: {
|
|
64
64
|
/** OpenAI API key */
|
|
65
65
|
apiKey: string;
|
|
66
|
-
/** Model to use. Default: gpt-
|
|
66
|
+
/** Model to use. Default: gpt-4o */
|
|
67
67
|
model?: string;
|
|
68
68
|
};
|
|
69
69
|
database: {
|
|
@@ -109,6 +109,18 @@ export interface ChatterConfig {
|
|
|
109
109
|
enablePrivateChat?: boolean;
|
|
110
110
|
/** Enable demo routes (/demo/*). Default: false */
|
|
111
111
|
enableDemoRoutes?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Enable OpenAI-compatible endpoints (/v1/chat/completions and
|
|
114
|
+
* /api/private/v1/chat/completions) for third-party chat UIs and SDKs.
|
|
115
|
+
* Default: true
|
|
116
|
+
*/
|
|
117
|
+
enableOpenAICompat?: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Run fully headless: skip serving the built-in widget assets
|
|
120
|
+
* (chatter.js/chatter.css) and all static/demo pages. API routes only.
|
|
121
|
+
* Default: false
|
|
122
|
+
*/
|
|
123
|
+
headless?: boolean;
|
|
112
124
|
};
|
|
113
125
|
rateLimit?: {
|
|
114
126
|
/** Requests per minute for public endpoint. Default: 60 */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;IAGrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,MAAM,EAAE;QACN,qBAAqB;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;IAGrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,MAAM,EAAE;QACN,qBAAqB;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,oCAAoC;QACpC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAGF,QAAQ,EAAE;QACR,yBAAyB;QACzB,GAAG,EAAE,MAAM,CAAC;QACZ,uBAAuB;QACvB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAGF,IAAI,CAAC,EAAE;QACL,mDAAmD;QACnD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,qEAAqE;QACrE,aAAa,CAAC,EAAE;YACd,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;gBAAE,KAAK,EAAE,OAAO,CAAC;gBAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC3F,CAAC;QACF,6CAA6C;QAC7C,GAAG,CAAC,EAAE;YACJ,oCAAoC;YACpC,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,0BAA0B;YAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,4BAA4B;YAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,2CAA2C;YAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,0BAA0B;QAC1B,KAAK,CAAC,EAAE;YACN,4BAA4B;YAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,6BAA6B;YAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;IAGF,QAAQ,CAAC,EAAE;QACT,iDAAiD;QACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,kDAAkD;QAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,mDAAmD;QACnD,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B;;;;WAIG;QACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B;;;;WAIG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAGF,SAAS,CAAC,EAAE;QACV,2DAA2D;QAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,6DAA6D;QAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAGF,MAAM,CAAC,EAAE;QACP,iCAAiC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iCAAiC;QACjC,IAAI,CAAC,EAAE,OAAO,CAAC;QACf;;;;;;;WAOG;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IAGF,kDAAkD;IAClD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,4BAA4B;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,6BAA6B;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,+CAA+C;IAC/C,aAAa,CAAC,EAAE;QACd,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC3F,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,QAAQ,EAAE;QACR,uBAAuB;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,2CAA2C;QAC3C,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACrC,8BAA8B;QAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qBAAqB;IACrB,QAAQ,EAAE;QACR,uBAAuB;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,qBAAqB;QACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACrC,8BAA8B;QAC9B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diegoaltoworks/chatter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Embeddable AI chatbot framework with RAG, authentication, and customizable widgets",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -91,24 +91,24 @@
|
|
|
91
91
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
92
92
|
"hono": "^4.12.14",
|
|
93
93
|
"openai": "^7.3.0",
|
|
94
|
-
"zod": "^3.25.76"
|
|
94
|
+
"zod": "^3.25.76 || ^4.4.3"
|
|
95
95
|
},
|
|
96
96
|
"dependencies": {
|
|
97
97
|
"jose": "6.2.3"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
|
-
"@biomejs/biome": "2.5.
|
|
100
|
+
"@biomejs/biome": "2.5.6",
|
|
101
101
|
"@libsql/client": "0.17.4",
|
|
102
102
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
103
103
|
"@types/bun": "1.3.14",
|
|
104
|
-
"@types/node": "
|
|
104
|
+
"@types/node": "26.1.2",
|
|
105
105
|
"esbuild": "0.28.1",
|
|
106
|
-
"hono": "4.12.
|
|
106
|
+
"hono": "4.12.34",
|
|
107
107
|
"husky": "9.1.7",
|
|
108
|
-
"lint-staged": "
|
|
109
|
-
"openai": "
|
|
110
|
-
"typescript": "
|
|
111
|
-
"zod": "
|
|
108
|
+
"lint-staged": "17.3.0",
|
|
109
|
+
"openai": "7.3.0",
|
|
110
|
+
"typescript": "7.0.2",
|
|
111
|
+
"zod": "4.4.3"
|
|
112
112
|
},
|
|
113
113
|
"lint-staged": {
|
|
114
114
|
"*.{ts,js,json,md}": [
|