yamatovision 1.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.
- package/README.md +14 -0
- package/bin/bluelamp-vscode-base +325 -0
- package/bin/bluelamp1 +2 -0
- package/bin/bluelamp10 +2 -0
- package/bin/bluelamp100 +2 -0
- package/bin/bluelamp11 +2 -0
- package/bin/bluelamp12 +2 -0
- package/bin/bluelamp13 +2 -0
- package/bin/bluelamp14 +2 -0
- package/bin/bluelamp15 +2 -0
- package/bin/bluelamp16 +2 -0
- package/bin/bluelamp17 +2 -0
- package/bin/bluelamp18 +2 -0
- package/bin/bluelamp19 +2 -0
- package/bin/bluelamp2 +2 -0
- package/bin/bluelamp20 +2 -0
- package/bin/bluelamp21 +2 -0
- package/bin/bluelamp22 +2 -0
- package/bin/bluelamp23 +2 -0
- package/bin/bluelamp24 +2 -0
- package/bin/bluelamp25 +2 -0
- package/bin/bluelamp26 +2 -0
- package/bin/bluelamp27 +2 -0
- package/bin/bluelamp28 +2 -0
- package/bin/bluelamp29 +2 -0
- package/bin/bluelamp3 +2 -0
- package/bin/bluelamp30 +2 -0
- package/bin/bluelamp31 +2 -0
- package/bin/bluelamp32 +2 -0
- package/bin/bluelamp33 +2 -0
- package/bin/bluelamp34 +2 -0
- package/bin/bluelamp35 +2 -0
- package/bin/bluelamp36 +2 -0
- package/bin/bluelamp37 +2 -0
- package/bin/bluelamp38 +2 -0
- package/bin/bluelamp39 +2 -0
- package/bin/bluelamp4 +2 -0
- package/bin/bluelamp40 +2 -0
- package/bin/bluelamp41 +2 -0
- package/bin/bluelamp42 +2 -0
- package/bin/bluelamp43 +2 -0
- package/bin/bluelamp44 +2 -0
- package/bin/bluelamp45 +2 -0
- package/bin/bluelamp46 +2 -0
- package/bin/bluelamp47 +2 -0
- package/bin/bluelamp48 +2 -0
- package/bin/bluelamp49 +2 -0
- package/bin/bluelamp5 +2 -0
- package/bin/bluelamp50 +2 -0
- package/bin/bluelamp51 +2 -0
- package/bin/bluelamp52 +2 -0
- package/bin/bluelamp53 +2 -0
- package/bin/bluelamp54 +2 -0
- package/bin/bluelamp55 +2 -0
- package/bin/bluelamp56 +2 -0
- package/bin/bluelamp57 +2 -0
- package/bin/bluelamp58 +2 -0
- package/bin/bluelamp59 +2 -0
- package/bin/bluelamp6 +2 -0
- package/bin/bluelamp60 +2 -0
- package/bin/bluelamp61 +2 -0
- package/bin/bluelamp62 +2 -0
- package/bin/bluelamp63 +2 -0
- package/bin/bluelamp64 +2 -0
- package/bin/bluelamp65 +2 -0
- package/bin/bluelamp66 +2 -0
- package/bin/bluelamp67 +2 -0
- package/bin/bluelamp68 +2 -0
- package/bin/bluelamp69 +2 -0
- package/bin/bluelamp7 +2 -0
- package/bin/bluelamp70 +2 -0
- package/bin/bluelamp71 +2 -0
- package/bin/bluelamp72 +2 -0
- package/bin/bluelamp73 +2 -0
- package/bin/bluelamp74 +2 -0
- package/bin/bluelamp75 +2 -0
- package/bin/bluelamp76 +2 -0
- package/bin/bluelamp77 +2 -0
- package/bin/bluelamp78 +2 -0
- package/bin/bluelamp79 +2 -0
- package/bin/bluelamp8 +2 -0
- package/bin/bluelamp80 +2 -0
- package/bin/bluelamp81 +2 -0
- package/bin/bluelamp82 +2 -0
- package/bin/bluelamp83 +2 -0
- package/bin/bluelamp84 +2 -0
- package/bin/bluelamp85 +2 -0
- package/bin/bluelamp86 +2 -0
- package/bin/bluelamp87 +2 -0
- package/bin/bluelamp88 +2 -0
- package/bin/bluelamp89 +2 -0
- package/bin/bluelamp9 +2 -0
- package/bin/bluelamp90 +2 -0
- package/bin/bluelamp91 +2 -0
- package/bin/bluelamp92 +2 -0
- package/bin/bluelamp93 +2 -0
- package/bin/bluelamp94 +2 -0
- package/bin/bluelamp95 +2 -0
- package/bin/bluelamp96 +2 -0
- package/bin/bluelamp97 +2 -0
- package/bin/bluelamp98 +2 -0
- package/bin/bluelamp99 +2 -0
- package/bin/musuhi1 +2 -0
- package/bin/musuhi10 +2 -0
- package/bin/musuhi100 +2 -0
- package/bin/musuhi11 +2 -0
- package/bin/musuhi12 +2 -0
- package/bin/musuhi13 +2 -0
- package/bin/musuhi14 +2 -0
- package/bin/musuhi15 +2 -0
- package/bin/musuhi16 +2 -0
- package/bin/musuhi17 +2 -0
- package/bin/musuhi18 +2 -0
- package/bin/musuhi19 +2 -0
- package/bin/musuhi2 +2 -0
- package/bin/musuhi20 +2 -0
- package/bin/musuhi21 +2 -0
- package/bin/musuhi22 +2 -0
- package/bin/musuhi23 +2 -0
- package/bin/musuhi24 +2 -0
- package/bin/musuhi25 +2 -0
- package/bin/musuhi26 +2 -0
- package/bin/musuhi27 +2 -0
- package/bin/musuhi28 +2 -0
- package/bin/musuhi29 +2 -0
- package/bin/musuhi3 +2 -0
- package/bin/musuhi30 +2 -0
- package/bin/musuhi31 +2 -0
- package/bin/musuhi32 +2 -0
- package/bin/musuhi33 +2 -0
- package/bin/musuhi34 +2 -0
- package/bin/musuhi35 +2 -0
- package/bin/musuhi36 +2 -0
- package/bin/musuhi37 +2 -0
- package/bin/musuhi38 +2 -0
- package/bin/musuhi39 +2 -0
- package/bin/musuhi4 +2 -0
- package/bin/musuhi40 +2 -0
- package/bin/musuhi41 +2 -0
- package/bin/musuhi42 +2 -0
- package/bin/musuhi43 +2 -0
- package/bin/musuhi44 +2 -0
- package/bin/musuhi45 +2 -0
- package/bin/musuhi46 +2 -0
- package/bin/musuhi47 +2 -0
- package/bin/musuhi48 +2 -0
- package/bin/musuhi49 +2 -0
- package/bin/musuhi5 +2 -0
- package/bin/musuhi50 +2 -0
- package/bin/musuhi51 +2 -0
- package/bin/musuhi52 +2 -0
- package/bin/musuhi53 +2 -0
- package/bin/musuhi54 +2 -0
- package/bin/musuhi55 +2 -0
- package/bin/musuhi56 +2 -0
- package/bin/musuhi57 +2 -0
- package/bin/musuhi58 +2 -0
- package/bin/musuhi59 +2 -0
- package/bin/musuhi6 +2 -0
- package/bin/musuhi60 +2 -0
- package/bin/musuhi61 +2 -0
- package/bin/musuhi62 +2 -0
- package/bin/musuhi63 +2 -0
- package/bin/musuhi64 +2 -0
- package/bin/musuhi65 +2 -0
- package/bin/musuhi66 +2 -0
- package/bin/musuhi67 +2 -0
- package/bin/musuhi68 +2 -0
- package/bin/musuhi69 +2 -0
- package/bin/musuhi7 +2 -0
- package/bin/musuhi70 +2 -0
- package/bin/musuhi71 +2 -0
- package/bin/musuhi72 +2 -0
- package/bin/musuhi73 +2 -0
- package/bin/musuhi74 +2 -0
- package/bin/musuhi75 +2 -0
- package/bin/musuhi76 +2 -0
- package/bin/musuhi77 +2 -0
- package/bin/musuhi78 +2 -0
- package/bin/musuhi79 +2 -0
- package/bin/musuhi8 +2 -0
- package/bin/musuhi80 +2 -0
- package/bin/musuhi81 +2 -0
- package/bin/musuhi82 +2 -0
- package/bin/musuhi83 +2 -0
- package/bin/musuhi84 +2 -0
- package/bin/musuhi85 +2 -0
- package/bin/musuhi86 +2 -0
- package/bin/musuhi87 +2 -0
- package/bin/musuhi88 +2 -0
- package/bin/musuhi89 +2 -0
- package/bin/musuhi9 +2 -0
- package/bin/musuhi90 +2 -0
- package/bin/musuhi91 +2 -0
- package/bin/musuhi92 +2 -0
- package/bin/musuhi93 +2 -0
- package/bin/musuhi94 +2 -0
- package/bin/musuhi95 +2 -0
- package/bin/musuhi96 +2 -0
- package/bin/musuhi97 +2 -0
- package/bin/musuhi98 +2 -0
- package/bin/musuhi99 +2 -0
- package/lib/agents//343/203/226/343/203/253/343/203/274/343/203/251/343/203/263/343/203/227.md +106 -0
- package/lib/auth/InteractiveLogin.js +253 -0
- package/lib/auth/PortalAuthClient.js +184 -0
- package/lib/auth/TokenManager.js +260 -0
- package/lib/i18n/en.json +136 -0
- package/lib/i18n/index.js +75 -0
- package/lib/i18n/ja.json +136 -0
- package/lib/mcp-server/index.cjs +536 -0
- package/lib/mcp-server/portal-api-client.cjs +586 -0
- package/lib/utils/logger.js +83 -0
- package/package.json +155 -0
- package/scripts/build.js +348 -0
- package/scripts/generate-commands.js +45 -0
- package/scripts/playwright-launch.js +141 -0
- package/scripts/setup-playwright.js +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* BlueLamp VSCode MCP Integration
|
|
5
|
+
* Base script for VSCode extension prompt injection
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { spawn } = require('child_process');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const fs = require('fs');
|
|
11
|
+
const os = require('os');
|
|
12
|
+
|
|
13
|
+
// パッケージのルートディレクトリを取得
|
|
14
|
+
const packageRoot = path.dirname(__dirname);
|
|
15
|
+
|
|
16
|
+
// .envファイルを読み込み(.env.localを優先)
|
|
17
|
+
const dotenvLocalPath = path.join(packageRoot, '.env.local');
|
|
18
|
+
const dotenvPath = path.join(packageRoot, '.env');
|
|
19
|
+
|
|
20
|
+
if (fs.existsSync(dotenvLocalPath)) {
|
|
21
|
+
require('dotenv').config({ path: dotenvLocalPath });
|
|
22
|
+
} else if (fs.existsSync(dotenvPath)) {
|
|
23
|
+
require('dotenv').config({ path: dotenvPath });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// i18n(環境変数がまだない段階ではデフォルトja)
|
|
27
|
+
const { t, setLanguage, getLanguage } = require('../lib/i18n');
|
|
28
|
+
|
|
29
|
+
// デフォルトのコマンドマッピング(18個のプロンプト - フォールバック用)
|
|
30
|
+
// ユーザーがスロット設定をしていない場合に使用
|
|
31
|
+
const DEFAULT_PROMPT_MAPPING = {
|
|
32
|
+
'bluelamp1': '@要件定義', // Phase @1: 要件定義エンジニア
|
|
33
|
+
'bluelamp2': '@Git管理', // Phase @2: Git/GitHub管理
|
|
34
|
+
'bluelamp3': '@フロントエンド基盤', // Phase @3: フロントエンド基盤オーケストレーター
|
|
35
|
+
'bluelamp4': '@ページ実装オーケストレーター', // Phase @4: ページ実装統括
|
|
36
|
+
'bluelamp5': '@環境構築オーケストレーター', // Phase @5: 環境構築
|
|
37
|
+
'bluelamp6': '@バックエンド計画オーケストレーター', // Phase @6: バックエンド実装計画
|
|
38
|
+
'bluelamp7': '@バックエンド実装オーケストレーター', // Phase @7: バックエンド実装統括
|
|
39
|
+
'bluelamp8': '@フロントエンド実装オーケストレーター', // Phase @8: API統合統括
|
|
40
|
+
'bluelamp9': '@E2Eテストオーケストレーター', // Phase @9: E2Eテスト統括
|
|
41
|
+
'bluelamp10': '@本番運用診断オーケストレーター', // Phase @10: CVSS 3.1準拠本番運用診断
|
|
42
|
+
'bluelamp11': '@デプロイオーケストレーター', // Phase @11: デプロイメント統括
|
|
43
|
+
'bluelamp12': '@拡張要件定義', // Tools @12: 拡張要件定義オーケストレーター
|
|
44
|
+
'bluelamp13': '@拡張機能実装', // Tools @13: 拡張機能実装オーケストレーター
|
|
45
|
+
'bluelamp14': '@デバッグ技術', // Tools @14: 自己完結型デバッグマスター
|
|
46
|
+
'bluelamp15': '@リファクタリング', // Tools @15: 超並列リファクタリング
|
|
47
|
+
'bluelamp16': '@ドキュメント生成', // Tools @16: ドキュメント生成統括
|
|
48
|
+
'bluelamp17': '@相談', // Tools @17: 相談対応
|
|
49
|
+
'bluelamp18': '@MCP追加' // Tools @18: MCP追加エージェント
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* コマンド名からスロット番号を抽出
|
|
54
|
+
* @returns {{ commandName: string, slotNumber: number | null }}
|
|
55
|
+
*/
|
|
56
|
+
function getSlotInfoFromCommand() {
|
|
57
|
+
const commandPath = process.argv[1];
|
|
58
|
+
const commandName = path.basename(commandPath);
|
|
59
|
+
|
|
60
|
+
// bluelamp1〜100 からスロット番号を抽出
|
|
61
|
+
const match = commandName.match(/^bluelamp(\d+)$/);
|
|
62
|
+
if (match) {
|
|
63
|
+
const slotNumber = parseInt(match[1]);
|
|
64
|
+
if (slotNumber >= 1 && slotNumber <= 100) {
|
|
65
|
+
return { commandName, slotNumber };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// bluelamp-vscode1〜100 からもスロット番号を抽出(互換性)
|
|
70
|
+
const vscodeMatch = commandName.match(/^bluelamp-vscode(\d+)$/);
|
|
71
|
+
if (vscodeMatch) {
|
|
72
|
+
const slotNumber = parseInt(vscodeMatch[1]);
|
|
73
|
+
if (slotNumber >= 1 && slotNumber <= 100) {
|
|
74
|
+
return { commandName, slotNumber };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// マッピングに存在するかチェック(フォールバック)
|
|
79
|
+
if (DEFAULT_PROMPT_MAPPING[commandName]) {
|
|
80
|
+
return { commandName, slotNumber: null };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
console.error(`❌ ${t('base.undefinedCommand', { commandName })}`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* スロット設定からキーワードを取得(Portal API経由)
|
|
89
|
+
* 設定がなければデフォルトのPROMPT_MAPPINGを使用
|
|
90
|
+
*
|
|
91
|
+
* @param {number} slotNumber - スロット番号
|
|
92
|
+
* @param {string} commandName - コマンド名
|
|
93
|
+
* @param {string} token - CLI認証トークン
|
|
94
|
+
* @returns {Promise<string>} キーワード
|
|
95
|
+
*/
|
|
96
|
+
async function getKeywordForSlot(slotNumber, commandName, token) {
|
|
97
|
+
// スロット番号がない場合はデフォルトを使用
|
|
98
|
+
if (!slotNumber) {
|
|
99
|
+
return DEFAULT_PROMPT_MAPPING[commandName];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
// Portal APIからスロット設定を取得
|
|
104
|
+
const { getSlotConfig } = require('../lib/mcp-server/portal-api-client.cjs');
|
|
105
|
+
const customKeyword = await getSlotConfig(slotNumber, token);
|
|
106
|
+
|
|
107
|
+
if (customKeyword) {
|
|
108
|
+
console.log(`📌 ${t('base.customSlotConfig', { slotNumber, keyword: customKeyword })}`);
|
|
109
|
+
return customKeyword;
|
|
110
|
+
}
|
|
111
|
+
} catch (error) {
|
|
112
|
+
// エラー時はデフォルトにフォールバック(静かに失敗)
|
|
113
|
+
console.log(`⚠️ ${t('base.slotConfigError', { error: error.message })}`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// フォールバック: デフォルトのマッピングを使用
|
|
117
|
+
return DEFAULT_PROMPT_MAPPING[commandName];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* MCPサーバー設定を作成
|
|
122
|
+
*/
|
|
123
|
+
function createMCPConfig(keyword, cliToken, language) {
|
|
124
|
+
const mcpServerPath = path.join(packageRoot, 'lib/mcp-server/index.cjs');
|
|
125
|
+
const tempConfigPath = path.join(os.tmpdir(), `bluelamp-mcp-${Date.now()}.json`);
|
|
126
|
+
|
|
127
|
+
// .env.localからPORTAL_URLを取得(デフォルトは本番)
|
|
128
|
+
const portalUrl = process.env.PORTAL_URL || "https://musuhi-portal-235426778039.asia-northeast1.run.app";
|
|
129
|
+
|
|
130
|
+
const config = {
|
|
131
|
+
mcpServers: {
|
|
132
|
+
"bluelamp": {
|
|
133
|
+
command: "node",
|
|
134
|
+
args: [mcpServerPath],
|
|
135
|
+
env: {
|
|
136
|
+
BLUELAMP_KEYWORD: keyword,
|
|
137
|
+
BLUELAMP_TOKEN: cliToken,
|
|
138
|
+
BLUELAMP_LANGUAGE: language,
|
|
139
|
+
PORTAL_URL: portalUrl
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
fs.writeFileSync(tempConfigPath, JSON.stringify(config, null, 2));
|
|
146
|
+
return tempConfigPath;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Portal認証の実行(BlueLamp VSCode独自の認証システム)
|
|
151
|
+
* @returns {Promise<{token: string, language: string}>}
|
|
152
|
+
*/
|
|
153
|
+
async function performPortalAuth() {
|
|
154
|
+
try {
|
|
155
|
+
// BlueLamp VSCode用の認証モジュールを使用
|
|
156
|
+
const { InteractiveLogin } = require('../lib/auth/InteractiveLogin');
|
|
157
|
+
|
|
158
|
+
const authResult = await InteractiveLogin.performLogin();
|
|
159
|
+
|
|
160
|
+
// 認証結果からユーザー言語を取得(Phase 3: i18n対応)
|
|
161
|
+
const userLanguage = authResult.user?.language || 'ja';
|
|
162
|
+
setLanguage(userLanguage);
|
|
163
|
+
|
|
164
|
+
InteractiveLogin.displayLoginSuccess(authResult);
|
|
165
|
+
|
|
166
|
+
return { token: authResult.token, language: userLanguage };
|
|
167
|
+
|
|
168
|
+
} catch (error) {
|
|
169
|
+
console.error(`❌ ${t('auth.portalAuthError', { error: error.message })}`);
|
|
170
|
+
console.error('');
|
|
171
|
+
console.error(`${t('auth.portalAuthHelpTitle')}`);
|
|
172
|
+
console.error(`${t('auth.portalAuthHelp1')}`);
|
|
173
|
+
console.error(`${t('auth.portalAuthHelp2')}`);
|
|
174
|
+
console.error(`${t('auth.portalAuthHelp3', { url: 'https://musuhi-portal-235426778039.asia-northeast1.run.app' })}`);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* メイン処理
|
|
181
|
+
*/
|
|
182
|
+
async function main() {
|
|
183
|
+
// コマンドからスロット情報を取得
|
|
184
|
+
const { commandName, slotNumber } = getSlotInfoFromCommand();
|
|
185
|
+
|
|
186
|
+
// --debugフラグの確認
|
|
187
|
+
const isDebugMode = process.argv.includes('--debug');
|
|
188
|
+
|
|
189
|
+
console.log(`🔵 ${t('base.brandTitle')}`);
|
|
190
|
+
console.log(`📦 ${t('base.commandInfo', { commandName, slotInfo: slotNumber ? ` (slot ${slotNumber})` : '' })}`);
|
|
191
|
+
if (isDebugMode) {
|
|
192
|
+
console.log(`🐛 ${t('base.debugMode')}`);
|
|
193
|
+
console.log(` ${t('base.logFile', { path: path.join(os.tmpdir(), 'bluelamp-vscode-mcp-latest.log') })}`);
|
|
194
|
+
}
|
|
195
|
+
console.log('');
|
|
196
|
+
|
|
197
|
+
// Portal認証の実行(ユーザー言語を取得)
|
|
198
|
+
const { token: cliToken, language } = await performPortalAuth();
|
|
199
|
+
|
|
200
|
+
// スロット設定からキーワードを取得(認証後に実行)
|
|
201
|
+
const keyword = await getKeywordForSlot(slotNumber, commandName, cliToken);
|
|
202
|
+
console.log(`📚 ${t('base.promptInfo', { keyword })}`);
|
|
203
|
+
console.log('');
|
|
204
|
+
|
|
205
|
+
// MCP設定ファイルを作成(認証トークン + 言語を含む)
|
|
206
|
+
const configPath = createMCPConfig(keyword, cliToken, language);
|
|
207
|
+
|
|
208
|
+
// 初期プロンプトメッセージ(言語に応じて切り替え)
|
|
209
|
+
const initialPrompt = `> ${t('base.extendedMode')}
|
|
210
|
+
|
|
211
|
+
🔵 ${t('base.authActivated')}
|
|
212
|
+
|
|
213
|
+
\x1b[34m╭─────────────────────────────────────────────────────────────────╮\x1b[0m
|
|
214
|
+
\x1b[34m│ │\x1b[0m
|
|
215
|
+
\x1b[34m│ B l u e L a m p │\x1b[0m
|
|
216
|
+
\x1b[34m│ ───────────────── │\x1b[0m
|
|
217
|
+
\x1b[34m│ ${t('base.initialPromptTitle').padEnd(37)}│\x1b[0m
|
|
218
|
+
\x1b[34m│ │\x1b[0m
|
|
219
|
+
\x1b[34m╰─────────────────────────────────────────────────────────────────╯\x1b[0m
|
|
220
|
+
|
|
221
|
+
${t('base.initialPromptLoadContext', { keyword })}
|
|
222
|
+
|
|
223
|
+
${t('base.initialPromptKeywordNote', { keyword })}
|
|
224
|
+
|
|
225
|
+
${t('base.initialPromptReady', { keyword })}`;
|
|
226
|
+
|
|
227
|
+
// Claude を起動
|
|
228
|
+
console.log(`🚀 ${t('base.launchingClaude')}`);
|
|
229
|
+
console.log(` - ${t('base.mcpServer')}`);
|
|
230
|
+
console.log(` - ${t('base.knowledge', { keyword })}`);
|
|
231
|
+
console.log('');
|
|
232
|
+
|
|
233
|
+
// Windows対応: PowerShell経由でclaude.ps1を実行
|
|
234
|
+
const isWindows = process.platform === 'win32';
|
|
235
|
+
let claudeCommand, claudeArgs;
|
|
236
|
+
|
|
237
|
+
if (isWindows) {
|
|
238
|
+
// Windows: PowerShell経由でclaude.ps1を実行
|
|
239
|
+
claudeCommand = 'powershell.exe';
|
|
240
|
+
claudeArgs = [
|
|
241
|
+
'-NoProfile',
|
|
242
|
+
'-Command',
|
|
243
|
+
'claude',
|
|
244
|
+
initialPrompt,
|
|
245
|
+
'--dangerously-skip-permissions',
|
|
246
|
+
'--mcp-config', configPath
|
|
247
|
+
];
|
|
248
|
+
} else {
|
|
249
|
+
// Mac/Linux: 直接実行
|
|
250
|
+
claudeCommand = 'claude';
|
|
251
|
+
claudeArgs = [
|
|
252
|
+
initialPrompt,
|
|
253
|
+
'--dangerously-skip-permissions',
|
|
254
|
+
'--mcp-config', configPath
|
|
255
|
+
];
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// デバッグモードの場合、詳細情報を表示
|
|
259
|
+
if (isDebugMode) {
|
|
260
|
+
console.log(`🐛 ${t('base.debugInfo')}`);
|
|
261
|
+
console.log(` ${t('base.debugCommand', { command: claudeCommand })}`);
|
|
262
|
+
console.log(` ${t('base.debugArgs', { args: JSON.stringify(claudeArgs, null, 2) })}`);
|
|
263
|
+
console.log(` ${t('base.debugConfigFile', { path: configPath })}`);
|
|
264
|
+
console.log(` ${t('base.debugEnvKeyword', { keyword })}`);
|
|
265
|
+
console.log(` ${t('base.debugEnvToken', { token: cliToken.substring(0, 20) })}`);
|
|
266
|
+
console.log(` ${t('base.debugEnvPortal', { url: process.env.PORTAL_URL || 'https://musuhi-portal-235426778039.asia-northeast1.run.app' })}`);
|
|
267
|
+
console.log('');
|
|
268
|
+
|
|
269
|
+
// MCP設定ファイルの内容を表示
|
|
270
|
+
const configContent = fs.readFileSync(configPath, 'utf-8');
|
|
271
|
+
console.log(`📄 ${t('base.debugConfigContent')}`);
|
|
272
|
+
console.log(configContent);
|
|
273
|
+
console.log('');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const child = spawn(claudeCommand, claudeArgs, {
|
|
277
|
+
stdio: 'inherit',
|
|
278
|
+
env: {
|
|
279
|
+
...process.env,
|
|
280
|
+
BLUELAMP_VSCODE_KEYWORD: keyword,
|
|
281
|
+
BLUELAMP_LANGUAGE: language
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
// エラーハンドリング
|
|
286
|
+
child.on('error', (error) => {
|
|
287
|
+
console.error(`❌ ${t('base.claudeStartError', { error: error.message })}`);
|
|
288
|
+
|
|
289
|
+
// 一時ファイルをクリーンアップ
|
|
290
|
+
try {
|
|
291
|
+
fs.unlinkSync(configPath);
|
|
292
|
+
} catch (e) {
|
|
293
|
+
// ignore
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
process.exit(1);
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
// 終了時のクリーンアップ
|
|
300
|
+
child.on('exit', (code) => {
|
|
301
|
+
console.log('');
|
|
302
|
+
console.log(`🔵 ${t('base.sessionEnd')}`);
|
|
303
|
+
|
|
304
|
+
// 一時ファイルをクリーンアップ
|
|
305
|
+
try {
|
|
306
|
+
fs.unlinkSync(configPath);
|
|
307
|
+
} catch (e) {
|
|
308
|
+
// ignore
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
process.exit(code || 0);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
// SIGINT (Ctrl+C) ハンドリング
|
|
315
|
+
process.on('SIGINT', () => {
|
|
316
|
+
console.log(`\n🔵 ${t('base.shuttingDown')}`);
|
|
317
|
+
child.kill('SIGINT');
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// メイン処理の実行
|
|
322
|
+
main().catch((error) => {
|
|
323
|
+
console.error(`❌ ${t('base.unexpectedError', { error: error.message })}`);
|
|
324
|
+
process.exit(1);
|
|
325
|
+
});
|
package/bin/bluelamp1
ADDED
package/bin/bluelamp10
ADDED
package/bin/bluelamp100
ADDED
package/bin/bluelamp11
ADDED
package/bin/bluelamp12
ADDED
package/bin/bluelamp13
ADDED
package/bin/bluelamp14
ADDED
package/bin/bluelamp15
ADDED
package/bin/bluelamp16
ADDED
package/bin/bluelamp17
ADDED
package/bin/bluelamp18
ADDED
package/bin/bluelamp19
ADDED
package/bin/bluelamp2
ADDED
package/bin/bluelamp20
ADDED
package/bin/bluelamp21
ADDED
package/bin/bluelamp22
ADDED
package/bin/bluelamp23
ADDED
package/bin/bluelamp24
ADDED
package/bin/bluelamp25
ADDED
package/bin/bluelamp26
ADDED
package/bin/bluelamp27
ADDED
package/bin/bluelamp28
ADDED
package/bin/bluelamp29
ADDED
package/bin/bluelamp3
ADDED
package/bin/bluelamp30
ADDED
package/bin/bluelamp31
ADDED
package/bin/bluelamp32
ADDED
package/bin/bluelamp33
ADDED
package/bin/bluelamp34
ADDED
package/bin/bluelamp35
ADDED
package/bin/bluelamp36
ADDED
package/bin/bluelamp37
ADDED
package/bin/bluelamp38
ADDED
package/bin/bluelamp39
ADDED
package/bin/bluelamp4
ADDED
package/bin/bluelamp40
ADDED
package/bin/bluelamp41
ADDED
package/bin/bluelamp42
ADDED
package/bin/bluelamp43
ADDED
package/bin/bluelamp44
ADDED
package/bin/bluelamp45
ADDED
package/bin/bluelamp46
ADDED
package/bin/bluelamp47
ADDED
package/bin/bluelamp48
ADDED
package/bin/bluelamp49
ADDED
package/bin/bluelamp5
ADDED
package/bin/bluelamp50
ADDED
package/bin/bluelamp51
ADDED
package/bin/bluelamp52
ADDED
package/bin/bluelamp53
ADDED
package/bin/bluelamp54
ADDED
package/bin/bluelamp55
ADDED
package/bin/bluelamp56
ADDED
package/bin/bluelamp57
ADDED
package/bin/bluelamp58
ADDED
package/bin/bluelamp59
ADDED
package/bin/bluelamp6
ADDED
package/bin/bluelamp60
ADDED
package/bin/bluelamp61
ADDED
package/bin/bluelamp62
ADDED
package/bin/bluelamp63
ADDED
package/bin/bluelamp64
ADDED
package/bin/bluelamp65
ADDED
package/bin/bluelamp66
ADDED
package/bin/bluelamp67
ADDED
package/bin/bluelamp68
ADDED
package/bin/bluelamp69
ADDED
package/bin/bluelamp7
ADDED
package/bin/bluelamp70
ADDED
package/bin/bluelamp71
ADDED
package/bin/bluelamp72
ADDED