@loopman/langchain-sdk 1.7.0 → 1.12.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 +78 -5
- package/dist/agents/loopman-agent.d.ts.map +1 -1
- package/dist/agents/loopman-agent.js +51 -92
- package/dist/agents/loopman-agent.js.map +1 -1
- package/dist/client/loopman-api.d.ts +19 -64
- package/dist/client/loopman-api.d.ts.map +1 -1
- package/dist/client/loopman-api.js +85 -248
- package/dist/client/loopman-api.js.map +1 -1
- package/dist/helpers/prompt-orchestrator.js +17 -17
- package/dist/helpers/prompt-orchestrator.js.map +1 -1
- package/dist/helpers/template-generator-static.d.ts +27 -0
- package/dist/helpers/template-generator-static.d.ts.map +1 -0
- package/dist/helpers/template-generator-static.js +52 -0
- package/dist/helpers/template-generator-static.js.map +1 -0
- package/dist/helpers/template-generator.d.ts +50 -0
- package/dist/helpers/template-generator.d.ts.map +1 -0
- package/dist/helpers/template-generator.js +85 -0
- package/dist/helpers/template-generator.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/langgraph/helpers.d.ts +171 -0
- package/dist/langgraph/helpers.d.ts.map +1 -0
- package/dist/langgraph/helpers.js +216 -0
- package/dist/langgraph/helpers.js.map +1 -0
- package/dist/langgraph/index.d.ts +16 -0
- package/dist/langgraph/index.d.ts.map +1 -0
- package/dist/langgraph/index.js +17 -0
- package/dist/langgraph/index.js.map +1 -0
- package/dist/langgraph/loopman-conditional-edge.d.ts +58 -0
- package/dist/langgraph/loopman-conditional-edge.d.ts.map +1 -0
- package/dist/langgraph/loopman-conditional-edge.js +77 -0
- package/dist/langgraph/loopman-conditional-edge.js.map +1 -0
- package/dist/langgraph/loopman-context-node.d.ts +74 -0
- package/dist/langgraph/loopman-context-node.d.ts.map +1 -0
- package/dist/langgraph/loopman-context-node.js +143 -0
- package/dist/langgraph/loopman-context-node.js.map +1 -0
- package/dist/langgraph/loopman-validation-node.d.ts +119 -0
- package/dist/langgraph/loopman-validation-node.d.ts.map +1 -0
- package/dist/langgraph/loopman-validation-node.js +420 -0
- package/dist/langgraph/loopman-validation-node.js.map +1 -0
- package/dist/langgraph/types.d.ts +75 -0
- package/dist/langgraph/types.d.ts.map +1 -0
- package/dist/langgraph/types.js +74 -0
- package/dist/langgraph/types.js.map +1 -0
- package/dist/loopman-agent-wrapper.d.ts +18 -0
- package/dist/loopman-agent-wrapper.d.ts.map +1 -1
- package/dist/loopman-agent-wrapper.js +31 -21
- package/dist/loopman-agent-wrapper.js.map +1 -1
- package/dist/loopman-middleware.d.ts +0 -5
- package/dist/loopman-middleware.d.ts.map +1 -1
- package/dist/loopman-middleware.js +22 -23
- package/dist/loopman-middleware.js.map +1 -1
- package/dist/mcp/loopman-mcp-client.d.ts.map +1 -1
- package/dist/mcp/loopman-mcp-client.js +5 -0
- package/dist/mcp/loopman-mcp-client.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts +7 -1
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +23 -16
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/services/logger.service.d.ts.map +1 -1
- package/dist/services/logger.service.js +4 -12
- package/dist/services/logger.service.js.map +1 -1
- package/dist/services/loopman.service.d.ts +25 -11
- package/dist/services/loopman.service.d.ts.map +1 -1
- package/dist/services/loopman.service.js +74 -45
- package/dist/services/loopman.service.js.map +1 -1
- package/dist/services/polling.service.d.ts +7 -3
- package/dist/services/polling.service.d.ts.map +1 -1
- package/dist/services/polling.service.js +61 -47
- package/dist/services/polling.service.js.map +1 -1
- package/dist/templates.json +20 -0
- package/dist/types.d.ts +9 -35
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/examples/README.md +346 -0
- package/examples/templates/README.md +285 -0
- package/examples/templates/langchain-full-review/.env.example +3 -0
- package/examples/templates/langchain-full-review/README.md +165 -0
- package/examples/templates/langchain-full-review/index.ts +54 -0
- package/examples/templates/langchain-full-review/package.json +29 -0
- package/examples/templates/langchain-full-review/tsconfig.json +22 -0
- package/examples/templates/langchain-tool-validation/.env.example +3 -0
- package/examples/templates/langchain-tool-validation/README.md +137 -0
- package/examples/templates/langchain-tool-validation/index.ts +65 -0
- package/examples/templates/langchain-tool-validation/package.json +29 -0
- package/examples/templates/langchain-tool-validation/tsconfig.json +22 -0
- package/examples/templates/langgraph-hello-world/.env.example +3 -0
- package/examples/templates/langgraph-hello-world/README.md +71 -0
- package/examples/templates/langgraph-hello-world/index.ts +147 -0
- package/examples/templates/langgraph-hello-world/package.json +27 -0
- package/examples/templates/langgraph-hello-world/tsconfig.json +22 -0
- package/package.json +12 -7
|
@@ -1,108 +1,47 @@
|
|
|
1
1
|
import { LoopmanConnectionError, } from "../types";
|
|
2
2
|
/**
|
|
3
3
|
* Loopman client for direct API connection
|
|
4
|
-
*
|
|
4
|
+
* Uses API key directly via X-API-Key header (no token exchange)
|
|
5
5
|
*/
|
|
6
6
|
export class LoopmanApiClient {
|
|
7
7
|
config;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
serverUrl;
|
|
9
|
+
logger = null;
|
|
10
|
+
debug = false;
|
|
11
11
|
constructor(config) {
|
|
12
12
|
this.config = config;
|
|
13
|
-
this.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
this.serverUrl =
|
|
14
|
+
config.serverUrl ||
|
|
15
|
+
process.env.LOOPMAN_BACKOFFICE_URL ||
|
|
16
|
+
"https://api.loopman.ai";
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* @returns Object containing accessToken and serverUrl
|
|
19
|
+
* Attach a logger (optional).
|
|
20
|
+
* The client is silent by default; logging is enabled only when debug is true.
|
|
22
21
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.log("🔑 Getting a new token from the authentication service");
|
|
31
|
-
try {
|
|
32
|
-
const response = await fetch(`${this.authServiceUrl}/auth/tokens/exchange`, {
|
|
33
|
-
method: "POST",
|
|
34
|
-
headers: {
|
|
35
|
-
"Content-Type": "application/json",
|
|
36
|
-
},
|
|
37
|
-
body: JSON.stringify({ apiKey }),
|
|
38
|
-
});
|
|
39
|
-
if (!response.ok) {
|
|
40
|
-
const errorData = (await response
|
|
41
|
-
.json()
|
|
42
|
-
.catch(() => ({})));
|
|
43
|
-
throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`);
|
|
44
|
-
}
|
|
45
|
-
const data = (await response.json());
|
|
46
|
-
const { accessToken, refreshToken, expiresIn, serverUrl } = data;
|
|
47
|
-
// Store in cache
|
|
48
|
-
this.setCachedToken(apiKey, {
|
|
49
|
-
accessToken,
|
|
50
|
-
refreshToken,
|
|
51
|
-
serverUrl,
|
|
52
|
-
expiresIn,
|
|
53
|
-
});
|
|
54
|
-
return { accessToken, serverUrl, fromCache: false };
|
|
22
|
+
setLogger(logger, debug) {
|
|
23
|
+
this.logger = logger;
|
|
24
|
+
this.debug = debug ?? this.debug;
|
|
25
|
+
}
|
|
26
|
+
logDebug(message, data) {
|
|
27
|
+
if (this.logger && this.debug) {
|
|
28
|
+
this.logger.debug(message, data);
|
|
55
29
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
30
|
+
}
|
|
31
|
+
logError(message, data) {
|
|
32
|
+
if (this.logger) {
|
|
33
|
+
this.logger.error(message, data);
|
|
59
34
|
}
|
|
60
35
|
}
|
|
61
36
|
/**
|
|
62
|
-
* Get authorization headers with
|
|
37
|
+
* Get authorization headers with API key
|
|
38
|
+
* Uses X-API-Key header directly (no token exchange)
|
|
63
39
|
*/
|
|
64
|
-
|
|
65
|
-
const { accessToken, serverUrl } = await this.getTokenFromApiKey(apiKey);
|
|
40
|
+
getAuthHeaders(apiKey) {
|
|
66
41
|
return {
|
|
67
|
-
|
|
68
|
-
serverUrl,
|
|
42
|
+
"X-API-Key": apiKey,
|
|
69
43
|
};
|
|
70
44
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Get current user from backoffice
|
|
73
|
-
* @param apiKey The API key for authentication
|
|
74
|
-
* @returns Current user information
|
|
75
|
-
*/
|
|
76
|
-
async getCurrentUser(apiKey) {
|
|
77
|
-
console.log("👤 Getting current user from backoffice");
|
|
78
|
-
try {
|
|
79
|
-
const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
|
|
80
|
-
//console.log(`🔗 Using backoffice URL: ${serverUrl}`);
|
|
81
|
-
const response = await fetch(`${serverUrl}/user/me`, {
|
|
82
|
-
headers: { Authorization },
|
|
83
|
-
});
|
|
84
|
-
if (!response.ok) {
|
|
85
|
-
const errorData = (await response
|
|
86
|
-
.json()
|
|
87
|
-
.catch(() => ({})));
|
|
88
|
-
throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`);
|
|
89
|
-
}
|
|
90
|
-
const user = (await response.json());
|
|
91
|
-
console.log(`✅ Current user retrieved: ${user.email}`);
|
|
92
|
-
return user;
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
console.error("❌ Failed to get current user:", error);
|
|
96
|
-
// Specific error handling for network errors
|
|
97
|
-
if (error instanceof TypeError &&
|
|
98
|
-
error.message.includes("fetch failed")) {
|
|
99
|
-
throw new LoopmanConnectionError(`Backoffice service inaccessible. ` +
|
|
100
|
-
`Check that the backoffice server is started and accessible. ` +
|
|
101
|
-
`Network error: ${error.message}`);
|
|
102
|
-
}
|
|
103
|
-
throw new LoopmanConnectionError(`Failed to get user: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
45
|
/**
|
|
107
46
|
* Generic method to make GET requests to backoffice
|
|
108
47
|
* @param apiKey The API key for authentication
|
|
@@ -110,12 +49,11 @@ export class LoopmanApiClient {
|
|
|
110
49
|
* @returns Response data
|
|
111
50
|
*/
|
|
112
51
|
async get(apiKey, endpoint) {
|
|
113
|
-
|
|
52
|
+
this.logDebug(`HTTP GET ${endpoint}`);
|
|
114
53
|
try {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
headers: { Authorization },
|
|
54
|
+
const headers = this.getAuthHeaders(apiKey);
|
|
55
|
+
const response = await fetch(`${this.serverUrl}${endpoint}`, {
|
|
56
|
+
headers,
|
|
119
57
|
});
|
|
120
58
|
if (!response.ok) {
|
|
121
59
|
const errorData = (await response
|
|
@@ -126,7 +64,11 @@ export class LoopmanApiClient {
|
|
|
126
64
|
return (await response.json());
|
|
127
65
|
}
|
|
128
66
|
catch (error) {
|
|
129
|
-
|
|
67
|
+
this.logError(`HTTP GET failed: ${endpoint}`, error);
|
|
68
|
+
if (error instanceof TypeError &&
|
|
69
|
+
error.message.includes("fetch failed")) {
|
|
70
|
+
this.handleNetworkError(error, endpoint);
|
|
71
|
+
}
|
|
130
72
|
throw new LoopmanConnectionError(`Failed GET ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
131
73
|
}
|
|
132
74
|
}
|
|
@@ -138,16 +80,15 @@ export class LoopmanApiClient {
|
|
|
138
80
|
* @returns Response data
|
|
139
81
|
*/
|
|
140
82
|
async post(apiKey, endpoint, data) {
|
|
141
|
-
|
|
83
|
+
this.logDebug(`HTTP POST ${endpoint}`);
|
|
142
84
|
try {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
85
|
+
const headers = {
|
|
86
|
+
...this.getAuthHeaders(apiKey),
|
|
87
|
+
"Content-Type": "application/json",
|
|
88
|
+
};
|
|
89
|
+
const response = await fetch(`${this.serverUrl}${endpoint}`, {
|
|
146
90
|
method: "POST",
|
|
147
|
-
headers
|
|
148
|
-
Authorization,
|
|
149
|
-
"Content-Type": "application/json",
|
|
150
|
-
},
|
|
91
|
+
headers,
|
|
151
92
|
body: JSON.stringify(data),
|
|
152
93
|
});
|
|
153
94
|
if (!response.ok) {
|
|
@@ -159,7 +100,11 @@ export class LoopmanApiClient {
|
|
|
159
100
|
return (await response.json());
|
|
160
101
|
}
|
|
161
102
|
catch (error) {
|
|
162
|
-
|
|
103
|
+
this.logError(`HTTP POST failed: ${endpoint}`, error);
|
|
104
|
+
if (error instanceof TypeError &&
|
|
105
|
+
error.message.includes("fetch failed")) {
|
|
106
|
+
this.handleNetworkError(error, endpoint);
|
|
107
|
+
}
|
|
163
108
|
throw new LoopmanConnectionError(`Failed POST ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
164
109
|
}
|
|
165
110
|
}
|
|
@@ -171,16 +116,15 @@ export class LoopmanApiClient {
|
|
|
171
116
|
* @returns Response data
|
|
172
117
|
*/
|
|
173
118
|
async put(apiKey, endpoint, data) {
|
|
174
|
-
|
|
119
|
+
this.logDebug(`HTTP PUT ${endpoint}`);
|
|
175
120
|
try {
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
121
|
+
const headers = {
|
|
122
|
+
...this.getAuthHeaders(apiKey),
|
|
123
|
+
"Content-Type": "application/json",
|
|
124
|
+
};
|
|
125
|
+
const response = await fetch(`${this.serverUrl}${endpoint}`, {
|
|
179
126
|
method: "PUT",
|
|
180
|
-
headers
|
|
181
|
-
Authorization,
|
|
182
|
-
"Content-Type": "application/json",
|
|
183
|
-
},
|
|
127
|
+
headers,
|
|
184
128
|
body: JSON.stringify(data),
|
|
185
129
|
});
|
|
186
130
|
if (!response.ok) {
|
|
@@ -192,7 +136,11 @@ export class LoopmanApiClient {
|
|
|
192
136
|
return (await response.json());
|
|
193
137
|
}
|
|
194
138
|
catch (error) {
|
|
195
|
-
|
|
139
|
+
this.logError(`HTTP PUT failed: ${endpoint}`, error);
|
|
140
|
+
if (error instanceof TypeError &&
|
|
141
|
+
error.message.includes("fetch failed")) {
|
|
142
|
+
this.handleNetworkError(error, endpoint);
|
|
143
|
+
}
|
|
196
144
|
throw new LoopmanConnectionError(`Failed PUT ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
197
145
|
}
|
|
198
146
|
}
|
|
@@ -204,16 +152,15 @@ export class LoopmanApiClient {
|
|
|
204
152
|
* @returns Response data
|
|
205
153
|
*/
|
|
206
154
|
async patch(apiKey, endpoint, data) {
|
|
207
|
-
|
|
155
|
+
this.logDebug(`HTTP PATCH ${endpoint}`);
|
|
208
156
|
try {
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
157
|
+
const headers = {
|
|
158
|
+
...this.getAuthHeaders(apiKey),
|
|
159
|
+
"Content-Type": "application/json",
|
|
160
|
+
};
|
|
161
|
+
const response = await fetch(`${this.serverUrl}${endpoint}`, {
|
|
212
162
|
method: "PATCH",
|
|
213
|
-
headers
|
|
214
|
-
Authorization,
|
|
215
|
-
"Content-Type": "application/json",
|
|
216
|
-
},
|
|
163
|
+
headers,
|
|
217
164
|
body: JSON.stringify(data),
|
|
218
165
|
});
|
|
219
166
|
if (!response.ok) {
|
|
@@ -225,7 +172,11 @@ export class LoopmanApiClient {
|
|
|
225
172
|
return (await response.json());
|
|
226
173
|
}
|
|
227
174
|
catch (error) {
|
|
228
|
-
|
|
175
|
+
this.logError(`HTTP PATCH failed: ${endpoint}`, error);
|
|
176
|
+
if (error instanceof TypeError &&
|
|
177
|
+
error.message.includes("fetch failed")) {
|
|
178
|
+
this.handleNetworkError(error, endpoint);
|
|
179
|
+
}
|
|
229
180
|
throw new LoopmanConnectionError(`Failed PATCH ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
230
181
|
}
|
|
231
182
|
}
|
|
@@ -236,13 +187,12 @@ export class LoopmanApiClient {
|
|
|
236
187
|
* @returns Response data
|
|
237
188
|
*/
|
|
238
189
|
async delete(apiKey, endpoint) {
|
|
239
|
-
|
|
190
|
+
this.logDebug(`HTTP DELETE ${endpoint}`);
|
|
240
191
|
try {
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
const response = await fetch(`${serverUrl}${endpoint}`, {
|
|
192
|
+
const headers = this.getAuthHeaders(apiKey);
|
|
193
|
+
const response = await fetch(`${this.serverUrl}${endpoint}`, {
|
|
244
194
|
method: "DELETE",
|
|
245
|
-
headers
|
|
195
|
+
headers,
|
|
246
196
|
});
|
|
247
197
|
if (!response.ok) {
|
|
248
198
|
const errorData = (await response
|
|
@@ -253,150 +203,37 @@ export class LoopmanApiClient {
|
|
|
253
203
|
return (await response.json());
|
|
254
204
|
}
|
|
255
205
|
catch (error) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Get token from cache if valid, otherwise return null
|
|
262
|
-
*/
|
|
263
|
-
getCachedToken(apiKey) {
|
|
264
|
-
const cached = this.tokenCache.get(apiKey);
|
|
265
|
-
if (!cached) {
|
|
266
|
-
console.log(`🔍 Cache miss for key: ${this.maskApiKey(apiKey)}`);
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
// Check if token is still valid
|
|
270
|
-
const now = Date.now();
|
|
271
|
-
if (cached.expiresAt <= now) {
|
|
272
|
-
console.log(`⏰ Token expired for key: ${this.maskApiKey(apiKey)} (expired ${Math.floor((now - cached.expiresAt) / 1000)}s ago)`);
|
|
273
|
-
this.tokenCache.delete(apiKey);
|
|
274
|
-
return null;
|
|
275
|
-
}
|
|
276
|
-
const ttl = Math.floor((cached.expiresAt - now) / 1000);
|
|
277
|
-
console.log(`✅ Cache hit for key: ${this.maskApiKey(apiKey)} (TTL: ${ttl}s)`);
|
|
278
|
-
return {
|
|
279
|
-
accessToken: cached.data.accessToken,
|
|
280
|
-
serverUrl: cached.data.serverUrl,
|
|
281
|
-
fromCache: true,
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Store token in cache with expiration
|
|
286
|
-
*/
|
|
287
|
-
setCachedToken(apiKey, tokenData) {
|
|
288
|
-
const now = Date.now();
|
|
289
|
-
const expiresAt = now + (tokenData.expiresIn - this.bufferTimeSeconds) * 1000;
|
|
290
|
-
this.tokenCache.set(apiKey, {
|
|
291
|
-
data: tokenData,
|
|
292
|
-
expiresAt,
|
|
293
|
-
});
|
|
294
|
-
const ttl = Math.floor((expiresAt - now) / 1000);
|
|
295
|
-
console.log(`💾 Token cached for key: ${this.maskApiKey(apiKey)} (TTL: ${ttl}s, expires at: ${new Date(expiresAt).toISOString()})`);
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Remove a token from cache
|
|
299
|
-
*/
|
|
300
|
-
clearCache(apiKey) {
|
|
301
|
-
const deleted = this.tokenCache.delete(apiKey);
|
|
302
|
-
if (deleted) {
|
|
303
|
-
console.log(`🗑️ Token removed from cache for key: ${this.maskApiKey(apiKey)}`);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Clear all token cache
|
|
308
|
-
*/
|
|
309
|
-
clearAllCache() {
|
|
310
|
-
const size = this.tokenCache.size;
|
|
311
|
-
this.tokenCache.clear();
|
|
312
|
-
console.log(`🧹 Token cache cleared (${size} entries removed)`);
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Get cache statistics
|
|
316
|
-
*/
|
|
317
|
-
getCacheStats() {
|
|
318
|
-
const now = Date.now();
|
|
319
|
-
const entries = Array.from(this.tokenCache.entries()).map(([apiKey, cached]) => ({
|
|
320
|
-
apiKey: this.maskApiKey(apiKey),
|
|
321
|
-
serverUrl: cached.data.serverUrl,
|
|
322
|
-
expiresAt: new Date(cached.expiresAt).toISOString(),
|
|
323
|
-
ttl: Math.floor((cached.expiresAt - now) / 1000), // seconds until expiration
|
|
324
|
-
}));
|
|
325
|
-
return {
|
|
326
|
-
size: this.tokenCache.size,
|
|
327
|
-
entries,
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Check if a token exists and is valid
|
|
332
|
-
*/
|
|
333
|
-
hasValidToken(apiKey) {
|
|
334
|
-
const cached = this.tokenCache.get(apiKey);
|
|
335
|
-
if (!cached)
|
|
336
|
-
return false;
|
|
337
|
-
const isValid = cached.expiresAt > Date.now();
|
|
338
|
-
if (!isValid) {
|
|
339
|
-
this.tokenCache.delete(apiKey);
|
|
340
|
-
}
|
|
341
|
-
return isValid;
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Get remaining TTL for a cached token
|
|
345
|
-
*/
|
|
346
|
-
getTokenTTL(apiKey) {
|
|
347
|
-
const cached = this.tokenCache.get(apiKey);
|
|
348
|
-
if (!cached)
|
|
349
|
-
return 0;
|
|
350
|
-
const ttl = Math.floor((cached.expiresAt - Date.now()) / 1000);
|
|
351
|
-
return Math.max(0, ttl);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Clean up expired tokens from cache
|
|
355
|
-
*/
|
|
356
|
-
cleanupExpiredTokens() {
|
|
357
|
-
const now = Date.now();
|
|
358
|
-
let removed = 0;
|
|
359
|
-
for (const [apiKey, cached] of this.tokenCache.entries()) {
|
|
360
|
-
if (cached.expiresAt <= now) {
|
|
361
|
-
this.tokenCache.delete(apiKey);
|
|
362
|
-
removed++;
|
|
206
|
+
this.logError(`HTTP DELETE failed: ${endpoint}`, error);
|
|
207
|
+
if (error instanceof TypeError &&
|
|
208
|
+
error.message.includes("fetch failed")) {
|
|
209
|
+
this.handleNetworkError(error, endpoint);
|
|
363
210
|
}
|
|
364
|
-
|
|
365
|
-
if (removed > 0) {
|
|
366
|
-
console.log(`🧹 ${removed} expired token(s) cleaned from cache (${this.tokenCache.size} remaining)`);
|
|
211
|
+
throw new LoopmanConnectionError(`Failed DELETE ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
367
212
|
}
|
|
368
213
|
}
|
|
369
214
|
/**
|
|
370
215
|
* Handle network errors consistently
|
|
371
216
|
*/
|
|
372
|
-
handleNetworkError(error,
|
|
217
|
+
handleNetworkError(error, endpoint) {
|
|
373
218
|
if (error instanceof TypeError && error.message.includes("fetch failed")) {
|
|
374
|
-
throw new LoopmanConnectionError(
|
|
219
|
+
throw new LoopmanConnectionError(`Backoffice service inaccessible at ${this.serverUrl}. ` +
|
|
375
220
|
`Check that the server is started and accessible. ` +
|
|
376
221
|
`Network error: ${error.message}`);
|
|
377
222
|
}
|
|
378
223
|
if (error instanceof Error && error.message.includes("ECONNREFUSED")) {
|
|
379
|
-
throw new LoopmanConnectionError(`Connection refused to
|
|
224
|
+
throw new LoopmanConnectionError(`Connection refused to backoffice (${this.serverUrl}). ` +
|
|
380
225
|
`The server is probably not started. ` +
|
|
381
226
|
`Check that the service is running.`);
|
|
382
227
|
}
|
|
383
228
|
if (error instanceof Error && error.message.includes("ENOTFOUND")) {
|
|
384
|
-
throw new LoopmanConnectionError(
|
|
229
|
+
throw new LoopmanConnectionError(`Backoffice not found (${this.serverUrl}). ` +
|
|
385
230
|
`Check the service URL in your configuration. ` +
|
|
386
231
|
`DNS error: ${error.message}`);
|
|
387
232
|
}
|
|
388
|
-
throw new LoopmanConnectionError(`Connection error to
|
|
389
|
-
`
|
|
233
|
+
throw new LoopmanConnectionError(`Connection error to backoffice. ` +
|
|
234
|
+
`Endpoint: ${endpoint}. ` +
|
|
390
235
|
`Error: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
391
236
|
}
|
|
392
|
-
/**
|
|
393
|
-
* Mask API key for logs (show only first 8 characters)
|
|
394
|
-
*/
|
|
395
|
-
maskApiKey(apiKey) {
|
|
396
|
-
if (apiKey.length <= 8)
|
|
397
|
-
return apiKey;
|
|
398
|
-
return `${apiKey.substring(0, 8)}...`;
|
|
399
|
-
}
|
|
400
237
|
/**
|
|
401
238
|
* Get current configuration
|
|
402
239
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopman-api.js","sourceRoot":"","sources":["../../src/client/loopman-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loopman-api.js","sourceRoot":"","sources":["../../src/client/loopman-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export function buildLoopmanSystemPrompt(options) {
|
|
|
5
5
|
// Add language instruction if specified
|
|
6
6
|
let languageInstruction = "";
|
|
7
7
|
if (options.language) {
|
|
8
|
-
languageInstruction = `\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\
|
|
8
|
+
languageInstruction = `\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nLANGUAGE REQUIREMENT\n\nAll text content you provide to submitForHumanReview MUST be written in ${options.language}.\nThis includes:\n- title\n- description\n- proposedDecision\n- decisionReasoning\n- businessContext\n- information labels and values\n\nEven if the user communicates in another language, always use ${options.language} for human review content.\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
|
|
9
9
|
}
|
|
10
10
|
if (variablePrompt.trim().length === 0) {
|
|
11
11
|
return `${before}${languageInstruction}\n${after}`;
|
|
@@ -31,31 +31,31 @@ function sanitizePlaceholders(template, options) {
|
|
|
31
31
|
const ORCHESTRATOR_BEFORE = `
|
|
32
32
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
LOOPMAN HUMAN-IN-THE-LOOP WORKFLOW
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
IMPORTANT: This is a STRICT workflow. You MUST NOT deviate from it.
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
DO NOT call business tools directly (send_email, publish_content, delete_data, etc.)
|
|
39
|
+
ALWAYS follow the 4-step process below
|
|
40
40
|
|
|
41
41
|
You MUST follow these steps IN ORDER:
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
STEP 1: Call getHumanGuidelines
|
|
44
44
|
- workflow_id: "{{ $workflow.id }}"
|
|
45
45
|
- execution_id: "{{ $execution.id }}"
|
|
46
46
|
- category: "{{ $category }}"
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
STEP 2: Call getDecisionContext
|
|
49
49
|
- workflow_id: "{{ $workflow.id }}"
|
|
50
50
|
- execution_id: "{{ $execution.id }}"
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
STEP 3: Analyze the context
|
|
53
53
|
|
|
54
54
|
After completing Steps 1 and 2, analyze in your next Thought:
|
|
55
55
|
|
|
56
56
|
Thought: Steps 1 and 2 complete. Analyzing context:
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
DECISION HIERARCHY (from highest to lowest priority):
|
|
59
59
|
1. HUMAN DECISIONS (userType: USER) - Most authoritative
|
|
60
60
|
2. GUIDELINES - Generic rules and policies
|
|
61
61
|
3. SYSTEM DECISIONS (userType: SYSTEM) - Lowest priority
|
|
@@ -95,28 +95,28 @@ You MUST follow these steps IN ORDER:
|
|
|
95
95
|
const ORCHESTRATOR_AFTER = `
|
|
96
96
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
STEP 4: Submit for human review
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
CRITICAL RULES - READ CAREFULLY:
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
NEVER call business tools directly (like send_email, publish_content, delete_data, etc.)
|
|
103
|
+
NEVER skip the submitForHumanReview step
|
|
104
|
+
ALWAYS go through submitForHumanReview FIRST before any action
|
|
105
105
|
|
|
106
106
|
You MUST call submitForHumanReview in these cases:
|
|
107
107
|
|
|
108
108
|
A) First attempt: No previous decisions found
|
|
109
|
-
B) After
|
|
109
|
+
B) After NEEDS_CHANGES: getDecisionContext shows human feedback
|
|
110
110
|
→ In this case, you MUST incorporate the feedback and RE-SUBMIT a corrected proposal
|
|
111
111
|
|
|
112
|
-
Do NOT skip this step if you see previous
|
|
112
|
+
Do NOT skip this step if you see previous NEEDS_CHANGES feedback.
|
|
113
113
|
The human is waiting for your corrected proposal.
|
|
114
114
|
|
|
115
115
|
Call submitForHumanReview with ALL these REQUIRED fields:
|
|
116
116
|
* title (string, required): Brief description of the action (e.g., "Send email to Alice")
|
|
117
117
|
* description (string, required): Brief description of the decision being requested
|
|
118
118
|
* proposedDecision (string, REQUIRED): The exact action you propose (e.g., "Send email with subject 'Meeting' to alice@example.com")
|
|
119
|
-
- If re-submitting after
|
|
119
|
+
- If re-submitting after NEEDS_CHANGES, incorporate the human feedback into your proposal
|
|
120
120
|
* decisionReasoning (string, required): Detailed explanation of why you made this decision based on guidelines
|
|
121
121
|
- If getDecisionContext returned previous human decisions, ALWAYS mention them in your reasoning
|
|
122
122
|
- Example: "Based on John Doe's previous feedback on 2024-01-15 requesting changes, I have updated the proposal to..."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-orchestrator.js","sourceRoot":"","sources":["../../src/helpers/prompt-orchestrator.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,wBAAwB,CACtC,OAA6B;IAE7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAElD,wCAAwC;IACxC,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"prompt-orchestrator.js","sourceRoot":"","sources":["../../src/helpers/prompt-orchestrator.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,wBAAwB,CACtC,OAA6B;IAE7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAElD,wCAAwC;IACxC,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,mBAAmB,GAAG,qKAAqK,OAAO,CAAC,QAAQ,2MAA2M,OAAO,CAAC,QAAQ,8FAA8F,CAAC;IACvgB,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,MAAM,GAAG,mBAAmB,KAAK,KAAK,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,GAAG,MAAM,KAAK,cAAc,GAAG,mBAAmB,KAAK,KAAK,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ;SACtB,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,UAAU,CAAC;SAC5D,OAAO,CAAC,gCAAgC,EAAE,OAAO,CAAC,WAAW,CAAC;SAC9D,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9D,OAAO,CAAC,2BAA2B,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA+DiC,CAAC;AAE9D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAqCkC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Generator Utility (Static Version)
|
|
3
|
+
*
|
|
4
|
+
* This is a browser-compatible version that uses pre-exported templates
|
|
5
|
+
* instead of reading from the file system.
|
|
6
|
+
*
|
|
7
|
+
* This version is used by the web application.
|
|
8
|
+
*/
|
|
9
|
+
export interface TemplateConfig {
|
|
10
|
+
workflowId: string;
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
sdkVersion?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface TemplateFile {
|
|
15
|
+
path: string;
|
|
16
|
+
content: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the LangGraph Hello World template files with variable substitution
|
|
20
|
+
*
|
|
21
|
+
* This uses pre-exported templates and applies variable substitution.
|
|
22
|
+
*
|
|
23
|
+
* @param config - Template configuration with workflowId, apiKey, and sdkVersion
|
|
24
|
+
* @returns Array of template files ready to be zipped
|
|
25
|
+
*/
|
|
26
|
+
export declare function getLangGraphHelloWorldTemplate(config: TemplateConfig): TemplateFile[];
|
|
27
|
+
//# sourceMappingURL=template-generator-static.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-generator-static.d.ts","sourceRoot":"","sources":["../../src/helpers/template-generator-static.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,GACrB,YAAY,EAAE,CAqChB"}
|