@gt-fe/eap-sdk 0.0.6
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 +370 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/user-session.d.ts +23 -0
- package/dist/auth/user-session.d.ts.map +1 -0
- package/dist/auth/user-session.js +162 -0
- package/dist/auth/user-session.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/project-runtime.d.ts +25 -0
- package/dist/config/project-runtime.d.ts.map +1 -0
- package/dist/config/project-runtime.js +80 -0
- package/dist/config/project-runtime.js.map +1 -0
- package/dist/digest.d.ts +6 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +17 -0
- package/dist/digest.js.map +1 -0
- package/dist/discovery/agent-errors.d.ts +6 -0
- package/dist/discovery/agent-errors.d.ts.map +1 -0
- package/dist/discovery/agent-errors.js +9 -0
- package/dist/discovery/agent-errors.js.map +1 -0
- package/dist/discovery/find-agent-root.d.ts +7 -0
- package/dist/discovery/find-agent-root.d.ts.map +1 -0
- package/dist/discovery/find-agent-root.js +32 -0
- package/dist/discovery/find-agent-root.js.map +1 -0
- package/dist/discovery/index.d.ts +4 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +4 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/resolve-agent-project.d.ts +10 -0
- package/dist/discovery/resolve-agent-project.d.ts.map +1 -0
- package/dist/discovery/resolve-agent-project.js +68 -0
- package/dist/discovery/resolve-agent-project.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lockfile/index.d.ts +5 -0
- package/dist/lockfile/index.d.ts.map +1 -0
- package/dist/lockfile/index.js +5 -0
- package/dist/lockfile/index.js.map +1 -0
- package/dist/lockfile/read-lockfile.d.ts +4 -0
- package/dist/lockfile/read-lockfile.d.ts.map +1 -0
- package/dist/lockfile/read-lockfile.js +22 -0
- package/dist/lockfile/read-lockfile.js.map +1 -0
- package/dist/lockfile/resolve-dependencies.d.ts +22 -0
- package/dist/lockfile/resolve-dependencies.d.ts.map +1 -0
- package/dist/lockfile/resolve-dependencies.js +117 -0
- package/dist/lockfile/resolve-dependencies.js.map +1 -0
- package/dist/lockfile/types.d.ts +9 -0
- package/dist/lockfile/types.d.ts.map +1 -0
- package/dist/lockfile/types.js +2 -0
- package/dist/lockfile/types.js.map +1 -0
- package/dist/lockfile/write-lockfile.d.ts +5 -0
- package/dist/lockfile/write-lockfile.d.ts.map +1 -0
- package/dist/lockfile/write-lockfile.js +53 -0
- package/dist/lockfile/write-lockfile.js.map +1 -0
- package/dist/materialization/copy-resource-directory.d.ts +2 -0
- package/dist/materialization/copy-resource-directory.d.ts.map +1 -0
- package/dist/materialization/copy-resource-directory.js +49 -0
- package/dist/materialization/copy-resource-directory.js.map +1 -0
- package/dist/materialization/index.d.ts +4 -0
- package/dist/materialization/index.d.ts.map +1 -0
- package/dist/materialization/index.js +4 -0
- package/dist/materialization/index.js.map +1 -0
- package/dist/materialization/prepare-agent-runtime.d.ts +3 -0
- package/dist/materialization/prepare-agent-runtime.d.ts.map +1 -0
- package/dist/materialization/prepare-agent-runtime.js +248 -0
- package/dist/materialization/prepare-agent-runtime.js.map +1 -0
- package/dist/materialization/types.d.ts +16 -0
- package/dist/materialization/types.d.ts.map +1 -0
- package/dist/materialization/types.js +2 -0
- package/dist/materialization/types.js.map +1 -0
- package/dist/packaging/archive.d.ts +10 -0
- package/dist/packaging/archive.d.ts.map +1 -0
- package/dist/packaging/archive.js +129 -0
- package/dist/packaging/archive.js.map +1 -0
- package/dist/packaging/index.d.ts +4 -0
- package/dist/packaging/index.d.ts.map +1 -0
- package/dist/packaging/index.js +4 -0
- package/dist/packaging/index.js.map +1 -0
- package/dist/packaging/package-agent-project.d.ts +20 -0
- package/dist/packaging/package-agent-project.d.ts.map +1 -0
- package/dist/packaging/package-agent-project.js +100 -0
- package/dist/packaging/package-agent-project.js.map +1 -0
- package/dist/packaging/read-package.d.ts +8 -0
- package/dist/packaging/read-package.d.ts.map +1 -0
- package/dist/packaging/read-package.js +48 -0
- package/dist/packaging/read-package.js.map +1 -0
- package/dist/platform/client.d.ts +3 -0
- package/dist/platform/client.d.ts.map +1 -0
- package/dist/platform/client.js +256 -0
- package/dist/platform/client.js.map +1 -0
- package/dist/platform/index.d.ts +3 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +3 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/types.d.ts +190 -0
- package/dist/platform/types.d.ts.map +1 -0
- package/dist/platform/types.js +2 -0
- package/dist/platform/types.js.map +1 -0
- package/dist/project/agent-project.d.ts +21 -0
- package/dist/project/agent-project.d.ts.map +1 -0
- package/dist/project/agent-project.js +74 -0
- package/dist/project/agent-project.js.map +1 -0
- package/dist/project/index.d.ts +2 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +2 -0
- package/dist/project/index.js.map +1 -0
- package/dist/resources/extract-resource-package.d.ts +9 -0
- package/dist/resources/extract-resource-package.d.ts.map +1 -0
- package/dist/resources/extract-resource-package.js +165 -0
- package/dist/resources/extract-resource-package.js.map +1 -0
- package/dist/resources/index.d.ts +7 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +7 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/install-agent-dependencies.d.ts +3 -0
- package/dist/resources/install-agent-dependencies.d.ts.map +1 -0
- package/dist/resources/install-agent-dependencies.js +95 -0
- package/dist/resources/install-agent-dependencies.js.map +1 -0
- package/dist/resources/install-agent-resource.d.ts +3 -0
- package/dist/resources/install-agent-resource.d.ts.map +1 -0
- package/dist/resources/install-agent-resource.js +69 -0
- package/dist/resources/install-agent-resource.js.map +1 -0
- package/dist/resources/install-local-agent-resource.d.ts +9 -0
- package/dist/resources/install-local-agent-resource.d.ts.map +1 -0
- package/dist/resources/install-local-agent-resource.js +60 -0
- package/dist/resources/install-local-agent-resource.js.map +1 -0
- package/dist/resources/local-resource.d.ts +7 -0
- package/dist/resources/local-resource.d.ts.map +1 -0
- package/dist/resources/local-resource.js +36 -0
- package/dist/resources/local-resource.js.map +1 -0
- package/dist/resources/registry-resource-client.d.ts +16 -0
- package/dist/resources/registry-resource-client.d.ts.map +1 -0
- package/dist/resources/registry-resource-client.js +49 -0
- package/dist/resources/registry-resource-client.js.map +1 -0
- package/dist/resources/resource-files.d.ts +13 -0
- package/dist/resources/resource-files.d.ts.map +1 -0
- package/dist/resources/resource-files.js +123 -0
- package/dist/resources/resource-files.js.map +1 -0
- package/dist/resources/types.d.ts +32 -0
- package/dist/resources/types.d.ts.map +1 -0
- package/dist/resources/types.js +2 -0
- package/dist/resources/types.js.map +1 -0
- package/dist/resources/uninstall-agent-resource.d.ts +16 -0
- package/dist/resources/uninstall-agent-resource.d.ts.map +1 -0
- package/dist/resources/uninstall-agent-resource.js +64 -0
- package/dist/resources/uninstall-agent-resource.js.map +1 -0
- package/dist/schema/agent/index.d.ts +3 -0
- package/dist/schema/agent/index.d.ts.map +1 -0
- package/dist/schema/agent/index.js +3 -0
- package/dist/schema/agent/index.js.map +1 -0
- package/dist/schema/agent/manifest.d.ts +2256 -0
- package/dist/schema/agent/manifest.d.ts.map +1 -0
- package/dist/schema/agent/manifest.js +53 -0
- package/dist/schema/agent/manifest.js.map +1 -0
- package/dist/schema/agent/selector.d.ts +13 -0
- package/dist/schema/agent/selector.d.ts.map +1 -0
- package/dist/schema/agent/selector.js +6 -0
- package/dist/schema/agent/selector.js.map +1 -0
- package/dist/schema/common.d.ts +9 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +40 -0
- package/dist/schema/common.js.map +1 -0
- package/dist/schema/dependencies-lock.d.ts +79 -0
- package/dist/schema/dependencies-lock.d.ts.map +1 -0
- package/dist/schema/dependencies-lock.js +18 -0
- package/dist/schema/dependencies-lock.js.map +1 -0
- package/dist/schema/graph.d.ts +2702 -0
- package/dist/schema/graph.d.ts.map +1 -0
- package/dist/schema/graph.js +143 -0
- package/dist/schema/graph.js.map +1 -0
- package/dist/schema/index.d.ts +11 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +11 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/json-schema.d.ts +4 -0
- package/dist/schema/json-schema.d.ts.map +1 -0
- package/dist/schema/json-schema.js +14 -0
- package/dist/schema/json-schema.js.map +1 -0
- package/dist/schema/lockfile.d.ts +215 -0
- package/dist/schema/lockfile.d.ts.map +1 -0
- package/dist/schema/lockfile.js +33 -0
- package/dist/schema/lockfile.js.map +1 -0
- package/dist/schema/package-manifest.d.ts +65 -0
- package/dist/schema/package-manifest.d.ts.map +1 -0
- package/dist/schema/package-manifest.js +48 -0
- package/dist/schema/package-manifest.js.map +1 -0
- package/dist/schema/project-config.d.ts +138 -0
- package/dist/schema/project-config.d.ts.map +1 -0
- package/dist/schema/project-config.js +29 -0
- package/dist/schema/project-config.js.map +1 -0
- package/dist/schema/skill/index.d.ts +2 -0
- package/dist/schema/skill/index.d.ts.map +1 -0
- package/dist/schema/skill/index.js +2 -0
- package/dist/schema/skill/index.js.map +1 -0
- package/dist/schema/skill/manifest.d.ts +156 -0
- package/dist/schema/skill/manifest.d.ts.map +1 -0
- package/dist/schema/skill/manifest.js +43 -0
- package/dist/schema/skill/manifest.js.map +1 -0
- package/dist/schema/tool/index.d.ts +3 -0
- package/dist/schema/tool/index.d.ts.map +1 -0
- package/dist/schema/tool/index.js +3 -0
- package/dist/schema/tool/index.js.map +1 -0
- package/dist/schema/tool/manifest.d.ts +1342 -0
- package/dist/schema/tool/manifest.d.ts.map +1 -0
- package/dist/schema/tool/manifest.js +127 -0
- package/dist/schema/tool/manifest.js.map +1 -0
- package/dist/schema/tool/read-tool-manifest.d.ts +7 -0
- package/dist/schema/tool/read-tool-manifest.d.ts.map +1 -0
- package/dist/schema/tool/read-tool-manifest.js +42 -0
- package/dist/schema/tool/read-tool-manifest.js.map +1 -0
- package/dist/service/create-agent-service.d.ts +12 -0
- package/dist/service/create-agent-service.d.ts.map +1 -0
- package/dist/service/create-agent-service.js +260 -0
- package/dist/service/create-agent-service.js.map +1 -0
- package/dist/service/events.d.ts +49 -0
- package/dist/service/events.d.ts.map +1 -0
- package/dist/service/events.js +2 -0
- package/dist/service/events.js.map +1 -0
- package/dist/service/http-server.d.ts +4 -0
- package/dist/service/http-server.d.ts.map +1 -0
- package/dist/service/http-server.js +89 -0
- package/dist/service/http-server.js.map +1 -0
- package/dist/service/index.d.ts +5 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +4 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/runtime-adapter.d.ts +4 -0
- package/dist/service/runtime-adapter.d.ts.map +1 -0
- package/dist/service/runtime-adapter.js +6 -0
- package/dist/service/runtime-adapter.js.map +1 -0
- package/dist/service/types.d.ts +48 -0
- package/dist/service/types.d.ts.map +1 -0
- package/dist/service/types.js +2 -0
- package/dist/service/types.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +5 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/types.d.ts +23 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +2 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validate-agent-directory.d.ts +8 -0
- package/dist/validation/validate-agent-directory.d.ts.map +1 -0
- package/dist/validation/validate-agent-directory.js +82 -0
- package/dist/validation/validate-agent-directory.js.map +1 -0
- package/dist/validation/validate-agent-project.d.ts +3 -0
- package/dist/validation/validate-agent-project.d.ts.map +1 -0
- package/dist/validation/validate-agent-project.js +99 -0
- package/dist/validation/validate-agent-project.js.map +1 -0
- package/dist/validation/validate-graph.d.ts +8 -0
- package/dist/validation/validate-graph.d.ts.map +1 -0
- package/dist/validation/validate-graph.js +127 -0
- package/dist/validation/validate-graph.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# @gt-fe/eap-sdk
|
|
2
|
+
|
|
3
|
+
`@gt-fe/eap-sdk` 是 EAP 单 Agent 项目的开发期 SDK,负责项目发现与校验、用户会话、平台 API、Tool/Skill 依赖安装、Runtime 目录物化、本地 Agent Service 以及确定性打包。
|
|
4
|
+
|
|
5
|
+
Agent 的实际执行仍由 `@gt-fe/eap-runtime` 负责。SDK 不重新实现 Graph 编译、节点执行、Tool 路由或 Runtime 事件协议。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @gt-fe/eap-sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
本包为纯 ESM:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { createAgentService } from '@gt-fe/eap-sdk';
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 项目模型
|
|
20
|
+
|
|
21
|
+
一个项目只开发一个 Agent,开发者维护的源文件位于项目根目录:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
<project>/
|
|
25
|
+
├── agent.manifest.json
|
|
26
|
+
├── graph.json
|
|
27
|
+
├── eap.config.json
|
|
28
|
+
├── eap.lock.yaml
|
|
29
|
+
├── tools/<code>/...
|
|
30
|
+
├── skills/<code>/...
|
|
31
|
+
└── .eap/
|
|
32
|
+
├── remote/ # Registry 资源缓存
|
|
33
|
+
├── runtime/ # 开发态 EAP_PREINSTALL_ROOT
|
|
34
|
+
│ └── agents/<agentCode>/<version>/preinstall|users/
|
|
35
|
+
├── sessions/ # 可选的本地会话数据
|
|
36
|
+
├── package-staging/ # 打包临时目录
|
|
37
|
+
└── package/ # 默认包输出目录
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`agent.manifest.json`、`graph.json`、`eap.config.json`、`eap.lock.yaml` 以及本地 `tools/`、`skills/` 是项目输入;`.eap/` 是 SDK 生成的可删除状态。
|
|
41
|
+
|
|
42
|
+
项目 `eap.config.json.version` 必须严格等于当前安装的 `@gt-fe/eap-sdk` package version;字段级配置和部署交付说明见 [dev-tools 文档入口](../../docs/README.md)。
|
|
43
|
+
|
|
44
|
+
`findAgentRoot()` 和 `resolveAgentProject()` 只发现源项目,不使用 `EAP_PREINSTALL_ROOT`。选择器只支持 `root` 和 `startDir`,不存在 Agent code、版本或目录歧义选择。
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import {
|
|
48
|
+
resolveAgentProject,
|
|
49
|
+
validateAgentProject,
|
|
50
|
+
type AgentProjectSelector,
|
|
51
|
+
} from '@gt-fe/eap-sdk';
|
|
52
|
+
|
|
53
|
+
const selector: AgentProjectSelector = { root: process.cwd() };
|
|
54
|
+
const project = resolveAgentProject(selector);
|
|
55
|
+
const validation = validateAgentProject(project.root);
|
|
56
|
+
|
|
57
|
+
if (!validation.valid) {
|
|
58
|
+
console.error(validation.issues);
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 核心能力
|
|
63
|
+
|
|
64
|
+
| 能力 | 主要 API | 说明 |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| 项目发现 | `findAgentRoot()`、`resolveAgentProject()` | 查找根级单 Agent 项目 |
|
|
67
|
+
| 项目校验 | `validateAgentProject()`、`validateGraph()` | 校验 Manifest、Graph、锁文件和资源路径 |
|
|
68
|
+
| 用户会话 | `getCurrentUserSession()`、`saveCurrentUserSession()` | 管理当前登录用户和平台 Token |
|
|
69
|
+
| 平台 API | `createPlatformClient()` | 访问 Portal、Foundation 和平台认证 |
|
|
70
|
+
| 依赖安装 | `installAgentResource()`、`installAgentDependencies()` | 下载或恢复 Tool/Skill ZIP 制品,并维护锁文件 |
|
|
71
|
+
| Runtime 物化 | `prepareAgentRuntime()` | 生成 Runtime 可直接读取的预装目录 |
|
|
72
|
+
| 本地服务 | `createAgentService()` | 物化后创建 Runtime-backed Agent Service |
|
|
73
|
+
| Standalone 服务 | `packageStandaloneAgentProject()`、`createEmbeddedAgentService()` | 将同一套物化 Runtime 输出到 `dist/runtime`,启动时不读取源项目 |
|
|
74
|
+
| 打包与验包 | `packageAgentProject()`、`readAgentPackage()` | 生成并校验单 Agent Runtime 部署包 |
|
|
75
|
+
| Schema | `AgentManifestSchema`、`GraphSchema`、`ToolManifestSchema` 等 | SDK 所有项目文件的 Zod Schema |
|
|
76
|
+
|
|
77
|
+
所有公共 API 均从包根导出,不需要导入内部路径。
|
|
78
|
+
|
|
79
|
+
## 平台 API
|
|
80
|
+
|
|
81
|
+
`createPlatformClient()` 是 Portal 与 Foundation HTTP 调用的统一入口。端点由调用方显式提供,客户端会使用当前用户会话 Token;也可通过 `token` 覆盖,便于服务端或测试宿主注入凭证。
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
import { createPlatformClient } from '@gt-fe/eap-sdk';
|
|
85
|
+
|
|
86
|
+
const platform = createPlatformClient({
|
|
87
|
+
portalEndpoint: 'https://portal.example',
|
|
88
|
+
foundationEndpoint: 'https://foundation.example',
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const agents = await platform.portalFetch('/api/v1/agents');
|
|
92
|
+
const deployment = await platform.foundationFetch('/api/v1/deployments', {
|
|
93
|
+
method: 'POST',
|
|
94
|
+
body: JSON.stringify({ agentCode: 'report-agent', version: '1.0.0' }),
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
客户端同时提供 `checkPortalHealth()`、`checkFoundationHealth()`、`uploadPortalFile()`,以及会保存统一用户会话的 `loginWithCas()`、`validateAndSaveToken()`,和吊销 Token 的 `revokeToken()`。Registry Tool/Skill 安装也使用此客户端,不再维护独立 HTTP 实现。
|
|
99
|
+
|
|
100
|
+
## 当前用户会话
|
|
101
|
+
|
|
102
|
+
SDK 将当前用户资料和平台凭证统一保存在 `~/.eap/config.json`;可通过 `EAP_CONFIG_DIR` 修改目录。
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import {
|
|
106
|
+
clearCurrentUserSession,
|
|
107
|
+
getCurrentUserSession,
|
|
108
|
+
getCurrentUserToken,
|
|
109
|
+
saveCurrentUserSession,
|
|
110
|
+
} from '@gt-fe/eap-sdk';
|
|
111
|
+
|
|
112
|
+
saveCurrentUserSession({
|
|
113
|
+
userId: 'U001',
|
|
114
|
+
username: 'alice',
|
|
115
|
+
roles: ['developer'],
|
|
116
|
+
permissions: [],
|
|
117
|
+
token: '<platform-token>',
|
|
118
|
+
authMethod: 'token',
|
|
119
|
+
platformUrl: 'https://foundation.example',
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
const user = getCurrentUserSession();
|
|
123
|
+
const token = getCurrentUserToken();
|
|
124
|
+
clearCurrentUserSession();
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
规则如下:
|
|
128
|
+
|
|
129
|
+
- 同一时刻只有一个当前用户,不随 CLI profile 或 Runtime storage profile 切换。
|
|
130
|
+
- `getCurrentUserSession()` 始终返回用户资料;没有已保存会话时返回 `default-user`。
|
|
131
|
+
- `getCurrentUserToken()` 优先读取 `EAP_TOKEN`,否则读取已保存 Token;默认用户不提供 Token。
|
|
132
|
+
- Runtime 环境准备会把当前 Token 映射为 `EAP_DELEGATION_TOKEN`。
|
|
133
|
+
- 用户资料在进程内缓存;测试或特殊宿主可调用 `clearUserSessionCache()` 清除缓存。
|
|
134
|
+
|
|
135
|
+
## 锁文件与资源安装
|
|
136
|
+
|
|
137
|
+
`eap.lock.yaml` 使用版本 2,只供 dev-tools 在安装、校验、Runtime 准备和打包时使用。Runtime 与生产 Hosting 都不会读取它。
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
lockfileVersion: 2
|
|
141
|
+
resources:
|
|
142
|
+
tools:
|
|
143
|
+
- code: search-tool
|
|
144
|
+
version: 1.2.0
|
|
145
|
+
source: registry
|
|
146
|
+
path: .eap/remote/tools/search-tool/1.2.0
|
|
147
|
+
digest: sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
|
148
|
+
skills: []
|
|
149
|
+
subagents: []
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
每条 Tool/Skill 记录包含:
|
|
153
|
+
|
|
154
|
+
- `code`:Agent Manifest 中声明的资源编码。
|
|
155
|
+
- `version`:确定的语义化版本。
|
|
156
|
+
- `source`:`registry` 或 `local`。
|
|
157
|
+
- `path`:相对于项目根的可移植目录路径。
|
|
158
|
+
- `digest`:对应 Manifest 文件字节的 SHA-256,用于开发态缓存完整性校验。
|
|
159
|
+
|
|
160
|
+
Registry 资源存放在 `.eap/remote`;本地资源继续由开发者维护在 `tools/<code>` 或 `skills/<code>`。本地 Tool 固定使用单工具 `tool.manifest.json`;Registry Tool 可以是 `toolset.manifest.json`,SDK 把它及同目录制品作为整体复制,不展开或校验其 `tools[]` 子工具。绝对路径、`..` 穿越、符号链接、缺失目录、缺失 Manifest 和本地/Registry 同名冲突都会被拒绝。
|
|
161
|
+
|
|
162
|
+
安装单个远程资源:
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { installAgentResource } from '@gt-fe/eap-sdk';
|
|
166
|
+
|
|
167
|
+
await installAgentResource({
|
|
168
|
+
root: process.cwd(),
|
|
169
|
+
kind: 'tool',
|
|
170
|
+
code: 'search-tool',
|
|
171
|
+
version: '1.2.0',
|
|
172
|
+
token: process.env.EAP_TOKEN,
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
按名称和精确版本安装当前项目中的本地资源:
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
import { installLocalAgentResource } from '@gt-fe/eap-sdk';
|
|
180
|
+
|
|
181
|
+
await installLocalAgentResource({
|
|
182
|
+
root: process.cwd(),
|
|
183
|
+
kind: 'tool',
|
|
184
|
+
code: 'echo-tool',
|
|
185
|
+
version: '1.0.0',
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
按名称卸载当前项目中的本地或 Registry 资源:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
import { uninstallAgentResource } from '@gt-fe/eap-sdk';
|
|
193
|
+
|
|
194
|
+
await uninstallAgentResource({
|
|
195
|
+
root: process.cwd(),
|
|
196
|
+
code: 'echo-tool',
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
恢复全部锁定资源并刷新本地资源记录:
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
import { installAgentDependencies } from '@gt-fe/eap-sdk';
|
|
204
|
+
|
|
205
|
+
const result = await installAgentDependencies({ root: process.cwd() });
|
|
206
|
+
console.log(result.restoredRegistryResources, result.refreshedLocalResources);
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
只有安装 API 会访问平台。服务启动和打包默认离线;远程缓存缺失时应先执行安装,而不是在 Runtime 启动后动态拉取。
|
|
210
|
+
|
|
211
|
+
Registry Tool/Skill 安装会按 code 和 version 查询 Portal 资源详情,并通过其中的 `source_url` 下载 ZIP 制品。制品会解压到 `.eap/remote/tools/<code>/<version>/` 或 `.eap/remote/skills/<code>/<version>/`;锁文件中的 `digest` 是解压后根 Manifest 文件字节的 SHA-256,用于离线完整性校验。
|
|
212
|
+
|
|
213
|
+
`agent.manifest.json` 只使用 `toolRefs`、`skillRefs` 和 `subagentRefs` 声明依赖;其中 `subagentRefs` 使用 `{ code, version }`,不会触发 Tool/Skill ZIP 下载。
|
|
214
|
+
|
|
215
|
+
## Runtime 目录物化
|
|
216
|
+
|
|
217
|
+
`prepareAgentRuntime()` 根据 Agent Manifest 和 `eap.lock.yaml` 生成一棵完整、干净的 Runtime 目录:
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
import { prepareAgentRuntime } from '@gt-fe/eap-sdk';
|
|
221
|
+
|
|
222
|
+
const prepared = await prepareAgentRuntime({ root: process.cwd() });
|
|
223
|
+
console.log(prepared.runtimeRoot);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
资源映射规则:
|
|
227
|
+
|
|
228
|
+
| 来源 | Runtime 目标目录 |
|
|
229
|
+
|---|---|
|
|
230
|
+
| Registry Toolset | `agents/<agentCode>/<version>/preinstall/tools/<toolsetCode>/` |
|
|
231
|
+
| Registry Skill | `agents/<agentCode>/<version>/preinstall/skills/<skillCode>/` |
|
|
232
|
+
| 本地 Tool | `agents/<agentCode>/<version>/users/<developerUserId>/tools/<toolCode>/` |
|
|
233
|
+
| 本地 Skill | `agents/<agentCode>/<version>/users/<developerUserId>/skills/<skillCode>/` |
|
|
234
|
+
|
|
235
|
+
物化器还会:
|
|
236
|
+
|
|
237
|
+
- 复制根级 Agent Manifest 与 Graph。
|
|
238
|
+
- 校验本地资源的根 Manifest 摘要和 Registry 解压缓存中的根 Manifest 摘要;锁文件不记录 Registry ZIP 摘要。
|
|
239
|
+
- 生成 `dependencies.lock`、`snapshot.json` 和 `.ready`。
|
|
240
|
+
- 把 Registry Toolset/Skill 复制到该 Agent 的 `preinstall/`,把本地 Tool/Skill 复制到 `users/<developerUserId>/`;不再生成 `shared/`。
|
|
241
|
+
- 排除 `.git`、`.eap`、`node_modules`、`.env*`、coverage 和临时文件。
|
|
242
|
+
- 拒绝符号链接和越界路径。
|
|
243
|
+
- 通过临时目录加原子替换,避免 Runtime 看到半成品。
|
|
244
|
+
|
|
245
|
+
物化器不创建 Runtime、不启动 HTTP 服务、不访问平台,也不负责压缩包。
|
|
246
|
+
|
|
247
|
+
摘要字段的输入和格式见 [dev-tools SHA-256 摘要约定](../../docs/README.md#sha-256-摘要约定)。
|
|
248
|
+
|
|
249
|
+
## Agent 服务
|
|
250
|
+
|
|
251
|
+
`createAgentService()` 是异步工厂,因为必须先完成校验和目录物化,再构造 Runtime:
|
|
252
|
+
|
|
253
|
+
```ts
|
|
254
|
+
import { createAgentService } from '@gt-fe/eap-sdk';
|
|
255
|
+
|
|
256
|
+
const service = await createAgentService({
|
|
257
|
+
root: process.cwd(),
|
|
258
|
+
messages: [{ role: 'system', content: '你是一个数据分析助手。' }],
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
const result = await service.invoke('汇总这份报告');
|
|
262
|
+
|
|
263
|
+
for await (const event of service.stream('列出支撑数据')) {
|
|
264
|
+
console.log(event.type, event.data);
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
启动本地 HTTP 服务:
|
|
269
|
+
|
|
270
|
+
```ts
|
|
271
|
+
await service.start({ host: '127.0.0.1', port: 3000 });
|
|
272
|
+
// 使用结束后
|
|
273
|
+
await service.stop();
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
默认行为:
|
|
277
|
+
|
|
278
|
+
- `EAP_PREINSTALL_ROOT` 指向准备好的 `.eap/runtime`,不是项目源目录。
|
|
279
|
+
- Runtime 只从准备好的 `.eap/runtime` 读取 Tool/Skill 定义;本地资源必须先锁定并物化。
|
|
280
|
+
- 默认使用 Runtime `test` storage profile,不写入会话、消息或 checkpoint 文件。
|
|
281
|
+
- 设置 `sessionPersistence: true` 后使用 Runtime `dev` profile,会话和消息保存在 `.eap/sessions`。
|
|
282
|
+
|
|
283
|
+
需要注入自定义 Runtime 时,使用 `runtimeFactory(prepared, environment)`。不要传入已经构造完成、并绑定了其他 GraphLoader 根目录的 Runtime。
|
|
284
|
+
|
|
285
|
+
### Standalone Runtime 服务
|
|
286
|
+
|
|
287
|
+
使用现有 `eap package` 命令生成独立服务需要的 Runtime 目录:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
eap package --target standalone --output ./dist/runtime
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
该模式复用项目校验、资源解析、Runtime 物化和摘要校验,但不生成 TAR.GZ,也不复制项目的
|
|
294
|
+
`package.json`、`eap.config.json` 或 `eap.lock.yaml`。输出目录结构为
|
|
295
|
+
`dist/runtime/agents/<code>/<version>/`。
|
|
296
|
+
|
|
297
|
+
已由构建工具打包的服务入口可以直接消费该目录:
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
import { createEmbeddedAgentService } from '@gt-fe/eap-sdk';
|
|
301
|
+
import { dirname, join } from 'node:path';
|
|
302
|
+
import { fileURLToPath } from 'node:url';
|
|
303
|
+
|
|
304
|
+
const service = await createEmbeddedAgentService({
|
|
305
|
+
runtimeRoot: join(dirname(fileURLToPath(import.meta.url)), 'runtime'),
|
|
306
|
+
});
|
|
307
|
+
await service.start({ host: '0.0.0.0', port: 3000 });
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
`createEmbeddedAgentService()` 只校验并读取已物化 Runtime,不会重新发现源项目或执行物化。
|
|
311
|
+
默认的 `eap package` 行为不变,仍然生成可交付的 TAR.GZ 部署包。
|
|
312
|
+
|
|
313
|
+
## 打包与验包
|
|
314
|
+
|
|
315
|
+
`packageAgentProject()` 会独立生成 package staging Runtime 树,不复用开发态 `.eap/runtime`:
|
|
316
|
+
|
|
317
|
+
```ts
|
|
318
|
+
import { packageAgentProject, readAgentPackage } from '@gt-fe/eap-sdk';
|
|
319
|
+
|
|
320
|
+
const artifact = await packageAgentProject({
|
|
321
|
+
root: process.cwd(),
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
const verified = readAgentPackage(artifact.archivePath);
|
|
325
|
+
console.log(verified.manifest.agents[0], verified.digest);
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
默认输出:
|
|
329
|
+
|
|
330
|
+
```text
|
|
331
|
+
.eap/package/eap-agent-project.tar.gz
|
|
332
|
+
.eap/package/eap-agent-project.tar.gz.sha256
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
部署包只包含:
|
|
336
|
+
|
|
337
|
+
- 物化后的 Agent 版本目录内容,直接展开到包根目录(例如 `agent.manifest.json`、`graph.json`、`preinstall/`、`users/`)。
|
|
338
|
+
- 根目录的包文件索引 `eap-package.json`。
|
|
339
|
+
|
|
340
|
+
部署包不会包含 `eap.lock.yaml`、`.eap/remote`、会话、checkpoint、staging 名称或其他开发缓存。`readAgentPackage()` 会校验 `eap-package.json` 的所有文件大小和摘要,并要求包内恰好有一个 Agent。
|
|
341
|
+
|
|
342
|
+
## 项目配置映射
|
|
343
|
+
|
|
344
|
+
`eap.config.json` 由 `EapProjectConfigSchema` 校验。SDK 在 Runtime 构造前完成以下主要映射:
|
|
345
|
+
|
|
346
|
+
顶层 `version` 是 SDK package version;配置版本不匹配时项目校验、服务创建和打包都会失败。
|
|
347
|
+
|
|
348
|
+
| 项目配置或输入 | Runtime 环境变量 |
|
|
349
|
+
|---|---|
|
|
350
|
+
| `platform.portalUrl` | `EAP_PLATFORM_ENDPOINT` |
|
|
351
|
+
| `platform.foundationServiceUrl` | `FOUNDATION_SERVICE_URL` |
|
|
352
|
+
| `runtime.deploymentContext` | `EAP_DEPLOYMENT_CONTEXT` |
|
|
353
|
+
| `runtime.governance.enabled` | `GOVERNANCE_DISABLED` |
|
|
354
|
+
| `runtime.storage` | `EAP_RUNTIME_STORAGE_PROFILE`、`EAP_CHECKPOINT_DIR` |
|
|
355
|
+
| `runtime.tools` | `EAP_TOOL_EXECUTION_MODE`、`EAP_TOOL_GATEWAY_TRANSPORT` |
|
|
356
|
+
| 准备好的 Runtime 目录 | `EAP_PREINSTALL_ROOT` |
|
|
357
|
+
| 当前用户 Token | `EAP_DELEGATION_TOKEN` |
|
|
358
|
+
|
|
359
|
+
显式环境变量优先于大多数项目配置;`EAP_PREINSTALL_ROOT` 始终使用本次物化得到的目录。
|
|
360
|
+
|
|
361
|
+
## 内置模板
|
|
362
|
+
|
|
363
|
+
SDK 与 CLI 使用同一套根级单 Agent 项目约定。内置模板包括:
|
|
364
|
+
|
|
365
|
+
- `simple-flow`:固定顺序工作流。
|
|
366
|
+
- `single-agent-with-tools`:单 Agent + ReAct Tool 调用。
|
|
367
|
+
- `plan-and-execute`:规划、Tool 执行、总结。
|
|
368
|
+
- `dag-workflow`:条件分支与任务聚合。
|
|
369
|
+
|
|
370
|
+
工作流语义由 `graph.json` 表达,`agent.manifest.json` 只保存身份和依赖。包含 Tool 的模板自带本地、已锁定的 `echo-tool`,校验和打包不依赖 Registry 缓存。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type UserAuthMethod = 'token' | 'password' | 'cas';
|
|
2
|
+
export interface UserSession {
|
|
3
|
+
userId: string;
|
|
4
|
+
username?: string;
|
|
5
|
+
displayName?: string;
|
|
6
|
+
roles: string[];
|
|
7
|
+
permissions: string[];
|
|
8
|
+
token: string;
|
|
9
|
+
refreshToken?: string;
|
|
10
|
+
authMethod: UserAuthMethod;
|
|
11
|
+
platformUrl: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UserSessionOptions {
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
}
|
|
16
|
+
export declare const DEBUG_USER: UserSession;
|
|
17
|
+
export declare const DEFAULT_USER: UserSession;
|
|
18
|
+
export declare function getCurrentUserSession(options?: UserSessionOptions): UserSession;
|
|
19
|
+
export declare function getCurrentUserToken(options?: UserSessionOptions): string | undefined;
|
|
20
|
+
export declare function saveCurrentUserSession(session: UserSession, options?: UserSessionOptions): void;
|
|
21
|
+
export declare function clearCurrentUserSession(options?: UserSessionOptions): void;
|
|
22
|
+
export declare function clearUserSessionCache(): void;
|
|
23
|
+
//# sourceMappingURL=user-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-session.d.ts","sourceRoot":"","sources":["../../src/auth/user-session.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAMD,eAAO,MAAM,UAAU,EAAE,WASxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,WAS1B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CASnF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,GAAG,SAAS,CAIxF;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CAaN;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,kBAAuB,GAAG,IAAI,CAW9E;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
|
+
const configCache = new Map();
|
|
5
|
+
export const DEBUG_USER = {
|
|
6
|
+
userId: 'debug-user-001',
|
|
7
|
+
username: 'debug',
|
|
8
|
+
displayName: 'Debug User',
|
|
9
|
+
roles: ['admin', 'developer'],
|
|
10
|
+
permissions: ['read', 'write', 'delete', 'admin'],
|
|
11
|
+
token: 'debug-token',
|
|
12
|
+
authMethod: 'token',
|
|
13
|
+
platformUrl: 'http://localhost:3000',
|
|
14
|
+
};
|
|
15
|
+
export const DEFAULT_USER = {
|
|
16
|
+
userId: 'default-user',
|
|
17
|
+
username: 'default-user',
|
|
18
|
+
displayName: 'Default User',
|
|
19
|
+
roles: [],
|
|
20
|
+
permissions: [],
|
|
21
|
+
token: '',
|
|
22
|
+
authMethod: 'token',
|
|
23
|
+
platformUrl: '',
|
|
24
|
+
};
|
|
25
|
+
export function getCurrentUserSession(options = {}) {
|
|
26
|
+
const env = options.env ?? process.env;
|
|
27
|
+
const document = loadConfigDocument(configPath(env));
|
|
28
|
+
const session = normalizeUserSession(document.user);
|
|
29
|
+
if (session)
|
|
30
|
+
return session;
|
|
31
|
+
if (env.EAP_DEBUG_USER === 'true' || env.EAP_DEBUG_USER === '1') {
|
|
32
|
+
return cloneSession(DEBUG_USER);
|
|
33
|
+
}
|
|
34
|
+
return cloneSession(DEFAULT_USER);
|
|
35
|
+
}
|
|
36
|
+
export function getCurrentUserToken(options = {}) {
|
|
37
|
+
const env = options.env ?? process.env;
|
|
38
|
+
const override = nonEmptyString(env.EAP_TOKEN);
|
|
39
|
+
return override ?? nonEmptyString(getCurrentUserSession({ env }).token);
|
|
40
|
+
}
|
|
41
|
+
export function saveCurrentUserSession(session, options = {}) {
|
|
42
|
+
const env = options.env ?? process.env;
|
|
43
|
+
const path = configPath(env);
|
|
44
|
+
const document = loadConfigDocument(path);
|
|
45
|
+
document.user = cloneSession(session);
|
|
46
|
+
removeLegacyAuth(document);
|
|
47
|
+
const platform = asObject(document.platform) ?? {};
|
|
48
|
+
delete platform.endpoint;
|
|
49
|
+
delete platform.hostingEndpoint;
|
|
50
|
+
platform.portalUrl = session.platformUrl;
|
|
51
|
+
document.platform = platform;
|
|
52
|
+
delete document.hosting;
|
|
53
|
+
persistConfigDocument(path, document);
|
|
54
|
+
}
|
|
55
|
+
export function clearCurrentUserSession(options = {}) {
|
|
56
|
+
const env = options.env ?? process.env;
|
|
57
|
+
const path = configPath(env);
|
|
58
|
+
if (!existsSync(path)) {
|
|
59
|
+
configCache.delete(path);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const document = loadConfigDocument(path);
|
|
63
|
+
delete document.user;
|
|
64
|
+
removeLegacyAuth(document);
|
|
65
|
+
persistConfigDocument(path, document);
|
|
66
|
+
}
|
|
67
|
+
export function clearUserSessionCache() {
|
|
68
|
+
configCache.clear();
|
|
69
|
+
}
|
|
70
|
+
function configPath(env) {
|
|
71
|
+
const directory = nonEmptyString(env.EAP_CONFIG_DIR) ?? join(homedir(), '.eap');
|
|
72
|
+
return resolve(directory, 'config.json');
|
|
73
|
+
}
|
|
74
|
+
function loadConfigDocument(path) {
|
|
75
|
+
const cached = configCache.get(path);
|
|
76
|
+
if (cached)
|
|
77
|
+
return cached;
|
|
78
|
+
if (!existsSync(path)) {
|
|
79
|
+
const empty = {};
|
|
80
|
+
configCache.set(path, empty);
|
|
81
|
+
return empty;
|
|
82
|
+
}
|
|
83
|
+
let parsed;
|
|
84
|
+
try {
|
|
85
|
+
parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
89
|
+
throw new Error(`Invalid EAP user configuration: ${path} (${reason})`);
|
|
90
|
+
}
|
|
91
|
+
const document = asObject(parsed);
|
|
92
|
+
if (!document)
|
|
93
|
+
throw new Error(`Invalid EAP user configuration: ${path}`);
|
|
94
|
+
configCache.set(path, document);
|
|
95
|
+
return document;
|
|
96
|
+
}
|
|
97
|
+
function persistConfigDocument(path, document) {
|
|
98
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
99
|
+
const tempPath = `${path}.${process.pid}.tmp`;
|
|
100
|
+
writeFileSync(tempPath, `${JSON.stringify(document, null, 2)}\n`, {
|
|
101
|
+
encoding: 'utf8',
|
|
102
|
+
mode: 0o600,
|
|
103
|
+
});
|
|
104
|
+
renameSync(tempPath, path);
|
|
105
|
+
configCache.set(path, document);
|
|
106
|
+
}
|
|
107
|
+
function normalizeUserSession(value) {
|
|
108
|
+
const user = asObject(value);
|
|
109
|
+
if (!user)
|
|
110
|
+
return undefined;
|
|
111
|
+
const userId = nonEmptyString(user.userId);
|
|
112
|
+
const token = nonEmptyString(user.token);
|
|
113
|
+
if (!userId || !token)
|
|
114
|
+
return undefined;
|
|
115
|
+
const authMethod = user.authMethod === 'password' || user.authMethod === 'cas'
|
|
116
|
+
? user.authMethod
|
|
117
|
+
: 'token';
|
|
118
|
+
const username = nonEmptyString(user.username);
|
|
119
|
+
const displayName = nonEmptyString(user.displayName);
|
|
120
|
+
const refreshToken = nonEmptyString(user.refreshToken);
|
|
121
|
+
return {
|
|
122
|
+
userId,
|
|
123
|
+
...(username ? { username } : {}),
|
|
124
|
+
...(displayName ? { displayName } : {}),
|
|
125
|
+
roles: stringArray(user.roles),
|
|
126
|
+
permissions: stringArray(user.permissions),
|
|
127
|
+
token,
|
|
128
|
+
...(refreshToken ? { refreshToken } : {}),
|
|
129
|
+
authMethod,
|
|
130
|
+
platformUrl: nonEmptyString(user.platformUrl) ?? '',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function cloneSession(session) {
|
|
134
|
+
return {
|
|
135
|
+
...session,
|
|
136
|
+
roles: [...session.roles],
|
|
137
|
+
permissions: [...session.permissions],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function removeLegacyAuth(document) {
|
|
141
|
+
delete document.auth;
|
|
142
|
+
const profiles = asObject(document.profiles);
|
|
143
|
+
if (!profiles)
|
|
144
|
+
return;
|
|
145
|
+
for (const profile of Object.values(profiles)) {
|
|
146
|
+
const profileConfig = asObject(profile);
|
|
147
|
+
if (profileConfig)
|
|
148
|
+
delete profileConfig.auth;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function asObject(value) {
|
|
152
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
153
|
+
? value
|
|
154
|
+
: undefined;
|
|
155
|
+
}
|
|
156
|
+
function nonEmptyString(value) {
|
|
157
|
+
return typeof value === 'string' && value.trim().length > 0 ? value : undefined;
|
|
158
|
+
}
|
|
159
|
+
function stringArray(value) {
|
|
160
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === 'string') : [];
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=user-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-session.js","sourceRoot":"","sources":["../../src/auth/user-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type EapProjectConfig } from '../schema/project-config.js';
|
|
2
|
+
export declare class ProjectRuntimeConfigError extends Error {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
constructor(message: string, path: string);
|
|
5
|
+
}
|
|
6
|
+
export interface LoadProjectRuntimeConfigOptions {
|
|
7
|
+
root: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LoadedProjectRuntimeConfig {
|
|
10
|
+
root: string;
|
|
11
|
+
path: string;
|
|
12
|
+
config: EapProjectConfig;
|
|
13
|
+
}
|
|
14
|
+
export interface ResolveProjectRuntimeEnvironmentOptions extends LoadProjectRuntimeConfigOptions {
|
|
15
|
+
preinstallRoot: string;
|
|
16
|
+
env?: NodeJS.ProcessEnv;
|
|
17
|
+
loginToken?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ResolvedProjectRuntimeEnvironment extends LoadedProjectRuntimeConfig {
|
|
20
|
+
environment: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
export declare function loadProjectRuntimeConfig(options: LoadProjectRuntimeConfigOptions): LoadedProjectRuntimeConfig;
|
|
23
|
+
export declare function resolveProjectRuntimeEnvironment(options: ResolveProjectRuntimeEnvironmentOptions): ResolvedProjectRuntimeEnvironment;
|
|
24
|
+
export declare function applyProjectRuntimeEnvironment(options: ResolveProjectRuntimeEnvironmentOptions): ResolvedProjectRuntimeEnvironment;
|
|
25
|
+
//# sourceMappingURL=project-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-runtime.d.ts","sourceRoot":"","sources":["../../src/config/project-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI5F,qBAAa,yBAA0B,SAAQ,KAAK;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM;CAInD;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,uCAAwC,SAAQ,+BAA+B;IAC9F,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iCAAkC,SAAQ,0BAA0B;IACnF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,0BAA0B,CAwB5B;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,iCAAiC,CAmCnC;AAMD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uCAAuC,GAC/C,iCAAiC,CAKnC"}
|