@hasna/mementos 0.10.13 → 0.10.15
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/cli/index.js +19 -3
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/machines.d.ts +16 -0
- package/dist/db/machines.d.ts.map +1 -0
- package/dist/db/memories.d.ts.map +1 -1
- package/dist/index.js +19 -3
- package/dist/mcp/index.js +171 -4
- package/dist/server/index.js +19 -3
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -2584,6 +2584,20 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_resource_locks_exclusive
|
|
|
2584
2584
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_agent ON resource_locks(agent_id);
|
|
2585
2585
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_expires ON resource_locks(expires_at);
|
|
2586
2586
|
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
2587
|
+
`,
|
|
2588
|
+
`
|
|
2589
|
+
CREATE TABLE IF NOT EXISTS machines (
|
|
2590
|
+
id TEXT PRIMARY KEY,
|
|
2591
|
+
name TEXT NOT NULL UNIQUE,
|
|
2592
|
+
hostname TEXT NOT NULL,
|
|
2593
|
+
platform TEXT NOT NULL DEFAULT 'unknown',
|
|
2594
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2595
|
+
last_seen_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2596
|
+
);
|
|
2597
|
+
CREATE INDEX IF NOT EXISTS idx_machines_hostname ON machines(hostname);
|
|
2598
|
+
ALTER TABLE memories ADD COLUMN machine_id TEXT REFERENCES machines(id) ON DELETE SET NULL;
|
|
2599
|
+
CREATE INDEX IF NOT EXISTS idx_memories_machine ON memories(machine_id);
|
|
2600
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (15);
|
|
2587
2601
|
`,
|
|
2588
2602
|
`
|
|
2589
2603
|
CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
@@ -2594,7 +2608,7 @@ CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
|
2594
2608
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
2595
2609
|
);
|
|
2596
2610
|
CREATE INDEX IF NOT EXISTS idx_memory_embeddings_model ON memory_embeddings(model);
|
|
2597
|
-
INSERT OR IGNORE INTO _migrations (id) VALUES (
|
|
2611
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (16);
|
|
2598
2612
|
`
|
|
2599
2613
|
];
|
|
2600
2614
|
});
|
|
@@ -2935,6 +2949,7 @@ function parseMemoryRow(row) {
|
|
|
2935
2949
|
agent_id: row["agent_id"] || null,
|
|
2936
2950
|
project_id: row["project_id"] || null,
|
|
2937
2951
|
session_id: row["session_id"] || null,
|
|
2952
|
+
machine_id: row["machine_id"] || null,
|
|
2938
2953
|
metadata: JSON.parse(row["metadata"] || "{}"),
|
|
2939
2954
|
access_count: row["access_count"],
|
|
2940
2955
|
version: row["version"],
|
|
@@ -3011,8 +3026,8 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
3011
3026
|
return merged;
|
|
3012
3027
|
}
|
|
3013
3028
|
}
|
|
3014
|
-
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
3015
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
3029
|
+
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, machine_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
3030
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
3016
3031
|
id,
|
|
3017
3032
|
input.key,
|
|
3018
3033
|
input.value,
|
|
@@ -3025,6 +3040,7 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
3025
3040
|
input.agent_id || null,
|
|
3026
3041
|
input.project_id || null,
|
|
3027
3042
|
input.session_id || null,
|
|
3043
|
+
input.machine_id || null,
|
|
3028
3044
|
metadataJson,
|
|
3029
3045
|
expiresAt,
|
|
3030
3046
|
timestamp,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmCtC,wBAAgB,SAAS,IAAI,MAAM,CAkBlC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmCtC,wBAAgB,SAAS,IAAI,MAAM,CAkBlC;AA0bD,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAerD;AA+BD,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAef"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Machine {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
hostname: string;
|
|
5
|
+
platform: string;
|
|
6
|
+
created_at: string;
|
|
7
|
+
last_seen_at: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function registerMachine(name?: string, db?: import("bun:sqlite").Database): Machine;
|
|
10
|
+
export declare function listMachines(db?: import("bun:sqlite").Database): Machine[];
|
|
11
|
+
export declare function getMachine(id: string, db?: import("bun:sqlite").Database): Machine | null;
|
|
12
|
+
export declare function renameMachine(id: string, newName: string, db?: import("bun:sqlite").Database): Machine;
|
|
13
|
+
export declare function touchMachine(id: string, db?: import("bun:sqlite").Database): void;
|
|
14
|
+
/** Get or auto-register the current machine and return its ID. */
|
|
15
|
+
export declare function getCurrentMachineId(db?: import("bun:sqlite").Database): string;
|
|
16
|
+
//# sourceMappingURL=machines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machines.d.ts","sourceRoot":"","sources":["../../src/db/machines.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,gCAAgB,GAAG,OAAO,CAyB1E;AAED,wBAAgB,YAAY,CAAC,EAAE,gCAAgB,GAAG,OAAO,EAAE,CAE1D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,gCAAgB,GAAG,OAAO,GAAG,IAAI,CAEzE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,gCAAgB,GAAG,OAAO,CAOtF;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,gCAAgB,GAAG,IAAI,CAEjE;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,EAAE,gCAAgB,GAAG,MAAM,CAQ9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../../src/db/memories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AA+B3B,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../../src/db/memories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AA+B3B,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyBnE;AAMD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,EACxB,UAAU,GAAE,UAAoB,EAChC,EAAE,CAAC,EAAE,QAAQ,GACZ,MAAM,CAsKR;AAMD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,EAAE,CAAC,EAAE,QAAQ,GACZ,MAAM,GAAG,IAAI,CA4Bf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,EAAE,CAAC,EAAE,QAAQ,GACZ,MAAM,EAAE,CAuBV;AAMD,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAE,CA4G3E;AAMD,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,iBAAiB,EACxB,EAAE,CAAC,EAAE,QAAQ,GACZ,MAAM,CAiHR;AAMD,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAW/D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAmBvE;AAMD,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAM3D;AAUD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAsBpE;AAMD,wBAAgB,oBAAoB,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiB1D;AAMD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,aAAa,EAAE,CAwBlF;AAMD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,EACN,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAuCjC"}
|
package/dist/index.js
CHANGED
|
@@ -490,6 +490,20 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_resource_locks_exclusive
|
|
|
490
490
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_agent ON resource_locks(agent_id);
|
|
491
491
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_expires ON resource_locks(expires_at);
|
|
492
492
|
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
493
|
+
`,
|
|
494
|
+
`
|
|
495
|
+
CREATE TABLE IF NOT EXISTS machines (
|
|
496
|
+
id TEXT PRIMARY KEY,
|
|
497
|
+
name TEXT NOT NULL UNIQUE,
|
|
498
|
+
hostname TEXT NOT NULL,
|
|
499
|
+
platform TEXT NOT NULL DEFAULT 'unknown',
|
|
500
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
501
|
+
last_seen_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
502
|
+
);
|
|
503
|
+
CREATE INDEX IF NOT EXISTS idx_machines_hostname ON machines(hostname);
|
|
504
|
+
ALTER TABLE memories ADD COLUMN machine_id TEXT REFERENCES machines(id) ON DELETE SET NULL;
|
|
505
|
+
CREATE INDEX IF NOT EXISTS idx_memories_machine ON memories(machine_id);
|
|
506
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (15);
|
|
493
507
|
`,
|
|
494
508
|
`
|
|
495
509
|
CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
@@ -500,7 +514,7 @@ CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
|
500
514
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
501
515
|
);
|
|
502
516
|
CREATE INDEX IF NOT EXISTS idx_memory_embeddings_model ON memory_embeddings(model);
|
|
503
|
-
INSERT OR IGNORE INTO _migrations (id) VALUES (
|
|
517
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (16);
|
|
504
518
|
`
|
|
505
519
|
];
|
|
506
520
|
var _db = null;
|
|
@@ -779,6 +793,7 @@ function parseMemoryRow(row) {
|
|
|
779
793
|
agent_id: row["agent_id"] || null,
|
|
780
794
|
project_id: row["project_id"] || null,
|
|
781
795
|
session_id: row["session_id"] || null,
|
|
796
|
+
machine_id: row["machine_id"] || null,
|
|
782
797
|
metadata: JSON.parse(row["metadata"] || "{}"),
|
|
783
798
|
access_count: row["access_count"],
|
|
784
799
|
version: row["version"],
|
|
@@ -855,8 +870,8 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
855
870
|
return merged;
|
|
856
871
|
}
|
|
857
872
|
}
|
|
858
|
-
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
859
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
873
|
+
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, machine_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
874
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
860
875
|
id,
|
|
861
876
|
input.key,
|
|
862
877
|
input.value,
|
|
@@ -869,6 +884,7 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
869
884
|
input.agent_id || null,
|
|
870
885
|
input.project_id || null,
|
|
871
886
|
input.session_id || null,
|
|
887
|
+
input.machine_id || null,
|
|
872
888
|
metadataJson,
|
|
873
889
|
expiresAt,
|
|
874
890
|
timestamp,
|
package/dist/mcp/index.js
CHANGED
|
@@ -550,6 +550,20 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_resource_locks_exclusive
|
|
|
550
550
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_agent ON resource_locks(agent_id);
|
|
551
551
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_expires ON resource_locks(expires_at);
|
|
552
552
|
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
553
|
+
`,
|
|
554
|
+
`
|
|
555
|
+
CREATE TABLE IF NOT EXISTS machines (
|
|
556
|
+
id TEXT PRIMARY KEY,
|
|
557
|
+
name TEXT NOT NULL UNIQUE,
|
|
558
|
+
hostname TEXT NOT NULL,
|
|
559
|
+
platform TEXT NOT NULL DEFAULT 'unknown',
|
|
560
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
561
|
+
last_seen_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
562
|
+
);
|
|
563
|
+
CREATE INDEX IF NOT EXISTS idx_machines_hostname ON machines(hostname);
|
|
564
|
+
ALTER TABLE memories ADD COLUMN machine_id TEXT REFERENCES machines(id) ON DELETE SET NULL;
|
|
565
|
+
CREATE INDEX IF NOT EXISTS idx_memories_machine ON memories(machine_id);
|
|
566
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (15);
|
|
553
567
|
`,
|
|
554
568
|
`
|
|
555
569
|
CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
@@ -560,7 +574,7 @@ CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
|
560
574
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
561
575
|
);
|
|
562
576
|
CREATE INDEX IF NOT EXISTS idx_memory_embeddings_model ON memory_embeddings(model);
|
|
563
|
-
INSERT OR IGNORE INTO _migrations (id) VALUES (
|
|
577
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (16);
|
|
564
578
|
`
|
|
565
579
|
];
|
|
566
580
|
});
|
|
@@ -840,6 +854,7 @@ function parseMemoryRow(row) {
|
|
|
840
854
|
agent_id: row["agent_id"] || null,
|
|
841
855
|
project_id: row["project_id"] || null,
|
|
842
856
|
session_id: row["session_id"] || null,
|
|
857
|
+
machine_id: row["machine_id"] || null,
|
|
843
858
|
metadata: JSON.parse(row["metadata"] || "{}"),
|
|
844
859
|
access_count: row["access_count"],
|
|
845
860
|
version: row["version"],
|
|
@@ -916,8 +931,8 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
916
931
|
return merged;
|
|
917
932
|
}
|
|
918
933
|
}
|
|
919
|
-
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
920
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
934
|
+
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, machine_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
935
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
921
936
|
id,
|
|
922
937
|
input.key,
|
|
923
938
|
input.value,
|
|
@@ -930,6 +945,7 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
930
945
|
input.agent_id || null,
|
|
931
946
|
input.project_id || null,
|
|
932
947
|
input.session_id || null,
|
|
948
|
+
input.machine_id || null,
|
|
933
949
|
metadataJson,
|
|
934
950
|
expiresAt,
|
|
935
951
|
timestamp,
|
|
@@ -7867,6 +7883,56 @@ function listProjects(db) {
|
|
|
7867
7883
|
return rows.map(parseProjectRow);
|
|
7868
7884
|
}
|
|
7869
7885
|
|
|
7886
|
+
// src/db/machines.ts
|
|
7887
|
+
init_database();
|
|
7888
|
+
import { hostname, platform } from "os";
|
|
7889
|
+
function registerMachine(name, db = getDatabase()) {
|
|
7890
|
+
const host = hostname();
|
|
7891
|
+
const plat = platform();
|
|
7892
|
+
const machineName = name?.trim() || host;
|
|
7893
|
+
const existing = db.query("SELECT * FROM machines WHERE hostname = ?").get(host);
|
|
7894
|
+
if (existing) {
|
|
7895
|
+
db.run("UPDATE machines SET last_seen_at = ? WHERE id = ?", [now(), existing.id]);
|
|
7896
|
+
return { ...existing, last_seen_at: now() };
|
|
7897
|
+
}
|
|
7898
|
+
let finalName = machineName;
|
|
7899
|
+
let suffix = 2;
|
|
7900
|
+
while (db.query("SELECT id FROM machines WHERE name = ?").get(finalName)) {
|
|
7901
|
+
finalName = `${machineName}-${suffix++}`;
|
|
7902
|
+
}
|
|
7903
|
+
const id = uuid();
|
|
7904
|
+
db.run("INSERT INTO machines (id, name, hostname, platform) VALUES (?, ?, ?, ?)", [id, finalName, host, plat]);
|
|
7905
|
+
return db.query("SELECT * FROM machines WHERE id = ?").get(id);
|
|
7906
|
+
}
|
|
7907
|
+
function listMachines(db = getDatabase()) {
|
|
7908
|
+
return db.query("SELECT * FROM machines ORDER BY last_seen_at DESC").all();
|
|
7909
|
+
}
|
|
7910
|
+
function getMachine(id, db = getDatabase()) {
|
|
7911
|
+
return db.query("SELECT * FROM machines WHERE id = ? OR name = ?").get(id, id);
|
|
7912
|
+
}
|
|
7913
|
+
function renameMachine(id, newName, db = getDatabase()) {
|
|
7914
|
+
const m = db.query("SELECT * FROM machines WHERE id = ?").get(id);
|
|
7915
|
+
if (!m)
|
|
7916
|
+
throw new Error(`Machine not found: ${id}`);
|
|
7917
|
+
const clash = db.query("SELECT id FROM machines WHERE name = ? AND id != ?").get(newName, id);
|
|
7918
|
+
if (clash)
|
|
7919
|
+
throw new Error(`Machine name already taken: ${newName}`);
|
|
7920
|
+
db.run("UPDATE machines SET name = ?, last_seen_at = ? WHERE id = ?", [newName, now(), id]);
|
|
7921
|
+
return db.query("SELECT * FROM machines WHERE id = ?").get(id);
|
|
7922
|
+
}
|
|
7923
|
+
function touchMachine(id, db = getDatabase()) {
|
|
7924
|
+
db.run("UPDATE machines SET last_seen_at = ? WHERE id = ?", [now(), id]);
|
|
7925
|
+
}
|
|
7926
|
+
function getCurrentMachineId(db = getDatabase()) {
|
|
7927
|
+
const host = hostname();
|
|
7928
|
+
const m = db.query("SELECT id FROM machines WHERE hostname = ?").get(host);
|
|
7929
|
+
if (m) {
|
|
7930
|
+
touchMachine(m.id, db);
|
|
7931
|
+
return m.id;
|
|
7932
|
+
}
|
|
7933
|
+
return registerMachine(undefined, db).id;
|
|
7934
|
+
}
|
|
7935
|
+
|
|
7870
7936
|
// src/mcp/index.ts
|
|
7871
7937
|
init_entities();
|
|
7872
7938
|
init_relations();
|
|
@@ -9455,7 +9521,8 @@ server.tool("memory_save", "Save/upsert a memory. scope: global=all agents, shar
|
|
|
9455
9521
|
ttl_ms: exports_external.union([exports_external.string(), exports_external.number()]).optional(),
|
|
9456
9522
|
source: exports_external.enum(["user", "agent", "system", "auto", "imported"]).optional(),
|
|
9457
9523
|
metadata: exports_external.record(exports_external.unknown()).optional(),
|
|
9458
|
-
conflict: exports_external.enum(["merge", "overwrite", "error", "version-fork"]).optional().describe("Conflict strategy: merge=upsert(default), overwrite=same as merge, error=fail if key exists, version-fork=always create new")
|
|
9524
|
+
conflict: exports_external.enum(["merge", "overwrite", "error", "version-fork"]).optional().describe("Conflict strategy: merge=upsert(default), overwrite=same as merge, error=fail if key exists, version-fork=always create new"),
|
|
9525
|
+
machine_id: exports_external.string().optional().describe("Machine ID (from register_machine). If omitted, auto-detected from current hostname.")
|
|
9459
9526
|
}, async (args) => {
|
|
9460
9527
|
try {
|
|
9461
9528
|
ensureAutoProject();
|
|
@@ -9469,6 +9536,11 @@ server.tool("memory_save", "Save/upsert a memory. scope: global=all agents, shar
|
|
|
9469
9536
|
if (focusedProject)
|
|
9470
9537
|
input.project_id = focusedProject;
|
|
9471
9538
|
}
|
|
9539
|
+
if (!input.machine_id) {
|
|
9540
|
+
try {
|
|
9541
|
+
input.machine_id = getCurrentMachineId();
|
|
9542
|
+
} catch {}
|
|
9543
|
+
}
|
|
9472
9544
|
const dedupeMode = conflict ?? "merge";
|
|
9473
9545
|
const memory = createMemory(input, dedupeMode);
|
|
9474
9546
|
if (args.agent_id)
|
|
@@ -10492,6 +10564,33 @@ Created: ${project.created_at}`
|
|
|
10492
10564
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10493
10565
|
}
|
|
10494
10566
|
});
|
|
10567
|
+
server.tool("register_machine", "Register the current machine in the mementos machine registry. Auto-detects hostname. Idempotent by hostname.", { name: exports_external.string().optional().describe("Human-readable name (e.g. 'apple01'). Defaults to hostname.") }, async (args) => {
|
|
10568
|
+
try {
|
|
10569
|
+
const machine = registerMachine(args.name);
|
|
10570
|
+
return { content: [{ type: "text", text: `Machine: ${machine.name} | ${machine.id.slice(0, 8)} | hostname:${machine.hostname} | platform:${machine.platform}` }] };
|
|
10571
|
+
} catch (e) {
|
|
10572
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10573
|
+
}
|
|
10574
|
+
});
|
|
10575
|
+
server.tool("list_machines", "List all registered machines with their hostname, platform, and last seen time.", {}, async () => {
|
|
10576
|
+
try {
|
|
10577
|
+
const machines = listMachines();
|
|
10578
|
+
return { content: [{ type: "text", text: JSON.stringify(machines) }] };
|
|
10579
|
+
} catch (e) {
|
|
10580
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10581
|
+
}
|
|
10582
|
+
});
|
|
10583
|
+
server.tool("rename_machine", "Rename a machine by its ID or current name.", { id: exports_external.string().describe("Machine ID or name"), new_name: exports_external.string() }, async (args) => {
|
|
10584
|
+
try {
|
|
10585
|
+
const machine = getMachine(args.id);
|
|
10586
|
+
if (!machine)
|
|
10587
|
+
return { content: [{ type: "text", text: `Machine not found: ${args.id}` }], isError: true };
|
|
10588
|
+
const updated = renameMachine(machine.id, args.new_name);
|
|
10589
|
+
return { content: [{ type: "text", text: `Renamed: ${machine.name} \u2192 ${updated.name}` }] };
|
|
10590
|
+
} catch (e) {
|
|
10591
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10592
|
+
}
|
|
10593
|
+
});
|
|
10495
10594
|
server.tool("bulk_forget", "Delete multiple memories by IDs", {
|
|
10496
10595
|
ids: exports_external.array(exports_external.string())
|
|
10497
10596
|
}, async (args) => {
|
|
@@ -10586,6 +10685,74 @@ IDs: ${created.join(", ")}` : ""}`
|
|
|
10586
10685
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10587
10686
|
}
|
|
10588
10687
|
});
|
|
10688
|
+
server.tool("memory_briefing", "Lightweight delta briefing: what memories changed since an agent's last session. Use at session start instead of memory_context to avoid re-reading everything.", {
|
|
10689
|
+
agent_id: exports_external.string().optional().describe("Agent ID or name. If provided, defaults since to agent's last_seen_at."),
|
|
10690
|
+
since: exports_external.string().optional().describe("ISO 8601 timestamp. Defaults to agent's last_seen_at if agent_id provided, otherwise 24h ago."),
|
|
10691
|
+
project_id: exports_external.string().optional(),
|
|
10692
|
+
scope: exports_external.enum(["global", "shared", "private"]).optional(),
|
|
10693
|
+
limit: exports_external.coerce.number().optional().describe("Max memories per category (default: 20)")
|
|
10694
|
+
}, async (args) => {
|
|
10695
|
+
try {
|
|
10696
|
+
const db = getDatabase();
|
|
10697
|
+
const limit = args.limit || 20;
|
|
10698
|
+
let since = args.since;
|
|
10699
|
+
if (!since && args.agent_id) {
|
|
10700
|
+
const ag = getAgent(args.agent_id);
|
|
10701
|
+
if (ag?.last_seen_at)
|
|
10702
|
+
since = ag.last_seen_at;
|
|
10703
|
+
}
|
|
10704
|
+
if (!since) {
|
|
10705
|
+
since = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
|
|
10706
|
+
}
|
|
10707
|
+
const scopeClause = args.scope ? `AND scope = ?` : "";
|
|
10708
|
+
const projectClause = args.project_id ? `AND project_id = ?` : "";
|
|
10709
|
+
const extraParams = [
|
|
10710
|
+
...args.scope ? [args.scope] : [],
|
|
10711
|
+
...args.project_id ? [args.project_id] : []
|
|
10712
|
+
];
|
|
10713
|
+
const newMems = db.prepare(`SELECT id, key, value, summary, importance, scope, category, agent_id, created_at
|
|
10714
|
+
FROM memories WHERE status = 'active' AND created_at > ? ${scopeClause} ${projectClause}
|
|
10715
|
+
ORDER BY importance DESC, created_at DESC LIMIT ?`).all(since, ...extraParams, limit);
|
|
10716
|
+
const updatedMems = db.prepare(`SELECT id, key, value, summary, importance, scope, category, agent_id, updated_at
|
|
10717
|
+
FROM memories WHERE status = 'active' AND updated_at > ? AND created_at <= ? ${scopeClause} ${projectClause}
|
|
10718
|
+
ORDER BY importance DESC, updated_at DESC LIMIT ?`).all(since, since, ...extraParams, limit);
|
|
10719
|
+
const expiredMems = db.prepare(`SELECT id, key, scope, category, updated_at, status
|
|
10720
|
+
FROM memories WHERE status != 'active' AND updated_at > ? ${scopeClause} ${projectClause}
|
|
10721
|
+
ORDER BY updated_at DESC LIMIT ?`).all(since, ...extraParams, Math.min(limit, 10));
|
|
10722
|
+
const parts = [`Memory briefing since ${since}`];
|
|
10723
|
+
if (newMems.length > 0) {
|
|
10724
|
+
parts.push(`
|
|
10725
|
+
**New (${newMems.length}):**`);
|
|
10726
|
+
for (const m of newMems) {
|
|
10727
|
+
parts.push(`\u2022 [${m.scope}/${m.category}] ${m.key} (importance:${m.importance}${m.agent_id ? `, by:${m.agent_id}` : ""}): ${(m.summary || m.value).slice(0, 100)}`);
|
|
10728
|
+
}
|
|
10729
|
+
}
|
|
10730
|
+
if (updatedMems.length > 0) {
|
|
10731
|
+
parts.push(`
|
|
10732
|
+
**Updated (${updatedMems.length}):**`);
|
|
10733
|
+
for (const m of updatedMems) {
|
|
10734
|
+
parts.push(`\u2022 [${m.scope}] ${m.key}: ${(m.summary || m.value).slice(0, 80)}`);
|
|
10735
|
+
}
|
|
10736
|
+
}
|
|
10737
|
+
if (expiredMems.length > 0) {
|
|
10738
|
+
parts.push(`
|
|
10739
|
+
**Expired/archived (${expiredMems.length}):**`);
|
|
10740
|
+
for (const m of expiredMems) {
|
|
10741
|
+
parts.push(`\u2022 [${m.scope}] ${m.key} \u2014 ${m.status}`);
|
|
10742
|
+
}
|
|
10743
|
+
}
|
|
10744
|
+
if (newMems.length === 0 && updatedMems.length === 0 && expiredMems.length === 0) {
|
|
10745
|
+
parts.push(`
|
|
10746
|
+
No memory changes since last session.`);
|
|
10747
|
+
}
|
|
10748
|
+
parts.push(`
|
|
10749
|
+
Summary: ${newMems.length} new, ${updatedMems.length} updated, ${expiredMems.length} expired.`);
|
|
10750
|
+
return { content: [{ type: "text", text: parts.join(`
|
|
10751
|
+
`) }] };
|
|
10752
|
+
} catch (e) {
|
|
10753
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10754
|
+
}
|
|
10755
|
+
});
|
|
10589
10756
|
server.tool("memory_context", "Get memories relevant to current context, filtered by scope/importance/recency.", {
|
|
10590
10757
|
agent_id: exports_external.string().optional(),
|
|
10591
10758
|
project_id: exports_external.string().optional(),
|
package/dist/server/index.js
CHANGED
|
@@ -545,6 +545,20 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_resource_locks_exclusive
|
|
|
545
545
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_agent ON resource_locks(agent_id);
|
|
546
546
|
CREATE INDEX IF NOT EXISTS idx_resource_locks_expires ON resource_locks(expires_at);
|
|
547
547
|
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
548
|
+
`,
|
|
549
|
+
`
|
|
550
|
+
CREATE TABLE IF NOT EXISTS machines (
|
|
551
|
+
id TEXT PRIMARY KEY,
|
|
552
|
+
name TEXT NOT NULL UNIQUE,
|
|
553
|
+
hostname TEXT NOT NULL,
|
|
554
|
+
platform TEXT NOT NULL DEFAULT 'unknown',
|
|
555
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
556
|
+
last_seen_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
557
|
+
);
|
|
558
|
+
CREATE INDEX IF NOT EXISTS idx_machines_hostname ON machines(hostname);
|
|
559
|
+
ALTER TABLE memories ADD COLUMN machine_id TEXT REFERENCES machines(id) ON DELETE SET NULL;
|
|
560
|
+
CREATE INDEX IF NOT EXISTS idx_memories_machine ON memories(machine_id);
|
|
561
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (15);
|
|
548
562
|
`,
|
|
549
563
|
`
|
|
550
564
|
CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
@@ -555,7 +569,7 @@ CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
|
555
569
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
556
570
|
);
|
|
557
571
|
CREATE INDEX IF NOT EXISTS idx_memory_embeddings_model ON memory_embeddings(model);
|
|
558
|
-
INSERT OR IGNORE INTO _migrations (id) VALUES (
|
|
572
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (16);
|
|
559
573
|
`
|
|
560
574
|
];
|
|
561
575
|
});
|
|
@@ -835,6 +849,7 @@ function parseMemoryRow(row) {
|
|
|
835
849
|
agent_id: row["agent_id"] || null,
|
|
836
850
|
project_id: row["project_id"] || null,
|
|
837
851
|
session_id: row["session_id"] || null,
|
|
852
|
+
machine_id: row["machine_id"] || null,
|
|
838
853
|
metadata: JSON.parse(row["metadata"] || "{}"),
|
|
839
854
|
access_count: row["access_count"],
|
|
840
855
|
version: row["version"],
|
|
@@ -911,8 +926,8 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
911
926
|
return merged;
|
|
912
927
|
}
|
|
913
928
|
}
|
|
914
|
-
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
915
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
929
|
+
d.run(`INSERT INTO memories (id, key, value, category, scope, summary, tags, importance, source, status, pinned, agent_id, project_id, session_id, machine_id, metadata, access_count, version, expires_at, created_at, updated_at)
|
|
930
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', 0, ?, ?, ?, ?, ?, 0, 1, ?, ?, ?)`, [
|
|
916
931
|
id,
|
|
917
932
|
input.key,
|
|
918
933
|
input.value,
|
|
@@ -925,6 +940,7 @@ function createMemory(input, dedupeMode = "merge", db) {
|
|
|
925
940
|
input.agent_id || null,
|
|
926
941
|
input.project_id || null,
|
|
927
942
|
input.session_id || null,
|
|
943
|
+
input.machine_id || null,
|
|
928
944
|
metadataJson,
|
|
929
945
|
expiresAt,
|
|
930
946
|
timestamp,
|
package/dist/types/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface Memory {
|
|
|
17
17
|
agent_id: string | null;
|
|
18
18
|
project_id: string | null;
|
|
19
19
|
session_id: string | null;
|
|
20
|
+
machine_id?: string | null;
|
|
20
21
|
metadata: Record<string, unknown>;
|
|
21
22
|
access_count: number;
|
|
22
23
|
version: number;
|
|
@@ -44,6 +45,7 @@ export interface CreateMemoryInput {
|
|
|
44
45
|
metadata?: Record<string, unknown>;
|
|
45
46
|
expires_at?: string;
|
|
46
47
|
ttl_ms?: number;
|
|
48
|
+
machine_id?: string;
|
|
47
49
|
}
|
|
48
50
|
export interface UpdateMemoryInput {
|
|
49
51
|
value?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAM1D,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAM7E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAM7E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAM7D,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAMD,MAAM,WAAW,mBAAoB,SAAQ,MAAM;IACjD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAMD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAM1D,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAM7E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAM7E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAM7D,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAMD,MAAM,WAAW,mBAAoB,SAAQ,MAAM;IACjD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAMD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClD;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,QAAQ,EAAG,IAAI,CAAU;IACzC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,SAAgB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE/B,IAAI,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B;CAUF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,kBAAkB,CAE7E;AAMD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,WAAW,CAAC;IAC3B,gBAAgB,EAAE,cAAc,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,cAAc,EAAE,CAAC;QAC7B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC;CACH;AAMD,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,QAAQ,GACR,WAAW,GACX,OAAO,GACP,cAAc,CAAC;AAMnB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,CAAC;AAEnF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,aAAa,CAAC;IACzB,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,cAAc,CAAC;AACjH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AACpI,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,MAAM;IACjD,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,EAAE,EAAE,MAAM;CAIvB;AAUD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,EAAE,EAAE,MAAM;CAIvB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;CAI5C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,EAAE,EAAE,MAAM;CAIvB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAEV,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQzD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;gBAErB,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAS/F"}
|