opc-agent 4.1.24 → 4.2.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 (103) hide show
  1. package/CHANGELOG.md +59 -119
  2. package/COMPETITIVE-GAP.md +92 -92
  3. package/CONTRIBUTING.md +36 -36
  4. package/README.md +290 -290
  5. package/README.zh-CN.md +269 -269
  6. package/dist/channels/telegram.d.ts +0 -5
  7. package/dist/channels/telegram.d.ts.map +1 -1
  8. package/dist/channels/telegram.js +0 -108
  9. package/dist/channels/telegram.js.map +1 -1
  10. package/dist/channels/voice.d.ts +97 -71
  11. package/dist/channels/voice.d.ts.map +1 -1
  12. package/dist/channels/voice.js +347 -369
  13. package/dist/channels/voice.js.map +1 -1
  14. package/dist/channels/web.d.ts.map +1 -1
  15. package/dist/channels/web.js +2 -8
  16. package/dist/channels/web.js.map +1 -1
  17. package/dist/channels/wechat.js +6 -6
  18. package/dist/cli/chat.d.ts +1 -4
  19. package/dist/cli/chat.d.ts.map +1 -1
  20. package/dist/cli/chat.js +73 -680
  21. package/dist/cli/chat.js.map +1 -1
  22. package/dist/cli/setup.js +1 -1
  23. package/dist/cli/setup.js.map +1 -1
  24. package/dist/cli.js +280 -373
  25. package/dist/cli.js.map +1 -1
  26. package/dist/core/agent.d.ts +0 -1
  27. package/dist/core/agent.d.ts.map +1 -1
  28. package/dist/core/agent.js +0 -3
  29. package/dist/core/agent.js.map +1 -1
  30. package/dist/core/runtime.d.ts.map +1 -1
  31. package/dist/core/runtime.js +22 -192
  32. package/dist/core/runtime.js.map +1 -1
  33. package/dist/deploy/index.js +56 -56
  34. package/dist/doctor.d.ts +0 -1
  35. package/dist/doctor.d.ts.map +1 -1
  36. package/dist/doctor.js +10 -155
  37. package/dist/doctor.js.map +1 -1
  38. package/dist/index.d.ts +3 -4
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +9 -9
  41. package/dist/index.js.map +1 -1
  42. package/dist/memory/deepbrain.d.ts +1 -1
  43. package/dist/memory/deepbrain.d.ts.map +1 -1
  44. package/dist/memory/deepbrain.js +4 -95
  45. package/dist/memory/deepbrain.js.map +1 -1
  46. package/dist/memory/index.d.ts +0 -2
  47. package/dist/memory/index.d.ts.map +1 -1
  48. package/dist/memory/index.js +1 -3
  49. package/dist/memory/index.js.map +1 -1
  50. package/dist/memory/user-profiler.d.ts +0 -8
  51. package/dist/memory/user-profiler.d.ts.map +1 -1
  52. package/dist/memory/user-profiler.js +0 -89
  53. package/dist/memory/user-profiler.js.map +1 -1
  54. package/dist/scheduler/cron-engine.d.ts.map +1 -1
  55. package/dist/scheduler/cron-engine.js +36 -3
  56. package/dist/scheduler/cron-engine.js.map +1 -1
  57. package/dist/skills/auto-learn.d.ts.map +1 -1
  58. package/dist/skills/auto-learn.js +11 -65
  59. package/dist/skills/auto-learn.js.map +1 -1
  60. package/dist/skills/builtin/index.d.ts.map +1 -1
  61. package/dist/skills/builtin/index.js +30 -163
  62. package/dist/skills/builtin/index.js.map +1 -1
  63. package/dist/skills/types.d.ts +1 -1
  64. package/dist/skills/types.d.ts.map +1 -1
  65. package/dist/skills/types.js +0 -1
  66. package/dist/skills/types.js.map +1 -1
  67. package/dist/studio/server.d.ts +0 -1
  68. package/dist/studio/server.d.ts.map +1 -1
  69. package/dist/studio/server.js +12 -142
  70. package/dist/studio/server.js.map +1 -1
  71. package/dist/studio-ui/index.html +40 -359
  72. package/dist/ui/components.js +105 -105
  73. package/examples/README.md +22 -22
  74. package/examples/basic-agent.ts +90 -90
  75. package/examples/brain-integration.ts +71 -71
  76. package/examples/multi-channel.ts +74 -74
  77. package/install.ps1 +127 -127
  78. package/install.sh +154 -154
  79. package/models.json +164 -164
  80. package/package.json +63 -66
  81. package/scripts/install.ps1 +31 -31
  82. package/scripts/install.sh +40 -40
  83. package/templates/ecommerce-assistant/README.md +45 -45
  84. package/templates/ecommerce-assistant/oad.yaml +47 -47
  85. package/templates/tech-support/README.md +43 -43
  86. package/templates/tech-support/oad.yaml +45 -45
  87. package/.opc/memory.db +0 -0
  88. package/dist/core/model-recommender.d.ts +0 -40
  89. package/dist/core/model-recommender.d.ts.map +0 -1
  90. package/dist/core/model-recommender.js +0 -186
  91. package/dist/core/model-recommender.js.map +0 -1
  92. package/dist/memory/evolve-engine.d.ts +0 -113
  93. package/dist/memory/evolve-engine.d.ts.map +0 -1
  94. package/dist/memory/evolve-engine.js +0 -549
  95. package/dist/memory/evolve-engine.js.map +0 -1
  96. package/dist/memory/sqlite-store.d.ts +0 -40
  97. package/dist/memory/sqlite-store.d.ts.map +0 -1
  98. package/dist/memory/sqlite-store.js +0 -269
  99. package/dist/memory/sqlite-store.js.map +0 -1
  100. package/dist/scheduler/proactive.d.ts +0 -62
  101. package/dist/scheduler/proactive.d.ts.map +0 -1
  102. package/dist/scheduler/proactive.js +0 -185
  103. package/dist/scheduler/proactive.js.map +0 -1
@@ -1,269 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SQLiteStore = void 0;
37
- /**
38
- * SQLite-backed persistent memory store using sql.js (pure JS, no native deps).
39
- * Supports conversation history with FTS5 full-text search.
40
- */
41
- const fs = __importStar(require("fs"));
42
- const path = __importStar(require("path"));
43
- let initSqlJs;
44
- try {
45
- initSqlJs = require('sql.js');
46
- }
47
- catch {
48
- // sql.js not installed — will fail gracefully at construction
49
- }
50
- class SQLiteStore {
51
- db = null;
52
- dbPath;
53
- maxMessages;
54
- kvCache = new Map();
55
- ready;
56
- constructor(options = {}) {
57
- this.dbPath = options.dbPath ?? path.resolve('.opc', 'memory.db');
58
- this.maxMessages = options.maxMessagesPerSession ?? 1000;
59
- this.ready = this.init();
60
- }
61
- async init() {
62
- if (!initSqlJs) {
63
- throw new Error('sql.js not installed. Run: npm install sql.js');
64
- }
65
- const dir = path.dirname(this.dbPath);
66
- if (!fs.existsSync(dir))
67
- fs.mkdirSync(dir, { recursive: true });
68
- const SQL = await initSqlJs();
69
- // Load existing DB or create new
70
- if (fs.existsSync(this.dbPath)) {
71
- const buf = fs.readFileSync(this.dbPath);
72
- this.db = new SQL.Database(buf);
73
- }
74
- else {
75
- this.db = new SQL.Database();
76
- }
77
- // Create tables
78
- this.db.run(`
79
- CREATE TABLE IF NOT EXISTS messages (
80
- id INTEGER PRIMARY KEY AUTOINCREMENT,
81
- session_id TEXT NOT NULL,
82
- msg_id TEXT,
83
- role TEXT NOT NULL,
84
- content TEXT NOT NULL,
85
- timestamp INTEGER NOT NULL,
86
- metadata TEXT,
87
- created_at TEXT DEFAULT (datetime('now'))
88
- )
89
- `);
90
- this.db.run(`
91
- CREATE INDEX IF NOT EXISTS idx_messages_session ON messages(session_id)
92
- `);
93
- this.db.run(`
94
- CREATE TABLE IF NOT EXISTS kv (
95
- key TEXT PRIMARY KEY,
96
- value TEXT NOT NULL
97
- )
98
- `);
99
- // FTS5 for full-text search (may not be available in all sql.js builds)
100
- try {
101
- this.db.run(`
102
- CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
103
- content,
104
- content_rowid='id',
105
- content='messages'
106
- )
107
- `);
108
- // Triggers to keep FTS in sync
109
- this.db.run(`
110
- CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
111
- INSERT INTO messages_fts(rowid, content) VALUES (new.id, new.content);
112
- END
113
- `);
114
- this.db.run(`
115
- CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
116
- INSERT INTO messages_fts(messages_fts, rowid, content) VALUES('delete', old.id, old.content);
117
- END
118
- `);
119
- this._hasFTS = true;
120
- }
121
- catch {
122
- // FTS5 not available — search will use LIKE fallback
123
- this._hasFTS = false;
124
- }
125
- // Load KV into cache
126
- const kvRows = this.db.exec('SELECT key, value FROM kv');
127
- if (kvRows.length > 0) {
128
- for (const row of kvRows[0].values) {
129
- try {
130
- this.kvCache.set(row[0], JSON.parse(row[1]));
131
- }
132
- catch {
133
- this.kvCache.set(row[0], row[1]);
134
- }
135
- }
136
- }
137
- this.save();
138
- }
139
- save() {
140
- try {
141
- const data = this.db.export();
142
- const buffer = Buffer.from(data);
143
- fs.writeFileSync(this.dbPath, buffer);
144
- }
145
- catch { /* ignore save errors */ }
146
- }
147
- async get(key) {
148
- await this.ready;
149
- return this.kvCache.get(key);
150
- }
151
- async set(key, value) {
152
- await this.ready;
153
- this.kvCache.set(key, value);
154
- const json = JSON.stringify(value);
155
- this.db.run('INSERT OR REPLACE INTO kv(key, value) VALUES(?, ?)', [key, json]);
156
- this.save();
157
- }
158
- async getConversation(sessionId) {
159
- await this.ready;
160
- const result = this.db.exec('SELECT msg_id, role, content, timestamp, metadata FROM messages WHERE session_id = ? ORDER BY id ASC', [sessionId]);
161
- if (result.length === 0)
162
- return [];
163
- return result[0].values.map((row) => ({
164
- id: row[0] || `msg_${row[3]}`,
165
- role: row[1],
166
- content: row[2],
167
- timestamp: row[3],
168
- metadata: row[4] ? JSON.parse(row[4]) : undefined,
169
- }));
170
- }
171
- async addMessage(sessionId, message) {
172
- await this.ready;
173
- this.db.run('INSERT INTO messages(session_id, msg_id, role, content, timestamp, metadata) VALUES(?, ?, ?, ?, ?, ?)', [
174
- sessionId,
175
- message.id,
176
- message.role,
177
- message.content,
178
- message.timestamp,
179
- message.metadata ? JSON.stringify(message.metadata) : null,
180
- ]);
181
- // Prune if over limit
182
- const countResult = this.db.exec('SELECT COUNT(*) FROM messages WHERE session_id = ?', [sessionId]);
183
- if (countResult.length > 0) {
184
- const count = countResult[0].values[0][0];
185
- if (count > this.maxMessages) {
186
- const excess = count - this.maxMessages;
187
- this.db.run(`DELETE FROM messages WHERE id IN (
188
- SELECT id FROM messages WHERE session_id = ? ORDER BY id ASC LIMIT ?
189
- )`, [sessionId, excess]);
190
- }
191
- }
192
- this.save();
193
- }
194
- async clear(sessionId) {
195
- await this.ready;
196
- if (sessionId) {
197
- this.db.run('DELETE FROM messages WHERE session_id = ?', [sessionId]);
198
- }
199
- else {
200
- this.db.run('DELETE FROM messages');
201
- this.db.run('DELETE FROM kv');
202
- this.kvCache.clear();
203
- }
204
- this.save();
205
- }
206
- /**
207
- * Full-text search across all conversations.
208
- * Returns matching messages ranked by relevance.
209
- */
210
- async search(query, limit = 20) {
211
- await this.ready;
212
- let result;
213
- if (this._hasFTS) {
214
- result = this.db.exec(`SELECT m.msg_id, m.role, m.content, m.timestamp, m.metadata, m.session_id
215
- FROM messages_fts f
216
- JOIN messages m ON f.rowid = m.id
217
- WHERE messages_fts MATCH ?
218
- ORDER BY rank
219
- LIMIT ?`, [query, limit]);
220
- }
221
- else {
222
- // LIKE fallback
223
- const likeQuery = `%${query}%`;
224
- result = this.db.exec(`SELECT msg_id, role, content, timestamp, metadata, session_id
225
- FROM messages
226
- WHERE content LIKE ?
227
- ORDER BY timestamp DESC
228
- LIMIT ?`, [likeQuery, limit]);
229
- }
230
- if (result.length === 0)
231
- return [];
232
- return result[0].values.map((row) => ({
233
- id: row[0] || `msg_${row[3]}`,
234
- role: row[1],
235
- content: row[2],
236
- timestamp: row[3],
237
- metadata: { ...(row[4] ? JSON.parse(row[4]) : {}), sessionId: row[5] },
238
- }));
239
- }
240
- /**
241
- * Get conversation stats.
242
- */
243
- async stats() {
244
- await this.ready;
245
- const msgResult = this.db.exec('SELECT COUNT(*) FROM messages');
246
- const sessResult = this.db.exec('SELECT COUNT(DISTINCT session_id) FROM messages');
247
- const totalMessages = msgResult.length > 0 ? msgResult[0].values[0][0] : 0;
248
- const sessions = sessResult.length > 0 ? sessResult[0].values[0][0] : 0;
249
- let dbSizeKB = 0;
250
- try {
251
- const stat = fs.statSync(this.dbPath);
252
- dbSizeKB = Math.round(stat.size / 1024);
253
- }
254
- catch { /* ignore */ }
255
- return { totalMessages, sessions, dbSizeKB };
256
- }
257
- /**
258
- * Close the database (for graceful shutdown).
259
- */
260
- async close() {
261
- if (this.db) {
262
- this.save();
263
- this.db.close();
264
- this.db = null;
265
- }
266
- }
267
- }
268
- exports.SQLiteStore = SQLiteStore;
269
- //# sourceMappingURL=sqlite-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../src/memory/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Proactive Agent — enables the agent to initiate conversations
3
- * rather than only responding to user messages.
4
- *
5
- * Triggers:
6
- * 1. Scheduled check-ins (morning summary, task follow-ups)
7
- * 2. Event-driven (pending task deadlines, reminder triggers)
8
- * 3. Idle detection (offer help after period of inactivity)
9
- */
10
- export interface ProactiveConfig {
11
- enabled: boolean;
12
- /** Morning summary cron (default: 9:00) */
13
- morningCheckIn?: string;
14
- /** Evening wrap-up cron (default: 18:00) */
15
- eveningWrapUp?: string;
16
- /** Idle timeout in minutes before offering help */
17
- idleTimeoutMinutes?: number;
18
- /** Max proactive messages per day */
19
- maxDailyMessages?: number;
20
- /** Channels to send proactive messages to */
21
- channels?: string[];
22
- }
23
- export interface ProactiveMessage {
24
- type: 'check-in' | 'follow-up' | 'reminder' | 'idle-offer' | 'insight';
25
- content: string;
26
- timestamp: number;
27
- channel?: string;
28
- }
29
- export declare class ProactiveAgent {
30
- private config;
31
- private dailyMessageCount;
32
- private lastResetDate;
33
- private lastUserActivity;
34
- private pendingTasks;
35
- private stateFile;
36
- private messageHandler?;
37
- constructor(config?: Partial<ProactiveConfig>, stateDir?: string);
38
- /** Register handler for outgoing proactive messages */
39
- onMessage(handler: (msg: ProactiveMessage) => void | Promise<void>): void;
40
- /** Call when user sends a message (resets idle timer) */
41
- recordUserActivity(): void;
42
- /** Add a pending task for follow-up */
43
- addPendingTask(task: string): void;
44
- /** Remove completed task */
45
- completeTask(task: string): void;
46
- /** Generate morning check-in message */
47
- generateMorningCheckIn(): Promise<string>;
48
- /** Generate evening wrap-up message */
49
- generateEveningWrapUp(): Promise<string>;
50
- /** Check if idle and should offer help */
51
- checkIdle(): Promise<ProactiveMessage | null>;
52
- /** Send a proactive message through the registered handler */
53
- send(msg: ProactiveMessage): Promise<boolean>;
54
- /** Check if we can send more proactive messages today */
55
- private canSend;
56
- private loadState;
57
- private saveState;
58
- getConfig(): ProactiveConfig;
59
- getPendingTasks(): string[];
60
- getDailyMessageCount(): number;
61
- }
62
- //# sourceMappingURL=proactive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proactive.d.ts","sourceRoot":"","sources":["../../src/scheduler/proactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAC,CAAkD;gBAE7D,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,SAAS;IAMhE,uDAAuD;IACvD,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIzE,yDAAyD;IACzD,kBAAkB,IAAI,IAAI;IAI1B,uCAAuC;IACvC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC,4BAA4B;IAC5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,wCAAwC;IAClC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgB/C,uCAAuC;IACjC,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgB9C,0CAA0C;IACpC,SAAS,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAenD,8DAA8D;IACxD,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnD,yDAAyD;IACzD,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;IAajB,SAAS,IAAI,eAAe;IAC5B,eAAe,IAAI,MAAM,EAAE;IAC3B,oBAAoB,IAAI,MAAM;CAC/B"}
@@ -1,185 +0,0 @@
1
- "use strict";
2
- /**
3
- * Proactive Agent — enables the agent to initiate conversations
4
- * rather than only responding to user messages.
5
- *
6
- * Triggers:
7
- * 1. Scheduled check-ins (morning summary, task follow-ups)
8
- * 2. Event-driven (pending task deadlines, reminder triggers)
9
- * 3. Idle detection (offer help after period of inactivity)
10
- */
11
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- var desc = Object.getOwnPropertyDescriptor(m, k);
14
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
- desc = { enumerable: true, get: function() { return m[k]; } };
16
- }
17
- Object.defineProperty(o, k2, desc);
18
- }) : (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- o[k2] = m[k];
21
- }));
22
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
- Object.defineProperty(o, "default", { enumerable: true, value: v });
24
- }) : function(o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = (this && this.__importStar) || (function () {
28
- var ownKeys = function(o) {
29
- ownKeys = Object.getOwnPropertyNames || function (o) {
30
- var ar = [];
31
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
- return ar;
33
- };
34
- return ownKeys(o);
35
- };
36
- return function (mod) {
37
- if (mod && mod.__esModule) return mod;
38
- var result = {};
39
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
- __setModuleDefault(result, mod);
41
- return result;
42
- };
43
- })();
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.ProactiveAgent = void 0;
46
- const fs = __importStar(require("fs"));
47
- const path = __importStar(require("path"));
48
- const DEFAULT_CONFIG = {
49
- enabled: true,
50
- morningCheckIn: '0 9 * * *',
51
- eveningWrapUp: '0 18 * * *',
52
- idleTimeoutMinutes: 120,
53
- maxDailyMessages: 5,
54
- };
55
- class ProactiveAgent {
56
- config;
57
- dailyMessageCount = 0;
58
- lastResetDate = '';
59
- lastUserActivity = Date.now();
60
- pendingTasks = [];
61
- stateFile;
62
- messageHandler;
63
- constructor(config, stateDir = '.opc') {
64
- this.config = { ...DEFAULT_CONFIG, ...config };
65
- this.stateFile = path.resolve(stateDir, 'proactive-state.json');
66
- this.loadState();
67
- }
68
- /** Register handler for outgoing proactive messages */
69
- onMessage(handler) {
70
- this.messageHandler = handler;
71
- }
72
- /** Call when user sends a message (resets idle timer) */
73
- recordUserActivity() {
74
- this.lastUserActivity = Date.now();
75
- }
76
- /** Add a pending task for follow-up */
77
- addPendingTask(task) {
78
- this.pendingTasks.push(task);
79
- this.saveState();
80
- }
81
- /** Remove completed task */
82
- completeTask(task) {
83
- this.pendingTasks = this.pendingTasks.filter(t => t !== task);
84
- this.saveState();
85
- }
86
- /** Generate morning check-in message */
87
- async generateMorningCheckIn() {
88
- const date = new Date().toLocaleDateString('zh-CN', { weekday: 'long', month: 'long', day: 'numeric' });
89
- const parts = [`☀️ 早上好!今天是${date}。`];
90
- if (this.pendingTasks.length > 0) {
91
- parts.push(`\n📋 你有 ${this.pendingTasks.length} 个待办事项:`);
92
- this.pendingTasks.slice(0, 5).forEach((task, i) => {
93
- parts.push(` ${i + 1}. ${task}`);
94
- });
95
- }
96
- else {
97
- parts.push('\n✅ 目前没有待办事项,今天想做什么?');
98
- }
99
- return parts.join('\n');
100
- }
101
- /** Generate evening wrap-up message */
102
- async generateEveningWrapUp() {
103
- const parts = ['🌙 今日小结'];
104
- if (this.pendingTasks.length > 0) {
105
- parts.push(`\n⏳ 还有 ${this.pendingTasks.length} 个未完成的任务:`);
106
- this.pendingTasks.slice(0, 3).forEach((task, i) => {
107
- parts.push(` ${i + 1}. ${task}`);
108
- });
109
- parts.push('\n明天继续加油!💪');
110
- }
111
- else {
112
- parts.push('\n🎉 所有任务都完成了,休息好!');
113
- }
114
- return parts.join('\n');
115
- }
116
- /** Check if idle and should offer help */
117
- async checkIdle() {
118
- if (!this.config.idleTimeoutMinutes)
119
- return null;
120
- const idleMs = Date.now() - this.lastUserActivity;
121
- const timeoutMs = this.config.idleTimeoutMinutes * 60 * 1000;
122
- if (idleMs > timeoutMs && this.canSend()) {
123
- return {
124
- type: 'idle-offer',
125
- content: '👋 有一阵没聊了,需要我帮你做点什么吗?',
126
- timestamp: Date.now(),
127
- };
128
- }
129
- return null;
130
- }
131
- /** Send a proactive message through the registered handler */
132
- async send(msg) {
133
- if (!this.canSend())
134
- return false;
135
- if (this.messageHandler) {
136
- await this.messageHandler(msg);
137
- this.dailyMessageCount++;
138
- this.saveState();
139
- return true;
140
- }
141
- return false;
142
- }
143
- /** Check if we can send more proactive messages today */
144
- canSend() {
145
- if (!this.config.enabled)
146
- return false;
147
- const today = new Date().toISOString().slice(0, 10);
148
- if (today !== this.lastResetDate) {
149
- this.dailyMessageCount = 0;
150
- this.lastResetDate = today;
151
- }
152
- return this.dailyMessageCount < (this.config.maxDailyMessages ?? 5);
153
- }
154
- loadState() {
155
- try {
156
- if (fs.existsSync(this.stateFile)) {
157
- const data = JSON.parse(fs.readFileSync(this.stateFile, 'utf-8'));
158
- this.dailyMessageCount = data.dailyMessageCount ?? 0;
159
- this.lastResetDate = data.lastResetDate ?? '';
160
- this.pendingTasks = data.pendingTasks ?? [];
161
- this.lastUserActivity = data.lastUserActivity ?? Date.now();
162
- }
163
- }
164
- catch { /* ignore */ }
165
- }
166
- saveState() {
167
- try {
168
- const dir = path.dirname(this.stateFile);
169
- if (!fs.existsSync(dir))
170
- fs.mkdirSync(dir, { recursive: true });
171
- fs.writeFileSync(this.stateFile, JSON.stringify({
172
- dailyMessageCount: this.dailyMessageCount,
173
- lastResetDate: this.lastResetDate,
174
- pendingTasks: this.pendingTasks,
175
- lastUserActivity: this.lastUserActivity,
176
- }, null, 2));
177
- }
178
- catch { /* ignore */ }
179
- }
180
- getConfig() { return { ...this.config }; }
181
- getPendingTasks() { return [...this.pendingTasks]; }
182
- getDailyMessageCount() { return this.dailyMessageCount; }
183
- }
184
- exports.ProactiveAgent = ProactiveAgent;
185
- //# sourceMappingURL=proactive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proactive.js","sourceRoot":"","sources":["../../src/scheduler/proactive.ts"],"names":[],"mappings":"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"}