@engramprotocol/mcp-server 0.9.1 → 0.10.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.
- package/README.md +48 -37
- package/dist/cli.js +42 -1
- package/dist/cli.js.map +1 -1
- package/dist/setup/_helpers.d.ts +71 -0
- package/dist/setup/_helpers.d.ts.map +1 -0
- package/dist/setup/_helpers.js +275 -0
- package/dist/setup/_helpers.js.map +1 -0
- package/dist/setup/index.d.ts +2 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +83 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/install.d.ts +2 -0
- package/dist/setup/install.d.ts.map +1 -0
- package/dist/setup/install.js +241 -0
- package/dist/setup/install.js.map +1 -0
- package/dist/setup/uninstall.d.ts +2 -0
- package/dist/setup/uninstall.d.ts.map +1 -0
- package/dist/setup/uninstall.js +120 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup/update.d.ts +2 -0
- package/dist/setup/update.d.ts.map +1 -0
- package/dist/setup/update.js +130 -0
- package/dist/setup/update.js.map +1 -0
- package/dist/tools/boot.d.ts.map +1 -1
- package/dist/tools/boot.js +2 -4
- package/dist/tools/boot.js.map +1 -1
- package/dist/tools/entity.d.ts.map +1 -1
- package/dist/tools/entity.js +3 -2
- package/dist/tools/entity.js.map +1 -1
- package/dist/tools/get.d.ts.map +1 -1
- package/dist/tools/get.js +2 -5
- package/dist/tools/get.js.map +1 -1
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +5 -8
- package/dist/tools/list.js.map +1 -1
- package/dist/tools/note.d.ts.map +1 -1
- package/dist/tools/note.js +4 -1
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +3 -1
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/recall.d.ts.map +1 -1
- package/dist/tools/recall.js +3 -4
- package/dist/tools/recall.js.map +1 -1
- package/dist/tools/update.js +3 -3
- package/dist/tools/update.js.map +1 -1
- package/package.json +5 -3
- package/templates/hooks/session_start_boot.sh +63 -0
- package/templates/hooks/user_prompt_submit_reminder.sh +78 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/tools/entity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAe9E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/tools/entity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAe9E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAmBlF"}
|
package/dist/tools/entity.js
CHANGED
|
@@ -27,7 +27,8 @@ function registerEntityCreateTool(server, http) {
|
|
|
27
27
|
title: 'Create Entity',
|
|
28
28
|
description: 'Registers an entity (external person / organisation / asset / subject). ' +
|
|
29
29
|
'Required BEFORE the first engram with scope=entity.<id> — otherwise ' +
|
|
30
|
-
'the scope-existence check fails.'
|
|
30
|
+
'the scope-existence check fails. Trigger: "new client/contact", ' +
|
|
31
|
+
'"registering external organization X".',
|
|
31
32
|
inputSchema: {
|
|
32
33
|
id: zod_1.z.string().describe('Slug-style ID, e.g. "lasse" or "anthropic".'),
|
|
33
34
|
name: zod_1.z.string(),
|
|
@@ -39,7 +40,7 @@ function registerEntityCreateTool(server, http) {
|
|
|
39
40
|
function registerEntityUpdateTool(server, http) {
|
|
40
41
|
server.registerTool('eml_entity_update', {
|
|
41
42
|
title: 'Update Entity',
|
|
42
|
-
description: 'Patch entity fields
|
|
43
|
+
description: 'Patch entity fields. Trigger: name change, description refinement.',
|
|
43
44
|
inputSchema: {
|
|
44
45
|
id: zod_1.z.string(),
|
|
45
46
|
name: zod_1.z.string().optional(),
|
package/dist/tools/entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/tools/entity.ts"],"names":[],"mappings":";;AAYA,oDAeC;AAED,
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/tools/entity.ts"],"names":[],"mappings":";;AAYA,oDAeC;AAED,4DAmBC;AAED,4DAmBC;AArED,6BAAuB;AAGvB,yCAAqC;AAErC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAEnE;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,MAAiB,EAAE,IAAgB;IACtE,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,sEAAsE;YACtE,uEAAuE;YACvE,oCAAoC;QACtC,WAAW,EAAE;YACX,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SAChE;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CACnG,CAAA;AACH,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAiB,EAAE,IAAgB;IAC1E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,0EAA0E;YAC1E,sEAAsE;YACtE,kEAAkE;YAClE,wCAAwC;QAC1C,WAAW,EAAE;YACX,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACtE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;YAChB,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YAC1B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAC3D,CAAA;AACH,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAiB,EAAE,IAAgB;IAC1E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,oEAAoE;QACtE,WAAW,EAAE;YACX,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC3B,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACrC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAA;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IACzC,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
|
package/dist/tools/get.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAiBzE"}
|
package/dist/tools/get.js
CHANGED
|
@@ -6,19 +6,16 @@ const _helpers_1 = require("./_helpers");
|
|
|
6
6
|
function registerGetTool(server, http) {
|
|
7
7
|
server.registerTool('eml_get', {
|
|
8
8
|
title: 'Get Engram',
|
|
9
|
-
description: 'Fetch
|
|
10
|
-
'paths (/epistemic/:id, /context/:id) enforce mode-consistent lookups.',
|
|
9
|
+
description: 'Fetch one engram by ID, optionally with its relations.',
|
|
11
10
|
inputSchema: {
|
|
12
11
|
id: zod_1.z.string().describe('Engram ID (UUID).'),
|
|
13
|
-
mode: zod_1.z.enum(['epistemic', 'context']).optional().describe('When set: lookup via mode-specific endpoint (404 on mode mismatch).'),
|
|
14
12
|
with_relations: zod_1.z.boolean().optional().describe('Default true.'),
|
|
15
13
|
},
|
|
16
14
|
}, async (args) => (0, _helpers_1.callTool)(() => {
|
|
17
|
-
const path = args.mode ? `/${args.mode}/${args.id}` : `/engram/${args.id}`;
|
|
18
15
|
const params = {};
|
|
19
16
|
if (args.with_relations !== undefined)
|
|
20
17
|
params.with_relations = String(args.with_relations);
|
|
21
|
-
return http.get(
|
|
18
|
+
return http.get(`/engram/${args.id}`, params);
|
|
22
19
|
}));
|
|
23
20
|
}
|
|
24
21
|
//# sourceMappingURL=get.js.map
|
package/dist/tools/get.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":";;AAKA,0CAiBC;AAtBD,6BAAuB;AAGvB,yCAAqC;AAErC,SAAgB,eAAe,CAAC,MAAiB,EAAE,IAAgB;IACjE,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE;YACX,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC5C,cAAc,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SACjE;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE;QAC5B,MAAM,MAAM,GAAgD,EAAE,CAAA;QAC9D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1F,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
|
package/dist/tools/list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAQhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAQhD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA+B1E"}
|
package/dist/tools/list.js
CHANGED
|
@@ -10,10 +10,10 @@ const ENGRAM_TYPES = [
|
|
|
10
10
|
function registerListTool(server, http) {
|
|
11
11
|
server.registerTool('eml_list', {
|
|
12
12
|
title: 'List Engrams',
|
|
13
|
-
description: 'List engrams with filters (type/scope/
|
|
14
|
-
'
|
|
13
|
+
description: 'List engrams with structured filters (type/scope/status/etc.). ' +
|
|
14
|
+
'Trigger: "show me all active tasks for project X". For fuzzy topic ' +
|
|
15
|
+
'search use eml_recall.',
|
|
15
16
|
inputSchema: {
|
|
16
|
-
mode: zod_1.z.enum(['epistemic', 'context']).optional().describe('When set: filter on a single mode (uses /list/epistemic or /list/context).'),
|
|
17
17
|
type: zod_1.z.enum(ENGRAM_TYPES).optional(),
|
|
18
18
|
scope: zod_1.z.string().optional(),
|
|
19
19
|
subject: zod_1.z.string().optional(),
|
|
@@ -26,16 +26,13 @@ function registerListTool(server, http) {
|
|
|
26
26
|
has_relations: zod_1.z.boolean().optional(),
|
|
27
27
|
},
|
|
28
28
|
}, async (args) => (0, _helpers_1.callTool)(() => {
|
|
29
|
-
const { mode, ...query } = args;
|
|
30
|
-
const path = mode ? `/list/${mode}` : '/list';
|
|
31
|
-
// Strip undefined + booleanify has_relations as flag-or-omit
|
|
32
29
|
const params = {};
|
|
33
|
-
for (const [k, v] of Object.entries(
|
|
30
|
+
for (const [k, v] of Object.entries(args)) {
|
|
34
31
|
if (v === undefined)
|
|
35
32
|
continue;
|
|
36
33
|
params[k] = typeof v === 'boolean' ? String(v) : v;
|
|
37
34
|
}
|
|
38
|
-
return http.get(
|
|
35
|
+
return http.get('/list', params);
|
|
39
36
|
}));
|
|
40
37
|
}
|
|
41
38
|
//# sourceMappingURL=list.js.map
|
package/dist/tools/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":";;AAUA,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":";;AAUA,4CA+BC;AAzCD,6BAAuB;AAGvB,yCAAqC;AAErC,MAAM,YAAY,GAAG;IACnB,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS;IAClE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW;CACpE,CAAA;AAEV,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,IAAgB;IAClE,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,iEAAiE;YACjE,qEAAqE;YACrE,wBAAwB;QAC1B,WAAW,EAAE;YACX,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACrC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;YACpG,YAAY,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;YACjF,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC3E,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;YAClF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YACtD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;YACjD,aAAa,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACtC;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE;QAC5B,MAAM,MAAM,GAAgD,EAAE,CAAA;QAC9D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAQ;YAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAoB,CAAA;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
|
package/dist/tools/note.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"note.d.ts","sourceRoot":"","sources":["../../src/tools/note.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAOhD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"note.d.ts","sourceRoot":"","sources":["../../src/tools/note.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAOhD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAsC1E"}
|
package/dist/tools/note.js
CHANGED
|
@@ -25,7 +25,10 @@ function registerNoteTool(server, http) {
|
|
|
25
25
|
'(external pointer), log (narrative entry). For the more frequent types ' +
|
|
26
26
|
'use the typed tools: eml_decide, eml_set_status, eml_track_task.',
|
|
27
27
|
inputSchema: {
|
|
28
|
-
kind: zod_1.z.enum(NOTE_KINDS).describe('
|
|
28
|
+
kind: zod_1.z.enum(NOTE_KINDS).describe('rule: behavioral convention/constraint. profile: identity facet ' +
|
|
29
|
+
'(e.g. who an agent is). event: immutable timestamped occurrence ' +
|
|
30
|
+
'(deploy, incident). reference: pointer to external system (ticket ' +
|
|
31
|
+
'URL, dashboard, doc). log: narrative entry (session summary).'),
|
|
29
32
|
content: zod_1.z.string(),
|
|
30
33
|
scope: zod_1.z.string().describe('global | project.<id> | entity.<id> | agent.<id> | user.<id>'),
|
|
31
34
|
subject: zod_1.z.string().optional(),
|
package/dist/tools/note.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"note.js","sourceRoot":"","sources":["../../src/tools/note.ts"],"names":[],"mappings":";;AAoBA,
|
|
1
|
+
{"version":3,"file":"note.js","sourceRoot":"","sources":["../../src/tools/note.ts"],"names":[],"mappings":";;AAoBA,4CAsCC;AA1DD,6BAAuB;AAGvB,yCAAqC;AAErC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAU,CAAA;AAC5E,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAU,CAAA;AAC9E,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAU,CAAA;AAEnG;;;;;;;;;;GAUG;AACH,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,IAAgB;IAClE,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,sEAAsE;YACtE,sEAAsE;YACtE,yEAAyE;YACzE,kEAAkE;QACpE,WAAW,EAAE;YACX,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAC/B,kEAAkE;gBAClE,kEAAkE;gBAClE,oEAAoE;gBACpE,+DAA+D,CAChE;YACD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;YACnB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YAC1F,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;YACnC,YAAY,EAAE,OAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YAC7C,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC/D,6EAA6E;gBAC7E,0DAA0D,CAC3D;SACF;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACnD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAc9E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAwBnF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAc9E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAwBnF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA2BnF"}
|
package/dist/tools/projects.js
CHANGED
|
@@ -42,7 +42,9 @@ function registerProjectCreateTool(server, http) {
|
|
|
42
42
|
function registerProjectUpdateTool(server, http) {
|
|
43
43
|
server.registerTool('eml_project_update', {
|
|
44
44
|
title: 'Update Project',
|
|
45
|
-
description: 'Patch project fields
|
|
45
|
+
description: 'Patch project fields. Project must exist first — use eml_project_create ' +
|
|
46
|
+
'to register a new one. Trigger: status change, goal refinement, ' +
|
|
47
|
+
'ownership transfer.',
|
|
46
48
|
inputSchema: {
|
|
47
49
|
id: zod_1.z.string(),
|
|
48
50
|
name: zod_1.z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":";;AAUA,oDAcC;AAED,8DAwBC;AAED,
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAgB5E"}
|
package/dist/tools/recall.js
CHANGED
|
@@ -6,13 +6,12 @@ const _helpers_1 = require("./_helpers");
|
|
|
6
6
|
function registerRecallTool(server, http) {
|
|
7
7
|
server.registerTool('eml_recall', {
|
|
8
8
|
title: 'Recall Knowledge',
|
|
9
|
-
description: 'Topic
|
|
10
|
-
'
|
|
11
|
-
'
|
|
9
|
+
description: 'Topic search across active engrams, ordered by relevance + recency. ' +
|
|
10
|
+
'Trigger: "what do I know about X?". Better than eml_list for fuzzy ' +
|
|
11
|
+
'lookups; eml_list better for filtered enumeration.',
|
|
12
12
|
inputSchema: {
|
|
13
13
|
query: zod_1.z.string().describe('Search query (plaintext, FTS5-tokenised).'),
|
|
14
14
|
limit: zod_1.z.number().int().positive().max(50).optional().describe('Default 10.'),
|
|
15
|
-
mode: zod_1.z.enum(['epistemic', 'context']).optional().describe('Optional: search only epistemic-mode or context-mode engrams.'),
|
|
16
15
|
},
|
|
17
16
|
}, async (args) => (0, _helpers_1.callTool)(() => http.post('/recall', args)));
|
|
18
17
|
}
|
package/dist/tools/recall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":";;AAKA,gDAgBC;AArBD,6BAAuB;AAGvB,yCAAqC;AAErC,SAAgB,kBAAkB,CAAC,MAAiB,EAAE,IAAgB;IACpE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,sEAAsE;YACtE,qEAAqE;YACrE,oDAAoD;QACtD,WAAW,EAAE;YACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACvE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SAC9E;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAC3D,CAAA;AACH,CAAC"}
|
package/dist/tools/update.js
CHANGED
|
@@ -6,9 +6,9 @@ const _helpers_1 = require("./_helpers");
|
|
|
6
6
|
function registerUpdateTool(server, http) {
|
|
7
7
|
server.registerTool('eml_update', {
|
|
8
8
|
title: 'Update Engram',
|
|
9
|
-
description: 'Patch an engram (status, significance, properties, content). ' +
|
|
10
|
-
'
|
|
11
|
-
'
|
|
9
|
+
description: 'Patch an engram (status, significance, properties, content). Typical: ' +
|
|
10
|
+
'status="resolved" when a task is done, or status="superseded" to retire ' +
|
|
11
|
+
'a stale decision when a new one replaces it.',
|
|
12
12
|
inputSchema: {
|
|
13
13
|
id: zod_1.z.string(),
|
|
14
14
|
patch: zod_1.z.object({
|
package/dist/tools/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/tools/update.ts"],"names":[],"mappings":";;AAKA,gDAuBC;AA5BD,6BAAuB;AAGvB,yCAAqC;AAErC,SAAgB,kBAAkB,CAAC,MAAiB,EAAE,IAAgB;IACpE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/tools/update.ts"],"names":[],"mappings":";;AAKA,gDAuBC;AA5BD,6BAAuB;AAGvB,yCAAqC;AAErC,SAAgB,kBAAkB,CAAC,MAAiB,EAAE,IAAgB;IACpE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,wEAAwE;YACxE,0EAA0E;YAC1E,8CAA8C;QAChD,WAAW,EAAE;YACX,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;YACd,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;gBACd,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACpG,YAAY,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACjF,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC9B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC5B,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;aACzD,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAC/C;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAC3D,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@engramprotocol/mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP wrapper for the EML HTTP API — exposes the Engram Protocol as MCP tools for Claude Code and other MCP clients",
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "MCP wrapper for the EML HTTP API — exposes the Engram Protocol as MCP tools for Claude Code and other MCP clients. Includes setup-mode for one-shot install/update/uninstall.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/server.js",
|
|
7
7
|
"types": "dist/server.d.ts",
|
|
8
8
|
"bin": {
|
|
9
|
-
"eml-mcp-server": "./dist/cli.js"
|
|
9
|
+
"eml-mcp-server": "./dist/cli.js",
|
|
10
|
+
"mcp-server": "./dist/cli.js"
|
|
10
11
|
},
|
|
11
12
|
"files": [
|
|
12
13
|
"dist",
|
|
14
|
+
"templates",
|
|
13
15
|
"README.md",
|
|
14
16
|
"LICENSE"
|
|
15
17
|
],
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# managed-by: engramprotocol-setup
|
|
3
|
+
#
|
|
4
|
+
# SessionStart-Hook: loads the EML brain into Claude Code's session context.
|
|
5
|
+
# Output is invisible-in-chat but reaches the model's context (verified empirically
|
|
6
|
+
# via spike 2026-05-15 — see brain decision dc5a9ad5).
|
|
7
|
+
#
|
|
8
|
+
# Layout: 7 sections — safety+constants, log+stdin, config check, sanity, /boot
|
|
9
|
+
# call, update-banner check, emit markdown.
|
|
10
|
+
|
|
11
|
+
set -eu
|
|
12
|
+
|
|
13
|
+
# --- 1. Safety + Constants -------------------------------------------------
|
|
14
|
+
CONFIG="$HOME/.eml/config"
|
|
15
|
+
LOG_DIR="$HOME/.eml/logs"
|
|
16
|
+
|
|
17
|
+
# --- 2. Log setup + stdin capture ------------------------------------------
|
|
18
|
+
mkdir -p "$LOG_DIR"
|
|
19
|
+
LOG_FILE="$LOG_DIR/session-start-$(date -u +%Y-%m-%d).log"
|
|
20
|
+
TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
21
|
+
STDIN=$(cat || true)
|
|
22
|
+
echo "[$TS] fired (pid=$$) stdin=$STDIN" >> "$LOG_FILE"
|
|
23
|
+
|
|
24
|
+
# --- 3. Config check + source ----------------------------------------------
|
|
25
|
+
if [ ! -f "$CONFIG" ]; then
|
|
26
|
+
echo "⚠️ EML config missing at $CONFIG — run 'npx @engramprotocol/mcp-server setup'"
|
|
27
|
+
echo "[$TS] FAIL config missing" >> "$LOG_FILE"
|
|
28
|
+
exit 0
|
|
29
|
+
fi
|
|
30
|
+
. "$CONFIG"
|
|
31
|
+
|
|
32
|
+
# --- 4. Sanity: required vars ----------------------------------------------
|
|
33
|
+
if [ -z "${EML_URL:-}" ] || [ -z "${EML_API_TOKEN:-}" ]; then
|
|
34
|
+
echo "⚠️ EML config incomplete — EML_URL or EML_API_TOKEN missing in $CONFIG"
|
|
35
|
+
echo "[$TS] FAIL incomplete config" >> "$LOG_FILE"
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# --- 5. Call /boot ---------------------------------------------------------
|
|
40
|
+
RESPONSE=$(curl -fsS -m 8 \
|
|
41
|
+
-H "Authorization: Bearer $EML_API_TOKEN" \
|
|
42
|
+
-H "Content-Type: application/json" \
|
|
43
|
+
-X POST -d '{}' \
|
|
44
|
+
"$EML_URL/boot" 2>>"$LOG_FILE") || {
|
|
45
|
+
echo "⚠️ EML Boot failed — server unreachable or auth error. See $LOG_FILE"
|
|
46
|
+
echo "[$TS] FAIL curl non-zero" >> "$LOG_FILE"
|
|
47
|
+
exit 0
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# --- 6. Update-banner check ------------------------------------------------
|
|
51
|
+
SERVER_VER=$(echo "$RESPONSE" | jq -r '.version // empty')
|
|
52
|
+
if [ -n "${EML_CLIENT_VERSION:-}" ] && [ -n "$SERVER_VER" ] && [ "$EML_CLIENT_VERSION" != "$SERVER_VER" ]; then
|
|
53
|
+
cat <<EOF
|
|
54
|
+
## ⚠️ Update Available
|
|
55
|
+
- @engramprotocol/mcp-server: $EML_CLIENT_VERSION → $SERVER_VER available
|
|
56
|
+
- **Run** \`npx @engramprotocol/mcp-server setup update\`, **or ask me to update for you** — I'll run it on your behalf.
|
|
57
|
+
|
|
58
|
+
EOF
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# --- 7. Emit boot markdown + log success -----------------------------------
|
|
62
|
+
echo "$RESPONSE" | jq -r '.markdown'
|
|
63
|
+
echo "[$TS] OK ver=$SERVER_VER bytes=$(echo "$RESPONSE" | wc -c)" >> "$LOG_FILE"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# managed-by: engramprotocol-setup
|
|
3
|
+
#
|
|
4
|
+
# UserPromptSubmit-Hook: Mid-session reminder to keep the model anchored in EML
|
|
5
|
+
# patterns. Claude Code fires this hook on every user message. The hook decides
|
|
6
|
+
# whether to print the reminder (when a trigger condition matches) or stay silent.
|
|
7
|
+
#
|
|
8
|
+
# Triggers (any one suffices):
|
|
9
|
+
# - turn == 1 (initial reminder at session start; SessionStart-Hook already
|
|
10
|
+
# loaded SYSTEM_RULES + brain state, so one reinforcement is enough)
|
|
11
|
+
# - turn % 5 == 0 (every 5th turn — anti-drift cadence)
|
|
12
|
+
# - counter file mtime > 1h ago (session resumed after pause)
|
|
13
|
+
#
|
|
14
|
+
# State files (per v0.10.0-PROPOSAL B.4.1):
|
|
15
|
+
# /tmp/eml-turns/<session_id> turn counter
|
|
16
|
+
# ~/.eml/logs/user-prompt-submit-*.log debug log (self-rotating per day)
|
|
17
|
+
#
|
|
18
|
+
# Local-only, no HTTP. Reminder content lives inline as heredoc — single source of
|
|
19
|
+
# truth, evolves with the npm-package via `setup update`.
|
|
20
|
+
|
|
21
|
+
set -eu
|
|
22
|
+
|
|
23
|
+
LOG_DIR="$HOME/.eml/logs"
|
|
24
|
+
TURNS_DIR="/tmp/eml-turns"
|
|
25
|
+
|
|
26
|
+
mkdir -p "$LOG_DIR" "$TURNS_DIR"
|
|
27
|
+
LOG_FILE="$LOG_DIR/user-prompt-submit-$(date -u +%Y-%m-%d).log"
|
|
28
|
+
TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
29
|
+
|
|
30
|
+
# --- 1. Parse stdin for session_id -----------------------------------------
|
|
31
|
+
STDIN=$(cat || true)
|
|
32
|
+
SESSION_ID=$(echo "$STDIN" | jq -r '.session_id // empty' 2>/dev/null || true)
|
|
33
|
+
|
|
34
|
+
if [ -z "$SESSION_ID" ]; then
|
|
35
|
+
echo "[$TS] no session_id in stdin, silent" >> "$LOG_FILE"
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
COUNTER_FILE="$TURNS_DIR/$SESSION_ID"
|
|
40
|
+
|
|
41
|
+
# --- 2. Read counter + detect long pause -----------------------------------
|
|
42
|
+
RESUMED_AFTER_PAUSE=0
|
|
43
|
+
if [ -f "$COUNTER_FILE" ]; then
|
|
44
|
+
TURN=$(cat "$COUNTER_FILE" 2>/dev/null || echo 0)
|
|
45
|
+
# mtime — macOS uses `stat -f %m`, Linux uses `stat -c %Y`
|
|
46
|
+
MTIME=$(stat -f %m "$COUNTER_FILE" 2>/dev/null || stat -c %Y "$COUNTER_FILE" 2>/dev/null || echo 0)
|
|
47
|
+
NOW=$(date +%s)
|
|
48
|
+
ELAPSED=$((NOW - MTIME))
|
|
49
|
+
if [ "$ELAPSED" -gt 3600 ]; then RESUMED_AFTER_PAUSE=1; fi
|
|
50
|
+
else
|
|
51
|
+
TURN=0
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
TURN=$((TURN + 1))
|
|
55
|
+
echo "$TURN" > "$COUNTER_FILE"
|
|
56
|
+
|
|
57
|
+
# --- 3. Trigger decision ---------------------------------------------------
|
|
58
|
+
SHOULD_REMIND=0
|
|
59
|
+
if [ "$TURN" -eq 1 ]; then SHOULD_REMIND=1; fi
|
|
60
|
+
if [ "$((TURN % 5))" -eq 0 ]; then SHOULD_REMIND=1; fi
|
|
61
|
+
if [ "$RESUMED_AFTER_PAUSE" -eq 1 ]; then SHOULD_REMIND=1; fi
|
|
62
|
+
|
|
63
|
+
if [ "$SHOULD_REMIND" -eq 0 ]; then
|
|
64
|
+
echo "[$TS] silent turn=$TURN sid=$SESSION_ID" >> "$LOG_FILE"
|
|
65
|
+
exit 0
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# --- 4. Emit reminder (invisible-in-chat, in-model-context per Spike-2) ----
|
|
69
|
+
cat <<'EOF'
|
|
70
|
+
[EML Reminder]
|
|
71
|
+
- Store-worthy moments (decisions, status changes, tasks, events, feedback rules) → use the matching typed tool (eml_decide / eml_set_status / eml_track_task / eml_note).
|
|
72
|
+
- Question about customer / project / topic? eml_recall or eml_show first — don't guess from conversation memory.
|
|
73
|
+
- Before write: matching active engram exists? skip, or supersede via eml_update (don't duplicate).
|
|
74
|
+
- Routine updates: act + inform in 1-2 lines, no permission-asking.
|
|
75
|
+
- EML brain is the canonical knowledge base — check it before falling back to conversation memory.
|
|
76
|
+
EOF
|
|
77
|
+
|
|
78
|
+
echo "[$TS] OK turn=$TURN sid=$SESSION_ID reminded (pause=$RESUMED_AFTER_PAUSE)" >> "$LOG_FILE"
|