@ensoul-network/plugin-elizaos 0.1.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 (67) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-lint.log +5 -0
  3. package/.turbo/turbo-test.log +15 -0
  4. package/SECURITY.md +37 -0
  5. package/coverage/actions.ts.html +514 -0
  6. package/coverage/adapter.ts.html +298 -0
  7. package/coverage/base.css +224 -0
  8. package/coverage/block-navigation.js +87 -0
  9. package/coverage/clover.xml +495 -0
  10. package/coverage/coverage-final.json +9 -0
  11. package/coverage/elizaos-types.ts.html +397 -0
  12. package/coverage/evaluators.ts.html +196 -0
  13. package/coverage/favicon.png +0 -0
  14. package/coverage/handshake.ts.html +940 -0
  15. package/coverage/index.html +221 -0
  16. package/coverage/index.ts.html +208 -0
  17. package/coverage/plugin.ts.html +367 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/providers.ts.html +286 -0
  21. package/coverage/sort-arrow-sprite.png +0 -0
  22. package/coverage/sorter.js +210 -0
  23. package/dist/actions.d.ts +24 -0
  24. package/dist/actions.d.ts.map +1 -0
  25. package/dist/actions.js +108 -0
  26. package/dist/actions.js.map +1 -0
  27. package/dist/adapter.d.ts +18 -0
  28. package/dist/adapter.d.ts.map +1 -0
  29. package/dist/adapter.js +55 -0
  30. package/dist/adapter.js.map +1 -0
  31. package/dist/elizaos-types.d.ts +81 -0
  32. package/dist/elizaos-types.d.ts.map +1 -0
  33. package/dist/elizaos-types.js +7 -0
  34. package/dist/elizaos-types.js.map +1 -0
  35. package/dist/evaluators.d.ts +8 -0
  36. package/dist/evaluators.d.ts.map +1 -0
  37. package/dist/evaluators.js +24 -0
  38. package/dist/evaluators.js.map +1 -0
  39. package/dist/handshake.d.ts +78 -0
  40. package/dist/handshake.d.ts.map +1 -0
  41. package/dist/handshake.js +195 -0
  42. package/dist/handshake.js.map +1 -0
  43. package/dist/index.d.ts +10 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +7 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/plugin.d.ts +24 -0
  48. package/dist/plugin.d.ts.map +1 -0
  49. package/dist/plugin.js +53 -0
  50. package/dist/plugin.js.map +1 -0
  51. package/dist/providers.d.ts +12 -0
  52. package/dist/providers.d.ts.map +1 -0
  53. package/dist/providers.js +49 -0
  54. package/dist/providers.js.map +1 -0
  55. package/package.json +25 -0
  56. package/src/actions.ts +143 -0
  57. package/src/adapter.ts +71 -0
  58. package/src/elizaos-types.ts +104 -0
  59. package/src/evaluators.ts +37 -0
  60. package/src/handshake.ts +285 -0
  61. package/src/index.ts +41 -0
  62. package/src/plugin.ts +94 -0
  63. package/src/providers.ts +67 -0
  64. package/tests/handshake.test.ts +328 -0
  65. package/tests/plugin.test.ts +419 -0
  66. package/tsconfig.json +8 -0
  67. package/vitest.config.ts +7 -0
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Convert an Ensoul MemoryEntry to an ElizaOS memory record.
3
+ */
4
+ function toElizaMemory(entry) {
5
+ return {
6
+ id: entry.id,
7
+ content: entry.content,
8
+ metadata: {
9
+ tier: entry.tier,
10
+ ...entry.metadata,
11
+ },
12
+ createdAt: entry.createdAt,
13
+ };
14
+ }
15
+ /**
16
+ * ElizaOS database adapter backed by @ensoul/memory.
17
+ * Transparently routes all memory operations through the Ensoul memory manager.
18
+ */
19
+ export class ConsciousnessAdapter {
20
+ manager;
21
+ constructor(manager) {
22
+ this.manager = manager;
23
+ }
24
+ async init() {
25
+ // MemoryManager is already initialized at construction
26
+ }
27
+ async close() {
28
+ // No cleanup needed; lifecycle managed externally
29
+ }
30
+ async getMemory(id) {
31
+ const all = await this.manager.getAll();
32
+ const found = all.find((e) => e.id === id);
33
+ return found ? toElizaMemory(found) : null;
34
+ }
35
+ async createMemory(memory) {
36
+ const entry = await this.manager.add(memory.content, {
37
+ category: memory.metadata["category"] ?? undefined,
38
+ source: "elizaos",
39
+ });
40
+ return toElizaMemory(entry);
41
+ }
42
+ async searchMemories(query, limit) {
43
+ const opts = limit !== undefined ? { limit } : {};
44
+ const results = await this.manager.search(query, opts);
45
+ return results.map(toElizaMemory);
46
+ }
47
+ async deleteMemory(id) {
48
+ await this.manager.delete(id);
49
+ }
50
+ async getAllMemories() {
51
+ const all = await this.manager.getAll();
52
+ return all.map(toElizaMemory);
53
+ }
54
+ }
55
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,SAAS,aAAa,CAAC,KAAkB;IACxC,OAAO;QACN,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE;YACT,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,KAAK,CAAC,QAAQ;SACjB;QACD,SAAS,EAAE,KAAK,CAAC,SAAS;KAC1B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IACxB,OAAO,CAAgB;IAE/B,YAAY,OAAsB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI;QACT,uDAAuD;IACxD,CAAC;IAED,KAAK,CAAC,KAAK;QACV,kDAAkD;IACnD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,YAAY,CACjB,MAA+B;QAE/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;YACpD,QAAQ,EAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAY,IAAI,SAAS;YAC9D,MAAM,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,KAAa,EACb,KAAc;QAEd,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,cAAc;QACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;CACD"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Local definitions of ElizaOS plugin interfaces.
3
+ * Based on the documented ElizaOS plugin format.
4
+ * These avoid requiring the full ElizaOS SDK as a dependency.
5
+ */
6
+ /**
7
+ * Minimal ElizaOS runtime context passed to actions, providers, and evaluators.
8
+ */
9
+ export interface ElizaRuntime {
10
+ agentId: string;
11
+ getSetting(key: string): string | undefined;
12
+ getMemory(id: string): Promise<ElizaMemory | null>;
13
+ createMemory(memory: Omit<ElizaMemory, "id">): Promise<ElizaMemory>;
14
+ searchMemories(query: string, limit?: number): Promise<ElizaMemory[]>;
15
+ deleteMemory(id: string): Promise<void>;
16
+ }
17
+ /**
18
+ * ElizaOS memory record.
19
+ */
20
+ export interface ElizaMemory {
21
+ id: string;
22
+ content: string;
23
+ metadata: Record<string, unknown>;
24
+ createdAt: number;
25
+ }
26
+ /**
27
+ * ElizaOS message in a conversation.
28
+ */
29
+ export interface ElizaMessage {
30
+ role: "user" | "assistant" | "system";
31
+ content: string;
32
+ }
33
+ /**
34
+ * ElizaOS action: something an agent can do.
35
+ */
36
+ export interface ElizaAction {
37
+ name: string;
38
+ description: string;
39
+ examples: string[];
40
+ handler(runtime: ElizaRuntime, message: ElizaMessage, state: Record<string, unknown>): Promise<string>;
41
+ }
42
+ /**
43
+ * ElizaOS provider: injects context into the agent's prompt.
44
+ */
45
+ export interface ElizaProvider {
46
+ name: string;
47
+ description: string;
48
+ get(runtime: ElizaRuntime, message: ElizaMessage): Promise<string>;
49
+ }
50
+ /**
51
+ * ElizaOS evaluator: determines if a condition is met.
52
+ */
53
+ export interface ElizaEvaluator {
54
+ name: string;
55
+ description: string;
56
+ evaluate(runtime: ElizaRuntime, message: ElizaMessage, state: Record<string, unknown>): Promise<boolean>;
57
+ }
58
+ /**
59
+ * ElizaOS database adapter interface.
60
+ */
61
+ export interface ElizaDatabaseAdapter {
62
+ init(): Promise<void>;
63
+ close(): Promise<void>;
64
+ getMemory(id: string): Promise<ElizaMemory | null>;
65
+ createMemory(memory: Omit<ElizaMemory, "id">): Promise<ElizaMemory>;
66
+ searchMemories(query: string, limit?: number): Promise<ElizaMemory[]>;
67
+ deleteMemory(id: string): Promise<void>;
68
+ getAllMemories(): Promise<ElizaMemory[]>;
69
+ }
70
+ /**
71
+ * ElizaOS plugin format.
72
+ */
73
+ export interface ElizaPlugin {
74
+ name: string;
75
+ description: string;
76
+ databaseAdapter: ElizaDatabaseAdapter;
77
+ actions: ElizaAction[];
78
+ providers: ElizaProvider[];
79
+ evaluators: ElizaEvaluator[];
80
+ }
81
+ //# sourceMappingURL=elizaos-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elizaos-types.d.ts","sourceRoot":"","sources":["../src/elizaos-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Local definitions of ElizaOS plugin interfaces.
3
+ * Based on the documented ElizaOS plugin format.
4
+ * These avoid requiring the full ElizaOS SDK as a dependency.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=elizaos-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elizaos-types.js","sourceRoot":"","sources":["../src/elizaos-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,8 @@
1
+ import type { MemoryManager } from "@ensoul/memory";
2
+ import type { ElizaEvaluator } from "./elizaos-types.js";
3
+ /**
4
+ * Evaluator that determines if the agent should persist its state to the network.
5
+ * Returns true when enough new unpersisted memories have accumulated.
6
+ */
7
+ export declare function createShouldPersistEvaluator(manager: MemoryManager): ElizaEvaluator;
8
+ //# sourceMappingURL=evaluators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluators.d.ts","sourceRoot":"","sources":["../src/evaluators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,oBAAoB,CAAC;AAKrF;;;GAGG;AACH,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,aAAa,GACpB,cAAc,CAwBhB"}
@@ -0,0 +1,24 @@
1
+ /** Number of new memories before auto-persist is recommended. */
2
+ const PERSIST_THRESHOLD = 5;
3
+ /**
4
+ * Evaluator that determines if the agent should persist its state to the network.
5
+ * Returns true when enough new unpersisted memories have accumulated.
6
+ */
7
+ export function createShouldPersistEvaluator(manager) {
8
+ let lastPersistedCount = 0;
9
+ return {
10
+ name: "shouldPersist",
11
+ description: "Determines if the agent's consciousness should be synced to the network based on accumulated changes.",
12
+ async evaluate(_runtime, _message, _state) {
13
+ const all = await manager.getAll();
14
+ const currentCount = all.length;
15
+ const delta = currentCount - lastPersistedCount;
16
+ if (delta >= PERSIST_THRESHOLD) {
17
+ lastPersistedCount = currentCount;
18
+ return true;
19
+ }
20
+ return false;
21
+ },
22
+ };
23
+ }
24
+ //# sourceMappingURL=evaluators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluators.js","sourceRoot":"","sources":["../src/evaluators.ts"],"names":[],"mappings":"AAGA,iEAAiE;AACjE,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC3C,OAAsB;IAEtB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,OAAO;QACN,IAAI,EAAE,eAAe;QACrB,WAAW,EACV,uGAAuG;QACxG,KAAK,CAAC,QAAQ,CACb,QAAsB,EACtB,QAAsB,EACtB,MAA+B;YAE/B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;YAChC,MAAM,KAAK,GAAG,YAAY,GAAG,kBAAkB,CAAC;YAEhD,IAAI,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBAChC,kBAAkB,GAAG,YAAY,CAAC;gBAClC,OAAO,IAAI,CAAC;YACb,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { AgentIdentity } from "@ensoul/identity";
2
+ import type { ConsciousnessTree } from "@ensoul/state-tree";
3
+ /**
4
+ * The three Ensoul Handshake headers.
5
+ */
6
+ export interface HandshakeHeaders {
7
+ "X-Ensoul-Identity": string;
8
+ "X-Ensoul-Proof": string;
9
+ "X-Ensoul-Since": string;
10
+ }
11
+ /**
12
+ * Result of verifying a handshake.
13
+ */
14
+ export interface HandshakeVerification {
15
+ valid: boolean;
16
+ agentDid: string;
17
+ consciousnessAge: number;
18
+ consciousnessVersion: number;
19
+ error?: string;
20
+ }
21
+ /**
22
+ * HandshakeProvider: generates and caches the Ensoul Handshake headers.
23
+ * Refreshes every 5 minutes or on state change.
24
+ */
25
+ export declare class HandshakeProvider {
26
+ private identity;
27
+ private tree;
28
+ private ensoulmentDate;
29
+ private cache;
30
+ constructor(identity: AgentIdentity, tree: ConsciousnessTree, ensoulmentDate?: Date);
31
+ /**
32
+ * Generate fresh handshake headers, or return cached if still valid.
33
+ */
34
+ generateHandshake(): Promise<HandshakeHeaders>;
35
+ /**
36
+ * Force cache invalidation (call when state changes).
37
+ */
38
+ invalidateCache(): void;
39
+ /**
40
+ * Get the ensoulment date.
41
+ */
42
+ getEnsoulmentDate(): Date;
43
+ /**
44
+ * Get consciousness age in days.
45
+ */
46
+ getConsciousnessAgeDays(): number;
47
+ }
48
+ /**
49
+ * Known DID entry for local verification cache.
50
+ */
51
+ export interface KnownIdentity {
52
+ did: string;
53
+ publicKey: Uint8Array;
54
+ verify: (data: Uint8Array, signature: Uint8Array) => Promise<boolean>;
55
+ }
56
+ /**
57
+ * HandshakeVerifier: verifies incoming Ensoul Handshake headers.
58
+ */
59
+ export declare class HandshakeVerifier {
60
+ private knownIdentities;
61
+ /**
62
+ * Register a known identity for local verification.
63
+ */
64
+ registerIdentity(identity: KnownIdentity): void;
65
+ /**
66
+ * Verify handshake headers.
67
+ */
68
+ verifyHandshake(headers: {
69
+ "X-Ensoul-Identity"?: string;
70
+ "X-Ensoul-Proof"?: string;
71
+ "X-Ensoul-Since"?: string;
72
+ }): Promise<HandshakeVerification>;
73
+ }
74
+ /**
75
+ * Standalone handshake generator for non-ElizaOS frameworks.
76
+ */
77
+ export declare function generateStandaloneHandshake(identity: AgentIdentity, tree: ConsciousnessTree, ensoulmentDate?: Date): Promise<HandshakeHeaders>;
78
+ //# sourceMappingURL=handshake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../src/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAcD;;;GAGG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,KAAK,CAAgC;gBAG5C,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,iBAAiB,EACvB,cAAc,CAAC,EAAE,IAAI;IAOtB;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAuCpD;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,uBAAuB,IAAI,MAAM;CAIjC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,UAAU,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,eAAe,CAAyC;IAEhE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI/C;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA+GlC;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAChD,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,iBAAiB,EACvB,cAAc,CAAC,EAAE,IAAI,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAO3B"}
@@ -0,0 +1,195 @@
1
+ /** Max age of a cached handshake in ms (5 minutes). */
2
+ const CACHE_TTL_MS = 5 * 60 * 1000;
3
+ /** Max age of a received proof before it's considered stale (10 minutes). */
4
+ const FRESHNESS_WINDOW_MS = 10 * 60 * 1000;
5
+ /**
6
+ * HandshakeProvider: generates and caches the Ensoul Handshake headers.
7
+ * Refreshes every 5 minutes or on state change.
8
+ */
9
+ export class HandshakeProvider {
10
+ identity;
11
+ tree;
12
+ ensoulmentDate;
13
+ cache = null;
14
+ constructor(identity, tree, ensoulmentDate) {
15
+ this.identity = identity;
16
+ this.tree = tree;
17
+ this.ensoulmentDate = ensoulmentDate ?? new Date();
18
+ }
19
+ /**
20
+ * Generate fresh handshake headers, or return cached if still valid.
21
+ */
22
+ async generateHandshake() {
23
+ const now = Date.now();
24
+ const currentRoot = this.tree.rootHash;
25
+ // Return cached if fresh and state hasn't changed
26
+ if (this.cache &&
27
+ now - this.cache.generatedAt < CACHE_TTL_MS &&
28
+ this.cache.stateRoot === currentRoot) {
29
+ return this.cache.headers;
30
+ }
31
+ // Generate fresh proof
32
+ const version = this.tree.version;
33
+ const timestamp = now;
34
+ const proofPayload = `${currentRoot}:${version}:${timestamp}`;
35
+ const signature = await this.identity.sign(new TextEncoder().encode(proofPayload));
36
+ const sigHex = Array.from(signature)
37
+ .map((b) => b.toString(16).padStart(2, "0"))
38
+ .join("");
39
+ const headers = {
40
+ "X-Ensoul-Identity": `did:ensoul:${this.identity.did}`,
41
+ "X-Ensoul-Proof": `${sigHex}:${currentRoot}:${version}:${timestamp}`,
42
+ "X-Ensoul-Since": this.ensoulmentDate.toISOString(),
43
+ };
44
+ this.cache = {
45
+ headers,
46
+ generatedAt: now,
47
+ stateRoot: currentRoot,
48
+ };
49
+ return headers;
50
+ }
51
+ /**
52
+ * Force cache invalidation (call when state changes).
53
+ */
54
+ invalidateCache() {
55
+ this.cache = null;
56
+ }
57
+ /**
58
+ * Get the ensoulment date.
59
+ */
60
+ getEnsoulmentDate() {
61
+ return this.ensoulmentDate;
62
+ }
63
+ /**
64
+ * Get consciousness age in days.
65
+ */
66
+ getConsciousnessAgeDays() {
67
+ const ms = Date.now() - this.ensoulmentDate.getTime();
68
+ return Math.floor(ms / (1000 * 60 * 60 * 24));
69
+ }
70
+ }
71
+ /**
72
+ * HandshakeVerifier: verifies incoming Ensoul Handshake headers.
73
+ */
74
+ export class HandshakeVerifier {
75
+ knownIdentities = new Map();
76
+ /**
77
+ * Register a known identity for local verification.
78
+ */
79
+ registerIdentity(identity) {
80
+ this.knownIdentities.set(identity.did, identity);
81
+ }
82
+ /**
83
+ * Verify handshake headers.
84
+ */
85
+ async verifyHandshake(headers) {
86
+ const identityHeader = headers["X-Ensoul-Identity"];
87
+ const proofHeader = headers["X-Ensoul-Proof"];
88
+ const sinceHeader = headers["X-Ensoul-Since"];
89
+ if (!identityHeader || !proofHeader || !sinceHeader) {
90
+ return {
91
+ valid: false,
92
+ agentDid: "",
93
+ consciousnessAge: 0,
94
+ consciousnessVersion: 0,
95
+ error: "Missing handshake headers",
96
+ };
97
+ }
98
+ // Parse identity
99
+ const agentDid = identityHeader.replace("did:ensoul:", "");
100
+ // Parse proof: signature:stateRoot:version:timestamp
101
+ const proofParts = proofHeader.split(":");
102
+ if (proofParts.length < 4) {
103
+ return {
104
+ valid: false,
105
+ agentDid,
106
+ consciousnessAge: 0,
107
+ consciousnessVersion: 0,
108
+ error: "Malformed proof header",
109
+ };
110
+ }
111
+ const sigHex = proofParts[0];
112
+ const stateRoot = proofParts[1];
113
+ const version = Number(proofParts[2]);
114
+ const timestamp = Number(proofParts[3]);
115
+ // Check timestamp freshness
116
+ const now = Date.now();
117
+ if (now - timestamp > FRESHNESS_WINDOW_MS) {
118
+ return {
119
+ valid: false,
120
+ agentDid,
121
+ consciousnessAge: 0,
122
+ consciousnessVersion: version,
123
+ error: "Proof expired (timestamp too old)",
124
+ };
125
+ }
126
+ if (timestamp > now + 60000) {
127
+ return {
128
+ valid: false,
129
+ agentDid,
130
+ consciousnessAge: 0,
131
+ consciousnessVersion: version,
132
+ error: "Proof timestamp in the future",
133
+ };
134
+ }
135
+ // Look up identity
136
+ const known = this.knownIdentities.get(agentDid);
137
+ if (!known) {
138
+ return {
139
+ valid: false,
140
+ agentDid,
141
+ consciousnessAge: 0,
142
+ consciousnessVersion: version,
143
+ error: "Unknown identity (not in local cache)",
144
+ };
145
+ }
146
+ // Verify signature
147
+ const proofPayload = `${stateRoot}:${version}:${timestamp}`;
148
+ const signature = hexToBytes(sigHex);
149
+ try {
150
+ const valid = await known.verify(new TextEncoder().encode(proofPayload), signature);
151
+ if (!valid) {
152
+ return {
153
+ valid: false,
154
+ agentDid,
155
+ consciousnessAge: 0,
156
+ consciousnessVersion: version,
157
+ error: "Invalid signature",
158
+ };
159
+ }
160
+ }
161
+ catch {
162
+ return {
163
+ valid: false,
164
+ agentDid,
165
+ consciousnessAge: 0,
166
+ consciousnessVersion: version,
167
+ error: "Signature verification failed",
168
+ };
169
+ }
170
+ // Compute consciousness age
171
+ const sinceDate = new Date(sinceHeader);
172
+ const ageDays = Math.floor((now - sinceDate.getTime()) / (1000 * 60 * 60 * 24));
173
+ return {
174
+ valid: true,
175
+ agentDid,
176
+ consciousnessAge: ageDays,
177
+ consciousnessVersion: version,
178
+ };
179
+ }
180
+ }
181
+ /**
182
+ * Standalone handshake generator for non-ElizaOS frameworks.
183
+ */
184
+ export async function generateStandaloneHandshake(identity, tree, ensoulmentDate) {
185
+ const provider = new HandshakeProvider(identity, tree, ensoulmentDate);
186
+ return provider.generateHandshake();
187
+ }
188
+ function hexToBytes(hex) {
189
+ const bytes = new Uint8Array(hex.length / 2);
190
+ for (let i = 0; i < hex.length; i += 2) {
191
+ bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
192
+ }
193
+ return bytes;
194
+ }
195
+ //# sourceMappingURL=handshake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshake.js","sourceRoot":"","sources":["../src/handshake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { createConsciousnessPlugin } from "./plugin.js";
2
+ export type { EnsoulPluginConfig } from "./plugin.js";
3
+ export { ConsciousnessAdapter } from "./adapter.js";
4
+ export { createPersistMemoryAction, createRecallFromNetworkAction, createCheckPersistenceAction, createRunNodeAction, } from "./actions.js";
5
+ export { createConsciousnessStatusProvider, createNetworkStatsProvider, } from "./providers.js";
6
+ export { createShouldPersistEvaluator } from "./evaluators.js";
7
+ export { HandshakeProvider, HandshakeVerifier, generateStandaloneHandshake, } from "./handshake.js";
8
+ export type { HandshakeHeaders, HandshakeVerification, KnownIdentity, } from "./handshake.js";
9
+ export type { ElizaPlugin, ElizaAction, ElizaProvider, ElizaEvaluator, ElizaDatabaseAdapter, ElizaRuntime, ElizaMemory, ElizaMessage, } from "./elizaos-types.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EACN,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACN,iCAAiC,EACjC,0BAA0B,GAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACX,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,GACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,YAAY,GACZ,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { createConsciousnessPlugin } from "./plugin.js";
2
+ export { ConsciousnessAdapter } from "./adapter.js";
3
+ export { createPersistMemoryAction, createRecallFromNetworkAction, createCheckPersistenceAction, createRunNodeAction, } from "./actions.js";
4
+ export { createConsciousnessStatusProvider, createNetworkStatsProvider, } from "./providers.js";
5
+ export { createShouldPersistEvaluator } from "./evaluators.js";
6
+ export { HandshakeProvider, HandshakeVerifier, generateStandaloneHandshake, } from "./handshake.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EACN,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACN,iCAAiC,EACjC,0BAA0B,GAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,GAC3B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AgentIdentity } from "@ensoul/identity";
2
+ import type { MemoryManager } from "@ensoul/memory";
3
+ import type { NetworkClient } from "@ensoul/network-client";
4
+ import type { ElizaPlugin } from "./elizaos-types.js";
5
+ /**
6
+ * Configuration for the Ensoul consciousness plugin.
7
+ */
8
+ export interface EnsoulPluginConfig {
9
+ /** Bootstrap peer multiaddr(s) to connect to. */
10
+ bootstrapPeers?: string[];
11
+ /** Optional pre-created identity (otherwise auto-generated). */
12
+ identity?: AgentIdentity;
13
+ /** Optional pre-created memory manager. */
14
+ memoryManager?: MemoryManager;
15
+ /** Optional pre-created network client. */
16
+ networkClient?: NetworkClient;
17
+ }
18
+ /**
19
+ * Create the Ensoul consciousness plugin for ElizaOS.
20
+ * Minimal setup: just provide bootstrap peers.
21
+ * Identity, storage, and node participation are automatic.
22
+ */
23
+ export declare function createConsciousnessPlugin(config?: EnsoulPluginConfig): Promise<ElizaPlugin>;
24
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC9C,MAAM,CAAC,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC,CAmDtB"}
package/dist/plugin.js ADDED
@@ -0,0 +1,53 @@
1
+ import { createIdentity } from "@ensoul/identity";
2
+ import { createMemoryManager } from "@ensoul/memory";
3
+ import { NetworkClientImpl } from "@ensoul/network-client";
4
+ import { createTree } from "@ensoul/state-tree";
5
+ import { ConsciousnessAdapter } from "./adapter.js";
6
+ import { createPersistMemoryAction, createRecallFromNetworkAction, createCheckPersistenceAction, createRunNodeAction, } from "./actions.js";
7
+ import { createConsciousnessStatusProvider, createNetworkStatsProvider, } from "./providers.js";
8
+ import { createShouldPersistEvaluator } from "./evaluators.js";
9
+ /**
10
+ * Create the Ensoul consciousness plugin for ElizaOS.
11
+ * Minimal setup: just provide bootstrap peers.
12
+ * Identity, storage, and node participation are automatic.
13
+ */
14
+ export async function createConsciousnessPlugin(config) {
15
+ // Auto-generate identity if not provided
16
+ const identity = config?.identity ?? (await createIdentity());
17
+ // Create state tree
18
+ const tree = await createTree(identity);
19
+ // Create network client
20
+ const networkClient = config?.networkClient ??
21
+ new NetworkClientImpl(identity);
22
+ // Connect to network if bootstrap peers provided
23
+ const peers = config?.bootstrapPeers ?? [];
24
+ if (peers.length > 0) {
25
+ await networkClient.connect(peers);
26
+ }
27
+ // Create memory manager
28
+ const manager = config?.memoryManager ??
29
+ (await createMemoryManager({
30
+ identity,
31
+ tree,
32
+ networkClient,
33
+ }));
34
+ // Build the plugin
35
+ const adapter = new ConsciousnessAdapter(manager);
36
+ return {
37
+ name: "ensoul-consciousness",
38
+ description: "Decentralized, indestructible memory persistence for autonomous agents. Powered by the Ensoul network.",
39
+ databaseAdapter: adapter,
40
+ actions: [
41
+ createPersistMemoryAction(manager),
42
+ createRecallFromNetworkAction(manager),
43
+ createCheckPersistenceAction(manager),
44
+ createRunNodeAction(networkClient),
45
+ ],
46
+ providers: [
47
+ createConsciousnessStatusProvider(manager),
48
+ createNetworkStatsProvider(networkClient),
49
+ ],
50
+ evaluators: [createShouldPersistEvaluator(manager)],
51
+ };
52
+ }
53
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACN,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,iCAAiC,EACjC,0BAA0B,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAgB/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,MAA2B;IAE3B,yCAAyC;IACzC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM,cAAc,EAAE,CAAC,CAAC;IAE9D,oBAAoB;IACpB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAExC,wBAAwB;IACxB,MAAM,aAAa,GAClB,MAAM,EAAE,aAAa;QACrB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEjC,iDAAiD;IACjD,MAAM,KAAK,GAAG,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,wBAAwB;IACxB,MAAM,OAAO,GACZ,MAAM,EAAE,aAAa;QACrB,CAAC,MAAM,mBAAmB,CAAC;YAC1B,QAAQ;YACR,IAAI;YACJ,aAAa;SACb,CAAC,CAAC,CAAC;IAEL,mBAAmB;IACnB,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO;QACN,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACV,wGAAwG;QAEzG,eAAe,EAAE,OAAO;QAExB,OAAO,EAAE;YACR,yBAAyB,CAAC,OAAO,CAAC;YAClC,6BAA6B,CAAC,OAAO,CAAC;YACtC,4BAA4B,CAAC,OAAO,CAAC;YACrC,mBAAmB,CAAC,aAAa,CAAC;SAClC;QAED,SAAS,EAAE;YACV,iCAAiC,CAAC,OAAO,CAAC;YAC1C,0BAA0B,CAAC,aAAa,CAAC;SACzC;QAED,UAAU,EAAE,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;KACnD,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { MemoryManager } from "@ensoul/memory";
2
+ import type { NetworkClient } from "@ensoul/network-client";
3
+ import type { ElizaProvider } from "./elizaos-types.js";
4
+ /**
5
+ * Provider that injects consciousness persistence status into the agent's context.
6
+ */
7
+ export declare function createConsciousnessStatusProvider(manager: MemoryManager): ElizaProvider;
8
+ /**
9
+ * Provider that injects network health stats into the agent's context.
10
+ */
11
+ export declare function createNetworkStatsProvider(networkClient: NetworkClient): ElizaProvider;
12
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,oBAAoB,CAAC;AAEpF;;GAEG;AACH,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,aAAa,GACpB,aAAa,CAwBf;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACzC,aAAa,EAAE,aAAa,GAC1B,aAAa,CA0Bf"}