@flink-app/flink 1.0.0 → 2.0.0-alpha.48
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/CHANGELOG.md +6 -0
- package/cli/build.ts +8 -1
- package/cli/run.ts +8 -1
- package/dist/cli/build.js +8 -1
- package/dist/cli/run.js +8 -1
- package/dist/src/FlinkApp.d.ts +33 -0
- package/dist/src/FlinkApp.js +247 -27
- package/dist/src/FlinkContext.d.ts +21 -0
- package/dist/src/FlinkHttpHandler.d.ts +90 -1
- package/dist/src/TypeScriptCompiler.d.ts +42 -0
- package/dist/src/TypeScriptCompiler.js +346 -4
- package/dist/src/TypeScriptUtils.js +4 -0
- package/dist/src/ai/AgentRunner.d.ts +39 -0
- package/dist/src/ai/AgentRunner.js +625 -0
- package/dist/src/ai/FlinkAgent.d.ts +446 -0
- package/dist/src/ai/FlinkAgent.js +633 -0
- package/dist/src/ai/FlinkTool.d.ts +37 -0
- package/dist/src/ai/FlinkTool.js +2 -0
- package/dist/src/ai/LLMAdapter.d.ts +119 -0
- package/dist/src/ai/LLMAdapter.js +2 -0
- package/dist/src/ai/SubAgentExecutor.d.ts +36 -0
- package/dist/src/ai/SubAgentExecutor.js +220 -0
- package/dist/src/ai/ToolExecutor.d.ts +35 -0
- package/dist/src/ai/ToolExecutor.js +237 -0
- package/dist/src/ai/index.d.ts +5 -0
- package/dist/src/ai/index.js +21 -0
- package/dist/src/handlers/StreamWriterFactory.d.ts +20 -0
- package/dist/src/handlers/StreamWriterFactory.js +83 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +4 -0
- package/dist/src/utils.d.ts +30 -0
- package/dist/src/utils.js +52 -0
- package/package.json +14 -2
- package/readme.md +425 -0
- package/spec/AgentDuplicateDetection.spec.ts +112 -0
- package/spec/AgentRunner.spec.ts +527 -0
- package/spec/ConversationHooks.spec.ts +290 -0
- package/spec/FlinkAgent.spec.ts +310 -0
- package/spec/FlinkApp.onError.spec.ts +1 -2
- package/spec/StreamingIntegration.spec.ts +138 -0
- package/spec/SubAgentSupport.spec.ts +941 -0
- package/spec/ToolExecutor.spec.ts +360 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCar.js +57 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCar2.js +59 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithArraySchema.js +53 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithArraySchema2.js +53 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithArraySchema3.js +53 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithLiteralSchema.js +55 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithLiteralSchema2.js +55 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithSchemaInFile.js +58 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/GetCarWithSchemaInFile2.js +58 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/ManuallyAddedHandler.js +53 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/ManuallyAddedHandler2.js +55 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchCar.js +58 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchOnboardingSession.js +76 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchOrderWithComplexTypes.js +58 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchProductWithIntersection.js +59 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PatchUserWithUnion.js +59 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PostCar.js +55 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PostLogin.js +56 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PostLogout.js +55 -0
- package/spec/mock-project/dist/spec/mock-project/src/handlers/PutCar.js +55 -0
- package/spec/mock-project/dist/spec/mock-project/src/index.js +83 -0
- package/spec/mock-project/dist/spec/mock-project/src/repos/CarRepo.js +26 -0
- package/spec/mock-project/dist/spec/mock-project/src/schemas/Car.js +2 -0
- package/spec/mock-project/dist/spec/mock-project/src/schemas/DefaultExportSchema.js +2 -0
- package/spec/mock-project/dist/spec/mock-project/src/schemas/FileWithTwoSchemas.js +2 -0
- package/spec/mock-project/dist/src/FlinkApp.js +1012 -0
- package/spec/mock-project/dist/src/FlinkContext.js +2 -0
- package/spec/mock-project/dist/src/FlinkErrors.js +143 -0
- package/spec/mock-project/dist/src/FlinkHttpHandler.js +47 -0
- package/spec/mock-project/dist/src/FlinkJob.js +2 -0
- package/spec/mock-project/dist/src/FlinkLog.js +26 -0
- package/spec/mock-project/dist/src/FlinkPlugin.js +2 -0
- package/spec/mock-project/dist/src/FlinkRepo.js +224 -0
- package/spec/mock-project/dist/src/FlinkResponse.js +2 -0
- package/spec/mock-project/dist/src/ai/AgentExecutor.js +279 -0
- package/spec/mock-project/dist/src/ai/AgentRunner.js +625 -0
- package/spec/mock-project/dist/src/ai/FlinkAgent.js +633 -0
- package/spec/mock-project/dist/src/ai/FlinkTool.js +2 -0
- package/spec/mock-project/dist/src/ai/LLMAdapter.js +2 -0
- package/spec/mock-project/dist/src/ai/SubAgentExecutor.js +220 -0
- package/spec/mock-project/dist/src/ai/ToolExecutor.js +237 -0
- package/spec/mock-project/dist/src/auth/FlinkAuthPlugin.js +2 -0
- package/spec/mock-project/dist/src/auth/FlinkAuthUser.js +2 -0
- package/spec/mock-project/dist/src/handlers/StreamWriterFactory.js +83 -0
- package/spec/mock-project/dist/src/index.js +17 -69
- package/spec/mock-project/dist/src/mock-data-generator.js +9 -0
- package/spec/mock-project/dist/src/utils.js +290 -0
- package/spec/mock-project/tsconfig.json +6 -1
- package/spec/testHelpers.ts +49 -0
- package/spec/utils.caseConversion.spec.ts +80 -0
- package/spec/utils.spec.ts +13 -13
- package/src/FlinkApp.ts +251 -7
- package/src/FlinkContext.ts +22 -0
- package/src/FlinkHttpHandler.ts +100 -2
- package/src/TypeScriptCompiler.ts +398 -7
- package/src/TypeScriptUtils.ts +5 -0
- package/src/ai/AgentRunner.ts +549 -0
- package/src/ai/FlinkAgent.ts +770 -0
- package/src/ai/FlinkTool.ts +40 -0
- package/src/ai/LLMAdapter.ts +96 -0
- package/src/ai/SubAgentExecutor.ts +199 -0
- package/src/ai/ToolExecutor.ts +193 -0
- package/src/ai/index.ts +5 -0
- package/src/handlers/StreamWriterFactory.ts +84 -0
- package/src/index.ts +4 -0
- package/src/utils.ts +52 -0
- package/tsconfig.json +6 -1
|
@@ -0,0 +1,279 @@
|
|
|
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
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
39
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
40
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
41
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
42
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
43
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
44
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
45
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
46
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
47
|
+
function fulfill(value) { resume("next", value); }
|
|
48
|
+
function reject(value) { resume("throw", value); }
|
|
49
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
50
|
+
};
|
|
51
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
52
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
53
|
+
var m = o[Symbol.asyncIterator], i;
|
|
54
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
55
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
56
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
57
|
+
};
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.AgentExecutor = void 0;
|
|
60
|
+
var AgentRunner_1 = require("./AgentRunner");
|
|
61
|
+
var FlinkLog_1 = require("../FlinkLog");
|
|
62
|
+
var AgentExecutor = /** @class */ (function () {
|
|
63
|
+
function AgentExecutor(agentProps, tools, ctx, llmAdapters, agentName) {
|
|
64
|
+
this.agentProps = agentProps;
|
|
65
|
+
this.tools = tools;
|
|
66
|
+
this.ctx = ctx;
|
|
67
|
+
this.llmAdapters = llmAdapters;
|
|
68
|
+
this.agentName = agentName;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Unified execution method - supports both awaiting and streaming
|
|
72
|
+
*
|
|
73
|
+
* Uses lazy generator pattern (similar to Vercel AI SDK) to allow
|
|
74
|
+
* multiple consumption without re-execution.
|
|
75
|
+
*
|
|
76
|
+
* Examples:
|
|
77
|
+
* const response = agent.run({ message: "Hello" });
|
|
78
|
+
* const result = await response.result; // Await final result
|
|
79
|
+
* for await (const text of response.textStream) { ... } // Stream text
|
|
80
|
+
* for await (const chunk of response.fullStream) { ... } // Stream all events
|
|
81
|
+
*/
|
|
82
|
+
AgentExecutor.prototype.run = function (input) {
|
|
83
|
+
// Permission check
|
|
84
|
+
if (this.agentProps.permissions) {
|
|
85
|
+
this.checkPermissionsSync(input.user);
|
|
86
|
+
}
|
|
87
|
+
var runner = this.getRunner();
|
|
88
|
+
FlinkLog_1.log.debug("Running agent ".concat(this.agentName || "unknown"));
|
|
89
|
+
// Lazy evaluation - generator only starts when first consumed
|
|
90
|
+
var baseGenerator = null;
|
|
91
|
+
var buffer = [];
|
|
92
|
+
var done = false;
|
|
93
|
+
var getBaseGenerator = function () {
|
|
94
|
+
if (!baseGenerator) {
|
|
95
|
+
baseGenerator = runner.streamGenerator(input);
|
|
96
|
+
}
|
|
97
|
+
return baseGenerator;
|
|
98
|
+
};
|
|
99
|
+
// Create independent iterators that share buffered chunks
|
|
100
|
+
var createIterator = function () {
|
|
101
|
+
var index = 0;
|
|
102
|
+
return (function () {
|
|
103
|
+
return __asyncGenerator(this, arguments, function () {
|
|
104
|
+
var gen, _a, value, isDone;
|
|
105
|
+
return __generator(this, function (_b) {
|
|
106
|
+
switch (_b.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
if (!true) return [3 /*break*/, 7];
|
|
109
|
+
if (!(index < buffer.length)) return [3 /*break*/, 3];
|
|
110
|
+
return [4 /*yield*/, __await(buffer[index++])];
|
|
111
|
+
case 1: return [4 /*yield*/, _b.sent()];
|
|
112
|
+
case 2:
|
|
113
|
+
_b.sent();
|
|
114
|
+
return [3 /*break*/, 0];
|
|
115
|
+
case 3:
|
|
116
|
+
// If already done, exit
|
|
117
|
+
if (done) {
|
|
118
|
+
return [3 /*break*/, 7];
|
|
119
|
+
}
|
|
120
|
+
gen = getBaseGenerator();
|
|
121
|
+
return [4 /*yield*/, __await(gen.next())];
|
|
122
|
+
case 4:
|
|
123
|
+
_a = _b.sent(), value = _a.value, isDone = _a.done;
|
|
124
|
+
if (isDone) {
|
|
125
|
+
done = true;
|
|
126
|
+
return [3 /*break*/, 7];
|
|
127
|
+
}
|
|
128
|
+
// Buffer and yield
|
|
129
|
+
buffer.push(value);
|
|
130
|
+
return [4 /*yield*/, __await(value)];
|
|
131
|
+
case 5: return [4 /*yield*/, _b.sent()];
|
|
132
|
+
case 6:
|
|
133
|
+
_b.sent();
|
|
134
|
+
index++;
|
|
135
|
+
return [3 /*break*/, 0];
|
|
136
|
+
case 7: return [2 /*return*/];
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
})();
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
result: this.consumeAsResult(createIterator()),
|
|
144
|
+
textStream: this.consumeAsTextStream(createIterator()),
|
|
145
|
+
fullStream: createIterator(),
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Consume stream as final result (for await pattern)
|
|
150
|
+
*/
|
|
151
|
+
AgentExecutor.prototype.consumeAsResult = function (stream) {
|
|
152
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
153
|
+
var result, chunk, e_1_1;
|
|
154
|
+
var _a, stream_1, stream_1_1;
|
|
155
|
+
var _b, e_1, _c, _d;
|
|
156
|
+
return __generator(this, function (_e) {
|
|
157
|
+
switch (_e.label) {
|
|
158
|
+
case 0:
|
|
159
|
+
_e.trys.push([0, 5, 6, 11]);
|
|
160
|
+
_a = true, stream_1 = __asyncValues(stream);
|
|
161
|
+
_e.label = 1;
|
|
162
|
+
case 1: return [4 /*yield*/, stream_1.next()];
|
|
163
|
+
case 2:
|
|
164
|
+
if (!(stream_1_1 = _e.sent(), _b = stream_1_1.done, !_b)) return [3 /*break*/, 4];
|
|
165
|
+
_d = stream_1_1.value;
|
|
166
|
+
_a = false;
|
|
167
|
+
chunk = _d;
|
|
168
|
+
if (chunk.type === "complete") {
|
|
169
|
+
result = chunk.result;
|
|
170
|
+
}
|
|
171
|
+
_e.label = 3;
|
|
172
|
+
case 3:
|
|
173
|
+
_a = true;
|
|
174
|
+
return [3 /*break*/, 1];
|
|
175
|
+
case 4: return [3 /*break*/, 11];
|
|
176
|
+
case 5:
|
|
177
|
+
e_1_1 = _e.sent();
|
|
178
|
+
e_1 = { error: e_1_1 };
|
|
179
|
+
return [3 /*break*/, 11];
|
|
180
|
+
case 6:
|
|
181
|
+
_e.trys.push([6, , 9, 10]);
|
|
182
|
+
if (!(!_a && !_b && (_c = stream_1.return))) return [3 /*break*/, 8];
|
|
183
|
+
return [4 /*yield*/, _c.call(stream_1)];
|
|
184
|
+
case 7:
|
|
185
|
+
_e.sent();
|
|
186
|
+
_e.label = 8;
|
|
187
|
+
case 8: return [3 /*break*/, 10];
|
|
188
|
+
case 9:
|
|
189
|
+
if (e_1) throw e_1.error;
|
|
190
|
+
return [7 /*endfinally*/];
|
|
191
|
+
case 10: return [7 /*endfinally*/];
|
|
192
|
+
case 11:
|
|
193
|
+
if (!result) {
|
|
194
|
+
throw new Error("Agent execution did not complete");
|
|
195
|
+
}
|
|
196
|
+
return [2 /*return*/, result];
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Consume stream as text-only stream (for simple streaming UX)
|
|
203
|
+
*/
|
|
204
|
+
AgentExecutor.prototype.consumeAsTextStream = function (stream) {
|
|
205
|
+
return __asyncGenerator(this, arguments, function consumeAsTextStream_1() {
|
|
206
|
+
var _a, stream_2, stream_2_1, chunk, e_2_1;
|
|
207
|
+
var _b, e_2, _c, _d;
|
|
208
|
+
return __generator(this, function (_e) {
|
|
209
|
+
switch (_e.label) {
|
|
210
|
+
case 0:
|
|
211
|
+
_e.trys.push([0, 7, 8, 13]);
|
|
212
|
+
_a = true, stream_2 = __asyncValues(stream);
|
|
213
|
+
_e.label = 1;
|
|
214
|
+
case 1: return [4 /*yield*/, __await(stream_2.next())];
|
|
215
|
+
case 2:
|
|
216
|
+
if (!(stream_2_1 = _e.sent(), _b = stream_2_1.done, !_b)) return [3 /*break*/, 6];
|
|
217
|
+
_d = stream_2_1.value;
|
|
218
|
+
_a = false;
|
|
219
|
+
chunk = _d;
|
|
220
|
+
if (!(chunk.type === "text_delta")) return [3 /*break*/, 5];
|
|
221
|
+
return [4 /*yield*/, __await(chunk.delta)];
|
|
222
|
+
case 3: return [4 /*yield*/, _e.sent()];
|
|
223
|
+
case 4:
|
|
224
|
+
_e.sent();
|
|
225
|
+
_e.label = 5;
|
|
226
|
+
case 5:
|
|
227
|
+
_a = true;
|
|
228
|
+
return [3 /*break*/, 1];
|
|
229
|
+
case 6: return [3 /*break*/, 13];
|
|
230
|
+
case 7:
|
|
231
|
+
e_2_1 = _e.sent();
|
|
232
|
+
e_2 = { error: e_2_1 };
|
|
233
|
+
return [3 /*break*/, 13];
|
|
234
|
+
case 8:
|
|
235
|
+
_e.trys.push([8, , 11, 12]);
|
|
236
|
+
if (!(!_a && !_b && (_c = stream_2.return))) return [3 /*break*/, 10];
|
|
237
|
+
return [4 /*yield*/, __await(_c.call(stream_2))];
|
|
238
|
+
case 9:
|
|
239
|
+
_e.sent();
|
|
240
|
+
_e.label = 10;
|
|
241
|
+
case 10: return [3 /*break*/, 12];
|
|
242
|
+
case 11:
|
|
243
|
+
if (e_2) throw e_2.error;
|
|
244
|
+
return [7 /*endfinally*/];
|
|
245
|
+
case 12: return [7 /*endfinally*/];
|
|
246
|
+
case 13: return [2 /*return*/];
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
AgentExecutor.prototype.getRunner = function () {
|
|
252
|
+
if (!this.runner) {
|
|
253
|
+
this.runner = new AgentRunner_1.AgentRunner(this.agentProps, this.tools, this.llmAdapters, this.agentName);
|
|
254
|
+
}
|
|
255
|
+
return this.runner;
|
|
256
|
+
};
|
|
257
|
+
AgentExecutor.prototype.checkPermissionsSync = function (user) {
|
|
258
|
+
var perms = this.agentProps.permissions;
|
|
259
|
+
if (!perms)
|
|
260
|
+
return;
|
|
261
|
+
if (typeof perms === "function") {
|
|
262
|
+
var hasPermission = perms(user);
|
|
263
|
+
if (!hasPermission) {
|
|
264
|
+
throw new Error("Permission denied for agent ".concat(this.agentName || "unknown"));
|
|
265
|
+
}
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (!user) {
|
|
269
|
+
throw new Error("Permission denied for agent ".concat(this.agentName || "unknown"));
|
|
270
|
+
}
|
|
271
|
+
var requiredPerms = Array.isArray(perms) ? perms : [perms];
|
|
272
|
+
var userPerms = user.permissions || [];
|
|
273
|
+
if (!requiredPerms.every(function (p) { return userPerms.includes(p); })) {
|
|
274
|
+
throw new Error("Permission denied for agent ".concat(this.agentName || "unknown"));
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
return AgentExecutor;
|
|
278
|
+
}());
|
|
279
|
+
exports.AgentExecutor = AgentExecutor;
|