@jungjaehoon/mama-os 0.32.1 → 0.32.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +15 -13
  3. package/dist/agent/agent-loop.d.ts +5 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -1
  5. package/dist/agent/agent-loop.js +160 -55
  6. package/dist/agent/agent-loop.js.map +1 -1
  7. package/dist/agent/backend-model-policy.d.ts +9 -0
  8. package/dist/agent/backend-model-policy.d.ts.map +1 -0
  9. package/dist/agent/backend-model-policy.js +21 -0
  10. package/dist/agent/backend-model-policy.js.map +1 -0
  11. package/dist/agent/backend-model-runner-factory.d.ts +27 -0
  12. package/dist/agent/backend-model-runner-factory.d.ts.map +1 -0
  13. package/dist/agent/backend-model-runner-factory.js +85 -0
  14. package/dist/agent/backend-model-runner-factory.js.map +1 -0
  15. package/dist/agent/cline-cli-adapter.d.ts +124 -0
  16. package/dist/agent/cline-cli-adapter.d.ts.map +1 -0
  17. package/dist/agent/cline-cli-adapter.js +1040 -0
  18. package/dist/agent/cline-cli-adapter.js.map +1 -0
  19. package/dist/agent/cline-native-tool-policy.d.ts +3 -0
  20. package/dist/agent/cline-native-tool-policy.d.ts.map +1 -0
  21. package/dist/agent/cline-native-tool-policy.js +50 -0
  22. package/dist/agent/cline-native-tool-policy.js.map +1 -0
  23. package/dist/agent/code-act/constants.d.ts +1 -1
  24. package/dist/agent/code-act/constants.d.ts.map +1 -1
  25. package/dist/agent/code-act/constants.js +13 -1
  26. package/dist/agent/code-act/constants.js.map +1 -1
  27. package/dist/agent/codex-app-server-process.d.ts +5 -0
  28. package/dist/agent/codex-app-server-process.d.ts.map +1 -1
  29. package/dist/agent/codex-app-server-process.js +30 -0
  30. package/dist/agent/codex-app-server-process.js.map +1 -1
  31. package/dist/agent/codex-auxiliary-tools.d.ts +17 -0
  32. package/dist/agent/codex-auxiliary-tools.d.ts.map +1 -0
  33. package/dist/agent/codex-auxiliary-tools.js +267 -0
  34. package/dist/agent/codex-auxiliary-tools.js.map +1 -0
  35. package/dist/agent/codex-home.d.ts.map +1 -1
  36. package/dist/agent/codex-home.js +1 -0
  37. package/dist/agent/codex-home.js.map +1 -1
  38. package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -1
  39. package/dist/agent/managed-agent-runtime-sync.js +17 -3
  40. package/dist/agent/managed-agent-runtime-sync.js.map +1 -1
  41. package/dist/agent/managed-agent-validation.js +1 -1
  42. package/dist/agent/managed-agent-validation.js.map +1 -1
  43. package/dist/agent/model-runner.d.ts +11 -1
  44. package/dist/agent/model-runner.d.ts.map +1 -1
  45. package/dist/agent/model-runner.js +12 -1
  46. package/dist/agent/model-runner.js.map +1 -1
  47. package/dist/agent/session-pool.d.ts +10 -9
  48. package/dist/agent/session-pool.d.ts.map +1 -1
  49. package/dist/agent/session-pool.js +12 -47
  50. package/dist/agent/session-pool.js.map +1 -1
  51. package/dist/agent/types.d.ts +18 -2
  52. package/dist/agent/types.d.ts.map +1 -1
  53. package/dist/agent/types.js.map +1 -1
  54. package/dist/api/graph-api.d.ts.map +1 -1
  55. package/dist/api/graph-api.js +15 -5
  56. package/dist/api/graph-api.js.map +1 -1
  57. package/dist/cli/commands/init.d.ts +1 -1
  58. package/dist/cli/commands/init.d.ts.map +1 -1
  59. package/dist/cli/commands/init.js +43 -10
  60. package/dist/cli/commands/init.js.map +1 -1
  61. package/dist/cli/commands/run.d.ts.map +1 -1
  62. package/dist/cli/commands/run.js +12 -0
  63. package/dist/cli/commands/run.js.map +1 -1
  64. package/dist/cli/commands/setup.d.ts +22 -0
  65. package/dist/cli/commands/setup.d.ts.map +1 -1
  66. package/dist/cli/commands/setup.js +79 -28
  67. package/dist/cli/commands/setup.js.map +1 -1
  68. package/dist/cli/commands/start.d.ts +2 -1
  69. package/dist/cli/commands/start.d.ts.map +1 -1
  70. package/dist/cli/commands/start.js +35 -9
  71. package/dist/cli/commands/start.js.map +1 -1
  72. package/dist/cli/commands/status.d.ts.map +1 -1
  73. package/dist/cli/commands/status.js +4 -0
  74. package/dist/cli/commands/status.js.map +1 -1
  75. package/dist/cli/config/config-manager.d.ts.map +1 -1
  76. package/dist/cli/config/config-manager.js +63 -14
  77. package/dist/cli/config/config-manager.js.map +1 -1
  78. package/dist/cli/config/types.d.ts +12 -5
  79. package/dist/cli/config/types.d.ts.map +1 -1
  80. package/dist/cli/config/types.js +3 -0
  81. package/dist/cli/config/types.js.map +1 -1
  82. package/dist/cli/index.js +6 -4
  83. package/dist/cli/index.js.map +1 -1
  84. package/dist/cli/runtime/agent-loop-init.d.ts +1 -1
  85. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  86. package/dist/cli/runtime/agent-loop-init.js +8 -3
  87. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  88. package/dist/cli/runtime/gateway-init.d.ts +1 -1
  89. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  90. package/dist/cli/runtime/gateway-init.js.map +1 -1
  91. package/dist/cli/runtime/mama-core-init.d.ts +10 -2
  92. package/dist/cli/runtime/mama-core-init.d.ts.map +1 -1
  93. package/dist/cli/runtime/mama-core-init.js +52 -68
  94. package/dist/cli/runtime/mama-core-init.js.map +1 -1
  95. package/dist/cli/runtime/memory-agent-init.d.ts.map +1 -1
  96. package/dist/cli/runtime/memory-agent-init.js +18 -5
  97. package/dist/cli/runtime/memory-agent-init.js.map +1 -1
  98. package/dist/cli/runtime/scheduler-init.d.ts +4 -0
  99. package/dist/cli/runtime/scheduler-init.d.ts.map +1 -1
  100. package/dist/cli/runtime/scheduler-init.js +24 -3
  101. package/dist/cli/runtime/scheduler-init.js.map +1 -1
  102. package/dist/cli/runtime/shutdown.d.ts +4 -0
  103. package/dist/cli/runtime/shutdown.d.ts.map +1 -1
  104. package/dist/cli/runtime/shutdown.js +30 -6
  105. package/dist/cli/runtime/shutdown.js.map +1 -1
  106. package/dist/cli/runtime/utilities.d.ts +2 -0
  107. package/dist/cli/runtime/utilities.d.ts.map +1 -1
  108. package/dist/cli/runtime/utilities.js +33 -0
  109. package/dist/cli/runtime/utilities.js.map +1 -1
  110. package/dist/gateways/discord.d.ts.map +1 -1
  111. package/dist/gateways/discord.js +11 -6
  112. package/dist/gateways/discord.js.map +1 -1
  113. package/dist/gateways/image-analyzer.d.ts +5 -0
  114. package/dist/gateways/image-analyzer.d.ts.map +1 -1
  115. package/dist/gateways/image-analyzer.js +8 -0
  116. package/dist/gateways/image-analyzer.js.map +1 -1
  117. package/dist/gateways/message-router.d.ts.map +1 -1
  118. package/dist/gateways/message-router.js +29 -15
  119. package/dist/gateways/message-router.js.map +1 -1
  120. package/dist/gateways/slack.d.ts.map +1 -1
  121. package/dist/gateways/slack.js +6 -2
  122. package/dist/gateways/slack.js.map +1 -1
  123. package/dist/gateways/types.d.ts +1 -1
  124. package/dist/gateways/types.d.ts.map +1 -1
  125. package/dist/index.d.ts +1 -1
  126. package/dist/index.js +1 -1
  127. package/dist/multi-agent/agent-process-manager.d.ts +6 -4
  128. package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
  129. package/dist/multi-agent/agent-process-manager.js +103 -34
  130. package/dist/multi-agent/agent-process-manager.js.map +1 -1
  131. package/dist/multi-agent/runtime-process.d.ts +3 -0
  132. package/dist/multi-agent/runtime-process.d.ts.map +1 -1
  133. package/dist/multi-agent/runtime-process.js +10 -2
  134. package/dist/multi-agent/runtime-process.js.map +1 -1
  135. package/dist/multi-agent/types.d.ts +12 -2
  136. package/dist/multi-agent/types.d.ts.map +1 -1
  137. package/dist/multi-agent/types.js.map +1 -1
  138. package/dist/multi-agent/workflow-types.d.ts +1 -1
  139. package/dist/multi-agent/workflow-types.d.ts.map +1 -1
  140. package/dist/onboarding/complete-autonomous-prompt.d.ts +1 -1
  141. package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -1
  142. package/dist/onboarding/complete-autonomous-prompt.js +9 -9
  143. package/dist/operator/situation-report.d.ts.map +1 -1
  144. package/dist/operator/situation-report.js +38 -23
  145. package/dist/operator/situation-report.js.map +1 -1
  146. package/dist/operator/temporal-runtime.d.ts.map +1 -1
  147. package/dist/operator/temporal-runtime.js +3 -1
  148. package/dist/operator/temporal-runtime.js.map +1 -1
  149. package/dist/operator/trigger-author.d.ts +13 -1
  150. package/dist/operator/trigger-author.d.ts.map +1 -1
  151. package/dist/operator/trigger-author.js +35 -0
  152. package/dist/operator/trigger-author.js.map +1 -1
  153. package/dist/operator/worker-run.d.ts.map +1 -1
  154. package/dist/operator/worker-run.js +10 -4
  155. package/dist/operator/worker-run.js.map +1 -1
  156. package/dist/scheduler/cron-worker.d.ts +8 -4
  157. package/dist/scheduler/cron-worker.d.ts.map +1 -1
  158. package/dist/scheduler/cron-worker.js +56 -39
  159. package/dist/scheduler/cron-worker.js.map +1 -1
  160. package/dist/setup/setup-actions.d.ts +26 -0
  161. package/dist/setup/setup-actions.d.ts.map +1 -0
  162. package/dist/setup/setup-actions.js +371 -0
  163. package/dist/setup/setup-actions.js.map +1 -0
  164. package/dist/setup/setup-prompt.d.ts +1 -1
  165. package/dist/setup/setup-prompt.d.ts.map +1 -1
  166. package/dist/setup/setup-prompt.js +28 -33
  167. package/dist/setup/setup-prompt.js.map +1 -1
  168. package/dist/setup/setup-server.d.ts +6 -1
  169. package/dist/setup/setup-server.d.ts.map +1 -1
  170. package/dist/setup/setup-server.js +55 -9
  171. package/dist/setup/setup-server.js.map +1 -1
  172. package/dist/setup/setup-websocket.d.ts +14 -2
  173. package/dist/setup/setup-websocket.d.ts.map +1 -1
  174. package/dist/setup/setup-websocket.js +121 -37
  175. package/dist/setup/setup-websocket.js.map +1 -1
  176. package/package.json +1 -1
  177. package/public/setup.html +9 -6
  178. package/public/viewer/js/modules/agents.js +5 -4
  179. package/public/viewer/js/modules/settings.js +34 -10
  180. package/public/viewer/src/modules/agents.ts +5 -4
  181. package/public/viewer/src/modules/settings.ts +49 -11
  182. package/public/viewer/src/utils/api.ts +3 -2
@@ -3,13 +3,45 @@
3
3
  * Setup Server - HTTP + WebSocket server for interactive setup wizard
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSetupNonceStore = createSetupNonceStore;
6
7
  exports.startSetupServer = startSetupServer;
7
8
  const node_http_1 = require("node:http");
9
+ const node_crypto_1 = require("node:crypto");
8
10
  const promises_1 = require("node:fs/promises");
9
11
  const node_path_1 = require("node:path");
10
12
  const ws_1 = require("ws");
11
13
  const setup_websocket_js_1 = require("./setup-websocket.js");
14
+ const SETUP_NONCE_TTL_MS = 10 * 60_000;
15
+ const MAX_PENDING_SETUP_NONCES = 128;
16
+ function createSetupNonceStore(now = Date.now) {
17
+ const pendingNonces = new Map();
18
+ const removeExpired = () => {
19
+ const currentTime = now();
20
+ for (const [nonce, expiresAt] of pendingNonces) {
21
+ if (expiresAt <= currentTime)
22
+ pendingNonces.delete(nonce);
23
+ }
24
+ };
25
+ return {
26
+ issue() {
27
+ removeExpired();
28
+ if (pendingNonces.size >= MAX_PENDING_SETUP_NONCES)
29
+ return null;
30
+ const nonce = (0, node_crypto_1.randomBytes)(32).toString('base64url');
31
+ pendingNonces.set(nonce, now() + SETUP_NONCE_TTL_MS);
32
+ return nonce;
33
+ },
34
+ consume(candidate) {
35
+ removeExpired();
36
+ if (!pendingNonces.has(candidate))
37
+ return false;
38
+ pendingNonces.delete(candidate);
39
+ return true;
40
+ },
41
+ };
42
+ }
12
43
  async function startSetupServer(port = 3848) {
44
+ const nonceStore = createSetupNonceStore();
13
45
  const httpServer = (0, node_http_1.createServer)(async (req, res) => {
14
46
  if (req.url === '/setup' || req.url === '/') {
15
47
  const htmlPaths = [
@@ -32,16 +64,20 @@ async function startSetupServer(port = 3848) {
32
64
  res.end('setup.html not found');
33
65
  return;
34
66
  }
67
+ const pageNonce = nonceStore.issue();
68
+ if (!pageNonce) {
69
+ res.writeHead(429);
70
+ res.end('Too many pending setup pages; retry after older pages expire.');
71
+ return;
72
+ }
73
+ html = html.replace('__MAMA_SETUP_NONCE__', pageNonce);
35
74
  res.writeHead(200, { 'Content-Type': 'text/html' });
36
75
  res.end(html);
37
76
  return;
38
77
  }
39
78
  if (req.url === '/setup-v3.css' || req.url === '/setup.css') {
40
79
  const cssPath = (0, node_path_1.join)(__dirname, '../../public/setup-v3.css');
41
- const cssPaths = [
42
- cssPath,
43
- (0, node_path_1.join)(__dirname, '../../public/setup.css'),
44
- ];
80
+ const cssPaths = [cssPath, (0, node_path_1.join)(__dirname, '../../public/setup.css')];
45
81
  let css = '';
46
82
  for (const path of cssPaths) {
47
83
  try {
@@ -76,18 +112,28 @@ async function startSetupServer(port = 3848) {
76
112
  wss.on('listening', () => {
77
113
  console.log('[Setup] WebSocketServer is listening');
78
114
  });
79
- (0, setup_websocket_js_1.createSetupWebSocketHandler)(wss);
115
+ const websocketLifecycle = (0, setup_websocket_js_1.createSetupWebSocketHandler)(wss, undefined, undefined, {
116
+ allowedOrigins: [`http://127.0.0.1:${port}`, `http://localhost:${port}`],
117
+ consumeNonce: (candidate) => nonceStore.consume(candidate),
118
+ });
80
119
  await new Promise((resolve, reject) => {
81
120
  httpServer.listen(port, '127.0.0.1', () => {
82
121
  resolve();
83
122
  });
84
123
  httpServer.on('error', reject);
85
124
  });
125
+ let closePromise = null;
86
126
  return {
87
- close: (callback) => {
88
- wss.close(() => {
89
- httpServer.close(callback);
90
- });
127
+ close: () => {
128
+ closePromise ??= (async () => {
129
+ const websocketClosed = new Promise((resolve) => wss.close(() => resolve()));
130
+ await websocketLifecycle.close();
131
+ await websocketClosed;
132
+ await new Promise((resolve, reject) => {
133
+ httpServer.close((error) => (error ? reject(error) : resolve()));
134
+ });
135
+ })();
136
+ return closePromise;
91
137
  },
92
138
  };
93
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup-server.js","sourceRoot":"","sources":["../../src/setup/setup-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-server.js","sourceRoot":"","sources":["../../src/setup/setup-server.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,18 @@
1
1
  /**
2
- * Setup WebSocket Handler - Claude-powered interactive setup
2
+ * Setup WebSocket Handler - backend-powered interactive setup
3
3
  */
4
4
  import type { WebSocketServer } from 'ws';
5
- export declare function createSetupWebSocketHandler(wss: WebSocketServer): void;
5
+ import type { IModelRunner } from '../agent/model-runner.js';
6
+ import { createBackendModelRunner, type BackendModelRunnerOptions } from '../agent/backend-model-runner-factory.js';
7
+ import type { MAMAConfig } from '../cli/config/types.js';
8
+ import { type SetupActionExecutor } from './setup-actions.js';
9
+ export interface SetupWebSocketLifecycle {
10
+ close(): Promise<void>;
11
+ }
12
+ export interface SetupWebSocketSecurity {
13
+ allowedOrigins: readonly string[];
14
+ consumeNonce(nonce: string): boolean;
15
+ }
16
+ export declare function createSetupModelRunner(config: MAMAConfig, sessionId: string, createRunner?: (config: MAMAConfig, options: BackendModelRunnerOptions) => IModelRunner): IModelRunner;
17
+ export declare function createSetupWebSocketHandler(wss: WebSocketServer, createRunner?: typeof createBackendModelRunner, createActionExecutor?: () => SetupActionExecutor, security?: SetupWebSocketSecurity): SetupWebSocketLifecycle;
6
18
  //# sourceMappingURL=setup-websocket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-websocket.d.ts","sourceRoot":"","sources":["../../src/setup/setup-websocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,IAAI,CAAC;AAoMrD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAiEtE"}
1
+ {"version":3,"file":"setup-websocket.d.ts","sourceRoot":"","sources":["../../src/setup/setup-websocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,IAAI,CAAC;AAGrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,EAC/B,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AA+B5B,MAAM,WAAW,uBAAuB;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAKD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,CACZ,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,yBAAyB,KAC/B,YAAuC,GAC3C,YAAY,CASd;AAwLD,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,eAAe,EACpB,YAAY,GAAE,OAAO,wBAAmD,EACxE,oBAAoB,GAAE,MAAM,mBAA+C,EAC3E,QAAQ,CAAC,EAAE,sBAAsB,GAChC,uBAAuB,CAkHzB"}
@@ -1,16 +1,29 @@
1
1
  "use strict";
2
2
  /**
3
- * Setup WebSocket Handler - Claude-powered interactive setup
3
+ * Setup WebSocket Handler - backend-powered interactive setup
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSetupModelRunner = createSetupModelRunner;
6
7
  exports.createSetupWebSocketHandler = createSetupWebSocketHandler;
7
8
  const node_fs_1 = require("node:fs");
8
9
  const node_path_1 = require("node:path");
9
- const persistent_cli_adapter_js_1 = require("../agent/persistent-cli-adapter.js");
10
+ const backend_model_runner_factory_js_1 = require("../agent/backend-model-runner-factory.js");
10
11
  const config_manager_js_1 = require("../cli/config/config-manager.js");
11
12
  const setup_prompt_js_1 = require("./setup-prompt.js");
12
13
  const complete_autonomous_prompt_js_1 = require("../onboarding/complete-autonomous-prompt.js");
13
- const clients = new Map();
14
+ const setup_actions_js_1 = require("./setup-actions.js");
15
+ const SETUP_RUNNER_STOP_TIMEOUT_MS = 5_000;
16
+ const MAX_SETUP_ACTION_ROUNDS = 8;
17
+ function createSetupModelRunner(config, sessionId, createRunner = backend_model_runner_factory_js_1.createBackendModelRunner) {
18
+ return createRunner(config, {
19
+ sessionId,
20
+ model: config.agent.model,
21
+ systemPrompt: `${setup_actions_js_1.SETUP_ACTION_PROTOCOL}\n\n${setup_prompt_js_1.SETUP_SYSTEM_PROMPT}`,
22
+ timeoutMs: config.agent.timeout,
23
+ allowedTools: [],
24
+ disableNativeTools: true,
25
+ });
26
+ }
14
27
  // @ts-expect-error - Keeping for future use, currently unused after autonomous discovery migration
15
28
  function _extractName(input) {
16
29
  let name = input.trim();
@@ -77,15 +90,37 @@ function detectProgress(text, isRitualMode) {
77
90
  }
78
91
  return null;
79
92
  }
80
- async function processClaudeResponse(clientInfo, userMessage) {
81
- if (!clientInfo.cliAdapter) {
82
- throw new Error('CLI adapter not initialized');
93
+ async function processModelResponse(clientInfo, userMessage) {
94
+ if (!clientInfo.modelRunner) {
95
+ throw new Error('Model runner not initialized');
96
+ }
97
+ let prompt = userMessage;
98
+ let assistantText = '';
99
+ for (let round = 0; round < MAX_SETUP_ACTION_ROUNDS; round += 1) {
100
+ const result = await clientInfo.modelRunner.prompt(prompt, undefined, {
101
+ sessionKey: clientInfo.sessionId,
102
+ resumeSession: true,
103
+ });
104
+ const parsed = (0, setup_actions_js_1.parseSetupActions)(result.response || '');
105
+ if (parsed.actions.length === 0) {
106
+ assistantText = parsed.visibleText;
107
+ break;
108
+ }
109
+ const actionResults = await clientInfo.actionExecutor.executeBatch(parsed.actions);
110
+ prompt =
111
+ 'Trusted MAMA setup host action results:\n' +
112
+ JSON.stringify(actionResults) +
113
+ '\nContinue from these results. Do not repeat successful actions.';
114
+ if (round === MAX_SETUP_ACTION_ROUNDS - 1) {
115
+ throw new Error('Setup action loop exceeded its round limit');
116
+ }
83
117
  }
84
- const result = await clientInfo.cliAdapter.prompt(userMessage);
85
- const assistantText = result.response || '';
86
118
  // Check if onboarding completed (CLI wrote USER.md + SOUL.md via Write tool)
87
119
  const mamaHome = (0, config_manager_js_1.expandPath)('~/.mama');
88
- const onboardingDone = (0, node_fs_1.existsSync)((0, node_path_1.join)(mamaHome, 'USER.md')) && (0, node_fs_1.existsSync)((0, node_path_1.join)(mamaHome, 'SOUL.md'));
120
+ const onboardingDone = (0, node_fs_1.existsSync)((0, node_path_1.join)(mamaHome, 'IDENTITY.md')) &&
121
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(mamaHome, 'USER.md')) &&
122
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(mamaHome, 'SOUL.md')) &&
123
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(mamaHome, 'setup-complete.json'));
89
124
  if (onboardingDone && clientInfo.isRitualMode) {
90
125
  clientInfo.ws.send(JSON.stringify({
91
126
  type: 'redirect',
@@ -133,26 +168,49 @@ async function sendInitialGreeting(clientInfo) {
133
168
  content: greeting,
134
169
  }));
135
170
  }
136
- function createSetupWebSocketHandler(wss) {
137
- wss.on('connection', async (ws) => {
171
+ function createSetupWebSocketHandler(wss, createRunner = backend_model_runner_factory_js_1.createBackendModelRunner, createActionExecutor = setup_actions_js_1.createSetupActionExecutor, security) {
172
+ const clients = new Map();
173
+ const stopClient = (info) => {
174
+ if (!info.stopPromise) {
175
+ const runner = info.modelRunner;
176
+ info.stopPromise = info.messageTail
177
+ .catch(() => undefined)
178
+ .then(async () => {
179
+ info.modelRunner = null;
180
+ await runner?.stop();
181
+ });
182
+ }
183
+ return info.stopPromise;
184
+ };
185
+ wss.on('connection', async (ws, request) => {
186
+ const origin = request?.headers?.origin;
187
+ let nonce = '';
188
+ try {
189
+ nonce = new URL(request?.url ?? '', 'http://127.0.0.1').searchParams.get('nonce') ?? '';
190
+ }
191
+ catch {
192
+ nonce = '';
193
+ }
194
+ if (!security ||
195
+ !origin ||
196
+ !security.allowedOrigins.includes(origin) ||
197
+ clients.size > 0 ||
198
+ !security.consumeNonce(nonce)) {
199
+ ws.close(1008, 'Unauthorized setup connection');
200
+ return;
201
+ }
138
202
  console.log('[Setup] Client connected');
139
203
  const sessionId = `setup_${Date.now()}`;
140
- let cliAdapter = null;
204
+ let modelRunner = null;
141
205
  try {
142
206
  const config = (0, config_manager_js_1.getConfig)();
143
- cliAdapter = new persistent_cli_adapter_js_1.PersistentCLIAdapter({
144
- sessionId,
145
- model: config.agent.model,
146
- systemPrompt: setup_prompt_js_1.SETUP_SYSTEM_PROMPT,
147
- dangerouslySkipPermissions: config.multi_agent?.dangerouslySkipPermissions ?? true,
148
- requestTimeout: config.agent.timeout,
149
- });
207
+ modelRunner = createSetupModelRunner(config, sessionId, createRunner);
150
208
  }
151
209
  catch (error) {
152
- console.error('[Setup] CLI adapter creation failed:', error);
210
+ console.error('[Setup] model runner creation failed:', error);
153
211
  ws.send(JSON.stringify({
154
212
  type: 'error',
155
- message: 'Claude CLI initialization failed. Please verify Claude Code is installed.',
213
+ message: 'Configured model backend initialization failed. Verify its CLI and login.',
156
214
  }));
157
215
  ws.close();
158
216
  return;
@@ -160,35 +218,61 @@ function createSetupWebSocketHandler(wss) {
160
218
  const clientInfo = {
161
219
  ws,
162
220
  sessionId,
163
- cliAdapter,
221
+ modelRunner,
222
+ actionExecutor: createActionExecutor(),
164
223
  conversationHistory: [],
224
+ messageTail: Promise.resolve(),
165
225
  };
166
226
  clients.set(ws, clientInfo);
167
- ws.on('message', async (data) => {
168
- try {
227
+ ws.on('message', (data) => {
228
+ clientInfo.messageTail = clientInfo.messageTail
229
+ .then(async () => {
169
230
  const message = JSON.parse(data.toString());
170
231
  await handleClientMessage(clientInfo, message);
171
- }
172
- catch (error) {
232
+ })
233
+ .catch((error) => {
173
234
  console.error('[Setup] Message handling error:', error);
174
235
  ws.send(JSON.stringify({
175
236
  type: 'error',
176
237
  message: error instanceof Error ? error.message : 'Unknown error',
177
238
  }));
178
- }
239
+ });
179
240
  });
180
241
  ws.on('close', () => {
181
242
  console.log('[Setup] Client disconnected');
182
243
  const info = clients.get(ws);
183
- if (info?.cliAdapter) {
184
- info.cliAdapter.stop();
185
- }
244
+ if (info)
245
+ void stopClient(info);
186
246
  clients.delete(ws);
187
247
  });
188
248
  ws.on('error', (error) => {
189
249
  console.error('[Setup] WebSocket error:', error);
190
250
  });
191
251
  });
252
+ return {
253
+ async close() {
254
+ const stopping = [...clients.values()].map((info) => stopClient(info));
255
+ for (const info of clients.values())
256
+ info.ws.terminate();
257
+ clients.clear();
258
+ if (stopping.length === 0)
259
+ return;
260
+ let timer;
261
+ try {
262
+ await Promise.race([
263
+ Promise.allSettled(stopping).then(() => undefined),
264
+ new Promise((resolve) => {
265
+ timer = setTimeout(resolve, SETUP_RUNNER_STOP_TIMEOUT_MS);
266
+ timer.unref();
267
+ }),
268
+ ]);
269
+ }
270
+ finally {
271
+ if (timer)
272
+ clearTimeout(timer);
273
+ }
274
+ },
275
+ };
192
276
  }
193
277
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
194
278
  async function handleClientMessage(clientInfo, message) {
@@ -205,10 +289,10 @@ async function handleClientMessage(clientInfo, message) {
205
289
  role: 'user',
206
290
  content: userMessage,
207
291
  });
208
- if (!clientInfo.cliAdapter) {
292
+ if (!clientInfo.modelRunner) {
209
293
  clientInfo.ws.send(JSON.stringify({
210
294
  type: 'error',
211
- message: 'Claude CLI adapter not initialized',
295
+ message: 'Configured model runner not initialized',
212
296
  }));
213
297
  return;
214
298
  }
@@ -219,13 +303,13 @@ async function handleClientMessage(clientInfo, message) {
219
303
  ? '\n\n**IMPORTANT: User browser language is Korean (ko). Respond in Korean.**'
220
304
  : '\n\n**IMPORTANT: User browser language is English (en). Respond in English.**';
221
305
  const systemPrompt = clientInfo.isRitualMode
222
- ? complete_autonomous_prompt_js_1.COMPLETE_AUTONOMOUS_PROMPT + languageInstruction
223
- : setup_prompt_js_1.SETUP_SYSTEM_PROMPT + languageInstruction;
306
+ ? `${setup_actions_js_1.SETUP_ACTION_PROTOCOL}\n\n${complete_autonomous_prompt_js_1.COMPLETE_AUTONOMOUS_PROMPT}${languageInstruction}`
307
+ : `${setup_actions_js_1.SETUP_ACTION_PROTOCOL}\n\n${setup_prompt_js_1.SETUP_SYSTEM_PROMPT}${languageInstruction}`;
224
308
  // Update system prompt if needed (ritual vs setup mode)
225
- if (clientInfo.cliAdapter) {
226
- clientInfo.cliAdapter.setSystemPrompt(systemPrompt);
309
+ if (clientInfo.modelRunner) {
310
+ clientInfo.modelRunner.setSystemPrompt(systemPrompt);
227
311
  }
228
- const assistantMessage = await processClaudeResponse(clientInfo, userMessage);
312
+ const assistantMessage = await processModelResponse(clientInfo, userMessage);
229
313
  if (assistantMessage) {
230
314
  clientInfo.conversationHistory.push({
231
315
  role: 'assistant',
@@ -1 +1 @@
1
- {"version":3,"file":"setup-websocket.js","sourceRoot":"","sources":["../../src/setup/setup-websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-websocket.js","sourceRoot":"","sources":["../../src/setup/setup-websocket.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungjaehoon/mama-os",
3
- "version": "0.32.1",
3
+ "version": "0.32.2",
4
4
  "description": "MAMA OS - Local AI Runtime. Your scattered knowledge, organized by AI agents that never sleep.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/public/setup.html CHANGED
@@ -765,7 +765,8 @@
765
765
 
766
766
  isConnecting = true;
767
767
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
768
- const wsUrl = `${protocol}//${window.location.host}/setup-ws`;
768
+ const setupNonce = '__MAMA_SETUP_NONCE__';
769
+ const wsUrl = `${protocol}//${window.location.host}/setup-ws?nonce=${encodeURIComponent(setupNonce)}`;
769
770
 
770
771
  ws = new WebSocket(wsUrl);
771
772
 
@@ -790,10 +791,7 @@
790
791
  } catch (error) {
791
792
  console.error('[Setup] Invalid websocket payload:', event.data);
792
793
  const preview = String(event.data).slice(0, 200);
793
- showStatus(
794
- `서버 응답이 JSON이 아닙니다. 응답 미리보기: ${preview}`,
795
- 'error'
796
- );
794
+ showStatus(`서버 응답이 JSON이 아닙니다. 응답 미리보기: ${preview}`, 'error');
797
795
  return;
798
796
  }
799
797
  handleMessage(data);
@@ -805,11 +803,16 @@
805
803
  showStatus('Connection error occurred.', 'error');
806
804
  };
807
805
 
808
- ws.onclose = () => {
806
+ ws.onclose = (event) => {
809
807
  console.log('WebSocket disconnected');
810
808
  isConnecting = false;
811
809
  setInputEnabled(false);
812
810
 
811
+ if (event.code === 1008) {
812
+ showStatus('Setup authorization expired. Refresh this page to reconnect.', 'error');
813
+ return;
814
+ }
815
+
813
816
  setTimeout(() => {
814
817
  if (!isConnecting) {
815
818
  connectWebSocket();
@@ -34,14 +34,15 @@ const SYSTEM_AGENT_IDS = new Set([
34
34
  ]);
35
35
  const CLAUDE_MODEL_OPTIONS = ['claude-sonnet-4-6', 'claude-opus-4-6', 'claude-haiku-4-5-20251001'];
36
36
  const CODEX_MODEL_OPTIONS = ['gpt-5.4', 'gpt-5.3-codex', 'gpt-5.4-mini'];
37
- const GEMINI_MODEL_OPTIONS = ['gemini-2.5-pro', 'gemini-2.5-flash'];
37
+ const CLINE_MODEL_OPTIONS = ['deepseek/deepseek-v4-flash'];
38
+ export const MANAGED_AGENT_BACKENDS = ['claude', 'codex', 'cline'];
38
39
  export function getModelsForBackend(backend, currentModel) {
39
40
  let models;
40
41
  if (backend === 'codex') {
41
42
  models = CODEX_MODEL_OPTIONS;
42
43
  }
43
- else if (backend === 'gemini') {
44
- models = GEMINI_MODEL_OPTIONS;
44
+ else if (backend === 'cline') {
45
+ models = CLINE_MODEL_OPTIONS;
45
46
  }
46
47
  else {
47
48
  models = CLAUDE_MODEL_OPTIONS;
@@ -438,7 +439,7 @@ export class AgentsModule {
438
439
  const tierOptions = [1, 2, 3]
439
440
  .map((t) => `<option value="${t}" ${(a.tier ?? 1) === t ? 'selected' : ''}>T${t}</option>`)
440
441
  .join('');
441
- const backendOptions = Array.from(new Set(['claude', 'codex', 'gemini', backend]))
442
+ const backendOptions = Array.from(new Set([...MANAGED_AGENT_BACKENDS, backend]))
442
443
  .map((b) => `<option value="${escapeAttr(b)}" ${backend === b ? 'selected' : ''}>${escapeHtml(b)}</option>`)
443
444
  .join('');
444
445
  el.innerHTML = `
@@ -43,6 +43,12 @@ const MODEL_OPTIONS = {
43
43
  'claude-3-7-sonnet-20250219',
44
44
  'claude-3-haiku-20240307',
45
45
  ],
46
+ cline: ['deepseek/deepseek-v4-flash'],
47
+ };
48
+ const DEFAULT_MODEL = {
49
+ claude: 'claude-sonnet-4-6',
50
+ codex: 'gpt-5.4',
51
+ cline: 'deepseek/deepseek-v4-flash',
46
52
  };
47
53
  export function getSettingsModelOptions(backend, currentModel) {
48
54
  const options = MODEL_OPTIONS[backend] || MODEL_OPTIONS.claude;
@@ -630,14 +636,29 @@ export class SettingsModule {
630
636
  * Collect form data into config update object
631
637
  */
632
638
  collectFormData() {
633
- const backend = (this.getSelectValue('settings-agent-backend') || 'claude');
634
- const model = this.getSelectValue('settings-agent-model');
635
- const effort = (this.getSelectValue('settings-agent-effort') || 'medium');
639
+ const backend = (this.getSelectValue('settings-agent-backend') ||
640
+ this.config?.agent?.backend ||
641
+ 'claude');
642
+ const model = this.getSelectValue('settings-agent-model') || this.config?.agent?.model || '';
643
+ const effort = (this.getSelectValue('settings-agent-effort') ||
644
+ this.config?.agent?.effort ||
645
+ 'medium');
636
646
  const useClaudeCli = backend === 'claude';
637
- const resolvedModel = model || (backend === 'codex' ? 'gpt-5.4' : 'claude-sonnet-4-6');
647
+ const resolvedModel = this.getNormalizedModelForBackend(backend, model);
638
648
  const normalizedEffort = this.supportsEffortModel(resolvedModel)
639
649
  ? this.normalizeEffortForModel(resolvedModel, effort)
640
650
  : undefined;
651
+ const hasToolControls = document.querySelectorAll('.gateway-tool, .mcp-tool').length > 0;
652
+ const configuredTools = this.config?.agent?.tools;
653
+ const tools = hasToolControls
654
+ ? this.collectToolModeData()
655
+ : {
656
+ gateway: configuredTools?.gateway ?? [],
657
+ mcp: configuredTools?.mcp ?? [],
658
+ mcp_config: typeof configuredTools?.mcp_config === 'string'
659
+ ? configuredTools.mcp_config
660
+ : '~/.mama/mama-mcp-config.json',
661
+ };
641
662
  // Get token values - if empty and original was masked, keep original
642
663
  const discordToken = this.getTokenValue('settings-discord-token', this.config?.discord?.token);
643
664
  const slackBotToken = this.getTokenValue('settings-slack-bot-token', this.config?.slack?.bot_token);
@@ -675,9 +696,9 @@ export class SettingsModule {
675
696
  model: resolvedModel,
676
697
  // Effort for Claude 4.6 models (adaptive thinking). 'max' is Opus-only.
677
698
  effort: normalizedEffort,
678
- max_turns: this.parseIntegerInput('settings-agent-max-turns', 1, 100, 10),
679
- timeout: this.parseIntegerInput('settings-agent-timeout', 1, 600, 300) * 1000,
680
- tools: this.collectToolModeData(),
699
+ max_turns: this.parseIntegerInput('settings-agent-max-turns', 1, 100, this.config?.agent?.max_turns ?? 10),
700
+ timeout: this.parseIntegerInput('settings-agent-timeout', 1, 600, Math.round((this.config?.agent?.timeout ?? 300000) / 1000)) * 1000,
701
+ tools,
681
702
  },
682
703
  token_budget: {
683
704
  // Keep existing integer constraint for daily limit to avoid partial values.
@@ -767,14 +788,17 @@ export class SettingsModule {
767
788
  getNormalizedModelForBackend(backend, model) {
768
789
  const isCodexBackend = backend === 'codex';
769
790
  if (!model) {
770
- return isCodexBackend ? 'gpt-5.4' : 'claude-sonnet-4-6';
791
+ return DEFAULT_MODEL[backend];
771
792
  }
772
793
  const isClaudeModel = /^claude-/i.test(model);
773
794
  if (isCodexBackend && isClaudeModel) {
774
- return 'gpt-5.4';
795
+ return DEFAULT_MODEL.codex;
796
+ }
797
+ if (backend === 'cline' && (isClaudeModel || /^gpt-/i.test(model))) {
798
+ return DEFAULT_MODEL.cline;
775
799
  }
776
800
  if (backend === 'claude' && !isClaudeModel) {
777
- return 'claude-sonnet-4-20250514';
801
+ return DEFAULT_MODEL.claude;
778
802
  }
779
803
  return model;
780
804
  }
@@ -43,14 +43,15 @@ const SYSTEM_AGENT_IDS = new Set([
43
43
 
44
44
  const CLAUDE_MODEL_OPTIONS = ['claude-sonnet-4-6', 'claude-opus-4-6', 'claude-haiku-4-5-20251001'];
45
45
  const CODEX_MODEL_OPTIONS = ['gpt-5.4', 'gpt-5.3-codex', 'gpt-5.4-mini'];
46
- const GEMINI_MODEL_OPTIONS = ['gemini-2.5-pro', 'gemini-2.5-flash'];
46
+ const CLINE_MODEL_OPTIONS = ['deepseek/deepseek-v4-flash'];
47
+ export const MANAGED_AGENT_BACKENDS = ['claude', 'codex', 'cline'] as const;
47
48
 
48
49
  export function getModelsForBackend(backend: string, currentModel?: string): string[] {
49
50
  let models: readonly string[];
50
51
  if (backend === 'codex') {
51
52
  models = CODEX_MODEL_OPTIONS;
52
- } else if (backend === 'gemini') {
53
- models = GEMINI_MODEL_OPTIONS;
53
+ } else if (backend === 'cline') {
54
+ models = CLINE_MODEL_OPTIONS;
54
55
  } else {
55
56
  models = CLAUDE_MODEL_OPTIONS;
56
57
  }
@@ -501,7 +502,7 @@ export class AgentsModule {
501
502
  .map((t) => `<option value="${t}" ${(a.tier ?? 1) === t ? 'selected' : ''}>T${t}</option>`)
502
503
  .join('');
503
504
 
504
- const backendOptions = Array.from(new Set(['claude', 'codex', 'gemini', backend]))
505
+ const backendOptions = Array.from(new Set([...MANAGED_AGENT_BACKENDS, backend]))
505
506
  .map(
506
507
  (b) =>
507
508
  `<option value="${escapeAttr(b)}" ${backend === b ? 'selected' : ''}>${escapeHtml(b)}</option>`