@jungjaehoon/mama-os 0.1.1
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 +67 -0
- package/README.md +643 -0
- package/dist/agent/agent-loop.d.ts +98 -0
- package/dist/agent/agent-loop.d.ts.map +1 -0
- package/dist/agent/agent-loop.js +417 -0
- package/dist/agent/agent-loop.js.map +1 -0
- package/dist/agent/auto-recall.d.ts +48 -0
- package/dist/agent/auto-recall.d.ts.map +1 -0
- package/dist/agent/auto-recall.js +178 -0
- package/dist/agent/auto-recall.js.map +1 -0
- package/dist/agent/claude-cli-wrapper.d.ts +130 -0
- package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
- package/dist/agent/claude-cli-wrapper.js +227 -0
- package/dist/agent/claude-cli-wrapper.js.map +1 -0
- package/dist/agent/claude-client.d.ts +50 -0
- package/dist/agent/claude-client.d.ts.map +1 -0
- package/dist/agent/claude-client.js +214 -0
- package/dist/agent/claude-client.js.map +1 -0
- package/dist/agent/gateway-tool-executor.d.ts +75 -0
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
- package/dist/agent/gateway-tool-executor.js +348 -0
- package/dist/agent/gateway-tool-executor.js.map +1 -0
- package/dist/agent/index.d.ts +13 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +18 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/mcp-executor.d.ts +75 -0
- package/dist/agent/mcp-executor.d.ts.map +1 -0
- package/dist/agent/mcp-executor.js +307 -0
- package/dist/agent/mcp-executor.js.map +1 -0
- package/dist/agent/session-pool.d.ts +148 -0
- package/dist/agent/session-pool.d.ts.map +1 -0
- package/dist/agent/session-pool.js +272 -0
- package/dist/agent/session-pool.js.map +1 -0
- package/dist/agent/streaming-callback-manager.d.ts +85 -0
- package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
- package/dist/agent/streaming-callback-manager.js +103 -0
- package/dist/agent/streaming-callback-manager.js.map +1 -0
- package/dist/agent/types.d.ts +437 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +29 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/api/cron-handler.d.ts +44 -0
- package/dist/api/cron-handler.d.ts.map +1 -0
- package/dist/api/cron-handler.js +195 -0
- package/dist/api/cron-handler.js.map +1 -0
- package/dist/api/error-handler.d.ts +22 -0
- package/dist/api/error-handler.d.ts.map +1 -0
- package/dist/api/error-handler.js +104 -0
- package/dist/api/error-handler.js.map +1 -0
- package/dist/api/heartbeat-handler.d.ts +49 -0
- package/dist/api/heartbeat-handler.d.ts.map +1 -0
- package/dist/api/heartbeat-handler.js +91 -0
- package/dist/api/heartbeat-handler.js.map +1 -0
- package/dist/api/index.d.ts +61 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +145 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types.d.ts +156 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +62 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-manager.d.ts +59 -0
- package/dist/auth/oauth-manager.d.ts.map +1 -0
- package/dist/auth/oauth-manager.js +237 -0
- package/dist/auth/oauth-manager.js.map +1 -0
- package/dist/auth/types.d.ts +92 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +23 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +155 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +89 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +134 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/start.d.ts +24 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +1073 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +85 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +10 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +65 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/config/config-manager.d.ts +51 -0
- package/dist/cli/config/config-manager.d.ts.map +1 -0
- package/dist/cli/config/config-manager.js +216 -0
- package/dist/cli/config/config-manager.js.map +1 -0
- package/dist/cli/config/types.d.ts +172 -0
- package/dist/cli/config/types.d.ts.map +1 -0
- package/dist/cli/config/types.js +48 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +92 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/pid-manager.d.ts +66 -0
- package/dist/cli/utils/pid-manager.d.ts.map +1 -0
- package/dist/cli/utils/pid-manager.js +167 -0
- package/dist/cli/utils/pid-manager.js.map +1 -0
- package/dist/concurrency/index.d.ts +13 -0
- package/dist/concurrency/index.d.ts.map +1 -0
- package/dist/concurrency/index.js +22 -0
- package/dist/concurrency/index.js.map +1 -0
- package/dist/concurrency/lane-manager.d.ts +113 -0
- package/dist/concurrency/lane-manager.d.ts.map +1 -0
- package/dist/concurrency/lane-manager.js +245 -0
- package/dist/concurrency/lane-manager.js.map +1 -0
- package/dist/concurrency/session-key.d.ts +41 -0
- package/dist/concurrency/session-key.d.ts.map +1 -0
- package/dist/concurrency/session-key.js +61 -0
- package/dist/concurrency/session-key.js.map +1 -0
- package/dist/concurrency/types.d.ts +69 -0
- package/dist/concurrency/types.d.ts.map +1 -0
- package/dist/concurrency/types.js +16 -0
- package/dist/concurrency/types.js.map +1 -0
- package/dist/gateways/channel-history.d.ts +102 -0
- package/dist/gateways/channel-history.d.ts.map +1 -0
- package/dist/gateways/channel-history.js +181 -0
- package/dist/gateways/channel-history.js.map +1 -0
- package/dist/gateways/context-injector.d.ts +74 -0
- package/dist/gateways/context-injector.d.ts.map +1 -0
- package/dist/gateways/context-injector.js +121 -0
- package/dist/gateways/context-injector.js.map +1 -0
- package/dist/gateways/discord.d.ts +122 -0
- package/dist/gateways/discord.d.ts.map +1 -0
- package/dist/gateways/discord.js +602 -0
- package/dist/gateways/discord.js.map +1 -0
- package/dist/gateways/index.d.ts +30 -0
- package/dist/gateways/index.d.ts.map +1 -0
- package/dist/gateways/index.js +49 -0
- package/dist/gateways/index.js.map +1 -0
- package/dist/gateways/message-router.d.ts +116 -0
- package/dist/gateways/message-router.d.ts.map +1 -0
- package/dist/gateways/message-router.js +315 -0
- package/dist/gateways/message-router.js.map +1 -0
- package/dist/gateways/message-splitter.d.ts +54 -0
- package/dist/gateways/message-splitter.d.ts.map +1 -0
- package/dist/gateways/message-splitter.js +146 -0
- package/dist/gateways/message-splitter.js.map +1 -0
- package/dist/gateways/plugin-loader.d.ts +76 -0
- package/dist/gateways/plugin-loader.d.ts.map +1 -0
- package/dist/gateways/plugin-loader.js +221 -0
- package/dist/gateways/plugin-loader.js.map +1 -0
- package/dist/gateways/session-store.d.ts +77 -0
- package/dist/gateways/session-store.d.ts.map +1 -0
- package/dist/gateways/session-store.js +233 -0
- package/dist/gateways/session-store.js.map +1 -0
- package/dist/gateways/slack.d.ts +90 -0
- package/dist/gateways/slack.d.ts.map +1 -0
- package/dist/gateways/slack.js +281 -0
- package/dist/gateways/slack.js.map +1 -0
- package/dist/gateways/telegram.d.ts +79 -0
- package/dist/gateways/telegram.d.ts.map +1 -0
- package/dist/gateways/telegram.js +207 -0
- package/dist/gateways/telegram.js.map +1 -0
- package/dist/gateways/types.d.ts +340 -0
- package/dist/gateways/types.d.ts.map +1 -0
- package/dist/gateways/types.js +6 -0
- package/dist/gateways/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/memory-logger.d.ts +47 -0
- package/dist/memory/memory-logger.d.ts.map +1 -0
- package/dist/memory/memory-logger.js +126 -0
- package/dist/memory/memory-logger.js.map +1 -0
- package/dist/onboarding/all-tools.d.ts +18 -0
- package/dist/onboarding/all-tools.d.ts.map +1 -0
- package/dist/onboarding/all-tools.js +149 -0
- package/dist/onboarding/all-tools.js.map +1 -0
- package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
- package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
- package/dist/onboarding/autonomous-discovery-tools.js +268 -0
- package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
- package/dist/onboarding/bootstrap-template.d.ts +5 -0
- package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
- package/dist/onboarding/bootstrap-template.js +142 -0
- package/dist/onboarding/bootstrap-template.js.map +1 -0
- package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
- package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
- package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
- package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
- package/dist/onboarding/onboarding-state.d.ts +70 -0
- package/dist/onboarding/onboarding-state.d.ts.map +1 -0
- package/dist/onboarding/onboarding-state.js +184 -0
- package/dist/onboarding/onboarding-state.js.map +1 -0
- package/dist/onboarding/personality-quiz.d.ts +35 -0
- package/dist/onboarding/personality-quiz.d.ts.map +1 -0
- package/dist/onboarding/personality-quiz.js +219 -0
- package/dist/onboarding/personality-quiz.js.map +1 -0
- package/dist/onboarding/phase-5-summary.d.ts +22 -0
- package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
- package/dist/onboarding/phase-5-summary.js +151 -0
- package/dist/onboarding/phase-5-summary.js.map +1 -0
- package/dist/onboarding/phase-6-security.d.ts +33 -0
- package/dist/onboarding/phase-6-security.d.ts.map +1 -0
- package/dist/onboarding/phase-6-security.js +473 -0
- package/dist/onboarding/phase-6-security.js.map +1 -0
- package/dist/onboarding/phase-7-integrations.d.ts +66 -0
- package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
- package/dist/onboarding/phase-7-integrations.js +619 -0
- package/dist/onboarding/phase-7-integrations.js.map +1 -0
- package/dist/onboarding/phase-8-demo.d.ts +43 -0
- package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
- package/dist/onboarding/phase-8-demo.js +346 -0
- package/dist/onboarding/phase-8-demo.js.map +1 -0
- package/dist/onboarding/phase-9-finalization.d.ts +22 -0
- package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
- package/dist/onboarding/phase-9-finalization.js +375 -0
- package/dist/onboarding/phase-9-finalization.js.map +1 -0
- package/dist/onboarding/ritual-prompt.d.ts +2 -0
- package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
- package/dist/onboarding/ritual-prompt.js +285 -0
- package/dist/onboarding/ritual-prompt.js.map +1 -0
- package/dist/onboarding/ritual-tools.d.ts +13 -0
- package/dist/onboarding/ritual-tools.d.ts.map +1 -0
- package/dist/onboarding/ritual-tools.js +93 -0
- package/dist/onboarding/ritual-tools.js.map +1 -0
- package/dist/runners/cli-runner.d.ts +59 -0
- package/dist/runners/cli-runner.d.ts.map +1 -0
- package/dist/runners/cli-runner.js +190 -0
- package/dist/runners/cli-runner.js.map +1 -0
- package/dist/runners/index.d.ts +11 -0
- package/dist/runners/index.d.ts.map +1 -0
- package/dist/runners/index.js +15 -0
- package/dist/runners/index.js.map +1 -0
- package/dist/runners/types.d.ts +81 -0
- package/dist/runners/types.d.ts.map +1 -0
- package/dist/runners/types.js +31 -0
- package/dist/runners/types.js.map +1 -0
- package/dist/scheduler/cron-scheduler.d.ts +115 -0
- package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
- package/dist/scheduler/cron-scheduler.js +320 -0
- package/dist/scheduler/cron-scheduler.js.map +1 -0
- package/dist/scheduler/heartbeat.d.ts +53 -0
- package/dist/scheduler/heartbeat.d.ts.map +1 -0
- package/dist/scheduler/heartbeat.js +160 -0
- package/dist/scheduler/heartbeat.js.map +1 -0
- package/dist/scheduler/index.d.ts +22 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +31 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/job-lock.d.ts +85 -0
- package/dist/scheduler/job-lock.d.ts.map +1 -0
- package/dist/scheduler/job-lock.js +137 -0
- package/dist/scheduler/job-lock.js.map +1 -0
- package/dist/scheduler/recovery.d.ts +78 -0
- package/dist/scheduler/recovery.d.ts.map +1 -0
- package/dist/scheduler/recovery.js +124 -0
- package/dist/scheduler/recovery.js.map +1 -0
- package/dist/scheduler/schedule-store.d.ts +112 -0
- package/dist/scheduler/schedule-store.d.ts.map +1 -0
- package/dist/scheduler/schedule-store.js +259 -0
- package/dist/scheduler/schedule-store.js.map +1 -0
- package/dist/scheduler/token-keep-alive.d.ts +49 -0
- package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
- package/dist/scheduler/token-keep-alive.js +102 -0
- package/dist/scheduler/token-keep-alive.js.map +1 -0
- package/dist/scheduler/types.d.ts +96 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +21 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/setup/setup-prompt.d.ts +2 -0
- package/dist/setup/setup-prompt.d.ts.map +1 -0
- package/dist/setup/setup-prompt.js +138 -0
- package/dist/setup/setup-prompt.js.map +1 -0
- package/dist/setup/setup-server.d.ts +8 -0
- package/dist/setup/setup-server.d.ts.map +1 -0
- package/dist/setup/setup-server.js +71 -0
- package/dist/setup/setup-server.js.map +1 -0
- package/dist/setup/setup-tools.d.ts +13 -0
- package/dist/setup/setup-tools.d.ts.map +1 -0
- package/dist/setup/setup-tools.js +103 -0
- package/dist/setup/setup-tools.js.map +1 -0
- package/dist/setup/setup-websocket.d.ts +6 -0
- package/dist/setup/setup-websocket.d.ts.map +1 -0
- package/dist/setup/setup-websocket.js +312 -0
- package/dist/setup/setup-websocket.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +26 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-executor.d.ts +48 -0
- package/dist/skills/skill-executor.d.ts.map +1 -0
- package/dist/skills/skill-executor.js +483 -0
- package/dist/skills/skill-executor.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +40 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +225 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-matcher.d.ts +33 -0
- package/dist/skills/skill-matcher.d.ts.map +1 -0
- package/dist/skills/skill-matcher.js +190 -0
- package/dist/skills/skill-matcher.js.map +1 -0
- package/dist/skills/types.d.ts +123 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +12 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/browser-tool.d.ts +149 -0
- package/dist/tools/browser-tool.d.ts.map +1 -0
- package/dist/tools/browser-tool.js +257 -0
- package/dist/tools/browser-tool.js.map +1 -0
- package/package.json +84 -0
- package/public/favicon.ico +0 -0
- package/public/setup.html +1026 -0
- package/public/viewer/icons/icon-192.png +0 -0
- package/public/viewer/icons/icon-512.png +0 -0
- package/public/viewer/js/modules/chat.js +1587 -0
- package/public/viewer/js/modules/dashboard.js +275 -0
- package/public/viewer/js/modules/graph.js +997 -0
- package/public/viewer/js/modules/memory.js +353 -0
- package/public/viewer/js/modules/settings.js +255 -0
- package/public/viewer/js/utils/api.js +169 -0
- package/public/viewer/js/utils/dom.js +92 -0
- package/public/viewer/js/utils/format.js +192 -0
- package/public/viewer/manifest.json +26 -0
- package/public/viewer/sw.js +131 -0
- package/public/viewer/viewer.css +500 -0
- package/public/viewer/viewer.html +1535 -0
- package/scripts/postinstall.js +118 -0
- package/templates/skills/document-analyze.md +63 -0
- package/templates/skills/heartbeat-report.md +75 -0
- package/templates/skills/image-translate.md +67 -0
- package/templates/workspace/skill-forge/DESIGN.md +115 -0
- package/templates/workspace/skill-forge/agents/architect.ts +295 -0
- package/templates/workspace/skill-forge/agents/developer.ts +364 -0
- package/templates/workspace/skill-forge/agents/qa.ts +313 -0
- package/templates/workspace/skill-forge/claude-api.ts +353 -0
- package/templates/workspace/skill-forge/discord-ui.ts +580 -0
- package/templates/workspace/skill-forge/error-handler.ts +354 -0
- package/templates/workspace/skill-forge/mama-integration.ts +357 -0
- package/templates/workspace/skill-forge/orchestrator.ts +495 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
- package/templates/workspace/skill-forge/package.json +21 -0
- package/templates/workspace/skill-forge/state/session.json +132 -0
- package/templates/workspace/skill-forge/test-e2e.ts +139 -0
- package/templates/workspace/skill-forge/tsconfig.json +20 -0
- package/templates/workspace/skill-forge/types.ts +159 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude API Client for MAMA Standalone
|
|
4
|
+
*
|
|
5
|
+
* Uses Claude Messages API with OAuth tokens (OpenClaw Gateway 방식 이식).
|
|
6
|
+
* @anthropic-ai/sdk의 authToken 옵션 사용 (pi-ai 방식)
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ClaudeClient = void 0;
|
|
13
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
14
|
+
const types_js_1 = require("./types.js");
|
|
15
|
+
/**
|
|
16
|
+
* Default configuration
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
|
|
19
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
20
|
+
/**
|
|
21
|
+
* Claude Code stealth headers for OAuth authentication
|
|
22
|
+
* From: @mariozechner/pi-ai/dist/providers/anthropic.js
|
|
23
|
+
*
|
|
24
|
+
* CRITICAL: OAuth tokens require:
|
|
25
|
+
* 1. apiKey: null (not empty string!)
|
|
26
|
+
* 2. System prompt MUST start with Claude Code identity
|
|
27
|
+
* 3. Proper beta features in header
|
|
28
|
+
*/
|
|
29
|
+
const CLAUDE_CODE_VERSION = '2.1.2';
|
|
30
|
+
const OAUTH_HEADERS = {
|
|
31
|
+
accept: 'application/json',
|
|
32
|
+
'anthropic-dangerous-direct-browser-access': 'true',
|
|
33
|
+
'anthropic-beta': 'claude-code-20250219,oauth-2025-04-20,fine-grained-tool-streaming-2025-05-14',
|
|
34
|
+
'user-agent': `claude-cli/${CLAUDE_CODE_VERSION} (external, cli)`,
|
|
35
|
+
'x-app': 'cli',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Required Claude Code identity system prompt for OAuth
|
|
39
|
+
* Without this, OAuth tokens are rejected with "only authorized for use with Claude Code"
|
|
40
|
+
*/
|
|
41
|
+
const CLAUDE_CODE_IDENTITY = "You are Claude Code, Anthropic's official CLI for Claude.";
|
|
42
|
+
class ClaudeClient {
|
|
43
|
+
oauthManager;
|
|
44
|
+
client = null;
|
|
45
|
+
lastToken = null;
|
|
46
|
+
constructor(oauthManager, _options = {}) {
|
|
47
|
+
this.oauthManager = oauthManager;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get or create Anthropic client with OAuth token
|
|
51
|
+
* Recreates client if token changes (refresh)
|
|
52
|
+
*/
|
|
53
|
+
async getClient() {
|
|
54
|
+
const token = await this.oauthManager.getToken();
|
|
55
|
+
if (!token) {
|
|
56
|
+
throw new types_js_1.AgentError('No access token available. Please run: mama login', 'AUTH_ERROR', undefined, false);
|
|
57
|
+
}
|
|
58
|
+
// Recreate client if token changed
|
|
59
|
+
if (this.client && this.lastToken === token) {
|
|
60
|
+
return this.client;
|
|
61
|
+
}
|
|
62
|
+
// Create new client with OAuth token (pi-ai 방식)
|
|
63
|
+
// CRITICAL: apiKey MUST be null (not empty string!) for OAuth to work
|
|
64
|
+
this.client = new sdk_1.default({
|
|
65
|
+
apiKey: null, // Must be null for OAuth!
|
|
66
|
+
authToken: token, // OAuth token goes here
|
|
67
|
+
defaultHeaders: OAUTH_HEADERS,
|
|
68
|
+
dangerouslyAllowBrowser: true,
|
|
69
|
+
});
|
|
70
|
+
this.lastToken = token;
|
|
71
|
+
return this.client;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Send a message to Claude via API
|
|
75
|
+
*
|
|
76
|
+
* @param messages - Conversation history
|
|
77
|
+
* @param options - Request options including tools
|
|
78
|
+
* @returns Claude API response
|
|
79
|
+
* @throws AgentError on API errors
|
|
80
|
+
*/
|
|
81
|
+
async sendMessage(messages, options = {}) {
|
|
82
|
+
const client = await this.getClient();
|
|
83
|
+
const model = options.model ?? DEFAULT_MODEL;
|
|
84
|
+
const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
85
|
+
console.log(`[ClaudeClient] API call: model=${model}, tools=${options.tools?.length || 0}, messages=${messages.length}`);
|
|
86
|
+
try {
|
|
87
|
+
// Build request params
|
|
88
|
+
const params = {
|
|
89
|
+
model,
|
|
90
|
+
max_tokens: maxTokens,
|
|
91
|
+
messages: this.formatMessages(messages),
|
|
92
|
+
};
|
|
93
|
+
// OAuth tokens REQUIRE Claude Code identity in system prompt
|
|
94
|
+
// Without this, API returns: "This credential is only authorized for use with Claude Code"
|
|
95
|
+
const systemBlocks = [
|
|
96
|
+
{
|
|
97
|
+
type: 'text',
|
|
98
|
+
text: CLAUDE_CODE_IDENTITY,
|
|
99
|
+
cache_control: { type: 'ephemeral' },
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
// Add custom system prompt after identity
|
|
103
|
+
if (options.system) {
|
|
104
|
+
systemBlocks.push({
|
|
105
|
+
type: 'text',
|
|
106
|
+
text: options.system,
|
|
107
|
+
cache_control: { type: 'ephemeral' },
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
params.system = systemBlocks;
|
|
111
|
+
// Add tools if provided - THIS IS THE KEY DIFFERENCE
|
|
112
|
+
if (options.tools && options.tools.length > 0) {
|
|
113
|
+
params.tools = options.tools.map((tool) => ({
|
|
114
|
+
name: tool.name,
|
|
115
|
+
description: tool.description,
|
|
116
|
+
input_schema: tool.input_schema,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
// Call API using SDK
|
|
120
|
+
const response = await client.messages.create(params);
|
|
121
|
+
console.log(`[ClaudeClient] Response: stop_reason=${response.stop_reason}, content_blocks=${response.content?.length || 0}`);
|
|
122
|
+
// Convert to our ClaudeResponse type
|
|
123
|
+
return {
|
|
124
|
+
id: response.id,
|
|
125
|
+
type: 'message',
|
|
126
|
+
role: 'assistant',
|
|
127
|
+
content: response.content,
|
|
128
|
+
model: response.model,
|
|
129
|
+
stop_reason: response.stop_reason,
|
|
130
|
+
stop_sequence: response.stop_sequence ?? null,
|
|
131
|
+
usage: response.usage,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error instanceof types_js_1.AgentError) {
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
// Handle Anthropic API errors
|
|
139
|
+
if (error instanceof sdk_1.default.APIError) {
|
|
140
|
+
console.error(`[ClaudeClient] API error: ${error.status} ${error.message}`);
|
|
141
|
+
if (error.status === 401) {
|
|
142
|
+
throw new types_js_1.AgentError('Authentication failed. Please run: mama login', 'AUTH_ERROR', undefined, true);
|
|
143
|
+
}
|
|
144
|
+
if (error.status === 429) {
|
|
145
|
+
throw new types_js_1.AgentError(`Rate limited: ${error.message}`, 'RATE_LIMIT', error, true);
|
|
146
|
+
}
|
|
147
|
+
throw new types_js_1.AgentError(`API request failed: ${error.status} ${error.message}`, 'API_ERROR', error, (error.status ?? 0) >= 500);
|
|
148
|
+
}
|
|
149
|
+
throw new types_js_1.AgentError(`API request failed: ${error instanceof Error ? error.message : String(error)}`, 'API_ERROR', error instanceof Error ? error : undefined, true);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Format messages for API
|
|
154
|
+
*/
|
|
155
|
+
formatMessages(messages) {
|
|
156
|
+
return messages.map((msg) => ({
|
|
157
|
+
role: msg.role,
|
|
158
|
+
content: this.formatContent(msg.content),
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Format content blocks for API
|
|
163
|
+
*/
|
|
164
|
+
formatContent(content) {
|
|
165
|
+
if (typeof content === 'string') {
|
|
166
|
+
return content;
|
|
167
|
+
}
|
|
168
|
+
return content.map((block) => {
|
|
169
|
+
switch (block.type) {
|
|
170
|
+
case 'text':
|
|
171
|
+
return { type: 'text', text: block.text };
|
|
172
|
+
case 'image':
|
|
173
|
+
return {
|
|
174
|
+
type: 'image',
|
|
175
|
+
source: {
|
|
176
|
+
type: 'base64',
|
|
177
|
+
media_type: block.source.media_type,
|
|
178
|
+
data: block.source.data,
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
case 'tool_use':
|
|
182
|
+
return {
|
|
183
|
+
type: 'tool_use',
|
|
184
|
+
id: block.id,
|
|
185
|
+
name: block.name,
|
|
186
|
+
input: block.input,
|
|
187
|
+
};
|
|
188
|
+
case 'tool_result':
|
|
189
|
+
return {
|
|
190
|
+
type: 'tool_result',
|
|
191
|
+
tool_use_id: block.tool_use_id,
|
|
192
|
+
content: block.content,
|
|
193
|
+
is_error: block.is_error,
|
|
194
|
+
};
|
|
195
|
+
default:
|
|
196
|
+
return block;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get the default model name
|
|
202
|
+
*/
|
|
203
|
+
static getDefaultModel() {
|
|
204
|
+
return DEFAULT_MODEL;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get the default max tokens
|
|
208
|
+
*/
|
|
209
|
+
static getDefaultMaxTokens() {
|
|
210
|
+
return DEFAULT_MAX_TOKENS;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.ClaudeClient = ClaudeClient;
|
|
214
|
+
//# sourceMappingURL=claude-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-client.js","sourceRoot":"","sources":["../../src/agent/claude-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MAMA Tool Executor for MAMA Standalone
|
|
3
|
+
*
|
|
4
|
+
* Executes MAMA gateway tools (mama_search, mama_save, mama_update, mama_load_checkpoint, Read, discord_send).
|
|
5
|
+
* NOT MCP - uses Claude Messages API tool definitions.
|
|
6
|
+
* Supports both direct API integration and mock API for testing.
|
|
7
|
+
*/
|
|
8
|
+
import type { GatewayToolName, GatewayToolInput, GatewayToolResult, GatewayToolExecutorOptions } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Discord gateway interface for sending messages
|
|
11
|
+
*/
|
|
12
|
+
export interface DiscordGatewayInterface {
|
|
13
|
+
sendMessage(channelId: string, message: string): Promise<void>;
|
|
14
|
+
sendImage(channelId: string, imagePath: string, caption?: string): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare class GatewayToolExecutor {
|
|
17
|
+
private mamaApi;
|
|
18
|
+
private readonly mamaDbPath?;
|
|
19
|
+
private sessionStore?;
|
|
20
|
+
private discordGateway;
|
|
21
|
+
constructor(options?: GatewayToolExecutorOptions);
|
|
22
|
+
setDiscordGateway(gateway: DiscordGatewayInterface): void;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize the MAMA API by importing from mcp-server package
|
|
25
|
+
* Called lazily on first tool execution if not provided in constructor
|
|
26
|
+
*/
|
|
27
|
+
private initializeMAMAApi;
|
|
28
|
+
/**
|
|
29
|
+
* Execute an MCP tool
|
|
30
|
+
*
|
|
31
|
+
* @param toolName - Name of the tool to execute
|
|
32
|
+
* @param input - Tool input parameters
|
|
33
|
+
* @returns Tool execution result
|
|
34
|
+
* @throws AgentError on tool errors
|
|
35
|
+
*/
|
|
36
|
+
execute(toolName: string, input: GatewayToolInput): Promise<GatewayToolResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Execute save tool (decision or checkpoint)
|
|
39
|
+
*/
|
|
40
|
+
private executeSave;
|
|
41
|
+
/**
|
|
42
|
+
* Execute search tool
|
|
43
|
+
*/
|
|
44
|
+
private executeSearch;
|
|
45
|
+
/**
|
|
46
|
+
* Execute update tool
|
|
47
|
+
*/
|
|
48
|
+
private executeUpdate;
|
|
49
|
+
/**
|
|
50
|
+
* Execute load_checkpoint tool
|
|
51
|
+
*/
|
|
52
|
+
private executeLoadCheckpoint;
|
|
53
|
+
/**
|
|
54
|
+
* Execute read tool - Read file from filesystem
|
|
55
|
+
*/
|
|
56
|
+
private executeRead;
|
|
57
|
+
/**
|
|
58
|
+
* Execute Write tool - Write content to a file
|
|
59
|
+
*/
|
|
60
|
+
private executeWrite;
|
|
61
|
+
/**
|
|
62
|
+
* Execute Bash tool - Execute bash command
|
|
63
|
+
*/
|
|
64
|
+
private executeBash;
|
|
65
|
+
/**
|
|
66
|
+
* Execute discord_send tool - Send message/image to Discord channel
|
|
67
|
+
*/
|
|
68
|
+
private executeDiscordSend;
|
|
69
|
+
static getValidTools(): GatewayToolName[];
|
|
70
|
+
/**
|
|
71
|
+
* Check if a tool name is valid
|
|
72
|
+
*/
|
|
73
|
+
static isValidTool(toolName: string): toolName is GatewayToolName;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=gateway-tool-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-tool-executor.d.ts","sourceRoot":"","sources":["../../src/agent/gateway-tool-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAWjB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClF;AAmBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,YAAY,CAAC,CAAM;IAC3B,OAAO,CAAC,cAAc,CAAwC;gBAElD,OAAO,GAAE,0BAA+B;IASpD,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIzD;;;OAGG;YACW,iBAAiB;IAwC/B;;;;;;;OAOG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsDpF;;OAEG;YACW,WAAW;IA+CzB;;OAEG;YACW,aAAa;IAyC3B;;OAEG;YACW,aAAa;IAkC3B;;OAEG;YACW,qBAAqB;IAWnC;;OAEG;YACW,WAAW;IA+BzB;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,WAAW;IA2BzB;;OAEG;YACW,kBAAkB;IA8BhC,MAAM,CAAC,aAAa,IAAI,eAAe,EAAE;IAIzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,eAAe;CAGlE"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MAMA Tool Executor for MAMA Standalone
|
|
4
|
+
*
|
|
5
|
+
* Executes MAMA gateway tools (mama_search, mama_save, mama_update, mama_load_checkpoint, Read, discord_send).
|
|
6
|
+
* NOT MCP - uses Claude Messages API tool definitions.
|
|
7
|
+
* Supports both direct API integration and mock API for testing.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.GatewayToolExecutor = void 0;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const types_js_1 = require("./types.js");
|
|
15
|
+
/**
|
|
16
|
+
* Valid MAMA gateway tools
|
|
17
|
+
* These tools are executed by GatewayToolExecutor
|
|
18
|
+
* Includes MAMA tools (mama_search, mama_save, mama_update, mama_load_checkpoint)
|
|
19
|
+
* and utility tools (Read, Write, Bash, discord_send)
|
|
20
|
+
*/
|
|
21
|
+
const VALID_TOOLS = [
|
|
22
|
+
'mama_search',
|
|
23
|
+
'mama_save',
|
|
24
|
+
'mama_update',
|
|
25
|
+
'mama_load_checkpoint',
|
|
26
|
+
'Read',
|
|
27
|
+
'Write',
|
|
28
|
+
'Bash',
|
|
29
|
+
'discord_send',
|
|
30
|
+
];
|
|
31
|
+
class GatewayToolExecutor {
|
|
32
|
+
mamaApi = null;
|
|
33
|
+
mamaDbPath;
|
|
34
|
+
sessionStore;
|
|
35
|
+
discordGateway = null;
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
this.mamaDbPath = options.mamaDbPath;
|
|
38
|
+
this.sessionStore = options.sessionStore;
|
|
39
|
+
if (options.mamaApi) {
|
|
40
|
+
this.mamaApi = options.mamaApi;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
setDiscordGateway(gateway) {
|
|
44
|
+
this.discordGateway = gateway;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Initialize the MAMA API by importing from mcp-server package
|
|
48
|
+
* Called lazily on first tool execution if not provided in constructor
|
|
49
|
+
*/
|
|
50
|
+
async initializeMAMAApi() {
|
|
51
|
+
if (this.mamaApi) {
|
|
52
|
+
return this.mamaApi;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
// Set database path if provided
|
|
56
|
+
if (this.mamaDbPath) {
|
|
57
|
+
process.env.MAMA_DB_PATH = this.mamaDbPath;
|
|
58
|
+
}
|
|
59
|
+
// Dynamic import of MAMA mama-core modules
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
61
|
+
const mama = require('@jungjaehoon/mama-core/mama-api');
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
63
|
+
const { initDB } = require('@jungjaehoon/mama-core/db-manager');
|
|
64
|
+
// Initialize the database before using mama-api functions
|
|
65
|
+
await initDB();
|
|
66
|
+
this.mamaApi = {
|
|
67
|
+
save: mama.save.bind(mama),
|
|
68
|
+
saveCheckpoint: mama.saveCheckpoint.bind(mama),
|
|
69
|
+
listDecisions: mama.list.bind(mama), // Note: mama exports listDecisions as 'list'
|
|
70
|
+
suggest: mama.suggest.bind(mama),
|
|
71
|
+
updateOutcome: mama.updateOutcome.bind(mama),
|
|
72
|
+
loadCheckpoint: mama.loadCheckpoint.bind(mama),
|
|
73
|
+
};
|
|
74
|
+
return this.mamaApi;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
throw new types_js_1.AgentError(`Failed to initialize MAMA API: ${error instanceof Error ? error.message : String(error)}`, 'TOOL_ERROR', error instanceof Error ? error : undefined, false);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Execute an MCP tool
|
|
82
|
+
*
|
|
83
|
+
* @param toolName - Name of the tool to execute
|
|
84
|
+
* @param input - Tool input parameters
|
|
85
|
+
* @returns Tool execution result
|
|
86
|
+
* @throws AgentError on tool errors
|
|
87
|
+
*/
|
|
88
|
+
async execute(toolName, input) {
|
|
89
|
+
if (!VALID_TOOLS.includes(toolName)) {
|
|
90
|
+
throw new types_js_1.AgentError(`Unknown tool: ${toolName}. Valid tools: ${VALID_TOOLS.join(', ')}`, 'UNKNOWN_TOOL', undefined, false);
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
// Handle non-MAMA tools first
|
|
94
|
+
switch (toolName) {
|
|
95
|
+
case 'Read':
|
|
96
|
+
return await this.executeRead(input);
|
|
97
|
+
case 'Write':
|
|
98
|
+
return await this.executeWrite(input);
|
|
99
|
+
case 'Bash':
|
|
100
|
+
return await this.executeBash(input);
|
|
101
|
+
case 'discord_send':
|
|
102
|
+
return await this.executeDiscordSend(input);
|
|
103
|
+
}
|
|
104
|
+
// MAMA tools require API
|
|
105
|
+
const api = await this.initializeMAMAApi();
|
|
106
|
+
switch (toolName) {
|
|
107
|
+
case 'mama_save':
|
|
108
|
+
return await this.executeSave(api, input);
|
|
109
|
+
case 'mama_search':
|
|
110
|
+
return await this.executeSearch(api, input);
|
|
111
|
+
case 'mama_update':
|
|
112
|
+
return await this.executeUpdate(api, input);
|
|
113
|
+
case 'mama_load_checkpoint':
|
|
114
|
+
return await this.executeLoadCheckpoint(api, input);
|
|
115
|
+
default:
|
|
116
|
+
throw new types_js_1.AgentError(`Unknown tool: ${toolName}`, 'UNKNOWN_TOOL', undefined, false);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof types_js_1.AgentError) {
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
throw new types_js_1.AgentError(`Tool execution failed (${toolName}): ${error instanceof Error ? error.message : String(error)}`, 'TOOL_ERROR', error instanceof Error ? error : undefined, false);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Execute save tool (decision or checkpoint)
|
|
128
|
+
*/
|
|
129
|
+
async executeSave(api, input) {
|
|
130
|
+
if (input.type === 'decision') {
|
|
131
|
+
const decisionInput = input;
|
|
132
|
+
if (!decisionInput.topic || !decisionInput.decision || !decisionInput.reasoning) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
message: 'Decision requires: topic, decision, reasoning',
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Map MCP 'decision' type to mama-api 'user_decision' type
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
140
|
+
return await api.save({
|
|
141
|
+
topic: decisionInput.topic,
|
|
142
|
+
decision: decisionInput.decision,
|
|
143
|
+
reasoning: decisionInput.reasoning,
|
|
144
|
+
confidence: decisionInput.confidence ?? 0.5,
|
|
145
|
+
type: 'user_decision', // mama-api expects 'user_decision' not 'decision'
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (input.type === 'checkpoint') {
|
|
149
|
+
const checkpointInput = input;
|
|
150
|
+
if (!checkpointInput.summary) {
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
message: 'Checkpoint requires: summary',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const recentConversation = this.sessionStore?.getRecentMessages() || [];
|
|
157
|
+
return await api.saveCheckpoint(checkpointInput.summary, checkpointInput.open_files ?? [], checkpointInput.next_steps ?? '', recentConversation);
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
message: `Invalid save type: ${input.type}. Must be 'decision' or 'checkpoint'`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Execute search tool
|
|
166
|
+
*/
|
|
167
|
+
async executeSearch(api, input) {
|
|
168
|
+
const { query, type, limit = 10 } = input;
|
|
169
|
+
// If no query provided, return recent items using listDecisions
|
|
170
|
+
if (!query) {
|
|
171
|
+
const decisions = await api.listDecisions({ limit });
|
|
172
|
+
const results = Array.isArray(decisions) ? decisions : [];
|
|
173
|
+
// Filter by type if specified
|
|
174
|
+
const filteredResults = type && type !== 'all'
|
|
175
|
+
? results.filter((item) => {
|
|
176
|
+
const typedItem = item;
|
|
177
|
+
return typedItem.type === type;
|
|
178
|
+
})
|
|
179
|
+
: results;
|
|
180
|
+
return {
|
|
181
|
+
success: true,
|
|
182
|
+
results: filteredResults,
|
|
183
|
+
count: filteredResults.length,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// Semantic search using suggest
|
|
187
|
+
const result = await api.suggest(query, { limit });
|
|
188
|
+
// Filter by type if specified
|
|
189
|
+
let filteredResults = result.results ?? [];
|
|
190
|
+
if (type && type !== 'all') {
|
|
191
|
+
filteredResults = filteredResults.filter((item) => item.type === type);
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
success: true,
|
|
195
|
+
results: filteredResults,
|
|
196
|
+
count: filteredResults.length,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Execute update tool
|
|
201
|
+
*/
|
|
202
|
+
async executeUpdate(api, input) {
|
|
203
|
+
const { id, outcome, reason } = input;
|
|
204
|
+
if (!id) {
|
|
205
|
+
return {
|
|
206
|
+
success: false,
|
|
207
|
+
message: 'Update requires: id',
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
if (!outcome) {
|
|
211
|
+
return {
|
|
212
|
+
success: false,
|
|
213
|
+
message: 'Update requires: outcome',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Normalize outcome to uppercase
|
|
217
|
+
const normalizedOutcome = outcome.toUpperCase();
|
|
218
|
+
const validOutcomes = ['SUCCESS', 'FAILED', 'PARTIAL'];
|
|
219
|
+
if (!validOutcomes.includes(normalizedOutcome)) {
|
|
220
|
+
return {
|
|
221
|
+
success: false,
|
|
222
|
+
message: `Invalid outcome: ${outcome}. Must be one of: success, failed, partial`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return await api.updateOutcome(id, {
|
|
226
|
+
outcome: normalizedOutcome,
|
|
227
|
+
failure_reason: reason,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Execute load_checkpoint tool
|
|
232
|
+
*/
|
|
233
|
+
async executeLoadCheckpoint(api, _input) {
|
|
234
|
+
const checkpoint = await api.loadCheckpoint();
|
|
235
|
+
if (checkpoint && checkpoint.recentConversation && this.sessionStore) {
|
|
236
|
+
this.sessionStore.restoreMessages(checkpoint.recentConversation);
|
|
237
|
+
}
|
|
238
|
+
return checkpoint;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Execute read tool - Read file from filesystem
|
|
242
|
+
*/
|
|
243
|
+
async executeRead(input) {
|
|
244
|
+
const { path: filePath } = input;
|
|
245
|
+
if (!filePath) {
|
|
246
|
+
return { success: false, error: 'Path is required' };
|
|
247
|
+
}
|
|
248
|
+
// Expand ~ to home directory
|
|
249
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
250
|
+
const expandedPath = filePath.startsWith('~/') ? (0, path_1.join)(homeDir, filePath.slice(2)) : filePath;
|
|
251
|
+
// Security: Only allow reading from ~/.mama/ directory
|
|
252
|
+
const mamaDir = (0, path_1.join)(homeDir, '.mama');
|
|
253
|
+
if (!expandedPath.startsWith(mamaDir)) {
|
|
254
|
+
return { success: false, error: `Access denied: Can only read files from ${mamaDir}` };
|
|
255
|
+
}
|
|
256
|
+
if (!(0, fs_1.existsSync)(expandedPath)) {
|
|
257
|
+
return { success: false, error: `File not found: ${expandedPath}` };
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
const content = (0, fs_1.readFileSync)(expandedPath, 'utf-8');
|
|
261
|
+
return { success: true, content };
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
return { success: false, error: `Failed to read file: ${err}` };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Execute Write tool - Write content to a file
|
|
269
|
+
*/
|
|
270
|
+
async executeWrite(input) {
|
|
271
|
+
const { path, content } = input;
|
|
272
|
+
if (!path) {
|
|
273
|
+
return { success: false, error: 'path is required' };
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const dir = (0, path_1.dirname)(path);
|
|
277
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
278
|
+
(0, fs_1.writeFileSync)(path, content, 'utf-8');
|
|
279
|
+
return { success: true };
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
return { success: false, error: `Failed to write file: ${err}` };
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Execute Bash tool - Execute bash command
|
|
287
|
+
*/
|
|
288
|
+
async executeBash(input) {
|
|
289
|
+
const { command, workdir } = input;
|
|
290
|
+
if (!command) {
|
|
291
|
+
return { success: false, error: 'command is required' };
|
|
292
|
+
}
|
|
293
|
+
try {
|
|
294
|
+
const output = (0, child_process_1.execSync)(command, {
|
|
295
|
+
cwd: workdir || process.cwd(),
|
|
296
|
+
encoding: 'utf-8',
|
|
297
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
298
|
+
timeout: 60000,
|
|
299
|
+
});
|
|
300
|
+
return { success: true, output };
|
|
301
|
+
}
|
|
302
|
+
catch (err) {
|
|
303
|
+
return {
|
|
304
|
+
success: false,
|
|
305
|
+
error: `Command failed: ${err.message}`,
|
|
306
|
+
output: err.stdout || err.stderr,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Execute discord_send tool - Send message/image to Discord channel
|
|
312
|
+
*/
|
|
313
|
+
async executeDiscordSend(input) {
|
|
314
|
+
const { channel_id, message, image_path } = input;
|
|
315
|
+
if (!channel_id) {
|
|
316
|
+
return { success: false, error: 'channel_id is required' };
|
|
317
|
+
}
|
|
318
|
+
if (!this.discordGateway) {
|
|
319
|
+
return { success: false, error: 'Discord gateway not configured' };
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
if (image_path) {
|
|
323
|
+
await this.discordGateway.sendImage(channel_id, image_path, message);
|
|
324
|
+
}
|
|
325
|
+
else if (message) {
|
|
326
|
+
await this.discordGateway.sendMessage(channel_id, message);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
return { success: false, error: 'Either message or image_path is required' };
|
|
330
|
+
}
|
|
331
|
+
return { success: true };
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
return { success: false, error: `Failed to send to Discord: ${err}` };
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
static getValidTools() {
|
|
338
|
+
return [...VALID_TOOLS];
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Check if a tool name is valid
|
|
342
|
+
*/
|
|
343
|
+
static isValidTool(toolName) {
|
|
344
|
+
return VALID_TOOLS.includes(toolName);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
exports.GatewayToolExecutor = GatewayToolExecutor;
|
|
348
|
+
//# sourceMappingURL=gateway-tool-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-tool-executor.js","sourceRoot":"","sources":["../../src/agent/gateway-tool-executor.ts"],"names":[],"mappings":"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"}
|