@alan512/experienceengine 0.1.3 → 0.2.1
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/.claude-plugin/plugin.json +1 -1
- package/README.md +213 -130
- package/README.zh-CN.md +250 -119
- package/dist/adapters/claude-code/session-store.d.ts +1 -0
- package/dist/adapters/claude-code/session-store.js +24 -1
- package/dist/adapters/claude-code/session-store.js.map +1 -1
- package/dist/adapters/codex/action-registry.d.ts +84 -0
- package/dist/adapters/codex/action-registry.js +277 -0
- package/dist/adapters/codex/action-registry.js.map +1 -0
- package/dist/adapters/codex/broker-tools.d.ts +114 -0
- package/dist/adapters/codex/broker-tools.js +130 -0
- package/dist/adapters/codex/broker-tools.js.map +1 -0
- package/dist/adapters/codex/mcp-server.d.ts +21 -0
- package/dist/adapters/codex/mcp-server.js +103 -423
- package/dist/adapters/codex/mcp-server.js.map +1 -1
- package/dist/analyzer/candidate-signals.d.ts +3 -1
- package/dist/analyzer/candidate-signals.js +159 -0
- package/dist/analyzer/candidate-signals.js.map +1 -1
- package/dist/analyzer/llm-learning-gate.d.ts +12 -1
- package/dist/analyzer/llm-learning-gate.js +633 -16
- package/dist/analyzer/llm-learning-gate.js.map +1 -1
- package/dist/cli/commands/claude-hook.js +11 -4
- package/dist/cli/commands/claude-hook.js.map +1 -1
- package/dist/cli/commands/codex.d.ts +60 -0
- package/dist/cli/commands/codex.js +188 -0
- package/dist/cli/commands/codex.js.map +1 -0
- package/dist/cli/commands/doctor.js +35 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts +9 -3
- package/dist/cli/commands/evaluate.js +31 -5
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/init.js +21 -8
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/inspect.js +73 -4
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/commands/repair.js +3 -3
- package/dist/cli/commands/repair.js.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/dispatch.js +16 -4
- package/dist/cli/dispatch.js.map +1 -1
- package/dist/config/config-schema.d.ts +177 -0
- package/dist/config/config-schema.js +142 -1
- package/dist/config/config-schema.js.map +1 -1
- package/dist/config/default-config.js +19 -1
- package/dist/config/default-config.js.map +1 -1
- package/dist/config/load-config.js +72 -1
- package/dist/config/load-config.js.map +1 -1
- package/dist/config/settings-store.d.ts +19 -0
- package/dist/config/settings-store.js +11 -0
- package/dist/config/settings-store.js.map +1 -1
- package/dist/controller/candidate-retriever.d.ts +16 -1
- package/dist/controller/candidate-retriever.js +199 -137
- package/dist/controller/candidate-retriever.js.map +1 -1
- package/dist/controller/injection-scorecard.d.ts +2 -14
- package/dist/controller/injection-scorecard.js +29 -0
- package/dist/controller/injection-scorecard.js.map +1 -1
- package/dist/controller/intervention-controller.d.ts +3 -15
- package/dist/controller/intervention-controller.js +219 -57
- package/dist/controller/intervention-controller.js.map +1 -1
- package/dist/controller/policy-enricher.d.ts +10 -0
- package/dist/controller/policy-enricher.js +186 -0
- package/dist/controller/policy-enricher.js.map +1 -0
- package/dist/controller/retrieval-context.d.ts +3 -0
- package/dist/controller/retrieval-context.js +37 -0
- package/dist/controller/retrieval-context.js.map +1 -0
- package/dist/controller/second-opinion-gate.d.ts +41 -0
- package/dist/controller/second-opinion-gate.js +225 -0
- package/dist/controller/second-opinion-gate.js.map +1 -0
- package/dist/controller/trigger-evaluator.d.ts +6 -1
- package/dist/controller/trigger-evaluator.js +31 -1
- package/dist/controller/trigger-evaluator.js.map +1 -1
- package/dist/distillation/prompt-contract.d.ts +1 -1
- package/dist/distillation/prompt-contract.js +3 -1
- package/dist/distillation/prompt-contract.js.map +1 -1
- package/dist/distillation/providers/gemini.js +5 -1
- package/dist/distillation/providers/gemini.js.map +1 -1
- package/dist/distillation/queue-worker.js +22 -3
- package/dist/distillation/queue-worker.js.map +1 -1
- package/dist/evaluation/codex-lifecycle-validation.d.ts +60 -0
- package/dist/evaluation/codex-lifecycle-validation.js +233 -0
- package/dist/evaluation/codex-lifecycle-validation.js.map +1 -0
- package/dist/evaluation/hybrid-phase1-rollout-summary.d.ts +63 -0
- package/dist/evaluation/hybrid-phase1-rollout-summary.js +108 -0
- package/dist/evaluation/hybrid-phase1-rollout-summary.js.map +1 -0
- package/dist/evaluation/hybrid-phase3-gate-metrics.d.ts +26 -0
- package/dist/evaluation/hybrid-phase3-gate-metrics.js +23 -0
- package/dist/evaluation/hybrid-phase3-gate-metrics.js.map +1 -0
- package/dist/evaluation/openclaw-baseline.d.ts +8 -0
- package/dist/evaluation/openclaw-baseline.js +27 -0
- package/dist/evaluation/openclaw-baseline.js.map +1 -1
- package/dist/experience-management/governance-observability.d.ts +13 -0
- package/dist/experience-management/governance-observability.js +37 -0
- package/dist/experience-management/governance-observability.js.map +1 -0
- package/dist/experience-management/node-lifecycle-governance.d.ts +8 -0
- package/dist/experience-management/node-lifecycle-governance.js +80 -0
- package/dist/experience-management/node-lifecycle-governance.js.map +1 -0
- package/dist/experience-management/task-management-signals.d.ts +29 -0
- package/dist/experience-management/task-management-signals.js +148 -0
- package/dist/experience-management/task-management-signals.js.map +1 -0
- package/dist/feedback/feedback-manager.d.ts +4 -1
- package/dist/feedback/feedback-manager.js +11 -22
- package/dist/feedback/feedback-manager.js.map +1 -1
- package/dist/feedback/state-transition.d.ts +6 -1
- package/dist/feedback/state-transition.js +6 -3
- package/dist/feedback/state-transition.js.map +1 -1
- package/dist/hybrid/capsule-builder.d.ts +23 -0
- package/dist/hybrid/capsule-builder.js +114 -0
- package/dist/hybrid/capsule-builder.js.map +1 -0
- package/dist/hybrid/explain-provider-client.d.ts +19 -0
- package/dist/hybrid/explain-provider-client.js +34 -0
- package/dist/hybrid/explain-provider-client.js.map +1 -0
- package/dist/hybrid/postmortem-provider-client.d.ts +19 -0
- package/dist/hybrid/postmortem-provider-client.js +34 -0
- package/dist/hybrid/postmortem-provider-client.js.map +1 -0
- package/dist/hybrid/rollout.d.ts +9 -0
- package/dist/hybrid/rollout.js +49 -0
- package/dist/hybrid/rollout.js.map +1 -0
- package/dist/hybrid/router.d.ts +4 -0
- package/dist/hybrid/router.js +62 -0
- package/dist/hybrid/router.js.map +1 -0
- package/dist/hybrid/types.d.ts +140 -0
- package/dist/hybrid/types.js +2 -0
- package/dist/hybrid/types.js.map +1 -0
- package/dist/hybrid/validators.d.ts +5 -0
- package/dist/hybrid/validators.js +94 -0
- package/dist/hybrid/validators.js.map +1 -0
- package/dist/hybrid/worker-client.d.ts +61 -0
- package/dist/hybrid/worker-client.js +196 -0
- package/dist/hybrid/worker-client.js.map +1 -0
- package/dist/hybrid/workers/explain-decision-llm.d.ts +8 -0
- package/dist/hybrid/workers/explain-decision-llm.js +152 -0
- package/dist/hybrid/workers/explain-decision-llm.js.map +1 -0
- package/dist/hybrid/workers/explain-decision.d.ts +2 -0
- package/dist/hybrid/workers/explain-decision.js +40 -0
- package/dist/hybrid/workers/explain-decision.js.map +1 -0
- package/dist/hybrid/workers/postmortem-review-llm.d.ts +8 -0
- package/dist/hybrid/workers/postmortem-review-llm.js +398 -0
- package/dist/hybrid/workers/postmortem-review-llm.js.map +1 -0
- package/dist/hybrid/workers/postmortem-review.d.ts +2 -0
- package/dist/hybrid/workers/postmortem-review.js +66 -0
- package/dist/hybrid/workers/postmortem-review.js.map +1 -0
- package/dist/install/claude-code-doctor.d.ts +1 -0
- package/dist/install/claude-code-doctor.js +20 -4
- package/dist/install/claude-code-doctor.js.map +1 -1
- package/dist/install/claude-code-installer.js +50 -1
- package/dist/install/claude-code-installer.js.map +1 -1
- package/dist/install/codex-cli.d.ts +15 -0
- package/dist/install/codex-cli.js +55 -3
- package/dist/install/codex-cli.js.map +1 -1
- package/dist/install/codex-installer.d.ts +7 -0
- package/dist/install/codex-installer.js +22 -0
- package/dist/install/codex-installer.js.map +1 -1
- package/dist/install/openclaw-cli.d.ts +11 -0
- package/dist/install/openclaw-cli.js.map +1 -1
- package/dist/install/openclaw-installer.d.ts +12 -7
- package/dist/install/openclaw-installer.js +197 -46
- package/dist/install/openclaw-installer.js.map +1 -1
- package/dist/interaction/service.d.ts +15 -0
- package/dist/interaction/service.js +189 -31
- package/dist/interaction/service.js.map +1 -1
- package/dist/plugin/hooks/before-prompt-build.d.ts +1 -0
- package/dist/plugin/hooks/before-prompt-build.js +4 -1
- package/dist/plugin/hooks/before-prompt-build.js.map +1 -1
- package/dist/plugin/openclaw-install-state.d.ts +39 -0
- package/dist/plugin/openclaw-install-state.js +24 -0
- package/dist/plugin/openclaw-install-state.js.map +1 -0
- package/dist/plugin/openclaw-plugin.d.ts +125 -0
- package/dist/plugin/openclaw-plugin.js +18 -7
- package/dist/plugin/openclaw-plugin.js.map +1 -1
- package/dist/plugin/openclaw-routine-interaction.d.ts +2 -1
- package/dist/plugin/openclaw-routine-interaction.js +12 -7
- package/dist/plugin/openclaw-routine-interaction.js.map +1 -1
- package/dist/plugin/openclaw-runtime-defaults.d.ts +16 -0
- package/dist/plugin/openclaw-runtime-defaults.js +16 -0
- package/dist/plugin/openclaw-runtime-defaults.js.map +1 -0
- package/dist/runtime/service.d.ts +34 -5
- package/dist/runtime/service.js +474 -49
- package/dist/runtime/service.js.map +1 -1
- package/dist/store/sqlite/db.js +28 -0
- package/dist/store/sqlite/db.js.map +1 -1
- package/dist/store/sqlite/repositories/hybrid-invocation-trace-repo.d.ts +11 -0
- package/dist/store/sqlite/repositories/hybrid-invocation-trace-repo.js +76 -0
- package/dist/store/sqlite/repositories/hybrid-invocation-trace-repo.js.map +1 -0
- package/dist/store/sqlite/repositories/hybrid-review-artifact-repo.d.ts +11 -0
- package/dist/store/sqlite/repositories/hybrid-review-artifact-repo.js +73 -0
- package/dist/store/sqlite/repositories/hybrid-review-artifact-repo.js.map +1 -0
- package/dist/store/sqlite/repositories/input-record-repo.d.ts +1 -0
- package/dist/store/sqlite/repositories/input-record-repo.js +13 -0
- package/dist/store/sqlite/repositories/input-record-repo.js.map +1 -1
- package/dist/store/sqlite/repositories/node-repo.d.ts +4 -0
- package/dist/store/sqlite/repositories/node-repo.js +54 -6
- package/dist/store/sqlite/repositories/node-repo.js.map +1 -1
- package/dist/store/sqlite/schema.sql +40 -0
- package/dist/store/vector/embeddings.js +26 -8
- package/dist/store/vector/embeddings.js.map +1 -1
- package/dist/types/domain.d.ts +151 -2
- package/dist/types/plugin.d.ts +2 -1
- package/docs/releases/v0.1.3.md +3 -2
- package/docs/releases/v0.2.0.md +85 -0
- package/docs/releases/v0.2.1.md +21 -0
- package/docs/user-guide.md +44 -13
- package/openclaw.plugin.json +81 -1
- package/package.json +11 -2
- package/plugins/claude-code-experienceengine/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-code-experienceengine/scripts/install-deps.sh +1 -1
package/README.zh-CN.md
CHANGED
|
@@ -1,108 +1,207 @@
|
|
|
1
1
|
# ExperienceEngine
|
|
2
2
|
|
|
3
|
-
[English README](./README.md)
|
|
3
|
+
[English README](./README.md) | 简体中文
|
|
4
4
|
|
|
5
|
-
ExperienceEngine 是一个面向编程 Agent
|
|
5
|
+
ExperienceEngine 是一个面向编程 Agent 的治理层。它复用真实执行经验,但不会把 memory 变成噪声堆积。它只会在相关时注入简短、任务相关的 guidance,并持续记录这次介入到底是帮到了还是干扰了结果。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**Memory 做加法,ExperienceEngine 做治理。**
|
|
8
|
+
|
|
9
|
+
当前支持的宿主:`OpenClaw`、`Claude Code`、`Codex`
|
|
10
|
+
|
|
11
|
+
## 10 秒理解
|
|
12
|
+
|
|
13
|
+
没有 ExperienceEngine:
|
|
14
|
+
- agent 会在相似仓库里重复犯同样的 SQLite migration 错误
|
|
15
|
+
- 它会先打开数据库、再补 migration,然后在错误方向上浪费几轮
|
|
16
|
+
|
|
17
|
+
有 ExperienceEngine:
|
|
18
|
+
- 它会在真正调用工具之前注入一条很短的约束,例如:`先执行 migration,再打开数据库连接`
|
|
19
|
+
- 宿主 agent 会直接避开上次已经踩过的错路,而不是重新试错
|
|
20
|
+
- 任务结束后,ExperienceEngine 通常会根据真实结果自动更新这条 guidance
|
|
21
|
+
- 如果这条 guidance 后面开始伤害相似任务,ExperienceEngine 会把它降温、隔离或退役
|
|
22
|
+
|
|
23
|
+
任务流:`任务信号 -> 提炼经验 -> 检索 -> 短提示注入 -> 反馈 -> 治理`
|
|
24
|
+
|
|
25
|
+
<details>
|
|
26
|
+
<summary>宿主里的示例对话</summary>
|
|
27
|
+
|
|
28
|
+
用户:修一下这个仓库里的 SQLite 启动失败问题。
|
|
29
|
+
|
|
30
|
+
宿主 agent:ExperienceEngine 在这个仓库里找到了一个之前成功过的修复模式:`先执行 migration,再打开数据库连接。` 我会先补 migration,然后再重试启动。
|
|
31
|
+
|
|
32
|
+
用户:为什么这条 ExperienceEngine 提示会命中?
|
|
33
|
+
|
|
34
|
+
宿主 agent:它匹配到了这个仓库里过去一次相同的 SQLite 启动失败,以及当时成功的 migration-first 修复路径。
|
|
35
|
+
|
|
36
|
+
用户:所以 ExperienceEngine 的作用,是提前把我从同样的错路上拉回来?
|
|
37
|
+
|
|
38
|
+
宿主 agent:对。它在下一次工具调用前复用了这个仓库里的成功路径,而且这次任务结束后通常会自动判断这条经验到底帮到了还是干扰了结果。
|
|
39
|
+
|
|
40
|
+
</details>
|
|
41
|
+
|
|
42
|
+

|
|
43
|
+
|
|
44
|
+
## 快速开始
|
|
45
|
+
|
|
46
|
+
最快的宿主安装路径:
|
|
8
47
|
|
|
9
|
-
当前支持的宿主:
|
|
10
48
|
- `OpenClaw`
|
|
11
|
-
- `
|
|
49
|
+
- `openclaw plugins install @alan512/experienceengine`
|
|
50
|
+
- `openclaw gateway restart`
|
|
51
|
+
- `ee init`
|
|
12
52
|
- `Codex`
|
|
53
|
+
- `ee install codex`
|
|
54
|
+
- `ee init`
|
|
55
|
+
- `Claude Code`
|
|
56
|
+
- `/plugin marketplace add https://github.com/Alan-512/ExperienceEngine.git`
|
|
57
|
+
- `/plugin install experienceengine@experienceengine`
|
|
58
|
+
- `ee init`
|
|
13
59
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
60
|
+
`ee init` 用于在宿主安装完成后初始化共享的 ExperienceEngine 状态。
|
|
61
|
+
|
|
62
|
+
如果你需要更详细的宿主安装说明、fallback 路径、ready 状态说明或 operator 工作流,跳转到 [完整安装与运维说明](#完整安装与运维说明)。
|
|
63
|
+
|
|
64
|
+
## 适合谁用
|
|
65
|
+
|
|
66
|
+
以下情况适合使用 ExperienceEngine:
|
|
67
|
+
- 你会在相似仓库或相似工作流里反复使用 coding agent
|
|
68
|
+
- 你想要的是**短小、介入式 guidance**,而不是泛化的 memory recall
|
|
69
|
+
- 你关心历史经验到底是**帮到了还是害了**
|
|
70
|
+
- 你希望过时 guidance 能自动降温或退役,而不是越积越多
|
|
18
71
|
|
|
19
|
-
|
|
72
|
+
以下情况不适合:
|
|
73
|
+
- 你只想要一个个人笔记型 memory
|
|
74
|
+
- 你想要通用文档 RAG
|
|
75
|
+
- 你的工作流几乎不重复
|
|
76
|
+
- 你希望系统默认记住所有东西
|
|
20
77
|
|
|
21
|
-
|
|
78
|
+
## 宿主支持矩阵
|
|
22
79
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
80
|
+
| 宿主 | 安装路径 | 日常交互 | 成熟度 |
|
|
81
|
+
|---|---|---|---|
|
|
82
|
+
| `OpenClaw` | 原生插件安装 | 宿主原生 | 当前最完整 |
|
|
83
|
+
| `Claude Code` | marketplace 插件,保留 `ee install claude-code` fallback | MCP + plugin hooks | 已支持 |
|
|
84
|
+
| `Codex` | `ee install codex`,保留原生 MCP fallback | MCP 原生 | 已支持 |
|
|
27
85
|
|
|
28
|
-
|
|
29
|
-
- 什么时候该让历史经验介入
|
|
30
|
-
- 该注入哪条 `strategy` 或 `warning`
|
|
31
|
-
- 这次介入到底有没有帮到任务
|
|
32
|
-
- 这条经验是否应该继续保留、降温或退役
|
|
86
|
+
## 为什么要做这个
|
|
33
87
|
|
|
34
|
-
|
|
88
|
+
Coding agent 会重复犯同类错误,通常不是因为模型不够聪明,而是因为之前的执行经验没有被**以可治理的方式**复用。
|
|
35
89
|
|
|
36
|
-
|
|
90
|
+
ExperienceEngine 的目标不是通用 memory 累积,而是**介入治理**。
|
|
91
|
+
|
|
92
|
+
## 为什么不是 Memory / RAG
|
|
37
93
|
|
|
38
94
|
| 问题 | Memory 系统 | ExperienceEngine |
|
|
39
95
|
|---|---|---|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
96
|
+
| 跨会话保存事实和偏好 | 可以 | 不是核心目标 |
|
|
97
|
+
| 捕获失败 -> 修复 -> 成功的经验路径 | 部分支持,通常依赖人工 | 可以,来自真实任务信号 |
|
|
98
|
+
| 知道一条回忆到底有没有帮助 | 通常不行 | 可以,逐次记录 |
|
|
99
|
+
| 自动退役过时或有害 guidance | 通常不行 | 可以,内建 cooling / retired 生命周期 |
|
|
100
|
+
| 保持提示短小、任务相关 | 不是核心目标 | 是 |
|
|
101
|
+
| 通用文档检索 | 常见适用场景 | 不是核心目标 |
|
|
102
|
+
|
|
103
|
+
## 为什么它不是另一层记忆
|
|
104
|
+
|
|
105
|
+
ExperienceEngine 不是想比宿主“记住更多东西”。它的核心价值,是持续治理一条已经学到的 guidance 还应不应该继续影响后续任务。
|
|
106
|
+
|
|
107
|
+
- 大部分学习动作发生在任务之后,所以当前任务不需要等待整条经验处理链路跑完
|
|
108
|
+
- 每条经验节点都会经历 `candidate`、`active`、`cooling`、`retired` 这样的生命周期
|
|
109
|
+
- “存下来” 和 “还能不能继续上线” 是分开的,所以有害 guidance 可以被降温、隔离,或者退出正常注入路径
|
|
110
|
+
- 任务结束后的审查会继续判断这条 hint 到底是帮到了、伤害了,还是仍然不确定
|
|
111
|
+
- 即使这次没有注入 hint,delivery decision 也会被记录下来,所以之后仍然能解释为什么跳过
|
|
112
|
+
- 同仓库高匹配经验在成功复用后可以从保守投放提升到正常投放;跨仓库复用默认仍保持保守,除非后续证据更强
|
|
113
|
+
- 这个产品追求的是“生产安全的经验复用”,不是“尽量多记、尽量多召回”
|
|
45
114
|
|
|
46
115
|
## 它在 Agent Loop 里的位置
|
|
47
116
|
|
|
48
|
-
|
|
49
|
-
用户任务
|
|
50
|
-
-> before_prompt_build:检索并注入匹配经验
|
|
51
|
-
-> agent 推理 + 工具调用:捕获失败、重试、纠正和结果
|
|
52
|
-
-> task finalize:把候选信号提炼成可复用经验
|
|
53
|
-
-> helped / harmed:提升、降温或退役节点
|
|
54
|
-
```
|
|
117
|
+
从高层看,ExperienceEngine 围绕 agent loop 的位置是这样的:
|
|
55
118
|
|
|
56
|
-
|
|
119
|
+
- `用户任务`
|
|
120
|
+
- `before_prompt_build`:检索并注入匹配经验
|
|
121
|
+
- `agent 推理 + 工具调用`:捕获失败、重试、修正和结果
|
|
122
|
+
- `task finalize`:把候选信号提炼成可复用经验
|
|
123
|
+
- `helped / harmed`:提升、降温或退役节点
|
|
124
|
+
|
|
125
|
+
ExperienceEngine 工作在 context 层,不会修改宿主模型权重。
|
|
57
126
|
|
|
58
127
|
## 经验生命周期
|
|
59
128
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-> retired
|
|
66
|
-
```
|
|
129
|
+
`任务信号 -> candidate -> active -> cooling -> retired`
|
|
130
|
+
|
|
131
|
+
每条经验都根据真实任务结果演化,而不是按时间粗暴清理。帮到任务的经验会被强化,反复有害的经验会被降温或退役。
|
|
132
|
+
|
|
133
|
+
## 现在能做什么
|
|
67
134
|
|
|
68
|
-
|
|
135
|
+
- 在相似编码任务里复用短 guidance
|
|
136
|
+
- 查看某条 hint 为什么命中,或者为什么这次没有注入
|
|
137
|
+
- 让 ExperienceEngine 根据真实任务结果自动强化、降温、隔离或退役 guidance
|
|
138
|
+
- 当自动判断不准时,手动把最近一次介入标记为 helpful 或 harmful
|
|
139
|
+
- 查看 active、cooling、quarantined、retired 等生命周期状态
|
|
140
|
+
- 在 `OpenClaw`、`Claude Code`、`Codex` 三个宿主中使用
|
|
69
141
|
|
|
70
|
-
|
|
142
|
+
### 底层实现
|
|
71
143
|
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
- OpenAI `text-embedding-3-small`
|
|
77
|
-
- Gemini `gemini-embedding-001`
|
|
78
|
-
- Jina `jina-embeddings-v3`
|
|
79
|
-
- 受管本地 embedding fallback
|
|
80
|
-
- legacy hash-based fallback
|
|
81
|
-
- 通过宿主 agent 直接查看和反馈经验,并保留 CLI fallback:
|
|
82
|
-
- `ee inspect --last`
|
|
83
|
-
- `ee helped`
|
|
84
|
-
- `ee harmed`
|
|
144
|
+
- MCP 原生交互面,加上 CLI / operator fallback
|
|
145
|
+
- 支持 API 与本地回退的语义检索
|
|
146
|
+
- 确定性的 match scorecard,用来区分同仓库高置信匹配和更宽泛的跨仓库复用
|
|
147
|
+
- 宿主 agent 内可直接查看和反馈经验,CLI fallback 包括 `ee inspect --last`、`ee helped`、`ee harmed`
|
|
85
148
|
|
|
86
|
-
|
|
149
|
+
如果你想看 ExperienceNode 结构和治理字段,见:
|
|
87
150
|
|
|
88
151
|
- [Experience Model Overview](./docs/development/experience-model.md)
|
|
89
152
|
|
|
90
|
-
##
|
|
153
|
+
## 当前状态
|
|
154
|
+
|
|
155
|
+
- Stable:核心经验生命周期、inspect/helped/harmed loop、宿主集成、CLI/operator fallback
|
|
156
|
+
- 当前最顺滑的路径:`OpenClaw` 原生插件安装
|
|
157
|
+
- 仍在演进:retrieval 调优、provider 策略、更高级的宿主 UX
|
|
158
|
+
- 如果你想最快拿到第一份顺滑体验,建议先从 `OpenClaw` 开始
|
|
159
|
+
|
|
160
|
+
## 什么叫第一次真正成功
|
|
161
|
+
|
|
162
|
+
安装并初始化后,第一次真正体现价值的信号通常是:
|
|
163
|
+
|
|
164
|
+
- 一类重复任务不再重走之前已经犯过的错路
|
|
165
|
+
- ExperienceEngine 只注入一条很短、和当前仓库直接相关的约束,而不是把上下文塞满
|
|
166
|
+
- 宿主能解释为什么这条 hint 会命中,或者为什么这次没有注入
|
|
167
|
+
- 任务结果通常会自动影响以后是否继续投放这条经验
|
|
168
|
+
- `ee inspect --last` 能看到最近的介入和相关节点状态
|
|
169
|
+
|
|
170
|
+
## 前置条件
|
|
171
|
+
|
|
172
|
+
安装宿主前,请先确认对应宿主 CLI 已能在当前机器正常工作:
|
|
173
|
+
|
|
174
|
+
- `openclaw`
|
|
175
|
+
- `claude`
|
|
176
|
+
- `codex`
|
|
177
|
+
|
|
178
|
+
**ExperienceEngine 不会替你安装这些宿主 CLI。** 它只会接入一个已经可用的宿主环境。
|
|
179
|
+
|
|
180
|
+
OpenClaw 说明:
|
|
181
|
+
- 需要本机已有可正常工作的 OpenClaw,且支持原生插件安装
|
|
182
|
+
- 下面的 OpenClaw 路径默认要求 `openclaw plugins install` 和 `openclaw gateway restart` 可用
|
|
183
|
+
|
|
184
|
+
通用包要求:
|
|
185
|
+
- 发布包要求 Node.js `>=20`
|
|
186
|
+
|
|
187
|
+
## 完整安装与运维说明
|
|
91
188
|
|
|
92
|
-
|
|
189
|
+
### 按宿主安装
|
|
93
190
|
|
|
94
|
-
|
|
191
|
+
ExperienceEngine 现在不再把 `ee` CLI 当成适用于所有宿主的统一首要安装入口。
|
|
192
|
+
|
|
193
|
+
请先从宿主自己的安装路径接入:
|
|
95
194
|
|
|
96
195
|
- `OpenClaw`
|
|
97
196
|
- 宿主原生插件安装:
|
|
98
197
|
- `openclaw plugins install @alan512/experienceengine`
|
|
99
|
-
-
|
|
198
|
+
- 安装后,在开始真实任务前先重启 gateway:
|
|
100
199
|
- `openclaw gateway restart`
|
|
101
200
|
- `Codex`
|
|
102
201
|
- EE 托管安装:
|
|
103
202
|
- `ee install codex`
|
|
104
203
|
- 原生 / 手工 fallback:
|
|
105
|
-
-
|
|
204
|
+
- 如果你需要直接 MCP wiring,可参考后面的高级示例
|
|
106
205
|
- 无论走哪条路径,首次接入后都建议在仓库里开启一个新的 Codex 会话,让 MCP 配置和 `AGENTS.md` 指令块生效
|
|
107
206
|
- `Claude Code`
|
|
108
207
|
- 宿主原生 marketplace 安装:
|
|
@@ -110,82 +209,106 @@ ExperienceEngine 现在采用**宿主侧安装优先**。
|
|
|
110
209
|
- `/plugin marketplace add https://github.com/Alan-512/ExperienceEngine.git`
|
|
111
210
|
- 再安装插件:
|
|
112
211
|
- `/plugin install experienceengine@experienceengine`
|
|
113
|
-
- 如果你需要显式 hooks + MCP wiring
|
|
212
|
+
- 如果你需要显式 hooks + MCP wiring,仍可使用:
|
|
114
213
|
- `ee install claude-code`
|
|
115
214
|
- 安装后建议开启一个新的 Claude Code 会话,让插件 hooks 和 bundled MCP 配置生效
|
|
116
215
|
|
|
117
|
-
|
|
216
|
+
无论哪个宿主,整体流程都是一样的:
|
|
118
217
|
|
|
119
|
-
|
|
218
|
+
1. 通过宿主路径安装 ExperienceEngine
|
|
219
|
+
2. 执行一次 `ee init` 初始化共享状态
|
|
220
|
+
3. 重启或新开宿主会话,直到仓库变成 `Ready`
|
|
221
|
+
4. 日常检查和反馈优先留在宿主内部完成
|
|
222
|
+
5. 需要验证、修复或深度排障时,再退回 `ee` CLI
|
|
120
223
|
|
|
121
|
-
|
|
122
|
-
- “显示最近一次 ExperienceEngine 介入。”
|
|
123
|
-
- “把刚才那次 ExperienceEngine 提示标记为 helpful。”
|
|
224
|
+
### 共享初始化
|
|
124
225
|
|
|
125
|
-
|
|
226
|
+
`ee init` 属于 ExperienceEngine 的共享初始化,不是某个宿主自己的安装步骤。
|
|
126
227
|
|
|
127
|
-
|
|
128
|
-
ee init
|
|
129
|
-
ee doctor <openclaw|claude-code|codex>
|
|
130
|
-
ee status
|
|
131
|
-
ee maintenance embedding-smoke
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
这里的 `ee init` 属于 ExperienceEngine 的**共享初始化**,不是某个宿主自己的安装步骤。
|
|
135
|
-
|
|
136
|
-
- 第一次把 EE 接到任意一个宿主后,做一次初始化即可。它会统一引导你配置:
|
|
228
|
+
- 第一次接入任意宿主后执行一次,用来配置:
|
|
137
229
|
- distillation provider / model / auth
|
|
138
230
|
- embedding 模式 / provider
|
|
139
231
|
- 共享 provider secret
|
|
140
|
-
-
|
|
232
|
+
- 后续再接入其他宿主,会复用同一个 ExperienceEngine home、配置和共享 secret
|
|
233
|
+
|
|
234
|
+
安装完成后,ExperienceEngine 应该把用户引导到下一步状态:
|
|
235
|
+
|
|
236
|
+
- 如果宿主 wiring 已完成,产品至少是 `Installed`
|
|
237
|
+
- 执行完 `ee init` 后,进入 `Initialized`
|
|
238
|
+
- 宿主或仓库完成 reload 并能开始真实任务后,进入 `Ready`
|
|
141
239
|
|
|
142
240
|
最小共享初始化示例:
|
|
143
241
|
|
|
144
|
-
|
|
145
|
-
ee init
|
|
146
|
-
ee init
|
|
147
|
-
ee init
|
|
148
|
-
ee init show
|
|
149
|
-
```
|
|
242
|
+
1. `ee init distillation --provider openai --model gpt-4.1-mini --auth-mode api_key`
|
|
243
|
+
2. `ee init secret OPENAI_API_KEY <your-api-key>`
|
|
244
|
+
3. `ee init embedding --mode api --api-provider openai --model text-embedding-3-small`
|
|
245
|
+
4. `ee init show`
|
|
150
246
|
|
|
151
247
|
如果你更想用 Gemini 或 Jina 做 embedding,可以沿用同样的 `ee init embedding` 流程,只替换 provider 和 model。
|
|
152
248
|
|
|
153
|
-
|
|
249
|
+
### 日常使用与 Operator 使用
|
|
154
250
|
|
|
155
|
-
|
|
251
|
+
日常使用时,优先直接问宿主 agent 当前的 ExperienceEngine 状态。默认主路径是自动结果归因;手动 feedback 主要用于你觉得自动判断不准时的纠偏。
|
|
156
252
|
|
|
157
|
-
|
|
158
|
-
- `claude`
|
|
159
|
-
- `codex`
|
|
253
|
+
例如:
|
|
160
254
|
|
|
161
|
-
ExperienceEngine
|
|
255
|
+
- “ExperienceEngine 刚刚注入了什么?”
|
|
256
|
+
- “为什么那条 ExperienceEngine 提示会命中?”
|
|
257
|
+
- “为什么这次 ExperienceEngine 没有注入?”
|
|
258
|
+
- “把刚才那次 ExperienceEngine 介入标记为 helpful 或 harmful。”
|
|
162
259
|
|
|
163
|
-
|
|
260
|
+
正常使用里,你不应该需要手动给每次介入都打分。ExperienceEngine 的默认路径是根据真实任务结果自动学习;只有当自动判断明显不对时,你再手动纠偏。
|
|
261
|
+
|
|
262
|
+
OpenClaw 还支持这些 readiness / silence 问题:
|
|
263
|
+
|
|
264
|
+
- “ExperienceEngine 这里 ready 了吗?”
|
|
265
|
+
- “这个仓库里的 ExperienceEngine 还在 warming up 吗?”
|
|
266
|
+
- “刚才为什么 ExperienceEngine 没有注入?”
|
|
267
|
+
|
|
268
|
+
对于 `OpenClaw`、`Codex`、`Claude Code`,常规 review / feedback 路径都应优先留在宿主内部完成。
|
|
269
|
+
只有宿主侧路径不可用,或者你需要显式 operator 控制时,再退回 CLI。
|
|
270
|
+
|
|
271
|
+
当你需要显式运维、验证或排障时,可以用:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
ee init
|
|
275
|
+
ee doctor <openclaw|claude-code|codex>
|
|
276
|
+
ee status
|
|
277
|
+
ee maintenance embedding-smoke
|
|
278
|
+
```
|
|
164
279
|
|
|
165
|
-
|
|
280
|
+
### Ready 与 Value 状态
|
|
166
281
|
|
|
167
|
-
|
|
168
|
-
- 验证、修复、状态查看属于 `ee`
|
|
282
|
+
ExperienceEngine 把 onboarding 和 value 拆成两层:
|
|
169
283
|
|
|
170
|
-
|
|
284
|
+
- `Setup state`
|
|
285
|
+
- `Installed`
|
|
286
|
+
- `Initialized`
|
|
287
|
+
- `Ready`
|
|
288
|
+
- `Value state`
|
|
289
|
+
- `Warming up`
|
|
290
|
+
- `First value reached`
|
|
171
291
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
292
|
+
这不是一条严格线性阶梯。一个仓库可以已经 `Ready`,但还处于 `Warming up`。
|
|
293
|
+
|
|
294
|
+
`First value reached` 只应该在真实任务里已经出现可见价值时才成立。仅仅显示 onboarding 文案或 warm-up 提示,不算 first value。
|
|
295
|
+
|
|
296
|
+
## 安装模型
|
|
175
297
|
|
|
176
|
-
|
|
298
|
+
ExperienceEngine 明确拆分:
|
|
299
|
+
- 宿主安装
|
|
300
|
+
- 共享初始化
|
|
301
|
+
- operator 工作流
|
|
177
302
|
|
|
178
|
-
|
|
303
|
+
宿主仍然是主交互面。
|
|
304
|
+
`ee` 仍然是显式的 operator 面,用于 setup、验证、修复、状态查看和维护。
|
|
305
|
+
对于 Codex,`ee status` 和 `ee doctor codex` 还会显示 `ee` CLI fallback 是否在 `PATH` 上可用。Codex 的 MCP 接入在 CLI fallback 缺失时仍可能正常工作,但 `ee inspect --last` 这类命令需要 PATH 里有 `ee`,或者使用显式的包调用方式。
|
|
179
306
|
|
|
180
|
-
|
|
181
|
-
- 健康检查
|
|
182
|
-
- 修复建议
|
|
183
|
-
- 状态查看
|
|
184
|
-
- 学习与介入反馈
|
|
307
|
+
## 高级按宿主命令(仅限 Operator / 开发者)
|
|
185
308
|
|
|
186
|
-
|
|
309
|
+
大多数用户可以跳过这一节,直接使用上面的宿主安装路径。
|
|
187
310
|
|
|
188
|
-
|
|
311
|
+
如果你是运维者、开发者,或者确实想显式控制某个宿主,仍可使用:
|
|
189
312
|
|
|
190
313
|
```bash
|
|
191
314
|
ee install openclaw
|
|
@@ -193,12 +316,23 @@ ee install claude-code
|
|
|
193
316
|
ee install codex
|
|
194
317
|
```
|
|
195
318
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
319
|
+
<details>
|
|
320
|
+
<summary>Codex 原生 / 手工 MCP fallback 示例</summary>
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
codex mcp add experienceengine --env EXPERIENCE_ENGINE_HOME=$HOME/.experienceengine -- npx -y @alan512/experienceengine codex-mcp-server
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
</details>
|
|
327
|
+
|
|
328
|
+
说明:
|
|
329
|
+
- `OpenClaw` 走 plugin/runtime integration,而不是 `src/adapters/`
|
|
330
|
+
- `Claude Code` 会安装 hooks 和共享 ExperienceEngine MCP 服务
|
|
331
|
+
- `Codex` 会安装共享 ExperienceEngine MCP 服务
|
|
332
|
+
- `ee install ...` 与 `ee doctor ...` 会在 `npm` / `pnpm` 使用非官方 registry 时给出提示,因为受管模型下载在 `https://registry.npmjs.org` 下最稳定
|
|
333
|
+
- 成功执行 `ee install ...` 后,也会提醒冷启动预期:capture 会立刻开始,但 formal experience 一般需要在同一仓库里出现几次相似任务后才会形成
|
|
200
334
|
|
|
201
|
-
|
|
335
|
+
这些命令属于 operator fallback,不是默认公开安装路径。
|
|
202
336
|
|
|
203
337
|
## 数据目录
|
|
204
338
|
|
|
@@ -220,10 +354,7 @@ ee install codex
|
|
|
220
354
|
当前默认行为:
|
|
221
355
|
|
|
222
356
|
- `embeddingProvider = "api"`
|
|
223
|
-
- provider 优先级:
|
|
224
|
-
- 设置了 `OPENAI_API_KEY` 时优先 OpenAI
|
|
225
|
-
- 设置了 `GEMINI_API_KEY` 时使用 Gemini
|
|
226
|
-
- 设置了 `JINA_API_KEY` 时使用 Jina
|
|
357
|
+
- provider 优先级:OpenAI -> Gemini -> Jina
|
|
227
358
|
- 如果没有任何 API provider 可用,会自动回退到受管本地 embedding
|
|
228
359
|
|
|
229
360
|
常用环境变量:
|
|
@@ -12,4 +12,5 @@ export declare const loadClaudeSession: (sessionId: string, options?: SessionSto
|
|
|
12
12
|
export declare const rememberClaudePromptContext: (context: HostPromptContext, options?: SessionStoreOptions) => void;
|
|
13
13
|
export declare const appendClaudeToolResult: (result: HostToolResult, options?: SessionStoreOptions) => void;
|
|
14
14
|
export declare const clearClaudeSession: (sessionId: string, options?: SessionStoreOptions) => void;
|
|
15
|
+
export declare const findClaudeSessionByCwd: (cwd: string, options?: SessionStoreOptions) => ClaudeStoredSession | null;
|
|
15
16
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { resolveExperienceEnginePaths, resolveProductStateDir } from "../../config/path-resolver.js";
|
|
4
4
|
const sanitizeSessionId = (sessionId) => sessionId.replace(/[^a-zA-Z0-9_.-]+/g, "_");
|
|
@@ -11,6 +11,15 @@ const resolveSessionDir = (options = {}) => {
|
|
|
11
11
|
return join(resolveProductStateDir(paths), "sessions");
|
|
12
12
|
};
|
|
13
13
|
const resolveSessionPath = (sessionId, options = {}) => join(resolveSessionDir(options), `${sanitizeSessionId(sessionId)}.json`);
|
|
14
|
+
const listClaudeSessionPaths = (options = {}) => {
|
|
15
|
+
const dir = resolveSessionDir(options);
|
|
16
|
+
if (!existsSync(dir)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
return readdirSync(dir)
|
|
20
|
+
.filter((entry) => entry.endsWith(".json"))
|
|
21
|
+
.map((entry) => join(dir, entry));
|
|
22
|
+
};
|
|
14
23
|
export const loadClaudeSession = (sessionId, options = {}) => {
|
|
15
24
|
const filePath = resolveSessionPath(sessionId, options);
|
|
16
25
|
if (!existsSync(filePath)) {
|
|
@@ -53,4 +62,18 @@ export const clearClaudeSession = (sessionId, options = {}) => {
|
|
|
53
62
|
const filePath = resolveSessionPath(sessionId, options);
|
|
54
63
|
rmSync(filePath, { force: true });
|
|
55
64
|
};
|
|
65
|
+
export const findClaudeSessionByCwd = (cwd, options = {}) => {
|
|
66
|
+
const matches = listClaudeSessionPaths(options)
|
|
67
|
+
.map((filePath) => ({
|
|
68
|
+
filePath,
|
|
69
|
+
mtimeMs: statSync(filePath).mtimeMs,
|
|
70
|
+
session: JSON.parse(readFileSync(filePath, "utf8"))
|
|
71
|
+
}))
|
|
72
|
+
.filter((entry) => entry.session.promptContext?.cwd === cwd)
|
|
73
|
+
.sort((left, right) => right.mtimeMs - left.mtimeMs);
|
|
74
|
+
if (matches.length !== 1) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return matches[0]?.session ?? null;
|
|
78
|
+
};
|
|
56
79
|
//# sourceMappingURL=session-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { ExperienceNodeType, ExperienceState } from "../../types/domain.js";
|
|
3
|
+
export type CodexActionCategory = "inspect" | "state" | "admin" | "maintenance";
|
|
4
|
+
export type CodexActionRiskLevel = "low" | "medium" | "high";
|
|
5
|
+
export type CodexActionDefinition = {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
category: CodexActionCategory;
|
|
10
|
+
riskLevel: CodexActionRiskLevel;
|
|
11
|
+
requiresConfirmation: boolean;
|
|
12
|
+
inputSchema?: z.ZodTypeAny;
|
|
13
|
+
examplePayload?: Record<string, unknown>;
|
|
14
|
+
handler: (args: Record<string, unknown>) => Promise<unknown>;
|
|
15
|
+
};
|
|
16
|
+
type RegistryDeps = {
|
|
17
|
+
interactionSurface: {
|
|
18
|
+
inspectRecent: (args?: {
|
|
19
|
+
mode?: "all" | "injected";
|
|
20
|
+
limit?: number;
|
|
21
|
+
}) => Promise<unknown>;
|
|
22
|
+
inspectNode: (args: {
|
|
23
|
+
nodeId: string;
|
|
24
|
+
}) => Promise<unknown>;
|
|
25
|
+
listNodesByState: (args: {
|
|
26
|
+
state: ExperienceState;
|
|
27
|
+
}) => Promise<unknown>;
|
|
28
|
+
listNodesByType: (args: {
|
|
29
|
+
nodeType: ExperienceNodeType;
|
|
30
|
+
}) => Promise<unknown>;
|
|
31
|
+
inspectLearningSummary: () => Promise<unknown>;
|
|
32
|
+
coolNode: (args: {
|
|
33
|
+
nodeId: string;
|
|
34
|
+
}) => Promise<unknown>;
|
|
35
|
+
retireNode: (args: {
|
|
36
|
+
nodeId: string;
|
|
37
|
+
}) => Promise<unknown>;
|
|
38
|
+
feedbackNode: (args: {
|
|
39
|
+
nodeId: string;
|
|
40
|
+
feedback: "helped" | "harmed";
|
|
41
|
+
}) => Promise<unknown>;
|
|
42
|
+
disableScope: (args?: {
|
|
43
|
+
cwd?: string;
|
|
44
|
+
}) => Promise<unknown>;
|
|
45
|
+
enableScope: (args?: {
|
|
46
|
+
cwd?: string;
|
|
47
|
+
}) => Promise<unknown>;
|
|
48
|
+
};
|
|
49
|
+
operationalSurface: {
|
|
50
|
+
checkUpdate: (adapter: "openclaw" | "claude-code" | "codex") => Promise<unknown>;
|
|
51
|
+
};
|
|
52
|
+
operationalActions: {
|
|
53
|
+
planOperation: (args: {
|
|
54
|
+
adapter: "openclaw" | "claude-code" | "codex";
|
|
55
|
+
operation: "install" | "repair" | "upgrade";
|
|
56
|
+
}) => unknown;
|
|
57
|
+
executePlannedOperation: (args: {
|
|
58
|
+
planId: string;
|
|
59
|
+
confirmationToken: string;
|
|
60
|
+
}) => unknown;
|
|
61
|
+
};
|
|
62
|
+
stateArtifacts: {
|
|
63
|
+
listBackups: () => unknown;
|
|
64
|
+
planOperation: (args: {
|
|
65
|
+
operation: "backup" | "export";
|
|
66
|
+
} | {
|
|
67
|
+
operation: "import";
|
|
68
|
+
importPath: string;
|
|
69
|
+
} | {
|
|
70
|
+
operation: "rollback";
|
|
71
|
+
backupId: string;
|
|
72
|
+
}) => unknown;
|
|
73
|
+
executePlannedOperation: (args: {
|
|
74
|
+
planId: string;
|
|
75
|
+
confirmationToken: string;
|
|
76
|
+
}) => unknown;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
export type CodexActionRegistry = ReturnType<typeof createCodexActionRegistry>;
|
|
80
|
+
export declare const createCodexActionRegistry: (deps: RegistryDeps) => {
|
|
81
|
+
list: () => CodexActionDefinition[];
|
|
82
|
+
get: (id: string) => CodexActionDefinition | undefined;
|
|
83
|
+
};
|
|
84
|
+
export {};
|