persona-core-opencode 1.0.1 → 1.0.3
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.
|
@@ -34,7 +34,7 @@ export declare class PersonaRegistry {
|
|
|
34
34
|
constructor(config?: PersonaRegistryConfig);
|
|
35
35
|
/**
|
|
36
36
|
* 注册 Persona
|
|
37
|
-
* 1. 生成唯一 ID
|
|
37
|
+
* 1. 生成唯一 ID(如果 input.id 已提供,则直接使用)
|
|
38
38
|
* 2. 创建工作目录
|
|
39
39
|
* 3. 生成 tool 文件
|
|
40
40
|
*/
|
|
@@ -67,12 +67,10 @@ export declare class PersonaRegistry {
|
|
|
67
67
|
* 获取工作空间根目录
|
|
68
68
|
*/
|
|
69
69
|
getWorkspaceRoot(): string;
|
|
70
|
-
/**
|
|
71
|
-
* 生成唯一 ID
|
|
72
|
-
*/
|
|
73
|
-
private generateId;
|
|
74
70
|
/**
|
|
75
71
|
* 生成 Persona 唯一 ID
|
|
72
|
+
* @param name Persona 名称
|
|
73
|
+
* @returns 生成的唯一 ID(格式:safeName-shortUuid)
|
|
76
74
|
*/
|
|
77
75
|
private generatePersonaId;
|
|
78
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personaRegistry.d.ts","sourceRoot":"","sources":["../../src/persona/personaRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGlE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"personaRegistry.d.ts","sourceRoot":"","sources":["../../src/persona/personaRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGlE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAA6C;gBAE3D,MAAM,GAAE,qBAA0B;IAI9C;;;;;OAKG;IACG,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmEjE;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACH,cAAc,IAAI,iBAAiB,EAAE;IAIrC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB5D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -6,6 +6,21 @@ import * as fs from 'fs/promises';
|
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
import { v4 as uuidv4 } from 'uuid';
|
|
8
8
|
import { generateToolFile, getToolFileName } from '../generators/toolFileGenerator.js';
|
|
9
|
+
/**
|
|
10
|
+
* 将字符串转换为文件系统安全的路径名
|
|
11
|
+
* 替换所有不安全的字符为 '-'
|
|
12
|
+
*
|
|
13
|
+
* 不安全字符包括:
|
|
14
|
+
* - Windows: \ / : * ? " < > |
|
|
15
|
+
* - 通用:空格、控制字符等
|
|
16
|
+
*/
|
|
17
|
+
function sanitizeForPath(str) {
|
|
18
|
+
return str
|
|
19
|
+
.replace(/[\\/:*?"<>|]/g, '-') // Windows 不允许的字符
|
|
20
|
+
.replace(/\s+/g, '-') // 空格替换为 -
|
|
21
|
+
.replace(/-+/g, '-') // 多个连续 - 合并为一个
|
|
22
|
+
.replace(/^-|-$/g, ''); // 去掉首尾的 -
|
|
23
|
+
}
|
|
9
24
|
/**
|
|
10
25
|
* Persona 注册器
|
|
11
26
|
*/
|
|
@@ -17,15 +32,19 @@ export class PersonaRegistry {
|
|
|
17
32
|
}
|
|
18
33
|
/**
|
|
19
34
|
* 注册 Persona
|
|
20
|
-
* 1. 生成唯一 ID
|
|
35
|
+
* 1. 生成唯一 ID(如果 input.id 已提供,则直接使用)
|
|
21
36
|
* 2. 创建工作目录
|
|
22
37
|
* 3. 生成 tool 文件
|
|
23
38
|
*/
|
|
24
39
|
async registerPersona(input) {
|
|
40
|
+
// 如果提供了 id,直接使用;否则生成新的 id
|
|
41
|
+
const personaId = input.id
|
|
42
|
+
? input.id
|
|
43
|
+
: this.generatePersonaId(input.name);
|
|
25
44
|
// 创建 Persona 对象
|
|
26
45
|
const now = new Date();
|
|
27
46
|
const persona = {
|
|
28
|
-
id:
|
|
47
|
+
id: personaId,
|
|
29
48
|
name: input.name,
|
|
30
49
|
description: input.description,
|
|
31
50
|
systemPrompt: input.systemPrompt,
|
|
@@ -33,8 +52,9 @@ export class PersonaRegistry {
|
|
|
33
52
|
createdAt: now,
|
|
34
53
|
updatedAt: now,
|
|
35
54
|
};
|
|
36
|
-
|
|
37
|
-
const
|
|
55
|
+
// 使用安全的路径名创建工作目录(id 可能包含 : 等文件系统不允许的字符)
|
|
56
|
+
const safePathName = sanitizeForPath(personaId);
|
|
57
|
+
const workspacePath = path.resolve(this.workspaceRoot, safePathName);
|
|
38
58
|
const toolsPath = path.join(workspacePath, '.opencode', 'tools');
|
|
39
59
|
// 创建目录结构
|
|
40
60
|
await fs.mkdir(toolsPath, { recursive: true });
|
|
@@ -132,19 +152,14 @@ ${persona.systemPrompt}
|
|
|
132
152
|
getWorkspaceRoot() {
|
|
133
153
|
return this.workspaceRoot;
|
|
134
154
|
}
|
|
135
|
-
/**
|
|
136
|
-
* 生成唯一 ID
|
|
137
|
-
*/
|
|
138
|
-
generateId(name) {
|
|
139
|
-
const safeName = name.replace(/[^a-zA-Z0-9-]/g, '-').toLowerCase();
|
|
140
|
-
return safeName;
|
|
141
|
-
}
|
|
142
155
|
/**
|
|
143
156
|
* 生成 Persona 唯一 ID
|
|
157
|
+
* @param name Persona 名称
|
|
158
|
+
* @returns 生成的唯一 ID(格式:safeName-shortUuid)
|
|
144
159
|
*/
|
|
145
|
-
generatePersonaId(
|
|
160
|
+
generatePersonaId(name) {
|
|
146
161
|
const shortUuid = uuidv4().slice(0, 8);
|
|
147
|
-
const safeName =
|
|
162
|
+
const safeName = name.replace(/[^a-zA-Z0-9-]/g, '-').toLowerCase();
|
|
148
163
|
return `${safeName}-${shortUuid}`;
|
|
149
164
|
}
|
|
150
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personaRegistry.js","sourceRoot":"","sources":["../../src/persona/personaRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AA0BvF;;GAEG;AACH,MAAM,OAAO,eAAe;IAClB,aAAa,CAAS;IACtB,kBAAkB,GAAmC,IAAI,GAAG,EAAE,CAAC;IAEvE,YAAY,SAAgC,EAAE;QAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,sBAAsB,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,KAAyB;QAC7C,
|
|
1
|
+
{"version":3,"file":"personaRegistry.js","sourceRoot":"","sources":["../../src/persona/personaRegistry.ts"],"names":[],"mappings":"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"}
|