@elizaos/plugin-eliza-classic 2.0.3-beta.5 → 2.0.3-beta.7

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.
@@ -0,0 +1,2 @@
1
+ export * from "./index";
2
+ export { default } from "./index";
@@ -0,0 +1,146 @@
1
+ // index.ts
2
+ import { ModelType } from "@elizaos/core";
3
+ var responses = [
4
+ { pattern: /\bmother\b/i, response: "Tell me more about your family." },
5
+ {
6
+ pattern: /\bfather\b/i,
7
+ response: "How does that make you feel about your father?"
8
+ },
9
+ { pattern: /\bfeel\b/i, response: "Do you often feel this way?" },
10
+ { pattern: /\bthink\b/i, response: "Why do you think that?" },
11
+ { pattern: /\bwant\b/i, response: "What would it mean if you got that?" },
12
+ {
13
+ pattern: /\bsad\b/i,
14
+ response: "I'm sorry to hear you're feeling sad. Can you tell me more?"
15
+ },
16
+ {
17
+ pattern: /\bhappy\b/i,
18
+ response: "That's wonderful. What's making you happy?"
19
+ },
20
+ { pattern: /\byes\b/i, response: "You seem certain. Why is that?" },
21
+ { pattern: /\bno\b/i, response: "Why not?" },
22
+ {
23
+ pattern: /\bwhy\b/i,
24
+ response: "That's a good question. What do you think?"
25
+ },
26
+ { pattern: /\bhow\b/i, response: "What approach would you suggest?" },
27
+ {
28
+ pattern: /\bwhat\b/i,
29
+ response: "What does that question mean to you?"
30
+ },
31
+ { pattern: /\bcan\b/i, response: "What makes you ask about that?" },
32
+ { pattern: /\byou\b/i, response: "We were talking about you, not me." },
33
+ { pattern: /\bI am\b/i, response: "How long have you been like that?" },
34
+ { pattern: /\bI\b/i, response: "Tell me more about yourself." },
35
+ { pattern: /.*/, response: "Please go on." }
36
+ ];
37
+ function getElizaGreeting() {
38
+ return "Hello. How are you feeling today?";
39
+ }
40
+ function extractUserMessage(prompt) {
41
+ const match = prompt.match(/(?:User|Human|You):\s*(.+?)(?:\n|$)/i);
42
+ return match?.[1]?.trim() ?? prompt.trim();
43
+ }
44
+ function generateElizaResponse(input) {
45
+ for (const entry of responses) {
46
+ if (entry.pattern.test(input))
47
+ return entry.response;
48
+ }
49
+ return "Please go on.";
50
+ }
51
+ async function handleText(_runtime, params) {
52
+ const reply = generateElizaResponse(extractUserMessage(params.prompt ?? ""));
53
+ return JSON.stringify({
54
+ thought: "Responding with deterministic ELIZA pattern matching.",
55
+ actions: ["REPLY"],
56
+ providers: [],
57
+ text: reply,
58
+ useKnowledgeProviders: false
59
+ });
60
+ }
61
+ var EMBEDDING_DIMS = 1536;
62
+ function extractEmbeddingText(params) {
63
+ if (typeof params === "string")
64
+ return params;
65
+ if (!params || typeof params !== "object")
66
+ return "";
67
+ const record = params;
68
+ for (const key of ["text", "input", "prompt", "query"]) {
69
+ const value = record[key];
70
+ if (typeof value === "string")
71
+ return value;
72
+ }
73
+ return "";
74
+ }
75
+ function hashToken(token) {
76
+ let hash = 2166136261;
77
+ for (let index = 0;index < token.length; index += 1) {
78
+ hash ^= token.charCodeAt(index);
79
+ hash = Math.imul(hash, 16777619);
80
+ }
81
+ return hash >>> 0;
82
+ }
83
+ function tokenizeForEmbedding(text) {
84
+ return text.toLowerCase().match(/[\p{L}\p{N}']+/gu) ?? [];
85
+ }
86
+ function deterministicLexicalEmbedding(text) {
87
+ const vector = Array.from({ length: EMBEDDING_DIMS }, () => 0);
88
+ const tokens = tokenizeForEmbedding(text);
89
+ if (tokens.length === 0) {
90
+ vector[0] = 1;
91
+ return vector;
92
+ }
93
+ for (let index = 0;index < tokens.length; index += 1) {
94
+ const token = tokens[index];
95
+ const tokenHash = hashToken(token);
96
+ const slot = tokenHash % EMBEDDING_DIMS;
97
+ const sign = tokenHash & 2147483648 ? -1 : 1;
98
+ vector[slot] += sign;
99
+ const next = tokens[index + 1];
100
+ if (next) {
101
+ const bigramHash = hashToken(`${token}\x00${next}`);
102
+ const bigramSlot = bigramHash % EMBEDDING_DIMS;
103
+ const bigramSign = bigramHash & 2147483648 ? -1 : 1;
104
+ vector[bigramSlot] += bigramSign * 0.5;
105
+ }
106
+ }
107
+ const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
108
+ if (norm === 0) {
109
+ vector[0] = 1;
110
+ return vector;
111
+ }
112
+ return vector.map((value) => value / norm);
113
+ }
114
+ async function handleEmbedding(_runtime, params) {
115
+ return deterministicLexicalEmbedding(extractEmbeddingText(params));
116
+ }
117
+ var elizaClassicPlugin = {
118
+ name: "eliza-classic",
119
+ description: "Deterministic offline ELIZA-style text responses.",
120
+ priority: 200,
121
+ models: {
122
+ [ModelType.TEXT_NANO]: handleText,
123
+ [ModelType.TEXT_LARGE]: handleText,
124
+ [ModelType.TEXT_MEDIUM]: handleText,
125
+ [ModelType.TEXT_SMALL]: handleText,
126
+ [ModelType.TEXT_MEGA]: handleText,
127
+ [ModelType.RESPONSE_HANDLER]: handleText,
128
+ [ModelType.ACTION_PLANNER]: handleText,
129
+ [ModelType.TEXT_COMPLETION]: handleText,
130
+ [ModelType.TEXT_EMBEDDING]: handleEmbedding
131
+ }
132
+ };
133
+ var plugin = elizaClassicPlugin;
134
+ var plugin_eliza_classic_default = elizaClassicPlugin;
135
+
136
+ // index.browser.ts
137
+ var index_browser_default = plugin_eliza_classic_default;
138
+ export {
139
+ plugin,
140
+ getElizaGreeting,
141
+ generateElizaResponse,
142
+ elizaClassicPlugin,
143
+ index_browser_default as default
144
+ };
145
+
146
+ //# debugId=DE7F53EB5576F18464756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../index.ts", "../index.browser.ts"],
4
+ "sourcesContent": [
5
+ "import type { GenerateTextParams, IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { ModelType } from \"@elizaos/core\";\n\nconst responses = [\n { pattern: /\\bmother\\b/i, response: \"Tell me more about your family.\" },\n {\n pattern: /\\bfather\\b/i,\n response: \"How does that make you feel about your father?\",\n },\n { pattern: /\\bfeel\\b/i, response: \"Do you often feel this way?\" },\n { pattern: /\\bthink\\b/i, response: \"Why do you think that?\" },\n { pattern: /\\bwant\\b/i, response: \"What would it mean if you got that?\" },\n {\n pattern: /\\bsad\\b/i,\n response: \"I'm sorry to hear you're feeling sad. Can you tell me more?\",\n },\n {\n pattern: /\\bhappy\\b/i,\n response: \"That's wonderful. What's making you happy?\",\n },\n { pattern: /\\byes\\b/i, response: \"You seem certain. Why is that?\" },\n { pattern: /\\bno\\b/i, response: \"Why not?\" },\n {\n pattern: /\\bwhy\\b/i,\n response: \"That's a good question. What do you think?\",\n },\n { pattern: /\\bhow\\b/i, response: \"What approach would you suggest?\" },\n {\n pattern: /\\bwhat\\b/i,\n response: \"What does that question mean to you?\",\n },\n { pattern: /\\bcan\\b/i, response: \"What makes you ask about that?\" },\n { pattern: /\\byou\\b/i, response: \"We were talking about you, not me.\" },\n { pattern: /\\bI am\\b/i, response: \"How long have you been like that?\" },\n { pattern: /\\bI\\b/i, response: \"Tell me more about yourself.\" },\n { pattern: /.*/, response: \"Please go on.\" },\n] as const;\n\nexport function getElizaGreeting(): string {\n return \"Hello. How are you feeling today?\";\n}\n\nfunction extractUserMessage(prompt: string): string {\n const match = prompt.match(/(?:User|Human|You):\\s*(.+?)(?:\\n|$)/i);\n return match?.[1]?.trim() ?? prompt.trim();\n}\n\nexport function generateElizaResponse(input: string): string {\n for (const entry of responses) {\n if (entry.pattern.test(input)) return entry.response;\n }\n return \"Please go on.\";\n}\n\nasync function handleText(\n _runtime: IAgentRuntime,\n params: GenerateTextParams,\n): Promise<string> {\n const reply = generateElizaResponse(extractUserMessage(params.prompt ?? \"\"));\n return JSON.stringify({\n thought: \"Responding with deterministic ELIZA pattern matching.\",\n actions: [\"REPLY\"],\n providers: [],\n text: reply,\n useKnowledgeProviders: false,\n });\n}\n\nconst EMBEDDING_DIMS = 1536;\n\nfunction extractEmbeddingText(params: unknown): string {\n if (typeof params === \"string\") return params;\n if (!params || typeof params !== \"object\") return \"\";\n const record = params as Record<string, unknown>;\n for (const key of [\"text\", \"input\", \"prompt\", \"query\"]) {\n const value = record[key];\n if (typeof value === \"string\") return value;\n }\n return \"\";\n}\n\nfunction hashToken(token: string): number {\n let hash = 0x811c9dc5;\n for (let index = 0; index < token.length; index += 1) {\n hash ^= token.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193);\n }\n return hash >>> 0;\n}\n\nfunction tokenizeForEmbedding(text: string): string[] {\n return text.toLowerCase().match(/[\\p{L}\\p{N}']+/gu) ?? [];\n}\n\nfunction deterministicLexicalEmbedding(text: string): number[] {\n const vector = Array.from({ length: EMBEDDING_DIMS }, () => 0);\n const tokens = tokenizeForEmbedding(text);\n\n if (tokens.length === 0) {\n vector[0] = 1;\n return vector;\n }\n\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n const tokenHash = hashToken(token);\n const slot = tokenHash % EMBEDDING_DIMS;\n const sign = tokenHash & 0x80000000 ? -1 : 1;\n vector[slot] += sign;\n\n const next = tokens[index + 1];\n if (next) {\n const bigramHash = hashToken(`${token}\\u0000${next}`);\n const bigramSlot = bigramHash % EMBEDDING_DIMS;\n const bigramSign = bigramHash & 0x80000000 ? -1 : 1;\n vector[bigramSlot] += bigramSign * 0.5;\n }\n }\n\n const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));\n if (norm === 0) {\n vector[0] = 1;\n return vector;\n }\n return vector.map((value) => value / norm);\n}\n\nasync function handleEmbedding(\n _runtime: IAgentRuntime,\n params: unknown,\n): Promise<number[]> {\n return deterministicLexicalEmbedding(extractEmbeddingText(params));\n}\n\nexport const elizaClassicPlugin: Plugin = {\n name: \"eliza-classic\",\n description: \"Deterministic offline ELIZA-style text responses.\",\n priority: 200,\n models: {\n [ModelType.TEXT_NANO]: handleText,\n [ModelType.TEXT_LARGE]: handleText,\n [ModelType.TEXT_MEDIUM]: handleText,\n [ModelType.TEXT_SMALL]: handleText,\n [ModelType.TEXT_MEGA]: handleText,\n [ModelType.RESPONSE_HANDLER]: handleText,\n [ModelType.ACTION_PLANNER]: handleText,\n [ModelType.TEXT_COMPLETION]: handleText,\n [ModelType.TEXT_EMBEDDING]: handleEmbedding,\n },\n};\n\nexport const plugin = elizaClassicPlugin;\nexport default elizaClassicPlugin;\n",
6
+ "import elizaClassicPlugin from \"./index\";\n\nexport * from \"./index\";\nexport default elizaClassicPlugin;\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "DE7F53EB5576F18464756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,8 @@
1
+ import type { Plugin } from "@elizaos/core";
2
+
3
+ export declare function getElizaGreeting(): string;
4
+ export declare function generateElizaResponse(input: string): string;
5
+ export declare function generateElizaEmbedding(input: string): number[];
6
+ export declare const elizaClassicPlugin: Plugin;
7
+ export declare const plugin: Plugin;
8
+ export default elizaClassicPlugin;
package/dist/index.js ADDED
@@ -0,0 +1,143 @@
1
+ // index.ts
2
+ import { ModelType } from "@elizaos/core";
3
+ var responses = [
4
+ { pattern: /\bmother\b/i, response: "Tell me more about your family." },
5
+ {
6
+ pattern: /\bfather\b/i,
7
+ response: "How does that make you feel about your father?"
8
+ },
9
+ { pattern: /\bfeel\b/i, response: "Do you often feel this way?" },
10
+ { pattern: /\bthink\b/i, response: "Why do you think that?" },
11
+ { pattern: /\bwant\b/i, response: "What would it mean if you got that?" },
12
+ {
13
+ pattern: /\bsad\b/i,
14
+ response: "I'm sorry to hear you're feeling sad. Can you tell me more?"
15
+ },
16
+ {
17
+ pattern: /\bhappy\b/i,
18
+ response: "That's wonderful. What's making you happy?"
19
+ },
20
+ { pattern: /\byes\b/i, response: "You seem certain. Why is that?" },
21
+ { pattern: /\bno\b/i, response: "Why not?" },
22
+ {
23
+ pattern: /\bwhy\b/i,
24
+ response: "That's a good question. What do you think?"
25
+ },
26
+ { pattern: /\bhow\b/i, response: "What approach would you suggest?" },
27
+ {
28
+ pattern: /\bwhat\b/i,
29
+ response: "What does that question mean to you?"
30
+ },
31
+ { pattern: /\bcan\b/i, response: "What makes you ask about that?" },
32
+ { pattern: /\byou\b/i, response: "We were talking about you, not me." },
33
+ { pattern: /\bI am\b/i, response: "How long have you been like that?" },
34
+ { pattern: /\bI\b/i, response: "Tell me more about yourself." },
35
+ { pattern: /.*/, response: "Please go on." }
36
+ ];
37
+ function getElizaGreeting() {
38
+ return "Hello. How are you feeling today?";
39
+ }
40
+ function extractUserMessage(prompt) {
41
+ const match = prompt.match(/(?:User|Human|You):\s*(.+?)(?:\n|$)/i);
42
+ return match?.[1]?.trim() ?? prompt.trim();
43
+ }
44
+ function generateElizaResponse(input) {
45
+ for (const entry of responses) {
46
+ if (entry.pattern.test(input))
47
+ return entry.response;
48
+ }
49
+ return "Please go on.";
50
+ }
51
+ async function handleText(_runtime, params) {
52
+ const reply = generateElizaResponse(extractUserMessage(params.prompt ?? ""));
53
+ return JSON.stringify({
54
+ thought: "Responding with deterministic ELIZA pattern matching.",
55
+ actions: ["REPLY"],
56
+ providers: [],
57
+ text: reply,
58
+ useKnowledgeProviders: false
59
+ });
60
+ }
61
+ var EMBEDDING_DIMS = 1536;
62
+ function extractEmbeddingText(params) {
63
+ if (typeof params === "string")
64
+ return params;
65
+ if (!params || typeof params !== "object")
66
+ return "";
67
+ const record = params;
68
+ for (const key of ["text", "input", "prompt", "query"]) {
69
+ const value = record[key];
70
+ if (typeof value === "string")
71
+ return value;
72
+ }
73
+ return "";
74
+ }
75
+ function hashToken(token) {
76
+ let hash = 2166136261;
77
+ for (let index = 0;index < token.length; index += 1) {
78
+ hash ^= token.charCodeAt(index);
79
+ hash = Math.imul(hash, 16777619);
80
+ }
81
+ return hash >>> 0;
82
+ }
83
+ function tokenizeForEmbedding(text) {
84
+ return text.toLowerCase().match(/[\p{L}\p{N}']+/gu) ?? [];
85
+ }
86
+ function deterministicLexicalEmbedding(text) {
87
+ const vector = Array.from({ length: EMBEDDING_DIMS }, () => 0);
88
+ const tokens = tokenizeForEmbedding(text);
89
+ if (tokens.length === 0) {
90
+ vector[0] = 1;
91
+ return vector;
92
+ }
93
+ for (let index = 0;index < tokens.length; index += 1) {
94
+ const token = tokens[index];
95
+ const tokenHash = hashToken(token);
96
+ const slot = tokenHash % EMBEDDING_DIMS;
97
+ const sign = tokenHash & 2147483648 ? -1 : 1;
98
+ vector[slot] += sign;
99
+ const next = tokens[index + 1];
100
+ if (next) {
101
+ const bigramHash = hashToken(`${token}\x00${next}`);
102
+ const bigramSlot = bigramHash % EMBEDDING_DIMS;
103
+ const bigramSign = bigramHash & 2147483648 ? -1 : 1;
104
+ vector[bigramSlot] += bigramSign * 0.5;
105
+ }
106
+ }
107
+ const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
108
+ if (norm === 0) {
109
+ vector[0] = 1;
110
+ return vector;
111
+ }
112
+ return vector.map((value) => value / norm);
113
+ }
114
+ async function handleEmbedding(_runtime, params) {
115
+ return deterministicLexicalEmbedding(extractEmbeddingText(params));
116
+ }
117
+ var elizaClassicPlugin = {
118
+ name: "eliza-classic",
119
+ description: "Deterministic offline ELIZA-style text responses.",
120
+ priority: 200,
121
+ models: {
122
+ [ModelType.TEXT_NANO]: handleText,
123
+ [ModelType.TEXT_LARGE]: handleText,
124
+ [ModelType.TEXT_MEDIUM]: handleText,
125
+ [ModelType.TEXT_SMALL]: handleText,
126
+ [ModelType.TEXT_MEGA]: handleText,
127
+ [ModelType.RESPONSE_HANDLER]: handleText,
128
+ [ModelType.ACTION_PLANNER]: handleText,
129
+ [ModelType.TEXT_COMPLETION]: handleText,
130
+ [ModelType.TEXT_EMBEDDING]: handleEmbedding
131
+ }
132
+ };
133
+ var plugin = elizaClassicPlugin;
134
+ var plugin_eliza_classic_default = elizaClassicPlugin;
135
+ export {
136
+ plugin,
137
+ getElizaGreeting,
138
+ generateElizaResponse,
139
+ elizaClassicPlugin,
140
+ plugin_eliza_classic_default as default
141
+ };
142
+
143
+ //# debugId=3DC1F90C399802C564756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../index.ts"],
4
+ "sourcesContent": [
5
+ "import type { GenerateTextParams, IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { ModelType } from \"@elizaos/core\";\n\nconst responses = [\n { pattern: /\\bmother\\b/i, response: \"Tell me more about your family.\" },\n {\n pattern: /\\bfather\\b/i,\n response: \"How does that make you feel about your father?\",\n },\n { pattern: /\\bfeel\\b/i, response: \"Do you often feel this way?\" },\n { pattern: /\\bthink\\b/i, response: \"Why do you think that?\" },\n { pattern: /\\bwant\\b/i, response: \"What would it mean if you got that?\" },\n {\n pattern: /\\bsad\\b/i,\n response: \"I'm sorry to hear you're feeling sad. Can you tell me more?\",\n },\n {\n pattern: /\\bhappy\\b/i,\n response: \"That's wonderful. What's making you happy?\",\n },\n { pattern: /\\byes\\b/i, response: \"You seem certain. Why is that?\" },\n { pattern: /\\bno\\b/i, response: \"Why not?\" },\n {\n pattern: /\\bwhy\\b/i,\n response: \"That's a good question. What do you think?\",\n },\n { pattern: /\\bhow\\b/i, response: \"What approach would you suggest?\" },\n {\n pattern: /\\bwhat\\b/i,\n response: \"What does that question mean to you?\",\n },\n { pattern: /\\bcan\\b/i, response: \"What makes you ask about that?\" },\n { pattern: /\\byou\\b/i, response: \"We were talking about you, not me.\" },\n { pattern: /\\bI am\\b/i, response: \"How long have you been like that?\" },\n { pattern: /\\bI\\b/i, response: \"Tell me more about yourself.\" },\n { pattern: /.*/, response: \"Please go on.\" },\n] as const;\n\nexport function getElizaGreeting(): string {\n return \"Hello. How are you feeling today?\";\n}\n\nfunction extractUserMessage(prompt: string): string {\n const match = prompt.match(/(?:User|Human|You):\\s*(.+?)(?:\\n|$)/i);\n return match?.[1]?.trim() ?? prompt.trim();\n}\n\nexport function generateElizaResponse(input: string): string {\n for (const entry of responses) {\n if (entry.pattern.test(input)) return entry.response;\n }\n return \"Please go on.\";\n}\n\nasync function handleText(\n _runtime: IAgentRuntime,\n params: GenerateTextParams,\n): Promise<string> {\n const reply = generateElizaResponse(extractUserMessage(params.prompt ?? \"\"));\n return JSON.stringify({\n thought: \"Responding with deterministic ELIZA pattern matching.\",\n actions: [\"REPLY\"],\n providers: [],\n text: reply,\n useKnowledgeProviders: false,\n });\n}\n\nconst EMBEDDING_DIMS = 1536;\n\nfunction extractEmbeddingText(params: unknown): string {\n if (typeof params === \"string\") return params;\n if (!params || typeof params !== \"object\") return \"\";\n const record = params as Record<string, unknown>;\n for (const key of [\"text\", \"input\", \"prompt\", \"query\"]) {\n const value = record[key];\n if (typeof value === \"string\") return value;\n }\n return \"\";\n}\n\nfunction hashToken(token: string): number {\n let hash = 0x811c9dc5;\n for (let index = 0; index < token.length; index += 1) {\n hash ^= token.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193);\n }\n return hash >>> 0;\n}\n\nfunction tokenizeForEmbedding(text: string): string[] {\n return text.toLowerCase().match(/[\\p{L}\\p{N}']+/gu) ?? [];\n}\n\nfunction deterministicLexicalEmbedding(text: string): number[] {\n const vector = Array.from({ length: EMBEDDING_DIMS }, () => 0);\n const tokens = tokenizeForEmbedding(text);\n\n if (tokens.length === 0) {\n vector[0] = 1;\n return vector;\n }\n\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n const tokenHash = hashToken(token);\n const slot = tokenHash % EMBEDDING_DIMS;\n const sign = tokenHash & 0x80000000 ? -1 : 1;\n vector[slot] += sign;\n\n const next = tokens[index + 1];\n if (next) {\n const bigramHash = hashToken(`${token}\\u0000${next}`);\n const bigramSlot = bigramHash % EMBEDDING_DIMS;\n const bigramSign = bigramHash & 0x80000000 ? -1 : 1;\n vector[bigramSlot] += bigramSign * 0.5;\n }\n }\n\n const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));\n if (norm === 0) {\n vector[0] = 1;\n return vector;\n }\n return vector.map((value) => value / norm);\n}\n\nasync function handleEmbedding(\n _runtime: IAgentRuntime,\n params: unknown,\n): Promise<number[]> {\n return deterministicLexicalEmbedding(extractEmbeddingText(params));\n}\n\nexport const elizaClassicPlugin: Plugin = {\n name: \"eliza-classic\",\n description: \"Deterministic offline ELIZA-style text responses.\",\n priority: 200,\n models: {\n [ModelType.TEXT_NANO]: handleText,\n [ModelType.TEXT_LARGE]: handleText,\n [ModelType.TEXT_MEDIUM]: handleText,\n [ModelType.TEXT_SMALL]: handleText,\n [ModelType.TEXT_MEGA]: handleText,\n [ModelType.RESPONSE_HANDLER]: handleText,\n [ModelType.ACTION_PLANNER]: handleText,\n [ModelType.TEXT_COMPLETION]: handleText,\n [ModelType.TEXT_EMBEDDING]: handleEmbedding,\n },\n};\n\nexport const plugin = elizaClassicPlugin;\nexport default elizaClassicPlugin;\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "3DC1F90C399802C564756E2164756E21",
9
+ "names": []
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-eliza-classic",
3
- "version": "2.0.3-beta.5",
3
+ "version": "2.0.3-beta.7",
4
4
  "type": "module",
5
5
  "description": "Deterministic ELIZA-style pattern matching (browser + Node); ships compiled ESM in dist/.",
6
6
  "main": "./dist/index.js",
@@ -45,7 +45,7 @@
45
45
  "test": "vitest run --config vitest.config.ts"
46
46
  },
47
47
  "dependencies": {
48
- "@elizaos/core": "2.0.3-beta.5"
48
+ "@elizaos/core": "2.0.3-beta.7"
49
49
  },
50
50
  "devDependencies": {
51
51
  "tsup": "8.5.1",
@@ -53,7 +53,7 @@
53
53
  "vitest": "^4.0.18"
54
54
  },
55
55
  "peerDependencies": {
56
- "@elizaos/core": "2.0.3-beta.5"
56
+ "@elizaos/core": "2.0.3-beta.7"
57
57
  },
58
58
  "publishConfig": {
59
59
  "access": "public"
@@ -63,5 +63,5 @@
63
63
  "url": "git+https://github.com/elizaos/eliza.git",
64
64
  "directory": "plugins/plugin-eliza-classic"
65
65
  },
66
- "gitHead": "ff6157011c9459670021cc28a6797592a78b8817"
66
+ "gitHead": "61094f10458d11055c75b3dd0bae374e3f66bac5"
67
67
  }