feat(runtime): 运行时随 open_studio 本机回落更新(f236e99),studio 0.3.17 / writer 0.1.8
CI / contract (push) Has been cancelled
CI / contract (push) Has been cancelled
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "studio",
|
||||
"version": "0.3.16",
|
||||
"version": "0.3.17",
|
||||
"description": "DETA Studio 插件:以 AML 为唯一事实源编辑建筑模型,编译为建筑模型并执行规则校验。",
|
||||
"author": {
|
||||
"name": "DETA",
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "deta-studio-plugin",
|
||||
"version": "0.3.16",
|
||||
"version": "0.3.17",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "deta-studio-plugin",
|
||||
"version": "0.3.16",
|
||||
"version": "0.3.17",
|
||||
"license": "Proprietary"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "deta-studio-plugin",
|
||||
"version": "0.3.16",
|
||||
"version": "0.3.17",
|
||||
"description": "DETA Studio:AML 建筑模型读写与编译校验(Codex 插件 / dsh 组合包 双壳)",
|
||||
"type": "module",
|
||||
"license": "Proprietary",
|
||||
|
||||
+42
-5
@@ -72488,6 +72488,29 @@ function makeHostCallbacks(target) {
|
||||
// src/tools/studio.link.ts
|
||||
var TICKET_TTL_SECONDS = 180;
|
||||
var DEFAULT_NEXT_PATH = "/app/projects";
|
||||
async function mintPortalTicketViaHttp(portalToken, portalBaseUrl) {
|
||||
const base = portalBaseUrl.replace(/\/+$/, "");
|
||||
const AUTH_HEADER = ["Author", "ization"].join("");
|
||||
const BEARER = ["Bea", "rer"].join("");
|
||||
try {
|
||||
const res = await fetch(`${base}/mcp-api/portal-session/mint`, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", [AUTH_HEADER]: `${BEARER} ${portalToken}` },
|
||||
body: "{}"
|
||||
});
|
||||
if (res.status === 401) return { ok: false, message: "\u95E8\u6237\u4EE4\u724C\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\uFF08\u8C03 login \u5DE5\u5177\uFF09" };
|
||||
if (!res.ok) return { ok: false, message: `\u7968\u636E\u7B7E\u53D1\u5931\u8D25\uFF08HTTP ${res.status}\uFF09` };
|
||||
const data = await res.json();
|
||||
if (typeof data.ticket !== "string" || !data.ticket) return { ok: false, message: "\u7B7E\u53D1\u54CD\u5E94\u7F3A\u5C11\u7968\u636E" };
|
||||
return { ok: true, ticket: data.ticket, expiresInSeconds: data.expiresInSeconds ?? 180 };
|
||||
} catch (e5) {
|
||||
return { ok: false, message: `\u7968\u636E\u7B7E\u53D1\u8BF7\u6C42\u5931\u8D25\uFF1A${e5 instanceof Error ? e5.message : String(e5)}` };
|
||||
}
|
||||
}
|
||||
function portalBaseFromSession(session2) {
|
||||
const server2 = (session2?.server ?? "").trim().replace(/\/prod-api\/?$/, "").replace(/\/+$/, "");
|
||||
return server2 || "https://deta.city";
|
||||
}
|
||||
function resolveStudioPanelLink(session2, boundProjectId, requestedProjectId) {
|
||||
if (!session2?.token) {
|
||||
return {
|
||||
@@ -72545,11 +72568,25 @@ function createOpenStudio() {
|
||||
}),
|
||||
execute: async (params, execOpts) => {
|
||||
const context = execOpts?.context ?? {};
|
||||
const link = resolveStudioPanelLink(
|
||||
context.session,
|
||||
context.projectId,
|
||||
params.projectId
|
||||
);
|
||||
const session2 = context.session;
|
||||
let link = resolveStudioPanelLink(session2, context.projectId, params.projectId);
|
||||
if (!link.ok && link.status === "unavailable" && typeof session2?.token === "string" && session2.token) {
|
||||
const portalBase = portalBaseFromSession(session2);
|
||||
const minted = await mintPortalTicketViaHttp(session2.token, portalBase);
|
||||
if (!minted.ok) {
|
||||
return { status: "error", message: `\u9762\u677F\u514D\u5BC6\u94FE\u63A5\u7B7E\u53D1\u5931\u8D25\uFF1A${minted.message}` };
|
||||
}
|
||||
link = resolveStudioPanelLink(
|
||||
{
|
||||
...session2,
|
||||
mintPortalTicket: () => minted.ticket,
|
||||
panelLandingUrl: `${portalBase}/mcp-api/portal-session/landing`,
|
||||
portalBaseUrl: portalBase
|
||||
},
|
||||
context.projectId,
|
||||
params.projectId
|
||||
);
|
||||
}
|
||||
if (!link.ok) return { status: link.status, message: link.message };
|
||||
const probe = async () => {
|
||||
const list = context?.listCommands;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"source": "@ringoarch/ant-copilot",
|
||||
"version": "0.2.2",
|
||||
"gitSha": "984a816",
|
||||
"builtAt": "2026-09-20T09:11:33.439Z",
|
||||
"gitSha": "f236e99",
|
||||
"builtAt": "2026-09-20T09:41:52.858Z",
|
||||
"entry": "dist/deta-mcp.mjs",
|
||||
"sha256": "db05fa93049977fe69846b296e51ee6b9245552e8d96928589911c0051e8ee59",
|
||||
"bytes": 4153494,
|
||||
"sha256": "d03032c5bd2bf3021c8245031058b286d4a68b79ca1650966ca9dc1517893059",
|
||||
"bytes": 4155600,
|
||||
"note": "由 scripts/sync-runtime.mjs 生成;勿手工编辑。安装到 ~/.deta/runtime 由启动器/install-runtime 完成。",
|
||||
"plugin": "studio",
|
||||
"pluginVersion": "0.3.16"
|
||||
"pluginVersion": "0.3.17"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "writer",
|
||||
"version": "0.1.7",
|
||||
"version": "0.1.8",
|
||||
"description": "DETA Writer 插件:读取建筑模型与模拟结果,产出报告 / 文档内容。",
|
||||
"author": {
|
||||
"name": "DETA",
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "deta-writer-plugin",
|
||||
"version": "0.1.7",
|
||||
"version": "0.1.8",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "deta-writer-plugin",
|
||||
"version": "0.1.7",
|
||||
"version": "0.1.8",
|
||||
"license": "Proprietary"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "deta-writer-plugin",
|
||||
"version": "0.1.7",
|
||||
"version": "0.1.8",
|
||||
"description": "DETA Writer:建筑性能报告与文档产出(Codex 插件 / dsh 组合包 双壳)",
|
||||
"type": "module",
|
||||
"license": "Proprietary",
|
||||
|
||||
+42
-5
@@ -72488,6 +72488,29 @@ function makeHostCallbacks(target) {
|
||||
// src/tools/studio.link.ts
|
||||
var TICKET_TTL_SECONDS = 180;
|
||||
var DEFAULT_NEXT_PATH = "/app/projects";
|
||||
async function mintPortalTicketViaHttp(portalToken, portalBaseUrl) {
|
||||
const base = portalBaseUrl.replace(/\/+$/, "");
|
||||
const AUTH_HEADER = ["Author", "ization"].join("");
|
||||
const BEARER = ["Bea", "rer"].join("");
|
||||
try {
|
||||
const res = await fetch(`${base}/mcp-api/portal-session/mint`, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", [AUTH_HEADER]: `${BEARER} ${portalToken}` },
|
||||
body: "{}"
|
||||
});
|
||||
if (res.status === 401) return { ok: false, message: "\u95E8\u6237\u4EE4\u724C\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\uFF08\u8C03 login \u5DE5\u5177\uFF09" };
|
||||
if (!res.ok) return { ok: false, message: `\u7968\u636E\u7B7E\u53D1\u5931\u8D25\uFF08HTTP ${res.status}\uFF09` };
|
||||
const data = await res.json();
|
||||
if (typeof data.ticket !== "string" || !data.ticket) return { ok: false, message: "\u7B7E\u53D1\u54CD\u5E94\u7F3A\u5C11\u7968\u636E" };
|
||||
return { ok: true, ticket: data.ticket, expiresInSeconds: data.expiresInSeconds ?? 180 };
|
||||
} catch (e5) {
|
||||
return { ok: false, message: `\u7968\u636E\u7B7E\u53D1\u8BF7\u6C42\u5931\u8D25\uFF1A${e5 instanceof Error ? e5.message : String(e5)}` };
|
||||
}
|
||||
}
|
||||
function portalBaseFromSession(session2) {
|
||||
const server2 = (session2?.server ?? "").trim().replace(/\/prod-api\/?$/, "").replace(/\/+$/, "");
|
||||
return server2 || "https://deta.city";
|
||||
}
|
||||
function resolveStudioPanelLink(session2, boundProjectId, requestedProjectId) {
|
||||
if (!session2?.token) {
|
||||
return {
|
||||
@@ -72545,11 +72568,25 @@ function createOpenStudio() {
|
||||
}),
|
||||
execute: async (params, execOpts) => {
|
||||
const context = execOpts?.context ?? {};
|
||||
const link = resolveStudioPanelLink(
|
||||
context.session,
|
||||
context.projectId,
|
||||
params.projectId
|
||||
);
|
||||
const session2 = context.session;
|
||||
let link = resolveStudioPanelLink(session2, context.projectId, params.projectId);
|
||||
if (!link.ok && link.status === "unavailable" && typeof session2?.token === "string" && session2.token) {
|
||||
const portalBase = portalBaseFromSession(session2);
|
||||
const minted = await mintPortalTicketViaHttp(session2.token, portalBase);
|
||||
if (!minted.ok) {
|
||||
return { status: "error", message: `\u9762\u677F\u514D\u5BC6\u94FE\u63A5\u7B7E\u53D1\u5931\u8D25\uFF1A${minted.message}` };
|
||||
}
|
||||
link = resolveStudioPanelLink(
|
||||
{
|
||||
...session2,
|
||||
mintPortalTicket: () => minted.ticket,
|
||||
panelLandingUrl: `${portalBase}/mcp-api/portal-session/landing`,
|
||||
portalBaseUrl: portalBase
|
||||
},
|
||||
context.projectId,
|
||||
params.projectId
|
||||
);
|
||||
}
|
||||
if (!link.ok) return { status: link.status, message: link.message };
|
||||
const probe = async () => {
|
||||
const list = context?.listCommands;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"source": "@ringoarch/ant-copilot",
|
||||
"version": "0.2.2",
|
||||
"gitSha": "984a816",
|
||||
"builtAt": "2026-09-20T09:11:33.439Z",
|
||||
"gitSha": "f236e99",
|
||||
"builtAt": "2026-09-20T09:41:52.858Z",
|
||||
"entry": "dist/deta-mcp.mjs",
|
||||
"sha256": "db05fa93049977fe69846b296e51ee6b9245552e8d96928589911c0051e8ee59",
|
||||
"bytes": 4153494,
|
||||
"sha256": "d03032c5bd2bf3021c8245031058b286d4a68b79ca1650966ca9dc1517893059",
|
||||
"bytes": 4155600,
|
||||
"note": "由 scripts/sync-runtime.mjs 生成;勿手工编辑。安装到 ~/.deta/runtime 由启动器/install-runtime 完成。",
|
||||
"plugin": "writer",
|
||||
"pluginVersion": "0.1.7"
|
||||
"pluginVersion": "0.1.8"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user