@alan512/experienceengine 0.3.2 → 0.3.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.
- package/.mcp.json +11 -11
- package/dist/adapters/codex/mcp-server.js +1 -1
- package/dist/analyzer/llm-learning-gate.d.ts +7 -0
- package/dist/analyzer/llm-learning-gate.js +76 -11
- package/dist/analyzer/llm-learning-gate.js.map +1 -1
- package/dist/cli/commands/inspect.js +9 -0
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/controller/injection-renderer.d.ts +7 -2
- package/dist/controller/injection-renderer.js +50 -19
- package/dist/controller/injection-renderer.js.map +1 -1
- package/dist/controller/injection-scorecard.js +3 -0
- package/dist/controller/injection-scorecard.js.map +1 -1
- package/dist/controller/intervention-controller.js +8 -2
- package/dist/controller/intervention-controller.js.map +1 -1
- package/dist/controller/skip-reason.d.ts +12 -0
- package/dist/controller/skip-reason.js +82 -0
- package/dist/controller/skip-reason.js.map +1 -0
- package/dist/controller/skip-scorecard.d.ts +2 -0
- package/dist/controller/skip-scorecard.js +39 -0
- package/dist/controller/skip-scorecard.js.map +1 -0
- package/dist/install/claude-code-doctor.js +6 -4
- package/dist/install/claude-code-doctor.js.map +1 -1
- package/dist/install/claude-code-installer.js +2 -5
- package/dist/install/claude-code-installer.js.map +1 -1
- package/dist/install/claude-runtime-target.js +7 -1
- package/dist/install/claude-runtime-target.js.map +1 -1
- package/dist/install/openclaw-installer.js +5 -9
- package/dist/install/openclaw-installer.js.map +1 -1
- package/dist/interaction/service.js +3 -0
- package/dist/interaction/service.js.map +1 -1
- package/dist/plugin/openclaw-plugin.d.ts +1 -1
- package/dist/runtime/learning-candidate-factory.d.ts +3 -0
- package/dist/runtime/learning-candidate-factory.js +126 -0
- package/dist/runtime/learning-candidate-factory.js.map +1 -0
- package/dist/runtime/learning-pipeline-service.d.ts +24 -0
- package/dist/runtime/learning-pipeline-service.js +78 -0
- package/dist/runtime/learning-pipeline-service.js.map +1 -0
- package/dist/runtime/prompt-service.d.ts +3 -3
- package/dist/runtime/prompt-service.js +39 -34
- package/dist/runtime/prompt-service.js.map +1 -1
- package/dist/runtime/service.d.ts +5 -5
- package/dist/runtime/service.js +70 -306
- package/dist/runtime/service.js.map +1 -1
- package/dist/runtime/task-finalization-service.d.ts +36 -0
- package/dist/runtime/task-finalization-service.js +97 -0
- package/dist/runtime/task-finalization-service.js.map +1 -0
- package/dist/types/domain.d.ts +7 -0
- package/docs/releases/v0.3.3.md +18 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +13 -12
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { InputRecordRepository } from "../store/sqlite/repositories/input-record-repo.js";
|
|
2
|
+
import type { OutcomeRecordRepository } from "../store/sqlite/repositories/outcome-record-repo.js";
|
|
3
|
+
import type { ScopeRepository } from "../store/sqlite/repositories/scope-repo.js";
|
|
4
|
+
import type { StatsRepository } from "../store/sqlite/repositories/stats-repo.js";
|
|
5
|
+
import type { TaskRunRepository } from "../store/sqlite/repositories/task-run-repo.js";
|
|
6
|
+
import type { ExperienceInput, ExperienceInputRecord, TaskRun, ToolEvent } from "../types/domain.js";
|
|
7
|
+
import type { HostPromptContext } from "../types/plugin.js";
|
|
8
|
+
export type TaskFinalizationSessionState = {
|
|
9
|
+
context?: HostPromptContext;
|
|
10
|
+
toolEvents: ToolEvent[];
|
|
11
|
+
injectedNodeIds: string[];
|
|
12
|
+
};
|
|
13
|
+
export type TaskFinalizationServiceOptions = {
|
|
14
|
+
scopeRepo: ScopeRepository;
|
|
15
|
+
inputRepo: InputRecordRepository;
|
|
16
|
+
taskRunRepo: TaskRunRepository;
|
|
17
|
+
outcomeRepo: OutcomeRecordRepository;
|
|
18
|
+
statsRepo: StatsRepository;
|
|
19
|
+
};
|
|
20
|
+
export declare const mergeContext: (existing: HostPromptContext | undefined, incoming: HostPromptContext) => HostPromptContext;
|
|
21
|
+
export declare class TaskFinalizationService {
|
|
22
|
+
private readonly options;
|
|
23
|
+
constructor(options: TaskFinalizationServiceOptions);
|
|
24
|
+
buildFinalizedInput(context: HostPromptContext, session: TaskFinalizationSessionState): ExperienceInput;
|
|
25
|
+
persistFinalizedRun(input: {
|
|
26
|
+
experienceInput: ExperienceInput;
|
|
27
|
+
sessionId: string;
|
|
28
|
+
session: TaskFinalizationSessionState;
|
|
29
|
+
episodeId?: string;
|
|
30
|
+
context: HostPromptContext;
|
|
31
|
+
cwd?: string;
|
|
32
|
+
}): {
|
|
33
|
+
record: ExperienceInputRecord;
|
|
34
|
+
taskRun: TaskRun;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { buildCandidateSignals } from "../analyzer/candidate-signals.js";
|
|
2
|
+
import { createEmptyStats, updateStats } from "../feedback/stats-updater.js";
|
|
3
|
+
import { buildExperienceInput } from "../input/input-adapter.js";
|
|
4
|
+
import { resolveScope } from "../input/scope-resolver.js";
|
|
5
|
+
import { nowIso } from "../utils/clock.js";
|
|
6
|
+
import { createId, stableId } from "../utils/ids.js";
|
|
7
|
+
export const mergeContext = (existing, incoming) => ({
|
|
8
|
+
host: incoming.host ?? existing?.host,
|
|
9
|
+
sessionId: incoming.sessionId ?? existing?.sessionId,
|
|
10
|
+
cwd: incoming.cwd ?? existing?.cwd,
|
|
11
|
+
userMessage: incoming.userMessage || existing?.userMessage || "",
|
|
12
|
+
taskSummary: incoming.taskSummary ?? existing?.taskSummary,
|
|
13
|
+
contextSummary: incoming.contextSummary ?? existing?.contextSummary,
|
|
14
|
+
injectedNodeIds: incoming.injectedNodeIds ?? existing?.injectedNodeIds
|
|
15
|
+
});
|
|
16
|
+
const toEvidence = (input) => input.tool_events.map((event) => [event.tool_name, event.status, event.error_signature ?? event.output_summary]
|
|
17
|
+
.filter(Boolean)
|
|
18
|
+
.join(": "));
|
|
19
|
+
const toInputRecord = (input, sessionId, episodeId) => ({
|
|
20
|
+
record_id: createId("input"),
|
|
21
|
+
episode_id: episodeId,
|
|
22
|
+
scope_id: input.scope_id,
|
|
23
|
+
session_id: sessionId,
|
|
24
|
+
task_type: input.task_type,
|
|
25
|
+
task_summary: input.task_summary,
|
|
26
|
+
outcome_signal: input.outcome_signal,
|
|
27
|
+
context_summary: input.context_summary,
|
|
28
|
+
evidence: toEvidence(input),
|
|
29
|
+
injected_node_ids: input.injected_node_ids,
|
|
30
|
+
created_at: nowIso()
|
|
31
|
+
});
|
|
32
|
+
const toTaskRun = (input, sessionId, context, episodeId) => {
|
|
33
|
+
const timestamp = nowIso();
|
|
34
|
+
const signals = buildCandidateSignals(input);
|
|
35
|
+
return {
|
|
36
|
+
id: stableId("taskrun", `${sessionId}:${input.task_summary}:${timestamp}`),
|
|
37
|
+
episode_id: episodeId,
|
|
38
|
+
host: context.host ?? "openclaw",
|
|
39
|
+
scope_id: input.scope_id,
|
|
40
|
+
session_id: sessionId,
|
|
41
|
+
task_type: input.task_type,
|
|
42
|
+
task_summary: input.task_summary,
|
|
43
|
+
prompt_excerpt: context.userMessage,
|
|
44
|
+
context_summary: input.context_summary,
|
|
45
|
+
started_at: timestamp,
|
|
46
|
+
ended_at: timestamp,
|
|
47
|
+
final_status: input.outcome_signal === "success" ? "success" : input.outcome_signal === "failure" ? "failure" : "unknown",
|
|
48
|
+
failure_signature: signals.failure_signature,
|
|
49
|
+
learning_status: undefined,
|
|
50
|
+
learning_reason: undefined,
|
|
51
|
+
created_at: timestamp,
|
|
52
|
+
updated_at: timestamp
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const toOutcomeRecord = (taskRun, input, episodeId) => ({
|
|
56
|
+
id: createId("outcome"),
|
|
57
|
+
episode_id: episodeId,
|
|
58
|
+
task_run_id: taskRun.id,
|
|
59
|
+
outcome_signal: input.outcome_signal,
|
|
60
|
+
failure_signature: taskRun.failure_signature,
|
|
61
|
+
summary: input.task_summary,
|
|
62
|
+
created_at: nowIso()
|
|
63
|
+
});
|
|
64
|
+
export class TaskFinalizationService {
|
|
65
|
+
options;
|
|
66
|
+
constructor(options) {
|
|
67
|
+
this.options = options;
|
|
68
|
+
}
|
|
69
|
+
buildFinalizedInput(context, session) {
|
|
70
|
+
const mergedContext = mergeContext(session.context, context);
|
|
71
|
+
const injectedNodeIds = session.injectedNodeIds.length > 0 ? session.injectedNodeIds : mergedContext.injectedNodeIds ?? [];
|
|
72
|
+
return buildExperienceInput({
|
|
73
|
+
...mergedContext,
|
|
74
|
+
injectedNodeIds
|
|
75
|
+
}, session.toolEvents);
|
|
76
|
+
}
|
|
77
|
+
persistFinalizedRun(input) {
|
|
78
|
+
const resolvedScope = resolveScope(input.cwd ?? input.session.context?.cwd);
|
|
79
|
+
const existingScope = this.options.scopeRepo.getById(resolvedScope.scope_id);
|
|
80
|
+
this.options.scopeRepo.upsert({
|
|
81
|
+
...resolvedScope,
|
|
82
|
+
is_disabled: existingScope?.is_disabled ?? resolvedScope.is_disabled
|
|
83
|
+
});
|
|
84
|
+
const record = toInputRecord(input.experienceInput, input.sessionId, input.episodeId);
|
|
85
|
+
this.options.inputRepo.upsert(record);
|
|
86
|
+
if (input.experienceInput.task_type !== "unknown") {
|
|
87
|
+
const currentStats = this.options.statsRepo.get(input.experienceInput.scope_id, input.experienceInput.task_type) ??
|
|
88
|
+
createEmptyStats(input.experienceInput.scope_id, input.experienceInput.task_type);
|
|
89
|
+
this.options.statsRepo.upsert(updateStats(currentStats, input.experienceInput.outcome_signal, input.experienceInput.injected_node_ids.length > 0));
|
|
90
|
+
}
|
|
91
|
+
const taskRun = toTaskRun(input.experienceInput, input.sessionId, input.context, input.episodeId);
|
|
92
|
+
this.options.taskRunRepo.upsert(taskRun);
|
|
93
|
+
this.options.outcomeRepo.upsert(toOutcomeRecord(taskRun, input.experienceInput, input.episodeId));
|
|
94
|
+
return { record, taskRun };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=task-finalization-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-finalization-service.js","sourceRoot":"","sources":["../../src/runtime/task-finalization-service.ts"],"names":[],"mappings":"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"}
|
package/dist/types/domain.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export type MatchScorecard = {
|
|
|
28
28
|
};
|
|
29
29
|
export type InterventionConfidence = "low" | "medium" | "high";
|
|
30
30
|
export type InterventionBudgetClass = "none" | "single_hint" | "multi_hint";
|
|
31
|
+
export type SkipReasonCode = "scope_disabled" | "repo_policy_blocked_or_circuit_open" | "holdout_suppressed" | "shadow_suppressed" | "no_candidate" | "candidate_not_mature" | "delivery_state_shadow_only" | "recent_harm_or_quarantined" | "semantic_match_policy_rejected" | "task_family_mismatch" | "low_confidence_or_score_margin" | "record_only_diagnostic_candidate";
|
|
31
32
|
export type SyncSecondOpinionDecision = "allow" | "allow_conservative" | "skip";
|
|
32
33
|
export type SyncSecondOpinionTrigger = "conservative_delivery_state" | "harm_history" | "close_score_margin" | "expectation_correction";
|
|
33
34
|
export type EvaluationMode = "live" | "shadow" | "holdout";
|
|
@@ -358,6 +359,9 @@ export type InterventionRejectedCandidate = {
|
|
|
358
359
|
};
|
|
359
360
|
export type InterventionDecisionDiagnostics = {
|
|
360
361
|
interventionStrength?: InterventionStrength;
|
|
362
|
+
renderingPolicyReason?: string;
|
|
363
|
+
skipReasonCode?: SkipReasonCode;
|
|
364
|
+
skipReasonExplanation?: string;
|
|
361
365
|
recordOnlyDiagnosticCandidateIds?: string[];
|
|
362
366
|
retrievalPolicyDiagnostics?: RetrievalPolicyDiagnostics;
|
|
363
367
|
topCandidates: InjectionScorecardCandidate[];
|
|
@@ -387,6 +391,9 @@ export type InjectionScorecard = {
|
|
|
387
391
|
taskSummary: string;
|
|
388
392
|
mode: InjectionMode;
|
|
389
393
|
interventionStrength?: InterventionStrength;
|
|
394
|
+
renderingPolicyReason?: string;
|
|
395
|
+
skipReasonCode?: SkipReasonCode;
|
|
396
|
+
skipReasonExplanation?: string;
|
|
390
397
|
riskLevel: InjectionRiskLevel;
|
|
391
398
|
recommendation: string;
|
|
392
399
|
reasons: string[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# ExperienceEngine v0.3.3
|
|
2
|
+
|
|
3
|
+
Release date: 2026-05-14
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
v0.3.3 is an OpenClaw packaging metadata patch that keeps the packaged plugin manifest version aligned with the npm package version.
|
|
8
|
+
|
|
9
|
+
## Included
|
|
10
|
+
|
|
11
|
+
- Updated the OpenClaw plugin manifest version for the v0.3.3 package.
|
|
12
|
+
- Made the OpenClaw install tarball generator write `openclaw.plugin.json` with the same version as `package.json`.
|
|
13
|
+
- Added package verification coverage so future OpenClaw install artifacts cannot drift between package and plugin manifest versions.
|
|
14
|
+
|
|
15
|
+
## Upgrade Notes
|
|
16
|
+
|
|
17
|
+
- Existing OpenClaw users should update to `@alan512/experienceengine@0.3.3`, then run `ee upgrade openclaw` or `ee repair openclaw` in the OpenClaw host environment.
|
|
18
|
+
- If OpenClaw is installed inside WSL, run the command from that WSL distribution so the plugin is installed into the correct host config and extension directories.
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alan512/experienceengine",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
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",
|
|
@@ -41,16 +41,6 @@
|
|
|
41
41
|
"scripts/claude-plugin",
|
|
42
42
|
".env.example"
|
|
43
43
|
],
|
|
44
|
-
"dependencies": {
|
|
45
|
-
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
46
|
-
"zod": "^3.25.76"
|
|
47
|
-
},
|
|
48
|
-
"devDependencies": {
|
|
49
|
-
"@types/node": "^22.13.14",
|
|
50
|
-
"tsx": "^4.19.3",
|
|
51
|
-
"typescript": "^5.8.2",
|
|
52
|
-
"vitest": "^3.0.9"
|
|
53
|
-
},
|
|
54
44
|
"scripts": {
|
|
55
45
|
"build": "node scripts/build/clean-dist.mjs && tsc -p tsconfig.build.json && node scripts/build/copy-sqlite-schema.mjs",
|
|
56
46
|
"dev": "tsx watch src/cli/index.ts",
|
|
@@ -60,8 +50,19 @@
|
|
|
60
50
|
"maintenance:merge-warning-variants": "tsx scripts/maintenance/merge-warning-variants.ts",
|
|
61
51
|
"runtime:promote-payload": "tsx scripts/openclaw/promote-runtime-payload.ts",
|
|
62
52
|
"runtime:replay-fixture": "tsx scripts/openclaw/replay-runtime-fixture.ts",
|
|
53
|
+
"prepack": "pnpm build",
|
|
63
54
|
"typecheck": "tsc --noEmit",
|
|
64
55
|
"test": "vitest run",
|
|
65
56
|
"check": "pnpm typecheck && pnpm test && pnpm build"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
60
|
+
"zod": "^3.25.76"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/node": "^22.13.14",
|
|
64
|
+
"tsx": "^4.19.3",
|
|
65
|
+
"typescript": "^5.8.2",
|
|
66
|
+
"vitest": "^3.0.9"
|
|
66
67
|
}
|
|
67
|
-
}
|
|
68
|
+
}
|