@vedtechsolutions/engram-mcp 1.0.5 → 1.0.6
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/dist/{chunk-FQ4MRL3Q.js → chunk-V5TTXT4V.js} +25 -1
- package/dist/hook.js +82 -4
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -491,6 +491,29 @@ var SCHEMA_SURFACING = {
|
|
|
491
491
|
/** Maximum instances to sample when generating a description */
|
|
492
492
|
INSTANCE_SAMPLE_COUNT: 5
|
|
493
493
|
};
|
|
494
|
+
var PROCEDURAL_WORKFLOW = {
|
|
495
|
+
/** Minimum successful commands in sequence to form a workflow */
|
|
496
|
+
MIN_COMMANDS: 3,
|
|
497
|
+
/** Maximum commands to track in recent_commands buffer */
|
|
498
|
+
MAX_TRACKED_COMMANDS: 20,
|
|
499
|
+
/** Maximum procedural workflows to encode per session */
|
|
500
|
+
MAX_PER_SESSION: 5,
|
|
501
|
+
/** Minimum time gap (ms) between workflow encodings to avoid bursts */
|
|
502
|
+
MIN_ENCODE_GAP_MS: 12e4,
|
|
503
|
+
/** Workflow pattern keywords — commands matching these form workflow candidates */
|
|
504
|
+
WORKFLOW_PATTERNS: {
|
|
505
|
+
build: ["build", "compile", "tsup", "tsc", "webpack", "vite", "esbuild", "rollup", "make"],
|
|
506
|
+
test: ["test", "vitest", "jest", "pytest", "mocha", "cargo test"],
|
|
507
|
+
deploy: ["deploy", "publish", "release", "push", "npm publish", "yarn publish", "pnpm publish"],
|
|
508
|
+
install: ["install", "npm install", "pnpm install", "yarn", "pip install", "cargo add"],
|
|
509
|
+
lint: ["lint", "eslint", "prettier", "black", "ruff", "clippy"],
|
|
510
|
+
db: ["migrate", "migration", "seed", "prisma", "alembic", "knex"],
|
|
511
|
+
docker: ["docker", "compose", "podman"],
|
|
512
|
+
git: ["git commit", "git push", "git tag", "git merge", "git rebase"]
|
|
513
|
+
},
|
|
514
|
+
/** Minimum confidence for encoding */
|
|
515
|
+
MIN_CONFIDENCE: 0.65
|
|
516
|
+
};
|
|
494
517
|
var CODE_CONTEXT_RECALL = {
|
|
495
518
|
/** Maximum code identifiers to extract from content */
|
|
496
519
|
MAX_CODE_KEYWORDS: 15,
|
|
@@ -12379,6 +12402,7 @@ export {
|
|
|
12379
12402
|
PROACTIVE_RECALL,
|
|
12380
12403
|
MEMORY_SURFACE,
|
|
12381
12404
|
RETRIEVAL_FEEDBACK,
|
|
12405
|
+
PROCEDURAL_WORKFLOW,
|
|
12382
12406
|
CODE_CONTEXT_RECALL,
|
|
12383
12407
|
DEDUP,
|
|
12384
12408
|
SCHEMA_LIFECYCLE,
|
|
@@ -12630,4 +12654,4 @@ export {
|
|
|
12630
12654
|
composeProjectUnderstanding,
|
|
12631
12655
|
formatMentalModelInjection
|
|
12632
12656
|
};
|
|
12633
|
-
//# sourceMappingURL=chunk-
|
|
12657
|
+
//# sourceMappingURL=chunk-V5TTXT4V.js.map
|
package/dist/hook.js
CHANGED
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
PREWRITE_BLOCKING,
|
|
29
29
|
PRE_COMPACTION,
|
|
30
30
|
PROACTIVE_RECALL,
|
|
31
|
+
PROCEDURAL_WORKFLOW,
|
|
31
32
|
REASONING_CHAIN,
|
|
32
33
|
REASONING_TRACE,
|
|
33
34
|
RETRIEVAL_FEEDBACK,
|
|
@@ -173,7 +174,7 @@ import {
|
|
|
173
174
|
updateReasoningChain,
|
|
174
175
|
updateSelfModelFromSession,
|
|
175
176
|
updateTask
|
|
176
|
-
} from "./chunk-
|
|
177
|
+
} from "./chunk-V5TTXT4V.js";
|
|
177
178
|
|
|
178
179
|
// src/hook.ts
|
|
179
180
|
import { readFileSync, writeFileSync, existsSync, renameSync, statSync, readdirSync, unlinkSync, appendFileSync, openSync, readSync, closeSync } from "fs";
|
|
@@ -3124,7 +3125,9 @@ function loadWatcherState() {
|
|
|
3124
3125
|
recall_misses: raw.recall_misses ?? 0,
|
|
3125
3126
|
last_status_turn: raw.last_status_turn ?? 0,
|
|
3126
3127
|
offload_message_sent: raw.offload_message_sent ?? false,
|
|
3127
|
-
summary_injection_mode: raw.summary_injection_mode ?? false
|
|
3128
|
+
summary_injection_mode: raw.summary_injection_mode ?? false,
|
|
3129
|
+
recent_commands: raw.recent_commands ?? [],
|
|
3130
|
+
procedural_encoded_count: raw.procedural_encoded_count ?? 0
|
|
3128
3131
|
};
|
|
3129
3132
|
}
|
|
3130
3133
|
} catch {
|
|
@@ -3186,7 +3189,9 @@ function loadWatcherState() {
|
|
|
3186
3189
|
recall_misses: 0,
|
|
3187
3190
|
last_status_turn: 0,
|
|
3188
3191
|
offload_message_sent: false,
|
|
3189
|
-
summary_injection_mode: false
|
|
3192
|
+
summary_injection_mode: false,
|
|
3193
|
+
recent_commands: [],
|
|
3194
|
+
procedural_encoded_count: 0
|
|
3190
3195
|
};
|
|
3191
3196
|
}
|
|
3192
3197
|
function saveWatcherState(state) {
|
|
@@ -4026,6 +4031,77 @@ Output: ${truncate(toolOutput, 500)}`,
|
|
|
4026
4031
|
} catch {
|
|
4027
4032
|
}
|
|
4028
4033
|
}
|
|
4034
|
+
try {
|
|
4035
|
+
const cmdLower = cmd.toLowerCase();
|
|
4036
|
+
const exitCode = stdinJson?.tool_response_metadata;
|
|
4037
|
+
const cmdSuccess = !isError;
|
|
4038
|
+
state.recent_commands.push({ cmd: truncate(cmd, 200), success: cmdSuccess, time: (/* @__PURE__ */ new Date()).toISOString() });
|
|
4039
|
+
if (state.recent_commands.length > PROCEDURAL_WORKFLOW.MAX_TRACKED_COMMANDS) {
|
|
4040
|
+
state.recent_commands = state.recent_commands.slice(-PROCEDURAL_WORKFLOW.MAX_TRACKED_COMMANDS);
|
|
4041
|
+
}
|
|
4042
|
+
stateChanged = true;
|
|
4043
|
+
if (cmdSuccess && state.procedural_encoded_count < PROCEDURAL_WORKFLOW.MAX_PER_SESSION) {
|
|
4044
|
+
const successCmds = state.recent_commands.filter((c) => c.success);
|
|
4045
|
+
if (successCmds.length >= PROCEDURAL_WORKFLOW.MIN_COMMANDS) {
|
|
4046
|
+
for (const [workflowName, keywords] of Object.entries(PROCEDURAL_WORKFLOW.WORKFLOW_PATTERNS)) {
|
|
4047
|
+
const matching = successCmds.filter((c) => {
|
|
4048
|
+
const cl = c.cmd.toLowerCase();
|
|
4049
|
+
return keywords.some((kw) => cl.includes(kw));
|
|
4050
|
+
});
|
|
4051
|
+
if (matching.length >= PROCEDURAL_WORKFLOW.MIN_COMMANDS) {
|
|
4052
|
+
const steps = matching.slice(-6).map((c, i) => `${i + 1}. ${truncate(c.cmd, 120)}`).join("\n");
|
|
4053
|
+
const content = `${workflowName} workflow (${matching.length} steps):
|
|
4054
|
+
${steps}`;
|
|
4055
|
+
const domains = state.active_domain ? [state.active_domain] : [];
|
|
4056
|
+
const existing = findDuplicate(content, "procedural", domains);
|
|
4057
|
+
if (!existing) {
|
|
4058
|
+
createMemory({
|
|
4059
|
+
type: "procedural",
|
|
4060
|
+
content,
|
|
4061
|
+
summary: `${workflowName} workflow: ${matching.slice(-3).map((c) => truncate(c.cmd, 40)).join(" \u2192 ")}`,
|
|
4062
|
+
encoding_strength: 0.7,
|
|
4063
|
+
reinforcement: 1.2,
|
|
4064
|
+
confidence: PROCEDURAL_WORKFLOW.MIN_CONFIDENCE,
|
|
4065
|
+
storage_tier: "short_term",
|
|
4066
|
+
pinned: false,
|
|
4067
|
+
tags: ["workflow", `workflow-${workflowName}`, "auto-encoded"],
|
|
4068
|
+
domains,
|
|
4069
|
+
version: state.active_version,
|
|
4070
|
+
encoding_context: {
|
|
4071
|
+
project: state.active_project,
|
|
4072
|
+
project_path: state.active_project_path,
|
|
4073
|
+
framework: state.active_domain,
|
|
4074
|
+
version: state.active_version,
|
|
4075
|
+
files: state.session_files.slice(-5),
|
|
4076
|
+
task_type: workflowName === "build" ? "building" : null,
|
|
4077
|
+
error_context: null,
|
|
4078
|
+
session_id: sessionId,
|
|
4079
|
+
significance_score: 0.7
|
|
4080
|
+
},
|
|
4081
|
+
type_data: {
|
|
4082
|
+
kind: "procedural",
|
|
4083
|
+
steps: matching.map((c) => c.cmd),
|
|
4084
|
+
preconditions: [],
|
|
4085
|
+
postconditions: [],
|
|
4086
|
+
practice_count: 1,
|
|
4087
|
+
automaticity: 0.3,
|
|
4088
|
+
variants: [],
|
|
4089
|
+
skill_metadata: null
|
|
4090
|
+
}
|
|
4091
|
+
});
|
|
4092
|
+
state.procedural_encoded_count++;
|
|
4093
|
+
stateChanged = true;
|
|
4094
|
+
log.info("Auto-encoded procedural workflow", { type: workflowName, steps: matching.length });
|
|
4095
|
+
const matchedTimes = new Set(matching.map((c) => c.time));
|
|
4096
|
+
state.recent_commands = state.recent_commands.filter((c) => !matchedTimes.has(c.time));
|
|
4097
|
+
}
|
|
4098
|
+
break;
|
|
4099
|
+
}
|
|
4100
|
+
}
|
|
4101
|
+
}
|
|
4102
|
+
}
|
|
4103
|
+
} catch {
|
|
4104
|
+
}
|
|
4029
4105
|
if (stateChanged) {
|
|
4030
4106
|
saveWatcherState(state);
|
|
4031
4107
|
}
|
|
@@ -4862,7 +4938,9 @@ function handleSessionStart(stdinJson, argFallback) {
|
|
|
4862
4938
|
recall_misses: isPostCompact ? prevState?.recall_misses ?? 0 : 0,
|
|
4863
4939
|
last_status_turn: 0,
|
|
4864
4940
|
offload_message_sent: false,
|
|
4865
|
-
summary_injection_mode: false
|
|
4941
|
+
summary_injection_mode: false,
|
|
4942
|
+
recent_commands: isPostCompact ? prevState?.recent_commands ?? [] : [],
|
|
4943
|
+
procedural_encoded_count: isPostCompact ? prevState?.procedural_encoded_count ?? 0 : 0
|
|
4866
4944
|
});
|
|
4867
4945
|
const source = metadata.source;
|
|
4868
4946
|
if (!source || source === "startup") {
|
package/dist/index.js
CHANGED
|
@@ -154,7 +154,7 @@ import {
|
|
|
154
154
|
vaccinate,
|
|
155
155
|
vacuumDatabase,
|
|
156
156
|
validateMultiPerspective
|
|
157
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-V5TTXT4V.js";
|
|
158
158
|
|
|
159
159
|
// src/index.ts
|
|
160
160
|
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|