@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,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Loop Engine for MAMA Standalone
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator that:
|
|
5
|
+
* - Maintains conversation history
|
|
6
|
+
* - Calls Claude API via ClaudeClient
|
|
7
|
+
* - Parses tool_use blocks from responses
|
|
8
|
+
* - Executes tools via MCPExecutor
|
|
9
|
+
* - Sends tool_result back to Claude
|
|
10
|
+
* - Loops until stop_reason is "end_turn" or max turns reached
|
|
11
|
+
*/
|
|
12
|
+
import type { OAuthManager } from '../auth/index.js';
|
|
13
|
+
import type { ContentBlock, ToolDefinition, AgentLoopOptions, AgentLoopResult, ClaudeClientOptions, GatewayToolExecutorOptions } from './types.js';
|
|
14
|
+
export declare class AgentLoop {
|
|
15
|
+
private readonly agent;
|
|
16
|
+
private readonly claudeCLI;
|
|
17
|
+
private readonly mcpExecutor;
|
|
18
|
+
private systemPromptOverride?;
|
|
19
|
+
private readonly maxTurns;
|
|
20
|
+
private readonly model;
|
|
21
|
+
private readonly onTurn?;
|
|
22
|
+
private readonly onToolUse?;
|
|
23
|
+
private readonly laneManager;
|
|
24
|
+
private readonly useLanes;
|
|
25
|
+
private sessionKey;
|
|
26
|
+
private readonly sessionPool;
|
|
27
|
+
constructor(_oauthManager: OAuthManager, options?: AgentLoopOptions, _clientOptions?: ClaudeClientOptions, executorOptions?: GatewayToolExecutorOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Set session key for lane-based concurrency
|
|
30
|
+
* Use format: "{source}:{channelId}:{userId}"
|
|
31
|
+
*/
|
|
32
|
+
setSessionKey(key: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get current session key
|
|
35
|
+
*/
|
|
36
|
+
getSessionKey(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Set system prompt override (for per-message context injection)
|
|
39
|
+
*/
|
|
40
|
+
setSystemPrompt(prompt: string | undefined): void;
|
|
41
|
+
/**
|
|
42
|
+
* Set Discord gateway for discord_send tool
|
|
43
|
+
*/
|
|
44
|
+
setDiscordGateway(gateway: {
|
|
45
|
+
sendMessage(channelId: string, message: string): Promise<void>;
|
|
46
|
+
sendImage(channelId: string, imagePath: string, caption?: string): Promise<void>;
|
|
47
|
+
}): void;
|
|
48
|
+
/**
|
|
49
|
+
* Run the agent loop with a user prompt
|
|
50
|
+
*
|
|
51
|
+
* Uses lane-based concurrency when useLanes is enabled:
|
|
52
|
+
* - Same session messages are processed in order
|
|
53
|
+
* - Different sessions can run in parallel
|
|
54
|
+
* - Global lane limits total concurrent API calls
|
|
55
|
+
*
|
|
56
|
+
* @param prompt - User prompt to process
|
|
57
|
+
* @param options - Execution options (systemPrompt, disableAutoRecall, etc.)
|
|
58
|
+
* @returns Agent loop result with final response and history
|
|
59
|
+
* @throws AgentError on errors
|
|
60
|
+
*/
|
|
61
|
+
run(prompt: string, options?: AgentLoopOptions): Promise<AgentLoopResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Run the agent loop with multimodal content blocks
|
|
64
|
+
*
|
|
65
|
+
* Uses lane-based concurrency when useLanes is enabled.
|
|
66
|
+
*
|
|
67
|
+
* @param content - Array of content blocks (text, images, documents)
|
|
68
|
+
* @param options - Execution options (systemPrompt, disableAutoRecall, etc.)
|
|
69
|
+
* @returns Agent loop result with final response and history
|
|
70
|
+
* @throws AgentError on errors
|
|
71
|
+
*/
|
|
72
|
+
runWithContent(content: ContentBlock[], options?: AgentLoopOptions): Promise<AgentLoopResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Internal implementation of runWithContent (without lane queueing)
|
|
75
|
+
*/
|
|
76
|
+
private runWithContentInternal;
|
|
77
|
+
/**
|
|
78
|
+
* Execute tools from response content blocks
|
|
79
|
+
*/
|
|
80
|
+
private executeTools;
|
|
81
|
+
/**
|
|
82
|
+
* Extract text response from the last assistant message
|
|
83
|
+
*/
|
|
84
|
+
private extractTextResponse;
|
|
85
|
+
/**
|
|
86
|
+
* Format conversation history as prompt text for Claude CLI
|
|
87
|
+
*/
|
|
88
|
+
private formatHistoryAsPrompt;
|
|
89
|
+
/**
|
|
90
|
+
* Get the MAMA tool definitions
|
|
91
|
+
*/
|
|
92
|
+
static getToolDefinitions(): ToolDefinition[];
|
|
93
|
+
/**
|
|
94
|
+
* Get the default system prompt (verbose logging)
|
|
95
|
+
*/
|
|
96
|
+
static getDefaultSystemPrompt(): string;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=agent-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIrD,OAAO,KAAK,EAEV,YAAY,EAIZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EAIf,mBAAmB,EACnB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAyEpB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA8D;IACzF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAGxC,aAAa,EAAE,YAAY,EAC3B,OAAO,GAAE,gBAAqB,EAC9B,cAAc,CAAC,EAAE,mBAAmB,EACpC,eAAe,CAAC,EAAE,0BAA0B;IAgC9C;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIjD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAClF,GAAG,IAAI;IAIR;;;;;;;;;;;;OAYG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAe/E;;;;;;;;;OASG;IACG,cAAc,CAClB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC;IAc3B;;OAEG;YACW,sBAAsB;IAwKpC;;OAEG;YACW,YAAY;IAuC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,cAAc,EAAE;IAI7C;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,MAAM;CAGxC"}
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Loop Engine for MAMA Standalone
|
|
4
|
+
*
|
|
5
|
+
* Main orchestrator that:
|
|
6
|
+
* - Maintains conversation history
|
|
7
|
+
* - Calls Claude API via ClaudeClient
|
|
8
|
+
* - Parses tool_use blocks from responses
|
|
9
|
+
* - Executes tools via MCPExecutor
|
|
10
|
+
* - Sends tool_result back to Claude
|
|
11
|
+
* - Loops until stop_reason is "end_turn" or max turns reached
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.AgentLoop = void 0;
|
|
15
|
+
// fs imports removed - using minimal system prompt, CLAUDE.md loaded by Claude Code
|
|
16
|
+
const claude_cli_wrapper_js_1 = require("./claude-cli-wrapper.js");
|
|
17
|
+
const gateway_tool_executor_js_1 = require("./gateway-tool-executor.js");
|
|
18
|
+
const index_js_1 = require("../concurrency/index.js");
|
|
19
|
+
const session_pool_js_1 = require("./session-pool.js");
|
|
20
|
+
const os_1 = require("os");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
const crypto_1 = require("crypto");
|
|
23
|
+
const types_js_1 = require("./types.js");
|
|
24
|
+
/**
|
|
25
|
+
* Default configuration
|
|
26
|
+
*/
|
|
27
|
+
const DEFAULT_MAX_TURNS = 10;
|
|
28
|
+
/**
|
|
29
|
+
* Load CLAUDE.md system prompt
|
|
30
|
+
* Tries multiple paths: project root, ~/.mama, /etc/mama
|
|
31
|
+
*/
|
|
32
|
+
function loadSystemPrompt(verbose = false) {
|
|
33
|
+
const { readFileSync, existsSync } = require('fs');
|
|
34
|
+
const { join } = require('path');
|
|
35
|
+
const { homedir } = require('os');
|
|
36
|
+
const searchPaths = [
|
|
37
|
+
// User home - MAMA standalone config (priority)
|
|
38
|
+
join(homedir(), '.mama/CLAUDE.md'),
|
|
39
|
+
// System config
|
|
40
|
+
'/etc/mama/CLAUDE.md',
|
|
41
|
+
// Project root (monorepo) - fallback only for development
|
|
42
|
+
join(__dirname, '../../../../CLAUDE.md'),
|
|
43
|
+
];
|
|
44
|
+
for (const path of searchPaths) {
|
|
45
|
+
if (existsSync(path)) {
|
|
46
|
+
if (verbose)
|
|
47
|
+
console.log(`[AgentLoop] Loaded system prompt from: ${path}`);
|
|
48
|
+
return readFileSync(path, 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
console.warn('[AgentLoop] CLAUDE.md not found, using default identity');
|
|
52
|
+
return "You are Claude Code, Anthropic's official CLI for Claude.";
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Load composed system prompt with persona layers + CLAUDE.md
|
|
56
|
+
* Tries to load persona files from ~/.mama/ in order:
|
|
57
|
+
* 1. SOUL.md (philosophical principles)
|
|
58
|
+
* 2. IDENTITY.md (role and character)
|
|
59
|
+
* 3. USER.md (user preferences)
|
|
60
|
+
* 4. CLAUDE.md (base instructions)
|
|
61
|
+
*
|
|
62
|
+
* If persona files are missing, logs warning and continues with CLAUDE.md alone.
|
|
63
|
+
*/
|
|
64
|
+
function loadComposedSystemPrompt(verbose = false) {
|
|
65
|
+
const { readFileSync, existsSync } = require('fs');
|
|
66
|
+
const { join } = require('path');
|
|
67
|
+
const { homedir } = require('os');
|
|
68
|
+
const mamaHome = join(homedir(), '.mama');
|
|
69
|
+
const layers = [];
|
|
70
|
+
const personaFiles = ['SOUL.md', 'IDENTITY.md', 'USER.md'];
|
|
71
|
+
for (const file of personaFiles) {
|
|
72
|
+
const path = join(mamaHome, file);
|
|
73
|
+
if (existsSync(path)) {
|
|
74
|
+
if (verbose)
|
|
75
|
+
console.log(`[AgentLoop] Loaded persona: ${file}`);
|
|
76
|
+
const content = readFileSync(path, 'utf-8');
|
|
77
|
+
layers.push(content);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
if (verbose)
|
|
81
|
+
console.log(`[AgentLoop] Persona file not found (skipping): ${file}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const claudeMd = loadSystemPrompt(verbose);
|
|
85
|
+
layers.push(claudeMd);
|
|
86
|
+
return layers.join('\n\n---\n\n');
|
|
87
|
+
}
|
|
88
|
+
class AgentLoop {
|
|
89
|
+
agent;
|
|
90
|
+
claudeCLI = null;
|
|
91
|
+
mcpExecutor;
|
|
92
|
+
systemPromptOverride;
|
|
93
|
+
maxTurns;
|
|
94
|
+
model;
|
|
95
|
+
onTurn;
|
|
96
|
+
onToolUse;
|
|
97
|
+
laneManager;
|
|
98
|
+
useLanes;
|
|
99
|
+
sessionKey;
|
|
100
|
+
sessionPool;
|
|
101
|
+
constructor(_oauthManager, options = {}, _clientOptions, executorOptions) {
|
|
102
|
+
const mcpConfigPath = (0, path_1.join)((0, os_1.homedir)(), '.mama/mama-mcp-config.json');
|
|
103
|
+
const sessionId = (0, crypto_1.randomUUID)();
|
|
104
|
+
const defaultSystemPrompt = options.systemPrompt || loadComposedSystemPrompt();
|
|
105
|
+
this.claudeCLI = new claude_cli_wrapper_js_1.ClaudeCLIWrapper({
|
|
106
|
+
model: options.model ?? 'claude-sonnet-4-20250514',
|
|
107
|
+
sessionId,
|
|
108
|
+
systemPrompt: defaultSystemPrompt,
|
|
109
|
+
mcpConfigPath,
|
|
110
|
+
dangerouslySkipPermissions: true,
|
|
111
|
+
});
|
|
112
|
+
this.agent = this.claudeCLI;
|
|
113
|
+
this.mcpExecutor = new gateway_tool_executor_js_1.GatewayToolExecutor(executorOptions);
|
|
114
|
+
this.systemPromptOverride = options.systemPrompt;
|
|
115
|
+
this.maxTurns = options.maxTurns ?? DEFAULT_MAX_TURNS;
|
|
116
|
+
this.model = options.model ?? 'claude-opus-4-20250514';
|
|
117
|
+
this.onTurn = options.onTurn;
|
|
118
|
+
this.onToolUse = options.onToolUse;
|
|
119
|
+
this.laneManager = (0, index_js_1.getGlobalLaneManager)();
|
|
120
|
+
this.useLanes = options.useLanes ?? false;
|
|
121
|
+
this.sessionKey = options.sessionKey ?? 'default';
|
|
122
|
+
this.sessionPool = (0, session_pool_js_1.getSessionPool)();
|
|
123
|
+
if (!this.systemPromptOverride) {
|
|
124
|
+
loadComposedSystemPrompt(true);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Set session key for lane-based concurrency
|
|
129
|
+
* Use format: "{source}:{channelId}:{userId}"
|
|
130
|
+
*/
|
|
131
|
+
setSessionKey(key) {
|
|
132
|
+
this.sessionKey = key;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get current session key
|
|
136
|
+
*/
|
|
137
|
+
getSessionKey() {
|
|
138
|
+
return this.sessionKey;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Set system prompt override (for per-message context injection)
|
|
142
|
+
*/
|
|
143
|
+
setSystemPrompt(prompt) {
|
|
144
|
+
this.systemPromptOverride = prompt;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Set Discord gateway for discord_send tool
|
|
148
|
+
*/
|
|
149
|
+
setDiscordGateway(gateway) {
|
|
150
|
+
this.mcpExecutor.setDiscordGateway(gateway);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Run the agent loop with a user prompt
|
|
154
|
+
*
|
|
155
|
+
* Uses lane-based concurrency when useLanes is enabled:
|
|
156
|
+
* - Same session messages are processed in order
|
|
157
|
+
* - Different sessions can run in parallel
|
|
158
|
+
* - Global lane limits total concurrent API calls
|
|
159
|
+
*
|
|
160
|
+
* @param prompt - User prompt to process
|
|
161
|
+
* @param options - Execution options (systemPrompt, disableAutoRecall, etc.)
|
|
162
|
+
* @returns Agent loop result with final response and history
|
|
163
|
+
* @throws AgentError on errors
|
|
164
|
+
*/
|
|
165
|
+
async run(prompt, options) {
|
|
166
|
+
// Convert string prompt to text content block
|
|
167
|
+
const content = [{ type: 'text', text: prompt }];
|
|
168
|
+
// Use lane-based queueing if enabled
|
|
169
|
+
if (this.useLanes) {
|
|
170
|
+
return this.laneManager.enqueueWithSession(this.sessionKey, () => this.runWithContentInternal(content, options));
|
|
171
|
+
}
|
|
172
|
+
// Direct execution for backward compatibility
|
|
173
|
+
return this.runWithContentInternal(content, options);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Run the agent loop with multimodal content blocks
|
|
177
|
+
*
|
|
178
|
+
* Uses lane-based concurrency when useLanes is enabled.
|
|
179
|
+
*
|
|
180
|
+
* @param content - Array of content blocks (text, images, documents)
|
|
181
|
+
* @param options - Execution options (systemPrompt, disableAutoRecall, etc.)
|
|
182
|
+
* @returns Agent loop result with final response and history
|
|
183
|
+
* @throws AgentError on errors
|
|
184
|
+
*/
|
|
185
|
+
async runWithContent(content, options) {
|
|
186
|
+
const sessionKey = options?.sessionKey || this.sessionKey;
|
|
187
|
+
// Use lane-based queueing if enabled
|
|
188
|
+
if (this.useLanes) {
|
|
189
|
+
return this.laneManager.enqueueWithSession(sessionKey, () => this.runWithContentInternal(content, options));
|
|
190
|
+
}
|
|
191
|
+
// Direct execution for backward compatibility
|
|
192
|
+
return this.runWithContentInternal(content, options);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Internal implementation of runWithContent (without lane queueing)
|
|
196
|
+
*/
|
|
197
|
+
async runWithContentInternal(content, options) {
|
|
198
|
+
const history = [];
|
|
199
|
+
let totalUsage = { input_tokens: 0, output_tokens: 0 };
|
|
200
|
+
let turn = 0;
|
|
201
|
+
let stopReason = 'end_turn';
|
|
202
|
+
// Track channel key for session release
|
|
203
|
+
const channelKey = (0, session_pool_js_1.buildChannelKey)(options?.source ?? 'default', options?.channelId ?? this.sessionKey);
|
|
204
|
+
// Use session pool for conversation continuity (instead of resetting each time)
|
|
205
|
+
// This allows Claude CLI to maintain its own conversation history
|
|
206
|
+
if (this.claudeCLI) {
|
|
207
|
+
const cliSessionId = this.sessionPool.getSessionId(channelKey);
|
|
208
|
+
this.claudeCLI.setSessionId(cliSessionId);
|
|
209
|
+
console.log(`[AgentLoop] Using session pool: ${channelKey} → ${cliSessionId}`);
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
if (options?.systemPrompt) {
|
|
213
|
+
console.log(`[AgentLoop] Setting systemPrompt: ${options.systemPrompt.length} chars, starts with: ${options.systemPrompt.substring(0, 100)}...`);
|
|
214
|
+
this.agent.setSystemPrompt(options.systemPrompt);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
console.log(`[AgentLoop] No systemPrompt in options, using default`);
|
|
218
|
+
}
|
|
219
|
+
// Add initial user message with content blocks
|
|
220
|
+
history.push({
|
|
221
|
+
role: 'user',
|
|
222
|
+
content,
|
|
223
|
+
});
|
|
224
|
+
while (turn < this.maxTurns) {
|
|
225
|
+
turn++;
|
|
226
|
+
let response;
|
|
227
|
+
const callbacks = {
|
|
228
|
+
onDelta: (text) => {
|
|
229
|
+
console.log('[Streaming] Delta received:', text.length, 'chars');
|
|
230
|
+
},
|
|
231
|
+
onToolUse: (name, _input) => {
|
|
232
|
+
console.log(`[Streaming] Tool called: ${name}`);
|
|
233
|
+
},
|
|
234
|
+
onFinal: (_finalResponse) => {
|
|
235
|
+
console.log('[Streaming] Stream complete');
|
|
236
|
+
},
|
|
237
|
+
onError: (error) => {
|
|
238
|
+
console.error('[Streaming] Error:', error);
|
|
239
|
+
// Don't throw - let the promise rejection handle it
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
const promptText = this.formatHistoryAsPrompt(history);
|
|
243
|
+
let piResult;
|
|
244
|
+
try {
|
|
245
|
+
piResult = await this.agent.prompt(promptText, callbacks);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error('[AgentLoop] Claude CLI error:', error);
|
|
249
|
+
throw new types_js_1.AgentError(`Claude CLI error: ${error instanceof Error ? error.message : String(error)}`, 'CLI_ERROR', error instanceof Error ? error : undefined, true // retryable
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
response = {
|
|
253
|
+
id: `msg_${Date.now()}`,
|
|
254
|
+
type: 'message',
|
|
255
|
+
role: 'assistant',
|
|
256
|
+
content: [{ type: 'text', text: piResult.response }],
|
|
257
|
+
model: this.model,
|
|
258
|
+
stop_reason: 'end_turn',
|
|
259
|
+
stop_sequence: null,
|
|
260
|
+
usage: piResult.usage,
|
|
261
|
+
};
|
|
262
|
+
// Update usage
|
|
263
|
+
totalUsage.input_tokens += response.usage.input_tokens;
|
|
264
|
+
totalUsage.output_tokens += response.usage.output_tokens;
|
|
265
|
+
// Track tokens in session pool for auto-reset at 80% context
|
|
266
|
+
this.sessionPool.updateTokens(channelKey, response.usage.input_tokens);
|
|
267
|
+
// Add assistant response to history
|
|
268
|
+
history.push({
|
|
269
|
+
role: 'assistant',
|
|
270
|
+
content: response.content,
|
|
271
|
+
});
|
|
272
|
+
// Notify turn callback
|
|
273
|
+
this.onTurn?.({
|
|
274
|
+
turn,
|
|
275
|
+
role: 'assistant',
|
|
276
|
+
content: response.content,
|
|
277
|
+
stopReason: response.stop_reason,
|
|
278
|
+
usage: response.usage,
|
|
279
|
+
});
|
|
280
|
+
stopReason = response.stop_reason;
|
|
281
|
+
// Check stop conditions
|
|
282
|
+
if (response.stop_reason === 'end_turn') {
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
if (response.stop_reason === 'max_tokens') {
|
|
286
|
+
throw new types_js_1.AgentError('Response truncated due to max tokens limit', 'MAX_TOKENS', undefined, false);
|
|
287
|
+
}
|
|
288
|
+
// Handle tool use
|
|
289
|
+
if (response.stop_reason === 'tool_use') {
|
|
290
|
+
const toolResults = await this.executeTools(response.content);
|
|
291
|
+
// Add tool results to history
|
|
292
|
+
history.push({
|
|
293
|
+
role: 'user',
|
|
294
|
+
content: toolResults,
|
|
295
|
+
});
|
|
296
|
+
// Notify turn callback for tool results
|
|
297
|
+
this.onTurn?.({
|
|
298
|
+
turn,
|
|
299
|
+
role: 'user',
|
|
300
|
+
content: toolResults,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Check if we hit max turns
|
|
305
|
+
if (turn >= this.maxTurns && stopReason === 'tool_use') {
|
|
306
|
+
throw new types_js_1.AgentError(`Agent loop exceeded maximum turns (${this.maxTurns})`, 'MAX_TURNS', undefined, false);
|
|
307
|
+
}
|
|
308
|
+
// Extract final text response
|
|
309
|
+
const finalResponse = this.extractTextResponse(history);
|
|
310
|
+
return {
|
|
311
|
+
response: finalResponse,
|
|
312
|
+
turns: turn,
|
|
313
|
+
history,
|
|
314
|
+
totalUsage,
|
|
315
|
+
stopReason,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
// Always release session lock, even on error
|
|
320
|
+
this.sessionPool.releaseSession(channelKey);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Execute tools from response content blocks
|
|
325
|
+
*/
|
|
326
|
+
async executeTools(content) {
|
|
327
|
+
const toolUseBlocks = content.filter((block) => block.type === 'tool_use');
|
|
328
|
+
const results = [];
|
|
329
|
+
for (const toolUse of toolUseBlocks) {
|
|
330
|
+
let result;
|
|
331
|
+
let isError = false;
|
|
332
|
+
try {
|
|
333
|
+
const toolResult = await this.mcpExecutor.execute(toolUse.name, toolUse.input);
|
|
334
|
+
result = JSON.stringify(toolResult, null, 2);
|
|
335
|
+
// Notify tool use callback
|
|
336
|
+
this.onToolUse?.(toolUse.name, toolUse.input, toolResult);
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
isError = true;
|
|
340
|
+
result = error instanceof Error ? error.message : String(error);
|
|
341
|
+
// Notify tool use callback with error
|
|
342
|
+
this.onToolUse?.(toolUse.name, toolUse.input, { error: result });
|
|
343
|
+
}
|
|
344
|
+
results.push({
|
|
345
|
+
type: 'tool_result',
|
|
346
|
+
tool_use_id: toolUse.id,
|
|
347
|
+
content: result,
|
|
348
|
+
is_error: isError,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
return results;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Extract text response from the last assistant message
|
|
355
|
+
*/
|
|
356
|
+
extractTextResponse(history) {
|
|
357
|
+
// Find the last assistant message
|
|
358
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
359
|
+
const message = history[i];
|
|
360
|
+
if (message.role === 'assistant') {
|
|
361
|
+
const content = message.content;
|
|
362
|
+
if (typeof content === 'string') {
|
|
363
|
+
return content;
|
|
364
|
+
}
|
|
365
|
+
// Extract text blocks
|
|
366
|
+
const textBlocks = content.filter((block) => block.type === 'text');
|
|
367
|
+
return textBlocks.map((block) => block.text).join('\n');
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return '';
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Format conversation history as prompt text for Claude CLI
|
|
374
|
+
*/
|
|
375
|
+
formatHistoryAsPrompt(history) {
|
|
376
|
+
return history
|
|
377
|
+
.map((msg) => {
|
|
378
|
+
const content = msg.content;
|
|
379
|
+
let text;
|
|
380
|
+
if (typeof content === 'string') {
|
|
381
|
+
text = content;
|
|
382
|
+
}
|
|
383
|
+
else if (Array.isArray(content)) {
|
|
384
|
+
text = content
|
|
385
|
+
.filter((c) => c.type === 'text')
|
|
386
|
+
.map((c) => c.text)
|
|
387
|
+
.join('\n');
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
return '';
|
|
391
|
+
}
|
|
392
|
+
if (msg.role === 'user') {
|
|
393
|
+
return `User: ${text}`;
|
|
394
|
+
}
|
|
395
|
+
else if (msg.role === 'assistant') {
|
|
396
|
+
return `Assistant: ${text}`;
|
|
397
|
+
}
|
|
398
|
+
return '';
|
|
399
|
+
})
|
|
400
|
+
.filter(Boolean)
|
|
401
|
+
.join('\n\n');
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Get the MAMA tool definitions
|
|
405
|
+
*/
|
|
406
|
+
static getToolDefinitions() {
|
|
407
|
+
return [];
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Get the default system prompt (verbose logging)
|
|
411
|
+
*/
|
|
412
|
+
static getDefaultSystemPrompt() {
|
|
413
|
+
return loadSystemPrompt(true);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
exports.AgentLoop = AgentLoop;
|
|
417
|
+
//# sourceMappingURL=agent-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Recall Module for MAMA Standalone
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw 플러그인의 auto-recall 로직을 standalone으로 이식.
|
|
5
|
+
* 에이전트 시작 전에 관련 메모리를 자동으로 검색하여 컨텍스트에 주입.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - 프롬프트 기반 시맨틱 검색
|
|
9
|
+
* - 최근 체크포인트 로드
|
|
10
|
+
* - 관련 결정 컨텍스트 주입
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Auto-recall 결과 타입
|
|
14
|
+
*/
|
|
15
|
+
export interface AutoRecallResult {
|
|
16
|
+
/** 주입할 컨텍스트 문자열 */
|
|
17
|
+
context: string;
|
|
18
|
+
/** 시맨틱 검색 결과 수 */
|
|
19
|
+
semanticMatches: number;
|
|
20
|
+
/** 최근 결정 수 */
|
|
21
|
+
recentDecisions: number;
|
|
22
|
+
/** 체크포인트 존재 여부 */
|
|
23
|
+
hasCheckpoint: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 프롬프트 기반 auto-recall 실행
|
|
27
|
+
*
|
|
28
|
+
* OpenClaw의 before_agent_start 훅 로직을 standalone으로 이식.
|
|
29
|
+
*
|
|
30
|
+
* @param userPrompt - 사용자 프롬프트 (시맨틱 검색 쿼리로 사용)
|
|
31
|
+
* @param options - 옵션
|
|
32
|
+
* @returns AutoRecallResult 또는 null (메모리 없음)
|
|
33
|
+
*/
|
|
34
|
+
export declare function autoRecall(userPrompt: string, options?: {
|
|
35
|
+
dbPath?: string;
|
|
36
|
+
semanticLimit?: number;
|
|
37
|
+
recentLimit?: number;
|
|
38
|
+
threshold?: number;
|
|
39
|
+
}): Promise<AutoRecallResult | null>;
|
|
40
|
+
/**
|
|
41
|
+
* MAMA API 직접 접근 (고급 사용)
|
|
42
|
+
*/
|
|
43
|
+
export declare function getMAMAApi(): any;
|
|
44
|
+
/**
|
|
45
|
+
* 초기화 상태 확인
|
|
46
|
+
*/
|
|
47
|
+
export declare function isInitialized(): boolean;
|
|
48
|
+
//# sourceMappingURL=auto-recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-recall.d.ts","sourceRoot":"","sources":["../../src/agent/auto-recall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsFH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAoGlC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,GAAG,CAEhC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
|