bluelamp 6.6.9 → 6.6.12
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/dist/auth/InteractiveLogin.d.ts.map +1 -1
- package/dist/auth/InteractiveLogin.js +1 -1
- package/dist/auth/InteractiveLogin.js.map +1 -1
- package/dist/auth/PortalAuthClient.js +1 -1
- package/dist/auth/TokenManager.d.ts +22 -0
- package/dist/auth/TokenManager.d.ts.map +1 -1
- package/dist/auth/TokenManager.js +1 -1
- package/dist/auth/TokenManager.js.map +1 -1
- package/dist/bin/bluelamp-vscode-base.mjs +1 -1
- package/dist/i18n/en.d.ts +1 -1
- package/dist/i18n/en.js +1 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/ja.d.ts +1 -1
- package/dist/i18n/ja.js +1 -1
- package/dist/i18n/ja.js.map +1 -1
- package/dist/lib/connectResilience.d.ts +43 -0
- package/dist/lib/connectResilience.d.ts.map +1 -0
- package/dist/lib/connectResilience.js +1 -0
- package/dist/lib/connectResilience.js.map +1 -0
- package/dist/lib/headlessLaunch.d.ts +27 -0
- package/dist/lib/headlessLaunch.d.ts.map +1 -1
- package/dist/lib/headlessLaunch.js +1 -1
- package/dist/lib/headlessLaunch.js.map +1 -1
- package/dist/lib/mcp-server/index.cjs +1 -1
- package/dist/lib/mcp-server/install-package.cjs +1 -1
- package/dist/lib/mcp-server/portal-api-client.cjs +1 -1
- package/dist/lib/slotKeywordResolve.d.ts +21 -24
- package/dist/lib/slotKeywordResolve.d.ts.map +1 -1
- package/dist/lib/slotKeywordResolve.js +1 -1
- package/dist/lib/slotKeywordResolve.js.map +1 -1
- package/dist/lib/sysPromptHandoff.d.ts +9 -0
- package/dist/lib/sysPromptHandoff.d.ts.map +1 -0
- package/dist/lib/sysPromptHandoff.js +1 -0
- package/dist/lib/sysPromptHandoff.js.map +1 -0
- package/dist/lib/whoami.d.ts +2 -3
- package/dist/lib/whoami.d.ts.map +1 -1
- package/dist/lib/whoami.js.map +1 -1
- package/package.json +4 -1
|
@@ -1 +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"),{requireFromPackage:requireFromPackage}=require("../requireFromPackage.cjs"),{logger:logger}=requireFromPackage(require,"../../utils/logger"),{t:t}=requireFromPackage(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&&e.version&&e.bin&&Object.keys(e.bin).some(t=>/^[a-z]+\d+$/.test(t)))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] 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}),r=null;try{const t=JSON.parse(e);t.message&&(o=t.message),t.code&&(r=t.code)}catch(t){}return{success:!1,error:o,status:c.status,code:r}}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"),{ok:!1,reason:"no-token"};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){log(`[portal-api-client] Slot config API error: ${s.status}`);let t=null;try{const e=await s.json();t=e?.error?.message||e?.message||null}catch{t=null}return 404===s.status?{ok:!1,reason:"not-configured",status:404,message:t}:403===s.status?{ok:!1,reason:"rank",status:403,message:t}:{ok:!1,reason:"http",status:s.status,message:t}}const a=await s.json();return a.success&&a.data?.keyword?(log(`[portal-api-client] Slot ${t}: custom keyword "${a.data.keyword}"`),{ok:!0,keyword:a.data.keyword}):(log(`[portal-api-client] Slot ${t}: no custom config`),{ok:!0,keyword:null})}catch(t){return log(`[portal-api-client] getSlotConfig error: ${t.message}`),{ok:!1,reason:"network",status:null,message:t.message}}}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.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 setServiceDeactivated(t,e,o){try{if(!o)return{success:!1,error:"No token"};const r=e?"deactivate":"activate",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] setServiceDeactivated 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})});if(!s.ok)return{success:!1,error:`HTTP ${s.status}`};const a=await s.json();return{success:!0,data:a.data,warning:a.warning||null}}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,setServiceDeactivated:setServiceDeactivated,uninstallMcpService:uninstallMcpService,updateMcpEnv:updateMcpEnv,callMcpToolProxy:callMcpToolProxy};
|
|
1
|
+
const fetch=(...t)=>import("node-fetch").then(({default:e})=>e(...t)),https=require("https"),fs=require("fs"),path=require("path"),os=require("os"),{requireFromPackage:requireFromPackage}=require("../requireFromPackage.cjs"),{logger:logger}=requireFromPackage(require,"../../utils/logger"),{t:t}=requireFromPackage(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&&e.version&&e.bin&&Object.keys(e.bin).some(t=>/^[a-z]+\d+$/.test(t)))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] 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}),r=null;try{const t=JSON.parse(e);t.message&&(o=t.message),t.code&&(r=t.code)}catch(t){}return{success:!1,error:o,status:c.status,code:r}}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}),networkFailure:Boolean(e&&"FetchError"===e.name)}}}async function getSlotConfig(t,e){try{if(!e)return log("[portal-api-client] getSlotConfig: No token"),{ok:!1,reason:"no-token"};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){log(`[portal-api-client] Slot config API error: ${s.status}`);let t=null;try{const e=await s.json();t=e?.error?.message||e?.message||null}catch{t=null}return 404===s.status?{ok:!1,reason:"not-configured",status:404,message:t}:403===s.status?{ok:!1,reason:"rank",status:403,message:t}:{ok:!1,reason:"http",status:s.status,message:t}}const a=await s.json();return a.success&&a.data?.keyword?(log(`[portal-api-client] Slot ${t}: custom keyword "${a.data.keyword}"`),{ok:!0,keyword:a.data.keyword}):(log(`[portal-api-client] Slot ${t}: no custom config`),{ok:!0,keyword:null})}catch(t){return log(`[portal-api-client] getSlotConfig error: ${t.message}`),{ok:!1,reason:"network",status:null,message:t.message}}}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.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 setServiceDeactivated(t,e,o){try{if(!o)return{success:!1,error:"No token"};const r=e?"deactivate":"activate",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] setServiceDeactivated 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})});if(!s.ok)return{success:!1,error:`HTTP ${s.status}`};const a=await s.json();return{success:!0,data:a.data,warning:a.warning||null}}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,setServiceDeactivated:setServiceDeactivated,uninstallMcpService:uninstallMcpService,updateMcpEnv:updateMcpEnv,callMcpToolProxy:callMcpToolProxy};
|
|
@@ -4,17 +4,21 @@
|
|
|
4
4
|
* 【直した欠陥・板 n=1715】
|
|
5
5
|
* `getSlotConfig` は **5 通りの意味を全部 `null` で返していた**——
|
|
6
6
|
* ① token 無し ② 404(スロット未設定)③ 403(階級/プラン不足)④ 通信/500 ⑤ 正当に custom 設定が無い。
|
|
7
|
-
* ⇒
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* ⇒ 理由を判別できる形にし、取れなかったときは `undefined` を返さず理由を 1 行で述べて止める。
|
|
8
|
+
*
|
|
9
|
+
* 【直した欠陥・板 n=1900】
|
|
10
|
+
* ① 取れなかったときの 1 行が、会員に管理者の作業(「ポータルの『エージェント配置』で割り当てて」)を
|
|
11
|
+
* 振っていた。会員にその画面は無く、ポータル・スロット・配置は会員の言葉ではない。
|
|
12
|
+
* ② 1〜18 番は取れないと開発製品用の既定表(1 番=@要件定義)へ**黙って**落ちていた。落ちた先は
|
|
13
|
+
* その所属先に用意の無い席で、初伝の会員に奥伝の席が立った(通しテスト 2026-09-20)。本番 30 日で
|
|
14
|
+
* 1〜18 番の取得は 200 が 14,626 件・404 が 60 件(0.4%)=救いとして使われていない。
|
|
15
|
+
* ⇒ 既定表を撤去し、**番号に関係なく**止めて案内する。
|
|
13
16
|
*
|
|
14
17
|
* 【この関数の規律】
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
+
* - 取れなかったら **`undefined` を返さず、理由を 1 行で述べて止める**(⛔ 別の席へ黙って落ちない)。
|
|
19
|
+
* - 理由は ②③④ を **混ぜない**(対処が正反対だから)。
|
|
20
|
+
* - 1 行は**会員が読む文**。⛔ 管理者の作業を振らない・中の言葉(ポータル・スロット・配置・CLI・
|
|
21
|
+
* トークン・MCP・コマンド 等)を出さない。次に何をすればよいか(待つ・誰に言うか)を必ず 1 つ入れる。
|
|
18
22
|
*/
|
|
19
23
|
/** `getSlotConfig` の戻り(5 通りの `null` を判別できる形にしたもの) */
|
|
20
24
|
export type SlotConfigOutcome = {
|
|
@@ -32,38 +36,31 @@ export interface ResolveSlotKeywordInput {
|
|
|
32
36
|
slotNumber: number;
|
|
33
37
|
/** `getSlotConfig` の戻り。互換: 旧実装の `string | null` も受ける(設置コピーが部分更新でも壊さない) */
|
|
34
38
|
outcome: SlotConfigOutcome | string | null | undefined;
|
|
35
|
-
/**
|
|
36
|
-
|
|
39
|
+
/** 会員が打った名前(`bluelamp55` 等・白ラベルなら `bizboost55`)。無ければ `bluelamp<N>` */
|
|
40
|
+
commandName?: string | null;
|
|
37
41
|
}
|
|
38
42
|
export type ResolveSlotKeywordResult = {
|
|
39
43
|
ok: true;
|
|
40
44
|
keyword: string;
|
|
41
|
-
source: 'custom'
|
|
45
|
+
source: 'custom';
|
|
42
46
|
} | {
|
|
43
47
|
ok: false;
|
|
44
48
|
message: string;
|
|
45
49
|
};
|
|
46
50
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*/
|
|
50
|
-
export declare function describeSlotConfigFailure(outcome: SlotConfigOutcome | string | null | undefined): string;
|
|
51
|
-
/**
|
|
52
|
-
* 失敗の理由を 1 行にする。⛔ ②③④ を 1 つにまとめない(対処が別物)。
|
|
53
|
-
* 行末に「何をすれば直るか」を必ず 1 つだけ入れる。
|
|
51
|
+
* 失敗の理由を 1 行にする(会員が読む文)。⛔ ②③④ を 1 つにまとめない(対処が別物)。
|
|
52
|
+
* 行末に「次に何をすればよいか」を必ず 1 つだけ入れる。
|
|
54
53
|
*/
|
|
55
|
-
export declare function buildSlotConfigFailureLine(slotNumber: number, outcome: SlotConfigOutcome | string | null | undefined): string;
|
|
54
|
+
export declare function buildSlotConfigFailureLine(slotNumber: number, outcome: SlotConfigOutcome | string | null | undefined, commandName?: string | null): string;
|
|
56
55
|
/**
|
|
57
56
|
* 起動キーワードを決める。
|
|
58
|
-
* 1. custom
|
|
59
|
-
* 2.
|
|
60
|
-
* 3. どちらも無ければ **失敗**(⛔ `undefined` を返さない)
|
|
57
|
+
* 1. 呼び出す相手(custom 設定)が取れていれば それ
|
|
58
|
+
* 2. 取れなければ **失敗**(⛔ `undefined` を返さない・⛔ 別の席へ黙って落ちない)
|
|
61
59
|
*/
|
|
62
60
|
export declare function resolveSlotKeyword(input: ResolveSlotKeywordInput): ResolveSlotKeywordResult;
|
|
63
61
|
declare const _default: {
|
|
64
62
|
resolveSlotKeyword: typeof resolveSlotKeyword;
|
|
65
63
|
buildSlotConfigFailureLine: typeof buildSlotConfigFailureLine;
|
|
66
|
-
describeSlotConfigFailure: typeof describeSlotConfigFailure;
|
|
67
64
|
};
|
|
68
65
|
export default _default;
|
|
69
66
|
//# sourceMappingURL=slotKeywordResolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotKeywordResolve.d.ts","sourceRoot":"","sources":["../../src/lib/slotKeywordResolve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"slotKeywordResolve.d.ts","sourceRoot":"","sources":["../../src/lib/slotKeywordResolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,qDAAqD;AACrD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpC;IACE,EAAE,EAAE,KAAK,CAAC;IACV,sFAAsF;IACtF,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEN,MAAM,WAAW,uBAAuB;IACtC,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAiBnC;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACtD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,MAAM,CAsBR;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAQ3F;;;;;AAED,wBAAkE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function normalize(e){return"string"==typeof e?{ok:!0,keyword:e}:e&&"object"==typeof e&&"boolean"==typeof e.ok?e:{ok:!1,reason:"http",status:null,message:null}}function withDetail(e,o){const t=(o??"").trim();return t?`${e}(${t})`:e}function
|
|
1
|
+
"use strict";function normalize(e){return"string"==typeof e?{ok:!0,keyword:e}:e&&"object"==typeof e&&"boolean"==typeof e.ok?e:{ok:!1,reason:"http",status:null,message:null}}function withDetail(e,o){const t=(o??"").trim();return t?`${e}(${t})`:e}function buildSlotConfigFailureLine(e,o,t){const r=normalize(o),n=(t??"").trim()||`bluelamp${e}`,l=`❌ ${n} を起動できませんでした`;if(r.ok||"not-configured"===r.reason)return`${l}: いまお使いの所属先では、${n} で呼び出す相手がまだ用意されていません。BlueLamp を案内してくれた運営の方に「${n} が起動できない」とお伝えください。`;switch(r.reason){case"no-token":return`${l}: ログインが切れています。もう一度起動して、ログインし直してください。`;case"rank":return withDetail(`${l}: いまのご契約の段階では、${n} はまだお使いいただけません。使いたい場合は運営の方にご相談ください`,r.message)+"。";case"network":return`${l}: BlueLamp につながりませんでした。インターネットの接続を確かめてから、もう一度お試しください。`;default:return`${l}: BlueLamp が一時的に応答していません(${r.status??"不明"})。少し時間をおいてから、もう一度お試しください。続くときは、この 1 行をそのまま運営の方にお伝えください。`}}function resolveSlotKeyword(e){const{slotNumber:o,commandName:t}=e,r=normalize(e.outcome);return r.ok&&"string"==typeof r.keyword&&""!==r.keyword.trim()?{ok:!0,keyword:r.keyword,source:"custom"}:{ok:!1,message:buildSlotConfigFailureLine(o,r,t)}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildSlotConfigFailureLine=buildSlotConfigFailureLine,exports.resolveSlotKeyword=resolveSlotKeyword,exports.default={resolveSlotKeyword:resolveSlotKeyword,buildSlotConfigFailureLine:buildSlotConfigFailureLine};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotKeywordResolve.js","sourceRoot":"","sources":["../../src/lib/slotKeywordResolve.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"slotKeywordResolve.js","sourceRoot":"","sources":["../../src/lib/slotKeywordResolve.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AA6CH,gEA0BC;AAOD,gDAQC;AA5DD,wDAAwD;AACxD,SAAS,SAAS,CAAC,OAAsD;IACvE,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACvE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAQ,OAA6B,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACtG,gDAAgD;QAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,OAA4B,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAsB;IACtD,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B,CACxC,UAAkB,EAClB,OAAsD,EACtD,WAA2B;IAE3B,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,WAAW,UAAU,EAAE,CAAC;IACnE,MAAM,IAAI,GAAG,KAAK,IAAI,cAAc,CAAC;IACrC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAC1C,mDAAmD;QACnD,OAAO,GAAG,IAAI,iBAAiB,IAAI,+CAA+C,IAAI,oBAAoB,CAAC;IAC7G,CAAC;IACD,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,GAAG,IAAI,sCAAsC,CAAC;QACvD,KAAK,MAAM;YACT,OAAO,UAAU,CACf,GAAG,IAAI,iBAAiB,IAAI,oCAAoC,EAChE,CAAC,CAAC,OAAO,CACV,GAAG,GAAG,CAAC;QACV,KAAK,SAAS;YACZ,OAAO,GAAG,IAAI,uDAAuD,CAAC;QACxE,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,GAAG,IAAI,4BAA4B,CAAC,CAAC,MAAM,IAAI,IAAI,yDAAyD,CAAC;IACxH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;AAC9F,CAAC;AAED,kBAAe,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** 起動子 → gateway へ一時ファイルのパスを渡す env 名。 */
|
|
2
|
+
export declare const SYS_PROMPT_ENV = "BLUELAMP_SYS_PROMPT_FILE";
|
|
3
|
+
/** gateway が起きなかったときに起動子が消すまでの上限(ms)。 */
|
|
4
|
+
export declare const SYS_PROMPT_SAFETY_CAP_MS: number;
|
|
5
|
+
/** 起動子が作る一時ファイル名(`randomHex` は 8 byte の hex=16 文字)。 */
|
|
6
|
+
export declare function sysPromptFileName(randomHex: string): string;
|
|
7
|
+
/** `candidate` が起動子の作る形で `tmpdir` の直下にあるか(消してよいか)。 */
|
|
8
|
+
export declare function isOwnSysPromptPath(candidate: string | undefined | null, tmpdir: string): boolean;
|
|
9
|
+
//# sourceMappingURL=sysPromptHandoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sysPromptHandoff.d.ts","sourceRoot":"","sources":["../../src/lib/sysPromptHandoff.ts"],"names":[],"mappings":"AAmBA,yCAAyC;AACzC,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAEzD,yCAAyC;AACzC,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAIvD,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIhG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),__importStar=this&&this.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var n=t(e),o=0;o<n.length;o++)"default"!==n[o]&&__createBinding(r,e,n[o]);return __setModuleDefault(r,e),r}}();Object.defineProperty(exports,"__esModule",{value:!0}),exports.SYS_PROMPT_SAFETY_CAP_MS=exports.SYS_PROMPT_ENV=void 0,exports.sysPromptFileName=sysPromptFileName,exports.isOwnSysPromptPath=isOwnSysPromptPath;const path=__importStar(require("node:path"));exports.SYS_PROMPT_ENV="BLUELAMP_SYS_PROMPT_FILE",exports.SYS_PROMPT_SAFETY_CAP_MS=6e5;const SYS_PROMPT_NAME=/^bl-sys-[0-9a-f]{16}\.txt$/;function sysPromptFileName(t){return`bl-sys-${t}.txt`}function isOwnSysPromptPath(t,e){if(!t||!path.isAbsolute(t))return!1;const r=path.resolve(t);return path.dirname(r)===path.resolve(e)&&SYS_PROMPT_NAME.test(path.basename(r))}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sysPromptHandoff.js","sourceRoot":"","sources":["../../src/lib/sysPromptHandoff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,8CAEC;AAGD,gDAIC;AArCD;;;;;;;;;;;;;;;;GAgBG;AACH,gDAAkC;AAElC,yCAAyC;AAC5B,QAAA,cAAc,GAAG,0BAA0B,CAAC;AAEzD,yCAAyC;AAC5B,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD,uDAAuD;AACvD,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,OAAO,UAAU,SAAS,MAAM,CAAC;AACnC,CAAC;AAED,sDAAsD;AACtD,SAAgB,kBAAkB,CAAC,SAAoC,EAAE,MAAc;IACrF,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1G,CAAC"}
|
package/dist/lib/whoami.d.ts
CHANGED
|
@@ -15,9 +15,8 @@ export interface WhoamiFacts {
|
|
|
15
15
|
tokenPresent: boolean;
|
|
16
16
|
/**
|
|
17
17
|
* portal が「有効」と明示的に答えたときだけ true。それ以外は null。
|
|
18
|
-
* TokenManager.validateToken
|
|
19
|
-
*
|
|
20
|
-
* 断定しない(推測を案内文に混ぜない)ため false は作らず、理由は note に載せる。
|
|
18
|
+
* 「無効」と「繋がらなかった」は TokenManager.validateToken の `verdict` で区別できる(n=1945)。
|
|
19
|
+
* ⚠️ ただしこの申告は従来どおり false を作らず、理由は note に載せる(案内文の断定を増やさない)。
|
|
21
20
|
*/
|
|
22
21
|
validated: true | null;
|
|
23
22
|
/** portal が返した理由 / 通信エラー文(そのまま載せる一次情報) */
|
package/dist/lib/whoami.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/lib/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/lib/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAOD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkCvD"}
|
package/dist/lib/whoami.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/lib/whoami.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/lib/whoami.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AA2BH,oCAkCC;AAvCD,SAAS,IAAI,CAAC,KAAa,EAAE,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5F,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7C,CAAC;AAED,SAAgB,YAAY,CAAC,KAAkB;IAC7C,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO;YACL,mCAAmC;YACnC,sCAAsC;YACtC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;SACtD;aACE,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aACtC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GACZ,KAAK,CAAC,SAAS,KAAK,IAAI;QACtB,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,gFAAgF,CAAC;IAEvF,MAAM,IAAI,GAAG;QACX,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;QAC3B,KAAK,CAAC,QAAQ;YACZ,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC;YACtC,CAAC,CAAC,+CAA+C;QACnD,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;KACjC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAEzC,OAAO;QACL,QAAQ;QACR,GAAG,IAAI;QACP,EAAE;QACF,iEAAiE;QACjE,0DAA0D;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bluelamp",
|
|
3
|
-
"version": "6.6.
|
|
3
|
+
"version": "6.6.12",
|
|
4
4
|
"description": "BlueLamp CLI: 旧 bluelampportal/mcp の auth / 200+ bluelamp1-N binary / postinstall scripts を TypeScript 化して monorepo に統合したパッケージ。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bluelamp",
|
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
24
|
"preferGlobal": true,
|
|
25
|
+
"bluelampLauncherFeatures": [
|
|
26
|
+
"task-file"
|
|
27
|
+
],
|
|
25
28
|
"repository": {
|
|
26
29
|
"type": "git",
|
|
27
30
|
"url": "git+https://github.com/mikoto-co-jp/mikoto-monorepo.git",
|