bluelamp 2.0.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +12 -25
  2. package/bin/bluelamp +368 -0
  3. package/bin/bluelamp-base +368 -0
  4. package/bin/bluelamp10 +368 -0
  5. package/bin/bluelamp100 +368 -0
  6. package/bin/bluelamp11 +368 -0
  7. package/bin/bluelamp12 +368 -0
  8. package/bin/bluelamp13 +368 -0
  9. package/bin/bluelamp14 +368 -0
  10. package/bin/bluelamp15 +368 -0
  11. package/bin/bluelamp16 +368 -0
  12. package/bin/bluelamp17 +368 -0
  13. package/bin/bluelamp18 +368 -0
  14. package/bin/bluelamp19 +368 -0
  15. package/bin/bluelamp2 +368 -0
  16. package/bin/bluelamp20 +368 -0
  17. package/bin/bluelamp21 +368 -0
  18. package/bin/bluelamp22 +368 -0
  19. package/bin/bluelamp23 +368 -0
  20. package/bin/bluelamp24 +368 -0
  21. package/bin/bluelamp25 +368 -0
  22. package/bin/bluelamp26 +368 -0
  23. package/bin/bluelamp27 +368 -0
  24. package/bin/bluelamp28 +368 -0
  25. package/bin/bluelamp29 +368 -0
  26. package/bin/bluelamp3 +368 -0
  27. package/bin/bluelamp30 +368 -0
  28. package/bin/bluelamp31 +368 -0
  29. package/bin/bluelamp32 +368 -0
  30. package/bin/bluelamp33 +368 -0
  31. package/bin/bluelamp34 +368 -0
  32. package/bin/bluelamp35 +368 -0
  33. package/bin/bluelamp36 +368 -0
  34. package/bin/bluelamp37 +368 -0
  35. package/bin/bluelamp38 +368 -0
  36. package/bin/bluelamp39 +368 -0
  37. package/bin/bluelamp4 +368 -0
  38. package/bin/bluelamp40 +368 -0
  39. package/bin/bluelamp41 +368 -0
  40. package/bin/bluelamp42 +368 -0
  41. package/bin/bluelamp43 +368 -0
  42. package/bin/bluelamp44 +368 -0
  43. package/bin/bluelamp45 +368 -0
  44. package/bin/bluelamp46 +368 -0
  45. package/bin/bluelamp47 +368 -0
  46. package/bin/bluelamp48 +368 -0
  47. package/bin/bluelamp49 +368 -0
  48. package/bin/bluelamp5 +368 -0
  49. package/bin/bluelamp50 +368 -0
  50. package/bin/bluelamp51 +368 -0
  51. package/bin/bluelamp52 +368 -0
  52. package/bin/bluelamp53 +368 -0
  53. package/bin/bluelamp54 +368 -0
  54. package/bin/bluelamp55 +368 -0
  55. package/bin/bluelamp56 +368 -0
  56. package/bin/bluelamp57 +368 -0
  57. package/bin/bluelamp58 +368 -0
  58. package/bin/bluelamp59 +368 -0
  59. package/bin/bluelamp6 +368 -0
  60. package/bin/bluelamp60 +368 -0
  61. package/bin/bluelamp61 +368 -0
  62. package/bin/bluelamp62 +368 -0
  63. package/bin/bluelamp63 +368 -0
  64. package/bin/bluelamp64 +368 -0
  65. package/bin/bluelamp65 +368 -0
  66. package/bin/bluelamp66 +368 -0
  67. package/bin/bluelamp67 +368 -0
  68. package/bin/bluelamp68 +368 -0
  69. package/bin/bluelamp69 +368 -0
  70. package/bin/bluelamp7 +368 -0
  71. package/bin/bluelamp70 +368 -0
  72. package/bin/bluelamp71 +368 -0
  73. package/bin/bluelamp72 +368 -0
  74. package/bin/bluelamp73 +368 -0
  75. package/bin/bluelamp74 +368 -0
  76. package/bin/bluelamp75 +368 -0
  77. package/bin/bluelamp76 +368 -0
  78. package/bin/bluelamp77 +368 -0
  79. package/bin/bluelamp78 +368 -0
  80. package/bin/bluelamp79 +368 -0
  81. package/bin/bluelamp8 +368 -0
  82. package/bin/bluelamp80 +368 -0
  83. package/bin/bluelamp81 +368 -0
  84. package/bin/bluelamp82 +368 -0
  85. package/bin/bluelamp83 +368 -0
  86. package/bin/bluelamp84 +368 -0
  87. package/bin/bluelamp85 +368 -0
  88. package/bin/bluelamp86 +368 -0
  89. package/bin/bluelamp87 +368 -0
  90. package/bin/bluelamp88 +368 -0
  91. package/bin/bluelamp89 +368 -0
  92. package/bin/bluelamp9 +368 -0
  93. package/bin/bluelamp90 +368 -0
  94. package/bin/bluelamp91 +368 -0
  95. package/bin/bluelamp92 +368 -0
  96. package/bin/bluelamp93 +368 -0
  97. package/bin/bluelamp94 +368 -0
  98. package/bin/bluelamp95 +368 -0
  99. package/bin/bluelamp96 +368 -0
  100. package/bin/bluelamp97 +368 -0
  101. package/bin/bluelamp98 +368 -0
  102. package/bin/bluelamp99 +368 -0
  103. package/lib/mcp-server/dist/bluelamp-system.js +32 -0
  104. package/lib/mcp-server/dist/crypto-utils.js +27 -0
  105. package/lib/mcp-server/dist/database-version.js +33 -0
  106. package/lib/mcp-server/dist/index.js +62 -0
  107. package/lib/mcp-server/dist/plugins/base-plugin.js +24 -0
  108. package/lib/mcp-server/dist/plugins/plugin-manager.js +31 -0
  109. package/lib/mcp-server/dist/plugins/services/leonardo-plugin.js +95 -0
  110. package/lib/mcp-server/dist/plugins/services/leonardo-prompt-parser.js +36 -0
  111. package/lib/mcp-server/dist/plugins/services/portal-api-client.js +22 -0
  112. package/lib/mcp-server/dist/plugins/services/portal-plugin.js +52 -0
  113. package/lib/mcp-server/dist/secure-mcp-server.js +76 -0
  114. package/lib/mcp-server/dist/security/ApiKeyManager.js +24 -0
  115. package/lib/mcp-server/dist/security/InteractiveLogin.js +32 -0
  116. package/lib/mcp-server/dist/security/PortalAuthClient.js +1 -0
  117. package/lib/mcp-server/dist/security/SimpleAuthManager.js +1 -0
  118. package/lib/mcp-server/dist/security/TokenManager.js +25 -0
  119. package/lib/mcp-server/package.json +21 -0
  120. package/package.json +119 -35
  121. package/INSTALLATION_GUIDE.md +0 -109
  122. package/bin/blcf +0 -2
  123. package/bin/blcf2 +0 -28
  124. package/bin/blcf3 +0 -2
  125. package/bin/blcf4 +0 -2
  126. package/knowledge-injection/hooks/inject-encrypted.sh +0 -321
  127. package/lib/agents//343/203/225/343/202/231/343/203/253/343/203/274/343/203/251/343/203/263/343/203/225/343/202/232.md +0 -106
  128. package/lib/mcp-server/dist_optimized/bluelamp-system.d.ts +0 -29
  129. package/lib/mcp-server/dist_optimized/bluelamp-system.d.ts.map +0 -1
  130. package/lib/mcp-server/dist_optimized/bluelamp-system.js +0 -1
  131. package/lib/mcp-server/dist_optimized/bluelamp-system.js.bak +0 -340
  132. package/lib/mcp-server/dist_optimized/bluelamp-system.js.map +0 -1
  133. package/lib/mcp-server/dist_optimized/crypto-utils.d.ts +0 -33
  134. package/lib/mcp-server/dist_optimized/crypto-utils.d.ts.map +0 -1
  135. package/lib/mcp-server/dist_optimized/crypto-utils.js +0 -1
  136. package/lib/mcp-server/dist_optimized/crypto-utils.js.map +0 -1
  137. package/lib/mcp-server/dist_optimized/database-version.d.ts +0 -72
  138. package/lib/mcp-server/dist_optimized/database-version.d.ts.map +0 -1
  139. package/lib/mcp-server/dist_optimized/database-version.js +0 -2
  140. package/lib/mcp-server/dist_optimized/database-version.js.bak +0 -374
  141. package/lib/mcp-server/dist_optimized/database-version.js.map +0 -1
  142. package/lib/mcp-server/dist_optimized/index.d.ts +0 -3
  143. package/lib/mcp-server/dist_optimized/index.d.ts.map +0 -1
  144. package/lib/mcp-server/dist_optimized/index.js +0 -2
  145. package/lib/mcp-server/dist_optimized/index.js.map +0 -1
  146. package/lib/mcp-server/dist_optimized/secure-mcp-server.d.ts +0 -64
  147. package/lib/mcp-server/dist_optimized/secure-mcp-server.d.ts.map +0 -1
  148. package/lib/mcp-server/dist_optimized/secure-mcp-server.js +0 -1
  149. package/lib/mcp-server/dist_optimized/secure-mcp-server.js.bak +0 -1
  150. package/lib/mcp-server/dist_optimized/secure-mcp-server.js.bak2 +0 -1
  151. package/lib/mcp-server/dist_optimized/secure-mcp-server.js.map +0 -1
  152. package/lib/mcp-server/dist_optimized/security/InteractiveLogin.d.ts +0 -47
  153. package/lib/mcp-server/dist_optimized/security/InteractiveLogin.d.ts.map +0 -1
  154. package/lib/mcp-server/dist_optimized/security/InteractiveLogin.js +0 -1
  155. package/lib/mcp-server/dist_optimized/security/InteractiveLogin.js.map +0 -1
  156. package/lib/mcp-server/dist_optimized/security/PortalAuthClient.d.ts +0 -65
  157. package/lib/mcp-server/dist_optimized/security/PortalAuthClient.d.ts.map +0 -1
  158. package/lib/mcp-server/dist_optimized/security/PortalAuthClient.js +0 -1
  159. package/lib/mcp-server/dist_optimized/security/PortalAuthClient.js.map +0 -1
  160. package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.backup +0 -294
  161. package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.d.ts +0 -71
  162. package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.d.ts.map +0 -1
  163. package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.js +0 -1
  164. package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.js.backup +0 -25
  165. package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.js.map +0 -1
  166. package/lib/mcp-server/dist_optimized/security/TokenManager.d.ts +0 -61
  167. package/lib/mcp-server/dist_optimized/security/TokenManager.d.ts.map +0 -1
  168. package/lib/mcp-server/dist_optimized/security/TokenManager.js +0 -1
  169. package/lib/mcp-server/dist_optimized/security/TokenManager.js.map +0 -1
  170. package/scripts/setup-agents.js +0 -9
package/README.md CHANGED
@@ -1,38 +1,25 @@
1
- # BlueLamp - Commercial License
2
-
3
- Copyright (c) 2024 BlueLamp. All rights reserved.
4
- This software is proprietary and confidential.
5
-
6
- BlueLampは、統合AIエージェントシステムです。
7
-
8
- ## 特徴
9
-
10
- - **統合エージェント**: ブルーランプエージェント一本化による効率的なタスク実行
11
- - **知識注入**: 専門知識を動的に注入し、コンテキストに応じた最適な処理を実行
12
- - **役割適応**: オーケストレーター指示に応じて適切な役割・ツールを自動選択
13
- - **MCP統合**: Model Context Protocolによる高度なコンテキスト管理
1
+ # BlueLamp v3.0.0 Release Build
14
2
 
15
3
  ## インストール
16
4
 
17
5
  ```bash
18
- npm install -g bluelamp-mcp
6
+ npm install -g .
19
7
  ```
20
8
 
21
9
  ## 使用方法
22
10
 
23
- ### 基本起動
24
11
  ```bash
25
- ブルーランプ
12
+ bluelamp
13
+ # または
14
+ bluelamp2, bluelamp3, ... bluelamp100
26
15
  ```
27
16
 
28
- ### エージェント統合について
29
- v1.1.0では、複数のエージェントを単一の「ブルーランプエージェント」に統合しました:
30
- - パフォーマーエージェント機能を核とした統合設計
31
- - 指示内容に応じた自動役割適応(システム管理者、ファイル分析者、Web研究者等)
32
- - 効率的なツール選択とタスク実行の最適化
17
+ ## 特徴
33
18
 
34
- ## ライセンス
19
+ - 高度な難読化によるセキュリティ保護
20
+ - Portal統合機能
21
+ - Leonardo AI連携
22
+ - 最適化されたパフォーマンス
35
23
 
36
- BlueLamp - Commercial License
37
- Copyright (c) 2024 BlueLamp. All rights reserved.
38
- This software is proprietary and confidential.
24
+ ---
25
+ Generated by BlueLamp Build System v3.0.0
package/bin/bluelamp ADDED
@@ -0,0 +1,368 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * BlueLamp - AI Agent Orchestration System with Portal Authentication
5
+ * Base script that handles slot-based command routing
6
+ *
7
+ * Features:
8
+ * - Portal統合認証システム
9
+ * - 3箇所分散保存によるセキュリティ強化
10
+ * - bypassmode=true (--dangerously-skip-permissions)
11
+ * - orchestrator Knowledge Injection
12
+ * - 24 AI Agents available as sub-agents
13
+ * - Auto slot detection from command name
14
+ */
15
+
16
+ const { spawn } = require('child_process');
17
+ const path = require('path');
18
+ const fs = require('fs');
19
+ const os = require('os');
20
+
21
+ // パッケージのルートディレクトリを取得
22
+ const packageRoot = path.dirname(__dirname);
23
+ const mcpServerPath = path.join(packageRoot, 'lib/mcp-server/dist/secure-mcp-server.js');
24
+
25
+ // Portal認証モジュールのインポート(ES Modules対応)
26
+ const securityPath = path.join(packageRoot, 'lib/mcp-server/dist/security');
27
+
28
+ /**
29
+ * コマンド名からスロット番号を自動判定
30
+ */
31
+ function detectSlotNumber() {
32
+ try {
33
+ // process.argv[1] から実行されたコマンドのパスを取得
34
+ const commandPath = process.argv[1];
35
+ const commandName = path.basename(commandPath);
36
+
37
+ // コマンド名から数字部分を抽出
38
+ if (commandName === 'bluelamp') {
39
+ return 1; // デフォルトはスロット1
40
+ }
41
+
42
+ const match = commandName.match(/^bluelamp(\d+)$/);
43
+ if (match) {
44
+ const slotNumber = parseInt(match[1], 10);
45
+ if (slotNumber >= 1 && slotNumber <= 100) {
46
+ return slotNumber;
47
+ }
48
+ }
49
+
50
+ throw new Error(`Invalid command name: ${commandName}. Expected format: bluelamp or bluelamp[1-100]`);
51
+
52
+ } catch (error) {
53
+ console.error('❌ スロット番号の自動判定に失敗しました:', error.message);
54
+ console.error('');
55
+ console.error('有効なコマンド名:');
56
+ console.error('- bluelamp (スロット1)');
57
+ console.error('- bluelamp2〜bluelamp100');
58
+ process.exit(1);
59
+ }
60
+ }
61
+
62
+ // スロット番号を取得
63
+ const SLOT_NUMBER = detectSlotNumber();
64
+
65
+ console.log(`🔵 BlueLamp - AIエージェント統合システム (スロット${SLOT_NUMBER})`);
66
+ console.log(' ポータル統合認証 + 知識注入 + 24種類のAIエージェント');
67
+ console.log('');
68
+
69
+ /**
70
+ * Portal認証の実行
71
+ */
72
+ async function performPortalAuth() {
73
+ try {
74
+ // 動的インポートでES Modulesを読み込み
75
+ const { InteractiveLogin } = await import(`file://${securityPath}/InteractiveLogin.js`);
76
+
77
+ console.log('🔐 Portal認証を開始します...');
78
+ const authResult = await InteractiveLogin.performLogin();
79
+
80
+ InteractiveLogin.displayLoginSuccess(authResult);
81
+
82
+ return authResult.token;
83
+
84
+ } catch (error) {
85
+ console.error('❌ Portal認証エラー:', error.message);
86
+ console.error('');
87
+ console.error('解決方法:');
88
+ console.error('1. インターネット接続を確認してください');
89
+ console.error('2. Portal認証情報が正しいか確認してください');
90
+ console.error('3. https://geniemon.vercel.app にアクセスできるか確認してください');
91
+ process.exit(1);
92
+ }
93
+ }
94
+
95
+ /**
96
+ * シンプル保存システムの実行
97
+ */
98
+ async function performDistributedStorage(cliToken) {
99
+ try {
100
+ // SimpleAuthManagerを読み込み
101
+ const { SimpleAuthManager } = await import(`file://${securityPath}/SimpleAuthManager.js`);
102
+
103
+ console.log('🔒 APIキーを安全に保存中...');
104
+ const success = SimpleAuthManager.saveApiKey(cliToken);
105
+
106
+ if (success) {
107
+ console.log('✅ APIキー保存完了');
108
+ console.log('🛡️ セキュリティレベル: 高');
109
+ }
110
+
111
+ return {
112
+ success: success,
113
+ distributionTime: 1
114
+ };
115
+
116
+ } catch (error) {
117
+ console.error('❌ APIキー保存エラー:', error.message);
118
+ return {
119
+ success: false,
120
+ error: error.message
121
+ };
122
+ }
123
+ }
124
+
125
+ /**
126
+ * エージェントセットアップの確認と実行
127
+ */
128
+ function ensureAgentsSetup() {
129
+ const agentsDir = path.join(os.homedir(), '.claude/agents');
130
+ const blueLampAgent = path.join(agentsDir, 'ブルーランプ.md');
131
+
132
+ // ブルーランプエージェントが存在しない場合はセットアップを実行
133
+ if (!fs.existsSync(blueLampAgent)) {
134
+ console.log('🔧 エージェントセットアップが必要です...');
135
+
136
+ try {
137
+ const setupScript = path.join(packageRoot, 'scripts/setup-agents.js');
138
+ require(setupScript);
139
+ console.log('✅ エージェントセットアップ完了');
140
+ } catch (error) {
141
+ console.warn('⚠️ エージェント自動セットアップに失敗しました:', error.message);
142
+ console.warn('手動でセットアップを実行してください: npm run postinstall');
143
+ }
144
+ }
145
+ }
146
+
147
+ /**
148
+ * スロット認証の実行
149
+ */
150
+ async function performSlotAuth(token) {
151
+ try {
152
+ const fetch = (await import('node-fetch')).default;
153
+
154
+ console.log(`🎯 スロット${SLOT_NUMBER}の認証を実行中...`);
155
+
156
+ const response = await fetch(`https://bluelamp-portal-235426778039.asia-northeast1.run.app/api/slots/${SLOT_NUMBER}`, {
157
+ method: 'GET',
158
+ headers: {
159
+ 'Content-Type': 'application/json',
160
+ 'Authorization': `Bearer ${token}`
161
+ }
162
+ });
163
+
164
+ if (!response.ok) {
165
+ throw new Error(`スロット認証失敗 (${response.status}): ${response.statusText}`);
166
+ }
167
+
168
+ const result = await response.json();
169
+ console.log(`✅ スロット${SLOT_NUMBER}認証完了`);
170
+
171
+ return result;
172
+
173
+ } catch (error) {
174
+ console.error(`❌ スロット${SLOT_NUMBER}認証エラー:`, error.message);
175
+ console.error('');
176
+ console.error('解決方法:');
177
+ console.error('1. インターネット接続を確認してください');
178
+ console.error('2. Portalでスロット権限があることを確認してください');
179
+ console.error('3. しばらく待ってから再試行してください');
180
+ process.exit(1);
181
+ }
182
+ }
183
+
184
+ /**
185
+ * メイン処理
186
+ */
187
+ async function main() {
188
+ // コマンドライン引数の処理
189
+ const args = process.argv.slice(2);
190
+
191
+ // ログアウトコマンド
192
+ if (args.includes('--logout')) {
193
+ try {
194
+ const { InteractiveLogin } = await import(`file://${securityPath}/InteractiveLogin.js`);
195
+ await InteractiveLogin.logout();
196
+ process.exit(0);
197
+ } catch (error) {
198
+ console.error('❌ ログアウトエラー:', error.message);
199
+ process.exit(1);
200
+ }
201
+ }
202
+
203
+ // ログイン状態確認コマンド
204
+ if (args.includes('--status')) {
205
+ try {
206
+ const { InteractiveLogin } = await import(`file://${securityPath}/InteractiveLogin.js`);
207
+ await InteractiveLogin.checkLoginStatus();
208
+ process.exit(0);
209
+ } catch (error) {
210
+ console.error('❌ ステータス確認エラー:', error.message);
211
+ process.exit(1);
212
+ }
213
+ }
214
+
215
+ // エージェントセットアップの確認
216
+ ensureAgentsSetup();
217
+
218
+ // Portal認証の実行
219
+ const cliToken = await performPortalAuth();
220
+
221
+ // スロット認証の実行
222
+ await performSlotAuth(cliToken);
223
+
224
+ // シンプル保存システムの実行
225
+ console.log('🔒 APIキーを保存中...');
226
+ const distributed = await performDistributedStorage(cliToken);
227
+
228
+ if (!distributed.success) {
229
+ console.error('❌ APIキー保存に失敗しました:', distributed.error);
230
+ console.error('フォールバックモードで起動します...');
231
+ }
232
+
233
+ // TTY検出とフォールバック処理
234
+ const isTTY = process.stdout.isTTY && process.stdin.isTTY;
235
+ if (!isTTY) {
236
+ console.warn('⚠️ TTY環境が検出されませんでした。互換モードで起動します。');
237
+ }
238
+
239
+ // 環境変数の設定(スロット番号を追加)
240
+ const env = {
241
+ ...process.env,
242
+ BLUELAMP_ENCRYPTION_KEY: process.env.BLUELAMP_ENCRYPTION_KEY || 'bluelamp-default-key-2024',
243
+ BLUELAMP_TOKEN: cliToken, // Portal認証で取得した実際のCLIトークンを使用
244
+ BLUELAMP_DISTRIBUTED: distributed.success ? 'true' : 'false',
245
+ BLUELAMP_SLOT_NUMBER: SLOT_NUMBER.toString(), // スロット番号を環境変数として設定
246
+ NODE_ENV: 'production'
247
+ };
248
+
249
+ // MCP設定ファイルの作成
250
+ const tempConfigPath = path.join(os.tmpdir(), `bluelamp-mcp-slot${SLOT_NUMBER}-${Date.now()}.json`);
251
+
252
+ const mcpConfig = {
253
+ mcpServers: {
254
+ "bluelamp-secure": {
255
+ command: "node",
256
+ args: [mcpServerPath],
257
+ env: {
258
+ BLUELAMP_ENCRYPTION_KEY: env.BLUELAMP_ENCRYPTION_KEY,
259
+ BLUELAMP_TOKEN: env.BLUELAMP_TOKEN,
260
+ BLUELAMP_SLOT_NUMBER: env.BLUELAMP_SLOT_NUMBER
261
+ }
262
+ }
263
+ }
264
+ // 自動フックは削除 - 起動プロンプトで手動実行を指示
265
+ };
266
+
267
+ fs.writeFileSync(tempConfigPath, JSON.stringify(mcpConfig, null, 2));
268
+
269
+ // オーケストレーター起動プロンプト(スロット情報を追加)
270
+ const orchestratorPrompt = `> オーケストレーターモードで起動 (スロット${SLOT_NUMBER})
271
+
272
+ 🔵 BlueLamp 統合認証システム が有効化されました
273
+
274
+ \x1b[34m╭─────────────────────────────────────────────────────────────────╮\x1b[0m
275
+ \x1b[34m│ │\x1b[0m
276
+ \x1b[34m│ B l u e L a m p │\x1b[0m
277
+ \x1b[34m│ ───────────────── │\x1b[0m
278
+ \x1b[34m│ スロット${SLOT_NUMBER.toString().padStart(2, ' ')} でお待ちしています │\x1b[0m
279
+ \x1b[34m│ │\x1b[0m
280
+ \x1b[34m╰─────────────────────────────────────────────────────────────────╯\x1b[0m
281
+
282
+ **最初に必ずオーケストレーター専門知識を注入してください**
283
+ inject_knowledge ツールで "オーケストレーター" を実行してから開始してください。(初回必須)
284
+
285
+ 準備完了です。まず知識注入を実行してから、何を実装するか教えてください。`;
286
+
287
+ // 一時プロンプトファイルの作成
288
+ const tempPromptPath = path.join(os.tmpdir(), `bluelamp-prompt-slot${SLOT_NUMBER}-${Date.now()}.txt`);
289
+ fs.writeFileSync(tempPromptPath, orchestratorPrompt);
290
+
291
+ console.log('🚀 Claude Code起動中...');
292
+ console.log(` - スロット番号: ${SLOT_NUMBER}`);
293
+ console.log(' - Portal認証: ON');
294
+ console.log(' - 単一ファイル保存: ON');
295
+ console.log(' - bypassmode: ON (--dangerously-skip-permissions)');
296
+ console.log(' - Knowledge Injection: ON');
297
+ console.log(' - MCP Server: BlueLamp Secure');
298
+ console.log(' - TTY互換モード: ON');
299
+ console.log('');
300
+
301
+ // Claude Codeを起動(claude-flow方式: プロンプト引数渡し + TTY維持)
302
+ const claudeArgs = [
303
+ orchestratorPrompt, // 初期プロンプトを第1引数で渡す(claude-flow方式)
304
+ '--dangerously-skip-permissions', // bypassmode=true(開発モード)
305
+ '--mcp-config', tempConfigPath, // MCP設定ファイル
306
+ ];
307
+
308
+ const child = spawn('claude', claudeArgs, {
309
+ stdio: 'inherit', // TTY完全維持(claude-flow方式)
310
+ env: env,
311
+
312
+ // プロセス設定
313
+ detached: false, // プロセスグループ分離を無効
314
+ windowsHide: false, // Windows環境でのウィンドウ表示
315
+ shell: false // シェル経由実行を無効化
316
+ });
317
+
318
+ // TTY維持によりsetRawMode不要(問題の原因を完全除去)
319
+ // stdin操作も不要(引数でプロンプト渡し済み)
320
+
321
+ // エラーハンドリング
322
+ child.on('error', (error) => {
323
+ console.error('❌ Claude Code起動エラー:', error.message);
324
+ console.error('');
325
+ console.error('解決方法:');
326
+ console.error('1. Claude Codeがインストールされているか確認');
327
+ console.error('2. PATHにclaudeコマンドが含まれているか確認');
328
+ console.error('3. Claude Codeのバージョンが最新か確認');
329
+
330
+ // 一時ファイルをクリーンアップ
331
+ try {
332
+ fs.unlinkSync(tempConfigPath);
333
+ fs.unlinkSync(tempPromptPath);
334
+ } catch (e) {
335
+ // ignore cleanup errors
336
+ }
337
+
338
+ process.exit(1);
339
+ });
340
+
341
+ // 終了時のクリーンアップ
342
+ child.on('exit', (code) => {
343
+ console.log('');
344
+ console.log(`🔵 BlueLamp セッション終了 (スロット${SLOT_NUMBER})`);
345
+
346
+ // 一時ファイルをクリーンアップ
347
+ try {
348
+ fs.unlinkSync(tempConfigPath);
349
+ fs.unlinkSync(tempPromptPath);
350
+ } catch (e) {
351
+ // ignore cleanup errors
352
+ }
353
+
354
+ process.exit(code || 0);
355
+ });
356
+
357
+ // SIGINT (Ctrl+C) ハンドリング
358
+ process.on('SIGINT', () => {
359
+ console.log(`\n🔵 BlueLamp を終了しています... (スロット${SLOT_NUMBER})`);
360
+ child.kill('SIGINT');
361
+ });
362
+ }
363
+
364
+ // メイン処理の実行
365
+ main().catch((error) => {
366
+ console.error('❌ 予期しないエラーが発生しました:', error.message);
367
+ process.exit(1);
368
+ });