bruce-models 6.8.1 → 6.8.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/bruce-models.es5.js +284 -2
- package/dist/bruce-models.es5.js.map +1 -1
- package/dist/bruce-models.umd.js +285 -1
- package/dist/bruce-models.umd.js.map +1 -1
- package/dist/lib/bruce-models.js +3 -1
- package/dist/lib/bruce-models.js.map +1 -1
- package/dist/lib/entity/entity-coords.js +1 -0
- package/dist/lib/entity/entity-coords.js.map +1 -1
- package/dist/lib/mcp/navigator-chat.js +135 -0
- package/dist/lib/mcp/navigator-chat.js.map +1 -0
- package/dist/lib/mcp/navigator-mcp-websocket.js +172 -0
- package/dist/lib/mcp/navigator-mcp-websocket.js.map +1 -0
- package/dist/types/bruce-models.d.ts +3 -1
- package/dist/types/mcp/navigator-chat.d.ts +66 -0
- package/dist/types/mcp/navigator-mcp-websocket.d.ts +60 -0
- package/package.json +3 -3
package/dist/lib/bruce-models.js
CHANGED
|
@@ -113,6 +113,8 @@ __exportStar(require("./environment"), exports);
|
|
|
113
113
|
__exportStar(require("./data-source/data-source"), exports);
|
|
114
114
|
__exportStar(require("./scenario/scenario"), exports);
|
|
115
115
|
__exportStar(require("./tracking/tracking"), exports);
|
|
116
|
+
__exportStar(require("./mcp/navigator-chat"), exports);
|
|
117
|
+
__exportStar(require("./mcp/navigator-mcp-websocket"), exports);
|
|
116
118
|
// This is updated with the package.json version on build.
|
|
117
|
-
exports.VERSION = "6.8.
|
|
119
|
+
exports.VERSION = "6.8.3";
|
|
118
120
|
//# sourceMappingURL=bruce-models.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bruce-models.js","sourceRoot":"","sources":["../../src/bruce-models.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,8DAA4C;AAE5C,4DAA0C;AAC1C,oEAAkD;AAElD,qDAAmC;AACnC,4CAA0B;AAC1B,kDAAgC;AAChC,mDAAiC;AACjC,qDAAmC;AACnC,oDAAkC;AAElC,0DAAwC;AAExC,kDAAgC;AAChC,uDAAqC;AACrC,iDAA+B;AAC/B,kDAAgC;AAChC,kDAAgC;AAChC,iDAA+B;AAC/B,iDAA+B;AAC/B,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,qDAAmC;AACnC,+CAA6B;AAC7B,0DAAwC;AACxC,qDAAmC;AACnC,mDAAiC;AACjC,mDAAiC;AAEjC,kEAAgD;AAChD,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,sDAAoC;AACpC,+DAA6C;AAC7C,gEAA8C;AAC9C,2DAAyC;AACzC,yDAAuC;AACvC,sDAAoC;AACpC,uDAAqC;AACrC,kDAAgC;AAChC,yDAAuC;AACvC,4DAA0C;AAC1C,gEAA8C;AAC9C,6DAA2C;AAE3C,8DAA4C;AAE5C,4DAA0C;AAE1C,4DAA0C;AAE1C,yDAAuC;AACvC,sDAAoC;AACpC,kEAAgD;AAChD,yDAAuC;AACvC,qEAAmD;AACnD,8DAA4C;AAC5C,mEAAiD;AACjD,gEAA8C;AAC9C,yEAAuD;AACvD,wEAAsD;AAEtD,0DAAwC;AACxC,0DAAwC;AACxC,4DAA0C;AAC1C,2DAAyC;AACzC,+DAA6C;AAE7C,gDAA8B;AAE9B,oDAAkC;AAElC,oDAAkC;AAClC,iDAA+B;AAC/B,oDAAkC;AAClC,8CAA4B;AAC5B,yDAAuC;AAEvC,oDAAkC;AAClC,6DAA2C;AAC3C,2DAAyC;AACzC,6DAA2C;AAC3C,2DAAyC;AACzC,6DAA2C;AAC3C,yDAAuC;AAEvC,uDAAqC;AACrC,oDAAkC;AAClC,sDAAoC;AACpC,oDAAkC;AAClC,mDAAiC;AAEjC,sDAAoC;AACpC,4DAA0C;AAE1C,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,0DAAwC;AACxC,sDAAoC;AACpC,yDAAuC;AAEvC,sDAAoC;AACpC,sDAAoC;AAEpC,kDAAgC;AAChC,sDAAoC;AACpC,kDAAgC;AAChC,gDAA8B;AAC9B,4DAA0C;AAC1C,sDAAoC;AACpC,sDAAoC;
|
|
1
|
+
{"version":3,"file":"bruce-models.js","sourceRoot":"","sources":["../../src/bruce-models.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,8DAA4C;AAE5C,4DAA0C;AAC1C,oEAAkD;AAElD,qDAAmC;AACnC,4CAA0B;AAC1B,kDAAgC;AAChC,mDAAiC;AACjC,qDAAmC;AACnC,oDAAkC;AAElC,0DAAwC;AAExC,kDAAgC;AAChC,uDAAqC;AACrC,iDAA+B;AAC/B,kDAAgC;AAChC,kDAAgC;AAChC,iDAA+B;AAC/B,iDAA+B;AAC/B,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,qDAAmC;AACnC,+CAA6B;AAC7B,0DAAwC;AACxC,qDAAmC;AACnC,mDAAiC;AACjC,mDAAiC;AAEjC,kEAAgD;AAChD,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,sDAAoC;AACpC,+DAA6C;AAC7C,gEAA8C;AAC9C,2DAAyC;AACzC,yDAAuC;AACvC,sDAAoC;AACpC,uDAAqC;AACrC,kDAAgC;AAChC,yDAAuC;AACvC,4DAA0C;AAC1C,gEAA8C;AAC9C,6DAA2C;AAE3C,8DAA4C;AAE5C,4DAA0C;AAE1C,4DAA0C;AAE1C,yDAAuC;AACvC,sDAAoC;AACpC,kEAAgD;AAChD,yDAAuC;AACvC,qEAAmD;AACnD,8DAA4C;AAC5C,mEAAiD;AACjD,gEAA8C;AAC9C,yEAAuD;AACvD,wEAAsD;AAEtD,0DAAwC;AACxC,0DAAwC;AACxC,4DAA0C;AAC1C,2DAAyC;AACzC,+DAA6C;AAE7C,gDAA8B;AAE9B,oDAAkC;AAElC,oDAAkC;AAClC,iDAA+B;AAC/B,oDAAkC;AAClC,8CAA4B;AAC5B,yDAAuC;AAEvC,oDAAkC;AAClC,6DAA2C;AAC3C,2DAAyC;AACzC,6DAA2C;AAC3C,2DAAyC;AACzC,6DAA2C;AAC3C,yDAAuC;AAEvC,uDAAqC;AACrC,oDAAkC;AAClC,sDAAoC;AACpC,oDAAkC;AAClC,mDAAiC;AAEjC,sDAAoC;AACpC,4DAA0C;AAE1C,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,0DAAwC;AACxC,sDAAoC;AACpC,yDAAuC;AAEvC,sDAAoC;AACpC,sDAAoC;AAEpC,kDAAgC;AAChC,sDAAoC;AACpC,kDAAgC;AAChC,gDAA8B;AAC9B,4DAA0C;AAC1C,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,gEAA8C;AAE9C,0DAA0D;AAC7C,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-coords.js","sourceRoot":"","sources":["../../../src/entity/entity-coords.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAiC;AAIjC,gDAA6C;AAC7C,mDAA+C;AAE/C;;GAEG;AACH,IAAiB,YAAY,
|
|
1
|
+
{"version":3,"file":"entity-coords.js","sourceRoot":"","sources":["../../../src/entity/entity-coords.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NavigatorChatClient = void 0;
|
|
13
|
+
const DEFAULT_BASE_URL = "http://localhost:8888";
|
|
14
|
+
/**
|
|
15
|
+
* Lightweight client for the Navigator MCP chat HTTP endpoints.
|
|
16
|
+
* Encapsulates header construction and error handling so UI layers
|
|
17
|
+
* can focus on presentation logic.
|
|
18
|
+
*/
|
|
19
|
+
class NavigatorChatClient {
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
this.baseUrl = (_a = options.baseUrl) !== null && _a !== void 0 ? _a : DEFAULT_BASE_URL;
|
|
23
|
+
this.fetchImpl = options.fetchImpl;
|
|
24
|
+
this.defaultHeaders = (_b = options.defaultHeaders) !== null && _b !== void 0 ? _b : {};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Ask a question via the MCP chat endpoint.
|
|
28
|
+
*/
|
|
29
|
+
ask(request, auth) {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
if (!request.question || !request.question.trim()) {
|
|
33
|
+
throw new Error("NavigatorChatClient.ask requires a non-empty question.");
|
|
34
|
+
}
|
|
35
|
+
const response = yield this.fetchFromEndpoint("/chat", {
|
|
36
|
+
method: "POST",
|
|
37
|
+
body: JSON.stringify({
|
|
38
|
+
question: request.question,
|
|
39
|
+
context: request.context,
|
|
40
|
+
history: request.history
|
|
41
|
+
}),
|
|
42
|
+
headers: {
|
|
43
|
+
"Content-Type": "application/json"
|
|
44
|
+
}
|
|
45
|
+
}, auth);
|
|
46
|
+
const data = yield this.parseJson(response);
|
|
47
|
+
const text = (_b = (_a = data === null || data === void 0 ? void 0 : data.Text) !== null && _a !== void 0 ? _a : data === null || data === void 0 ? void 0 : data.text) !== null && _b !== void 0 ? _b : "";
|
|
48
|
+
return {
|
|
49
|
+
text,
|
|
50
|
+
raw: data
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Clear chat history stored on the MCP server.
|
|
56
|
+
*/
|
|
57
|
+
clear(auth) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
yield this.fetchFromEndpoint("/clear", {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: {
|
|
62
|
+
"Content-Type": "application/json"
|
|
63
|
+
}
|
|
64
|
+
}, auth);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build a fully-qualified endpoint relative to the configured base URL.
|
|
69
|
+
*/
|
|
70
|
+
buildUrl(path) {
|
|
71
|
+
if (path.startsWith("http://") || path.startsWith("https://")) {
|
|
72
|
+
return path;
|
|
73
|
+
}
|
|
74
|
+
if (!path.startsWith("/")) {
|
|
75
|
+
path = `/${path}`;
|
|
76
|
+
}
|
|
77
|
+
return `${this.baseUrl}${path}`;
|
|
78
|
+
}
|
|
79
|
+
fetchFromEndpoint(path, init, auth) {
|
|
80
|
+
var _a;
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
const fetchImpl = this.resolveFetch();
|
|
83
|
+
const headers = Object.assign(Object.assign({}, this.defaultHeaders), ((_a = init.headers) !== null && _a !== void 0 ? _a : {}));
|
|
84
|
+
if (auth === null || auth === void 0 ? void 0 : auth.accountId) {
|
|
85
|
+
headers["X-Account-Id"] = auth.accountId;
|
|
86
|
+
}
|
|
87
|
+
if (auth === null || auth === void 0 ? void 0 : auth.sessionId) {
|
|
88
|
+
headers["X-Session-Id"] = auth.sessionId;
|
|
89
|
+
}
|
|
90
|
+
const response = yield fetchImpl(this.buildUrl(path), Object.assign(Object.assign({}, init), { headers }));
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
const message = yield this.safeReadResponseText(response);
|
|
93
|
+
throw new Error(`Navigator chat request failed (${response.status} ${response.statusText}): ${message}`);
|
|
94
|
+
}
|
|
95
|
+
return response;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
resolveFetch() {
|
|
99
|
+
if (this.fetchImpl) {
|
|
100
|
+
return this.fetchImpl;
|
|
101
|
+
}
|
|
102
|
+
if (typeof fetch !== "undefined") {
|
|
103
|
+
return fetch;
|
|
104
|
+
}
|
|
105
|
+
// Lazy-load isomorphic-fetch for environments without a native fetch.
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
107
|
+
const isomorphicFetch = require("isomorphic-fetch");
|
|
108
|
+
if (typeof isomorphicFetch !== "function") {
|
|
109
|
+
throw new Error("isomorphic-fetch did not return a fetch implementation.");
|
|
110
|
+
}
|
|
111
|
+
return isomorphicFetch;
|
|
112
|
+
}
|
|
113
|
+
parseJson(response) {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
try {
|
|
116
|
+
return yield response.json();
|
|
117
|
+
}
|
|
118
|
+
catch (_a) {
|
|
119
|
+
return {};
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
safeReadResponseText(response) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
try {
|
|
126
|
+
return yield response.text();
|
|
127
|
+
}
|
|
128
|
+
catch (_a) {
|
|
129
|
+
return "";
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.NavigatorChatClient = NavigatorChatClient;
|
|
135
|
+
//# sourceMappingURL=navigator-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator-chat.js","sourceRoot":"","sources":["../../../src/mcp/navigator-chat.ts"],"names":[],"mappings":";;;;;;;;;;;;AA6CA,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD;;;;GAIG;AACH,MAAa,mBAAmB;IAK5B,YAAY,UAAsC,EAAE;;QAChD,IAAI,CAAC,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,gBAAgB,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,MAAA,OAAO,CAAC,cAAc,mCAAI,EAAE,CAAC;IACvD,CAAC;IAED;;OAEG;IACU,GAAG,CAAC,OAA6B,EAAE,IAAwB;;;YACpE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;gBAC/C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;aAC7E;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;iBAC3B,CAAC;gBACF,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;aACJ,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,EAAE,CAAC;YAE5C,OAAO;gBACH,IAAI;gBACJ,GAAG,EAAE,IAAI;aACZ,CAAC;;KACL;IAED;;OAEG;IACU,KAAK,CAAC,IAAwB;;YACvC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;gBACnC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;iBACrC;aACJ,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;KAAA;IAED;;OAEG;IACK,QAAQ,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YAC3D,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;SACrB;QACD,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;IACpC,CAAC;IAEa,iBAAiB,CAC3B,IAAY,EACZ,IAAiB,EACjB,IAAwB;;;YAExB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,OAAO,mCACN,IAAI,CAAC,cAAc,GACnB,CAAC,MAAA,IAAI,CAAC,OAAiC,mCAAI,EAAE,CAAC,CACpD,CAAC;YAEF,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,EAAE;gBACjB,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;aAC5C;YACD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,EAAE;gBACjB,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;aAC5C;YAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kCAC7C,IAAI,KACP,OAAO,IACT,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBACd,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,OAAO,EAAE,CAAC,CAAC;aAC5G;YAED,OAAO,QAAQ,CAAC;;KACnB;IAEO,YAAY;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QACD,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAC9B,OAAO,KAAK,CAAC;SAChB;QAED,sEAAsE;QACtE,8DAA8D;QAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpD,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;SAC9E;QACD,OAAO,eAA+B,CAAC;IAC3C,CAAC;IAEa,SAAS,CAAC,QAAkB;;YACtC,IAAI;gBACA,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;aAChC;YACD,WAAM;gBACF,OAAO,EAAE,CAAC;aACb;QACL,CAAC;KAAA;IAEa,oBAAoB,CAAC,QAAkB;;YACjD,IAAI;gBACA,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;aAChC;YACD,WAAM;gBACF,OAAO,EAAE,CAAC;aACb;QACL,CAAC;KAAA;CACJ;AAlID,kDAkIC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NavigatorMcpWebSocketClient = void 0;
|
|
13
|
+
const DEFAULT_PORT = 8081;
|
|
14
|
+
const DEFAULT_PATH = "/ws";
|
|
15
|
+
/**
|
|
16
|
+
* Minimal MCP WebSocket transport that handles tool call dispatching.
|
|
17
|
+
* UI layers can provide their own tool handler while reusing this
|
|
18
|
+
* connection management logic.
|
|
19
|
+
*/
|
|
20
|
+
class NavigatorMcpWebSocketClient {
|
|
21
|
+
constructor(toolHandler, options = {}) {
|
|
22
|
+
this.ws = null;
|
|
23
|
+
this.isConnecting = false;
|
|
24
|
+
this.toolHandler = toolHandler;
|
|
25
|
+
this.options = options;
|
|
26
|
+
this.currentAuth = options.auth;
|
|
27
|
+
if (options.autoConnect) {
|
|
28
|
+
this.connect();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
connect(auth) {
|
|
32
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
33
|
+
if (auth) {
|
|
34
|
+
this.currentAuth = auth;
|
|
35
|
+
}
|
|
36
|
+
if (this.isConnecting || ((_a = this.ws) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
|
|
37
|
+
(_c = (_b = this.logger()).debug) === null || _c === void 0 ? void 0 : _c.call(_b, "[NavigatorMcpWS] Connection already active or in-flight; skipping connect.");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!((_d = this.currentAuth) === null || _d === void 0 ? void 0 : _d.accountId) || !((_e = this.currentAuth) === null || _e === void 0 ? void 0 : _e.sessionId)) {
|
|
41
|
+
(_g = (_f = this.logger()).debug) === null || _g === void 0 ? void 0 : _g.call(_f, "[NavigatorMcpWS] Missing auth parameters; connection not started.");
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
this.isConnecting = true;
|
|
46
|
+
const url = this.buildUrl();
|
|
47
|
+
(_j = (_h = this.logger()).log) === null || _j === void 0 ? void 0 : _j.call(_h, "[NavigatorMcpWS] Connecting to", url);
|
|
48
|
+
this.ws = new WebSocket(url);
|
|
49
|
+
this.ws.onopen = (event) => {
|
|
50
|
+
var _a, _b, _c, _d;
|
|
51
|
+
(_b = (_a = this.logger()).log) === null || _b === void 0 ? void 0 : _b.call(_a, "[NavigatorMcpWS] Connected");
|
|
52
|
+
this.isConnecting = false;
|
|
53
|
+
this.send({ method: "server_ready" });
|
|
54
|
+
(_d = (_c = this.options).onOpen) === null || _d === void 0 ? void 0 : _d.call(_c, event);
|
|
55
|
+
};
|
|
56
|
+
this.ws.onmessage = (event) => {
|
|
57
|
+
this.handleMessage(event.data);
|
|
58
|
+
};
|
|
59
|
+
this.ws.onerror = (event) => {
|
|
60
|
+
var _a, _b, _c, _d;
|
|
61
|
+
(_b = (_a = this.logger()).error) === null || _b === void 0 ? void 0 : _b.call(_a, "[NavigatorMcpWS] Error", event);
|
|
62
|
+
(_d = (_c = this.options).onError) === null || _d === void 0 ? void 0 : _d.call(_c, event);
|
|
63
|
+
this.isConnecting = false;
|
|
64
|
+
};
|
|
65
|
+
this.ws.onclose = (event) => {
|
|
66
|
+
var _a, _b, _c, _d;
|
|
67
|
+
(_b = (_a = this.logger()).log) === null || _b === void 0 ? void 0 : _b.call(_a, "[NavigatorMcpWS] Disconnected");
|
|
68
|
+
this.ws = null;
|
|
69
|
+
this.isConnecting = false;
|
|
70
|
+
(_d = (_c = this.options).onClose) === null || _d === void 0 ? void 0 : _d.call(_c, event);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
(_l = (_k = this.logger()).error) === null || _l === void 0 ? void 0 : _l.call(_k, "[NavigatorMcpWS] Failed to establish connection", error);
|
|
75
|
+
this.isConnecting = false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
disconnect() {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
if (this.ws) {
|
|
81
|
+
(_b = (_a = this.logger()).debug) === null || _b === void 0 ? void 0 : _b.call(_a, "[NavigatorMcpWS] Closing connection");
|
|
82
|
+
this.ws.close();
|
|
83
|
+
this.ws = null;
|
|
84
|
+
this.isConnecting = false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
isConnected() {
|
|
88
|
+
var _a;
|
|
89
|
+
return ((_a = this.ws) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Update the stored authentication parameters without reconnecting.
|
|
93
|
+
* Call connect() afterwards to establish a connection with the new auth.
|
|
94
|
+
*/
|
|
95
|
+
setAuth(auth) {
|
|
96
|
+
this.currentAuth = auth;
|
|
97
|
+
}
|
|
98
|
+
logger() {
|
|
99
|
+
var _a;
|
|
100
|
+
return (_a = this.options.logger) !== null && _a !== void 0 ? _a : console;
|
|
101
|
+
}
|
|
102
|
+
buildUrl() {
|
|
103
|
+
var _a, _b, _c, _d, _e;
|
|
104
|
+
if (this.options.url) {
|
|
105
|
+
return this.appendAuthParams(this.options.url);
|
|
106
|
+
}
|
|
107
|
+
const protocol = (_a = this.options.protocol) !== null && _a !== void 0 ? _a : "ws";
|
|
108
|
+
const host = (_b = this.options.host) !== null && _b !== void 0 ? _b : "localhost";
|
|
109
|
+
const port = (_c = this.options.port) !== null && _c !== void 0 ? _c : DEFAULT_PORT;
|
|
110
|
+
const path = ((_d = this.options.path) !== null && _d !== void 0 ? _d : DEFAULT_PATH).startsWith("/") ? (_e = this.options.path) !== null && _e !== void 0 ? _e : DEFAULT_PATH : `/${this.options.path}`;
|
|
111
|
+
const baseUrl = `${protocol}://${host}:${port}${path}`;
|
|
112
|
+
return this.appendAuthParams(baseUrl);
|
|
113
|
+
}
|
|
114
|
+
appendAuthParams(url) {
|
|
115
|
+
var _a, _b;
|
|
116
|
+
if (!((_a = this.currentAuth) === null || _a === void 0 ? void 0 : _a.accountId) || !((_b = this.currentAuth) === null || _b === void 0 ? void 0 : _b.sessionId)) {
|
|
117
|
+
return url;
|
|
118
|
+
}
|
|
119
|
+
const urlInstance = new URL(url);
|
|
120
|
+
urlInstance.searchParams.set("accountId", this.currentAuth.accountId);
|
|
121
|
+
urlInstance.searchParams.set("sessionId", this.currentAuth.sessionId);
|
|
122
|
+
// Preserve the hash (unlikely to be used, but consistent with URL semantics)
|
|
123
|
+
return urlInstance.toString();
|
|
124
|
+
}
|
|
125
|
+
handleMessage(raw) {
|
|
126
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
try {
|
|
129
|
+
const message = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
130
|
+
const method = message === null || message === void 0 ? void 0 : message.method;
|
|
131
|
+
if (method !== "tools/call") {
|
|
132
|
+
(_b = (_a = this.logger()).debug) === null || _b === void 0 ? void 0 : _b.call(_a, "[NavigatorMcpWS] Ignoring non tool-call message", message);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const toolName = (_c = message === null || message === void 0 ? void 0 : message.params) === null || _c === void 0 ? void 0 : _c.name;
|
|
136
|
+
const toolArgs = (_d = message === null || message === void 0 ? void 0 : message.params) === null || _d === void 0 ? void 0 : _d.arguments;
|
|
137
|
+
const messageId = message === null || message === void 0 ? void 0 : message.id;
|
|
138
|
+
if (!toolName) {
|
|
139
|
+
(_f = (_e = this.logger()).warn) === null || _f === void 0 ? void 0 : _f.call(_e, "[NavigatorMcpWS] Received tool call without name", message);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
let result;
|
|
143
|
+
try {
|
|
144
|
+
result = yield this.toolHandler({
|
|
145
|
+
name: toolName,
|
|
146
|
+
args: toolArgs,
|
|
147
|
+
messageId
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
(_h = (_g = this.logger()).error) === null || _h === void 0 ? void 0 : _h.call(_g, "[NavigatorMcpWS] Tool handler threw", error);
|
|
152
|
+
result = `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
153
|
+
}
|
|
154
|
+
this.send({
|
|
155
|
+
method: "tool_response",
|
|
156
|
+
id: messageId,
|
|
157
|
+
result
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
(_k = (_j = this.logger()).error) === null || _k === void 0 ? void 0 : _k.call(_j, "[NavigatorMcpWS] Invalid message", error);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
send(message) {
|
|
166
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
167
|
+
this.ws.send(JSON.stringify(message));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.NavigatorMcpWebSocketClient = NavigatorMcpWebSocketClient;
|
|
172
|
+
//# sourceMappingURL=navigator-mcp-websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator-mcp-websocket.js","sourceRoot":"","sources":["../../../src/mcp/navigator-mcp-websocket.ts"],"names":[],"mappings":";;;;;;;;;;;;AAoCA,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B;;;;GAIG;AACH,MAAa,2BAA2B;IAOpC,YAAY,WAAqC,EAAE,UAA8C,EAAE;QAN3F,OAAE,GAAqB,IAAI,CAAC;QAC5B,iBAAY,GAAG,KAAK,CAAC;QAMzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QAEhC,IAAI,OAAO,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;IACL,CAAC;IAEM,OAAO,CAAC,IAAgC;;QAC3C,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,YAAY,IAAI,CAAA,MAAA,IAAI,CAAC,EAAE,0CAAE,UAAU,MAAK,SAAS,CAAC,IAAI,EAAE;YAC7D,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,4EAA4E,CAAC,CAAC;YACpG,OAAO;SACV;QAED,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,EAAE;YAC9D,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,mEAAmE,CAAC,CAAC;YAC3F,OAAO;SACV;QAED,IAAI;YACA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,GAAG,mDAAG,gCAAgC,EAAE,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;YAE7B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE;;gBACvB,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,GAAG,mDAAG,4BAA4B,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;gBACtC,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,MAAM,mDAAG,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;;gBACxB,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBACvD,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC9B,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;;gBACxB,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,GAAG,mDAAG,+BAA+B,CAAC,CAAC;gBACrD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,KAAK,CAAC,CAAC;YAClC,CAAC,CAAC;SACL;QACD,OAAO,KAAK,EAAE;YACV,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,iDAAiD,EAAE,KAAK,CAAC,CAAC;YAChF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;IACL,CAAC;IAEM,UAAU;;QACb,IAAI,IAAI,CAAC,EAAE,EAAE;YACT,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,qCAAqC,CAAC,CAAC;YAC7D,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;IACL,CAAC;IAEM,WAAW;;QACd,OAAO,CAAA,MAAA,IAAI,CAAC,EAAE,0CAAE,UAAU,MAAK,SAAS,CAAC,IAAI,CAAC;IAClD,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,IAA+B;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,MAAM;;QACV,OAAO,MAAA,IAAI,CAAC,OAAO,CAAC,MAAM,mCAAI,OAAO,CAAC;IAC1C,CAAC;IAEO,QAAQ;;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAClD;QAED,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,mCAAI,WAAW,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,mCAAI,YAAY,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,mCAAI,YAAY,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,mCAAI,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAE/H,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEO,gBAAgB,CAAC,GAAW;;QAChC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAA,EAAE;YAC9D,OAAO,GAAG,CAAC;SACd;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACtE,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEtE,6EAA6E;QAC7E,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;IAEa,aAAa,CAAC,GAAQ;;;YAChC,IAAI;gBACA,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAChE,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;gBAE/B,IAAI,MAAM,KAAK,YAAY,EAAE;oBACzB,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,iDAAiD,EAAE,OAAO,CAAC,CAAC;oBAClF,OAAO;iBACV;gBAED,MAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,IAAI,CAAC;gBACvC,MAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,SAAS,CAAC;gBAC5C,MAAM,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,CAAC;gBAE9B,IAAI,CAAC,QAAQ,EAAE;oBACX,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,IAAI,mDAAG,kDAAkD,EAAE,OAAO,CAAC,CAAC;oBAClF,OAAO;iBACV;gBAED,IAAI,MAAc,CAAC;gBACnB,IAAI;oBACA,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;wBAC5B,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,QAAQ;wBACd,SAAS;qBACZ,CAAC,CAAC;iBACN;gBACD,OAAO,KAAK,EAAE;oBACV,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBACpE,MAAM,GAAG,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC/E;gBAED,IAAI,CAAC,IAAI,CAAC;oBACN,MAAM,EAAE,eAAe;oBACvB,EAAE,EAAE,SAAS;oBACb,MAAM;iBACT,CAAC,CAAC;aACN;YACD,OAAO,KAAK,EAAE;gBACV,MAAA,MAAA,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,mDAAG,kCAAkC,EAAE,KAAK,CAAC,CAAC;aACpE;;KACJ;IAEO,IAAI,CAAC,OAAY;QACrB,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;YAClD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;SACzC;IACL,CAAC;CACJ;AAxKD,kEAwKC"}
|
|
@@ -96,4 +96,6 @@ export * from "./environment";
|
|
|
96
96
|
export * from "./data-source/data-source";
|
|
97
97
|
export * from "./scenario/scenario";
|
|
98
98
|
export * from "./tracking/tracking";
|
|
99
|
-
export
|
|
99
|
+
export * from "./mcp/navigator-chat";
|
|
100
|
+
export * from "./mcp/navigator-mcp-websocket";
|
|
101
|
+
export declare const VERSION = "6.8.3";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface NavigatorChatAuth {
|
|
2
|
+
accountId?: string;
|
|
3
|
+
sessionId?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface NavigatorChatContext {
|
|
6
|
+
/**
|
|
7
|
+
* Arbitrary contextual payload to send alongside the chat request.
|
|
8
|
+
* Structure is defined by the MCP backend.
|
|
9
|
+
*/
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
export interface NavigatorChatHistoryItem {
|
|
13
|
+
role: string;
|
|
14
|
+
text: string;
|
|
15
|
+
}
|
|
16
|
+
export interface NavigatorChatRequest {
|
|
17
|
+
question: string;
|
|
18
|
+
context?: NavigatorChatContext;
|
|
19
|
+
history?: NavigatorChatHistoryItem[];
|
|
20
|
+
}
|
|
21
|
+
export interface NavigatorChatResponse {
|
|
22
|
+
text: string;
|
|
23
|
+
raw: any;
|
|
24
|
+
}
|
|
25
|
+
export interface NavigatorChatClientOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Base URL for the MCP chat service.
|
|
28
|
+
* Defaults to the local development server.
|
|
29
|
+
*/
|
|
30
|
+
baseUrl?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Override fetch implementation (useful for tests or server-side usage).
|
|
33
|
+
*/
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
/**
|
|
36
|
+
* Optional headers to append to each request.
|
|
37
|
+
*/
|
|
38
|
+
defaultHeaders?: Record<string, string>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Lightweight client for the Navigator MCP chat HTTP endpoints.
|
|
42
|
+
* Encapsulates header construction and error handling so UI layers
|
|
43
|
+
* can focus on presentation logic.
|
|
44
|
+
*/
|
|
45
|
+
export declare class NavigatorChatClient {
|
|
46
|
+
private baseUrl;
|
|
47
|
+
private fetchImpl?;
|
|
48
|
+
private defaultHeaders;
|
|
49
|
+
constructor(options?: NavigatorChatClientOptions);
|
|
50
|
+
/**
|
|
51
|
+
* Ask a question via the MCP chat endpoint.
|
|
52
|
+
*/
|
|
53
|
+
ask(request: NavigatorChatRequest, auth?: NavigatorChatAuth): Promise<NavigatorChatResponse>;
|
|
54
|
+
/**
|
|
55
|
+
* Clear chat history stored on the MCP server.
|
|
56
|
+
*/
|
|
57
|
+
clear(auth?: NavigatorChatAuth): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Build a fully-qualified endpoint relative to the configured base URL.
|
|
60
|
+
*/
|
|
61
|
+
private buildUrl;
|
|
62
|
+
private fetchFromEndpoint;
|
|
63
|
+
private resolveFetch;
|
|
64
|
+
private parseJson;
|
|
65
|
+
private safeReadResponseText;
|
|
66
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface NavigatorMcpWebSocketAuth {
|
|
2
|
+
accountId?: string;
|
|
3
|
+
sessionId?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface NavigatorToolCallMessage {
|
|
6
|
+
name: string;
|
|
7
|
+
args: any;
|
|
8
|
+
messageId?: string;
|
|
9
|
+
}
|
|
10
|
+
export type NavigatorToolCallHandler = (message: NavigatorToolCallMessage) => Promise<string>;
|
|
11
|
+
export interface NavigatorMcpWebSocketClientOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Full WebSocket URL. If provided it takes precedence over host/port/path settings.
|
|
14
|
+
*/
|
|
15
|
+
url?: string;
|
|
16
|
+
host?: string;
|
|
17
|
+
port?: number;
|
|
18
|
+
path?: string;
|
|
19
|
+
protocol?: "ws" | "wss";
|
|
20
|
+
auth?: NavigatorMcpWebSocketAuth;
|
|
21
|
+
/**
|
|
22
|
+
* Automatically call connect() during construction.
|
|
23
|
+
*/
|
|
24
|
+
autoConnect?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Simple logger interface (defaults to console).
|
|
27
|
+
*/
|
|
28
|
+
logger?: Pick<Console, "log" | "warn" | "error"> & {
|
|
29
|
+
debug?: Console["debug"];
|
|
30
|
+
};
|
|
31
|
+
onOpen?: (event: Event) => void;
|
|
32
|
+
onClose?: (event: CloseEvent) => void;
|
|
33
|
+
onError?: (event: Event) => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Minimal MCP WebSocket transport that handles tool call dispatching.
|
|
37
|
+
* UI layers can provide their own tool handler while reusing this
|
|
38
|
+
* connection management logic.
|
|
39
|
+
*/
|
|
40
|
+
export declare class NavigatorMcpWebSocketClient {
|
|
41
|
+
private ws;
|
|
42
|
+
private isConnecting;
|
|
43
|
+
private options;
|
|
44
|
+
private toolHandler;
|
|
45
|
+
private currentAuth?;
|
|
46
|
+
constructor(toolHandler: NavigatorToolCallHandler, options?: NavigatorMcpWebSocketClientOptions);
|
|
47
|
+
connect(auth?: NavigatorMcpWebSocketAuth): void;
|
|
48
|
+
disconnect(): void;
|
|
49
|
+
isConnected(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Update the stored authentication parameters without reconnecting.
|
|
52
|
+
* Call connect() afterwards to establish a connection with the new auth.
|
|
53
|
+
*/
|
|
54
|
+
setAuth(auth: NavigatorMcpWebSocketAuth): void;
|
|
55
|
+
private logger;
|
|
56
|
+
private buildUrl;
|
|
57
|
+
private appendAuthParams;
|
|
58
|
+
private handleMessage;
|
|
59
|
+
private send;
|
|
60
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bruce-models",
|
|
3
|
-
"version": "6.8.
|
|
3
|
+
"version": "6.8.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"main": "dist/bruce-models.umd.js",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"prebuild": "rimraf dist",
|
|
23
|
-
"build": "node ./pre-build.js && tsc --module commonjs && rollup -c rollup.config.
|
|
23
|
+
"build": "node ./pre-build.js && tsc --module commonjs && rollup -c rollup.config.js",
|
|
24
24
|
"docs": "typedoc ./src/bruce-models.ts --out ./docs",
|
|
25
|
-
"start": "rollup -c rollup.config.
|
|
25
|
+
"start": "rollup -c rollup.config.js -w",
|
|
26
26
|
"test": "jest \"./test/unit\"",
|
|
27
27
|
"test-db": "jest \"./test/db\"",
|
|
28
28
|
"test:watch": "jest --watch",
|