@devflow-tools/server 0.18.2 → 0.18.4
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 +7 -3
- package/dist/common/error-codes.d.ts +3 -0
- package/dist/common/error-codes.d.ts.map +1 -1
- package/dist/common/error-codes.js +3 -0
- package/dist/common/error-codes.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -1
- package/dist/main.js.map +1 -1
- package/dist/runtime-readiness.d.ts +23 -0
- package/dist/runtime-readiness.d.ts.map +1 -0
- package/dist/runtime-readiness.js +57 -0
- package/dist/runtime-readiness.js.map +1 -0
- package/dist/server.controller.d.ts +10 -0
- package/dist/server.controller.d.ts.map +1 -1
- package/dist/server.controller.js +25 -1
- package/dist/server.controller.js.map +1 -1
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ npm install @devflow-tools/server
|
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
npm install -g @devflow-tools/cli
|
|
17
|
-
devflow
|
|
17
|
+
devflow dashboard
|
|
18
18
|
# 默认监听 http://127.0.0.1:13337
|
|
19
19
|
```
|
|
20
20
|
|
|
@@ -22,6 +22,10 @@ devflow server start
|
|
|
22
22
|
|
|
23
23
|
binary `devflow-server`;提供 `/api/context`、`/api/graph`、`/api/workflows`、`/api/memory`、`/api/knowledge`、`/api/telemetry`、`/api/benchmark` 和 `/api/registry`。
|
|
24
24
|
|
|
25
|
+
## Runtime 与 Dashboard
|
|
26
|
+
|
|
27
|
+
建议使用 `devflow dashboard` 管理用户级 Runtime;`devflow dashboard --open` 才会打开浏览器,`devflow dashboard --no-start` 只查询已就绪实例。`/api/health` 是存活检查;`/api/ready` 还验证 Dashboard 静态资源、实例归属和数据库就绪状态。
|
|
28
|
+
|
|
25
29
|
|
|
26
30
|
二进制入口:
|
|
27
31
|
- `devflow-server`
|
|
@@ -32,8 +36,8 @@ binary `devflow-server`;提供 `/api/context`、`/api/graph`、`/api/workflows
|
|
|
32
36
|
|
|
33
37
|
## 版本与兼容性
|
|
34
38
|
|
|
35
|
-
- 当前包版本:`0.
|
|
36
|
-
- Node.js
|
|
39
|
+
- 当前包版本:`0.18.3`
|
|
40
|
+
- Node.js:22.13.0+
|
|
37
41
|
- workspace 内部包应使用同一 DevFlow minor/patch 版本,避免类型和数据库 schema 不一致
|
|
38
42
|
|
|
39
43
|
## 相关链接
|
|
@@ -12,6 +12,9 @@ export declare const ErrorCode: {
|
|
|
12
12
|
readonly BAD_REQUEST: "BAD_REQUEST";
|
|
13
13
|
readonly VALIDATION_ERROR: "VALIDATION_ERROR";
|
|
14
14
|
readonly INTERNAL_ERROR: "INTERNAL_ERROR";
|
|
15
|
+
readonly RUNTIME_OWNER_MISMATCH: "RUNTIME_OWNER_MISMATCH";
|
|
16
|
+
readonly DASHBOARD_BUNDLE_MISSING: "DASHBOARD_BUNDLE_MISSING";
|
|
17
|
+
readonly DATABASE_NOT_READY: "DATABASE_NOT_READY";
|
|
15
18
|
};
|
|
16
19
|
export type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];
|
|
17
20
|
//# sourceMappingURL=error-codes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/common/error-codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/common/error-codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;CAiBZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
|
|
@@ -12,5 +12,8 @@ export const ErrorCode = {
|
|
|
12
12
|
BAD_REQUEST: "BAD_REQUEST",
|
|
13
13
|
VALIDATION_ERROR: "VALIDATION_ERROR",
|
|
14
14
|
INTERNAL_ERROR: "INTERNAL_ERROR",
|
|
15
|
+
RUNTIME_OWNER_MISMATCH: "RUNTIME_OWNER_MISMATCH",
|
|
16
|
+
DASHBOARD_BUNDLE_MISSING: "DASHBOARD_BUNDLE_MISSING",
|
|
17
|
+
DATABASE_NOT_READY: "DATABASE_NOT_READY",
|
|
15
18
|
};
|
|
16
19
|
//# sourceMappingURL=error-codes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/common/error-codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,wBAAwB,EAAE,0BAA0B;IACpD,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;IAC9B,oBAAoB,EAAE,sBAAsB;IAC5C,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/common/error-codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,wBAAwB,EAAE,0BAA0B;IACpD,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;IAC9B,oBAAoB,EAAE,sBAAsB;IAC5C,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;IACpD,kBAAkB,EAAE,oBAAoB;CAChC,CAAC"}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAEL,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAEL,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAgClC,wBAAsB,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAkGjE"}
|
package/dist/main.js
CHANGED
|
@@ -9,6 +9,7 @@ import send from "@fastify/send";
|
|
|
9
9
|
import { AppModule } from "./app.module.js";
|
|
10
10
|
import { HttpExceptionFilter } from "./common/http-exception.filter.js";
|
|
11
11
|
import { createDashboardSessionCookie, isLoopbackHost, } from "./auth/dashboard-session.js";
|
|
12
|
+
import { configureRuntimeReadiness } from "./runtime-readiness.js";
|
|
12
13
|
function resolveDashboardDir() {
|
|
13
14
|
const require = createRequire(import.meta.url);
|
|
14
15
|
// Production: dashboard static files in devflow package dist
|
|
@@ -31,6 +32,9 @@ function resolveDashboardDir() {
|
|
|
31
32
|
return null;
|
|
32
33
|
}
|
|
33
34
|
export async function bootstrap() {
|
|
35
|
+
const tokenIndex = process.argv.indexOf("--devflow-instance-token");
|
|
36
|
+
const instanceToken = tokenIndex >= 0 ? process.argv[tokenIndex + 1] : process.env.DEVFLOW_INSTANCE_TOKEN;
|
|
37
|
+
const instanceTokenHash = instanceToken ? (await import("node:crypto")).createHash("sha256").update(instanceToken).digest("hex") : null;
|
|
34
38
|
const adapter = new FastifyAdapter();
|
|
35
39
|
const app = await NestFactory.create(AppModule, adapter);
|
|
36
40
|
app.setGlobalPrefix("api");
|
|
@@ -61,6 +65,8 @@ export async function bootstrap() {
|
|
|
61
65
|
});
|
|
62
66
|
// Serve dashboard static files
|
|
63
67
|
const dashboardDir = resolveDashboardDir();
|
|
68
|
+
const port = parseInt(process.env.PORT || "13337", 10);
|
|
69
|
+
configureRuntimeReadiness({ dashboardDir, instanceTokenHash, port, version: "0.18.3" });
|
|
64
70
|
if (dashboardDir) {
|
|
65
71
|
// Serve static files and the SPA fallback through one low-priority route;
|
|
66
72
|
// setNotFoundHandler conflicts with NestJS registration during app.listen().
|
|
@@ -98,7 +104,6 @@ export async function bootstrap() {
|
|
|
98
104
|
},
|
|
99
105
|
});
|
|
100
106
|
}
|
|
101
|
-
const port = parseInt(process.env.PORT || "13337", 10);
|
|
102
107
|
try {
|
|
103
108
|
await app.listen({ port, host: "127.0.0.1" });
|
|
104
109
|
}
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,cAAc,GAEf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,4BAA4B,EAC5B,cAAc,GACf,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type RuntimeFailureCode } from '@devflow-tools/sdk';
|
|
2
|
+
export interface RuntimeReadinessConfig {
|
|
3
|
+
dashboardDir: string | null;
|
|
4
|
+
instanceTokenHash: string | null;
|
|
5
|
+
port: number;
|
|
6
|
+
version: string;
|
|
7
|
+
databaseReady?: () => boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface RuntimeReadinessResult {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
code?: RuntimeFailureCode;
|
|
12
|
+
message?: string;
|
|
13
|
+
port: number;
|
|
14
|
+
version: string;
|
|
15
|
+
buildHash?: string;
|
|
16
|
+
ownerVerified: boolean;
|
|
17
|
+
ownerTokenHashPrefix: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function configureRuntimeReadiness(next: Partial<RuntimeReadinessConfig>): void;
|
|
20
|
+
export declare function getRuntimeReadinessConfig(): RuntimeReadinessConfig;
|
|
21
|
+
export declare function resetRuntimeReadiness(): void;
|
|
22
|
+
export declare function checkRuntimeReadiness(): RuntimeReadinessResult;
|
|
23
|
+
//# sourceMappingURL=runtime-readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-readiness.d.ts","sourceRoot":"","sources":["../src/runtime-readiness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AASD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAErF;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAElE;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C;AAED,wBAAgB,qBAAqB,IAAI,sBAAsB,CAe9D"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { readRuntimeState } from '@devflow-tools/sdk';
|
|
5
|
+
let config = {
|
|
6
|
+
dashboardDir: null,
|
|
7
|
+
instanceTokenHash: null,
|
|
8
|
+
port: Number(process.env.PORT || 13337),
|
|
9
|
+
version: '0.18.3',
|
|
10
|
+
};
|
|
11
|
+
export function configureRuntimeReadiness(next) {
|
|
12
|
+
config = { ...config, ...next };
|
|
13
|
+
}
|
|
14
|
+
export function getRuntimeReadinessConfig() {
|
|
15
|
+
return { ...config };
|
|
16
|
+
}
|
|
17
|
+
export function resetRuntimeReadiness() {
|
|
18
|
+
config = {
|
|
19
|
+
dashboardDir: null,
|
|
20
|
+
instanceTokenHash: null,
|
|
21
|
+
port: Number(process.env.PORT || 13337),
|
|
22
|
+
version: '0.18.3',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function checkRuntimeReadiness() {
|
|
26
|
+
const ownerTokenHashPrefix = config.instanceTokenHash?.slice(0, 12) ?? '';
|
|
27
|
+
const state = readRuntimeState();
|
|
28
|
+
const ownerVerified = Boolean(config.instanceTokenHash
|
|
29
|
+
&& state
|
|
30
|
+
&& state.port === config.port
|
|
31
|
+
&& (state.status === 'launching' || state.status === 'ready')
|
|
32
|
+
&& hash(state.ownerToken) === config.instanceTokenHash);
|
|
33
|
+
if (!ownerVerified)
|
|
34
|
+
return failure('RUNTIME_OWNER_MISMATCH', 'Runtime owner could not be verified.');
|
|
35
|
+
if (!config.dashboardDir || !existsSync(join(config.dashboardDir, 'index.html')))
|
|
36
|
+
return failure('DASHBOARD_BUNDLE_MISSING', 'Dashboard bundle is missing.');
|
|
37
|
+
if (config.databaseReady && !config.databaseReady())
|
|
38
|
+
return failure('DATABASE_NOT_READY', 'Runtime database is not ready.');
|
|
39
|
+
const buildHash = readBuildHash(config.dashboardDir);
|
|
40
|
+
return { ok: true, port: config.port, version: config.version, buildHash, ownerVerified, ownerTokenHashPrefix };
|
|
41
|
+
}
|
|
42
|
+
function failure(code, message) {
|
|
43
|
+
return { ok: false, code, message, port: config.port, version: config.version, ownerVerified: false, ownerTokenHashPrefix: config.instanceTokenHash?.slice(0, 12) ?? '' };
|
|
44
|
+
}
|
|
45
|
+
function hash(value) { return createHash('sha256').update(value).digest('hex'); }
|
|
46
|
+
function readBuildHash(dir) {
|
|
47
|
+
for (const file of ['manifest.json', 'build-manifest.json']) {
|
|
48
|
+
try {
|
|
49
|
+
const value = JSON.parse(readFileSync(join(dir, file), 'utf8'));
|
|
50
|
+
if (value.buildHash)
|
|
51
|
+
return value.buildHash;
|
|
52
|
+
}
|
|
53
|
+
catch { }
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=runtime-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-readiness.js","sourceRoot":"","sources":["../src/runtime-readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,15 @@ export declare class ServerController {
|
|
|
4
4
|
version: string;
|
|
5
5
|
uptime: number;
|
|
6
6
|
};
|
|
7
|
+
ready(): {
|
|
8
|
+
runtime: string;
|
|
9
|
+
pid: number;
|
|
10
|
+
port: number;
|
|
11
|
+
dashboard: boolean;
|
|
12
|
+
version: string;
|
|
13
|
+
buildHash: string | undefined;
|
|
14
|
+
ownerVerified: boolean;
|
|
15
|
+
ownerTokenHashPrefix: string;
|
|
16
|
+
};
|
|
7
17
|
}
|
|
8
18
|
//# sourceMappingURL=server.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.controller.d.ts","sourceRoot":"","sources":["../src/server.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.controller.d.ts","sourceRoot":"","sources":["../src/server.controller.ts"],"names":[],"mappings":"AAIA,qBACa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAc;IAI/B,MAAM;;;;IAMN,KAAK;;;;;;;;;;CAgBN"}
|
|
@@ -7,8 +7,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import { Controller, Get } from "@nestjs/common";
|
|
10
|
+
import { Controller, Get, HttpException, HttpStatus } from "@nestjs/common";
|
|
11
11
|
import { Public } from "./auth/api-key.decorator.js";
|
|
12
|
+
import { checkRuntimeReadiness } from "./runtime-readiness.js";
|
|
12
13
|
let ServerController = class ServerController {
|
|
13
14
|
constructor() {
|
|
14
15
|
this.startTime = Date.now();
|
|
@@ -16,6 +17,22 @@ let ServerController = class ServerController {
|
|
|
16
17
|
health() {
|
|
17
18
|
return { version: "0.2.3", uptime: Date.now() - this.startTime };
|
|
18
19
|
}
|
|
20
|
+
ready() {
|
|
21
|
+
const result = checkRuntimeReadiness();
|
|
22
|
+
if (!result.ok) {
|
|
23
|
+
throw new HttpException({ error: { code: result.code, message: result.message, details: {} } }, HttpStatus.SERVICE_UNAVAILABLE);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
runtime: "ready",
|
|
27
|
+
pid: process.pid,
|
|
28
|
+
port: result.port,
|
|
29
|
+
dashboard: true,
|
|
30
|
+
version: result.version,
|
|
31
|
+
buildHash: result.buildHash,
|
|
32
|
+
ownerVerified: result.ownerVerified,
|
|
33
|
+
ownerTokenHashPrefix: result.ownerTokenHashPrefix,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
19
36
|
};
|
|
20
37
|
__decorate([
|
|
21
38
|
Public(),
|
|
@@ -24,6 +41,13 @@ __decorate([
|
|
|
24
41
|
__metadata("design:paramtypes", []),
|
|
25
42
|
__metadata("design:returntype", void 0)
|
|
26
43
|
], ServerController.prototype, "health", null);
|
|
44
|
+
__decorate([
|
|
45
|
+
Public(),
|
|
46
|
+
Get("ready"),
|
|
47
|
+
__metadata("design:type", Function),
|
|
48
|
+
__metadata("design:paramtypes", []),
|
|
49
|
+
__metadata("design:returntype", void 0)
|
|
50
|
+
], ServerController.prototype, "ready", null);
|
|
27
51
|
ServerController = __decorate([
|
|
28
52
|
Controller()
|
|
29
53
|
], ServerController);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.controller.js","sourceRoot":"","sources":["../src/server.controller.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.controller.js","sourceRoot":"","sources":["../src/server.controller.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGxD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAAtB;QACG,cAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IA0BjC,CAAC;IAtBC,MAAM;QACJ,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACnE,CAAC;IAID,KAAK;QACH,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAClI,CAAC;QACD,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;SAClD,CAAC;IACJ,CAAC;CACF,CAAA;AAtBC;IAFC,MAAM,EAAE;IACR,GAAG,CAAC,QAAQ,CAAC;;;;8CAGb;AAID;IAFC,MAAM,EAAE;IACR,GAAG,CAAC,OAAO,CAAC;;;;6CAgBZ;AA1BU,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CA2B5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/server",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/main.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"clean": "rm -rf dist"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@devflow-tools/adapters": "0.18.
|
|
19
|
-
"@devflow-tools/benchmark": "0.18.
|
|
20
|
-
"@devflow-tools/context-engine": "0.18.
|
|
21
|
-
"@devflow-tools/database": "0.18.
|
|
22
|
-
"@devflow-tools/knowledge-engine": "0.18.
|
|
23
|
-
"@devflow-tools/mcp-server": "0.18.
|
|
24
|
-
"@devflow-tools/memory-engine": "0.18.
|
|
25
|
-
"@devflow-tools/sdk": "0.18.
|
|
26
|
-
"@devflow-tools/telemetry": "0.18.
|
|
27
|
-
"@devflow-tools/workflow-engine": "0.18.
|
|
18
|
+
"@devflow-tools/adapters": "0.18.4",
|
|
19
|
+
"@devflow-tools/benchmark": "0.18.4",
|
|
20
|
+
"@devflow-tools/context-engine": "0.18.4",
|
|
21
|
+
"@devflow-tools/database": "0.18.4",
|
|
22
|
+
"@devflow-tools/knowledge-engine": "0.18.4",
|
|
23
|
+
"@devflow-tools/mcp-server": "0.18.4",
|
|
24
|
+
"@devflow-tools/memory-engine": "0.18.4",
|
|
25
|
+
"@devflow-tools/sdk": "0.18.4",
|
|
26
|
+
"@devflow-tools/telemetry": "0.18.4",
|
|
27
|
+
"@devflow-tools/workflow-engine": "0.18.4",
|
|
28
28
|
"@fastify/send": "^4.1.1",
|
|
29
29
|
"@nestjs/common": "^11.1.28",
|
|
30
30
|
"@nestjs/core": "^11.1.28",
|