@jungjaehoon/mama-os 0.18.2 → 0.19.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.
- package/dist/agent/agent-loop.d.ts +25 -0
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +67 -14
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
- package/dist/agent/code-act/host-bridge.js +98 -0
- package/dist/agent/code-act/host-bridge.js.map +1 -1
- package/dist/agent/code-act/type-definition-generator.d.ts.map +1 -1
- package/dist/agent/code-act/type-definition-generator.js +0 -1
- package/dist/agent/code-act/type-definition-generator.js.map +1 -1
- package/dist/agent/gateway-tool-executor.d.ts +36 -1
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
- package/dist/agent/gateway-tool-executor.js +938 -54
- package/dist/agent/gateway-tool-executor.js.map +1 -1
- package/dist/agent/gateway-tools.md +9 -0
- package/dist/agent/managed-agent-runtime-sync.d.ts +36 -0
- package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -0
- package/dist/agent/managed-agent-runtime-sync.js +207 -0
- package/dist/agent/managed-agent-runtime-sync.js.map +1 -0
- package/dist/agent/managed-agent-validation.d.ts +4 -0
- package/dist/agent/managed-agent-validation.d.ts.map +1 -0
- package/dist/agent/managed-agent-validation.js +84 -0
- package/dist/agent/managed-agent-validation.js.map +1 -0
- package/dist/agent/os-agent-capabilities.md +400 -0
- package/dist/agent/skill-loader.d.ts +2 -0
- package/dist/agent/skill-loader.d.ts.map +1 -1
- package/dist/agent/skill-loader.js +28 -0
- package/dist/agent/skill-loader.js.map +1 -1
- package/dist/agent/tool-registry.d.ts.map +1 -1
- package/dist/agent/tool-registry.js +66 -0
- package/dist/agent/tool-registry.js.map +1 -1
- package/dist/agent/types.d.ts +2 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/agent-handler.d.ts +34 -0
- package/dist/api/agent-handler.d.ts.map +1 -0
- package/dist/api/agent-handler.js +216 -0
- package/dist/api/agent-handler.js.map +1 -0
- package/dist/api/graph-api-types.d.ts +4 -0
- package/dist/api/graph-api-types.d.ts.map +1 -1
- package/dist/api/graph-api.d.ts +2 -2
- package/dist/api/graph-api.d.ts.map +1 -1
- package/dist/api/graph-api.js +480 -51
- package/dist/api/graph-api.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +4 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/token-handler.d.ts +1 -0
- package/dist/api/token-handler.d.ts.map +1 -1
- package/dist/api/token-handler.js +4 -3
- package/dist/api/token-handler.js.map +1 -1
- package/dist/api/ui-command-handler.d.ts +48 -0
- package/dist/api/ui-command-handler.d.ts.map +1 -0
- package/dist/api/ui-command-handler.js +160 -0
- package/dist/api/ui-command-handler.js.map +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +127 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/config/config-manager.d.ts.map +1 -1
- package/dist/cli/config/config-manager.js +16 -31
- package/dist/cli/config/config-manager.js.map +1 -1
- package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
- package/dist/cli/runtime/agent-loop-init.js +31 -7
- package/dist/cli/runtime/agent-loop-init.js.map +1 -1
- package/dist/cli/runtime/api-routes-init.d.ts +3 -0
- package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-routes-init.js +283 -34
- package/dist/cli/runtime/api-routes-init.js.map +1 -1
- package/dist/cli/runtime/gateway-init.d.ts +2 -1
- package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
- package/dist/cli/runtime/gateway-init.js +5 -1
- package/dist/cli/runtime/gateway-init.js.map +1 -1
- package/dist/connectors/framework/raw-store.d.ts +4 -0
- package/dist/connectors/framework/raw-store.d.ts.map +1 -1
- package/dist/connectors/framework/raw-store.js +33 -10
- package/dist/connectors/framework/raw-store.js.map +1 -1
- package/dist/db/agent-store.d.ts +115 -0
- package/dist/db/agent-store.d.ts.map +1 -0
- package/dist/db/agent-store.js +248 -0
- package/dist/db/agent-store.js.map +1 -0
- package/dist/db/migrations/agent-activity-validation-columns.d.ts +3 -0
- package/dist/db/migrations/agent-activity-validation-columns.d.ts.map +1 -0
- package/dist/db/migrations/agent-activity-validation-columns.js +22 -0
- package/dist/db/migrations/agent-activity-validation-columns.js.map +1 -0
- package/dist/db/migrations/agent-metrics-response-avg.d.ts +3 -0
- package/dist/db/migrations/agent-metrics-response-avg.d.ts.map +1 -0
- package/dist/db/migrations/agent-metrics-response-avg.js +19 -0
- package/dist/db/migrations/agent-metrics-response-avg.js.map +1 -0
- package/dist/db/migrations/agent-store-tables.d.ts +3 -0
- package/dist/db/migrations/agent-store-tables.d.ts.map +1 -0
- package/dist/db/migrations/agent-store-tables.js +59 -0
- package/dist/db/migrations/agent-store-tables.js.map +1 -0
- package/dist/db/migrations/token-usage-agent-version.d.ts +3 -0
- package/dist/db/migrations/token-usage-agent-version.d.ts.map +1 -0
- package/dist/db/migrations/token-usage-agent-version.js +16 -0
- package/dist/db/migrations/token-usage-agent-version.js.map +1 -0
- package/dist/db/migrations/validation-session-tables.d.ts +3 -0
- package/dist/db/migrations/validation-session-tables.d.ts.map +1 -0
- package/dist/db/migrations/validation-session-tables.js +59 -0
- package/dist/db/migrations/validation-session-tables.js.map +1 -0
- package/dist/gateways/message-router.d.ts +10 -0
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +188 -14
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/gateways/types.d.ts +1 -1
- package/dist/gateways/types.d.ts.map +1 -1
- package/dist/multi-agent/agent-process-manager.js +1 -1
- package/dist/multi-agent/agent-process-manager.js.map +1 -1
- package/dist/multi-agent/conductor-persona.d.ts +13 -0
- package/dist/multi-agent/conductor-persona.d.ts.map +1 -0
- package/dist/multi-agent/conductor-persona.js +157 -0
- package/dist/multi-agent/conductor-persona.js.map +1 -0
- package/dist/multi-agent/dashboard-agent-persona.d.ts +1 -1
- package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/dashboard-agent-persona.js +7 -3
- package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
- package/dist/multi-agent/delegation-manager.d.ts +5 -0
- package/dist/multi-agent/delegation-manager.d.ts.map +1 -1
- package/dist/multi-agent/delegation-manager.js +37 -0
- package/dist/multi-agent/delegation-manager.js.map +1 -1
- package/dist/multi-agent/ultrawork.d.ts +3 -0
- package/dist/multi-agent/ultrawork.d.ts.map +1 -1
- package/dist/multi-agent/ultrawork.js +9 -0
- package/dist/multi-agent/ultrawork.js.map +1 -1
- package/dist/validation/session-service.d.ts +72 -0
- package/dist/validation/session-service.d.ts.map +1 -0
- package/dist/validation/session-service.js +298 -0
- package/dist/validation/session-service.js.map +1 -0
- package/dist/validation/store.d.ts +25 -0
- package/dist/validation/store.d.ts.map +1 -0
- package/dist/validation/store.js +200 -0
- package/dist/validation/store.js.map +1 -0
- package/dist/validation/types.d.ts +119 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +57 -0
- package/dist/validation/types.js.map +1 -0
- package/package.json +3 -3
- package/public/viewer/js/modules/agents.js +1148 -0
- package/public/viewer/js/modules/chat.js +20 -11
- package/public/viewer/js/modules/connector-feed.js +35 -0
- package/public/viewer/js/modules/dashboard.js +49 -0
- package/public/viewer/js/modules/memory.js +32 -0
- package/public/viewer/js/modules/settings.js +34 -79
- package/public/viewer/js/modules/wiki.js +59 -4
- package/public/viewer/js/utils/api.js +70 -0
- package/public/viewer/js/utils/dom.js +3 -0
- package/public/viewer/js/utils/ui-commands.js +93 -0
- package/public/viewer/log-viewer.html +2 -2
- package/public/viewer/src/modules/agents.ts +1299 -0
- package/public/viewer/src/modules/chat.ts +23 -14
- package/public/viewer/src/modules/connector-feed.ts +35 -0
- package/public/viewer/src/modules/dashboard.ts +50 -0
- package/public/viewer/src/modules/memory.ts +31 -0
- package/public/viewer/src/modules/settings.ts +36 -96
- package/public/viewer/src/modules/wiki.ts +73 -6
- package/public/viewer/src/types/global.d.ts +0 -9
- package/public/viewer/src/utils/api.ts +156 -2
- package/public/viewer/src/utils/dom.ts +6 -1
- package/public/viewer/src/utils/ui-commands.ts +118 -0
- package/public/viewer/viewer.css +105 -10
- package/public/viewer/viewer.html +1868 -777
- package/scripts/generate-gateway-tools.ts +5 -1
- package/public/viewer/js/modules/playground.js +0 -148
- package/public/viewer/js/modules/skills.js +0 -451
- package/public/viewer/src/modules/playground.ts +0 -173
- package/public/viewer/src/modules/skills.ts +0 -491
- package/templates/playgrounds/cron-workflow-lab.html +0 -1601
- package/templates/playgrounds/mama-log-viewer.html +0 -1341
- package/templates/playgrounds/skill-lab-playground.html +0 -1625
- package/templates/playgrounds/wave-visualizer.html +0 -694
- package/templates/skills/playground.md +0 -197
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyAgentStoreTablesMigration = applyAgentStoreTablesMigration;
|
|
4
|
+
function applyAgentStoreTablesMigration(db) {
|
|
5
|
+
db.exec(`
|
|
6
|
+
CREATE TABLE IF NOT EXISTS agent_versions (
|
|
7
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
8
|
+
agent_id TEXT NOT NULL,
|
|
9
|
+
version INTEGER NOT NULL,
|
|
10
|
+
snapshot TEXT NOT NULL,
|
|
11
|
+
persona_text TEXT,
|
|
12
|
+
change_note TEXT,
|
|
13
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
14
|
+
UNIQUE(agent_id, version)
|
|
15
|
+
)
|
|
16
|
+
`);
|
|
17
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_agent_versions_agent ON agent_versions(agent_id)`);
|
|
18
|
+
db.exec(`
|
|
19
|
+
CREATE TABLE IF NOT EXISTS agent_metrics (
|
|
20
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
+
agent_id TEXT NOT NULL,
|
|
22
|
+
agent_version INTEGER NOT NULL,
|
|
23
|
+
period_start TEXT NOT NULL,
|
|
24
|
+
period_end TEXT NOT NULL,
|
|
25
|
+
input_tokens INTEGER DEFAULT 0,
|
|
26
|
+
output_tokens INTEGER DEFAULT 0,
|
|
27
|
+
tool_calls INTEGER DEFAULT 0,
|
|
28
|
+
delegations INTEGER DEFAULT 0,
|
|
29
|
+
errors INTEGER DEFAULT 0,
|
|
30
|
+
avg_response_ms REAL DEFAULT 0,
|
|
31
|
+
response_ms_sum REAL DEFAULT 0,
|
|
32
|
+
response_count INTEGER DEFAULT 0,
|
|
33
|
+
UNIQUE(agent_id, agent_version, period_start)
|
|
34
|
+
)
|
|
35
|
+
`);
|
|
36
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_agent_metrics_agent ON agent_metrics(agent_id, agent_version)`);
|
|
37
|
+
db.exec(`
|
|
38
|
+
CREATE TABLE IF NOT EXISTS agent_activity (
|
|
39
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
40
|
+
agent_id TEXT NOT NULL,
|
|
41
|
+
agent_version INTEGER NOT NULL,
|
|
42
|
+
type TEXT NOT NULL,
|
|
43
|
+
input_summary TEXT,
|
|
44
|
+
output_summary TEXT,
|
|
45
|
+
tokens_used INTEGER DEFAULT 0,
|
|
46
|
+
tools_called TEXT,
|
|
47
|
+
duration_ms INTEGER DEFAULT 0,
|
|
48
|
+
score REAL,
|
|
49
|
+
details TEXT,
|
|
50
|
+
error_message TEXT,
|
|
51
|
+
run_id TEXT,
|
|
52
|
+
execution_status TEXT,
|
|
53
|
+
trigger_reason TEXT,
|
|
54
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
55
|
+
)
|
|
56
|
+
`);
|
|
57
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_agent_activity_agent ON agent_activity(agent_id, created_at)`);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=agent-store-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-store-tables.js","sourceRoot":"","sources":["../../../src/db/migrations/agent-store-tables.ts"],"names":[],"mappings":";;AAEA,wEA4DC;AA5DD,SAAgB,8BAA8B,CAAC,EAAkB;IAC/D,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;GAWP,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAE3F,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;GAiBP,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CACL,8FAA8F,CAC/F,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;GAmBP,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CACL,6FAA6F,CAC9F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-usage-agent-version.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/token-usage-agent-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAgB,oCAAoC,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAe7E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyTokenUsageAgentVersionMigration = applyTokenUsageAgentVersionMigration;
|
|
4
|
+
function applyTokenUsageAgentVersionMigration(db) {
|
|
5
|
+
const tableExists = db
|
|
6
|
+
.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'token_usage'")
|
|
7
|
+
.get();
|
|
8
|
+
if (!tableExists?.name) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const columns = db.prepare('PRAGMA table_info(token_usage)').all().map((column) => column.name);
|
|
12
|
+
if (!columns.includes('agent_version')) {
|
|
13
|
+
db.exec('ALTER TABLE token_usage ADD COLUMN agent_version INTEGER');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=token-usage-agent-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-usage-agent-version.js","sourceRoot":"","sources":["../../../src/db/migrations/token-usage-agent-version.ts"],"names":[],"mappings":";;AAEA,oFAeC;AAfD,SAAgB,oCAAoC,CAAC,EAAkB;IACrE,MAAM,WAAW,GAAG,EAAE;SACnB,OAAO,CAAC,8EAA8E,CAAC;SACvF,GAAG,EAAmC,CAAC;IAC1C,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GACX,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,EACjD,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACvC,EAAE,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-session-tables.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/validation-session-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAgB,qCAAqC,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CA8D9E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyValidationSessionTablesMigration = applyValidationSessionTablesMigration;
|
|
4
|
+
function applyValidationSessionTablesMigration(db) {
|
|
5
|
+
db.exec(`
|
|
6
|
+
CREATE TABLE IF NOT EXISTS validation_sessions (
|
|
7
|
+
id TEXT PRIMARY KEY,
|
|
8
|
+
agent_id TEXT NOT NULL,
|
|
9
|
+
agent_version INTEGER NOT NULL,
|
|
10
|
+
trigger_type TEXT NOT NULL,
|
|
11
|
+
goal TEXT,
|
|
12
|
+
metric_profile_json TEXT NOT NULL,
|
|
13
|
+
baseline_version INTEGER,
|
|
14
|
+
baseline_session_id TEXT,
|
|
15
|
+
execution_status TEXT NOT NULL,
|
|
16
|
+
validation_outcome TEXT NOT NULL,
|
|
17
|
+
summary TEXT,
|
|
18
|
+
recommendation TEXT,
|
|
19
|
+
before_snapshot_json TEXT,
|
|
20
|
+
after_snapshot_json TEXT,
|
|
21
|
+
report_json TEXT,
|
|
22
|
+
schema_version INTEGER NOT NULL DEFAULT 1,
|
|
23
|
+
requires_approval INTEGER DEFAULT 0,
|
|
24
|
+
started_at INTEGER NOT NULL,
|
|
25
|
+
ended_at INTEGER
|
|
26
|
+
)
|
|
27
|
+
`);
|
|
28
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_val_sessions_agent_status
|
|
29
|
+
ON validation_sessions(agent_id, validation_outcome)`);
|
|
30
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_val_sessions_agent_trigger
|
|
31
|
+
ON validation_sessions(agent_id, trigger_type, started_at)`);
|
|
32
|
+
db.exec(`
|
|
33
|
+
CREATE TABLE IF NOT EXISTS validation_metrics (
|
|
34
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
35
|
+
validation_session_id TEXT NOT NULL,
|
|
36
|
+
name TEXT NOT NULL,
|
|
37
|
+
value REAL NOT NULL,
|
|
38
|
+
baseline_value REAL,
|
|
39
|
+
delta_value REAL,
|
|
40
|
+
direction TEXT NOT NULL,
|
|
41
|
+
created_at INTEGER NOT NULL
|
|
42
|
+
)
|
|
43
|
+
`);
|
|
44
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_val_metrics_session
|
|
45
|
+
ON validation_metrics(validation_session_id)`);
|
|
46
|
+
db.exec(`
|
|
47
|
+
CREATE TABLE IF NOT EXISTS agent_validation_state (
|
|
48
|
+
agent_id TEXT NOT NULL,
|
|
49
|
+
trigger_type TEXT NOT NULL,
|
|
50
|
+
approved_version INTEGER,
|
|
51
|
+
approved_session_id TEXT,
|
|
52
|
+
current_status TEXT,
|
|
53
|
+
last_validation_at INTEGER,
|
|
54
|
+
updated_at INTEGER NOT NULL,
|
|
55
|
+
PRIMARY KEY (agent_id, trigger_type)
|
|
56
|
+
)
|
|
57
|
+
`);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=validation-session-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-session-tables.js","sourceRoot":"","sources":["../../../src/db/migrations/validation-session-tables.ts"],"names":[],"mappings":";;AAEA,sFA8DC;AA9DD,SAAgB,qCAAqC,CAAC,EAAkB;IACtE,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;GAsBP,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CACL;0DACsD,CACvD,CAAC;IACF,EAAE,CAAC,IAAI,CACL;gEAC4D,CAC7D,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;GAWP,CAAC,CAAC;IACH,EAAE,CAAC,IAAI,CACL;kDAC8C,CAC/C,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;GAWP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -104,6 +104,13 @@ export declare class MessageRouter {
|
|
|
104
104
|
private memoryNoticeQueue;
|
|
105
105
|
private memoryAuditCooldowns;
|
|
106
106
|
private memoryAgentStats;
|
|
107
|
+
private sessionsDb;
|
|
108
|
+
setSessionsDb(db: import('../sqlite.js').default): void;
|
|
109
|
+
private uiCommandQueue;
|
|
110
|
+
setUICommandQueue(queue: import('../api/ui-command-handler.js').UICommandQueue): void;
|
|
111
|
+
private validationService;
|
|
112
|
+
setValidationService(svc: import('../validation/session-service.js').ValidationSessionService): void;
|
|
113
|
+
private getPageContextPrefix;
|
|
107
114
|
setGatewayRegistry(registry: GatewayRegistry): void;
|
|
108
115
|
setMemoryAgent(processManager: MemoryAgentProcessManagerLike): void;
|
|
109
116
|
getMemoryAgentStats(): {
|
|
@@ -219,6 +226,9 @@ export declare class MessageRouter {
|
|
|
219
226
|
private recordMemoryAuditAck;
|
|
220
227
|
private getPerTurnMemoryPrefix;
|
|
221
228
|
private triggerMemoryAgent;
|
|
229
|
+
private resolveFrontdoorAgentId;
|
|
230
|
+
private logFrontdoorActivity;
|
|
231
|
+
private logAgentActivity;
|
|
222
232
|
}
|
|
223
233
|
/**
|
|
224
234
|
* Create a mock agent loop for testing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/gateways/message-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC;AASpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/gateways/message-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,7 @@ const agent_notice_queue_js_1 = require("../memory/agent-notice-queue.js");
|
|
|
65
65
|
const scope_context_js_1 = require("../memory/scope-context.js");
|
|
66
66
|
const recall_bundle_formatter_js_1 = require("../memory/recall-bundle-formatter.js");
|
|
67
67
|
const save_candidate_extractor_js_1 = require("../memory/save-candidate-extractor.js");
|
|
68
|
+
const agent_store_js_1 = require("../db/agent-store.js");
|
|
68
69
|
const { DebugLogger } = debugLogger;
|
|
69
70
|
const logger = new DebugLogger('MessageRouter');
|
|
70
71
|
/**
|
|
@@ -85,6 +86,8 @@ const SENSITIVE_PATTERNS = [
|
|
|
85
86
|
/비밀.*키/i,
|
|
86
87
|
];
|
|
87
88
|
const KOREAN_TARGETS = new Set(['korean', '한국어']);
|
|
89
|
+
const VIEWER_CONTEXT_AGENT_LIST_LIMIT = 5;
|
|
90
|
+
const VIEWER_CONTEXT_ALERT_LIMIT = 3;
|
|
88
91
|
/**
|
|
89
92
|
* Sanitize user-supplied text before injecting into prompts.
|
|
90
93
|
* Escapes characters that can alter prompt structure.
|
|
@@ -99,7 +102,9 @@ function sanitizeForPrompt(text) {
|
|
|
99
102
|
.replace(/`/g, '\\`')
|
|
100
103
|
.replace(/\$/g, '\\$')
|
|
101
104
|
.replace(/\{/g, '\\{')
|
|
102
|
-
.replace(/\}/g, '\\}')
|
|
105
|
+
.replace(/\}/g, '\\}')
|
|
106
|
+
.replace(/</g, '<')
|
|
107
|
+
.replace(/>/g, '>');
|
|
103
108
|
}
|
|
104
109
|
function stripGatewayDecorations(text) {
|
|
105
110
|
return text.replace(/^(?:\s*\|\|[\s\S]*?\|\|\s*)+/u, '').trim();
|
|
@@ -147,6 +152,96 @@ class MessageRouter {
|
|
|
147
152
|
lastExtraction: null,
|
|
148
153
|
recentExtractions: [],
|
|
149
154
|
};
|
|
155
|
+
// Sessions DB for conductor activity logging
|
|
156
|
+
sessionsDb = null;
|
|
157
|
+
setSessionsDb(db) {
|
|
158
|
+
this.sessionsDb = db;
|
|
159
|
+
}
|
|
160
|
+
// UI command queue for page context awareness
|
|
161
|
+
uiCommandQueue = null;
|
|
162
|
+
setUICommandQueue(queue) {
|
|
163
|
+
this.uiCommandQueue = queue;
|
|
164
|
+
}
|
|
165
|
+
// Validation service for memory agent + conductor sessions
|
|
166
|
+
validationService = null;
|
|
167
|
+
setValidationService(svc) {
|
|
168
|
+
this.validationService = svc;
|
|
169
|
+
}
|
|
170
|
+
getPageContextPrefix(message) {
|
|
171
|
+
if (!this.uiCommandQueue) {
|
|
172
|
+
return '';
|
|
173
|
+
}
|
|
174
|
+
if (message.source !== 'viewer') {
|
|
175
|
+
return '';
|
|
176
|
+
}
|
|
177
|
+
const ctx = this.uiCommandQueue.getPageContext(message.channelId);
|
|
178
|
+
if (!ctx || !ctx.currentRoute) {
|
|
179
|
+
return '';
|
|
180
|
+
}
|
|
181
|
+
const data = ctx.pageData ?? null;
|
|
182
|
+
// Build rich context that tells conductor exactly what the user sees
|
|
183
|
+
const lines = ['<viewer-context>'];
|
|
184
|
+
lines.push(`route: ${sanitizeForPrompt(ctx.currentRoute)}`);
|
|
185
|
+
if (ctx.selectedItem?.type && ctx.selectedItem?.id) {
|
|
186
|
+
lines.push(`selected_item: ${sanitizeForPrompt(ctx.selectedItem.type)}:${sanitizeForPrompt(ctx.selectedItem.id)}`);
|
|
187
|
+
}
|
|
188
|
+
if (data?.summary) {
|
|
189
|
+
lines.push(`summary: ${sanitizeForPrompt(String(data.summary))}`);
|
|
190
|
+
}
|
|
191
|
+
if (data?.pageType === 'agent-list' && Array.isArray(data.agents)) {
|
|
192
|
+
lines.push(`agents:`);
|
|
193
|
+
const selectedAgentId = ctx.selectedItem?.type === 'agent' ? ctx.selectedItem.id : null;
|
|
194
|
+
const allAgents = data.agents;
|
|
195
|
+
const shownAgents = selectedAgentId !== null
|
|
196
|
+
? allAgents.filter((agent) => String(agent.id ?? '') === selectedAgentId).slice(0, 1)
|
|
197
|
+
: allAgents.slice(0, VIEWER_CONTEXT_AGENT_LIST_LIMIT);
|
|
198
|
+
for (const a of shownAgents) {
|
|
199
|
+
const parts = [` - ${sanitizeForPrompt(String(a.name || a.id || 'unknown'))}`];
|
|
200
|
+
if (a.validation) {
|
|
201
|
+
parts.push(`validation:${sanitizeForPrompt(String(a.validation))}`);
|
|
202
|
+
}
|
|
203
|
+
if (a.enabled === false) {
|
|
204
|
+
parts.push('(disabled)');
|
|
205
|
+
}
|
|
206
|
+
if (a.system === true) {
|
|
207
|
+
parts.push('(system)');
|
|
208
|
+
}
|
|
209
|
+
lines.push(parts.join(' '));
|
|
210
|
+
}
|
|
211
|
+
const totalAgents = allAgents.length;
|
|
212
|
+
const enabledAgents = allAgents.filter((agent) => agent.enabled !== false).length;
|
|
213
|
+
const disabledAgents = totalAgents - enabledAgents;
|
|
214
|
+
const systemAgents = allAgents.filter((agent) => agent.system === true).length;
|
|
215
|
+
const hiddenAgents = Math.max(0, totalAgents - shownAgents.length);
|
|
216
|
+
lines.push(`agent_counts: total=${totalAgents} enabled=${enabledAgents} disabled=${disabledAgents} system=${systemAgents}`);
|
|
217
|
+
if (hiddenAgents > 0) {
|
|
218
|
+
lines.push(`(+${hiddenAgents} more agents)`);
|
|
219
|
+
}
|
|
220
|
+
if (Array.isArray(data.alerts) && data.alerts.length > 0) {
|
|
221
|
+
const shownAlerts = data.alerts.slice(0, VIEWER_CONTEXT_ALERT_LIMIT);
|
|
222
|
+
lines.push(`alerts: ${shownAlerts.map((item) => sanitizeForPrompt(String(item))).join(', ')}`);
|
|
223
|
+
const hiddenAlerts = data.alerts.length - shownAlerts.length;
|
|
224
|
+
if (hiddenAlerts > 0) {
|
|
225
|
+
lines.push(`(+${hiddenAlerts} more alerts)`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (data?.pageType === 'agent-detail') {
|
|
230
|
+
const agent = data.agent;
|
|
231
|
+
if (agent) {
|
|
232
|
+
lines.push(`agent: ${sanitizeForPrompt(String(agent.name))} (${sanitizeForPrompt(String(agent.id))}) v${sanitizeForPrompt(String(agent.version))} tier:${sanitizeForPrompt(String(agent.tier))} model:${sanitizeForPrompt(String(agent.model))}`);
|
|
233
|
+
}
|
|
234
|
+
if (data.activeTab) {
|
|
235
|
+
lines.push(`active_tab: ${sanitizeForPrompt(String(data.activeTab))}`);
|
|
236
|
+
}
|
|
237
|
+
const val = data.validation;
|
|
238
|
+
if (val) {
|
|
239
|
+
lines.push(`validation: outcome=${sanitizeForPrompt(String(val.outcome))} execution=${sanitizeForPrompt(String(val.execution))} baseline=v${sanitizeForPrompt(String(val.baseline_version ?? 'none'))}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
lines.push('</viewer-context>');
|
|
243
|
+
return lines.join('\n') + '\n';
|
|
244
|
+
}
|
|
150
245
|
setGatewayRegistry(registry) {
|
|
151
246
|
this.gatewayRegistry = registry;
|
|
152
247
|
}
|
|
@@ -493,8 +588,9 @@ This protects your credentials from being exposed in chat logs.`;
|
|
|
493
588
|
console.log(`[MessageRouter] Auto-injected translation prompt for image`);
|
|
494
589
|
}
|
|
495
590
|
}
|
|
496
|
-
// Add text content (with memory context
|
|
497
|
-
const
|
|
591
|
+
// Add text content (with memory context, skill context, and page context)
|
|
592
|
+
const pageCtx = this.getPageContextPrefix(message);
|
|
593
|
+
const effectiveMessageText = `${pageCtx}${memoryPrefix}${skillPrefix}${messageText || ''}`;
|
|
498
594
|
if (effectiveMessageText) {
|
|
499
595
|
contentBlocks.push({ type: 'text', text: effectiveMessageText });
|
|
500
596
|
}
|
|
@@ -515,13 +611,18 @@ This protects your credentials from being exposed in chat logs.`;
|
|
|
515
611
|
}
|
|
516
612
|
}
|
|
517
613
|
}
|
|
614
|
+
const conductorStart = Date.now();
|
|
518
615
|
const result = await this.agentLoop.runWithContent(contentBlocks, options);
|
|
519
616
|
response = result.response;
|
|
617
|
+
this.logFrontdoorActivity(message, message.text, response, Date.now() - conductorStart);
|
|
520
618
|
}
|
|
521
619
|
else {
|
|
522
|
-
const
|
|
620
|
+
const pageCtx = this.getPageContextPrefix(message);
|
|
621
|
+
const effectiveText = `${pageCtx}${memoryPrefix}${skillPrefix}${message.text}`;
|
|
622
|
+
const conductorStart = Date.now();
|
|
523
623
|
const result = await this.agentLoop.run(effectiveText, options);
|
|
524
624
|
response = result.response;
|
|
625
|
+
this.logFrontdoorActivity(message, message.text, response, Date.now() - conductorStart);
|
|
525
626
|
}
|
|
526
627
|
// Auto-extract facts from conversation (fire-and-forget, non-blocking)
|
|
527
628
|
if (response && message.text) {
|
|
@@ -540,6 +641,8 @@ This protects your credentials from being exposed in chat logs.`;
|
|
|
540
641
|
}
|
|
541
642
|
}
|
|
542
643
|
catch (error) {
|
|
644
|
+
const durationMs = Date.now() - startTime;
|
|
645
|
+
this.logAgentActivity(this.resolveFrontdoorAgentId(message), 'task_error', message.text?.slice(0, 200), undefined, durationMs, error instanceof Error ? error.message : String(error));
|
|
543
646
|
// CLI timeout or resume failure - invalidate session to force fresh start next time
|
|
544
647
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
545
648
|
const isCriticalError = errorMsg.includes('timeout') ||
|
|
@@ -1059,8 +1162,10 @@ INSTRUCTION:
|
|
|
1059
1162
|
return `[MAMA Memory]\n${context.prompt}\n[/MAMA Memory]\n\n`;
|
|
1060
1163
|
}
|
|
1061
1164
|
async triggerMemoryAgent(channelKey, userText, botResponse, message) {
|
|
1062
|
-
|
|
1165
|
+
const memoryAuditQueue = this.memoryAuditQueue;
|
|
1166
|
+
if (!this.memoryAgentProcessManager || !memoryAuditQueue) {
|
|
1063
1167
|
return;
|
|
1168
|
+
}
|
|
1064
1169
|
const now = Date.now();
|
|
1065
1170
|
const source = message?.source ?? 'memory-agent';
|
|
1066
1171
|
const channelId = message?.channelId ?? 'shared';
|
|
@@ -1123,15 +1228,84 @@ INSTRUCTION:
|
|
|
1123
1228
|
const displayTopic = candidates[0]?.topicHint || userText.slice(0, 80).trim() || 'memory_audit';
|
|
1124
1229
|
const deltaKeySource = candidates[0]?.id || userText;
|
|
1125
1230
|
const deltaKey = (0, node_crypto_1.createHash)('sha256').update(deltaKeySource).digest('hex').slice(0, 16);
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1231
|
+
const memoryStart = Date.now();
|
|
1232
|
+
// Start validation session for memory agent
|
|
1233
|
+
let memValSession = null;
|
|
1234
|
+
if (this.validationService && this.sessionsDb) {
|
|
1235
|
+
try {
|
|
1236
|
+
const ver = (0, agent_store_js_1.getLatestVersion)(this.sessionsDb, 'memory');
|
|
1237
|
+
memValSession = this.validationService.startSession('memory', ver?.version ?? 0, 'audit', {
|
|
1238
|
+
goal: `Extract: ${displayTopic.slice(0, 100)}`,
|
|
1239
|
+
});
|
|
1240
|
+
}
|
|
1241
|
+
catch {
|
|
1242
|
+
/* non-fatal */
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
void (async () => {
|
|
1246
|
+
try {
|
|
1247
|
+
const ack = await memoryAuditQueue.enqueue(job);
|
|
1248
|
+
this.recordMemoryAuditAck(ack, topic, channelKey, displayTopic, deltaKey);
|
|
1249
|
+
const dur = Date.now() - memoryStart;
|
|
1250
|
+
this.logAgentActivity('memory', 'task_complete', displayTopic.slice(0, 200), undefined, dur);
|
|
1251
|
+
if (memValSession && this.validationService) {
|
|
1252
|
+
try {
|
|
1253
|
+
this.validationService.finalizeSession(memValSession.id, {
|
|
1254
|
+
execution_status: 'completed',
|
|
1255
|
+
metrics: { duration_ms: dur },
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1258
|
+
catch {
|
|
1259
|
+
/* non-fatal */
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
catch (err) {
|
|
1264
|
+
this.memoryAgentStats.acksFailed++;
|
|
1265
|
+
const dur = Date.now() - memoryStart;
|
|
1266
|
+
this.logAgentActivity('memory', 'task_error', displayTopic.slice(0, 200), undefined, dur, err instanceof Error ? err.message : String(err));
|
|
1267
|
+
if (memValSession && this.validationService) {
|
|
1268
|
+
try {
|
|
1269
|
+
this.validationService.finalizeSession(memValSession.id, {
|
|
1270
|
+
execution_status: 'failed',
|
|
1271
|
+
error_message: err instanceof Error ? err.message : String(err),
|
|
1272
|
+
metrics: { duration_ms: dur },
|
|
1273
|
+
});
|
|
1274
|
+
}
|
|
1275
|
+
catch {
|
|
1276
|
+
/* non-fatal */
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
logger.warn(`[memory-agent] Failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1280
|
+
}
|
|
1281
|
+
})();
|
|
1282
|
+
}
|
|
1283
|
+
// ── Activity Logging (shared by conductor + memory agent) ───────────
|
|
1284
|
+
resolveFrontdoorAgentId(message) {
|
|
1285
|
+
return message.source === 'viewer' ? 'os-agent' : 'conductor';
|
|
1286
|
+
}
|
|
1287
|
+
logFrontdoorActivity(message, inputText, responseText, durationMs) {
|
|
1288
|
+
this.logAgentActivity(this.resolveFrontdoorAgentId(message), 'task_complete', inputText?.slice(0, 200), responseText?.slice(0, 500), durationMs);
|
|
1289
|
+
}
|
|
1290
|
+
logAgentActivity(agentId, type, inputSummary, outputSummary, durationMs, errorMessage) {
|
|
1291
|
+
if (!this.sessionsDb) {
|
|
1292
|
+
return;
|
|
1293
|
+
}
|
|
1294
|
+
try {
|
|
1295
|
+
const ver = (0, agent_store_js_1.getLatestVersion)(this.sessionsDb, agentId);
|
|
1296
|
+
(0, agent_store_js_1.logActivity)(this.sessionsDb, {
|
|
1297
|
+
agent_id: agentId,
|
|
1298
|
+
agent_version: ver?.version ?? 0,
|
|
1299
|
+
type,
|
|
1300
|
+
input_summary: inputSummary,
|
|
1301
|
+
output_summary: outputSummary,
|
|
1302
|
+
duration_ms: durationMs ?? 0,
|
|
1303
|
+
error_message: errorMessage,
|
|
1304
|
+
});
|
|
1305
|
+
}
|
|
1306
|
+
catch {
|
|
1307
|
+
// Non-fatal — activity logging should never break message handling
|
|
1308
|
+
}
|
|
1135
1309
|
}
|
|
1136
1310
|
}
|
|
1137
1311
|
exports.MessageRouter = MessageRouter;
|