@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.
Files changed (206) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +213 -130
  3. package/README.zh-CN.md +250 -119
  4. package/dist/adapters/claude-code/session-store.d.ts +1 -0
  5. package/dist/adapters/claude-code/session-store.js +24 -1
  6. package/dist/adapters/claude-code/session-store.js.map +1 -1
  7. package/dist/adapters/codex/action-registry.d.ts +84 -0
  8. package/dist/adapters/codex/action-registry.js +277 -0
  9. package/dist/adapters/codex/action-registry.js.map +1 -0
  10. package/dist/adapters/codex/broker-tools.d.ts +114 -0
  11. package/dist/adapters/codex/broker-tools.js +130 -0
  12. package/dist/adapters/codex/broker-tools.js.map +1 -0
  13. package/dist/adapters/codex/mcp-server.d.ts +21 -0
  14. package/dist/adapters/codex/mcp-server.js +103 -423
  15. package/dist/adapters/codex/mcp-server.js.map +1 -1
  16. package/dist/analyzer/candidate-signals.d.ts +3 -1
  17. package/dist/analyzer/candidate-signals.js +159 -0
  18. package/dist/analyzer/candidate-signals.js.map +1 -1
  19. package/dist/analyzer/llm-learning-gate.d.ts +12 -1
  20. package/dist/analyzer/llm-learning-gate.js +633 -16
  21. package/dist/analyzer/llm-learning-gate.js.map +1 -1
  22. package/dist/cli/commands/claude-hook.js +11 -4
  23. package/dist/cli/commands/claude-hook.js.map +1 -1
  24. package/dist/cli/commands/codex.d.ts +60 -0
  25. package/dist/cli/commands/codex.js +188 -0
  26. package/dist/cli/commands/codex.js.map +1 -0
  27. package/dist/cli/commands/doctor.js +35 -2
  28. package/dist/cli/commands/doctor.js.map +1 -1
  29. package/dist/cli/commands/evaluate.d.ts +9 -3
  30. package/dist/cli/commands/evaluate.js +31 -5
  31. package/dist/cli/commands/evaluate.js.map +1 -1
  32. package/dist/cli/commands/init.js +21 -8
  33. package/dist/cli/commands/init.js.map +1 -1
  34. package/dist/cli/commands/inspect.js +73 -4
  35. package/dist/cli/commands/inspect.js.map +1 -1
  36. package/dist/cli/commands/repair.js +3 -3
  37. package/dist/cli/commands/repair.js.map +1 -1
  38. package/dist/cli/commands/status.js +38 -0
  39. package/dist/cli/commands/status.js.map +1 -1
  40. package/dist/cli/dispatch.js +16 -4
  41. package/dist/cli/dispatch.js.map +1 -1
  42. package/dist/config/config-schema.d.ts +177 -0
  43. package/dist/config/config-schema.js +142 -1
  44. package/dist/config/config-schema.js.map +1 -1
  45. package/dist/config/default-config.js +19 -1
  46. package/dist/config/default-config.js.map +1 -1
  47. package/dist/config/load-config.js +72 -1
  48. package/dist/config/load-config.js.map +1 -1
  49. package/dist/config/settings-store.d.ts +19 -0
  50. package/dist/config/settings-store.js +11 -0
  51. package/dist/config/settings-store.js.map +1 -1
  52. package/dist/controller/candidate-retriever.d.ts +16 -1
  53. package/dist/controller/candidate-retriever.js +199 -137
  54. package/dist/controller/candidate-retriever.js.map +1 -1
  55. package/dist/controller/injection-scorecard.d.ts +2 -14
  56. package/dist/controller/injection-scorecard.js +29 -0
  57. package/dist/controller/injection-scorecard.js.map +1 -1
  58. package/dist/controller/intervention-controller.d.ts +3 -15
  59. package/dist/controller/intervention-controller.js +219 -57
  60. package/dist/controller/intervention-controller.js.map +1 -1
  61. package/dist/controller/policy-enricher.d.ts +10 -0
  62. package/dist/controller/policy-enricher.js +186 -0
  63. package/dist/controller/policy-enricher.js.map +1 -0
  64. package/dist/controller/retrieval-context.d.ts +3 -0
  65. package/dist/controller/retrieval-context.js +37 -0
  66. package/dist/controller/retrieval-context.js.map +1 -0
  67. package/dist/controller/second-opinion-gate.d.ts +41 -0
  68. package/dist/controller/second-opinion-gate.js +225 -0
  69. package/dist/controller/second-opinion-gate.js.map +1 -0
  70. package/dist/controller/trigger-evaluator.d.ts +6 -1
  71. package/dist/controller/trigger-evaluator.js +31 -1
  72. package/dist/controller/trigger-evaluator.js.map +1 -1
  73. package/dist/distillation/prompt-contract.d.ts +1 -1
  74. package/dist/distillation/prompt-contract.js +3 -1
  75. package/dist/distillation/prompt-contract.js.map +1 -1
  76. package/dist/distillation/providers/gemini.js +5 -1
  77. package/dist/distillation/providers/gemini.js.map +1 -1
  78. package/dist/distillation/queue-worker.js +22 -3
  79. package/dist/distillation/queue-worker.js.map +1 -1
  80. package/dist/evaluation/codex-lifecycle-validation.d.ts +60 -0
  81. package/dist/evaluation/codex-lifecycle-validation.js +233 -0
  82. package/dist/evaluation/codex-lifecycle-validation.js.map +1 -0
  83. package/dist/evaluation/hybrid-phase1-rollout-summary.d.ts +63 -0
  84. package/dist/evaluation/hybrid-phase1-rollout-summary.js +108 -0
  85. package/dist/evaluation/hybrid-phase1-rollout-summary.js.map +1 -0
  86. package/dist/evaluation/hybrid-phase3-gate-metrics.d.ts +26 -0
  87. package/dist/evaluation/hybrid-phase3-gate-metrics.js +23 -0
  88. package/dist/evaluation/hybrid-phase3-gate-metrics.js.map +1 -0
  89. package/dist/evaluation/openclaw-baseline.d.ts +8 -0
  90. package/dist/evaluation/openclaw-baseline.js +27 -0
  91. package/dist/evaluation/openclaw-baseline.js.map +1 -1
  92. package/dist/experience-management/governance-observability.d.ts +13 -0
  93. package/dist/experience-management/governance-observability.js +37 -0
  94. package/dist/experience-management/governance-observability.js.map +1 -0
  95. package/dist/experience-management/node-lifecycle-governance.d.ts +8 -0
  96. package/dist/experience-management/node-lifecycle-governance.js +80 -0
  97. package/dist/experience-management/node-lifecycle-governance.js.map +1 -0
  98. package/dist/experience-management/task-management-signals.d.ts +29 -0
  99. package/dist/experience-management/task-management-signals.js +148 -0
  100. package/dist/experience-management/task-management-signals.js.map +1 -0
  101. package/dist/feedback/feedback-manager.d.ts +4 -1
  102. package/dist/feedback/feedback-manager.js +11 -22
  103. package/dist/feedback/feedback-manager.js.map +1 -1
  104. package/dist/feedback/state-transition.d.ts +6 -1
  105. package/dist/feedback/state-transition.js +6 -3
  106. package/dist/feedback/state-transition.js.map +1 -1
  107. package/dist/hybrid/capsule-builder.d.ts +23 -0
  108. package/dist/hybrid/capsule-builder.js +114 -0
  109. package/dist/hybrid/capsule-builder.js.map +1 -0
  110. package/dist/hybrid/explain-provider-client.d.ts +19 -0
  111. package/dist/hybrid/explain-provider-client.js +34 -0
  112. package/dist/hybrid/explain-provider-client.js.map +1 -0
  113. package/dist/hybrid/postmortem-provider-client.d.ts +19 -0
  114. package/dist/hybrid/postmortem-provider-client.js +34 -0
  115. package/dist/hybrid/postmortem-provider-client.js.map +1 -0
  116. package/dist/hybrid/rollout.d.ts +9 -0
  117. package/dist/hybrid/rollout.js +49 -0
  118. package/dist/hybrid/rollout.js.map +1 -0
  119. package/dist/hybrid/router.d.ts +4 -0
  120. package/dist/hybrid/router.js +62 -0
  121. package/dist/hybrid/router.js.map +1 -0
  122. package/dist/hybrid/types.d.ts +140 -0
  123. package/dist/hybrid/types.js +2 -0
  124. package/dist/hybrid/types.js.map +1 -0
  125. package/dist/hybrid/validators.d.ts +5 -0
  126. package/dist/hybrid/validators.js +94 -0
  127. package/dist/hybrid/validators.js.map +1 -0
  128. package/dist/hybrid/worker-client.d.ts +61 -0
  129. package/dist/hybrid/worker-client.js +196 -0
  130. package/dist/hybrid/worker-client.js.map +1 -0
  131. package/dist/hybrid/workers/explain-decision-llm.d.ts +8 -0
  132. package/dist/hybrid/workers/explain-decision-llm.js +152 -0
  133. package/dist/hybrid/workers/explain-decision-llm.js.map +1 -0
  134. package/dist/hybrid/workers/explain-decision.d.ts +2 -0
  135. package/dist/hybrid/workers/explain-decision.js +40 -0
  136. package/dist/hybrid/workers/explain-decision.js.map +1 -0
  137. package/dist/hybrid/workers/postmortem-review-llm.d.ts +8 -0
  138. package/dist/hybrid/workers/postmortem-review-llm.js +398 -0
  139. package/dist/hybrid/workers/postmortem-review-llm.js.map +1 -0
  140. package/dist/hybrid/workers/postmortem-review.d.ts +2 -0
  141. package/dist/hybrid/workers/postmortem-review.js +66 -0
  142. package/dist/hybrid/workers/postmortem-review.js.map +1 -0
  143. package/dist/install/claude-code-doctor.d.ts +1 -0
  144. package/dist/install/claude-code-doctor.js +20 -4
  145. package/dist/install/claude-code-doctor.js.map +1 -1
  146. package/dist/install/claude-code-installer.js +50 -1
  147. package/dist/install/claude-code-installer.js.map +1 -1
  148. package/dist/install/codex-cli.d.ts +15 -0
  149. package/dist/install/codex-cli.js +55 -3
  150. package/dist/install/codex-cli.js.map +1 -1
  151. package/dist/install/codex-installer.d.ts +7 -0
  152. package/dist/install/codex-installer.js +22 -0
  153. package/dist/install/codex-installer.js.map +1 -1
  154. package/dist/install/openclaw-cli.d.ts +11 -0
  155. package/dist/install/openclaw-cli.js.map +1 -1
  156. package/dist/install/openclaw-installer.d.ts +12 -7
  157. package/dist/install/openclaw-installer.js +197 -46
  158. package/dist/install/openclaw-installer.js.map +1 -1
  159. package/dist/interaction/service.d.ts +15 -0
  160. package/dist/interaction/service.js +189 -31
  161. package/dist/interaction/service.js.map +1 -1
  162. package/dist/plugin/hooks/before-prompt-build.d.ts +1 -0
  163. package/dist/plugin/hooks/before-prompt-build.js +4 -1
  164. package/dist/plugin/hooks/before-prompt-build.js.map +1 -1
  165. package/dist/plugin/openclaw-install-state.d.ts +39 -0
  166. package/dist/plugin/openclaw-install-state.js +24 -0
  167. package/dist/plugin/openclaw-install-state.js.map +1 -0
  168. package/dist/plugin/openclaw-plugin.d.ts +125 -0
  169. package/dist/plugin/openclaw-plugin.js +18 -7
  170. package/dist/plugin/openclaw-plugin.js.map +1 -1
  171. package/dist/plugin/openclaw-routine-interaction.d.ts +2 -1
  172. package/dist/plugin/openclaw-routine-interaction.js +12 -7
  173. package/dist/plugin/openclaw-routine-interaction.js.map +1 -1
  174. package/dist/plugin/openclaw-runtime-defaults.d.ts +16 -0
  175. package/dist/plugin/openclaw-runtime-defaults.js +16 -0
  176. package/dist/plugin/openclaw-runtime-defaults.js.map +1 -0
  177. package/dist/runtime/service.d.ts +34 -5
  178. package/dist/runtime/service.js +474 -49
  179. package/dist/runtime/service.js.map +1 -1
  180. package/dist/store/sqlite/db.js +28 -0
  181. package/dist/store/sqlite/db.js.map +1 -1
  182. package/dist/store/sqlite/repositories/hybrid-invocation-trace-repo.d.ts +11 -0
  183. package/dist/store/sqlite/repositories/hybrid-invocation-trace-repo.js +76 -0
  184. package/dist/store/sqlite/repositories/hybrid-invocation-trace-repo.js.map +1 -0
  185. package/dist/store/sqlite/repositories/hybrid-review-artifact-repo.d.ts +11 -0
  186. package/dist/store/sqlite/repositories/hybrid-review-artifact-repo.js +73 -0
  187. package/dist/store/sqlite/repositories/hybrid-review-artifact-repo.js.map +1 -0
  188. package/dist/store/sqlite/repositories/input-record-repo.d.ts +1 -0
  189. package/dist/store/sqlite/repositories/input-record-repo.js +13 -0
  190. package/dist/store/sqlite/repositories/input-record-repo.js.map +1 -1
  191. package/dist/store/sqlite/repositories/node-repo.d.ts +4 -0
  192. package/dist/store/sqlite/repositories/node-repo.js +54 -6
  193. package/dist/store/sqlite/repositories/node-repo.js.map +1 -1
  194. package/dist/store/sqlite/schema.sql +40 -0
  195. package/dist/store/vector/embeddings.js +26 -8
  196. package/dist/store/vector/embeddings.js.map +1 -1
  197. package/dist/types/domain.d.ts +151 -2
  198. package/dist/types/plugin.d.ts +2 -1
  199. package/docs/releases/v0.1.3.md +3 -2
  200. package/docs/releases/v0.2.0.md +85 -0
  201. package/docs/releases/v0.2.1.md +21 -0
  202. package/docs/user-guide.md +44 -13
  203. package/openclaw.plugin.json +81 -1
  204. package/package.json +11 -2
  205. package/plugins/claude-code-experienceengine/.claude-plugin/plugin.json +1 -1
  206. package/plugins/claude-code-experienceengine/scripts/install-deps.sh +1 -1
@@ -59,10 +59,12 @@ When it injects guidance, you will usually see a lightweight notice like:
59
59
  [ExperienceEngine] Injected 1 strategy hint for this task.
60
60
  ```
61
61
 
62
- If there is no intervention, it stays silent.
62
+ If there is no intervention, it stays silent during the task. The delivery decision is still recorded, so `ee inspect --last` and host-side inspection can explain whether ExperienceEngine skipped because the match was weak, the node was not safe to ship yet, or the decision stayed in a conservative path.
63
63
 
64
64
  When ExperienceEngine is less certain but still sees a credible same-family match, it may choose a conservative injection instead of skipping entirely. In that case the injected block stays smaller by default, but mature low-risk nodes can still include a short `Goal / Steps / Avoid` structure when that makes the guidance more actionable.
65
65
 
66
+ ExperienceEngine now uses a deterministic match scorecard before live delivery. Same-repo, high-match experience can ship directly when trust is already strong. Same-repo conservative experience can be promoted after a successful high-match reuse. Cross-repo matches are allowed only as conservative candidates unless later evidence proves they are safe in the new scope.
67
+
66
68
  When you inspect the latest turn, you may also see a learning decision such as:
67
69
 
68
70
  ```text
@@ -155,6 +157,8 @@ ee status
155
157
 
156
158
  Use `ee init` once to initialize ExperienceEngine's shared distillation, embedding, and secret state. New host installations should reuse that same shared EE state instead of asking you to re-enter the same API key per host window.
157
159
 
160
+ For Codex, `ee status` and `ee doctor codex` also show whether the `ee` CLI fallback is available on `PATH`. Codex MCP wiring can still be healthy without that fallback, but explicit operator commands such as `ee inspect --last` need either a PATH-visible `ee` binary or an explicit package invocation.
161
+
158
162
  In practical terms, the routine loop currently looks like this:
159
163
 
160
164
  - `Codex`
@@ -251,9 +255,9 @@ When you inspect a specific node, ExperienceEngine now also shows a lightweight
251
255
 
252
256
  ## How MCP Interaction Works
253
257
 
254
- For `Codex` and `Claude Code`, ExperienceEngine is designed to work mainly through MCP.
258
+ For `Codex` and `Claude Code`, ExperienceEngine is designed to keep routine review and management inside the host session first.
255
259
 
256
- That means after installation, you usually do not leave the agent session to manage ExperienceEngine. Instead, you ask the agent naturally and the agent can call ExperienceEngine MCP resources, prompts, and tools for you.
260
+ That means after installation, you usually do not leave the agent session to manage ExperienceEngine. Instead, you ask the agent naturally and the host uses its native EE wiring for routine interaction.
257
261
 
258
262
  This is one host-specific implementation of the same shared product model described above:
259
263
 
@@ -275,14 +279,23 @@ Typical examples:
275
279
 
276
280
  ### MCP Interaction Model
277
281
 
278
- ExperienceEngine exposes three MCP categories:
282
+ `Codex` exposes a layered MCP surface:
283
+
284
+ - `Direct tools`
285
+ - core loop actions like lookup, recording important tool outcomes, finalize, last-feedback, capabilities, and doctor
286
+ - `Routine read resources`
287
+ - read-only state like last interaction, recent history, repo summary, and routine node views
288
+ - `Brokered advanced actions`
289
+ - lower-frequency inspect, admin, maintenance, and high-impact plan/execute flows exposed through a small broker tool surface instead of many direct schemas
279
290
 
280
- - `Resources`
281
- - read-only state like last interaction, recent history, nodes, doctor output, update state, and backups
282
- - `Prompts`
283
- - reusable workflows that guide the agent to inspect or manage ExperienceEngine safely
284
- - `Tools`
285
- - executable actions like feedback, scope toggles, node lifecycle changes, and high-impact operations
291
+ For `Codex`, this means routine host-native interaction stays discoverable, while long-tail admin and maintenance actions are reached through brokered actions rather than public prompts or one-tool-per-action registration.
292
+
293
+ `Claude Code` still uses both `hooks` and `MCP`:
294
+
295
+ - hooks drive runtime capture and injection
296
+ - MCP drives inspect, control, and operational interaction
297
+
298
+ So the two hosts share the same product model, but they do not expose the exact same interaction shape.
286
299
 
287
300
  For high-impact actions, ExperienceEngine does not execute immediately. It uses a:
288
301
 
@@ -352,12 +365,13 @@ These are operator-facing controls, not the preferred public onboarding path.
352
365
 
353
366
  ## Embedding Retrieval
354
367
 
355
- ExperienceEngine now supports a multi-provider embedding stack for semantic retrieval.
368
+ ExperienceEngine now supports a multi-provider embedding stack inside a staged hybrid retrieval pipeline.
356
369
 
357
370
  Retrieval is now hybrid by default:
358
371
 
359
- - semantic retrieval remains the main recall path
360
- - lexical retrieval and query normalization help preserve engineering intent when the prompt wording shifts
372
+ - query normalization and rewrite happen first so retrieval keeps engineering intent when prompt wording shifts
373
+ - lexical and semantic retrieval are fused into one candidate shortlist instead of treating semantic retrieval as the unquestioned main path
374
+ - policy enrichment stays separate from retrieval scoring, so maturity and governance signals do not replace retrieval evidence
361
375
  - reranking can promote a better-matching candidate above older score advantages, especially when an external reranker is configured
362
376
 
363
377
  Default behavior (`embeddingProvider = "api"`):
@@ -369,6 +383,12 @@ Default behavior (`embeddingProvider = "api"`):
369
383
  - if the API provider fails, ExperienceEngine falls back to the managed local model
370
384
  - if the local model fails, ExperienceEngine falls back to legacy hash-based retrieval
371
385
 
386
+ Prompt-time behavior:
387
+
388
+ - first-turn or prompt-only retrieval may not have any tool names or failure signatures yet
389
+ - ExperienceEngine treats those fields as opportunistic evidence, not required retrieval inputs
390
+ - when prompt-only evidence is sparse, lexical, semantic, and policy stages still run with the task summary and context summary alone
391
+
372
392
  Offline behavior (`embeddingProvider = "local"`):
373
393
 
374
394
  - the default local model is `Xenova/multilingual-e5-small`
@@ -414,6 +434,8 @@ ee install openclaw
414
434
  What happens:
415
435
  - ExperienceEngine installs as an OpenClaw plugin/runtime integration (not `src/adapters/`)
416
436
  - OpenClaw runtime events are used for intervention and persistence
437
+ - OpenClaw uses the shared background learning loop by default
438
+ - async hybrid posttask review stays disabled by default unless the runtime is explicitly overridden
417
439
  - management remains mostly through CLI fallback today
418
440
  - install ends with a short cold-start note so users know capture is active before the first formal hint appears
419
441
 
@@ -511,6 +533,9 @@ Useful commands:
511
533
  ```bash
512
534
  ee doctor codex
513
535
  ee upgrade codex
536
+ ee codex exec -C /path/to/repo -s read-only "Say ok and exit."
537
+ printf "Say ok and exit." | ee codex exec -C /path/to/repo -s read-only -
538
+ ee codex exec --ee-session-id ci-smoke-1 -C /path/to/repo -s read-only "Say ok and exit."
514
539
  ```
515
540
 
516
541
  First validation:
@@ -529,6 +554,12 @@ Host note:
529
554
  - ExperienceEngine installs a longer `startup_timeout_sec` for Codex automatically
530
555
  - this avoids MCP handshake failures on slower local startups
531
556
  - if Codex still cannot see ExperienceEngine in new sessions, re-run `ee install codex`
557
+ - `ee codex exec` is a deterministic wrapper for non-interactive runs
558
+ - the wrapper owns `lookup -> child codex exec -> record -> finalize` outside the child process
559
+ - for wrapped runs, ExperienceEngine removes the nested `experienceengine` MCP server from the child Codex config temporarily so lifecycle evidence is not double-written
560
+ - use prompt `-` when you want the wrapper to read task instructions from stdin; child Codex still receives a wrapped prompt argument and does not inherit stdin
561
+ - use `--ee-session-id <id>` when CI or debugging needs a stable ExperienceEngine session id
562
+ - `codex exec review` is not wrapped yet; keep using native Codex review or the MCP/CLI surfaces for review workflows
532
563
 
533
564
  Developer validation docs:
534
565
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "experienceengine",
3
3
  "name": "ExperienceEngine",
4
- "version": "0.1.3",
4
+ "version": "0.2.1",
5
5
  "description": "Context-aware experience intervention controller for coding and debugging tasks.",
6
6
  "configSchema": {
7
7
  "type": "object",
@@ -28,6 +28,15 @@
28
28
  "type": "string",
29
29
  "description": "Directory used to store raw runtime payload captures."
30
30
  },
31
+ "distillerProvider": {
32
+ "type": "string",
33
+ "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "bedrock", "vertex_gemini", "groq", "openai_compatible"],
34
+ "description": "Distillation provider reused by phase 2 provider-backed explain."
35
+ },
36
+ "distillerModel": {
37
+ "type": "string",
38
+ "description": "Distillation model identifier reused by phase 2 provider-backed explain."
39
+ },
31
40
  "maxHints": {
32
41
  "type": "integer",
33
42
  "minimum": 1,
@@ -39,6 +48,44 @@
39
48
  "minimum": 0,
40
49
  "maximum": 1,
41
50
  "description": "Trigger threshold for intervention gating."
51
+ },
52
+ "hybridEnabled": {
53
+ "type": "boolean",
54
+ "description": "Enable the hybrid routing layer."
55
+ },
56
+ "hybridSyncExplainEnabled": {
57
+ "type": "boolean",
58
+ "description": "Allow bounded sync escalation for explicit explanation requests."
59
+ },
60
+ "hybridAsyncPostmortemEnabled": {
61
+ "type": "boolean",
62
+ "description": "Allow bounded async postmortem review for eligible completed runs."
63
+ },
64
+ "hybridAsyncPostmortemLlmEnabled": {
65
+ "type": "boolean",
66
+ "description": "Enable provider-backed postmortem_review in phase 3."
67
+ },
68
+ "hybridExplainLlmEnabled": {
69
+ "type": "boolean",
70
+ "description": "Enable provider-backed explain_decision in phase 2."
71
+ },
72
+ "hybridExplainProviderMode": {
73
+ "type": "string",
74
+ "enum": ["shared_distiller"],
75
+ "description": "Provider resolution mode for phase 2 explain_decision."
76
+ },
77
+ "hybridExplainModelProfileVersion": {
78
+ "type": "string",
79
+ "description": "Version label for the provider-backed explain_decision model profile."
80
+ },
81
+ "hybridPostmortemProviderMode": {
82
+ "type": "string",
83
+ "enum": ["shared_distiller"],
84
+ "description": "Provider resolution mode for phase 3 postmortem_review."
85
+ },
86
+ "hybridPostmortemModelProfileVersion": {
87
+ "type": "string",
88
+ "description": "Version label for the provider-backed postmortem_review model profile."
42
89
  }
43
90
  }
44
91
  },
@@ -61,11 +108,44 @@
61
108
  "label": "Capture Directory",
62
109
  "placeholder": "./data/runtime-captures"
63
110
  },
111
+ "distillerProvider": {
112
+ "label": "Distiller Provider"
113
+ },
114
+ "distillerModel": {
115
+ "label": "Distiller Model"
116
+ },
64
117
  "maxHints": {
65
118
  "label": "Max Hints"
66
119
  },
67
120
  "triggerThreshold": {
68
121
  "label": "Trigger Threshold"
122
+ },
123
+ "hybridEnabled": {
124
+ "label": "Hybrid Enabled"
125
+ },
126
+ "hybridSyncExplainEnabled": {
127
+ "label": "Hybrid Sync Explain Enabled"
128
+ },
129
+ "hybridAsyncPostmortemEnabled": {
130
+ "label": "Hybrid Async Postmortem Enabled"
131
+ },
132
+ "hybridAsyncPostmortemLlmEnabled": {
133
+ "label": "Hybrid Async Postmortem LLM Enabled"
134
+ },
135
+ "hybridExplainLlmEnabled": {
136
+ "label": "Hybrid Explain LLM Enabled"
137
+ },
138
+ "hybridExplainProviderMode": {
139
+ "label": "Hybrid Explain Provider Mode"
140
+ },
141
+ "hybridExplainModelProfileVersion": {
142
+ "label": "Hybrid Explain Model Profile Version"
143
+ },
144
+ "hybridPostmortemProviderMode": {
145
+ "label": "Hybrid Postmortem Provider Mode"
146
+ },
147
+ "hybridPostmortemModelProfileVersion": {
148
+ "label": "Hybrid Postmortem Model Profile Version"
69
149
  }
70
150
  }
71
151
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alan512/experienceengine",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "description": "Experience governance for coding agents: learn from real task outcomes, inject reusable hints, and retire low-value guidance.",
6
6
  "license": "MIT",
@@ -11,7 +11,15 @@
11
11
  "openclaw": {
12
12
  "extensions": [
13
13
  "./dist/plugin/openclaw-plugin.js"
14
- ]
14
+ ],
15
+ "compat": {
16
+ "pluginApi": ">=2026.4.1",
17
+ "minGatewayVersion": "2026.4.1"
18
+ },
19
+ "build": {
20
+ "openclawVersion": "2026.4.1",
21
+ "pluginSdkVersion": "2026.4.1"
22
+ }
15
23
  },
16
24
  "engines": {
17
25
  "node": ">=20.0.0"
@@ -37,6 +45,7 @@
37
45
  "dev": "tsx watch src/cli/index.ts",
38
46
  "evaluate:openclaw-baseline": "tsx src/cli/index.ts evaluate openclaw-baseline",
39
47
  "evaluate:openclaw-scenarios": "tsx src/cli/index.ts evaluate openclaw-scenarios --pack high-confidence",
48
+ "evaluate:codex-lifecycle": "tsx src/cli/index.ts evaluate codex-lifecycle",
40
49
  "maintenance:merge-warning-variants": "tsx scripts/maintenance/merge-warning-variants.ts",
41
50
  "runtime:promote-payload": "tsx scripts/openclaw/promote-runtime-payload.ts",
42
51
  "runtime:replay-fixture": "tsx scripts/openclaw/replay-runtime-fixture.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "experienceengine",
3
3
  "description": "Context-aware experience intervention controller for Claude Code.",
4
- "version": "0.1.3",
4
+ "version": "0.2.1",
5
5
  "author": {
6
6
  "name": "ExperienceEngine"
7
7
  },
@@ -11,7 +11,7 @@ PACKAGE_ENTRY="${PACKAGE_DIR}/dist/cli/index.js"
11
11
  STAMP_PATH="${PLUGIN_DATA}/.experienceengine-plugin-version"
12
12
  EXPERIENCE_ENGINE_HOME_PATH="${EXPERIENCE_ENGINE_HOME:-${PLUGIN_DATA}/experienceengine-home}"
13
13
  STATE_PATH="${EXPERIENCE_ENGINE_HOME_PATH}/claude-marketplace-state.json"
14
- PACKAGE_VERSION="0.1.3"
14
+ PACKAGE_VERSION="0.2.1"
15
15
  PACKAGE_SPEC="${EXPERIENCE_ENGINE_PLUGIN_PACKAGE_SPEC:-@alan512/experienceengine@${PACKAGE_VERSION}}"
16
16
 
17
17
  mkdir -p "${PLUGIN_DATA}"