engrm 0.4.37 → 0.4.39
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/README.md +53 -2
- package/dist/cli.js +446 -62
- package/dist/hooks/elicitation-result.js +57 -1
- package/dist/hooks/post-tool-use.js +57 -1
- package/dist/hooks/pre-compact.js +57 -1
- package/dist/hooks/sentinel.js +20 -0
- package/dist/hooks/session-start.js +82 -12
- package/dist/hooks/stop.js +305 -186
- package/dist/hooks/user-prompt-submit.js +57 -1
- package/dist/server.js +347 -77
- package/opencode/README.md +70 -0
- package/opencode/install-or-update-opencode-plugin.sh +46 -0
- package/opencode/opencode.example.json +14 -0
- package/opencode/plugin/engrm-opencode.js +61 -0
- package/package.json +10 -4
|
@@ -220,6 +220,16 @@ function createDefaultConfig() {
|
|
|
220
220
|
},
|
|
221
221
|
transcript_analysis: {
|
|
222
222
|
enabled: false
|
|
223
|
+
},
|
|
224
|
+
http: {
|
|
225
|
+
enabled: false,
|
|
226
|
+
port: 3767,
|
|
227
|
+
bearer_tokens: []
|
|
228
|
+
},
|
|
229
|
+
fleet: {
|
|
230
|
+
project_name: "shared-experience",
|
|
231
|
+
namespace: "",
|
|
232
|
+
api_key: ""
|
|
223
233
|
}
|
|
224
234
|
};
|
|
225
235
|
}
|
|
@@ -281,6 +291,16 @@ function loadConfig() {
|
|
|
281
291
|
},
|
|
282
292
|
transcript_analysis: {
|
|
283
293
|
enabled: asBool(config["transcript_analysis"]?.["enabled"], defaults.transcript_analysis.enabled)
|
|
294
|
+
},
|
|
295
|
+
http: {
|
|
296
|
+
enabled: asBool(config["http"]?.["enabled"], defaults.http.enabled),
|
|
297
|
+
port: asNumber(config["http"]?.["port"], defaults.http.port),
|
|
298
|
+
bearer_tokens: asStringArray(config["http"]?.["bearer_tokens"], defaults.http.bearer_tokens)
|
|
299
|
+
},
|
|
300
|
+
fleet: {
|
|
301
|
+
project_name: asString(config["fleet"]?.["project_name"], defaults.fleet.project_name),
|
|
302
|
+
namespace: asString(config["fleet"]?.["namespace"], defaults.fleet.namespace),
|
|
303
|
+
api_key: asString(config["fleet"]?.["api_key"], defaults.fleet.api_key)
|
|
284
304
|
}
|
|
285
305
|
};
|
|
286
306
|
}
|
|
@@ -2299,6 +2319,12 @@ function containsSecrets(text, customPatterns = []) {
|
|
|
2299
2319
|
}
|
|
2300
2320
|
return false;
|
|
2301
2321
|
}
|
|
2322
|
+
var FLEET_HOSTNAME_PATTERN = /\b(?=.{1,253}\b)(?!-)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}\b/gi;
|
|
2323
|
+
var FLEET_IP_PATTERN = /\b(?:\d{1,3}\.){3}\d{1,3}\b/g;
|
|
2324
|
+
var FLEET_MAC_PATTERN = /\b(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}\b/gi;
|
|
2325
|
+
function scrubFleetIdentifiers(text) {
|
|
2326
|
+
return text.replace(FLEET_MAC_PATTERN, "[REDACTED_MAC]").replace(FLEET_IP_PATTERN, "[REDACTED_IP]").replace(FLEET_HOSTNAME_PATTERN, "[REDACTED_HOSTNAME]");
|
|
2327
|
+
}
|
|
2302
2328
|
|
|
2303
2329
|
// src/capture/quality.ts
|
|
2304
2330
|
var QUALITY_THRESHOLD = 0.1;
|
|
@@ -2669,6 +2695,35 @@ function narrativesConflict(narrative1, narrative2) {
|
|
|
2669
2695
|
return null;
|
|
2670
2696
|
}
|
|
2671
2697
|
|
|
2698
|
+
// src/sync/targets.ts
|
|
2699
|
+
function isFleetProjectName(projectName, config) {
|
|
2700
|
+
const fleetProjectName = config.fleet?.project_name ?? "shared-experience";
|
|
2701
|
+
if (!projectName || !fleetProjectName)
|
|
2702
|
+
return false;
|
|
2703
|
+
return projectName.trim().toLowerCase() === fleetProjectName.trim().toLowerCase();
|
|
2704
|
+
}
|
|
2705
|
+
function hasFleetTarget(config) {
|
|
2706
|
+
return Boolean(config.fleet?.namespace?.trim() && config.fleet?.api_key?.trim() && (config.fleet?.project_name ?? "shared-experience").trim());
|
|
2707
|
+
}
|
|
2708
|
+
function resolveSyncTarget(config, projectName) {
|
|
2709
|
+
if (isFleetProjectName(projectName, config) && hasFleetTarget(config)) {
|
|
2710
|
+
return {
|
|
2711
|
+
key: `fleet:${config.fleet.namespace}`,
|
|
2712
|
+
apiKey: config.fleet.api_key,
|
|
2713
|
+
namespace: config.fleet.namespace,
|
|
2714
|
+
siteId: config.site_id,
|
|
2715
|
+
isFleet: true
|
|
2716
|
+
};
|
|
2717
|
+
}
|
|
2718
|
+
return {
|
|
2719
|
+
key: `default:${config.namespace}`,
|
|
2720
|
+
apiKey: config.candengo_api_key,
|
|
2721
|
+
namespace: config.namespace,
|
|
2722
|
+
siteId: config.site_id,
|
|
2723
|
+
isFleet: false
|
|
2724
|
+
};
|
|
2725
|
+
}
|
|
2726
|
+
|
|
2672
2727
|
// src/tools/save.ts
|
|
2673
2728
|
var VALID_TYPES = [
|
|
2674
2729
|
"bugfix",
|
|
@@ -2717,7 +2772,8 @@ async function saveObservation(db, config, input) {
|
|
|
2717
2772
|
const factsJson = structuredFacts.length > 0 ? config.scrubbing.enabled ? scrubSecrets(JSON.stringify(structuredFacts), customPatterns) : JSON.stringify(structuredFacts) : null;
|
|
2718
2773
|
const filesReadJson = filesRead ? JSON.stringify(filesRead) : null;
|
|
2719
2774
|
const filesModifiedJson = filesModified ? JSON.stringify(filesModified) : null;
|
|
2720
|
-
|
|
2775
|
+
const fleetProject = isFleetProjectName(project.name, config);
|
|
2776
|
+
let sensitivity = input.sensitivity ?? (fleetProject ? "shared" : config.scrubbing.default_sensitivity);
|
|
2721
2777
|
if (config.scrubbing.enabled && containsSecrets([input.title, input.narrative, JSON.stringify(input.facts)].filter(Boolean).join(" "), customPatterns)) {
|
|
2722
2778
|
if (sensitivity === "shared") {
|
|
2723
2779
|
sensitivity = "personal";
|