@dsh-plus/agent-preset-rea 0.0.0-stage → 0.1.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/lib/client.js +637 -0
- package/lib/index.d.ts +145 -0
- package/lib/index.js +422 -0
- package/package.json +60 -3
- package/skills/reverse-engineer-anything/LICENSE +21 -0
- package/skills/reverse-engineer-anything/SKILL.md +342 -0
- package/skills/reverse-engineer-anything/references/android-applications.md +34 -0
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +71 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +175 -0
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +277 -0
- package/skills/reverse-engineer-anything/references/runtime-observation.md +78 -0
- package/src/client/card.tsx +120 -0
- package/src/client/client.ts +51 -0
- package/src/client/draft.ts +28 -0
- package/src/client/i18n.ts +43 -0
- package/src/client/styles.ts +32 -0
- package/src/config.ts +110 -0
- package/src/definition.ts +188 -0
- package/src/index.ts +95 -0
- package/src/mcp.ts +42 -0
- package/src/ns.ts +9 -0
- package/src/prompt.ts +25 -0
- package/src/registration.ts +86 -0
- package/src/skill.ts +24 -0
- package/README.md +0 -3
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预设声明的换代器:初始注册、`personaPrefix` 热更后的「注销旧 → 注册新」、卸载收尾。
|
|
3
|
+
*
|
|
4
|
+
* 注册表按 id 唯一(重复注册抛 `Duplicate agent preset`),且注销与激活都是异步的,
|
|
5
|
+
* 因此换代必须串行:同一时刻至多一个在途注册,且永远先注销上一代。串行链上的失败
|
|
6
|
+
* (重名、激活失败)只经 `onError` 上报,不让 boot 失败——与注册表的「诊断留在名册」
|
|
7
|
+
* 语义一致。
|
|
8
|
+
*
|
|
9
|
+
* 卸载后到达的 disposer 由换代器自己收掉(`disposed` 分支),调用方无需等待在途注册。
|
|
10
|
+
* @module @dsh-plus/agent-preset-rea/registration
|
|
11
|
+
*/
|
|
12
|
+
import type { PresetDefinition } from '@deepseek-ai/dsh-agent-preset-registry'
|
|
13
|
+
|
|
14
|
+
/** 注册表返回的注销句柄。 */
|
|
15
|
+
export type Unregister = () => Promise<void>
|
|
16
|
+
|
|
17
|
+
export interface PresetRegistrarOptions {
|
|
18
|
+
/** 注册一份声明,返回其注销句柄(即 `ctx.agentPresets.register`)。 */
|
|
19
|
+
register(definition: PresetDefinition): Promise<Unregister>
|
|
20
|
+
/** 按当前配置构造声明(每次换代重新调用,读到的必须是活值)。 */
|
|
21
|
+
build(): PresetDefinition
|
|
22
|
+
/** 注册/注销失败的上报口(不抛)。 */
|
|
23
|
+
onError(error: unknown): void
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** 换代器:`refresh()` 触发一次换代,`dispose()` 停用并注销。 */
|
|
27
|
+
export interface PresetRegistrar {
|
|
28
|
+
refresh(): void
|
|
29
|
+
dispose(): void
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 建一个换代器并立即调度初始注册。
|
|
34
|
+
* 后台串行链不返回句柄:需要等待完成的是测试与调用方的关停流程,而不是业务路径。
|
|
35
|
+
*/
|
|
36
|
+
export function createPresetRegistrar(options: PresetRegistrarOptions): PresetRegistrar {
|
|
37
|
+
let disposed = false
|
|
38
|
+
let queued = false
|
|
39
|
+
let unregister: Unregister | undefined
|
|
40
|
+
let chain: Promise<void> = Promise.resolve()
|
|
41
|
+
|
|
42
|
+
const report = (error: unknown): void => {
|
|
43
|
+
options.onError(error)
|
|
44
|
+
}
|
|
45
|
+
const settle = (task: Promise<void>): void => {
|
|
46
|
+
void task.catch(report)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** 换一代:先注销上一代,再注册按当前配置重建的声明。 */
|
|
50
|
+
const swap = async (): Promise<void> => {
|
|
51
|
+
if (disposed) return
|
|
52
|
+
const previous = unregister
|
|
53
|
+
unregister = undefined
|
|
54
|
+
if (previous !== undefined) await previous()
|
|
55
|
+
if (disposed) return
|
|
56
|
+
const next = await options.register(options.build())
|
|
57
|
+
if (disposed) {
|
|
58
|
+
await next()
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
unregister = next
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const schedule = (): void => {
|
|
65
|
+
if (queued) return
|
|
66
|
+
queued = true
|
|
67
|
+
chain = chain
|
|
68
|
+
.then(async () => {
|
|
69
|
+
queued = false
|
|
70
|
+
await swap()
|
|
71
|
+
})
|
|
72
|
+
.catch(report)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
schedule()
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
refresh: schedule,
|
|
79
|
+
dispose: () => {
|
|
80
|
+
disposed = true
|
|
81
|
+
const pending = unregister
|
|
82
|
+
unregister = undefined
|
|
83
|
+
if (pending !== undefined) settle(pending())
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
}
|
package/src/skill.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预设作用域内的 skill 根解析:随包 REA 官方 skill + 配置追加目录。
|
|
3
|
+
*
|
|
4
|
+
* 两者都只加在本预设 `skill-filesystem` 行的 `customSkillDirs`(rank 300 的
|
|
5
|
+
* **追加**根)上,因此不会进入项目根 / 用户根 / `$DSH_BUNDLED_SKILL_DIR`,
|
|
6
|
+
* 其他预设的 skill 目录不受影响。
|
|
7
|
+
* @module @dsh-plus/agent-preset-rea/skill
|
|
8
|
+
*/
|
|
9
|
+
import { fileURLToPath } from 'node:url'
|
|
10
|
+
|
|
11
|
+
import type { AgentPresetReaConfig } from './config.ts'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 随包 REA 官方 skill 根(包内 `skills/`)。
|
|
15
|
+
*
|
|
16
|
+
* `src/` 与构建产物 `lib/` 同为包根下一级,`../skills` 在源码直跑测试与安装后
|
|
17
|
+
* 运行产物两种位置下解析到同一目录。
|
|
18
|
+
*/
|
|
19
|
+
export const BUNDLED_SKILL_ROOT = fileURLToPath(new URL('../skills', import.meta.url))
|
|
20
|
+
|
|
21
|
+
/** skill-filesystem 的追加根清单:随包 REA skill 在前,配置追加目录随后。 */
|
|
22
|
+
export function reaSkillDirs(config: AgentPresetReaConfig): string[] {
|
|
23
|
+
return [BUNDLED_SKILL_ROOT, ...config.extraSkillDirs]
|
|
24
|
+
}
|
package/README.md
DELETED