@clawos-dev/clawd 0.2.584 → 0.2.586
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/app-builder-plugin/mcp-server.cjs +11 -3
- package/dist/cli.cjs +88 -7
- package/dist/cloud-persona-conversations.html +1 -1
- package/dist/dispatch/mcp-server.cjs +11 -3
- package/dist/persona-defaults/persona-app-builder/mcp/clawd-app-builder/mcp-server.cjs +11 -3
- package/dist/persona-defaults/persona-clawd-butler/.claude/skills/scan-persona-for-deploy/SKILL.md +1 -0
- package/dist/persona-defaults/persona-dataclaw-builder/mcp/clawd-app-builder/mcp-server.cjs +11 -3
- package/dist/share-ui/assets/{guest-DVxTImMk.js → guest-D9kUdzSm.js} +2 -2
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -21507,8 +21507,8 @@ var EnvPackageSchema = external_exports.object({
|
|
|
21507
21507
|
// 两者都缺省即完全不约束。
|
|
21508
21508
|
min: external_exports.string().optional(),
|
|
21509
21509
|
/**
|
|
21510
|
-
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi
|
|
21511
|
-
*
|
|
21510
|
+
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi 扩展;apt 的字体包)。构建器只断言它装上了(npm 的问 npm ls,apt 的问 dpkg-query),
|
|
21511
|
+
* 不查 PATH 上有没有 `name` 这条命令。用在底座清单(cloud-host/engines/<e>/manifest.json、provision/manifests/common.json)里。
|
|
21512
21512
|
*/
|
|
21513
21513
|
library: external_exports.boolean().optional(),
|
|
21514
21514
|
/**
|
|
@@ -21787,6 +21787,10 @@ var DeployPutSecretArgsSchema = external_exports.object({
|
|
|
21787
21787
|
// 环境变量名 → 值。key 必须是该 secret 声明过的 env 之一,handler 校验。
|
|
21788
21788
|
values: external_exports.record(external_exports.string(), external_exports.string())
|
|
21789
21789
|
}).strict();
|
|
21790
|
+
var DeploySetEngineAuthArgsSchema = external_exports.object({
|
|
21791
|
+
personaId: external_exports.string().min(1),
|
|
21792
|
+
auth: external_exports.object({ baseUrl: external_exports.string(), apiKey: external_exports.string() }).strict().nullable()
|
|
21793
|
+
}).strict();
|
|
21790
21794
|
var DeployRerunJobArgsSchema = external_exports.object({
|
|
21791
21795
|
personaId: external_exports.string().min(1),
|
|
21792
21796
|
/** GitHub 的 job databaseId。**是数字**——字符串会在拼命令时静默出错 */
|
|
@@ -24273,9 +24277,13 @@ var METHOD_DOCS = {
|
|
|
24273
24277
|
args: DeployPatchArgsSchema
|
|
24274
24278
|
},
|
|
24275
24279
|
"deploy:putSecret": {
|
|
24276
|
-
summary: "\u628A\u4E00\u6761\u51ED\u636E\u7684\u503C\u5199\u8FDB\u4ED3\u5E93\u7684 GitHub Secrets\uFF08GitHub REST\uFF0C\u503C\u7528\u4ED3\u5E93\u516C\u94A5\u5C01\u7BB1\u540E\u4E0A\u4F20\uFF09\u3002**\u8FD9\u662F\u503C\u552F\u4E00\u7684\u5165\u53E3**\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\u3002env \u540D\u5FC5\u987B\u662F scanId \u90A3\u6B21\u6E05\u5355\u91CC\u8BE5\u51ED\u636E\u58F0\u660E\u8FC7\u7684\uFF1Bowner-only",
|
|
24280
|
+
summary: "\u628A\u4E00\u6761\u51ED\u636E\u7684\u503C\u5199\u8FDB\u4ED3\u5E93\u7684 GitHub Secrets\uFF08GitHub REST\uFF0C\u503C\u7528\u4ED3\u5E93\u516C\u94A5\u5C01\u7BB1\u540E\u4E0A\u4F20\uFF09\u3002**\u8FD9\u662F\u6E05\u5355\u51ED\u636E\u503C\u552F\u4E00\u7684\u5165\u53E3**\uFF08\u6A21\u578B\u8BA2\u9605\u8D70 deploy:setEngineAuth\uFF09\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\u3002env \u540D\u5FC5\u987B\u662F scanId \u90A3\u6B21\u6E05\u5355\u91CC\u8BE5\u51ED\u636E\u58F0\u660E\u8FC7\u7684\uFF1Bowner-only",
|
|
24277
24281
|
args: DeployPutSecretArgsSchema
|
|
24278
24282
|
},
|
|
24283
|
+
"deploy:setEngineAuth": {
|
|
24284
|
+
summary: "\u6A21\u578B\u8BA2\u9605\uFF08\u4E91\u4E0A\u8DD1\u8FD9\u4E2A persona \u82B1\u8C01\u7684\u6A21\u578B\u989D\u5EA6\uFF09\uFF1Aauth = { baseUrl, apiKey } \u5199\u8FDB\u4ED3\u5E93 GitHub Secrets \u7684 CLAWD_ENGINE_BASE_URL / CLAWD_ENGINE_API_KEY\uFF08\u5730\u5740\u89C4\u8303\u6210 \u2026/v1\uFF09\uFF0Cnull = \u5220\u8FD9\u4E24\u6761\u3001\u6539\u56DE\u5E73\u53F0\u9ED8\u8BA4\u3002\u4E0B\u6B21\u53D1\u5E03\u751F\u6548\u3002\u540C putSecret \u7684\u7EAA\u5F8B\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\uFF1B\u56DE deploy:get \u540C\u5F62\u7684\u72B6\u6001\uFF1Bowner-only\u3001human-only",
|
|
24285
|
+
args: DeploySetEngineAuthArgsSchema
|
|
24286
|
+
},
|
|
24279
24287
|
"deploy:reportFinding": {
|
|
24280
24288
|
summary: "\u626B\u63CF\u4E2D\u7684 butler \u9010\u6761\u4E0A\u62A5\u4E00\u4E2A\u53D1\u73B0\uFF08cli / secret / asset\uFF09\u3002**\u8FB9\u626B\u8FB9\u62A5**\uFF0C\u9875\u9762\u968F\u4E4B\u4E00\u70B9\u70B9\u586B\u5145\uFF1B\u540C (kind,name) \u91CD\u590D\u4E0A\u62A5\u5373\u8986\u76D6\u3002owner-only\u2014\u2014butler \u4F1A\u8BDD\u672C\u8EAB\u8DD1\u5728 owner \u6A21\u5F0F",
|
|
24281
24289
|
args: DeployReportFindingArgsSchema
|
package/dist/cli.cjs
CHANGED
|
@@ -6020,6 +6020,8 @@ var init_environment_schemas = __esm({
|
|
|
6020
6020
|
"jq",
|
|
6021
6021
|
"rsync",
|
|
6022
6022
|
"psql",
|
|
6023
|
+
"chromium",
|
|
6024
|
+
"fonts-wqy-microhei",
|
|
6023
6025
|
"pnpm",
|
|
6024
6026
|
"whiteboard-cli",
|
|
6025
6027
|
"s",
|
|
@@ -6054,8 +6056,8 @@ var init_environment_schemas = __esm({
|
|
|
6054
6056
|
// 两者都缺省即完全不约束。
|
|
6055
6057
|
min: external_exports.string().optional(),
|
|
6056
6058
|
/**
|
|
6057
|
-
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi
|
|
6058
|
-
*
|
|
6059
|
+
* 没有可执行、只是个包(引擎扩展这类:pi 底座里的 cliproxyapi 扩展;apt 的字体包)。构建器只断言它装上了(npm 的问 npm ls,apt 的问 dpkg-query),
|
|
6060
|
+
* 不查 PATH 上有没有 `name` 这条命令。用在底座清单(cloud-host/engines/<e>/manifest.json、provision/manifests/common.json)里。
|
|
6059
6061
|
*/
|
|
6060
6062
|
library: external_exports.boolean().optional(),
|
|
6061
6063
|
/**
|
|
@@ -6154,6 +6156,26 @@ var init_environment_schemas = __esm({
|
|
|
6154
6156
|
});
|
|
6155
6157
|
|
|
6156
6158
|
// ../protocol/src/deploy-schemas.ts
|
|
6159
|
+
function engineAuthState(secrets) {
|
|
6160
|
+
if (!secrets) return void 0;
|
|
6161
|
+
const has = (env) => secrets.some((p3) => p3.env === env && p3.setAt !== void 0);
|
|
6162
|
+
const n2 = [ENGINE_AUTH_SECRETS.baseUrl, ENGINE_AUTH_SECRETS.apiKey].filter(has).length;
|
|
6163
|
+
return n2 === 2 ? "own" : n2 === 0 ? "platform" : "partial";
|
|
6164
|
+
}
|
|
6165
|
+
function normalizeEngineBaseUrl(raw) {
|
|
6166
|
+
const s2 = raw.trim();
|
|
6167
|
+
let url;
|
|
6168
|
+
try {
|
|
6169
|
+
url = new URL(s2);
|
|
6170
|
+
} catch {
|
|
6171
|
+
throw new Error("\u8BA2\u9605\u5730\u5740\u8981\u4EE5 http:// \u6216 https:// \u5F00\u5934\uFF0C\u5F62\u5982 https://cpa.example.com");
|
|
6172
|
+
}
|
|
6173
|
+
if (url.protocol !== "http:" && url.protocol !== "https:" || !url.hostname) {
|
|
6174
|
+
throw new Error("\u8BA2\u9605\u5730\u5740\u8981\u4EE5 http:// \u6216 https:// \u5F00\u5934\uFF0C\u5F62\u5982 https://cpa.example.com");
|
|
6175
|
+
}
|
|
6176
|
+
const base = `${url.origin}${url.pathname}`.replace(/\/+$/, "");
|
|
6177
|
+
return base.endsWith("/v1") ? base : `${base}/v1`;
|
|
6178
|
+
}
|
|
6157
6179
|
function contentHeadOf(repo2, released) {
|
|
6158
6180
|
return released && repo2.head === released.head ? released.contentHead : repo2.head;
|
|
6159
6181
|
}
|
|
@@ -6168,7 +6190,7 @@ function cloudEngineOk(tool) {
|
|
|
6168
6190
|
function repoSlug(url) {
|
|
6169
6191
|
return url.trim().replace(/^git@[^:]+:/, "").replace(/^https?:\/\/[^/]+\//, "").replace(/\.git$/, "");
|
|
6170
6192
|
}
|
|
6171
|
-
var DeployFileSchema, SCAN_BASE_KINDS, ScanBaseKindSchema, DeployScanStatusSchema, DeployScanSchema, DeployReleasedSchema, DeployScanFileSchema, DeployRepoSchema, DeploySecretPresenceSchema, DEPLOY_STAGE_STATUSES, DeployStageStatusSchema, DEPLOY_STAGE_KEYS, DeployStageKeySchema, DeployJobSchema, DeployRunSchema, CLOUD_ENGINES, DeployUnpublishRunSchema, DeployStateSchema, DeployUnpublishResultSchema, DeployReleaseResultSchema, DeployPersonaArgsSchema, DeployGetArgsSchema, DeployScanArgsSchema, DeployReleaseArgsSchema, DeployPatchArgsSchema, DeployPutSecretArgsSchema, DeployRerunJobArgsSchema, DeployReportFindingArgsSchema, DeployFinishScanArgsSchema, PERSONA_REPO_ORG;
|
|
6193
|
+
var DeployFileSchema, SCAN_BASE_KINDS, ScanBaseKindSchema, DeployScanStatusSchema, DeployScanSchema, DeployReleasedSchema, DeployScanFileSchema, DeployRepoSchema, DeploySecretPresenceSchema, ENGINE_AUTH_SECRETS, ENGINE_AUTH_PARTIAL_BLOCKER, DEPLOY_STAGE_STATUSES, DeployStageStatusSchema, DEPLOY_STAGE_KEYS, DeployStageKeySchema, DeployJobSchema, DeployRunSchema, CLOUD_ENGINES, DeployUnpublishRunSchema, DeployStateSchema, DeployUnpublishResultSchema, DeployReleaseResultSchema, DeployPersonaArgsSchema, DeployGetArgsSchema, DeployScanArgsSchema, DeployReleaseArgsSchema, DeployPatchArgsSchema, DeployPutSecretArgsSchema, DeploySetEngineAuthArgsSchema, DeployRerunJobArgsSchema, DeployReportFindingArgsSchema, DeployFinishScanArgsSchema, PERSONA_REPO_ORG;
|
|
6172
6194
|
var init_deploy_schemas = __esm({
|
|
6173
6195
|
"../protocol/src/deploy-schemas.ts"() {
|
|
6174
6196
|
"use strict";
|
|
@@ -6253,6 +6275,8 @@ var init_deploy_schemas = __esm({
|
|
|
6253
6275
|
env: external_exports.string().min(1),
|
|
6254
6276
|
setAt: external_exports.number().optional()
|
|
6255
6277
|
}).strict();
|
|
6278
|
+
ENGINE_AUTH_SECRETS = { baseUrl: "CLAWD_ENGINE_BASE_URL", apiKey: "CLAWD_ENGINE_API_KEY" };
|
|
6279
|
+
ENGINE_AUTH_PARTIAL_BLOCKER = "\u6A21\u578B\u8BA2\u9605\u53EA\u5199\u8FDB\u53BB\u4E00\u534A\u2014\u2014\u91CD\u586B\u6216\u6539\u56DE\u5E73\u53F0\u9ED8\u8BA4";
|
|
6256
6280
|
DEPLOY_STAGE_STATUSES = ["pending", "running", "done", "failed", "waiting", "skipped"];
|
|
6257
6281
|
DeployStageStatusSchema = external_exports.enum(DEPLOY_STAGE_STATUSES);
|
|
6258
6282
|
DEPLOY_STAGE_KEYS = ["build", "smoke", "deploy"];
|
|
@@ -6358,6 +6382,10 @@ var init_deploy_schemas = __esm({
|
|
|
6358
6382
|
// 环境变量名 → 值。key 必须是该 secret 声明过的 env 之一,handler 校验。
|
|
6359
6383
|
values: external_exports.record(external_exports.string(), external_exports.string())
|
|
6360
6384
|
}).strict();
|
|
6385
|
+
DeploySetEngineAuthArgsSchema = external_exports.object({
|
|
6386
|
+
personaId: external_exports.string().min(1),
|
|
6387
|
+
auth: external_exports.object({ baseUrl: external_exports.string(), apiKey: external_exports.string() }).strict().nullable()
|
|
6388
|
+
}).strict();
|
|
6361
6389
|
DeployRerunJobArgsSchema = external_exports.object({
|
|
6362
6390
|
personaId: external_exports.string().min(1),
|
|
6363
6391
|
/** GitHub 的 job databaseId。**是数字**——字符串会在拼命令时静默出错 */
|
|
@@ -9137,9 +9165,13 @@ var init_methods = __esm({
|
|
|
9137
9165
|
args: DeployPatchArgsSchema
|
|
9138
9166
|
},
|
|
9139
9167
|
"deploy:putSecret": {
|
|
9140
|
-
summary: "\u628A\u4E00\u6761\u51ED\u636E\u7684\u503C\u5199\u8FDB\u4ED3\u5E93\u7684 GitHub Secrets\uFF08GitHub REST\uFF0C\u503C\u7528\u4ED3\u5E93\u516C\u94A5\u5C01\u7BB1\u540E\u4E0A\u4F20\uFF09\u3002**\u8FD9\u662F\u503C\u552F\u4E00\u7684\u5165\u53E3**\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\u3002env \u540D\u5FC5\u987B\u662F scanId \u90A3\u6B21\u6E05\u5355\u91CC\u8BE5\u51ED\u636E\u58F0\u660E\u8FC7\u7684\uFF1Bowner-only",
|
|
9168
|
+
summary: "\u628A\u4E00\u6761\u51ED\u636E\u7684\u503C\u5199\u8FDB\u4ED3\u5E93\u7684 GitHub Secrets\uFF08GitHub REST\uFF0C\u503C\u7528\u4ED3\u5E93\u516C\u94A5\u5C01\u7BB1\u540E\u4E0A\u4F20\uFF09\u3002**\u8FD9\u662F\u6E05\u5355\u51ED\u636E\u503C\u552F\u4E00\u7684\u5165\u53E3**\uFF08\u6A21\u578B\u8BA2\u9605\u8D70 deploy:setEngineAuth\uFF09\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\u3002env \u540D\u5FC5\u987B\u662F scanId \u90A3\u6B21\u6E05\u5355\u91CC\u8BE5\u51ED\u636E\u58F0\u660E\u8FC7\u7684\uFF1Bowner-only",
|
|
9141
9169
|
args: DeployPutSecretArgsSchema
|
|
9142
9170
|
},
|
|
9171
|
+
"deploy:setEngineAuth": {
|
|
9172
|
+
summary: "\u6A21\u578B\u8BA2\u9605\uFF08\u4E91\u4E0A\u8DD1\u8FD9\u4E2A persona \u82B1\u8C01\u7684\u6A21\u578B\u989D\u5EA6\uFF09\uFF1Aauth = { baseUrl, apiKey } \u5199\u8FDB\u4ED3\u5E93 GitHub Secrets \u7684 CLAWD_ENGINE_BASE_URL / CLAWD_ENGINE_API_KEY\uFF08\u5730\u5740\u89C4\u8303\u6210 \u2026/v1\uFF09\uFF0Cnull = \u5220\u8FD9\u4E24\u6761\u3001\u6539\u56DE\u5E73\u53F0\u9ED8\u8BA4\u3002\u4E0B\u6B21\u53D1\u5E03\u751F\u6548\u3002\u540C putSecret \u7684\u7EAA\u5F8B\uFF1A\u5165\u53C2\u4E0D\u8FDB\u65E5\u5FD7\u3001\u54CD\u5E94\u4E0D\u56DE\u663E\u503C\u3001\u672C\u673A\u4E0D\u843D\u76D8\uFF1B\u56DE deploy:get \u540C\u5F62\u7684\u72B6\u6001\uFF1Bowner-only\u3001human-only",
|
|
9173
|
+
args: DeploySetEngineAuthArgsSchema
|
|
9174
|
+
},
|
|
9143
9175
|
"deploy:reportFinding": {
|
|
9144
9176
|
summary: "\u626B\u63CF\u4E2D\u7684 butler \u9010\u6761\u4E0A\u62A5\u4E00\u4E2A\u53D1\u73B0\uFF08cli / secret / asset\uFF09\u3002**\u8FB9\u626B\u8FB9\u62A5**\uFF0C\u9875\u9762\u968F\u4E4B\u4E00\u70B9\u70B9\u586B\u5145\uFF1B\u540C (kind,name) \u91CD\u590D\u4E0A\u62A5\u5373\u8986\u76D6\u3002owner-only\u2014\u2014butler \u4F1A\u8BDD\u672C\u8EAB\u8DD1\u5728 owner \u6A21\u5F0F",
|
|
9145
9177
|
args: DeployReportFindingArgsSchema
|
|
@@ -60865,6 +60897,11 @@ function createGithubApi(args) {
|
|
|
60865
60897
|
const encrypted_value = await seal(pk.key, value);
|
|
60866
60898
|
await must("PUT", `/repos/${slug}/actions/secrets/${encodeURIComponent(name)}`, `\u5199 ${name}`, { encrypted_value, key_id: pk.key_id });
|
|
60867
60899
|
},
|
|
60900
|
+
async deleteSecret(slug, name) {
|
|
60901
|
+
const r2 = await request("DELETE", `/repos/${slug}/actions/secrets/${encodeURIComponent(name)}`);
|
|
60902
|
+
if (r2.status === 404) return;
|
|
60903
|
+
if (r2.status < 200 || r2.status >= 300) throw new GithubApiError(r2.status, explain(r2.status, `\u5220 ${name}`, r2.json));
|
|
60904
|
+
},
|
|
60868
60905
|
async listSecrets(slug) {
|
|
60869
60906
|
const j2 = await must("GET", `/repos/${slug}/actions/secrets?per_page=100`, "\u67E5\u4ED3\u5E93 Secrets");
|
|
60870
60907
|
const rows = Array.isArray(j2?.secrets) ? j2.secrets : [];
|
|
@@ -61430,6 +61467,15 @@ async function setSecret(exec, api, args) {
|
|
|
61430
61467
|
throw new RepoError(err instanceof Error ? err.message : String(err));
|
|
61431
61468
|
}
|
|
61432
61469
|
}
|
|
61470
|
+
async function deleteSecret(exec, api, args) {
|
|
61471
|
+
const info = await repoInfo(exec, args.dir);
|
|
61472
|
+
if (!info) throw new RepoError("\u8FD8\u6CA1\u6709\u4ED3\u5E93\uFF0CSecrets \u6CA1\u5730\u65B9\u5220");
|
|
61473
|
+
try {
|
|
61474
|
+
await api.deleteSecret(repoSlug(info.url), args.env);
|
|
61475
|
+
} catch (err) {
|
|
61476
|
+
throw new RepoError(err instanceof Error ? err.message : String(err));
|
|
61477
|
+
}
|
|
61478
|
+
}
|
|
61433
61479
|
async function listSecrets(exec, api, dir) {
|
|
61434
61480
|
const info = await repoInfo(exec, dir);
|
|
61435
61481
|
if (!info) return [];
|
|
@@ -61849,6 +61895,36 @@ function buildDeployHandlers(deps) {
|
|
|
61849
61895
|
secretsCache.delete(args.personaId);
|
|
61850
61896
|
return view(args.personaId);
|
|
61851
61897
|
};
|
|
61898
|
+
const setEngineAuth = async (frame, _client, ctx) => {
|
|
61899
|
+
ensureOwner(ctx);
|
|
61900
|
+
const args = parseArgs2(DeploySetEngineAuthArgsSchema, frame, "deploy:setEngineAuth");
|
|
61901
|
+
const dir = mustPersona(args.personaId);
|
|
61902
|
+
let writes;
|
|
61903
|
+
if (args.auth) {
|
|
61904
|
+
let baseUrl;
|
|
61905
|
+
try {
|
|
61906
|
+
baseUrl = normalizeEngineBaseUrl(args.auth.baseUrl);
|
|
61907
|
+
} catch (err) {
|
|
61908
|
+
throw invalid(err instanceof Error ? err.message : String(err));
|
|
61909
|
+
}
|
|
61910
|
+
const apiKey = args.auth.apiKey.trim();
|
|
61911
|
+
if (!apiKey) throw invalid("key \u4E0D\u80FD\u662F\u7A7A\u7684");
|
|
61912
|
+
if (/[\s\p{Cc}]/u.test(apiKey)) throw invalid("key \u91CC\u4E0D\u80FD\u6709\u7A7A\u767D\u6216\u63A7\u5236\u5B57\u7B26\uFF08\u591A\u534A\u662F\u7C98\u8D34\u65F6\u5E26\u8FDB\u4E86\u6362\u884C\u6216\u7A7A\u683C\uFF09");
|
|
61913
|
+
writes = [[ENGINE_AUTH_SECRETS.apiKey, apiKey], [ENGINE_AUTH_SECRETS.baseUrl, baseUrl]];
|
|
61914
|
+
}
|
|
61915
|
+
const { api } = await requireGithub();
|
|
61916
|
+
try {
|
|
61917
|
+
if (writes) {
|
|
61918
|
+
await deleteSecret(deps.exec, api, { dir, env: ENGINE_AUTH_SECRETS.baseUrl });
|
|
61919
|
+
for (const [env, value] of writes) await setSecret(deps.exec, api, { dir, env, value });
|
|
61920
|
+
} else for (const env of [ENGINE_AUTH_SECRETS.apiKey, ENGINE_AUTH_SECRETS.baseUrl]) await deleteSecret(deps.exec, api, { dir, env });
|
|
61921
|
+
} catch (err) {
|
|
61922
|
+
throw toClawdError(err);
|
|
61923
|
+
} finally {
|
|
61924
|
+
secretsCache.delete(args.personaId);
|
|
61925
|
+
}
|
|
61926
|
+
return view(args.personaId);
|
|
61927
|
+
};
|
|
61852
61928
|
async function settlePackage(pkg) {
|
|
61853
61929
|
const localVersion = await deps.probeLocalVersion(pkg);
|
|
61854
61930
|
const { artifact: reported, ...rest } = pkg;
|
|
@@ -61992,14 +62068,16 @@ function buildDeployHandlers(deps) {
|
|
|
61992
62068
|
throw invalid(repo2.dirty ? "\u6709\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF0C\u6E05\u5355\u662F\u6539\u52A8\u524D\u626B\u7684\u2014\u2014\u91CD\u65B0\u626B\u63CF" : "\u8FD9\u6B21\u626B\u63CF\u5BF9\u5E94\u7684\u4E0D\u662F\u5F53\u524D\u8FD9\u4E00\u7248 persona\u2014\u2014\u91CD\u65B0\u626B\u63CF");
|
|
61993
62069
|
}
|
|
61994
62070
|
const blockers = [];
|
|
61995
|
-
let
|
|
62071
|
+
let secrets;
|
|
61996
62072
|
try {
|
|
61997
|
-
|
|
62073
|
+
secrets = await cachedSecrets(personaId2, dir, api, true);
|
|
61998
62074
|
} catch (err) {
|
|
61999
62075
|
throw toClawdError(err);
|
|
62000
62076
|
}
|
|
62077
|
+
const present = new Set(secrets.filter((p3) => p3.setAt).map((p3) => p3.env));
|
|
62001
62078
|
const missing = requiredEnvNames(entry.manifest).filter((e) => !present.has(e));
|
|
62002
62079
|
if (missing.length > 0) blockers.push(`${missing.join(" / ")} \u8FD8\u6CA1\u586B`);
|
|
62080
|
+
if (engineAuthState(secrets) === "partial") blockers.push(ENGINE_AUTH_PARTIAL_BLOCKER);
|
|
62003
62081
|
for (const c2 of entry.manifest.connectors) blockers.push(...connectorBlockers(c2));
|
|
62004
62082
|
for (const p3 of entry.manifest.packages) blockers.push(...packageBlockers(p3));
|
|
62005
62083
|
if (!deps.personaEngine(personaId2)?.model) {
|
|
@@ -62075,6 +62153,7 @@ function buildDeployHandlers(deps) {
|
|
|
62075
62153
|
"deploy:scan": scanHandler,
|
|
62076
62154
|
"deploy:patch": patch,
|
|
62077
62155
|
"deploy:putSecret": putSecret,
|
|
62156
|
+
"deploy:setEngineAuth": setEngineAuth,
|
|
62078
62157
|
"deploy:reportFinding": reportFinding,
|
|
62079
62158
|
"deploy:finishScan": finishScan,
|
|
62080
62159
|
"deploy:release": releaseHandler,
|
|
@@ -72021,6 +72100,7 @@ var METHOD_GRANT_MAP = {
|
|
|
72021
72100
|
"deploy:scan": ADMIN_ANY,
|
|
72022
72101
|
"deploy:patch": ADMIN_ANY,
|
|
72023
72102
|
"deploy:putSecret": ADMIN_ANY,
|
|
72103
|
+
"deploy:setEngineAuth": ADMIN_ANY,
|
|
72024
72104
|
"deploy:reportFinding": ADMIN_ANY,
|
|
72025
72105
|
"deploy:finishScan": ADMIN_ANY,
|
|
72026
72106
|
"deploy:release": ADMIN_ANY,
|
|
@@ -72238,6 +72318,7 @@ var HUMAN_ONLY_METHODS = [
|
|
|
72238
72318
|
"deploy:scan",
|
|
72239
72319
|
"deploy:release",
|
|
72240
72320
|
"deploy:putSecret",
|
|
72321
|
+
"deploy:setEngineAuth",
|
|
72241
72322
|
"deploy:rerunJob",
|
|
72242
72323
|
"deploy:unpublish",
|
|
72243
72324
|
"githubAuth:oauthStart",
|
|
@@ -72284,7 +72365,7 @@ function computeMethodAccess(args) {
|
|
|
72284
72365
|
}
|
|
72285
72366
|
|
|
72286
72367
|
// src/version.ts
|
|
72287
|
-
var version = "0.2.
|
|
72368
|
+
var version = "0.2.586".length > 0 ? "0.2.586" : "dev";
|
|
72288
72369
|
|
|
72289
72370
|
// src/cli-probe/probe.ts
|
|
72290
72371
|
var fs80 = __toESM(require("fs"), 1);
|