@clawos-dev/clawd 0.2.454 → 0.2.456
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 +43 -8
- package/dist/cli.cjs +1153 -904
- package/dist/deploy-kit/scripts/new-extension.sh +25 -0
- package/dist/deploy-kit/scripts/publish.sh +92 -16
- package/dist/deploy-kit/scripts/publish.spec.ts +138 -1
- package/dist/deploy-kit/scripts/verify.sh +16 -5
- package/dist/dispatch/mcp-server.cjs +31 -3
- package/dist/persona-defaults/persona-app-builder/.mcp.json +7 -10
- package/dist/persona-defaults/persona-app-builder/CLAUDE.md +17 -10
- package/dist/persona-defaults/persona-app-builder/extension-kit/config.env +28 -22
- package/dist/persona-defaults/persona-app-builder/extension-kit/contract/s.yaml.domain.tmpl +19 -0
- package/dist/persona-defaults/persona-app-builder/extension-kit/contract/s.yaml.tmpl +4 -16
- package/dist/persona-defaults/persona-app-builder/extension-kit/examples/nestjs-react/server/.env.example +7 -6
- package/dist/persona-defaults/persona-master/CLAUDE.md +68 -0
- package/dist/secrets/README.md +29 -0
- package/dist/secrets/supabase.env +16 -0
- package/dist/share-ui/assets/{guest-Dh-ssMM-.js → guest-joTJl1Mi.js} +133 -133
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
|
@@ -22062,6 +22062,28 @@ var ChannelDeleteResultSchema = external_exports.object({
|
|
|
22062
22062
|
|
|
22063
22063
|
// ../protocol/src/topic.ts
|
|
22064
22064
|
var nonBlank2 = external_exports.string().trim().min(1);
|
|
22065
|
+
var TOPIC_DECISION_TYPES = ["master-confirmed", "owner-needed"];
|
|
22066
|
+
var TOPIC_DECISION_STATUSES = ["open", "resolved"];
|
|
22067
|
+
var TOPIC_DECISION_TYPE_MASTER_CONFIRMED = TOPIC_DECISION_TYPES[0];
|
|
22068
|
+
var TOPIC_DECISION_TYPE_OWNER_NEEDED = TOPIC_DECISION_TYPES[1];
|
|
22069
|
+
var TOPIC_DECISION_STATUS_OPEN = TOPIC_DECISION_STATUSES[0];
|
|
22070
|
+
var TOPIC_DECISION_STATUS_RESOLVED = TOPIC_DECISION_STATUSES[1];
|
|
22071
|
+
var TopicDecisionTypeSchema = external_exports.enum(TOPIC_DECISION_TYPES);
|
|
22072
|
+
var TopicDecisionStatusSchema = external_exports.enum(TOPIC_DECISION_STATUSES);
|
|
22073
|
+
var TopicDecisionSchema = external_exports.object({
|
|
22074
|
+
type: TopicDecisionTypeSchema,
|
|
22075
|
+
status: TopicDecisionStatusSchema,
|
|
22076
|
+
question: nonBlank2,
|
|
22077
|
+
recommendation: nonBlank2
|
|
22078
|
+
}).superRefine((decision, ctx) => {
|
|
22079
|
+
if (decision.type === TOPIC_DECISION_TYPE_MASTER_CONFIRMED && decision.status !== TOPIC_DECISION_STATUS_RESOLVED) {
|
|
22080
|
+
ctx.addIssue({
|
|
22081
|
+
code: external_exports.ZodIssueCode.custom,
|
|
22082
|
+
path: ["status"],
|
|
22083
|
+
message: "master-confirmed decisions must be resolved"
|
|
22084
|
+
});
|
|
22085
|
+
}
|
|
22086
|
+
});
|
|
22065
22087
|
var TOPIC_STATES = ["planning", "running", "done"];
|
|
22066
22088
|
var TopicStateSchema = external_exports.enum(TOPIC_STATES);
|
|
22067
22089
|
var TopicActivityEntrySchema = external_exports.object({
|
|
@@ -22071,7 +22093,12 @@ var TopicActivityEntrySchema = external_exports.object({
|
|
|
22071
22093
|
target: external_exports.string().optional(),
|
|
22072
22094
|
reason: external_exports.string().min(1),
|
|
22073
22095
|
/** 该动作确认的产出物(watcher 返回的 artifacts);影响面视图的唯一数据源 */
|
|
22074
|
-
artifacts: external_exports.array(nonBlank2).optional()
|
|
22096
|
+
artifacts: external_exports.array(nonBlank2).optional(),
|
|
22097
|
+
/**
|
|
22098
|
+
* Optional decision projection; legacy activity entries omit this field. `open` means the
|
|
22099
|
+
* owner still needs to answer; `resolved` records the conclusion without deleting the question.
|
|
22100
|
+
*/
|
|
22101
|
+
decision: TopicDecisionSchema.optional()
|
|
22075
22102
|
});
|
|
22076
22103
|
var TopicLineMetaSchema = external_exports.object({
|
|
22077
22104
|
rejectCount: external_exports.number().int().min(0),
|
|
@@ -22178,7 +22205,8 @@ var TopicAppendArgsSchema = external_exports.object({
|
|
|
22178
22205
|
target: nonBlank2.optional(),
|
|
22179
22206
|
reason: nonBlank2,
|
|
22180
22207
|
/** 该动作确认的产出物;影响面视图只吃这个字段 */
|
|
22181
|
-
artifacts: external_exports.array(nonBlank2).optional()
|
|
22208
|
+
artifacts: external_exports.array(nonBlank2).optional(),
|
|
22209
|
+
decision: TopicActivityEntrySchema.shape.decision
|
|
22182
22210
|
});
|
|
22183
22211
|
var TopicRejectArgsSchema = external_exports.object({
|
|
22184
22212
|
topicId: external_exports.string().min(1),
|
|
@@ -23932,7 +23960,7 @@ var METHOD_DOCS = {
|
|
|
23932
23960
|
args: TopicSetPlanArgsSchema
|
|
23933
23961
|
},
|
|
23934
23962
|
"topic:append": {
|
|
23935
|
-
summary:
|
|
23963
|
+
summary: "\u5F80\u8BDD\u9898\u6D41\u6C34\u8FFD\u52A0\u4E00\u6761\uFF1Breason \u5FC5\u586B\u3002Master \u505A\u4EE3\u8001\u677F\u786E\u8BA4\u6216\u5347\u7EA7\u8001\u677F\u51B3\u7B56\u65F6\uFF0C\u5FC5\u987B\u9644 decision\uFF08type/status/question/recommendation\uFF09",
|
|
23936
23964
|
args: TopicAppendArgsSchema
|
|
23937
23965
|
},
|
|
23938
23966
|
"topic:reject": {
|
|
@@ -24514,11 +24542,13 @@ var ProjectStore = class {
|
|
|
24514
24542
|
* spec 2026-06-02 §5.6.3:scaffold 对 assistant 不可见,避免 assistant 被诱导去"读 example
|
|
24515
24543
|
* 代码再参考"。assistant 进 project 时目录已是完整模板,直接 pnpm install 即可。
|
|
24516
24544
|
*/
|
|
24517
|
-
async scaffold(name, templateSrcDir, scaffoldScriptPath) {
|
|
24545
|
+
async scaffold(name, templateSrcDir, scaffoldScriptPath, extraEnv) {
|
|
24518
24546
|
const destDir = this.projectDir(name);
|
|
24519
24547
|
return await new Promise((resolve, reject) => {
|
|
24520
24548
|
const child = (0, import_node_child_process.spawn)("bash", [scaffoldScriptPath, name, templateSrcDir, destDir], {
|
|
24521
|
-
|
|
24549
|
+
// extraEnv 排在 PATH **之前**:凭据表里若混进一条名叫 PATH 的条目,顶掉 PATH 会让
|
|
24550
|
+
// 脚本以「命令找不到」的形态崩在离现场很远的地方。
|
|
24551
|
+
env: { ...process.env, ...extraEnv ?? {}, PATH: process.env.PATH ?? "" },
|
|
24522
24552
|
stdio: ["ignore", "pipe", "pipe"]
|
|
24523
24553
|
});
|
|
24524
24554
|
let stdout = "";
|
|
@@ -24722,7 +24752,11 @@ async function startPublishJob(deps, args) {
|
|
|
24722
24752
|
}
|
|
24723
24753
|
const child = spawn2("bash", [args.scriptPath, projDir, args.personaRoot ?? ""], {
|
|
24724
24754
|
cwd: projDir,
|
|
24725
|
-
env
|
|
24755
|
+
// 宿主给的 env 覆盖在 process.env 之上:daemon 进程本身没有这些变量(它们只在这一个
|
|
24756
|
+
// 子进程里活着)。云上宿主不传 extraEnv,凭据本来就在容器 env 里。
|
|
24757
|
+
// PATH 排在最后(与 ProjectStore.scaffold 同款):extraEnv 里若混进一条名叫 PATH 的条目,
|
|
24758
|
+
// 顶掉 PATH 会让脚本以「命令找不到」的形态崩在离现场很远的地方。
|
|
24759
|
+
env: { ...process.env, ...args.extraEnv ?? {}, PATH: process.env.PATH ?? "" },
|
|
24726
24760
|
stdio: ["ignore", "pipe", "pipe"]
|
|
24727
24761
|
});
|
|
24728
24762
|
const jobId = registry2.create({
|
|
@@ -25003,7 +25037,8 @@ function createPublishService() {
|
|
|
25003
25037
|
name: args.name,
|
|
25004
25038
|
sessionId: args.sessionId,
|
|
25005
25039
|
scriptPath: args.scriptPath,
|
|
25006
|
-
personaRoot: args.personaRoot
|
|
25040
|
+
personaRoot: args.personaRoot,
|
|
25041
|
+
...args.extraEnv ? { extraEnv: args.extraEnv } : {}
|
|
25007
25042
|
}
|
|
25008
25043
|
);
|
|
25009
25044
|
},
|
|
@@ -25020,7 +25055,7 @@ async function createProjectOnDisk(args) {
|
|
|
25020
25055
|
const { store, name, templateSrcDir, scaffoldScript, logger } = args;
|
|
25021
25056
|
const project = await store.create(name, args.reservedPorts);
|
|
25022
25057
|
try {
|
|
25023
|
-
const result = await store.scaffold(name, templateSrcDir, scaffoldScript);
|
|
25058
|
+
const result = await store.scaffold(name, templateSrcDir, scaffoldScript, args.extraEnv);
|
|
25024
25059
|
logger?.info("app-builder.scaffold.done", { name, stdout: result.stdout.slice(0, 200) });
|
|
25025
25060
|
} catch (err) {
|
|
25026
25061
|
const message = err instanceof Error ? err.message : String(err);
|