@alan512/experienceengine 0.3.6 → 0.4.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.
Files changed (74) hide show
  1. package/README.md +7 -2
  2. package/README.zh-CN.md +7 -2
  3. package/dist/cli/commands/doctor.js +56 -0
  4. package/dist/cli/commands/doctor.js.map +1 -1
  5. package/dist/cli/commands/inspect.js +78 -1
  6. package/dist/cli/commands/inspect.js.map +1 -1
  7. package/dist/cli/commands/maintenance.js +80 -2
  8. package/dist/cli/commands/maintenance.js.map +1 -1
  9. package/dist/compiler/command-normalizer.d.ts +27 -0
  10. package/dist/compiler/command-normalizer.js +263 -0
  11. package/dist/compiler/command-normalizer.js.map +1 -0
  12. package/dist/compiler/trajectory-compiler.d.ts +12 -0
  13. package/dist/compiler/trajectory-compiler.js +179 -0
  14. package/dist/compiler/trajectory-compiler.js.map +1 -0
  15. package/dist/compiler/trajectory-matcher.d.ts +18 -0
  16. package/dist/compiler/trajectory-matcher.js +419 -0
  17. package/dist/compiler/trajectory-matcher.js.map +1 -0
  18. package/dist/config/config-schema.d.ts +11 -0
  19. package/dist/config/config-schema.js +9 -0
  20. package/dist/config/config-schema.js.map +1 -1
  21. package/dist/config/default-config.js +1 -0
  22. package/dist/config/default-config.js.map +1 -1
  23. package/dist/controller/candidate-retriever.d.ts +3 -1
  24. package/dist/controller/candidate-retriever.js +247 -7
  25. package/dist/controller/candidate-retriever.js.map +1 -1
  26. package/dist/controller/intervention-controller.js +48 -21
  27. package/dist/controller/intervention-controller.js.map +1 -1
  28. package/dist/controller/trigger-evaluator.d.ts +2 -1
  29. package/dist/controller/trigger-evaluator.js +10 -4
  30. package/dist/controller/trigger-evaluator.js.map +1 -1
  31. package/dist/experience-management/node-lifecycle-governance.js +25 -6
  32. package/dist/experience-management/node-lifecycle-governance.js.map +1 -1
  33. package/dist/input/fingerprint-extractor.d.ts +53 -0
  34. package/dist/input/fingerprint-extractor.js +620 -0
  35. package/dist/input/fingerprint-extractor.js.map +1 -0
  36. package/dist/interaction/service.d.ts +11 -1
  37. package/dist/interaction/service.js +11 -1
  38. package/dist/interaction/service.js.map +1 -1
  39. package/dist/maintenance/vector-migrator.d.ts +37 -0
  40. package/dist/maintenance/vector-migrator.js +170 -0
  41. package/dist/maintenance/vector-migrator.js.map +1 -0
  42. package/dist/plugin/openclaw-plugin.d.ts +8 -0
  43. package/dist/runtime/prompt-service.js +10 -0
  44. package/dist/runtime/prompt-service.js.map +1 -1
  45. package/dist/runtime/service.d.ts +2 -0
  46. package/dist/runtime/service.js +127 -2
  47. package/dist/runtime/service.js.map +1 -1
  48. package/dist/store/sqlite/db.js +18 -1
  49. package/dist/store/sqlite/db.js.map +1 -1
  50. package/dist/store/sqlite/repositories/attribution-record-repo.js +12 -0
  51. package/dist/store/sqlite/repositories/attribution-record-repo.js.map +1 -1
  52. package/dist/store/sqlite/repositories/node-repo.d.ts +1 -0
  53. package/dist/store/sqlite/repositories/node-repo.js +47 -2
  54. package/dist/store/sqlite/repositories/node-repo.js.map +1 -1
  55. package/dist/store/sqlite/repositories/scope-fingerprint-repo.d.ts +8 -0
  56. package/dist/store/sqlite/repositories/scope-fingerprint-repo.js +23 -0
  57. package/dist/store/sqlite/repositories/scope-fingerprint-repo.js.map +1 -0
  58. package/dist/store/sqlite/schema.sql +26 -0
  59. package/dist/store/vector/embeddings.d.ts +4 -2
  60. package/dist/store/vector/embeddings.js +19 -6
  61. package/dist/store/vector/embeddings.js.map +1 -1
  62. package/dist/store/vector/local-provider.d.ts +1 -1
  63. package/dist/store/vector/local-provider.js +40 -8
  64. package/dist/store/vector/local-provider.js.map +1 -1
  65. package/dist/store/vector/offline-manifest.d.ts +7 -0
  66. package/dist/store/vector/offline-manifest.js +162 -0
  67. package/dist/store/vector/offline-manifest.js.map +1 -0
  68. package/dist/store/vector/provider-types.d.ts +1 -0
  69. package/dist/types/domain.d.ts +111 -1
  70. package/dist/types/plugin.d.ts +1 -0
  71. package/docs/releases/v0.4.0.md +39 -0
  72. package/docs/user-guide.md +41 -0
  73. package/openclaw.plugin.json +1 -1
  74. package/package.json +1 -1
@@ -11,6 +11,8 @@ import { bootstrapDatabase, openDatabase } from "../../store/sqlite/db.js";
11
11
  import { CandidateRepository } from "../../store/sqlite/repositories/candidate-repo.js";
12
12
  import { NodeRepository } from "../../store/sqlite/repositories/node-repo.js";
13
13
  import { resetManagedEmbeddingCache } from "../../store/vector/local-provider.js";
14
+ import { VectorMigrationPipeline } from "../../maintenance/vector-migrator.js";
15
+ import { embedQueryText } from "../../store/vector/embeddings.js";
14
16
  const parseGovernanceDrainArgs = (args) => {
15
17
  if (args[0] !== "drain") {
16
18
  return null;
@@ -36,6 +38,38 @@ const parseGovernanceDrainArgs = (args) => {
36
38
  }
37
39
  return parsed;
38
40
  };
41
+ const parseMigrateArgs = (args) => {
42
+ const parsed = {};
43
+ for (let index = 0; index < args.length; index += 1) {
44
+ const value = args[index];
45
+ const next = args[index + 1];
46
+ if (value === "--batch-size" && next) {
47
+ const batchSize = Number(next);
48
+ if (Number.isInteger(batchSize) && batchSize > 0) {
49
+ parsed.batchSize = batchSize;
50
+ index += 1;
51
+ continue;
52
+ }
53
+ }
54
+ if (value === "--throttle-gap" && next) {
55
+ const throttleGap = Number(next);
56
+ if (Number.isInteger(throttleGap) && throttleGap >= 0) {
57
+ parsed.throttleGapMs = throttleGap;
58
+ index += 1;
59
+ continue;
60
+ }
61
+ }
62
+ if (value === "--max-total" && next) {
63
+ const maxTotal = Number(next);
64
+ if (Number.isInteger(maxTotal) && maxTotal > 0) {
65
+ parsed.maxTotal = maxTotal;
66
+ index += 1;
67
+ continue;
68
+ }
69
+ }
70
+ }
71
+ return parsed;
72
+ };
39
73
  export const runMaintenanceCommand = async (action, argsOrDeps = [], maybeDeps = {}) => {
40
74
  const args = Array.isArray(argsOrDeps) ? argsOrDeps : [];
41
75
  const deps = Array.isArray(argsOrDeps) ? maybeDeps : argsOrDeps;
@@ -151,7 +185,7 @@ export const runMaintenanceCommand = async (action, argsOrDeps = [], maybeDeps =
151
185
  const [sourceScopeId, targetScopeId] = args;
152
186
  if (!sourceScopeId || !targetScopeId) {
153
187
  console.log("[ExperienceEngine] merge-scope requires <sourceScopeId> <targetScopeId>.");
154
- console.log("Usage: ee maintenance embeddings-reset|embedding-smoke|governance drain|redistill-rule-nodes|claude-validate-print|merge-scope <sourceScopeId> <targetScopeId>");
188
+ console.log("Usage: ee maintenance embeddings-reset|embedding-smoke|governance drain|redistill-rule-nodes|claude-validate-print|merge-scope <sourceScopeId> <targetScopeId>|migrate [--batch-size <n>] [--throttle-gap <ms>] [--max-total <n>]");
155
189
  return;
156
190
  }
157
191
  const report = (deps.mergeScopesWithConfig ?? mergeScopesWithConfig)(config, sourceScopeId, targetScopeId);
@@ -160,6 +194,50 @@ export const runMaintenanceCommand = async (action, argsOrDeps = [], maybeDeps =
160
194
  console.log(`[ExperienceEngine] Merged aggregates: taskStats=${report.merged.taskStats}`);
161
195
  return;
162
196
  }
163
- console.log("Usage: ee maintenance embeddings-reset|embedding-smoke|governance drain|redistill-rule-nodes|claude-validate-print|merge-scope <sourceScopeId> <targetScopeId>");
197
+ if (action === "migrate") {
198
+ const parsed = parseMigrateArgs(args);
199
+ console.log("[ExperienceEngine] Detecting active embedding space...");
200
+ let currentSpace;
201
+ try {
202
+ const probeResult = await embedQueryText("migration_probe", { config });
203
+ currentSpace = probeResult.space;
204
+ console.log(`[ExperienceEngine] Active space: ${currentSpace.provider}/${currentSpace.model} (${currentSpace.dimensions}d, manifest=${currentSpace.manifestId || "none"})`);
205
+ }
206
+ catch (error) {
207
+ const msg = error instanceof Error ? error.message : String(error);
208
+ console.error(`[ExperienceEngine] Failed to resolve active space: ${msg}`);
209
+ return;
210
+ }
211
+ const db = openDatabase(config);
212
+ bootstrapDatabase(db);
213
+ try {
214
+ const pipeline = new VectorMigrationPipeline();
215
+ console.log("[ExperienceEngine] Discovering nodes needing migration...");
216
+ const pendingCount = pipeline.discoverPendingNodes(db, currentSpace);
217
+ console.log(`[ExperienceEngine] Discovered ${pendingCount} pending nodes.`);
218
+ if (pendingCount === 0) {
219
+ console.log("[ExperienceEngine] All vectors are up-to-date in active space. No migration needed.");
220
+ return;
221
+ }
222
+ console.log("[ExperienceEngine] Running vector migration pipeline...");
223
+ const report = await pipeline.runMigration(db, currentSpace, {
224
+ config,
225
+ batchSize: parsed.batchSize,
226
+ throttleGapMs: parsed.throttleGapMs,
227
+ maxTotalToProcess: parsed.maxTotal
228
+ });
229
+ console.log("[ExperienceEngine] Vector migration finished!");
230
+ console.log(`[ExperienceEngine] Total discovered: ${report.totalDiscovered} | Processed: ${report.processed} | Succeeded: ${report.succeeded} | Failed: ${report.failed}`);
231
+ }
232
+ catch (error) {
233
+ const msg = error instanceof Error ? error.stack || error.message : String(error);
234
+ console.error(`[ExperienceEngine] Fatal migration error: ${msg}`);
235
+ }
236
+ finally {
237
+ db.close();
238
+ }
239
+ return;
240
+ }
241
+ console.log("Usage: ee maintenance embeddings-reset|embedding-smoke|governance drain|redistill-rule-nodes|claude-validate-print|merge-scope <sourceScopeId> <targetScopeId>|migrate [--batch-size <n>] [--throttle-gap <ms>] [--max-total <n>]");
164
242
  };
165
243
  //# sourceMappingURL=maintenance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../src/cli/commands/maintenance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../src/cli/commands/maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ToolEvent, NormalizedToolEvent } from "../types/domain.js";
2
+ export declare class CommandNormalizer {
3
+ /**
4
+ * Redacts volatile components like UUIDs, absolute/relative paths, ports, and branch names.
5
+ */
6
+ static redactVolatileTokens(input: string): string;
7
+ /**
8
+ * Helper to extract the basename from a file path.
9
+ */
10
+ static getBasename(pathStr: string): string;
11
+ /**
12
+ * Helper to extract the file extension.
13
+ */
14
+ static getExtension(pathStr: string): string;
15
+ /**
16
+ * Normalizes a raw shell command string to extract commandFamily, subcommand, and redacted inputs.
17
+ */
18
+ static normalizeCommand(rawCommand: string): {
19
+ commandFamily?: string;
20
+ subcommand?: string;
21
+ normalizedInput: string;
22
+ };
23
+ /**
24
+ * Transforms a raw ToolEvent into a NormalizedToolEvent.
25
+ */
26
+ static normalizeToolEvent(event: ToolEvent): NormalizedToolEvent;
27
+ }
@@ -0,0 +1,263 @@
1
+ export class CommandNormalizer {
2
+ /**
3
+ * Redacts volatile components like UUIDs, absolute/relative paths, ports, and branch names.
4
+ */
5
+ static redactVolatileTokens(input) {
6
+ if (!input)
7
+ return "";
8
+ let redacted = input;
9
+ // 1. Redact UUIDs
10
+ const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi;
11
+ redacted = redacted.replace(uuidRegex, "[UUID]");
12
+ // 2. Redact absolute Windows and Unix paths
13
+ // Windows paths like C:\Users\...\file.ext or d:/project/...
14
+ const winPathRegex = /[a-zA-Z]:\\[^\s"']+/g;
15
+ redacted = redacted.replace(winPathRegex, "[PATH]");
16
+ const winForwardPathRegex = /[a-zA-Z]:\/(?!\/)[^\s"']+/g;
17
+ redacted = redacted.replace(winForwardPathRegex, "[PATH]");
18
+ // Unix paths like /home/user/... or /tmp/...
19
+ // Avoid redacting commands starting with slash or generic patterns, so we only match longer path-like strings
20
+ const unixPathRegex = /(?:^|[\s"'\(=])(\/(?:home|Users|tmp|usr|opt|var|etc|bin|projects?|workspace|app)[a-zA-Z0-9_\-\.\/]+)/gi;
21
+ redacted = redacted.replace(unixPathRegex, (match, p1) => {
22
+ return match.replace(p1, "[PATH]");
23
+ });
24
+ // 3. Redact port numbers (e.g. :3000 or :8080)
25
+ const portRegex = /:([0-9]{4,5})\b/g;
26
+ redacted = redacted.replace(portRegex, ":[PORT]");
27
+ // 4. Redact branch names in git checkout command, or any feature/issue branch patterns
28
+ // E.g., feature/issue-102 or bugfix/abc
29
+ const branchRegex = /\b(feature|bugfix|release|hotfix|origin)\/[a-zA-Z0-9_\-\.]+/gi;
30
+ redacted = redacted.replace(branchRegex, "[BRANCH]");
31
+ // Also redact the specific git branch argument in checkout/switch commands
32
+ const gitCheckoutRegex = /(git\s+(?:checkout|switch)\s+(-b\s+)?)([a-zA-Z0-9_\-\.\/]+)/gi;
33
+ redacted = redacted.replace(gitCheckoutRegex, (match, p1, p2, p3) => {
34
+ // If p3 is not an option (starts with -), redact it
35
+ if (p3 && !p3.startsWith("-")) {
36
+ return `${p1}[BRANCH]`;
37
+ }
38
+ return match;
39
+ });
40
+ return redacted;
41
+ }
42
+ /**
43
+ * Helper to extract the basename from a file path.
44
+ */
45
+ static getBasename(pathStr) {
46
+ const normalized = pathStr.replace(/\\/g, "/");
47
+ const parts = normalized.split("/");
48
+ return parts[parts.length - 1] || "";
49
+ }
50
+ /**
51
+ * Helper to extract the file extension.
52
+ */
53
+ static getExtension(pathStr) {
54
+ const basename = this.getBasename(pathStr);
55
+ const dotIndex = basename.lastIndexOf(".");
56
+ if (dotIndex === -1 || dotIndex === 0)
57
+ return "";
58
+ return basename.slice(dotIndex + 1);
59
+ }
60
+ /**
61
+ * Normalizes a raw shell command string to extract commandFamily, subcommand, and redacted inputs.
62
+ */
63
+ static normalizeCommand(rawCommand) {
64
+ const redacted = this.redactVolatileTokens(rawCommand.trim());
65
+ if (!redacted) {
66
+ return { normalizedInput: "" };
67
+ }
68
+ // Split into tokens
69
+ const tokens = redacted.split(/\s+/);
70
+ let rawExecutable = tokens[0] || "";
71
+ // Normalize executable path (e.g. .\node_modules\.bin\tsc -> tsc)
72
+ let executable = this.getBasename(rawExecutable).replace(/\.(exe|cmd|bat|sh)$/i, "").toLowerCase();
73
+ // Group common executables/aliases
74
+ if (["pnpm", "npm", "yarn", "bun", "npx"].includes(executable)) {
75
+ // Package managers
76
+ let subcommand = "";
77
+ // Find first non-option token after package manager
78
+ let subIdx = 1;
79
+ while (subIdx < tokens.length && tokens[subIdx]?.startsWith("-")) {
80
+ subIdx++;
81
+ }
82
+ const primarySub = tokens[subIdx] || "";
83
+ if (primarySub && !primarySub.startsWith("-")) {
84
+ subcommand = primarySub.toLowerCase();
85
+ if (subcommand === "run" || subcommand === "exec") {
86
+ // If "run" or "exec", try to capture the next script name (e.g. pnpm run build -> run_build, pnpm exec tsc -> exec_tsc)
87
+ let scriptIdx = subIdx + 1;
88
+ while (scriptIdx < tokens.length && tokens[scriptIdx]?.startsWith("-")) {
89
+ scriptIdx++;
90
+ }
91
+ const scriptName = tokens[scriptIdx] || "";
92
+ if (scriptName && !scriptName.startsWith("-")) {
93
+ subcommand = `${subcommand}_${scriptName.toLowerCase()}`;
94
+ }
95
+ }
96
+ }
97
+ return {
98
+ commandFamily: executable,
99
+ subcommand,
100
+ normalizedInput: redacted
101
+ };
102
+ }
103
+ if (executable === "git") {
104
+ let subcommand = "";
105
+ let subIdx = 1;
106
+ while (subIdx < tokens.length && tokens[subIdx]?.startsWith("-")) {
107
+ subIdx++;
108
+ }
109
+ const primarySub = tokens[subIdx] || "";
110
+ if (primarySub && !primarySub.startsWith("-")) {
111
+ subcommand = primarySub.toLowerCase();
112
+ }
113
+ return {
114
+ commandFamily: "git",
115
+ subcommand,
116
+ normalizedInput: redacted
117
+ };
118
+ }
119
+ // Other known build/test tools
120
+ if (["tsc", "vitest", "jest", "mocha", "eslint", "prettier", "vite", "next"].includes(executable)) {
121
+ return {
122
+ commandFamily: executable,
123
+ subcommand: "run",
124
+ normalizedInput: redacted
125
+ };
126
+ }
127
+ // Fallback for general executables
128
+ return {
129
+ commandFamily: executable || undefined,
130
+ normalizedInput: redacted
131
+ };
132
+ }
133
+ /**
134
+ * Transforms a raw ToolEvent into a NormalizedToolEvent.
135
+ */
136
+ static normalizeToolEvent(event) {
137
+ const status = event.status;
138
+ const normalizedOutput = event.output_summary ? this.redactVolatileTokens(event.output_summary) : undefined;
139
+ // Handle command executions
140
+ const isCmdToolName = /^(run_command|bash|execute_command|terminal|sh)$/i.test(event.tool_name);
141
+ if (isCmdToolName && event.input_summary) {
142
+ const normalizedCmd = this.normalizeCommand(event.input_summary);
143
+ return {
144
+ toolName: event.tool_name,
145
+ commandFamily: normalizedCmd.commandFamily,
146
+ subcommand: normalizedCmd.subcommand,
147
+ normalizedInput: normalizedCmd.normalizedInput,
148
+ normalizedOutput,
149
+ status
150
+ };
151
+ }
152
+ // Handle host-native file tools
153
+ const isFileToolName = /^(write_to_file|replace_file_content|multi_replace_file_content|write_file|read_file|view_file|apply_patch)$/i.test(event.tool_name);
154
+ if (isFileToolName && event.input_summary) {
155
+ const trimmed = event.input_summary.trim();
156
+ const pathsSet = new Set();
157
+ const addPath = (p) => {
158
+ if (p && typeof p === "string") {
159
+ let cleaned = p.trim();
160
+ cleaned = cleaned.replace(/^['"]|['"]$/g, "").trim();
161
+ if (cleaned) {
162
+ pathsSet.add(cleaned.replace(/\\/g, "/"));
163
+ }
164
+ }
165
+ };
166
+ const extractPathsFromString = (text) => {
167
+ // Regex to match:
168
+ // *** Update File: path
169
+ // *** Add File: path
170
+ // *** Delete File: path
171
+ // Stop at any double quote, backslash, or comma which might demarcate JSON fields.
172
+ const patchPattern = /\*\*\*\s+(?:Update|Add|Delete)\s+File:\s*([^\r\n"\\,]+)/gi;
173
+ let match;
174
+ while ((match = patchPattern.exec(text)) !== null) {
175
+ if (match[1]) {
176
+ addPath(match[1]);
177
+ }
178
+ }
179
+ // Regex to match git/standard diff headers:
180
+ // --- a/path
181
+ // +++ b/path
182
+ // Support optional quotes that may prefix/suffix headers in JSON formatting
183
+ const diffPattern = /^(?:"?--- a\/|"?\+\+\+ b\/)([^\r\n\t "]+)/gm;
184
+ let diffMatch;
185
+ while ((diffMatch = diffPattern.exec(text)) !== null) {
186
+ if (diffMatch[1]) {
187
+ addPath(diffMatch[1]);
188
+ }
189
+ }
190
+ };
191
+ const walkJson = (val) => {
192
+ if (!val)
193
+ return;
194
+ if (typeof val === "string") {
195
+ extractPathsFromString(val);
196
+ }
197
+ else if (Array.isArray(val)) {
198
+ for (const item of val) {
199
+ walkJson(item);
200
+ }
201
+ }
202
+ else if (typeof val === "object") {
203
+ for (const key of Object.keys(val)) {
204
+ const lowKey = key.toLowerCase();
205
+ const isPathProp = lowKey === "path" ||
206
+ lowKey === "filepath" ||
207
+ lowKey === "targetfile" ||
208
+ lowKey === "filename" ||
209
+ lowKey === "file";
210
+ if (isPathProp && typeof val[key] === "string") {
211
+ addPath(val[key]);
212
+ }
213
+ walkJson(val[key]);
214
+ }
215
+ }
216
+ };
217
+ // Unescape escaped newline structures and replace double backslashes
218
+ let normalizedText = trimmed
219
+ .replace(/\\r\\n/g, "\n")
220
+ .replace(/\\n/g, "\n")
221
+ .replace(/\\r/g, "\n")
222
+ .replace(/\\\\/g, "/");
223
+ // 1. Try parsing normalizedText as JSON
224
+ if (normalizedText.startsWith("{") || normalizedText.startsWith("[")) {
225
+ try {
226
+ const parsed = JSON.parse(normalizedText);
227
+ walkJson(parsed);
228
+ }
229
+ catch {
230
+ // ignore parsing error, fallback to raw string extraction
231
+ }
232
+ }
233
+ // 2. Also run regex on normalized text directly
234
+ extractPathsFromString(normalizedText);
235
+ // 3. Fallback if no paths were resolved
236
+ if (pathsSet.size === 0) {
237
+ addPath(trimmed);
238
+ }
239
+ const paths = Array.from(pathsSet);
240
+ const primaryPath = paths[0] || "";
241
+ const basename = this.getBasename(primaryPath);
242
+ const extension = this.getExtension(primaryPath);
243
+ return {
244
+ toolName: event.tool_name,
245
+ artifactName: basename || undefined,
246
+ artifactExtension: extension || undefined,
247
+ artifactPath: primaryPath || undefined,
248
+ artifactPaths: paths,
249
+ normalizedInput: this.redactVolatileTokens(trimmed),
250
+ normalizedOutput,
251
+ status
252
+ };
253
+ }
254
+ // Default normalization
255
+ return {
256
+ toolName: event.tool_name,
257
+ normalizedInput: event.input_summary ? this.redactVolatileTokens(event.input_summary) : undefined,
258
+ normalizedOutput,
259
+ status
260
+ };
261
+ }
262
+ }
263
+ //# sourceMappingURL=command-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-normalizer.js","sourceRoot":"","sources":["../../src/compiler/command-normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { TrajectoryExpectation, CompiledTrajectoryExpectations, TrajectoryExpectationType } from "../types/domain.js";
2
+ export declare class TrajectoryCompiler {
3
+ static cleanStepProse(step: string): string;
4
+ /**
5
+ * Compiles a single step prose into a TrajectoryExpectation structure.
6
+ */
7
+ static compileStep(stepProse: string, type: TrajectoryExpectationType): TrajectoryExpectation;
8
+ /**
9
+ * Compiles recommended_steps, avoid_steps, success_signal, stop_condition, and escalation_condition of an ExperienceNode into CompiledTrajectoryExpectations.
10
+ */
11
+ static compileNodeExpectations(recommendedSteps?: string[], avoidSteps?: string[], successSignal?: string, stopCondition?: string, escalationCondition?: string): CompiledTrajectoryExpectations;
12
+ }
@@ -0,0 +1,179 @@
1
+ import { createId } from "../utils/ids.js";
2
+ import { CommandNormalizer } from "./command-normalizer.js";
3
+ export class TrajectoryCompiler {
4
+ static cleanStepProse(step) {
5
+ if (!step)
6
+ return "";
7
+ return step
8
+ .replace(/^[\s\-\*\u2022\d\.\)]+/, "")
9
+ .trim();
10
+ }
11
+ /**
12
+ * Compiles a single step prose into a TrajectoryExpectation structure.
13
+ */
14
+ static compileStep(stepProse, type) {
15
+ const originalStep = stepProse.trim();
16
+ const cleanStep = this.cleanStepProse(originalStep);
17
+ const id = createId("exp");
18
+ // 1. Check for command features
19
+ // Match package manager followed by run/exec
20
+ const pkgManagerRegex = /\b(pnpm|npm|yarn|bun|npx)\s+(run|exec)\s+([a-zA-Z0-9_\-\.\/]+)/i;
21
+ const pkgManagerMatch = cleanStep.match(pkgManagerRegex);
22
+ let commandMatch = pkgManagerMatch;
23
+ let isPkgManager = false;
24
+ if (pkgManagerMatch) {
25
+ isPkgManager = true;
26
+ }
27
+ else {
28
+ // Match common executables (pnpm, npm, git, tsc, vitest, docker, etc.)
29
+ const commandRegex = /\b(pnpm|npm|yarn|bun|npx|git|tsc|vitest|jest|mocha|eslint|prettier|vite|next|docker)\b\s*([a-zA-Z0-9_\-\.\/]+)?/i;
30
+ commandMatch = cleanStep.match(commandRegex);
31
+ }
32
+ if (commandMatch) {
33
+ const exe = commandMatch[1]?.toLowerCase();
34
+ const sub = commandMatch[2]?.toLowerCase() || "";
35
+ const rawExtracted = commandMatch[0];
36
+ const norm = CommandNormalizer.normalizeCommand(rawExtracted);
37
+ const commandFamily = norm.commandFamily || exe;
38
+ const subcommand = norm.subcommand || (sub && !sub.startsWith("-") ? sub : undefined);
39
+ const commandPattern = subcommand
40
+ ? `${commandFamily} ${subcommand}`
41
+ : commandFamily;
42
+ return {
43
+ id,
44
+ type,
45
+ actionType: "command",
46
+ toolNamePattern: "run_command|bash|execute_command|terminal|sh",
47
+ commandPattern,
48
+ originalStep,
49
+ ordered: type === "recommend" // Recommended commands are ordered; avoid commands check globally
50
+ };
51
+ }
52
+ // 2. Check for file / artifact manipulation features
53
+ // Match file extensions or edit verbs + files
54
+ const fileVerbRegex = /\b(edit|modify|write|create|touch|update|delete|remove|read|view|inspect)\s+([a-zA-Z0-9_\-\.\/\\\*]+\.[a-zA-Z0-9]+)/i;
55
+ const fileVerbMatch = cleanStep.match(fileVerbRegex);
56
+ const genericFileRegex = /\b([a-zA-Z0-9_\-\.\/\\\*]+\.([a-zA-Z0-9]+))\b/;
57
+ const genericFileMatch = cleanStep.match(genericFileRegex);
58
+ if (fileVerbMatch) {
59
+ const filePath = fileVerbMatch[2] || "";
60
+ const verb = (fileVerbMatch[1] || "").toLowerCase();
61
+ let artifactAction = "any";
62
+ if (["read", "view", "inspect"].includes(verb)) {
63
+ artifactAction = "read";
64
+ }
65
+ else if (["edit", "modify", "write", "create", "touch", "update", "delete", "remove"].includes(verb)) {
66
+ artifactAction = "write";
67
+ }
68
+ return {
69
+ id,
70
+ type,
71
+ actionType: "artifact",
72
+ artifactPattern: filePath,
73
+ artifactAction,
74
+ originalStep,
75
+ ordered: false // Artifact touches can happen in any order
76
+ };
77
+ }
78
+ else if (genericFileMatch) {
79
+ const filePath = genericFileMatch[1] || "";
80
+ const ext = genericFileMatch[2] || "";
81
+ // Exclude false positives like common words (e.g. e.g. or i.e.)
82
+ if (ext && !["eg", "ie", "md", "txt"].includes(ext.toLowerCase())) {
83
+ return {
84
+ id,
85
+ type,
86
+ actionType: "artifact",
87
+ artifactPattern: filePath,
88
+ artifactAction: "any",
89
+ originalStep,
90
+ ordered: false
91
+ };
92
+ }
93
+ }
94
+ // 3. Fallback to generic action type
95
+ return {
96
+ id,
97
+ type,
98
+ actionType: "generic",
99
+ originalStep,
100
+ ordered: false
101
+ };
102
+ }
103
+ /**
104
+ * Compiles recommended_steps, avoid_steps, success_signal, stop_condition, and escalation_condition of an ExperienceNode into CompiledTrajectoryExpectations.
105
+ */
106
+ static compileNodeExpectations(recommendedSteps, avoidSteps, successSignal, stopCondition, escalationCondition) {
107
+ const orderedExpectations = [];
108
+ const unorderedExpectations = [];
109
+ // Compile recommended steps
110
+ if (recommendedSteps && Array.isArray(recommendedSteps)) {
111
+ for (const step of recommendedSteps) {
112
+ if (!step.trim())
113
+ continue;
114
+ const exp = {
115
+ ...this.compileStep(step, "recommend"),
116
+ sourceField: "recommended_steps",
117
+ requiredForAdoption: true
118
+ };
119
+ if (exp.ordered) {
120
+ orderedExpectations.push(exp);
121
+ }
122
+ else {
123
+ unorderedExpectations.push(exp);
124
+ }
125
+ }
126
+ }
127
+ // Compile avoid steps
128
+ if (avoidSteps && Array.isArray(avoidSteps)) {
129
+ for (const step of avoidSteps) {
130
+ if (!step.trim())
131
+ continue;
132
+ const exp = this.compileStep(step, "avoid");
133
+ // Avoid step expectations are ALWAYS unordered because they trigger non-adoption violations globally
134
+ unorderedExpectations.push({
135
+ ...exp,
136
+ ordered: false,
137
+ sourceField: "avoid_steps",
138
+ requiredForAdoption: false
139
+ });
140
+ }
141
+ }
142
+ // Compile success_signal
143
+ if (successSignal && successSignal.trim()) {
144
+ const exp = this.compileStep(successSignal, "recommend");
145
+ unorderedExpectations.push({
146
+ ...exp,
147
+ id: exp.id.replace("exp_", "success_"),
148
+ ordered: false,
149
+ sourceField: "success_signal",
150
+ requiredForAdoption: false
151
+ });
152
+ }
153
+ // Compile stop_condition
154
+ if (stopCondition && stopCondition.trim()) {
155
+ const exp = this.compileStep(stopCondition, "avoid");
156
+ unorderedExpectations.push({
157
+ ...exp,
158
+ ordered: false,
159
+ sourceField: "stop_condition",
160
+ requiredForAdoption: false
161
+ });
162
+ }
163
+ // Compile escalation_condition
164
+ if (escalationCondition && escalationCondition.trim()) {
165
+ const exp = this.compileStep(escalationCondition, "avoid");
166
+ unorderedExpectations.push({
167
+ ...exp,
168
+ ordered: false,
169
+ sourceField: "escalation_condition",
170
+ requiredForAdoption: false
171
+ });
172
+ }
173
+ return {
174
+ orderedExpectations,
175
+ unorderedExpectations
176
+ };
177
+ }
178
+ }
179
+ //# sourceMappingURL=trajectory-compiler.js.map