skills/lumina-eps-token/SKILL.md
Acquire and validate Lumina EPS/LuminaServiceAPI bearer tokens using the CopilotLumina eps_client.py and get-lumina-token.ts helpers. Use when the user asks about Lumina token acquisition, EPS client authentication, testing luminaserviceapi hosts, running eps_client.py, validating v1/v3 EPS routes, resolving bundled helper script paths across .agents/.claude/.copilot installs, or fixing local Bun/Python/uv environment issues for these flows.
npx skillsauth add liulixiang1988/agent-skills lumina-eps-tokenInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Acquire a Microsoft Entra ID token for LuminaServiceAPI, then use it with eps_client.py to validate EPS/Lumina agent endpoints.
luminaserviceapi-* host.eps_client.py, especially against luminaserviceapi-b-4.luminadevaks-westus3.dev.copilotlumina.com.bun, missing python, or missing requests.Resolve these relative to the current CopilotLumina worktree root:
sources/dev/SandboxService/AIAgents/ts-agents/skills-agent/scripts/eps_client.pysources/dev/SandboxService/AIAgents/ts-agents/egress-llm/scripts/get-lumina-token.tseps_client.py calls get-lumina-token.ts when --bearer-token is not supplied. The TypeScript helper uses OAuth authorization code + PKCE against Microsoft Entra ID with:
72f988bf-86f1-41af-91ab-2d7cd011db47ac180c33-bd40-461a-bbfd-1a4ff964e8a0api://ac180c33-bd40-461a-bbfd-1a4ff964e8a0/user_impersonateFrom the CopilotLumina worktree, prefer the bundled helper because it handles Bun and Python command differences.
The helpers live in this skill's own scripts/ directory. The absolute path varies by host (for example, some agent hosts install skills under ~/.agents/skills/, Claude Code npx skill install commonly uses ~/.claude/skills/, and Copilot/Gemini/Codex installers may use their own roots). The skill may also be loaded directly from a source checkout such as an agent-skills/skills/lumina-eps-token/ folder. Do not hardcode an install path. Instead, resolve it at run time using one of these strategies, in order:
CLAUDE_SKILL_DIR, SKILL_DIR, AGENT_SKILL_PATH, or AGENTS_SKILL_DIR), use it.skills/lumina-eps-token relative to the workspace root.lumina-eps-token directory containing this SKILL.md:
$HOME/.agents/skills/lumina-eps-token$HOME/.claude/skills/lumina-eps-token$HOME/.codex/skills/lumina-eps-token$HOME/.gemini/skills/lumina-eps-token$HOME/.copilot/skills/lumina-eps-token**/skills/lumina-eps-token/SKILL.md reachable from the current working directory or the project worktree.On Windows, treat $HOME as the user's home directory; in PowerShell that is usually $env:USERPROFILE.
Pick the first match that contains both scripts/Invoke-LuminaEpsClient.ps1 and scripts/invoke-lumina-eps-client.sh, then invoke from there.
$skillDir is resolvedWindows PowerShell:
& "$skillDir\scripts\Invoke-LuminaEpsClient.ps1" `
-Description "Hi" `
-Url "luminaserviceapi-b-4.luminadevaks-westus3.dev.copilotlumina.com" `
-EpsVersion "v1"
macOS/Linux:
bash "$skillDir/scripts/invoke-lumina-eps-client.sh" \
--description "Hi" \
--url "luminaserviceapi-b-4.luminadevaks-westus3.dev.copilotlumina.com" \
--eps-version "v1"
Both helpers default --repo-root / -RepoRoot to the current working directory, so run them from inside the CopilotLumina worktree (or pass --repo-root <path>).
Direct equivalent when environment is already ready:
cd sources/dev/SandboxService/AIAgents/ts-agents/skills-agent/scripts
uv run --with requests python .\eps_client.py "Hi" --url luminaserviceapi-b-4.luminadevaks-westus3.dev.copilotlumina.com --eps-version v1
For luminaserviceapi-b-4.luminadevaks-westus3.dev.copilotlumina.com, a valid token has been shown to work with --eps-version v1:
POST /api/agent/computer/initializePOST /api/agent/sub-agent/a2a/message/streamThe same host returned 404 Not Found for the default v3 open route:
POST /api/v3/sandboxes/{sandboxId}:openTreat 401 or 403 as token/auth failures. Treat 404 as route availability or API version mismatch unless other evidence says otherwise.
bun is missing, install it with the official PowerShell installer, then add $env:USERPROFILE\.bun\bin to the current process PATH.curl -fsSL https://bun.sh/install | bash, then add $HOME/.bun/bin to PATH for the current process.python is missing but uv exists, run through uv run --with requests python ....python and uv are missing, install or locate a Python runtime before continuing.skills-agent/scripts/test_sessions/auth_token.txtegress-llm/scripts/.cache.json may include refresh tokens..gitignore files currently ignore these cache paths. Do not print full tokens in final answers; summarize with prefixes only when necessary.development
Register and verify a sandbox-hosted HTTP service through Lumina App Proxy (LuminaProxyAPI). Use when the user wants to spin up a tiny FastAPI server inside a Lumina sandbox, expose it under {appId}.{BaseDomain}, hand the resulting URL to teammates, or compare access_scope=owner vs access_scope=all behavior of the AppProxyAuthHandler. Pairs with lumina-eps-token to acquire the bearer token and create the sandbox first.
testing
Pulls 3-year financial statements (income, balance sheet, cash flow) for a single stock and produces a deep Chinese-language report, OR compares multiple peers head-to-head. Use whenever the user asks to 分析/解读/看一下 a company's 财报/财务/营收/利润/资产负债/现金流, asks for 三年/近三年/最近几年 financials, or wants to compare multiple stocks 对比/PK/比较 on financial metrics. Triggers on phrases like "帮我看下 X 的财报"、"分析 X 这三年的财务"、"X 和 Y 哪个更好"、"对比 A B C 三家". Covers US/HK/KR/A-share stocks via stockanalysis.com.
tools
End-to-end Microsoft Connect (half-yearly performance review) drafting + inject into the Connect tool. Trigger when user mentions Connect, connect draft, 绩效盘点, Microsoft performance review, "write my connect", "draft my connect", "帮我写 connect", or asks to populate v2.msconnect.microsoft.com. Gathers evidence (ADO work items + PRs, SharePoint-authored docs via workiq, historical Connects via Playwright for style), builds a local sign-off flow chart for the user to review, then injects HTML-formatted content (with hyperlinks, nested lists, underlines) directly into the Roosterjs rich-text editor fields via simulated paste events. Asks the user for period dates, repos, SharePoint URLs, and historical Connect IDs at runtime because these vary per person.
tools
Record work log / save work summary / add TODO items. TRIGGER when: user says '记录工作', '保存工作', 'record work', 'save work', 'log work', '工作记录', '写工作日志', '保存工作记录', '记录一下', or similar phrases about saving/recording what was done in the current session. Also trigger when user mentions work log, work record, 工作日志, or wants to summarize completed work for future performance review. Also trigger when user says '加一个todo', 'add a todo', '添加todo', '加个待办', '记录todo', or similar phrases about adding a TODO/待办 item to the work log.