zora-agent 0.9.4 → 0.9.6
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/CHANGELOG.md +1 -1
- package/README.md +103 -92
- package/dist/cli/audit-commands.d.ts.map +1 -1
- package/dist/cli/audit-commands.js +3 -1
- package/dist/cli/audit-commands.js.map +1 -1
- package/dist/cli/daemon.js +86 -28
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/edit-commands.d.ts.map +1 -1
- package/dist/cli/edit-commands.js +3 -1
- package/dist/cli/edit-commands.js.map +1 -1
- package/dist/cli/hook-commands.d.ts +9 -0
- package/dist/cli/hook-commands.d.ts.map +1 -0
- package/dist/cli/hook-commands.js +106 -0
- package/dist/cli/hook-commands.js.map +1 -0
- package/dist/cli/index.js +87 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init-command.d.ts.map +1 -1
- package/dist/cli/init-command.js +108 -9
- package/dist/cli/init-command.js.map +1 -1
- package/dist/cli/memory-commands.d.ts +1 -1
- package/dist/cli/memory-commands.d.ts.map +1 -1
- package/dist/cli/memory-commands.js +213 -1
- package/dist/cli/memory-commands.js.map +1 -1
- package/dist/cli/presets.d.ts.map +1 -1
- package/dist/cli/presets.js +2 -1
- package/dist/cli/presets.js.map +1 -1
- package/dist/cli/skill-commands.d.ts.map +1 -1
- package/dist/cli/skill-commands.js +4 -2
- package/dist/cli/skill-commands.js.map +1 -1
- package/dist/cli/steer-commands.d.ts.map +1 -1
- package/dist/cli/steer-commands.js +6 -4
- package/dist/cli/steer-commands.js.map +1 -1
- package/dist/cli/team-commands.d.ts.map +1 -1
- package/dist/cli/team-commands.js +3 -1
- package/dist/cli/team-commands.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +12 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/loader.d.ts +23 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +64 -3
- package/dist/config/loader.js.map +1 -1
- package/dist/config/policy-loader.d.ts +14 -0
- package/dist/config/policy-loader.d.ts.map +1 -1
- package/dist/config/policy-loader.js +33 -0
- package/dist/config/policy-loader.js.map +1 -1
- package/dist/dashboard/frontend/dist/assets/index-BcOGj1EF.css +1 -0
- package/dist/dashboard/frontend/dist/assets/index-BtiFO9YN.js +261 -0
- package/dist/dashboard/frontend/dist/assets/index-Cfjy5acU.css +1 -0
- package/dist/dashboard/frontend/dist/assets/index-D41hcjgc.js +253 -0
- package/dist/dashboard/frontend/dist/assets/index-D83BawFd.css +1 -0
- package/dist/dashboard/frontend/dist/assets/index-DAODjoxu.css +1 -0
- package/dist/dashboard/frontend/dist/assets/index-DB-Eu5oV.js +253 -0
- package/dist/dashboard/frontend/dist/assets/index-W0VVEDu6.js +253 -0
- package/dist/dashboard/frontend/dist/index.html +17 -0
- package/dist/dashboard/server.d.ts +19 -2
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +121 -20
- package/dist/dashboard/server.js.map +1 -1
- package/dist/hooks/hook-runner.d.ts +55 -0
- package/dist/hooks/hook-runner.d.ts.map +1 -0
- package/dist/hooks/hook-runner.js +120 -0
- package/dist/hooks/hook-runner.js.map +1 -0
- package/dist/hooks/hook-types.d.ts +82 -0
- package/dist/hooks/hook-types.d.ts.map +1 -0
- package/dist/hooks/hook-types.js +20 -0
- package/dist/hooks/hook-types.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/memory/context-compressor.d.ts +108 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +307 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/memory-manager.d.ts +88 -4
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +299 -7
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/observation-store.d.ts +75 -0
- package/dist/memory/observation-store.d.ts.map +1 -0
- package/dist/memory/observation-store.js +162 -0
- package/dist/memory/observation-store.js.map +1 -0
- package/dist/memory/observer-worker.d.ts +34 -0
- package/dist/memory/observer-worker.d.ts.map +1 -0
- package/dist/memory/observer-worker.js +161 -0
- package/dist/memory/observer-worker.js.map +1 -0
- package/dist/memory/reflector-worker.d.ts +40 -0
- package/dist/memory/reflector-worker.d.ts.map +1 -0
- package/dist/memory/reflector-worker.js +185 -0
- package/dist/memory/reflector-worker.js.map +1 -0
- package/dist/memory/salience-scorer.d.ts +16 -6
- package/dist/memory/salience-scorer.d.ts.map +1 -1
- package/dist/memory/salience-scorer.js +42 -22
- package/dist/memory/salience-scorer.js.map +1 -1
- package/dist/memory/structured-memory.d.ts +36 -1
- package/dist/memory/structured-memory.d.ts.map +1 -1
- package/dist/memory/structured-memory.js +207 -8
- package/dist/memory/structured-memory.js.map +1 -1
- package/dist/memory/token-estimator.d.ts +31 -0
- package/dist/memory/token-estimator.d.ts.map +1 -0
- package/dist/memory/token-estimator.js +77 -0
- package/dist/memory/token-estimator.js.map +1 -0
- package/dist/memory/validation-pipeline.d.ts +37 -0
- package/dist/memory/validation-pipeline.d.ts.map +1 -0
- package/dist/memory/validation-pipeline.js +106 -0
- package/dist/memory/validation-pipeline.js.map +1 -0
- package/dist/orchestrator/auth-monitor.d.ts.map +1 -1
- package/dist/orchestrator/auth-monitor.js +3 -1
- package/dist/orchestrator/auth-monitor.js.map +1 -1
- package/dist/orchestrator/execution-loop.d.ts +23 -0
- package/dist/orchestrator/execution-loop.d.ts.map +1 -1
- package/dist/orchestrator/execution-loop.js +60 -19
- package/dist/orchestrator/execution-loop.js.map +1 -1
- package/dist/orchestrator/failover-controller.d.ts +26 -2
- package/dist/orchestrator/failover-controller.d.ts.map +1 -1
- package/dist/orchestrator/failover-controller.js +143 -23
- package/dist/orchestrator/failover-controller.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +70 -7
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +416 -92
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/retry-queue.d.ts.map +1 -1
- package/dist/orchestrator/retry-queue.js +24 -9
- package/dist/orchestrator/retry-queue.js.map +1 -1
- package/dist/orchestrator/router.d.ts +16 -1
- package/dist/orchestrator/router.d.ts.map +1 -1
- package/dist/orchestrator/router.js +79 -20
- package/dist/orchestrator/router.js.map +1 -1
- package/dist/orchestrator/session-manager.d.ts +26 -1
- package/dist/orchestrator/session-manager.d.ts.map +1 -1
- package/dist/orchestrator/session-manager.js +88 -4
- package/dist/orchestrator/session-manager.js.map +1 -1
- package/dist/providers/circuit-breaker.d.ts +78 -0
- package/dist/providers/circuit-breaker.d.ts.map +1 -0
- package/dist/providers/circuit-breaker.js +129 -0
- package/dist/providers/circuit-breaker.js.map +1 -0
- package/dist/providers/claude-provider.d.ts +27 -11
- package/dist/providers/claude-provider.d.ts.map +1 -1
- package/dist/providers/claude-provider.js +161 -46
- package/dist/providers/claude-provider.js.map +1 -1
- package/dist/providers/gemini-provider.d.ts +9 -1
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +97 -48
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama-provider.d.ts +7 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +89 -18
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/routines/heartbeat.d.ts +10 -2
- package/dist/routines/heartbeat.d.ts.map +1 -1
- package/dist/routines/heartbeat.js +42 -5
- package/dist/routines/heartbeat.js.map +1 -1
- package/dist/routines/routine-manager.d.ts.map +1 -1
- package/dist/routines/routine-manager.js +22 -15
- package/dist/routines/routine-manager.js.map +1 -1
- package/dist/security/audit-logger.d.ts.map +1 -1
- package/dist/security/audit-logger.js +5 -7
- package/dist/security/audit-logger.js.map +1 -1
- package/dist/security/policy-engine.d.ts +28 -17
- package/dist/security/policy-engine.d.ts.map +1 -1
- package/dist/security/policy-engine.js +42 -185
- package/dist/security/policy-engine.js.map +1 -1
- package/dist/security/policy-serializer.d.ts +19 -0
- package/dist/security/policy-serializer.d.ts.map +1 -0
- package/dist/security/policy-serializer.js +100 -0
- package/dist/security/policy-serializer.js.map +1 -0
- package/dist/security/shell-validator.d.ts +42 -0
- package/dist/security/shell-validator.d.ts.map +1 -0
- package/dist/security/shell-validator.js +231 -0
- package/dist/security/shell-validator.js.map +1 -0
- package/dist/skills/index.d.ts +1 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/skill-loader.d.ts +38 -2
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +83 -2
- package/dist/skills/skill-loader.js.map +1 -1
- package/dist/skills/subagent-loader.d.ts +66 -0
- package/dist/skills/subagent-loader.d.ts.map +1 -0
- package/dist/skills/subagent-loader.js +143 -0
- package/dist/skills/subagent-loader.js.map +1 -0
- package/dist/steering/flag-manager.d.ts +20 -0
- package/dist/steering/flag-manager.d.ts.map +1 -1
- package/dist/steering/flag-manager.js +94 -11
- package/dist/steering/flag-manager.js.map +1 -1
- package/dist/steering/steering-manager.d.ts +11 -0
- package/dist/steering/steering-manager.d.ts.map +1 -1
- package/dist/steering/steering-manager.js +23 -0
- package/dist/steering/steering-manager.js.map +1 -1
- package/dist/steering/telegram-gateway.d.ts +4 -1
- package/dist/steering/telegram-gateway.d.ts.map +1 -1
- package/dist/steering/telegram-gateway.js +49 -10
- package/dist/steering/telegram-gateway.js.map +1 -1
- package/dist/teams/bridge-watchdog.d.ts.map +1 -1
- package/dist/teams/bridge-watchdog.js +5 -3
- package/dist/teams/bridge-watchdog.js.map +1 -1
- package/dist/teams/gemini-bridge.d.ts.map +1 -1
- package/dist/teams/gemini-bridge.js +9 -4
- package/dist/teams/gemini-bridge.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-tools.d.ts +16 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +207 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/notifications.d.ts.map +1 -1
- package/dist/tools/notifications.js +3 -1
- package/dist/tools/notifications.js.map +1 -1
- package/dist/tools/tool-factory.d.ts +36 -0
- package/dist/tools/tool-factory.d.ts.map +1 -0
- package/dist/tools/tool-factory.js +55 -0
- package/dist/tools/tool-factory.js.map +1 -0
- package/dist/types.d.ts +205 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +47 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/errors.d.ts +21 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +29 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/event-filter.d.ts +25 -0
- package/dist/utils/event-filter.d.ts.map +1 -0
- package/dist/utils/event-filter.js +61 -0
- package/dist/utils/event-filter.js.map +1 -0
- package/dist/utils/logger.d.ts +33 -36
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +60 -130
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validate-job-id.d.ts +6 -0
- package/dist/utils/validate-job-id.d.ts.map +1 -0
- package/dist/utils/validate-job-id.js +10 -0
- package/dist/utils/validate-job-id.js.map +1 -0
- package/package.json +12 -3
|
@@ -6,13 +6,17 @@
|
|
|
6
6
|
* - Authenticates users via allowed_users list in config.
|
|
7
7
|
* - Injects steer messages into SteeringManager.
|
|
8
8
|
*/
|
|
9
|
+
import { createLogger } from '../utils/logger.js';
|
|
10
|
+
const log = createLogger('telegram-gateway');
|
|
9
11
|
export class TelegramGateway {
|
|
10
12
|
_bot;
|
|
11
13
|
_steeringManager;
|
|
14
|
+
_sessionManager;
|
|
12
15
|
_allowedUsers;
|
|
13
|
-
constructor(bot, steeringManager, allowedUsers) {
|
|
16
|
+
constructor(bot, steeringManager, allowedUsers, sessionManager) {
|
|
14
17
|
this._bot = bot;
|
|
15
18
|
this._steeringManager = steeringManager;
|
|
19
|
+
this._sessionManager = sessionManager;
|
|
16
20
|
this._allowedUsers = new Set(allowedUsers);
|
|
17
21
|
this._setupHandlers();
|
|
18
22
|
}
|
|
@@ -20,7 +24,7 @@ export class TelegramGateway {
|
|
|
20
24
|
* Factory method — loads node-telegram-bot-api dynamically.
|
|
21
25
|
* Throws a clear error if the optional dep isn't installed.
|
|
22
26
|
*/
|
|
23
|
-
static async create(config, steeringManager) {
|
|
27
|
+
static async create(config, steeringManager, sessionManager) {
|
|
24
28
|
const token = config.bot_token || process.env.TELEGRAM_BOT_TOKEN;
|
|
25
29
|
if (!token) {
|
|
26
30
|
throw new Error('TELEGRAM_BOT_TOKEN is required for TelegramGateway');
|
|
@@ -30,12 +34,22 @@ export class TelegramGateway {
|
|
|
30
34
|
const mod = await import('node-telegram-bot-api');
|
|
31
35
|
TelegramBot = mod.default;
|
|
32
36
|
}
|
|
33
|
-
catch {
|
|
34
|
-
|
|
35
|
-
'
|
|
37
|
+
catch (importErr) {
|
|
38
|
+
const isModuleNotFound = importErr instanceof Error &&
|
|
39
|
+
('code' in importErr && importErr.code === 'ERR_MODULE_NOT_FOUND' ||
|
|
40
|
+
importErr.message.includes('Cannot find'));
|
|
41
|
+
throw new Error('Telegram support requires the optional peer dependency node-telegram-bot-api.\n' +
|
|
42
|
+
(isModuleNotFound
|
|
43
|
+
? 'Install it in your project: npm install node-telegram-bot-api\n' +
|
|
44
|
+
'If installed globally, ensure it is resolvable from zora-agent\'s module path.'
|
|
45
|
+
: `Unexpected import error: ${importErr instanceof Error ? importErr.message : String(importErr)}`));
|
|
36
46
|
}
|
|
37
|
-
const
|
|
38
|
-
|
|
47
|
+
const mode = config.mode ?? 'polling';
|
|
48
|
+
if (mode === 'webhook') {
|
|
49
|
+
console.warn('[Telegram] Webhook mode selected. Ensure your webhook URL is configured externally.');
|
|
50
|
+
}
|
|
51
|
+
const bot = new TelegramBot(token, { polling: mode === 'polling' });
|
|
52
|
+
return new TelegramGateway(bot, steeringManager, config.allowed_users, sessionManager);
|
|
39
53
|
}
|
|
40
54
|
_setupHandlers() {
|
|
41
55
|
/**
|
|
@@ -44,7 +58,7 @@ export class TelegramGateway {
|
|
|
44
58
|
this._bot.on('message', (msg) => {
|
|
45
59
|
const userId = msg.from?.id?.toString();
|
|
46
60
|
if (!userId || !this._allowedUsers.has(userId)) {
|
|
47
|
-
|
|
61
|
+
log.warn({ userId }, 'Unauthorized access attempt');
|
|
48
62
|
this._bot.sendMessage(msg.chat.id, '⛔ UNAUTHORIZED: Access Denied.');
|
|
49
63
|
return;
|
|
50
64
|
}
|
|
@@ -81,8 +95,33 @@ export class TelegramGateway {
|
|
|
81
95
|
if (!userId || !this._allowedUsers.has(userId))
|
|
82
96
|
return;
|
|
83
97
|
const jobId = match[1];
|
|
84
|
-
|
|
85
|
-
|
|
98
|
+
try {
|
|
99
|
+
const lines = [`STATUS [${jobId}]`];
|
|
100
|
+
// Query pending steering messages
|
|
101
|
+
const pending = await this._steeringManager.getPendingMessages(jobId);
|
|
102
|
+
lines.push(`Pending steer messages: ${pending.length}`);
|
|
103
|
+
// Query session state if session manager is available
|
|
104
|
+
if (this._sessionManager) {
|
|
105
|
+
const sessions = await this._sessionManager.listSessions();
|
|
106
|
+
const session = sessions.find(s => s.jobId === jobId);
|
|
107
|
+
if (session) {
|
|
108
|
+
lines.push(`Session status: ${session.status}`);
|
|
109
|
+
lines.push(`Event count: ${session.eventCount}`);
|
|
110
|
+
lines.push(`Last activity: ${session.lastActivity ? session.lastActivity.toISOString() : 'N/A'}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
lines.push('Session: not found');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
lines.push('Session manager: not available');
|
|
118
|
+
}
|
|
119
|
+
this._bot.sendMessage(msg.chat.id, lines.join('\n'));
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
log.error({ jobId, error: String(err) }, 'Failed to retrieve status');
|
|
123
|
+
this._bot.sendMessage(msg.chat.id, `Failed to retrieve status for ${jobId}: ${String(err)}`);
|
|
124
|
+
}
|
|
86
125
|
});
|
|
87
126
|
/**
|
|
88
127
|
* /help
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-gateway.js","sourceRoot":"","sources":["../../src/steering/telegram-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"telegram-gateway.js","sourceRoot":"","sources":["../../src/steering/telegram-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-watchdog.d.ts","sourceRoot":"","sources":["../../src/teams/bridge-watchdog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge-watchdog.d.ts","sourceRoot":"","sources":["../../src/teams/bridge-watchdog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB;IAQhE;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YAMvB,MAAM;YA4CN,UAAU;YAYV,WAAW;CAI1B"}
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import fs from 'node:fs/promises';
|
|
9
9
|
import path from 'node:path';
|
|
10
|
+
import { createLogger } from '../utils/logger.js';
|
|
11
|
+
const log = createLogger('bridge-watchdog');
|
|
10
12
|
export class BridgeWatchdog {
|
|
11
13
|
_bridge;
|
|
12
14
|
_healthCheckIntervalMs;
|
|
@@ -70,14 +72,14 @@ export class BridgeWatchdog {
|
|
|
70
72
|
const elapsed = Date.now() - lastBeat;
|
|
71
73
|
if (elapsed > this._maxStaleMs) {
|
|
72
74
|
if (this._restartCount >= this._maxRestarts) {
|
|
73
|
-
|
|
75
|
+
log.error({ maxRestarts: this._maxRestarts }, 'Max restarts exceeded, stopping watchdog');
|
|
74
76
|
this.stop();
|
|
75
77
|
return;
|
|
76
78
|
}
|
|
77
79
|
// Exponential backoff: 1s, 2s, 4s, 8s... capped at 60s
|
|
78
80
|
const backoffMs = Math.min(1000 * Math.pow(2, this._restartCount), 60_000);
|
|
79
81
|
this._restartCount++;
|
|
80
|
-
|
|
82
|
+
log.warn({ elapsedMs: elapsed, attempt: this._restartCount, maxRestarts: this._maxRestarts, backoffMs }, 'Heartbeat stale, restarting bridge');
|
|
81
83
|
this._bridge.stop();
|
|
82
84
|
await new Promise((resolve) => setTimeout(resolve, backoffMs));
|
|
83
85
|
if (this._running) {
|
|
@@ -92,7 +94,7 @@ export class BridgeWatchdog {
|
|
|
92
94
|
}
|
|
93
95
|
}
|
|
94
96
|
catch (err) {
|
|
95
|
-
|
|
97
|
+
log.error({ err }, 'Health check error');
|
|
96
98
|
}
|
|
97
99
|
finally {
|
|
98
100
|
this._checking = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-watchdog.js","sourceRoot":"","sources":["../../src/teams/bridge-watchdog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge-watchdog.js","sourceRoot":"","sources":["../../src/teams/bridge-watchdog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-bridge.d.ts","sourceRoot":"","sources":["../../src/teams/gemini-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini-bridge.d.ts","sourceRoot":"","sources":["../../src/teams/gemini-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,eAAe,CAAC,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,cAAc,CAA6B;gBAGjD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB;IAS9B;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,IAAI,IAAI;IAcZ,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YAI/C,KAAK;YAwBL,YAAY;CAyD3B"}
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* - Posts results back to the coordinator's inbox.
|
|
8
8
|
*/
|
|
9
9
|
import { spawn } from 'node:child_process';
|
|
10
|
+
import { createLogger } from '../utils/logger.js';
|
|
11
|
+
const log = createLogger('gemini-bridge');
|
|
10
12
|
export class GeminiBridge {
|
|
11
13
|
_teamName;
|
|
12
14
|
_mailbox;
|
|
@@ -77,7 +79,7 @@ export class GeminiBridge {
|
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
81
|
catch (err) {
|
|
80
|
-
|
|
82
|
+
log.error({ err }, 'Poll error');
|
|
81
83
|
}
|
|
82
84
|
finally {
|
|
83
85
|
this._polling = false;
|
|
@@ -110,13 +112,13 @@ export class GeminiBridge {
|
|
|
110
112
|
})
|
|
111
113
|
.then(() => resolve())
|
|
112
114
|
.catch((err) => {
|
|
113
|
-
|
|
115
|
+
log.error({ err }, 'Failed to send result');
|
|
114
116
|
resolve();
|
|
115
117
|
});
|
|
116
118
|
});
|
|
117
119
|
child.on('error', (err) => {
|
|
118
120
|
this._activeProcess = null;
|
|
119
|
-
|
|
121
|
+
log.error({ err }, 'Process error');
|
|
120
122
|
// Send error result back to requesting agent
|
|
121
123
|
this._mailbox
|
|
122
124
|
.send(this._teamName, fromAgent, {
|
|
@@ -124,7 +126,10 @@ export class GeminiBridge {
|
|
|
124
126
|
text: `Error (spawn failure): ${err.message}`,
|
|
125
127
|
})
|
|
126
128
|
.then(() => resolve())
|
|
127
|
-
.catch(() =>
|
|
129
|
+
.catch((sendErr) => {
|
|
130
|
+
log.error({ err: sendErr }, 'Failed to send error result');
|
|
131
|
+
resolve();
|
|
132
|
+
});
|
|
128
133
|
});
|
|
129
134
|
});
|
|
130
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-bridge.js","sourceRoot":"","sources":["../../src/teams/gemini-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini-bridge.js","sourceRoot":"","sources":["../../src/teams/gemini-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAQ1C,MAAM,OAAO,YAAY;IACN,SAAS,CAAS;IAClB,QAAQ,CAAU;IAClB,eAAe,CAAS;IACxB,cAAc,CAAS;IAChC,eAAe,CAA8B;IAC7C,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,GAAG,KAAK,CAAC;IACjB,UAAU,GAA0C,IAAI,CAAC;IACzD,cAAc,GAAwB,IAAI,CAAC;IAEnD,YACE,QAAgB,EAChB,OAAgB,EAChB,OAA4B;QAE5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,QAAoC;QACpD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAExD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,MAAM;gBAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;YAED,qEAAqE;YACrE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,SAAiB;QAC5D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAE5B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAE3B,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC;oBAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,aAAa;oBAChC,CAAC,CAAC,eAAe,IAAI,IAAI,SAAS,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAE3E,2CAA2C;gBAC3C,IAAI,CAAC,QAAQ;qBACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE;oBAC/B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,UAAU;iBACjB,CAAC;qBACD,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;qBACrB,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;oBAC5C,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;gBAEpC,6CAA6C;gBAC7C,IAAI,CAAC,QAAQ;qBACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE;oBAC/B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,0BAA0B,GAAG,CAAC,OAAO,EAAE;iBAC9C,CAAC;qBACD,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;qBACrB,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;oBACjB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,6BAA6B,CAAC,CAAC;oBAC3D,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
|
package/dist/tools/index.js
CHANGED
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Tools — Agent-facing tool definitions for memory operations.
|
|
3
|
+
*
|
|
4
|
+
* Three tools exposed to the LLM:
|
|
5
|
+
* - memory_save: Store a new memory item (with validation)
|
|
6
|
+
* - memory_search: Search memory with BM25+ and salience ranking
|
|
7
|
+
* - memory_forget: Soft-delete a memory item to archive
|
|
8
|
+
*/
|
|
9
|
+
import type { CustomToolDefinition } from '../orchestrator/execution-loop.js';
|
|
10
|
+
import type { MemoryManager } from '../memory/memory-manager.js';
|
|
11
|
+
import type { ValidationPipeline } from '../memory/validation-pipeline.js';
|
|
12
|
+
/**
|
|
13
|
+
* Creates the three memory tool definitions wired to a MemoryManager instance.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createMemoryTools(memoryManager: MemoryManager, validationPipeline: ValidationPipeline): CustomToolDefinition[];
|
|
16
|
+
//# sourceMappingURL=memory-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-tools.d.ts","sourceRoot":"","sources":["../../src/tools/memory-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3E;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,GACrC,oBAAoB,EAAE,CAQxB"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Tools — Agent-facing tool definitions for memory operations.
|
|
3
|
+
*
|
|
4
|
+
* Three tools exposed to the LLM:
|
|
5
|
+
* - memory_save: Store a new memory item (with validation)
|
|
6
|
+
* - memory_search: Search memory with BM25+ and salience ranking
|
|
7
|
+
* - memory_forget: Soft-delete a memory item to archive
|
|
8
|
+
*/
|
|
9
|
+
const VALID_TYPES = ['profile', 'event', 'knowledge', 'behavior', 'skill', 'tool'];
|
|
10
|
+
const VALID_SOURCE_TYPES = ['user_instruction', 'agent_analysis', 'tool_output'];
|
|
11
|
+
/**
|
|
12
|
+
* Creates the three memory tool definitions wired to a MemoryManager instance.
|
|
13
|
+
*/
|
|
14
|
+
export function createMemoryTools(memoryManager, validationPipeline) {
|
|
15
|
+
const structuredMemory = memoryManager.structuredMemory;
|
|
16
|
+
return [
|
|
17
|
+
createMemorySaveTool(structuredMemory, validationPipeline),
|
|
18
|
+
createMemorySearchTool(memoryManager),
|
|
19
|
+
createMemoryForgetTool(memoryManager),
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
function createMemorySaveTool(structuredMemory, validationPipeline) {
|
|
23
|
+
return {
|
|
24
|
+
name: 'memory_save',
|
|
25
|
+
description: 'Save a fact or observation to long-term memory. Use this to remember important information across sessions. ' +
|
|
26
|
+
'Each memory should be a single, specific statement — not a summary. ' +
|
|
27
|
+
'Only save facts that would be useful in a DIFFERENT session.',
|
|
28
|
+
input_schema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
required: ['content'],
|
|
31
|
+
properties: {
|
|
32
|
+
content: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'The fact to remember. Must be at least 15 characters. Be specific and concise.',
|
|
35
|
+
},
|
|
36
|
+
type: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
enum: VALID_TYPES,
|
|
39
|
+
description: 'Memory type: profile (user facts), event (things that happened), knowledge (project/world facts), behavior (preferences), skill (procedures), tool (tool-specific notes).',
|
|
40
|
+
default: 'knowledge',
|
|
41
|
+
},
|
|
42
|
+
tags: {
|
|
43
|
+
type: 'array',
|
|
44
|
+
items: { type: 'string' },
|
|
45
|
+
description: 'Categorization tags for the memory.',
|
|
46
|
+
default: [],
|
|
47
|
+
},
|
|
48
|
+
entity: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
description: 'Related entity (person, project, tool name).',
|
|
51
|
+
},
|
|
52
|
+
source_type: {
|
|
53
|
+
type: 'string',
|
|
54
|
+
enum: VALID_SOURCE_TYPES,
|
|
55
|
+
description: 'How this fact was learned: user_instruction (user told you), agent_analysis (you inferred it), tool_output (from a tool result).',
|
|
56
|
+
default: 'agent_analysis',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
handler: async (input) => {
|
|
61
|
+
const content = input.content;
|
|
62
|
+
const type = input.type ?? 'knowledge';
|
|
63
|
+
const tags = input.tags ?? [];
|
|
64
|
+
const entity = input.entity;
|
|
65
|
+
const sourceType = input.source_type ?? 'agent_analysis';
|
|
66
|
+
// Run validation gates
|
|
67
|
+
// NOTE: listItems() reads all items for dedup/contradiction checking.
|
|
68
|
+
// This is O(N) but acceptable for small-medium collections (<10k items).
|
|
69
|
+
// For large scale, consider: Bloom filter, dedup index, or batch validation.
|
|
70
|
+
const existingItems = await structuredMemory.listItems();
|
|
71
|
+
const validation = validationPipeline.validate(content, tags, existingItems);
|
|
72
|
+
if (!validation.valid) {
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
reason: validation.reason,
|
|
76
|
+
...(validation.duplicateOf ? { duplicate_of: validation.duplicateOf } : {}),
|
|
77
|
+
...(validation.conflictsWith ? { conflicts_with: validation.conflictsWith } : {}),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Build category from entity + type
|
|
81
|
+
const category = entity ? `${type}/${entity}` : type;
|
|
82
|
+
const item = await structuredMemory.createItem({
|
|
83
|
+
type,
|
|
84
|
+
summary: content,
|
|
85
|
+
source: 'agent_session',
|
|
86
|
+
source_type: sourceType,
|
|
87
|
+
tags,
|
|
88
|
+
category,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
success: true,
|
|
92
|
+
id: item.id,
|
|
93
|
+
message: `Saved to memory: "${content.slice(0, 60)}${content.length > 60 ? '...' : ''}"`,
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function createMemorySearchTool(memoryManager) {
|
|
99
|
+
return {
|
|
100
|
+
name: 'memory_search',
|
|
101
|
+
description: 'Search long-term memory for relevant facts. Returns results ranked by relevance, recency, and trust. ' +
|
|
102
|
+
'Use this before making assumptions — check if you already know something.',
|
|
103
|
+
input_schema: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
required: ['query'],
|
|
106
|
+
properties: {
|
|
107
|
+
query: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
description: 'Natural language search query.',
|
|
110
|
+
},
|
|
111
|
+
limit: {
|
|
112
|
+
type: 'number',
|
|
113
|
+
description: 'Maximum number of results to return.',
|
|
114
|
+
default: 5,
|
|
115
|
+
},
|
|
116
|
+
type: {
|
|
117
|
+
type: 'string',
|
|
118
|
+
enum: VALID_TYPES,
|
|
119
|
+
description: 'Filter results by memory type.',
|
|
120
|
+
},
|
|
121
|
+
min_score: {
|
|
122
|
+
type: 'number',
|
|
123
|
+
description: 'Minimum salience score threshold (0-1 range typical).',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
handler: async (input) => {
|
|
128
|
+
const query = input.query;
|
|
129
|
+
const limit = input.limit ?? 5;
|
|
130
|
+
const typeFilter = input.type;
|
|
131
|
+
const minScore = input.min_score;
|
|
132
|
+
let scores = await memoryManager.searchMemory(query, limit * 2); // fetch extra for filtering
|
|
133
|
+
// Build item map from read-only lookups (peekItem avoids inflating access_count
|
|
134
|
+
// and triggering disk writes for each search result)
|
|
135
|
+
const itemMap = new Map();
|
|
136
|
+
for (const s of scores) {
|
|
137
|
+
const item = await memoryManager.structuredMemory.peekItem(s.itemId);
|
|
138
|
+
if (item)
|
|
139
|
+
itemMap.set(item.id, item);
|
|
140
|
+
}
|
|
141
|
+
// Apply type filter if specified
|
|
142
|
+
if (typeFilter) {
|
|
143
|
+
scores = scores.filter(s => {
|
|
144
|
+
const item = itemMap.get(s.itemId);
|
|
145
|
+
return item && item.type === typeFilter;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Apply min_score filter
|
|
149
|
+
if (minScore !== undefined) {
|
|
150
|
+
scores = scores.filter(s => s.score >= minScore);
|
|
151
|
+
}
|
|
152
|
+
// Trim to limit
|
|
153
|
+
scores = scores.slice(0, limit);
|
|
154
|
+
if (scores.length === 0) {
|
|
155
|
+
return { results: [], message: 'No matching memories found.' };
|
|
156
|
+
}
|
|
157
|
+
// Map results using the already-built itemMap
|
|
158
|
+
const results = scores.map(s => {
|
|
159
|
+
const item = itemMap.get(s.itemId);
|
|
160
|
+
return item
|
|
161
|
+
? {
|
|
162
|
+
id: item.id,
|
|
163
|
+
content: item.summary,
|
|
164
|
+
type: item.type,
|
|
165
|
+
tags: item.tags,
|
|
166
|
+
score: Number(s.score.toFixed(3)),
|
|
167
|
+
created: item.created_at,
|
|
168
|
+
}
|
|
169
|
+
: null;
|
|
170
|
+
}).filter(Boolean);
|
|
171
|
+
return { results, count: results.length };
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function createMemoryForgetTool(memoryManager) {
|
|
176
|
+
return {
|
|
177
|
+
name: 'memory_forget',
|
|
178
|
+
description: 'Remove a memory item. Performs a soft delete (moves to archive). ' +
|
|
179
|
+
'Use this to clean up outdated, incorrect, or irrelevant memories.',
|
|
180
|
+
input_schema: {
|
|
181
|
+
type: 'object',
|
|
182
|
+
required: ['id'],
|
|
183
|
+
properties: {
|
|
184
|
+
id: {
|
|
185
|
+
type: 'string',
|
|
186
|
+
description: 'The memory item ID to forget (from memory_search results).',
|
|
187
|
+
},
|
|
188
|
+
reason: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
description: 'Why this memory is being removed (logged for audit).',
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
handler: async (input) => {
|
|
195
|
+
const id = input.id;
|
|
196
|
+
const reason = input.reason ?? 'No reason provided';
|
|
197
|
+
const deleted = await memoryManager.forgetItem(id, reason);
|
|
198
|
+
return {
|
|
199
|
+
success: deleted,
|
|
200
|
+
message: deleted
|
|
201
|
+
? `Forgot memory "${id}".`
|
|
202
|
+
: `Memory item "${id}" not found.`,
|
|
203
|
+
};
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=memory-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-tools.js","sourceRoot":"","sources":["../../src/tools/memory-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,qBAAa,iBAAiB;IAC5B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB5D"}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { execFile } from 'node:child_process';
|
|
8
8
|
import { promisify } from 'node:util';
|
|
9
|
+
import { createLogger } from '../utils/logger.js';
|
|
9
10
|
const execFileAsync = promisify(execFile);
|
|
11
|
+
const log = createLogger('notifications');
|
|
10
12
|
export class NotificationTools {
|
|
11
13
|
/**
|
|
12
14
|
* Sends a macOS native notification using AppleScript.
|
|
@@ -23,7 +25,7 @@ export class NotificationTools {
|
|
|
23
25
|
}
|
|
24
26
|
catch (err) {
|
|
25
27
|
// If notification fails (e.g. not on macOS or headless), we log to console
|
|
26
|
-
|
|
28
|
+
log.info({ title, message }, 'Notification fallback (osascript unavailable)');
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAE1C,MAAM,OAAO,iBAAiB;IAC5B;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAe;QACzC,0FAA0F;QAC1F,0EAA0E;QAC1E,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3C,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,yBAAyB,cAAc,iCAAiC,YAAY,GAAG,CAAC;QAEvG,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2EAA2E;YAC3E,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,+CAA+C,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod-based Tool Factory — ORCH-15
|
|
3
|
+
*
|
|
4
|
+
* Produces CustomToolDefinition objects from a Zod schema.
|
|
5
|
+
* Validates the schema at registration time (not at LLM call time),
|
|
6
|
+
* catching malformed schemas early.
|
|
7
|
+
*
|
|
8
|
+
* Uses Zod 4's built-in z.toJSONSchema() for schema conversion.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import type { CustomToolDefinition } from '../orchestrator/execution-loop.js';
|
|
12
|
+
/**
|
|
13
|
+
* Creates a CustomToolDefinition with Zod-based input validation.
|
|
14
|
+
*
|
|
15
|
+
* The Zod schema is converted to JSON Schema at registration time
|
|
16
|
+
* using Zod 4's native `z.toJSONSchema()`. At call time, the handler
|
|
17
|
+
* receives input validated through the Zod schema.
|
|
18
|
+
*
|
|
19
|
+
* @param name - Tool name (must be non-empty)
|
|
20
|
+
* @param description - Human-readable description
|
|
21
|
+
* @param schema - Zod object schema defining the input parameters
|
|
22
|
+
* @param handler - Async function that receives validated input and returns a result
|
|
23
|
+
* @returns A CustomToolDefinition ready to pass to ExecutionLoop
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const greetTool = tool(
|
|
28
|
+
* 'greet',
|
|
29
|
+
* 'Greet someone by name',
|
|
30
|
+
* z.object({ name: z.string().describe('Person to greet') }),
|
|
31
|
+
* async (input) => `Hello, ${input.name}!`,
|
|
32
|
+
* );
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function tool<T extends z.ZodObject<z.ZodRawShape>>(name: string, description: string, schema: T, handler: (input: z.infer<T>) => Promise<unknown>): CustomToolDefinition;
|
|
36
|
+
//# sourceMappingURL=tool-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-factory.d.ts","sourceRoot":"","sources":["../../src/tools/tool-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACvD,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC/C,oBAAoB,CAsBtB"}
|