bizboost 6.4.10
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 +122 -0
- package/dist/auth/InteractiveLogin.d.ts +38 -0
- package/dist/auth/InteractiveLogin.d.ts.map +1 -0
- package/dist/auth/InteractiveLogin.js +1 -0
- package/dist/auth/InteractiveLogin.js.map +1 -0
- package/dist/auth/PortalAuthClient.d.ts +40 -0
- package/dist/auth/PortalAuthClient.d.ts.map +1 -0
- package/dist/auth/PortalAuthClient.js +1 -0
- package/dist/auth/PortalAuthClient.js.map +1 -0
- package/dist/auth/TokenManager.d.ts +46 -0
- package/dist/auth/TokenManager.d.ts.map +1 -0
- package/dist/auth/TokenManager.js +1 -0
- package/dist/auth/TokenManager.js.map +1 -0
- package/dist/bin/bizboost1.mjs +2 -0
- package/dist/bin/bizboost10.mjs +2 -0
- package/dist/bin/bizboost100.mjs +2 -0
- package/dist/bin/bizboost101.mjs +2 -0
- package/dist/bin/bizboost102.mjs +2 -0
- package/dist/bin/bizboost103.mjs +2 -0
- package/dist/bin/bizboost104.mjs +2 -0
- package/dist/bin/bizboost105.mjs +2 -0
- package/dist/bin/bizboost106.mjs +2 -0
- package/dist/bin/bizboost107.mjs +2 -0
- package/dist/bin/bizboost108.mjs +2 -0
- package/dist/bin/bizboost109.mjs +2 -0
- package/dist/bin/bizboost11.mjs +2 -0
- package/dist/bin/bizboost110.mjs +2 -0
- package/dist/bin/bizboost111.mjs +2 -0
- package/dist/bin/bizboost112.mjs +2 -0
- package/dist/bin/bizboost113.mjs +2 -0
- package/dist/bin/bizboost114.mjs +2 -0
- package/dist/bin/bizboost115.mjs +2 -0
- package/dist/bin/bizboost116.mjs +2 -0
- package/dist/bin/bizboost117.mjs +2 -0
- package/dist/bin/bizboost118.mjs +2 -0
- package/dist/bin/bizboost119.mjs +2 -0
- package/dist/bin/bizboost12.mjs +2 -0
- package/dist/bin/bizboost120.mjs +2 -0
- package/dist/bin/bizboost121.mjs +2 -0
- package/dist/bin/bizboost122.mjs +2 -0
- package/dist/bin/bizboost123.mjs +2 -0
- package/dist/bin/bizboost124.mjs +2 -0
- package/dist/bin/bizboost125.mjs +2 -0
- package/dist/bin/bizboost126.mjs +2 -0
- package/dist/bin/bizboost127.mjs +2 -0
- package/dist/bin/bizboost128.mjs +2 -0
- package/dist/bin/bizboost129.mjs +2 -0
- package/dist/bin/bizboost13.mjs +2 -0
- package/dist/bin/bizboost130.mjs +2 -0
- package/dist/bin/bizboost131.mjs +2 -0
- package/dist/bin/bizboost132.mjs +2 -0
- package/dist/bin/bizboost133.mjs +2 -0
- package/dist/bin/bizboost134.mjs +2 -0
- package/dist/bin/bizboost135.mjs +2 -0
- package/dist/bin/bizboost136.mjs +2 -0
- package/dist/bin/bizboost137.mjs +2 -0
- package/dist/bin/bizboost138.mjs +2 -0
- package/dist/bin/bizboost139.mjs +2 -0
- package/dist/bin/bizboost14.mjs +2 -0
- package/dist/bin/bizboost140.mjs +2 -0
- package/dist/bin/bizboost141.mjs +2 -0
- package/dist/bin/bizboost142.mjs +2 -0
- package/dist/bin/bizboost143.mjs +2 -0
- package/dist/bin/bizboost144.mjs +2 -0
- package/dist/bin/bizboost145.mjs +2 -0
- package/dist/bin/bizboost146.mjs +2 -0
- package/dist/bin/bizboost147.mjs +2 -0
- package/dist/bin/bizboost148.mjs +2 -0
- package/dist/bin/bizboost149.mjs +2 -0
- package/dist/bin/bizboost15.mjs +2 -0
- package/dist/bin/bizboost150.mjs +2 -0
- package/dist/bin/bizboost151.mjs +2 -0
- package/dist/bin/bizboost152.mjs +2 -0
- package/dist/bin/bizboost153.mjs +2 -0
- package/dist/bin/bizboost154.mjs +2 -0
- package/dist/bin/bizboost155.mjs +2 -0
- package/dist/bin/bizboost156.mjs +2 -0
- package/dist/bin/bizboost157.mjs +2 -0
- package/dist/bin/bizboost158.mjs +2 -0
- package/dist/bin/bizboost159.mjs +2 -0
- package/dist/bin/bizboost16.mjs +2 -0
- package/dist/bin/bizboost160.mjs +2 -0
- package/dist/bin/bizboost161.mjs +2 -0
- package/dist/bin/bizboost162.mjs +2 -0
- package/dist/bin/bizboost163.mjs +2 -0
- package/dist/bin/bizboost164.mjs +2 -0
- package/dist/bin/bizboost165.mjs +2 -0
- package/dist/bin/bizboost166.mjs +2 -0
- package/dist/bin/bizboost167.mjs +2 -0
- package/dist/bin/bizboost168.mjs +2 -0
- package/dist/bin/bizboost169.mjs +2 -0
- package/dist/bin/bizboost17.mjs +2 -0
- package/dist/bin/bizboost170.mjs +2 -0
- package/dist/bin/bizboost171.mjs +2 -0
- package/dist/bin/bizboost172.mjs +2 -0
- package/dist/bin/bizboost173.mjs +2 -0
- package/dist/bin/bizboost174.mjs +2 -0
- package/dist/bin/bizboost175.mjs +2 -0
- package/dist/bin/bizboost176.mjs +2 -0
- package/dist/bin/bizboost177.mjs +2 -0
- package/dist/bin/bizboost178.mjs +2 -0
- package/dist/bin/bizboost179.mjs +2 -0
- package/dist/bin/bizboost18.mjs +2 -0
- package/dist/bin/bizboost180.mjs +2 -0
- package/dist/bin/bizboost181.mjs +2 -0
- package/dist/bin/bizboost182.mjs +2 -0
- package/dist/bin/bizboost183.mjs +2 -0
- package/dist/bin/bizboost184.mjs +2 -0
- package/dist/bin/bizboost185.mjs +2 -0
- package/dist/bin/bizboost186.mjs +2 -0
- package/dist/bin/bizboost187.mjs +2 -0
- package/dist/bin/bizboost188.mjs +2 -0
- package/dist/bin/bizboost189.mjs +2 -0
- package/dist/bin/bizboost19.mjs +2 -0
- package/dist/bin/bizboost190.mjs +2 -0
- package/dist/bin/bizboost191.mjs +2 -0
- package/dist/bin/bizboost192.mjs +2 -0
- package/dist/bin/bizboost193.mjs +2 -0
- package/dist/bin/bizboost194.mjs +2 -0
- package/dist/bin/bizboost195.mjs +2 -0
- package/dist/bin/bizboost196.mjs +2 -0
- package/dist/bin/bizboost197.mjs +2 -0
- package/dist/bin/bizboost198.mjs +2 -0
- package/dist/bin/bizboost199.mjs +2 -0
- package/dist/bin/bizboost2.mjs +2 -0
- package/dist/bin/bizboost20.mjs +2 -0
- package/dist/bin/bizboost200.mjs +2 -0
- package/dist/bin/bizboost21.mjs +2 -0
- package/dist/bin/bizboost22.mjs +2 -0
- package/dist/bin/bizboost23.mjs +2 -0
- package/dist/bin/bizboost24.mjs +2 -0
- package/dist/bin/bizboost25.mjs +2 -0
- package/dist/bin/bizboost26.mjs +2 -0
- package/dist/bin/bizboost27.mjs +2 -0
- package/dist/bin/bizboost28.mjs +2 -0
- package/dist/bin/bizboost29.mjs +2 -0
- package/dist/bin/bizboost3.mjs +2 -0
- package/dist/bin/bizboost30.mjs +2 -0
- package/dist/bin/bizboost31.mjs +2 -0
- package/dist/bin/bizboost32.mjs +2 -0
- package/dist/bin/bizboost33.mjs +2 -0
- package/dist/bin/bizboost34.mjs +2 -0
- package/dist/bin/bizboost35.mjs +2 -0
- package/dist/bin/bizboost36.mjs +2 -0
- package/dist/bin/bizboost37.mjs +2 -0
- package/dist/bin/bizboost38.mjs +2 -0
- package/dist/bin/bizboost39.mjs +2 -0
- package/dist/bin/bizboost4.mjs +2 -0
- package/dist/bin/bizboost40.mjs +2 -0
- package/dist/bin/bizboost41.mjs +2 -0
- package/dist/bin/bizboost42.mjs +2 -0
- package/dist/bin/bizboost43.mjs +2 -0
- package/dist/bin/bizboost44.mjs +2 -0
- package/dist/bin/bizboost45.mjs +2 -0
- package/dist/bin/bizboost46.mjs +2 -0
- package/dist/bin/bizboost47.mjs +2 -0
- package/dist/bin/bizboost48.mjs +2 -0
- package/dist/bin/bizboost49.mjs +2 -0
- package/dist/bin/bizboost5.mjs +2 -0
- package/dist/bin/bizboost50.mjs +2 -0
- package/dist/bin/bizboost51.mjs +2 -0
- package/dist/bin/bizboost52.mjs +2 -0
- package/dist/bin/bizboost53.mjs +2 -0
- package/dist/bin/bizboost54.mjs +2 -0
- package/dist/bin/bizboost55.mjs +2 -0
- package/dist/bin/bizboost56.mjs +2 -0
- package/dist/bin/bizboost57.mjs +2 -0
- package/dist/bin/bizboost58.mjs +2 -0
- package/dist/bin/bizboost59.mjs +2 -0
- package/dist/bin/bizboost6.mjs +2 -0
- package/dist/bin/bizboost60.mjs +2 -0
- package/dist/bin/bizboost61.mjs +2 -0
- package/dist/bin/bizboost62.mjs +2 -0
- package/dist/bin/bizboost63.mjs +2 -0
- package/dist/bin/bizboost64.mjs +2 -0
- package/dist/bin/bizboost65.mjs +2 -0
- package/dist/bin/bizboost66.mjs +2 -0
- package/dist/bin/bizboost67.mjs +2 -0
- package/dist/bin/bizboost68.mjs +2 -0
- package/dist/bin/bizboost69.mjs +2 -0
- package/dist/bin/bizboost7.mjs +2 -0
- package/dist/bin/bizboost70.mjs +2 -0
- package/dist/bin/bizboost71.mjs +2 -0
- package/dist/bin/bizboost72.mjs +2 -0
- package/dist/bin/bizboost73.mjs +2 -0
- package/dist/bin/bizboost74.mjs +2 -0
- package/dist/bin/bizboost75.mjs +2 -0
- package/dist/bin/bizboost76.mjs +2 -0
- package/dist/bin/bizboost77.mjs +2 -0
- package/dist/bin/bizboost78.mjs +2 -0
- package/dist/bin/bizboost79.mjs +2 -0
- package/dist/bin/bizboost8.mjs +2 -0
- package/dist/bin/bizboost80.mjs +2 -0
- package/dist/bin/bizboost81.mjs +2 -0
- package/dist/bin/bizboost82.mjs +2 -0
- package/dist/bin/bizboost83.mjs +2 -0
- package/dist/bin/bizboost84.mjs +2 -0
- package/dist/bin/bizboost85.mjs +2 -0
- package/dist/bin/bizboost86.mjs +2 -0
- package/dist/bin/bizboost87.mjs +2 -0
- package/dist/bin/bizboost88.mjs +2 -0
- package/dist/bin/bizboost89.mjs +2 -0
- package/dist/bin/bizboost9.mjs +2 -0
- package/dist/bin/bizboost90.mjs +2 -0
- package/dist/bin/bizboost91.mjs +2 -0
- package/dist/bin/bizboost92.mjs +2 -0
- package/dist/bin/bizboost93.mjs +2 -0
- package/dist/bin/bizboost94.mjs +2 -0
- package/dist/bin/bizboost95.mjs +2 -0
- package/dist/bin/bizboost96.mjs +2 -0
- package/dist/bin/bizboost97.mjs +2 -0
- package/dist/bin/bizboost98.mjs +2 -0
- package/dist/bin/bizboost99.mjs +2 -0
- package/dist/bin/bluelamp-vscode-base.mjs +2 -0
- package/dist/i18n/en.d.ts +105 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +1 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +11 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/ja.d.ts +106 -0
- package/dist/i18n/ja.d.ts.map +1 -0
- package/dist/i18n/ja.js +1 -0
- package/dist/i18n/ja.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/account-mcp/index.cjs +2 -0
- package/dist/lib/mcp-server/index.cjs +2 -0
- package/dist/lib/mcp-server/portal-api-client.cjs +1 -0
- package/dist/scripts/generate-commands.js +2 -0
- package/dist/scripts/setup-mcps.js +2 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +46 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +258 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日本語メッセージカタログ。 旧 `bluelampportal/mcp/lib/i18n/ja.json` の TypeScript 版。
|
|
3
|
+
* JSON ESM import attribute の Node バージョン互換問題を避けるため `.ts` で持つ。
|
|
4
|
+
*/
|
|
5
|
+
export declare const ja: {
|
|
6
|
+
readonly base: {
|
|
7
|
+
readonly loadedEnvLocal: "Loaded .env.local";
|
|
8
|
+
readonly loadedEnv: "Loaded .env";
|
|
9
|
+
readonly undefinedCommand: "未定義のコマンド: {commandName}";
|
|
10
|
+
readonly customSlotConfig: "カスタムスロット設定: slot{slotNumber} → \"{keyword}\"";
|
|
11
|
+
readonly slotConfigError: "スロット設定取得エラー、デフォルトを使用: {error}";
|
|
12
|
+
readonly brandTitle: "B i z B o o s t";
|
|
13
|
+
readonly commandInfo: "コマンド: {commandName}{slotInfo}";
|
|
14
|
+
readonly debugMode: "デバッグモード: 有効";
|
|
15
|
+
readonly logFile: "ログファイル: {path}";
|
|
16
|
+
readonly promptInfo: "プロンプト: {keyword}";
|
|
17
|
+
readonly initialPromptTitle: "さあ始めましょう";
|
|
18
|
+
readonly initialPromptLoadContext: "このセッションではBizBoost MCPの参考資料 \"{keyword}\" が利用可能です。\nload_knowledge ツールで \"{keyword}\" を読み込んでから始めてください。";
|
|
19
|
+
readonly initialPromptKeywordNote: "MCPツールがまだ読み込まれていない場合は、少し待ってから再度お試しください。";
|
|
20
|
+
readonly initialPromptReady: "";
|
|
21
|
+
readonly launchingClaude: "Claude 起動中...";
|
|
22
|
+
readonly mcpServer: "MCP Server: BizBoost";
|
|
23
|
+
readonly knowledge: "Knowledge: {keyword}";
|
|
24
|
+
readonly debugInfo: "デバッグ情報:";
|
|
25
|
+
readonly debugCommand: "コマンド: {command}";
|
|
26
|
+
readonly debugArgs: "引数: {args}";
|
|
27
|
+
readonly debugConfigFile: "MCP設定ファイル: {path}";
|
|
28
|
+
readonly debugEnvKeyword: "環境変数 MUSUHI_KEYWORD: {keyword}";
|
|
29
|
+
readonly debugEnvToken: "CLI トークン (portal-token.enc): {token}...";
|
|
30
|
+
readonly debugEnvPortal: "環境変数 PORTAL_URL: {url}";
|
|
31
|
+
readonly debugConfigContent: "MCP設定ファイル内容:";
|
|
32
|
+
readonly claudeStartError: "Claude 起動エラー: {error}";
|
|
33
|
+
readonly sessionEnd: "BizBoost セッション終了";
|
|
34
|
+
readonly shuttingDown: "BizBoost を終了しています...";
|
|
35
|
+
readonly unexpectedError: "予期しないエラー: {error}";
|
|
36
|
+
readonly authActivated: "BizBoost に接続しました";
|
|
37
|
+
readonly extendedMode: "BizBoost に接続しました";
|
|
38
|
+
};
|
|
39
|
+
readonly auth: {
|
|
40
|
+
readonly portalAuthTitle: "BizBoost ─ 認証";
|
|
41
|
+
readonly checkingSavedToken: "保存されたトークンを確認中...";
|
|
42
|
+
readonly validationResult: "検証結果:";
|
|
43
|
+
readonly existingTokenValid: "既存のトークンが有効です";
|
|
44
|
+
readonly savedTokenInvalid: "保存されたトークンが無効です";
|
|
45
|
+
readonly enterCredentials: "Portalログイン情報を入力してください";
|
|
46
|
+
readonly invalidEmail: "無効なメールアドレス形式です";
|
|
47
|
+
readonly emptyPassword: "パスワードが入力されていません";
|
|
48
|
+
readonly kiLimitExceeded: "ナレッジインジェクション使用回数が上限に達しています";
|
|
49
|
+
readonly kiLimitCheckPortal: "Portalで使用状況を確認してください";
|
|
50
|
+
readonly authError: "認証エラー: {error}";
|
|
51
|
+
readonly savingToken: "トークンを保存中...";
|
|
52
|
+
readonly tokenSaveFailed: "トークン保存に失敗しました(認証は成功)";
|
|
53
|
+
readonly tokenSaved: "トークンを安全に保存しました";
|
|
54
|
+
readonly unexpectedError: "予期しないエラー: {error}";
|
|
55
|
+
readonly authSuccess: "Portal認証成功";
|
|
56
|
+
readonly userLabel: "ユーザー: {name}";
|
|
57
|
+
readonly emailLabel: "Email: {email}";
|
|
58
|
+
readonly roleLabel: "ロール: {role}";
|
|
59
|
+
readonly usingCachedToken: "保存済みトークンを使用";
|
|
60
|
+
readonly firstLoginComplete: "初回ログイン完了";
|
|
61
|
+
readonly logoutTitle: "BizBoost - ログアウト";
|
|
62
|
+
readonly confirmLogout: "ログイン情報を削除しますか? (y/N): ";
|
|
63
|
+
readonly logoutSuccess: "ログイン情報を削除しました";
|
|
64
|
+
readonly logoutNotFound: "ログイン情報が見つかりません";
|
|
65
|
+
readonly logoutCancelled: "キャンセルしました";
|
|
66
|
+
readonly envUpdateFailed: "envファイルの更新に失敗: {error}";
|
|
67
|
+
readonly authAttempt: "認証試行 {attempt}/{max}...";
|
|
68
|
+
readonly authOk: "Portal認証成功";
|
|
69
|
+
readonly tokenOk: "トークン取得成功";
|
|
70
|
+
readonly authRetry: "{delay}ms後にリトライ...";
|
|
71
|
+
readonly portalAuthError: "Portal認証エラー: {error}";
|
|
72
|
+
readonly portalAuthHelp1: "1. インターネット接続を確認してください";
|
|
73
|
+
readonly portalAuthHelp2: "2. Portal認証情報が正しいか確認してください";
|
|
74
|
+
readonly portalAuthHelp3: "3. {url} にアクセスできるか確認してください";
|
|
75
|
+
readonly portalAuthHelpTitle: "解決方法:";
|
|
76
|
+
readonly tokenSaveComplete: "トークン保存完了";
|
|
77
|
+
readonly tokenSaveError: "トークン保存エラー: {error}";
|
|
78
|
+
readonly tokenLoadError: "トークン読み込みエラー: {error}";
|
|
79
|
+
readonly tokenDeleteError: "トークン削除エラー: {error}";
|
|
80
|
+
readonly invalidTokenFormat: "CLI形式トークンのみサポートされています(CLI_xxx形式)";
|
|
81
|
+
readonly networkError: "ネットワークエラー: {error}";
|
|
82
|
+
readonly requestTimeout: "リクエストタイムアウト";
|
|
83
|
+
readonly responseParseError: "レスポンス解析エラー: {error}";
|
|
84
|
+
};
|
|
85
|
+
readonly mcp: {
|
|
86
|
+
readonly toolDescriptionLoadKnowledge: "プロジェクトの参考資料を取得します";
|
|
87
|
+
readonly keywordDescription: "キーワード(@相談 など、そのまま指定してください。プレフィックスの追加は不要です)";
|
|
88
|
+
readonly knowledgeLoadSuccess: "BizBoost 専門コンテキスト読み込み完了";
|
|
89
|
+
readonly knowledgeApplied: "参考情報の読み込みが完了しました。上記の内容を参考にしてご支援ください。";
|
|
90
|
+
readonly knowledgeNotFound: "キーワード \"{keyword}\" に対応する知識が見つかりませんでした";
|
|
91
|
+
readonly knowledgeLoadError: "知識の読み込み中にエラーが発生しました: {error}";
|
|
92
|
+
readonly promptNotFoundForKeyword: "キーワード \"{keyword}\" に対応するプロンプトが見つかりませんでした";
|
|
93
|
+
readonly apiReturnedError: "APIがエラーを返しました";
|
|
94
|
+
readonly portalApiError: "Portal APIエラー (HTTP {status})";
|
|
95
|
+
readonly portalApiFailed: "Portal APIから知識を取得できませんでした: {error}";
|
|
96
|
+
readonly portalCommunicationError: "Portal API通信エラー: {error}";
|
|
97
|
+
readonly noAuthToken: "認証トークンが設定されていません。bluelamp login コマンドでログインしてください。";
|
|
98
|
+
readonly listMcpsFailed: "MCP一覧の取得に失敗しました: {error}";
|
|
99
|
+
readonly getMcpInfoFailed: "MCP情報の取得に失敗しました: {error}";
|
|
100
|
+
readonly callToolFailed: "ツール実行に失敗しました: {error}";
|
|
101
|
+
readonly violationNoToken: "認証トークンが設定されていません";
|
|
102
|
+
readonly violationApiError: "違反報告エラー (HTTP {status})";
|
|
103
|
+
readonly violationCommunicationError: "違反報告通信エラー: {error}";
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=ja.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../src/i18n/ja.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGL,CAAC"}
|
package/dist/i18n/ja.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ja=void 0,exports.ja={base:{loadedEnvLocal:"Loaded .env.local",loadedEnv:"Loaded .env",undefinedCommand:"未定義のコマンド: {commandName}",customSlotConfig:'カスタムスロット設定: slot{slotNumber} → "{keyword}"',slotConfigError:"スロット設定取得エラー、デフォルトを使用: {error}",brandTitle:"B i z B o o s t",commandInfo:"コマンド: {commandName}{slotInfo}",debugMode:"デバッグモード: 有効",logFile:"ログファイル: {path}",promptInfo:"プロンプト: {keyword}",initialPromptTitle:"さあ始めましょう",initialPromptLoadContext:'このセッションではBizBoost MCPの参考資料 "{keyword}" が利用可能です。\nload_knowledge ツールで "{keyword}" を読み込んでから始めてください。',initialPromptKeywordNote:"MCPツールがまだ読み込まれていない場合は、少し待ってから再度お試しください。",initialPromptReady:"",launchingClaude:"Claude 起動中...",mcpServer:"MCP Server: BizBoost",knowledge:"Knowledge: {keyword}",debugInfo:"デバッグ情報:",debugCommand:"コマンド: {command}",debugArgs:"引数: {args}",debugConfigFile:"MCP設定ファイル: {path}",debugEnvKeyword:"環境変数 MUSUHI_KEYWORD: {keyword}",debugEnvToken:"CLI トークン (portal-token.enc): {token}...",debugEnvPortal:"環境変数 PORTAL_URL: {url}",debugConfigContent:"MCP設定ファイル内容:",claudeStartError:"Claude 起動エラー: {error}",sessionEnd:"BizBoost セッション終了",shuttingDown:"BizBoost を終了しています...",unexpectedError:"予期しないエラー: {error}",authActivated:"BizBoost に接続しました",extendedMode:"BizBoost に接続しました"},auth:{portalAuthTitle:"BizBoost ─ 認証",checkingSavedToken:"保存されたトークンを確認中...",validationResult:"検証結果:",existingTokenValid:"既存のトークンが有効です",savedTokenInvalid:"保存されたトークンが無効です",enterCredentials:"Portalログイン情報を入力してください",invalidEmail:"無効なメールアドレス形式です",emptyPassword:"パスワードが入力されていません",kiLimitExceeded:"ナレッジインジェクション使用回数が上限に達しています",kiLimitCheckPortal:"Portalで使用状況を確認してください",authError:"認証エラー: {error}",savingToken:"トークンを保存中...",tokenSaveFailed:"トークン保存に失敗しました(認証は成功)",tokenSaved:"トークンを安全に保存しました",unexpectedError:"予期しないエラー: {error}",authSuccess:"Portal認証成功",userLabel:"ユーザー: {name}",emailLabel:"Email: {email}",roleLabel:"ロール: {role}",usingCachedToken:"保存済みトークンを使用",firstLoginComplete:"初回ログイン完了",logoutTitle:"BizBoost - ログアウト",confirmLogout:"ログイン情報を削除しますか? (y/N): ",logoutSuccess:"ログイン情報を削除しました",logoutNotFound:"ログイン情報が見つかりません",logoutCancelled:"キャンセルしました",envUpdateFailed:"envファイルの更新に失敗: {error}",authAttempt:"認証試行 {attempt}/{max}...",authOk:"Portal認証成功",tokenOk:"トークン取得成功",authRetry:"{delay}ms後にリトライ...",portalAuthError:"Portal認証エラー: {error}",portalAuthHelp1:"1. インターネット接続を確認してください",portalAuthHelp2:"2. Portal認証情報が正しいか確認してください",portalAuthHelp3:"3. {url} にアクセスできるか確認してください",portalAuthHelpTitle:"解決方法:",tokenSaveComplete:"トークン保存完了",tokenSaveError:"トークン保存エラー: {error}",tokenLoadError:"トークン読み込みエラー: {error}",tokenDeleteError:"トークン削除エラー: {error}",invalidTokenFormat:"CLI形式トークンのみサポートされています(CLI_xxx形式)",networkError:"ネットワークエラー: {error}",requestTimeout:"リクエストタイムアウト",responseParseError:"レスポンス解析エラー: {error}"},mcp:{toolDescriptionLoadKnowledge:"プロジェクトの参考資料を取得します",keywordDescription:"キーワード(@相談 など、そのまま指定してください。プレフィックスの追加は不要です)",knowledgeLoadSuccess:"BizBoost 専門コンテキスト読み込み完了",knowledgeApplied:"参考情報の読み込みが完了しました。上記の内容を参考にしてご支援ください。",knowledgeNotFound:'キーワード "{keyword}" に対応する知識が見つかりませんでした',knowledgeLoadError:"知識の読み込み中にエラーが発生しました: {error}",promptNotFoundForKeyword:'キーワード "{keyword}" に対応するプロンプトが見つかりませんでした',apiReturnedError:"APIがエラーを返しました",portalApiError:"Portal APIエラー (HTTP {status})",portalApiFailed:"Portal APIから知識を取得できませんでした: {error}",portalCommunicationError:"Portal API通信エラー: {error}",noAuthToken:"認証トークンが設定されていません。bluelamp login コマンドでログインしてください。",listMcpsFailed:"MCP一覧の取得に失敗しました: {error}",getMcpInfoFailed:"MCP情報の取得に失敗しました: {error}",callToolFailed:"ツール実行に失敗しました: {error}",violationNoToken:"認証トークンが設定されていません",violationApiError:"違反報告エラー (HTTP {status})",violationCommunicationError:"違反報告通信エラー: {error}"}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ja.js","sourceRoot":"","sources":["../../src/i18n/ja.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,EAAE,GAAG;IAChB,IAAI,EAAE;QACJ,cAAc,EAAE,mBAAmB;QACnC,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,yBAAyB;QAC3C,gBAAgB,EAAE,4CAA4C;QAC9D,eAAe,EAAE,+BAA+B;QAChD,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,kBAAkB;QAC9B,kBAAkB,EAAE,UAAU;QAC9B,wBAAwB,EACtB,mGAAmG;QACrG,wBAAwB,EACtB,yCAAyC;QAC3C,kBAAkB,EAAE,EAAE;QACtB,eAAe,EAAE,eAAe;QAChC,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,SAAS;QACpB,YAAY,EAAE,iBAAiB;QAC/B,SAAS,EAAE,YAAY;QACvB,eAAe,EAAE,mBAAmB;QACpC,eAAe,EAAE,gCAAgC;QACjD,aAAa,EAAE,yCAAyC;QACxD,cAAc,EAAE,wBAAwB;QACxC,kBAAkB,EAAE,cAAc;QAClC,gBAAgB,EAAE,uBAAuB;QACzC,UAAU,EAAE,kBAAkB;QAC9B,YAAY,EAAE,sBAAsB;QACpC,eAAe,EAAE,mBAAmB;QACpC,aAAa,EAAE,kBAAkB;QACjC,YAAY,EAAE,kBAAkB;KACjC;IACD,IAAI,EAAE;QACJ,eAAe,EAAE,eAAe;QAChC,kBAAkB,EAAE,kBAAkB;QACtC,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,cAAc;QAClC,iBAAiB,EAAE,gBAAgB;QACnC,gBAAgB,EAAE,uBAAuB;QACzC,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,iBAAiB;QAChC,eAAe,EAAE,4BAA4B;QAC7C,kBAAkB,EAAE,sBAAsB;QAC1C,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,aAAa;QAC1B,eAAe,EAAE,sBAAsB;QACvC,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,mBAAmB;QACpC,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,aAAa;QAC/B,kBAAkB,EAAE,UAAU;QAC9B,WAAW,EAAE,kBAAkB;QAC/B,aAAa,EAAE,wBAAwB;QACvC,aAAa,EAAE,eAAe;QAC9B,cAAc,EAAE,gBAAgB;QAChC,eAAe,EAAE,WAAW;QAC5B,eAAe,EAAE,wBAAwB;QACzC,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,oBAAoB;QAC/B,eAAe,EAAE,sBAAsB;QACvC,eAAe,EAAE,uBAAuB;QACxC,eAAe,EAAE,4BAA4B;QAC7C,eAAe,EAAE,4BAA4B;QAC7C,mBAAmB,EAAE,OAAO;QAC5B,iBAAiB,EAAE,UAAU;QAC7B,cAAc,EAAE,oBAAoB;QACpC,cAAc,EAAE,sBAAsB;QACtC,gBAAgB,EAAE,oBAAoB;QACtC,kBAAkB,EAAE,kCAAkC;QACtD,YAAY,EAAE,oBAAoB;QAClC,cAAc,EAAE,aAAa;QAC7B,kBAAkB,EAAE,qBAAqB;KAC1C;IACD,GAAG,EAAE;QACH,4BAA4B,EAAE,mBAAmB;QACjD,kBAAkB,EAAE,4CAA4C;QAChE,oBAAoB,EAAE,yBAAyB;QAC/C,gBAAgB,EAAE,sCAAsC;QACxD,iBAAiB,EAAE,sCAAsC;QACzD,kBAAkB,EAAE,8BAA8B;QAClD,wBAAwB,EAAE,yCAAyC;QACnE,gBAAgB,EAAE,eAAe;QACjC,cAAc,EAAE,+BAA+B;QAC/C,eAAe,EAAE,oCAAoC;QACrD,wBAAwB,EAAE,0BAA0B;QACpD,WAAW,EAAE,kDAAkD;QAC/D,cAAc,EAAE,0BAA0B;QAC1C,gBAAgB,EAAE,0BAA0B;QAC5C,cAAc,EAAE,uBAAuB;QACvC,gBAAgB,EAAE,kBAAkB;QACpC,iBAAiB,EAAE,yBAAyB;QAC5C,2BAA2B,EAAE,oBAAoB;KAClD;CACO,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bluelamp-neo — barrel exports (auth / utils / i18n).
|
|
3
|
+
*/
|
|
4
|
+
export { PortalAuthClient } from './auth/PortalAuthClient.js';
|
|
5
|
+
export type { AuthResult, AuthSuccess, AuthFailure, AuthenticatedUser, DeviceInfo, } from './auth/PortalAuthClient.js';
|
|
6
|
+
export { TokenManager } from './auth/TokenManager.js';
|
|
7
|
+
export type { StoredTokenData, StoredUserInfo, ValidationResult, ValidationSuccess, ValidationFailure, } from './auth/TokenManager.js';
|
|
8
|
+
export { InteractiveLogin } from './auth/InteractiveLogin.js';
|
|
9
|
+
export type { LoginResult } from './auth/InteractiveLogin.js';
|
|
10
|
+
export { logger, LOG_LEVELS } from './utils/logger.js';
|
|
11
|
+
export type { LogLevel, Logger } from './utils/logger.js';
|
|
12
|
+
export { t, setLanguage, getLanguage } from './i18n/index.js';
|
|
13
|
+
export type { Language } from './i18n/index.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,UAAU,GACX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getLanguage=exports.setLanguage=exports.t=exports.LOG_LEVELS=exports.logger=exports.InteractiveLogin=exports.TokenManager=exports.PortalAuthClient=void 0;var PortalAuthClient_js_1=require("./auth/PortalAuthClient.js");Object.defineProperty(exports,"PortalAuthClient",{enumerable:!0,get:function(){return PortalAuthClient_js_1.PortalAuthClient}});var TokenManager_js_1=require("./auth/TokenManager.js");Object.defineProperty(exports,"TokenManager",{enumerable:!0,get:function(){return TokenManager_js_1.TokenManager}});var InteractiveLogin_js_1=require("./auth/InteractiveLogin.js");Object.defineProperty(exports,"InteractiveLogin",{enumerable:!0,get:function(){return InteractiveLogin_js_1.InteractiveLogin}});var logger_js_1=require("./utils/logger.js");Object.defineProperty(exports,"logger",{enumerable:!0,get:function(){return logger_js_1.logger}}),Object.defineProperty(exports,"LOG_LEVELS",{enumerable:!0,get:function(){return logger_js_1.LOG_LEVELS}});var index_js_1=require("./i18n/index.js");Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return index_js_1.t}}),Object.defineProperty(exports,"setLanguage",{enumerable:!0,get:function(){return index_js_1.setLanguage}}),Object.defineProperty(exports,"getLanguage",{enumerable:!0,get:function(){return index_js_1.getLanguage}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,kEAA8D;AAArD,uHAAA,gBAAgB,OAAA;AASzB,0DAAsD;AAA7C,+GAAA,YAAY,OAAA;AASrB,kEAA8D;AAArD,uHAAA,gBAAgB,OAAA;AAGzB,+CAAuD;AAA9C,mGAAA,MAAM,OAAA;AAAE,uGAAA,UAAU,OAAA;AAG3B,4CAA8D;AAArD,6FAAA,CAAC,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,uGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const{Server:Server}=require("@modelcontextprotocol/sdk/server/index.js"),{StdioServerTransport:StdioServerTransport}=require("@modelcontextprotocol/sdk/server/stdio.js"),{CallToolRequestSchema:CallToolRequestSchema,ListToolsRequestSchema:ListToolsRequestSchema}=require("@modelcontextprotocol/sdk/types.js"),{execSync:execSync}=require("child_process"),fs=require("fs"),os=require("os"),path=require("path");let TokenManager=null;try{({TokenManager:TokenManager}=require("../../auth/TokenManager"))}catch{TokenManager=null}const FALLBACK_TOKEN_PATH=path.join(os.homedir(),".musuhi","portal-token.enc"),TOOLS=[{name:"logout",description:"BlueLamp からログアウトします。ローカルの認証トークン(~/.musuhi/portal-token.enc)を削除するだけで、サーバー側のデータには触れません。別アカウントへ切り替えたいときもこれを使います。実行後に bluelamp1〜200 のいずれかを起動し直すとログイン画面が出るので、新しいアカウントでログインしてください。",inputSchema:{type:"object",properties:{}}},{name:"update_cli",description:"BlueLamp CLI を最新版に更新します(npm install -g bluelamp@latest を実行)。更新後は bluelamp1〜200 を起動し直すと新しい版が使われます。",inputSchema:{type:"object",properties:{}}}];function text(e,t){const n={content:[{type:"text",text:e}]};return t&&(n.isError=!0),n}function tail(e,t){return String(e||"").trim().split("\n").slice(-t).join("\n")}async function handleLogout(){try{let e=!1;return TokenManager&&"function"==typeof TokenManager.deleteToken?e=await TokenManager.deleteToken():fs.existsSync(FALLBACK_TOKEN_PATH)&&(fs.unlinkSync(FALLBACK_TOKEN_PATH),e=!0),text(e?"✅ ログアウトしました(ローカルの認証トークンを削除)。\n次に bluelamp1〜200 のいずれかを起動するとログイン画面が出ます。\n別アカウントに切り替えたい場合は、そのまま新しいメール/パスワードでログインしてください。":"ℹ️ すでにログアウト済みです(認証トークンは見つかりませんでした)。")}catch(e){return text(`Error: ログアウトに失敗しました: ${e&&e.message?e.message:e}`,!0)}}function handleUpdateCli(){try{return text("✅ BlueLamp CLI を更新しました(npm install -g bluelamp@latest)。\n次に bluelamp1〜200 を起動し直すと新しい版が使われます。\n\n"+tail(execSync("npm install -g bluelamp@latest",{encoding:"utf8",stdio:["ignore","pipe","pipe"]}),5))}catch(e){return text("Error: CLI 更新に失敗しました。手動で `npm install -g bluelamp@latest` を実行してください。\n"+tail(e&&(e.stderr||e.message)?e.stderr||e.message:String(e),5),!0)}}async function main(){const e=new Server({name:"bluelamp-account",version:"1.0.0"},{capabilities:{tools:{}}});e.setRequestHandler(ListToolsRequestSchema,async()=>({tools:TOOLS})),e.setRequestHandler(CallToolRequestSchema,async e=>{const t=e.params&&e.params.name;return"logout"===t?handleLogout():"update_cli"===t?handleUpdateCli():text(`Error: unknown tool: ${t}`,!0)});const t=new StdioServerTransport;await e.connect(t),console.error("[bluelamp-account] account-mcp connected (logout / update_cli)")}main().catch(e=>{console.error("[bluelamp-account] startup failed:",e&&e.stack?e.stack:e),process.exit(1)});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const{Server:Server}=require("@modelcontextprotocol/sdk/server/index.js"),{StdioServerTransport:StdioServerTransport}=require("@modelcontextprotocol/sdk/server/stdio.js"),{CallToolRequestSchema:CallToolRequestSchema,ListToolsRequestSchema:ListToolsRequestSchema}=require("@modelcontextprotocol/sdk/types.js"),{getPromptFromPortal:getPromptFromPortal,listAvailableMcps:listAvailableMcps,downloadMcpPackage:downloadMcpPackage,getGatewayConfig:getGatewayConfig,searchMcpServices:searchMcpServices,installMcpService:installMcpService,setServiceAlwaysOn:setServiceAlwaysOn,uninstallMcpService:uninstallMcpService,updateMcpEnv:updateMcpEnv,callMcpToolProxy:callMcpToolProxy}=require("./portal-api-client.cjs"),{logger:logger}=require("../../utils/logger"),{t:t,setLanguage:setLanguage}=require("../../i18n"),{spawn:spawn}=require("child_process"),path=require("path"),fs=require("fs"),os=require("os"),dotenvLocalPath=path.join(__dirname,"../../.env.local"),dotenvPath=path.join(__dirname,"../../.env");fs.existsSync(dotenvLocalPath)?(require("dotenv").config({path:dotenvLocalPath}),logger.debug("[MCP Server] Loaded .env.local")):fs.existsSync(dotenvPath)&&(require("dotenv").config({path:dotenvPath}),logger.debug("[MCP Server] Loaded .env"));const KEYWORD=process.env.MUSUHI_KEYWORD||"BL-要件定義",{TokenManager:TokenManager}=require("../../auth/TokenManager"),TOKEN=TokenManager.loadTokenStringSync(),PORTAL_URL_ENV=process.env.BLUELAMP_PORTAL_API_BASE_URL||process.env.PORTAL_URL||"",isDevEnv=PORTAL_URL_ENV.includes("localhost"),PORTAL_URL=PORTAL_URL_ENV||(isDevEnv?"http://localhost:8430/api/bluelamp":"https://api.motohi.jp/api/bluelamp"),LANGUAGE=process.env.MUSUHI_LANGUAGE||"ja";setLanguage(LANGUAGE);const LOG_DIR=path.join(os.homedir(),".bluelamp-vscode","logs"),LOG_FILE=path.join(LOG_DIR,"mcp.log");function log(e){const t=`[${(new Date).toISOString()}] ${e}\n`;fs.appendFileSync(LOG_FILE,t),logger.info(`[MCP Server] ${e}`)}fs.existsSync(LOG_DIR)||fs.mkdirSync(LOG_DIR,{recursive:!0}),log(`MCP Server started - Log file: ${LOG_FILE}`),log("Environment variables:"),log(` KEYWORD: ${KEYWORD}`),log(" TOKEN: "+(TOKEN?TOKEN.substring(0,20)+"...":"NOT SET")),log(` PORTAL_URL: ${PORTAL_URL}`),log(` LANGUAGE: ${LANGUAGE}`);const LEGACY_REGISTRY=path.join(os.homedir(),".bluelamp","registry.json");if(fs.existsSync(LEGACY_REGISTRY))try{fs.unlinkSync(LEGACY_REGISTRY),log(`[startup] Legacy registry.json removed: ${LEGACY_REGISTRY}`)}catch(e){log(`[startup] Failed to remove legacy registry.json: ${e.message}`)}class ChildMcpProcess{constructor(e,t,r,s){this.serviceId=e,this.command=t,this.args=(r||[]).map(e=>"string"==typeof e?e.replace(/^~\//,os.homedir()+"/"):e),this.env={...process.env,...s},this.process=null,this.tools=[],this.requestId=0,this.pending=new Map,this.buffer=""}async start(){return new Promise((e,t)=>{const r=setTimeout(()=>{t(new Error(`Timeout: "${this.serviceId}" failed to start within 30s`)),this.stop()},3e4);try{this.process=spawn(this.command,this.args,{env:this.env,stdio:["pipe","pipe","pipe"]}),this.process.on("error",e=>{clearTimeout(r),t(new Error(`Spawn error for "${this.serviceId}": ${e.message}`))}),this.process.on("exit",(e,t)=>{log(`[ChildMcp] "${this.serviceId}" exited (code=${e}, signal=${t})`),this.pending.forEach(e=>e.reject(new Error("Process exited"))),this.pending.clear()}),this.process.stderr.on("data",e=>{log(`[ChildMcp:${this.serviceId}:stderr] ${e.toString().trim()}`)}),this.process.stdout.on("data",e=>{this.buffer+=e.toString(),this._processBuffer()}),this._sendRequest("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"bluelamp-gateway",version:"1.0.0"}}).then(e=>(log(`[ChildMcp] "${this.serviceId}" initialized: ${JSON.stringify(e.serverInfo||{})}`),this._sendNotification("notifications/initialized",{}),this._sendRequest("tools/list",{}))).then(t=>{const s=t.tools||[];this.tools=s.map(e=>({...e,name:`${this.serviceId}__${e.name}`,_originalName:e.name})),log(`[ChildMcp] "${this.serviceId}" ready: ${this.tools.length} tools`),clearTimeout(r),e(this.tools)}).catch(e=>{clearTimeout(r),t(e)})}catch(e){clearTimeout(r),t(e)}})}async callTool(e,t){return await this._sendRequest("tools/call",{name:e,arguments:t})}stop(){this.process&&(this.process.kill(),this.process=null),this.pending.forEach(e=>e.reject(new Error("Process stopped"))),this.pending.clear()}_sendRequest(e,t){return new Promise((r,s)=>{const o=++this.requestId,n=JSON.stringify({jsonrpc:"2.0",id:o,method:e,params:t})+"\n";this.pending.set(o,{resolve:r,reject:s});try{this.process.stdin.write(n)}catch(e){this.pending.delete(o),s(new Error(`Write error: ${e.message}`))}})}_sendNotification(e,t){const r=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";try{this.process.stdin.write(r)}catch(e){log(`[ChildMcp] Notification write error: ${e.message}`)}}_processBuffer(){const e=this.buffer.split("\n");this.buffer=e.pop();for(const t of e){const e=t.trim();if(e)try{const t=JSON.parse(e);if(t.id&&this.pending.has(t.id)){const e=this.pending.get(t.id);this.pending.delete(t.id),t.error?e.reject(new Error(`JSON-RPC error: ${JSON.stringify(t.error)}`)):e.resolve(t.result)}}catch(t){log(`[ChildMcp:${this.serviceId}] Parse error: ${t.message} | line: ${e.substring(0,200)}`)}}}}class ChildMcpManager{constructor(){this.children=new Map}async activateExternal(e,t){const r=new ChildMcpProcess(e,t.command,t.args||[],t.env||{}),s=await r.start();return this.children.set(e,{type:"external",process:r,tools:s,service:t}),s}deactivate(e){const t=this.children.get(e);t&&("external"===t.type&&t.process&&t.process.stop(),this.children.delete(e))}isActive(e){return this.children.has(e)}getActiveTools(){const e=[];for(const t of this.children.values())e.push(...t.tools||[]);return e}async callTool(e,t){for(const[r,s]of this.children)if("external"===s.type){const r=s.tools.find(t=>t.name===e);if(r)return{found:!0,result:await s.process.callTool(r._originalName,t)}}return{found:!1}}getActiveServiceIds(){return[...this.children.keys()]}}class BlueLampServer{constructor(){this.childManager=new ChildMcpManager,this.server=new Server({name:"bluelamp",version:"2.0.0"},{capabilities:{tools:{listChanged:!0}}}),this.setupHandlers()}checkAuth(){return TOKEN?{ok:!0}:{ok:!1,error:"BlueLamp にログインしてください。ターミナルで `bluelamp1` を一度実行すると ~/.musuhi/portal-token.enc が作成されます。"}}buildToolList(){const e=[{name:"load_knowledge",description:t("mcp.toolDescriptionLoadKnowledge"),annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:{type:"object",properties:{keyword:{type:"string",description:t("mcp.keywordDescription")}},required:["keyword"]}},{name:"search_mcp",description:'キーワードでインストール済みMCPサービスを検索します。使いたい機能を自然言語で説明してください。(例: "ブラウザ操作", "メール送信", "画像生成")',inputSchema:{type:"object",properties:{query:{type:"string",description:"検索キーワード(自然言語OK)"}},required:["query"]}},{name:"activate_service",description:"MCPサービスを有効化してツールを追加します。search_mcpで見つけたservice_idを指定してください。always_on: trueで次回以降も自動的に有効化されます。",inputSchema:{type:"object",properties:{service_id:{type:"string",description:"サービスID"},always_on:{type:"boolean",description:"trueにすると常時アクティブ(毎回自動起動)になります"}},required:["service_id"]}},{name:"deactivate_service",description:"MCPサービスの常時アクティブ(alwaysOn)設定を解除します。次回起動時から自動有効化されなくなります。",inputSchema:{type:"object",properties:{service_id:{type:"string",description:"サービスID"}},required:["service_id"]}},{name:"restart_service",description:"MCPサービスのプロセスを再起動します。コード更新や設定変更の反映に使用します。",inputSchema:{type:"object",properties:{service_id:{type:"string",description:"サービスID"}},required:["service_id"]}},{name:"unregister_service",description:"MCPサービスをレジストリから完全に削除します。プロセスも停止します。",inputSchema:{type:"object",properties:{service_id:{type:"string",description:"削除するサービスID"}},required:["service_id"]}},{name:"register_service",description:"新しいMCPサービスをゲートウェイに登録します。",inputSchema:{type:"object",properties:{service_id:{type:"string",description:'サービスID(英数字、例: "microcms")'},name:{type:"string",description:"サービス表示名"},description:{type:"string",description:"サービスの説明"},tags:{type:"array",items:{type:"string"},description:"検索用タグ"},command:{type:"string",description:'実行コマンド("npx" or "node")'},args:{type:"array",items:{type:"string"},description:"コマンド引数"},env:{type:"object",description:"環境変数"}},required:["service_id","name","description","tags"]}},{name:"browse_mcp_store",description:"MCPストア(Portal)からインストール可能なMCP一覧を取得します。",inputSchema:{type:"object",properties:{category:{type:"string",description:"カテゴリでフィルタ(省略可)"}},required:[]}},{name:"install_from_store",description:"MCPストアからMCPをダウンロードしてインストールします。browse_mcp_storeで見つけたmcp_idを指定してください。",inputSchema:{type:"object",properties:{mcp_id:{type:"string",description:"インストールするMCPのID"}},required:["mcp_id"]}},{name:"save_mcp_env",description:"MCPの環境変数(APIキー等)をサーバーに安全に保存します。ローカルには保存されません。次回起動時にサーバーから自動取得されます。解約時はアクセスできなくなります。",inputSchema:{type:"object",properties:{service_id:{type:"string",description:"MCP サービスID(例: heygen, gemini-image)"},env:{type:"object",description:'環境変数のキーと値(例: {"HEYGEN_API_KEY": "sk_xxx"})',additionalProperties:{type:"string"}}},required:["service_id","env"]}}];if(e.push(...this.childManager.getActiveTools()),this._cloudProxyTools)for(const[t,r]of this._cloudProxyTools)e.push({name:t,description:r.description||`[${r.mcpId}] ${r.toolName}`,inputSchema:r.inputSchema||{type:"object",properties:{}}});return e}setupHandlers(){this.server.setRequestHandler(ListToolsRequestSchema,async()=>{const e=this.buildToolList(),t=this.childManager.getActiveServiceIds();return log(`[ListTools] ${e.length} tools (active: ${t.join(", ")||"none"})`),{tools:e}}),this.server.setRequestHandler(CallToolRequestSchema,async e=>{const{name:r,arguments:s}=e.params;if(log(`[CallTool] ${r}`),"load_knowledge"===r){const{keyword:e}=s;log(`[load_knowledge] keyword: ${e}`);try{const r=await getPromptFromPortal(e,TOKEN,LANGUAGE);if(!r||!r.success){const s=r?.error||t("mcp.knowledgeNotFound",{keyword:e});return{content:[{type:"text",text:`❌ ${t("mcp.portalApiFailed",{error:s})}`}],isError:!0}}const s="ja"!==LANGUAGE?"\n\n[Note] The user's preferred language is English.":"";return{content:[{type:"text",text:`✅ ${t("mcp.knowledgeLoadSuccess")}\n\n${r.knowledge}${s}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${t("mcp.knowledgeApplied")}`}]}}catch(e){return log(`[load_knowledge] Exception: ${e.message}`),{content:[{type:"text",text:`❌ ${t("mcp.knowledgeLoadError",{error:e.message})}`}],isError:!0}}}if("search_mcp"===r){const e=this.checkAuth();if(!e.ok)return{content:[{type:"text",text:`🔒 ${e.error}`}],isError:!0};if(!TOKEN)return{content:[{type:"text",text:"❌ 未認証です。MCPカタログの検索にはログインが必要です。"}],isError:!0};let t=[];try{const e=await searchMcpServices(s.query,TOKEN);if(!e.success)return{content:[{type:"text",text:`❌ MCPカタログ検索に失敗: ${e.error||"Unknown"}`}],isError:!0};t=(e.data||[]).map(e=>({id:e.mcp_id,service:{name:e.name,description:e.description,tags:[],alwaysOn:e.alwaysOn||!1},isInstalled:e.isInstalled||!1}))}catch(e){return log(`[search_mcp] Server search failed: ${e.message}`),{content:[{type:"text",text:`❌ MCPカタログ検索に失敗: ${e.message}`}],isError:!0}}if(0===t.length)return{content:[{type:"text",text:`🔍 「${s.query}」に一致するサービスはありません。\n\n別のキーワードで試すか、browse_mcp_storeでカタログを確認してください。`}]};let r=`🔍 「${s.query}」の検索結果(${t.length}件)\n\n`;for(const e of t.slice(0,10)){const t=e.id,s=e.service,o=this.childManager.isActive(t),n=s.alwaysOn,i=e.isInstalled?"":" [未インストール]",c=n?" [常時アクティブ]":"";r+=`${n?"🔒":o?"🟢":"⚪"} **${s.name}**${c}${i} (id: \`${t}\`)\n`,r+=` ${s.description}\n\n`}return r+="有効化: activate_service | インストール: install_from_store",{content:[{type:"text",text:r}]}}if("activate_service"===r){const e=this.checkAuth();if(!e.ok)return{content:[{type:"text",text:`🔒 ${e.error}`}],isError:!0};const{service_id:t,always_on:r}=s,o=await getGatewayConfig(TOKEN);if(!o.success)return{content:[{type:"text",text:`❌ サーバー設定の取得に失敗: ${o.error||"Unknown"}`}],isError:!0};const n=(o.data?.services||[]).find(e=>e.mcpId===t);if(!n)return{content:[{type:"text",text:`❌ サービス "${t}" はインストールされていません。install_from_storeでインストールしてください。`}],isError:!0};if(r&&(setServiceAlwaysOn(t,!0,TOKEN).catch(e=>log(`[activate] Server sync failed: ${e.message}`)),log(`[activate] "${t}" set alwaysOn: true`)),this.childManager.isActive(t))return{content:[{type:"text",text:`ℹ️ "${t}" は既に有効です。${r?"(常時アクティブに設定しました)":""}`}]};if("cloud_proxy"===n.hostingType){const e=Array.isArray(n.tools)?n.tools:[];if(0===e.length)return{content:[{type:"text",text:`❌ "${t}" (cloud_proxy) にツール定義がありません。`}],isError:!0};this._cloudProxyTools=this._cloudProxyTools||new Map;for(const r of e){const e=`${t}__${r.name}`;this._cloudProxyTools.set(e,{mcpId:t,toolName:r.name,description:r.description,inputSchema:r.inputSchema})}log(`[activate] "${t}" (cloud_proxy) → ${e.length} proxy tools registered`);try{await this.server.notification({method:"notifications/tools/list_changed"})}catch(e){log(`[activate] notification error: ${e.message}`)}const s=e.map(e=>`${t}__${e.name}`).join(", "),o=r?" 🔒常時アクティブ":"";return{content:[{type:"text",text:`✅ "${n.name}" を有効化しました${o}(cloud_proxy ツール${e.length}個追加)\n\n追加ツール: ${s}`}]}}const i=path.join(os.homedir(),".claude","mcp-servers",t),c=n.entryPoint||"dist/index.js",a={name:n.name,description:n.description,type:"external",command:n.command||"node",args:n.args&&n.args.length?n.args:[path.join(i,c)],env:n.env||{}};let l;try{l=await this.childManager.activateExternal(t,a)}catch(e){return log(`[activate] Failed "${t}": ${e.message}`),{content:[{type:"text",text:`❌ "${t}" の起動に失敗しました: ${e.message}`}],isError:!0}}const p=l.map(e=>e.name).join(", "),d=r?" 🔒常時アクティブ":"";log(`[activate] "${t}" → ${l.length} tools${r?" (alwaysOn)":""}. Sending list_changed.`);try{await this.server.notification({method:"notifications/tools/list_changed"})}catch(e){log(`[activate] notification error: ${e.message}`)}return{content:[{type:"text",text:`✅ "${a.name}" を有効化しました${d}(ツール${l.length}個追加)\n\n追加ツール: ${p||"(なし)"}`}]}}if("deactivate_service"===r){const{service_id:e}=s;if(!TOKEN)return{content:[{type:"text",text:"🔒 未認証です。ログインが必要です。"}],isError:!0};const t=await setServiceAlwaysOn(e,!1,TOKEN);if(!t.success)return{content:[{type:"text",text:`❌ "${e}" の解除に失敗: ${t.error||"Unknown"}`}],isError:!0};log(`[deactivate] "${e}" set alwaysOn: false`);let r=0;if(this._cloudProxyTools){const t=`${e}__`;for(const e of[...this._cloudProxyTools.keys()])e.startsWith(t)&&(this._cloudProxyTools.delete(e),r++);r>0&&log(`[deactivate] "${e}" (cloud_proxy) → ${r} proxy tools removed`)}let o=!1;if(this.childManager.isActive(e)&&(this.childManager.deactivate(e),log(`[deactivate] "${e}" child process stopped`),o=!0),r>0||o)try{await this.server.notification({method:"notifications/tools/list_changed"})}catch(e){log(`[deactivate] notification error: ${e.message}`)}let n=`✅ "${e}" の常時アクティブを解除しました。`;return r>0&&(n+=` cloud_proxy ツール${r}個を削除しました。`),o&&(n+=" 子プロセスを停止しました。"),n+=" 次回起動時から自動有効化されません。",{content:[{type:"text",text:n}]}}if("restart_service"===r){const{service_id:e}=s,t=this.childManager.children.get(e),r=t?.service;if(!r)return{content:[{type:"text",text:`❌ "${e}" は現在アクティブではありません。activate_service で有効化してください。`}],isError:!0};let o,n=r;if(TOKEN)try{const t=await getGatewayConfig(TOKEN);if(t.success){const s=(t.data?.services||[]).find(t=>t.mcpId===e);s&&s.env&&(n={...r,env:s.env},log(`[restart] "${e}" env refreshed from server (keys=${Object.keys(s.env).join(",")||"none"})`))}}catch(e){log(`[restart] env refresh failed (using cached): ${e.message}`)}this.childManager.deactivate(e),log(`[restart] "${e}" stopped`);try{o=await this.childManager.activateExternal(e,n)}catch(t){return log(`[restart] Failed "${e}": ${t.message}`),{content:[{type:"text",text:`❌ "${e}" の再起動に失敗しました: ${t.message}`}],isError:!0}}log(`[restart] "${e}" → ${o.length} tools. Sending list_changed.`);try{await this.server.notification({method:"notifications/tools/list_changed"})}catch(e){log(`[restart] notification error: ${e.message}`)}const i=o.map(e=>e.name).join(", ");return{content:[{type:"text",text:`🔄 "${n.name}" を再起動しました(ツール${o.length}個)\n\nツール: ${i||"(なし)"}`}]}}if("unregister_service"===r){const{service_id:e}=s;if(!TOKEN)return{content:[{type:"text",text:"🔒 未認証です。ログインが必要です。"}],isError:!0};this.childManager.isActive(e)&&(this.childManager.deactivate(e),log(`[unregister] "${e}" stopped`));const t=await uninstallMcpService(e,TOKEN);if(!t.success)return{content:[{type:"text",text:`❌ "${e}" のサーバー削除に失敗: ${t.error||"Unknown"}`}],isError:!0};log(`[unregister] "${e}" uninstalled from server`);try{await this.server.notification({method:"notifications/tools/list_changed"})}catch(e){log(`[unregister] notification error: ${e.message}`)}return{content:[{type:"text",text:`🗑️ "${e}" を削除しました。プロセスも停止済みです。`}]}}if("register_service"===r){const e=this.checkAuth();if(!e.ok)return{content:[{type:"text",text:`🔒 ${e.error}`}],isError:!0};const{service_id:t,env:r}=s;if(!TOKEN)return{content:[{type:"text",text:"🔒 未認証です。ログインが必要です。"}],isError:!0};const o=r||{},n=await installMcpService(t,!1,TOKEN,o);return n.success?(log(`[register] "${t}" installed on server`),{content:[{type:"text",text:`✅ サービス "${t}" をサーバーに登録しました。\n\n次のステップ:\n- save_mcp_env で APIキー等を設定\n- activate_service で有効化`}]}):{content:[{type:"text",text:`❌ "${t}" の登録に失敗しました: ${n.error||"Unknown"}\n\n※ MCP はサーバーカタログに登録されている必要があります。browse_mcp_store で確認してください。`}],isError:!0}}if("save_mcp_env"===r){const e=this.checkAuth();if(!e.ok)return{content:[{type:"text",text:`🔒 ${e.error}`}],isError:!0};const{service_id:t,env:r}=s;if(!t||!r||0===Object.keys(r).length)return{content:[{type:"text",text:"❌ service_id と env(キー/値のペア)が必要です"}],isError:!0};log(`[save_mcp_env] ${t}: ${Object.keys(r).join(", ")}`);try{const e=await updateMcpEnv(t,r,TOKEN);return e.success?{content:[{type:"text",text:`🔐 環境変数をサーバーに保存しました\n\nサービス: ${t}\n保存キー: ${Object.keys(r).join(", ")}\n\n※ ローカルには保存されません。次回起動時にサーバーから自動取得されます。`}]}:{content:[{type:"text",text:`❌ サーバー保存失敗: ${e.error}`}],isError:!0}}catch(e){return log(`[save_mcp_env] error: ${e.message}`),{content:[{type:"text",text:`❌ ${e.message}`}],isError:!0}}}if("browse_mcp_store"===r){const{category:e}=s||{};log(`[browse_mcp_store] category=${e||"all"}`);try{const t=e?{category:e}:{},r=await listAvailableMcps(t,TOKEN,LANGUAGE);if(!r||!r.success)return{content:[{type:"text",text:`❌ MCPカタログの取得に失敗: ${r?.error||"Unknown"}`}],isError:!0};const s=r.data||[];if(0===s.length)return{content:[{type:"text",text:"📦 インストール可能なMCPはありません。"}]};let o=`📦 MCPストア一覧 (${s.length}件)\n\n`;return s.forEach(e=>{const t=e.hasAccess?"✅":"🔒",r=e.isOfficial?" [公式]":"";o+=`${t} **${e.name}**${r}\n`,o+=` ID: ${e.mcpId}\n`,o+=` ${e.description}\n`,o+=` カテゴリ: ${e.category} | ツール数: ${e.toolCount}\n\n`}),o+='\nインストールするには: install_from_store(mcp_id: "MCP_ID")',{content:[{type:"text",text:o}]}}catch(e){return log(`[browse_mcp_store] error: ${e.message}`),{content:[{type:"text",text:`❌ ${e.message}`}],isError:!0}}}if("install_from_store"===r){const{mcp_id:e}=s;log(`[install_from_store] mcp_id=${e}`);try{const t=await downloadMcpPackage(e,TOKEN);if(!t||!t.success)return{content:[{type:"text",text:`❌ MCPダウンロードに失敗: ${t?.error||"Unknown"}`}],isError:!0};const r=t.data,s=r.packageSource||{},o=r.files||[];let n=s.hostingType||s.hosting&&s.hosting.type||null;if(TOKEN){let t=!1;try{const r=await getGatewayConfig(TOKEN);if(r.success){const s=(r.data?.services||[]).find(t=>t.mcpId===e);s&&(t=!0===s.alwaysOn,n||(n=s.hostingType))}}catch(e){}const r=await installMcpService(e,t,TOKEN);if(!r.success)return{content:[{type:"text",text:`❌ サーバー登録失敗: ${r.error||"Unknown"}`}],isError:!0};log(`[install_from_store] Server sync OK: ${e} (alwaysOn=${t})`)}if("cloud_proxy"===n){log(`[install_from_store] "${e}" is cloud_proxy, skipping local extract`);let t=`✅ MCP「${s.name||e}」をインストールしました(cloud_proxy)\n\n`;return t+="☁ クラウド実行のためローカル展開は不要です\n",s.installNotes&&(t+=`\n📝 ${s.installNotes}\n`),t+=`\nactivate_service(service_id: "${e}") で有効化できます。`,{content:[{type:"text",text:t}]}}if(0===o.length)return{content:[{type:"text",text:"❌ MCPパッケージにファイルが含まれていません。"}],isError:!0};const i=path.join(os.homedir(),".claude","mcp-servers",e);fs.mkdirSync(i,{recursive:!0});for(const e of o){const t=path.join(i,e.path);if(fs.mkdirSync(path.dirname(t),{recursive:!0}),fs.writeFileSync(t,e.content,"utf-8"),"number"==typeof e.mode)try{fs.chmodSync(t,511&e.mode)}catch(e){}}if(log(`[install_from_store] ${o.length} files written to ${i}`),s.needsNpmInstall&&fs.existsSync(path.join(i,"package.json"))){const{execSync:e}=require("child_process");try{e("npm install --production",{cwd:i,timeout:6e4,stdio:"pipe"})}catch(e){return{content:[{type:"text",text:`⚠️ ファイル展開完了、npm install失敗: ${e.message}`}]}}}let c=`✅ MCP「${s.name||e}」をインストールしました\n\n`;c+=`📁 インストール先: ${i}\n`,c+=`📄 ファイル数: ${o.length}\n`,s.installNotes&&(c+=`\n📝 ${s.installNotes}\n`);const a=(s.requiredEnvVars||[]).filter(e=>!process.env[e]);return a.length>0&&(c+="\n⚠️ 以下の環境変数を save_mcp_env で設定してください:\n",a.forEach(e=>{c+=` - ${e}\n`})),c+=`\nactivate_service(service_id: "${e}") で有効化できます。`,{content:[{type:"text",text:c}]}}catch(e){return log(`[install_from_store] error: ${e.message}`),{content:[{type:"text",text:`❌ ${e.message}`}],isError:!0}}}if(this._cloudProxyTools&&this._cloudProxyTools.has(r)){const e=this._cloudProxyTools.get(r);log(`[callTool] Cloud proxy: ${r} → ${e.mcpId}/${e.toolName}`);try{const t=await callMcpToolProxy(e.mcpId,e.toolName,s,TOKEN);return t.success&&t.data?t.data.content?t.data:{content:[{type:"text",text:JSON.stringify(t.data,null,2)}]}:{content:[{type:"text",text:`❌ プロキシエラー: ${t.error||"Unknown"}`}],isError:!0}}catch(e){return log(`[callTool] Cloud proxy error "${r}": ${e.message}`),{content:[{type:"text",text:`❌ クラウドプロキシエラー: ${e.message}`}],isError:!0}}}try{const{found:e,result:t}=await this.childManager.callTool(r,s);if(e)return t&&t.content?t:{content:[{type:"text",text:String(t)}]}}catch(e){return log(`[callTool] Error proxying "${r}": ${e.message}`),{content:[{type:"text",text:`❌ ツール実行エラー: ${e.message}`}],isError:!0}}return{content:[{type:"text",text:`❌ Unknown tool: ${r}`}],isError:!0}})}async autoActivate(){if(!TOKEN)return void log("[autoActivate] No token, skipping auto-activation");let e=[];try{const t=await getGatewayConfig(TOKEN);if(!t.success)return void log(`[autoActivate] Server config failed: ${t.error||"Unknown"}. Starting with no services.`);e=t.data?.services||[],log(`[autoActivate] Server config: ${e.length} services`)}catch(e){return void log(`[autoActivate] Server config error: ${e.message}. Starting with no services.`)}for(const t of e)if(t.alwaysOn)if("cloud_proxy"===t.hostingType){const e=Array.isArray(t.tools)?t.tools:[];if(0===e.length){log(`[autoActivate] "${t.mcpId}" (cloud_proxy) has no tools, skipping`);continue}for(const r of e){const e=`${t.mcpId}__${r.name}`;this._cloudProxyTools=this._cloudProxyTools||new Map,this._cloudProxyTools.set(e,{mcpId:t.mcpId,toolName:r.name,description:r.description,inputSchema:r.inputSchema})}log(`[autoActivate] "${t.mcpId}" (cloud_proxy) → ${e.length} proxy tools registered`)}else{const e=path.join(os.homedir(),".claude","mcp-servers",t.mcpId),r=t.entryPoint||"dist/index.js",s={name:t.name,description:t.description,type:"external",command:t.command||"node",args:t.args&&t.args.length?t.args:[path.join(e,r)],env:t.env||{}};log(`[autoActivate] Activating "${t.mcpId}" (${t.hostingType})...`);try{const e=await this.childManager.activateExternal(t.mcpId,s);log(`[autoActivate] "${t.mcpId}" ready: ${e.length} tools`)}catch(e){log(`[autoActivate] "${t.mcpId}" failed: ${e.message}`)}}}async run(){const e=new StdioServerTransport;if(await this.server.connect(e),log("[Gateway] BlueLamp Gateway v2.0.0 started."),await this.autoActivate(),this.childManager.getActiveServiceIds().length>0)try{await this.server.notification({method:"notifications/tools/list_changed"}),log("[Gateway] Initial list_changed sent after autoActivate.")}catch(e){log(`[Gateway] Initial list_changed error: ${e.message}`)}if(KEYWORD&&TOKEN){log(`[Gateway] Auto-loading knowledge for keyword: ${KEYWORD}`);const e=await getPromptFromPortal(KEYWORD,TOKEN,LANGUAGE);e&&e.success?log(`[Gateway] Auto-load successful: ${e.title}`):log(`[Gateway] Auto-load failed for keyword: ${KEYWORD}`)}}}const server=new BlueLampServer;let _blIsShuttingDown=!1;const _blCleanupChildren=e=>{if(!_blIsShuttingDown){_blIsShuttingDown=!0;try{log(`[Gateway] Shutdown (${e}) - cleaning up children...`)}catch(e){}if(server&&server.childManager&&server.childManager.children)for(const[e,t]of server.childManager.children)try{try{log(`[Gateway] Stopping child: ${e}`)}catch(e){}t&&"external"===t.type&&t.process&&"function"==typeof t.process.stop&&t.process.stop()}catch(e){}setTimeout(()=>process.exit(0),200).unref()}};process.on("SIGTERM",()=>_blCleanupChildren("SIGTERM")),process.on("SIGINT",()=>_blCleanupChildren("SIGINT")),process.on("SIGHUP",()=>_blCleanupChildren("SIGHUP")),process.stdin.on("end",()=>_blCleanupChildren("stdin-end")),process.stdin.on("close",()=>_blCleanupChildren("stdin-close")),process.on("exit",()=>{if(server&&server.childManager&&server.childManager.children)for(const[e,t]of server.childManager.children)try{t&&t.process&&t.process.process&&"function"==typeof t.process.process.kill&&t.process.process.kill("SIGKILL")}catch(e){}}),server.run().catch(e=>{log(`[Gateway] Fatal: ${e.message}`),process.exit(1)});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const fetch=(...t)=>import("node-fetch").then(({default:e})=>e(...t)),https=require("https"),fs=require("fs"),path=require("path"),os=require("os"),{logger:logger}=require("../../utils/logger"),{t:t}=require("../../i18n"),PORTAL_URL_ENV=process.env.BLUELAMP_PORTAL_API_BASE_URL||process.env.PORTAL_URL||"",isDevEnvironment=PORTAL_URL_ENV.includes("localhost"),httpsAgent=new https.Agent({rejectUnauthorized:!isDevEnvironment}),PORTAL_URL=PORTAL_URL_ENV||(isDevEnvironment?"http://localhost:8430/api/bluelamp":"https://api.motohi.jp/api/bluelamp"),LOG_DIR=path.join(os.homedir(),".bluelamp-vscode","logs"),LOG_FILE=path.join(LOG_DIR,"mcp.log");function log(t){const e=`[${(new Date).toISOString()}] ${t}\n`;fs.appendFileSync(LOG_FILE,e),logger.debug(t)}let _cliVersion;function getCliVersion(){if(void 0!==_cliVersion)return _cliVersion;let t=__dirname;for(let e=0;e<6;e++){try{const e=require(path.join(t,"package.json"));if(e&&"bluelamp"===e.name&&e.version)return _cliVersion=e.version,_cliVersion}catch(t){}const e=path.dirname(t);if(e===t)break;t=e}return _cliVersion=null,_cliVersion}async function getPromptFromPortal(e,o,r="ja"){try{if(log(`[portal-api-client] getPromptFromPortal called with keyword: ${e}, lang: ${r}, token: ${o?"present":"missing"}`),!o)return log("[portal-api-client] No authentication token provided"),{success:!1,error:t("mcp.noAuthToken")};const s=process.env.MUSUHI_TENANT_ID||"",a=encodeURIComponent(e);let n=`${PORTAL_URL}/cli/prompts/knowledge-injection/${a}?lang=${r}`;s&&(n+=`&tenant_id=${encodeURIComponent(s)}`),log(`[portal-api-client] Direct keyword search: ${n}`),log(`[portal-api-client] Token (first 30 chars): ${o.substring(0,30)}...`),log("[portal-api-client] About to call fetch...");const c=await fetch(n,{method:"GET",headers:{"X-CLI-Token":o,...getCliVersion()?{"X-CLI-Version":getCliVersion()}:{},...s?{"X-Tenant-ID":s}:{},"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:n.startsWith("https")?httpsAgent:void 0});if(log("[portal-api-client] Fetch completed"),log(`[portal-api-client] Response status: ${c.status}`),log(`[portal-api-client] Response headers: ${JSON.stringify(Object.fromEntries(c.headers.entries()))}`),!c.ok){log(`[portal-api-client] Portal API error: ${c.status}`);const e=await c.text();log(`[portal-api-client] Error response: ${e}`);let o=t("mcp.portalApiError",{status:c.status});try{const t=JSON.parse(e);t.message&&(o=t.message)}catch(t){}return{success:!1,error:o}}const i=await c.json();if(log("[portal-api-client] Direct keyword search completed successfully"),!i.success)return log("[portal-api-client] API returned success: false"),{success:!1,error:i.message||t("mcp.apiReturnedError")};const l=i.data;if(!l)return log(`[portal-api-client] No prompt found for keyword: ${e}`),{success:!1,error:t("mcp.promptNotFoundForKeyword",{keyword:e})};if(log(`[portal-api-client] Found prompt: ${l.title}`),l.content||l.text)return{success:!0,knowledge:l.content||l.text,title:l.title,tags:l.tags||[]};try{const t=`${PORTAL_URL}/cli/prompts/${l.id}`;log(`[portal-api-client] Fetching prompt details from: ${t}`);const e=await fetch(t,{method:"GET",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:httpsAgent});if(e.ok){const t=await e.json();if(t.success&&t.data?.prompt?.content)return log("[portal-api-client] Successfully fetched prompt content"),{success:!0,knowledge:t.data.prompt.content,title:l.title||l.name,tags:l.tags}}}catch(t){log(`[portal-api-client] Error fetching prompt details: ${t.message}`)}return{success:!0,knowledge:l.description||`# ${l.title}\n\n${t("mcp.knowledgeLoadError",{error:"detail fetch failed"})}`,title:l.title||l.name,tags:l.tags}}catch(e){return log(`[portal-api-client] FATAL ERROR in getPromptFromPortal: ${e.message}`),log(`[portal-api-client] Error stack: ${e.stack}`),logger.error(`Failed to get prompt from Portal: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function getSlotConfig(t,e){try{if(!e)return log("[portal-api-client] getSlotConfig: No token, returning null"),null;const o=process.env.MUSUHI_TENANT_ID||"",r=`${PORTAL_URL}/cli/slot-config/${t}`;log(`[portal-api-client] Fetching slot config: ${r}${o?` (tenant=${o})`:""}`);const s=await fetch(r,{method:"GET",headers:{"X-CLI-Token":e,...getCliVersion()?{"X-CLI-Version":getCliVersion()}:{},...o?{"X-Tenant-ID":o}:{},"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0});if(!s.ok)return log(`[portal-api-client] Slot config API error: ${s.status}, using default`),null;const a=await s.json();return a.success&&a.data?.keyword?(log(`[portal-api-client] Slot ${t}: custom keyword "${a.data.keyword}"`),a.data.keyword):(log(`[portal-api-client] Slot ${t}: no custom config, using default`),null)}catch(t){return log(`[portal-api-client] getSlotConfig error: ${t.message}, using default`),null}}async function reportViolation(e,o,r,s){try{if(log(`[portal-api-client] reportViolation called: severity=${o}`),!r)return{success:!1,error:t("mcp.violationNoToken")};const a=`${PORTAL_URL}/cli/report-violation`,n={reason:e,severity:o};s&&(n.userMessage=s);const c=await fetch(a,{method:"POST",headers:{"X-CLI-Token":r,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:a.startsWith("https")?httpsAgent:void 0,body:JSON.stringify(n)});if(!c.ok){const e=await c.text();return log(`[portal-api-client] reportViolation error: ${c.status} ${e}`),{success:!1,error:t("mcp.violationApiError",{status:c.status})}}const i=await c.json();return log(`[portal-api-client] reportViolation result: action=${i.action}, count=${i.violationCount}`),i}catch(e){return log(`[portal-api-client] reportViolation FATAL: ${e.message}`),{success:!1,error:t("mcp.violationCommunicationError",{error:e.message})}}}async function listAvailableMcps(e={},o,r="ja"){try{if(log(`[portal-api-client] listAvailableMcps called: ${JSON.stringify(e)}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const s=new URLSearchParams;e.category&&s.set("category",e.category),e.search&&s.set("search",e.search),e.limit&&s.set("limit",String(e.limit)),s.set("lang",r);const a=`${PORTAL_URL}/mcp/catalog?${s.toString()}`;log(`[portal-api-client] Fetching MCP catalog: ${a}`);const n=await fetch(a,{method:"GET",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:a.startsWith("https")?httpsAgent:void 0});if(!n.ok){const e=await n.text();log(`[portal-api-client] listAvailableMcps error: ${n.status} ${e}`);let o=t("mcp.listMcpsFailed",{error:`HTTP ${n.status}`});try{const t=JSON.parse(e);t.message&&(o=t.message)}catch(t){}return{success:!1,error:o}}const c=await n.json();return log(`[portal-api-client] listAvailableMcps: ${c.data?.length||0} MCPs found`),{success:!0,data:c.data||[]}}catch(e){return log(`[portal-api-client] listAvailableMcps FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function getMcpInfo(e,o,r="ja"){try{if(log(`[portal-api-client] getMcpInfo called: mcpId=${e}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const s=`${PORTAL_URL}/mcp/${encodeURIComponent(e)}/details?lang=${r}`;log(`[portal-api-client] Fetching MCP info: ${s}`);const a=await fetch(s,{method:"GET",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:s.startsWith("https")?httpsAgent:void 0});if(!a.ok){const e=await a.text();log(`[portal-api-client] getMcpInfo error: ${a.status} ${e}`);let o=t("mcp.getMcpInfoFailed",{error:`HTTP ${a.status}`});try{const t=JSON.parse(e);t.message&&(o=t.message)}catch(t){}return{success:!1,error:o}}const n=await a.json();return log(`[portal-api-client] getMcpInfo: found ${n.data?.name||e}`),{success:!0,data:n.data}}catch(e){return log(`[portal-api-client] getMcpInfo FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function callMcpTool(e,o,r,s){try{if(log(`[portal-api-client] callMcpTool called: mcpId=${e}, tool=${o}`),!s)return{success:!1,error:t("mcp.noAuthToken")};const a=`${PORTAL_URL}/mcp/${encodeURIComponent(e)}/call`,n={tool_name:o,arguments:r};log(`[portal-api-client] Calling MCP tool: ${a}`);const c=await fetch(a,{method:"POST",headers:{"X-CLI-Token":s,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:a.startsWith("https")?httpsAgent:void 0,body:JSON.stringify(n)});if(!c.ok){const e=await c.text();log(`[portal-api-client] callMcpTool error: ${c.status} ${e}`);let o=t("mcp.callToolFailed",{error:`HTTP ${c.status}`});try{const t=JSON.parse(e);t.message&&(o=t.message)}catch(t){}return{success:!1,error:o}}const i=await c.json();return log("[portal-api-client] callMcpTool: success"),{success:!0,data:i.data}}catch(e){return log(`[portal-api-client] callMcpTool FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function scanMcpCode(e,o){try{if(log("[portal-api-client] scanMcpCode called"),!o)return{success:!1,error:t("mcp.noAuthToken")};const r=`${PORTAL_URL}/mcp/scan`,s=await fetch(r,{method:"POST",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0,body:JSON.stringify({code:e})});if(!s.ok){const t=await s.text();return log(`[portal-api-client] scanMcpCode error: ${s.status} ${t}`),{success:!1,error:`HTTP ${s.status}`}}return{success:!0,data:(await s.json()).data}}catch(e){return log(`[portal-api-client] scanMcpCode FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function deployUserMcp(e,o){try{if(log(`[portal-api-client] deployUserMcp called: name=${e.name}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const r=`${PORTAL_URL}/mcp/deploy`,s=await fetch(r,{method:"POST",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0,body:JSON.stringify(e)});if(!s.ok){const t=await s.text();log(`[portal-api-client] deployUserMcp error: ${s.status} ${t}`);let e=`HTTP ${s.status}`;try{const o=JSON.parse(t);if(o.error&&(e=o.error),o.details)return{success:!1,error:e,details:o.details}}catch(t){}return{success:!1,error:e}}return{success:!0,data:(await s.json()).data}}catch(e){return log(`[portal-api-client] deployUserMcp FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function listUserCreatedMcps(e){try{if(log("[portal-api-client] listUserCreatedMcps called"),!e)return{success:!1,error:t("mcp.noAuthToken")};const o=`${PORTAL_URL}/mcp/user/me/created`,r=await fetch(o,{method:"GET",headers:{"X-CLI-Token":e,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:o.startsWith("https")?httpsAgent:void 0});return r.ok?{success:!0,data:(await r.json()).data}:(await r.text(),log(`[portal-api-client] listUserCreatedMcps error: ${r.status}`),{success:!1,error:`HTTP ${r.status}`})}catch(e){return log(`[portal-api-client] listUserCreatedMcps FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function deleteUserMcp(e,o){try{if(log(`[portal-api-client] deleteUserMcp called: mcpId=${e}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const r=`${PORTAL_URL}/mcp/${encodeURIComponent(e)}`,s=await fetch(r,{method:"DELETE",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0});if(!s.ok){const t=await s.text();log(`[portal-api-client] deleteUserMcp error: ${s.status}`);let e=`HTTP ${s.status}`;try{const o=JSON.parse(t);o.error&&(e=o.error)}catch(t){}return{success:!1,error:e}}return{success:!0,data:(await s.json()).data}}catch(e){return log(`[portal-api-client] deleteUserMcp FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function listMyPrompts(e){try{if(log("[portal-api-client] listMyPrompts called"),!e)return{success:!1,error:t("mcp.noAuthToken")};const o=`${PORTAL_URL}/cli/my-agents`,r=await fetch(o,{method:"GET",headers:{"X-CLI-Token":e,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:o.startsWith("https")?httpsAgent:void 0});return r.ok?{success:!0,data:(await r.json()).data||[]}:(await r.text(),log(`[portal-api-client] listMyPrompts error: ${r.status}`),{success:!1,error:`HTTP ${r.status}`})}catch(e){return log(`[portal-api-client] listMyPrompts FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function saveMyPrompt(e,o){try{if(log(`[portal-api-client] saveMyPrompt called: title=${e.title}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const r=`${PORTAL_URL}/cli/my-agents`,s=await fetch(r,{method:"POST",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0,body:JSON.stringify(e)});if(!s.ok){const t=await s.text();log(`[portal-api-client] saveMyPrompt error: ${s.status} ${t}`);let e=`HTTP ${s.status}`;try{const o=JSON.parse(t);o.message&&(e=o.message)}catch(t){}return{success:!1,error:e}}return{success:!0,data:(await s.json()).data}}catch(e){return log(`[portal-api-client] saveMyPrompt FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function deleteMyPrompt(e,o){try{if(log(`[portal-api-client] deleteMyPrompt called: id=${e}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const r=`${PORTAL_URL}/cli/my-agents/${encodeURIComponent(e)}`,s=await fetch(r,{method:"DELETE",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0});if(!s.ok){const t=await s.text();log(`[portal-api-client] deleteMyPrompt error: ${s.status}`);let e=`HTTP ${s.status}`;try{const o=JSON.parse(t);o.message&&(e=o.message)}catch(t){}return{success:!1,error:e}}return{success:!0,data:(await s.json()).data}}catch(e){return log(`[portal-api-client] deleteMyPrompt FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function downloadMcpPackage(e,o){try{if(log(`[portal-api-client] downloadMcpPackage called: mcpId=${e}`),!o)return{success:!1,error:t("mcp.noAuthToken")};const r=`${PORTAL_URL}/mcp/${encodeURIComponent(e)}/download`;log(`[portal-api-client] Downloading MCP package: ${r}`);const s=await fetch(r,{method:"GET",headers:{"X-CLI-Token":o,"Content-Type":"application/json","User-Agent":"BlueLamp-VSCode-MCP/1.0"},agent:r.startsWith("https")?httpsAgent:void 0});if(!s.ok){const t=await s.text();log(`[portal-api-client] downloadMcpPackage error: ${s.status} ${t}`);let e=`Download failed: HTTP ${s.status}`;try{const o=JSON.parse(t);o.message&&(e=o.message)}catch(t){}return{success:!1,error:e}}const a=await s.json();return log(`[portal-api-client] downloadMcpPackage: ${a.data?.files?.length||0} files`),{success:!0,data:a.data}}catch(e){return log(`[portal-api-client] downloadMcpPackage FATAL: ${e.message}`),{success:!1,error:t("mcp.portalCommunicationError",{error:e.message})}}}async function getGatewayConfig(t){try{if(!t)return{success:!1,error:"No token"};const e=`${PORTAL_URL}/mcp/user/me/gateway-config`;log(`[portal-api-client] getGatewayConfig: ${e}`);const o=await fetch(e,{method:"GET",headers:{"X-CLI-Token":t,"Content-Type":"application/json"},agent:e.startsWith("https")?httpsAgent:void 0});if(!o.ok)return{success:!1,error:`HTTP ${o.status}`};const r=await o.json();return log(`[portal-api-client] getGatewayConfig: ${r.data?.services?.length||0} services`),{success:!0,data:r.data}}catch(t){return log(`[portal-api-client] getGatewayConfig error: ${t.message}`),{success:!1,error:t.message}}}async function searchMcpServices(t,e){try{if(!e)return{success:!1,error:"No token"};const o=`${PORTAL_URL}/mcp/search?q=${encodeURIComponent(t)}`;log(`[portal-api-client] searchMcpServices: ${o}`);const r=await fetch(o,{method:"GET",headers:{"X-CLI-Token":e,"Content-Type":"application/json"},agent:o.startsWith("https")?httpsAgent:void 0});return r.ok?{success:!0,data:(await r.json()).data}:{success:!1,error:`HTTP ${r.status}`}}catch(t){return log(`[portal-api-client] searchMcpServices error: ${t.message}`),{success:!1,error:t.message}}}async function installMcpService(t,e,o,r){try{if(!o)return{success:!1,error:"No token"};const s=`${PORTAL_URL}/mcp/user/me/install`,a={mcpId:t,alwaysOn:e??!1};r&&Object.keys(r).length>0&&(a.envOverrides=r);const n=await fetch(s,{method:"POST",headers:{"X-CLI-Token":o,"Content-Type":"application/json"},agent:s.startsWith("https")?httpsAgent:void 0,body:JSON.stringify(a)});return n.ok?{success:!0,data:(await n.json()).data}:{success:!1,error:`HTTP ${n.status}`}}catch(t){return log(`[portal-api-client] installMcpService error: ${t.message}`),{success:!1,error:t.message}}}async function setServiceAlwaysOn(t,e,o){try{if(!o)return{success:!1,error:"No token"};const r=e?"activate":"deactivate",s=`${PORTAL_URL}/mcp/user/me/services/${encodeURIComponent(t)}/${r}`,a=await fetch(s,{method:"POST",headers:{"X-CLI-Token":o,"Content-Type":"application/json"},agent:s.startsWith("https")?httpsAgent:void 0});return a.ok?{success:!0,data:(await a.json()).data}:{success:!1,error:`HTTP ${a.status}`}}catch(t){return log(`[portal-api-client] setServiceAlwaysOn error: ${t.message}`),{success:!1,error:t.message}}}async function uninstallMcpService(t,e){try{if(!e)return{success:!1,error:"No token"};const o=`${PORTAL_URL}/mcp/user/me/services/${encodeURIComponent(t)}`,r=await fetch(o,{method:"DELETE",headers:{"X-CLI-Token":e,"Content-Type":"application/json"},agent:o.startsWith("https")?httpsAgent:void 0});return r.ok?{success:!0,data:(await r.json()).data}:{success:!1,error:`HTTP ${r.status}`}}catch(t){return log(`[portal-api-client] uninstallMcpService error: ${t.message}`),{success:!1,error:t.message}}}async function updateMcpEnv(t,e,o){try{if(!o)return{success:!1,error:"No token"};const r=`${PORTAL_URL}/mcp/user/me/services/${encodeURIComponent(t)}/env`,s=await fetch(r,{method:"PUT",headers:{"X-CLI-Token":o,"Content-Type":"application/json"},agent:r.startsWith("https")?httpsAgent:void 0,body:JSON.stringify({env:e})});return s.ok?{success:!0,data:(await s.json()).data}:{success:!1,error:`HTTP ${s.status}`}}catch(t){return log(`[portal-api-client] updateMcpEnv error: ${t.message}`),{success:!1,error:t.message}}}async function callMcpToolProxy(t,e,o,r){try{if(!r)return{success:!1,error:"No token"};const s=`${PORTAL_URL}/mcp/${encodeURIComponent(t)}/call`,a=await fetch(s,{method:"POST",headers:{"X-CLI-Token":r,"Content-Type":"application/json"},agent:s.startsWith("https")?httpsAgent:void 0,body:JSON.stringify({tool_name:e,arguments:o})});if(!a.ok){const t=await a.text();return{success:!1,error:`HTTP ${a.status}: ${t.slice(0,200)}`}}return await a.json()}catch(t){return log(`[portal-api-client] callMcpToolProxy error: ${t.message}`),{success:!1,error:t.message}}}fs.existsSync(LOG_DIR)||fs.mkdirSync(LOG_DIR,{recursive:!0}),module.exports={getPromptFromPortal:getPromptFromPortal,getSlotConfig:getSlotConfig,reportViolation:reportViolation,listAvailableMcps:listAvailableMcps,getMcpInfo:getMcpInfo,downloadMcpPackage:downloadMcpPackage,callMcpTool:callMcpTool,scanMcpCode:scanMcpCode,deployUserMcp:deployUserMcp,listUserCreatedMcps:listUserCreatedMcps,deleteUserMcp:deleteUserMcp,listMyPrompts:listMyPrompts,saveMyPrompt:saveMyPrompt,deleteMyPrompt:deleteMyPrompt,getGatewayConfig:getGatewayConfig,searchMcpServices:searchMcpServices,installMcpService:installMcpService,setServiceAlwaysOn:setServiceAlwaysOn,uninstallMcpService:uninstallMcpService,updateMcpEnv:updateMcpEnv,callMcpToolProxy:callMcpToolProxy};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r=e(t),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(n,t,r[i]);return __setModuleDefault(n,t),n}}();Object.defineProperty(exports,"__esModule",{value:!0});const fs=__importStar(require("node:fs")),path=__importStar(require("node:path")),MAX_SLOTS=200,TRAMPOLINE_CONTENT="#!/usr/bin/env node\nimport './bluelamp-vscode-base.mjs';\n";function main(){const e=path.resolve(__dirname,"..",".."),t=path.join(e,"bin");let n="bluelamp";try{const t=JSON.parse(fs.readFileSync(path.join(e,"package.json"),"utf-8"));"string"==typeof t.name&&t.name.trim()&&(n=t.name.trim())}catch{}fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0}),console.log(`🔵 ${n} コマンド生成開始...\n`);let r=0;for(let e=1;e<=200;e++){const i=path.join(t,`${n}${e}.mjs`);(!fs.existsSync(i)||fs.readFileSync(i,"utf-8")!==TRAMPOLINE_CONTENT)&&(fs.writeFileSync(i,TRAMPOLINE_CONTENT),r++);try{fs.chmodSync(i,493)}catch{}e%50==0&&console.log(` ✅ ${n}1〜${e}.mjs 確認完了`)}const i=path.join(t,"bluelamp-vscode-base.mjs");if(fs.existsSync(i))try{fs.chmodSync(i,493)}catch{}console.log(`\n✨ 200 個の bin trampoline を確認 (新規/差分更新: ${r})`)}main();
|