refactor: reduce approval context overhead
CI / Client installer (macos-latest) (push) Canceled after 0s
CI / Client installer (ubuntu-latest) (push) Canceled after 0s
CI / Client installer (windows-latest) (push) Canceled after 0s
CI / test (22) (push) Canceled after 0s
CI / test (24) (push) Canceled after 0s
CI / release-smoke (push) Canceled after 0s
CI / Client installer (macos-latest) (push) Canceled after 0s
CI / Client installer (ubuntu-latest) (push) Canceled after 0s
CI / Client installer (windows-latest) (push) Canceled after 0s
CI / test (22) (push) Canceled after 0s
CI / test (24) (push) Canceled after 0s
CI / release-smoke (push) Canceled after 0s
This commit is contained in:
+30
-2
@@ -1,7 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
||||
import { chmodSync, cpSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { homedir } from "node:os";
|
||||
import { dirname, join, resolve } from "node:path";
|
||||
import { basename, dirname, join, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
||||
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
||||
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
||||
@@ -488,11 +489,38 @@ export async function startBridge(endpoint: string, statePath = process.env.DING
|
||||
}
|
||||
|
||||
async function runPostInstallLogin(endpoint: string, statePath: string): Promise<void> {
|
||||
syncBundledSkillForLegacyUpdate(statePath);
|
||||
const bridge = new RemoteBridge(endpoint, resolve(statePath));
|
||||
bridge.ensureOnboardingPending();
|
||||
process.stdout.write(`${JSON.stringify(await bridge.loginChallenge())}\n`);
|
||||
}
|
||||
|
||||
export function syncBundledSkillForLegacyUpdate(
|
||||
statePath: string,
|
||||
bundled = resolve(dirname(fileURLToPath(import.meta.url)), "../../skill/dingtalk-approval"),
|
||||
): void {
|
||||
const resolvedState = resolve(statePath);
|
||||
if (basename(resolvedState) !== "session.json" || basename(dirname(resolvedState)) !== "state") return;
|
||||
if (!existsSync(join(bundled, "SKILL.md")) || !existsSync(join(bundled, "references", "create-approval.md"))) return;
|
||||
const target = resolve(dirname(resolvedState), "../skill/dingtalk-approval");
|
||||
const parent = dirname(target);
|
||||
mkdirSync(parent, { recursive: true, mode: 0o700 });
|
||||
const staging = join(parent, `.dingtalk-approval.staging-${process.pid}`);
|
||||
const backup = join(parent, `.dingtalk-approval.backup-${process.pid}`);
|
||||
rmSync(staging, { recursive: true, force: true });
|
||||
rmSync(backup, { recursive: true, force: true });
|
||||
try {
|
||||
cpSync(bundled, staging, { recursive: true });
|
||||
if (existsSync(target)) renameSync(target, backup);
|
||||
renameSync(staging, target);
|
||||
rmSync(backup, { recursive: true, force: true });
|
||||
} catch (error) {
|
||||
if (!existsSync(target) && existsSync(backup)) renameSync(backup, target);
|
||||
rmSync(staging, { recursive: true, force: true });
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
if (isDirectEntrypoint(import.meta.url, process.argv[1])) {
|
||||
const args = process.argv.slice(2);
|
||||
const endpoint = parseEndpoint(args);
|
||||
|
||||
Reference in New Issue
Block a user