persona-core-opencode 1.0.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/dist/client/index.d.ts +5 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/personaCoreClient.d.ts +102 -0
- package/dist/client/personaCoreClient.d.ts.map +1 -0
- package/dist/client/personaCoreClient.js +166 -0
- package/dist/client/personaCoreClient.js.map +1 -0
- package/dist/client/workflowHandle.d.ts +62 -0
- package/dist/client/workflowHandle.d.ts.map +1 -0
- package/dist/client/workflowHandle.js +100 -0
- package/dist/client/workflowHandle.js.map +1 -0
- package/dist/generators/index.d.ts +5 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +5 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/toolFileGenerator.d.ts +15 -0
- package/dist/generators/toolFileGenerator.d.ts.map +1 -0
- package/dist/generators/toolFileGenerator.js +385 -0
- package/dist/generators/toolFileGenerator.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/persona/index.d.ts +5 -0
- package/dist/persona/index.d.ts.map +1 -0
- package/dist/persona/index.js +5 -0
- package/dist/persona/index.js.map +1 -0
- package/dist/persona/personaRegistry.d.ts +79 -0
- package/dist/persona/personaRegistry.d.ts.map +1 -0
- package/dist/persona/personaRegistry.js +151 -0
- package/dist/persona/personaRegistry.js.map +1 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +6 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/sessionHandle.d.ts +82 -0
- package/dist/session/sessionHandle.d.ts.map +1 -0
- package/dist/session/sessionHandle.js +82 -0
- package/dist/session/sessionHandle.js.map +1 -0
- package/dist/session/sessionManager.d.ts +72 -0
- package/dist/session/sessionManager.d.ts.map +1 -0
- package/dist/session/sessionManager.js +300 -0
- package/dist/session/sessionManager.js.map +1 -0
- package/dist/types/common.d.ts +94 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/nodes.d.ts +313 -0
- package/dist/types/nodes.d.ts.map +1 -0
- package/dist/types/nodes.js +5 -0
- package/dist/types/nodes.js.map +1 -0
- package/dist/types/persona.d.ts +58 -0
- package/dist/types/persona.d.ts.map +1 -0
- package/dist/types/persona.js +35 -0
- package/dist/types/persona.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,6DAA6D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PersonaCoreClient
|
|
3
|
+
* 主要的客户端 API,提供 Persona 管理和消息发送功能
|
|
4
|
+
*/
|
|
5
|
+
import { PersonaRegistry, RegisteredPersona } from '../persona/personaRegistry.js';
|
|
6
|
+
import { SessionManager } from '../session/sessionManager.js';
|
|
7
|
+
import { SessionExecutionResult } from '../session/sessionHandle.js';
|
|
8
|
+
import { Persona, CreatePersonaInput } from '../types/persona.js';
|
|
9
|
+
/**
|
|
10
|
+
* PersonaCoreClient 配置
|
|
11
|
+
*/
|
|
12
|
+
export interface PersonaCoreClientConfig {
|
|
13
|
+
/** 工作空间根目录 */
|
|
14
|
+
workspaceRoot?: string;
|
|
15
|
+
/** opencode 命令路径(默认使用 PATH 中的 opencode) */
|
|
16
|
+
opencodePath?: string;
|
|
17
|
+
/** 执行超时时间(毫秒) */
|
|
18
|
+
defaultTimeoutMs?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 发送消息的选项
|
|
22
|
+
*/
|
|
23
|
+
export interface SendMessageOptions {
|
|
24
|
+
/** Session ID,如果不提供则创建新 session */
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
/** 超时时间(毫秒) */
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* PersonaCoreClient
|
|
31
|
+
* 主要的客户端 API,提供 Persona 管理和消息发送功能
|
|
32
|
+
*
|
|
33
|
+
* 核心能力:
|
|
34
|
+
* 1. Persona 的 create/delete
|
|
35
|
+
* 2. 给 Persona 的某个 session 发送消息(如果不指定 session,则新建)
|
|
36
|
+
*/
|
|
37
|
+
export declare class PersonaCoreClient {
|
|
38
|
+
private personaRegistry;
|
|
39
|
+
private sessionManager;
|
|
40
|
+
/** 存储每个 persona 的活跃 session */
|
|
41
|
+
private activeSessions;
|
|
42
|
+
constructor(config?: PersonaCoreClientConfig);
|
|
43
|
+
/**
|
|
44
|
+
* 静态工厂方法
|
|
45
|
+
*/
|
|
46
|
+
static create(config?: PersonaCoreClientConfig): Promise<PersonaCoreClient>;
|
|
47
|
+
/**
|
|
48
|
+
* 创建 Persona
|
|
49
|
+
* @param input Persona 配置
|
|
50
|
+
* @returns Persona ID
|
|
51
|
+
*/
|
|
52
|
+
createPersona(input: CreatePersonaInput): Promise<string>;
|
|
53
|
+
/**
|
|
54
|
+
* 删除 Persona
|
|
55
|
+
* @param personaId Persona ID
|
|
56
|
+
*/
|
|
57
|
+
deletePersona(personaId: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* 获取已创建的 Persona
|
|
60
|
+
* @param personaId Persona ID
|
|
61
|
+
*/
|
|
62
|
+
getPersona(personaId: string): RegisteredPersona | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* 检查 Persona 是否存在
|
|
65
|
+
* @param personaId Persona ID
|
|
66
|
+
*/
|
|
67
|
+
hasPersona(personaId: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* 给 Persona 发送消息
|
|
70
|
+
*
|
|
71
|
+
* @param personaId Persona ID
|
|
72
|
+
* @param message 消息内容
|
|
73
|
+
* @param options 选项:sessionId(可选,不提供则新建 session)、timeoutMs(超时时间)
|
|
74
|
+
* @returns 执行结果,包含 sessionId、response、toolCalls 等
|
|
75
|
+
*/
|
|
76
|
+
sendMessage(personaId: string, message: string, options?: SendMessageOptions): Promise<SessionExecutionResult>;
|
|
77
|
+
/**
|
|
78
|
+
* @deprecated 使用 createPersona 代替
|
|
79
|
+
*/
|
|
80
|
+
registerPersona(input: CreatePersonaInput): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* @deprecated 使用 createPersona 代替
|
|
83
|
+
*/
|
|
84
|
+
registerExistingPersona(persona: Persona): Promise<string>;
|
|
85
|
+
/**
|
|
86
|
+
* @deprecated 使用 getPersona 代替
|
|
87
|
+
*/
|
|
88
|
+
getRegisteredPersona(personaId: string): RegisteredPersona | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* 清理所有资源
|
|
91
|
+
*/
|
|
92
|
+
cleanup(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* @deprecated 内部实现,不应该对外暴露
|
|
95
|
+
*/
|
|
96
|
+
getPersonaRegistry(): PersonaRegistry;
|
|
97
|
+
/**
|
|
98
|
+
* @deprecated 内部实现,不应该对外暴露
|
|
99
|
+
*/
|
|
100
|
+
getSessionManager(): SessionManager;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=personaCoreClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personaCoreClient.d.ts","sourceRoot":"","sources":["../../src/client/personaCoreClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAiB,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,+BAA+B;IAC/B,OAAO,CAAC,cAAc,CAAyC;gBAEnD,MAAM,GAAE,uBAA4B;IAWhD;;OAEG;WACU,MAAM,CAAC,MAAM,GAAE,uBAA4B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQrF;;;;OAIG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI5D;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQtC;;;;;;;OAOG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC;IA+ClC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAQtE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,iBAAiB,IAAI,cAAc;CAGpC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PersonaCoreClient
|
|
3
|
+
* 主要的客户端 API,提供 Persona 管理和消息发送功能
|
|
4
|
+
*/
|
|
5
|
+
import { PersonaRegistry } from '../persona/personaRegistry.js';
|
|
6
|
+
import { SessionManager } from '../session/sessionManager.js';
|
|
7
|
+
/**
|
|
8
|
+
* PersonaCoreClient
|
|
9
|
+
* 主要的客户端 API,提供 Persona 管理和消息发送功能
|
|
10
|
+
*
|
|
11
|
+
* 核心能力:
|
|
12
|
+
* 1. Persona 的 create/delete
|
|
13
|
+
* 2. 给 Persona 的某个 session 发送消息(如果不指定 session,则新建)
|
|
14
|
+
*/
|
|
15
|
+
export class PersonaCoreClient {
|
|
16
|
+
personaRegistry;
|
|
17
|
+
sessionManager;
|
|
18
|
+
/** 存储每个 persona 的活跃 session */
|
|
19
|
+
activeSessions = new Map();
|
|
20
|
+
constructor(config = {}) {
|
|
21
|
+
this.personaRegistry = new PersonaRegistry({
|
|
22
|
+
workspaceRoot: config.workspaceRoot,
|
|
23
|
+
});
|
|
24
|
+
this.sessionManager = new SessionManager({
|
|
25
|
+
personaRegistry: this.personaRegistry,
|
|
26
|
+
opencodePath: config.opencodePath,
|
|
27
|
+
defaultTimeoutMs: config.defaultTimeoutMs,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 静态工厂方法
|
|
32
|
+
*/
|
|
33
|
+
static async create(config = {}) {
|
|
34
|
+
return new PersonaCoreClient(config);
|
|
35
|
+
}
|
|
36
|
+
// ============================================================
|
|
37
|
+
// Persona 管理 API
|
|
38
|
+
// ============================================================
|
|
39
|
+
/**
|
|
40
|
+
* 创建 Persona
|
|
41
|
+
* @param input Persona 配置
|
|
42
|
+
* @returns Persona ID
|
|
43
|
+
*/
|
|
44
|
+
async createPersona(input) {
|
|
45
|
+
return this.personaRegistry.registerPersona(input);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 删除 Persona
|
|
49
|
+
* @param personaId Persona ID
|
|
50
|
+
*/
|
|
51
|
+
async deletePersona(personaId) {
|
|
52
|
+
// 先关闭该 persona 的所有 session
|
|
53
|
+
for (const [sessionKey, session] of this.activeSessions.entries()) {
|
|
54
|
+
if (session.personaId === personaId) {
|
|
55
|
+
this.activeSessions.delete(sessionKey);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 从 registry 中删除
|
|
59
|
+
await this.personaRegistry.unregisterPersona(personaId);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 获取已创建的 Persona
|
|
63
|
+
* @param personaId Persona ID
|
|
64
|
+
*/
|
|
65
|
+
getPersona(personaId) {
|
|
66
|
+
return this.personaRegistry.getPersona(personaId);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 检查 Persona 是否存在
|
|
70
|
+
* @param personaId Persona ID
|
|
71
|
+
*/
|
|
72
|
+
hasPersona(personaId) {
|
|
73
|
+
return this.personaRegistry.hasPersona(personaId);
|
|
74
|
+
}
|
|
75
|
+
// ============================================================
|
|
76
|
+
// 消息发送 API
|
|
77
|
+
// ============================================================
|
|
78
|
+
/**
|
|
79
|
+
* 给 Persona 发送消息
|
|
80
|
+
*
|
|
81
|
+
* @param personaId Persona ID
|
|
82
|
+
* @param message 消息内容
|
|
83
|
+
* @param options 选项:sessionId(可选,不提供则新建 session)、timeoutMs(超时时间)
|
|
84
|
+
* @returns 执行结果,包含 sessionId、response、toolCalls 等
|
|
85
|
+
*/
|
|
86
|
+
async sendMessage(personaId, message, options = {}) {
|
|
87
|
+
const { sessionId, timeoutMs } = options;
|
|
88
|
+
// 验证 Persona 已存在
|
|
89
|
+
if (!this.personaRegistry.hasPersona(personaId)) {
|
|
90
|
+
throw new Error(`Persona not found: ${personaId}. Please create the persona first.`);
|
|
91
|
+
}
|
|
92
|
+
// 获取或创建 session
|
|
93
|
+
let sessionHandle;
|
|
94
|
+
if (sessionId) {
|
|
95
|
+
// 尝试从缓存获取 session
|
|
96
|
+
const sessionKey = `${personaId}:${sessionId}`;
|
|
97
|
+
const cached = this.activeSessions.get(sessionKey);
|
|
98
|
+
if (cached) {
|
|
99
|
+
sessionHandle = cached;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// session 不在缓存中,创建新的 handle 并设置已有的 sessionId
|
|
103
|
+
sessionHandle = await this.sessionManager.createSession(personaId);
|
|
104
|
+
sessionHandle.setSessionId(sessionId);
|
|
105
|
+
this.activeSessions.set(sessionKey, sessionHandle);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// 创建新 session
|
|
110
|
+
sessionHandle = await this.sessionManager.createSession(personaId);
|
|
111
|
+
}
|
|
112
|
+
// 执行消息
|
|
113
|
+
const result = await this.sessionManager.executeThinking(sessionHandle, message, { timeoutMs });
|
|
114
|
+
// 如果是新创建的 session,保存到缓存
|
|
115
|
+
if (!sessionId && result.sessionId) {
|
|
116
|
+
const sessionKey = `${personaId}:${result.sessionId}`;
|
|
117
|
+
this.activeSessions.set(sessionKey, sessionHandle);
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
// ============================================================
|
|
122
|
+
// 兼容旧 API(标记为 deprecated,后续版本移除)
|
|
123
|
+
// ============================================================
|
|
124
|
+
/**
|
|
125
|
+
* @deprecated 使用 createPersona 代替
|
|
126
|
+
*/
|
|
127
|
+
async registerPersona(input) {
|
|
128
|
+
return this.createPersona(input);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* @deprecated 使用 createPersona 代替
|
|
132
|
+
*/
|
|
133
|
+
async registerExistingPersona(persona) {
|
|
134
|
+
return this.personaRegistry.registerExistingPersona(persona);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* @deprecated 使用 getPersona 代替
|
|
138
|
+
*/
|
|
139
|
+
getRegisteredPersona(personaId) {
|
|
140
|
+
return this.getPersona(personaId);
|
|
141
|
+
}
|
|
142
|
+
// ============================================================
|
|
143
|
+
// 资源管理
|
|
144
|
+
// ============================================================
|
|
145
|
+
/**
|
|
146
|
+
* 清理所有资源
|
|
147
|
+
*/
|
|
148
|
+
async cleanup() {
|
|
149
|
+
await this.sessionManager.closeAllSessions();
|
|
150
|
+
await this.personaRegistry.cleanup();
|
|
151
|
+
this.activeSessions.clear();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* @deprecated 内部实现,不应该对外暴露
|
|
155
|
+
*/
|
|
156
|
+
getPersonaRegistry() {
|
|
157
|
+
return this.personaRegistry;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* @deprecated 内部实现,不应该对外暴露
|
|
161
|
+
*/
|
|
162
|
+
getSessionManager() {
|
|
163
|
+
return this.sessionManager;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=personaCoreClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personaCoreClient.js","sourceRoot":"","sources":["../../src/client/personaCoreClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Handle
|
|
3
|
+
* 封装工作流的操作和状态
|
|
4
|
+
*/
|
|
5
|
+
import { SessionHandle, SessionExecutionResult } from '../session/sessionHandle.js';
|
|
6
|
+
/**
|
|
7
|
+
* 工作流状态
|
|
8
|
+
*/
|
|
9
|
+
export type WorkflowStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
10
|
+
/**
|
|
11
|
+
* Workflow Handle
|
|
12
|
+
* 提供与原 persona-core 兼容的工作流接口
|
|
13
|
+
*/
|
|
14
|
+
export declare class WorkflowHandle {
|
|
15
|
+
readonly workflowId: string;
|
|
16
|
+
readonly personaId: string;
|
|
17
|
+
private sessionHandle;
|
|
18
|
+
private status;
|
|
19
|
+
private result?;
|
|
20
|
+
private error?;
|
|
21
|
+
private completionPromise?;
|
|
22
|
+
private resolveCompletion?;
|
|
23
|
+
private rejectCompletion?;
|
|
24
|
+
constructor(workflowId: string, personaId: string, sessionHandle: SessionHandle);
|
|
25
|
+
/**
|
|
26
|
+
* 获取当前状态
|
|
27
|
+
*/
|
|
28
|
+
getStatus(): WorkflowStatus;
|
|
29
|
+
/**
|
|
30
|
+
* 获取 Session Handle
|
|
31
|
+
*/
|
|
32
|
+
getSessionHandle(): SessionHandle;
|
|
33
|
+
/**
|
|
34
|
+
* 获取最后结果
|
|
35
|
+
*/
|
|
36
|
+
getLastResult(): SessionExecutionResult | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* 设置运行状态
|
|
39
|
+
*/
|
|
40
|
+
setRunning(): void;
|
|
41
|
+
/**
|
|
42
|
+
* 设置完成状态
|
|
43
|
+
*/
|
|
44
|
+
setCompleted(result: SessionExecutionResult): void;
|
|
45
|
+
/**
|
|
46
|
+
* 设置失败状态
|
|
47
|
+
*/
|
|
48
|
+
setFailed(error: Error): void;
|
|
49
|
+
/**
|
|
50
|
+
* 等待完成
|
|
51
|
+
*/
|
|
52
|
+
waitForCompletion(): Promise<SessionExecutionResult>;
|
|
53
|
+
/**
|
|
54
|
+
* 取消工作流
|
|
55
|
+
*/
|
|
56
|
+
cancel(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 获取错误信息
|
|
59
|
+
*/
|
|
60
|
+
getError(): Error | undefined;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=workflowHandle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowHandle.d.ts","sourceRoot":"","sources":["../../src/client/workflowHandle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB;;;GAGG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAyB;IACxC,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAC5D,OAAO,CAAC,iBAAiB,CAAC,CAA2C;IACrE,OAAO,CAAC,gBAAgB,CAAC,CAAyB;gBAGhD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa;IAa9B;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,aAAa,IAAI,sBAAsB,GAAG,SAAS;IAInD;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAMlD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAM7B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAa1D;;OAEG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACH,QAAQ,IAAI,KAAK,GAAG,SAAS;CAG9B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Handle
|
|
3
|
+
* 封装工作流的操作和状态
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Workflow Handle
|
|
7
|
+
* 提供与原 persona-core 兼容的工作流接口
|
|
8
|
+
*/
|
|
9
|
+
export class WorkflowHandle {
|
|
10
|
+
workflowId;
|
|
11
|
+
personaId;
|
|
12
|
+
sessionHandle;
|
|
13
|
+
status = 'pending';
|
|
14
|
+
result;
|
|
15
|
+
error;
|
|
16
|
+
completionPromise;
|
|
17
|
+
resolveCompletion;
|
|
18
|
+
rejectCompletion;
|
|
19
|
+
constructor(workflowId, personaId, sessionHandle) {
|
|
20
|
+
this.workflowId = workflowId;
|
|
21
|
+
this.personaId = personaId;
|
|
22
|
+
this.sessionHandle = sessionHandle;
|
|
23
|
+
// 创建 completion promise
|
|
24
|
+
this.completionPromise = new Promise((resolve, reject) => {
|
|
25
|
+
this.resolveCompletion = resolve;
|
|
26
|
+
this.rejectCompletion = reject;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 获取当前状态
|
|
31
|
+
*/
|
|
32
|
+
getStatus() {
|
|
33
|
+
return this.status;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 获取 Session Handle
|
|
37
|
+
*/
|
|
38
|
+
getSessionHandle() {
|
|
39
|
+
return this.sessionHandle;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 获取最后结果
|
|
43
|
+
*/
|
|
44
|
+
getLastResult() {
|
|
45
|
+
return this.result;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 设置运行状态
|
|
49
|
+
*/
|
|
50
|
+
setRunning() {
|
|
51
|
+
this.status = 'running';
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 设置完成状态
|
|
55
|
+
*/
|
|
56
|
+
setCompleted(result) {
|
|
57
|
+
this.status = 'completed';
|
|
58
|
+
this.result = result;
|
|
59
|
+
this.resolveCompletion?.(result);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 设置失败状态
|
|
63
|
+
*/
|
|
64
|
+
setFailed(error) {
|
|
65
|
+
this.status = 'failed';
|
|
66
|
+
this.error = error;
|
|
67
|
+
this.rejectCompletion?.(error);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 等待完成
|
|
71
|
+
*/
|
|
72
|
+
async waitForCompletion() {
|
|
73
|
+
if (this.status === 'completed' && this.result) {
|
|
74
|
+
return this.result;
|
|
75
|
+
}
|
|
76
|
+
if (this.status === 'failed' && this.error) {
|
|
77
|
+
throw this.error;
|
|
78
|
+
}
|
|
79
|
+
if (!this.completionPromise) {
|
|
80
|
+
throw new Error('Workflow not properly initialized');
|
|
81
|
+
}
|
|
82
|
+
return this.completionPromise;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 取消工作流
|
|
86
|
+
*/
|
|
87
|
+
cancel() {
|
|
88
|
+
if (this.status === 'running' || this.status === 'pending') {
|
|
89
|
+
this.status = 'cancelled';
|
|
90
|
+
this.rejectCompletion?.(new Error('Workflow cancelled'));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 获取错误信息
|
|
95
|
+
*/
|
|
96
|
+
getError() {
|
|
97
|
+
return this.error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=workflowHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowHandle.js","sourceRoot":"","sources":["../../src/client/workflowHandle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;;GAGG;AACH,MAAM,OAAO,cAAc;IAChB,UAAU,CAAS;IACnB,SAAS,CAAS;IACnB,aAAa,CAAgB;IAC7B,MAAM,GAAmB,SAAS,CAAC;IACnC,MAAM,CAA0B;IAChC,KAAK,CAAS;IACd,iBAAiB,CAAmC;IACpD,iBAAiB,CAA4C;IAC7D,gBAAgB,CAA0B;IAElD,YACE,UAAkB,EAClB,SAAiB,EACjB,aAA4B;QAE5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,wBAAwB;QACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAA8B;QACzC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAY;QACpB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3D,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool 文件生成器
|
|
3
|
+
* 将 ActionNodeType 转换为 opencode tool 文件内容
|
|
4
|
+
*/
|
|
5
|
+
import { ActionNodeType } from '../types/index.js';
|
|
6
|
+
import { Persona } from '../types/persona.js';
|
|
7
|
+
/**
|
|
8
|
+
* 生成 opencode tool 文件内容
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateToolFile(actionType: ActionNodeType, persona: Persona): string;
|
|
11
|
+
/**
|
|
12
|
+
* 生成 tool 文件名
|
|
13
|
+
*/
|
|
14
|
+
export declare function getToolFileName(actionType: ActionNodeType): string;
|
|
15
|
+
//# sourceMappingURL=toolFileGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolFileGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/toolFileGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAiBrF;AA6WD;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAOlE"}
|