openxiangda-cli 2.0.0-alpha.99 → 2.0.0

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.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -8
  3. package/bin/run.js +2 -12
  4. package/dist/base.d.ts +30 -6
  5. package/dist/base.d.ts.map +1 -1
  6. package/dist/base.js +119 -22
  7. package/dist/base.js.map +1 -1
  8. package/dist/commands/accept.d.ts +8 -3
  9. package/dist/commands/accept.d.ts.map +1 -1
  10. package/dist/commands/admin.d.ts +32 -0
  11. package/dist/commands/admin.d.ts.map +1 -0
  12. package/dist/commands/admin.js +27 -0
  13. package/dist/commands/admin.js.map +1 -0
  14. package/dist/commands/auth.d.ts +30 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +13 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/cancel.d.ts +30 -0
  19. package/dist/commands/cancel.d.ts.map +1 -0
  20. package/dist/commands/cancel.js +12 -0
  21. package/dist/commands/cancel.js.map +1 -0
  22. package/dist/commands/check.d.ts +12 -3
  23. package/dist/commands/check.d.ts.map +1 -1
  24. package/dist/commands/check.js +21 -4
  25. package/dist/commands/check.js.map +1 -1
  26. package/dist/commands/context.d.ts +27 -0
  27. package/dist/commands/context.d.ts.map +1 -0
  28. package/dist/commands/context.js +10 -0
  29. package/dist/commands/context.js.map +1 -0
  30. package/dist/commands/create.d.ts +20 -3
  31. package/dist/commands/create.d.ts.map +1 -1
  32. package/dist/commands/create.js +396 -22
  33. package/dist/commands/create.js.map +1 -1
  34. package/dist/commands/deploy.d.ts +13 -3
  35. package/dist/commands/deploy.d.ts.map +1 -1
  36. package/dist/commands/deploy.js +17 -16
  37. package/dist/commands/deploy.js.map +1 -1
  38. package/dist/commands/dev.d.ts +10 -3
  39. package/dist/commands/dev.d.ts.map +1 -1
  40. package/dist/commands/dev.js +7 -4
  41. package/dist/commands/dev.js.map +1 -1
  42. package/dist/commands/docs.d.ts +30 -0
  43. package/dist/commands/docs.d.ts.map +1 -0
  44. package/dist/commands/docs.js +20 -0
  45. package/dist/commands/docs.js.map +1 -0
  46. package/dist/commands/login.d.ts +8 -3
  47. package/dist/commands/login.d.ts.map +1 -1
  48. package/dist/commands/login.js +1 -1
  49. package/dist/commands/login.js.map +1 -1
  50. package/dist/commands/logs.d.ts +10 -3
  51. package/dist/commands/logs.d.ts.map +1 -1
  52. package/dist/commands/logs.js +7 -3
  53. package/dist/commands/logs.js.map +1 -1
  54. package/dist/commands/retry.d.ts +30 -0
  55. package/dist/commands/retry.d.ts.map +1 -0
  56. package/dist/commands/retry.js +12 -0
  57. package/dist/commands/retry.js.map +1 -0
  58. package/dist/commands/rollback.d.ts +11 -3
  59. package/dist/commands/rollback.d.ts.map +1 -1
  60. package/dist/commands/rollback.js +9 -3
  61. package/dist/commands/rollback.js.map +1 -1
  62. package/dist/commands/skill.d.ts +9 -3
  63. package/dist/commands/skill.d.ts.map +1 -1
  64. package/dist/commands/skill.js +9 -2
  65. package/dist/commands/skill.js.map +1 -1
  66. package/dist/commands/spec.d.ts +42 -0
  67. package/dist/commands/spec.d.ts.map +1 -0
  68. package/dist/commands/spec.js +123 -0
  69. package/dist/commands/spec.js.map +1 -0
  70. package/dist/commands/start.d.ts +28 -0
  71. package/dist/commands/start.d.ts.map +1 -0
  72. package/dist/commands/start.js +18 -0
  73. package/dist/commands/start.js.map +1 -0
  74. package/dist/commands/status.d.ts +9 -3
  75. package/dist/commands/status.d.ts.map +1 -1
  76. package/dist/commands/status.js +10 -3
  77. package/dist/commands/status.js.map +1 -1
  78. package/dist/commands/stop.d.ts +28 -0
  79. package/dist/commands/stop.d.ts.map +1 -0
  80. package/dist/commands/stop.js +18 -0
  81. package/dist/commands/stop.js.map +1 -0
  82. package/dist/create-workspace.d.ts +36 -0
  83. package/dist/create-workspace.d.ts.map +1 -1
  84. package/dist/create-workspace.js +366 -8
  85. package/dist/create-workspace.js.map +1 -1
  86. package/dist/studio-events.d.ts +9 -0
  87. package/dist/studio-events.d.ts.map +1 -0
  88. package/dist/studio-events.js +30 -0
  89. package/dist/studio-events.js.map +1 -0
  90. package/package.json +15 -6
  91. package/template/AGENTS.md +25 -21
  92. package/template/README.md +31 -12
  93. package/template/apps/web/e2e/README.md +7 -0
  94. package/template/apps/web/package.json +4 -2
  95. package/template/apps/web/playwright.config.ts +4 -3
  96. package/template/apps/web/src/document.css +5 -0
  97. package/template/apps/web/src/main.tsx +48 -3
  98. package/template/apps/web/src/user-end/tailwind.css +5 -0
  99. package/template/apps/web/test/loopback.test.ts +8 -2
  100. package/template/apps/web/test/standard-user-surfaces.typecheck.tsx +27 -0
  101. package/template/apps/web/vite.config.ts +5 -1
  102. package/template/appspec/app.md +56 -0
  103. package/template/openxiangda.config.ts +50 -25
  104. package/template/package.json +4 -4
  105. package/template/packages/contracts/package.json +1 -1
  106. package/template/packages/contracts/src/generated.ts +143 -2
  107. package/template/apps/server/Dockerfile +0 -20
  108. package/template/apps/server/package.json +0 -27
  109. package/template/apps/server/src/app.module.ts +0 -43
  110. package/template/apps/server/src/main.ts +0 -5
  111. package/template/apps/server/test/smoke.test.ts +0 -16
  112. package/template/apps/server/tsconfig.json +0 -9
  113. package/template/apps/web/data-api-live.e2e.html +0 -15
  114. package/template/apps/web/e2e/client-fixture.ts +0 -5
  115. package/template/apps/web/e2e/data-api-live-fixture.tsx +0 -146
  116. package/template/apps/web/e2e/data-api-live.spec.ts +0 -138
  117. package/template/apps/web/e2e/field-protocol-fixture.tsx +0 -347
  118. package/template/apps/web/e2e/field-protocol.spec.ts +0 -186
  119. package/template/apps/web/e2e/resources.spec.ts +0 -285
  120. package/template/apps/web/e2e/workflow.spec.ts +0 -329
  121. package/template/apps/web/field-protocol.e2e.html +0 -15
  122. package/template/apps/web/scripts/check.mjs +0 -43
  123. package/template/apps/web/test/contracts.test.ts +0 -99
  124. package/template/scripts/verify-template-budget.mjs +0 -49
@@ -1,28 +1,35 @@
1
1
  import { spawnSync } from "node:child_process";
2
+ import { createHash, randomUUID } from "node:crypto";
2
3
  import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync, } from "node:fs";
3
4
  import { dirname, join, relative, resolve } from "node:path";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
6
  import { collectWorkspaceToolchainDependencies, isOpenXiangdaPackageName, OpenXiangdaApplicationServices, toolchainCapsuleDiagnostic, } from "openxiangda-devkit-core";
7
+ import { WORKSPACE_TEMPLATE_BINDING_SCHEMA_VERSION, STUDIO_APPLICATION_AUTHORITY, STUDIO_WORKSPACE_BINDING_SCHEMA_VERSION, } from "openxiangda-contracts";
5
8
  import { resolveCliToolchainCapsule, resolveDefaultTemplate, } from "./toolchain-capsule.js";
9
+ const TEMPLATE_MAX_FILES = 2_000;
10
+ const TEMPLATE_MAX_BYTES = 20 * 1024 * 1024;
11
+ const TEMPLATE_BINDING_PATH = join(".openxiangda", "template.json");
12
+ const STUDIO_BINDING_PATH = join(".openxiangda", "studio-binding.json");
6
13
  export async function createWorkspace(input) {
7
14
  const target = resolve(input.directory);
8
- const template = input.templateRoot
9
- ? resolve(input.templateRoot)
10
- : resolveDefaultTemplate();
15
+ const template = resolveWorkspaceTemplate({
16
+ ...(input.templateRoot ? { templateRoot: input.templateRoot } : {}),
17
+ ...(input.templateRef ? { templateRef: input.templateRef } : {}),
18
+ ...(input.templateDigest ? { templateDigest: input.templateDigest } : {}),
19
+ });
11
20
  if (!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(input.appCode)) {
12
21
  throw new Error("APP_CODE_INVALID: appCode 必须是 kebab-case");
13
22
  }
14
23
  if (!input.name.trim())
15
24
  throw new Error("APP_NAME_REQUIRED");
16
- if (!existsSync(template))
17
- throw new Error(`TEMPLATE_NOT_FOUND: ${template}`);
18
25
  if (existsSync(target) && readdirSync(target).length > 0) {
19
26
  throw new Error(`TARGET_DIRECTORY_NOT_EMPTY: ${target}`);
20
27
  }
21
28
  mkdirSync(dirname(target), { recursive: true });
22
- cpSync(template, target, {
29
+ cpSync(template.root, target, {
23
30
  recursive: true,
24
31
  errorOnExist: false,
25
- filter: source => includeTemplatePath(template, source),
32
+ filter: source => includeTemplatePath(template.root, source),
26
33
  });
27
34
  const packedGitignore = join(target, "_gitignore");
28
35
  if (existsSync(packedGitignore))
@@ -33,7 +40,8 @@ export async function createWorkspace(input) {
33
40
  ["openxiangda-application", input.appCode],
34
41
  ["OpenXiangda 应用", input.name],
35
42
  ]);
36
- const toolchainCapsule = resolveCliToolchainCapsule(template);
43
+ writeWorkspaceTemplateBinding(target, template.binding);
44
+ const toolchainCapsule = resolveCliToolchainCapsule(template.root);
37
45
  normalizePublishedDependencies(target, new Map(Object.entries(toolchainCapsule.packages)));
38
46
  const localSdkRoot = input.localSdkRoot
39
47
  ? configureLocalSdk(target, input.localSdkRoot)
@@ -52,9 +60,359 @@ export async function createWorkspace(input) {
52
60
  installed: install,
53
61
  generated: install,
54
62
  generationDeferred: !install,
63
+ template: template.binding,
55
64
  ...(localSdkRoot ? { localSdkRoot } : {}),
56
65
  };
57
66
  }
67
+ export function resolveWorkspaceTemplate(input) {
68
+ const requestedRef = String(input.templateRef || "").trim();
69
+ let root;
70
+ let ref;
71
+ if (input.templateRoot) {
72
+ root = resolve(input.templateRoot);
73
+ ref = requestedRef || pathToFileURL(root).href;
74
+ }
75
+ else if (!requestedRef || requestedRef === "builtin:application") {
76
+ root = resolveDefaultTemplate();
77
+ ref = "builtin:application";
78
+ }
79
+ else if (requestedRef.startsWith("file:")) {
80
+ try {
81
+ root = resolve(fileURLToPath(requestedRef));
82
+ }
83
+ catch {
84
+ throw new Error(`TEMPLATE_REF_INVALID: ${requestedRef}`);
85
+ }
86
+ ref = pathToFileURL(root).href;
87
+ }
88
+ else if (/^[a-z][a-z0-9+.-]*:/i.test(requestedRef)) {
89
+ throw new Error(`TEMPLATE_REF_UNSUPPORTED: CLI 只接受 builtin:application 或本地 file 引用`);
90
+ }
91
+ else {
92
+ root = resolve(requestedRef);
93
+ ref = pathToFileURL(root).href;
94
+ }
95
+ if (!existsSync(root) || !statSync(root).isDirectory()) {
96
+ throw new Error(`TEMPLATE_NOT_FOUND: ${root}`);
97
+ }
98
+ const digest = calculateTemplateDigest(root);
99
+ if (input.templateDigest) {
100
+ const expected = normalizeTemplateDigest(input.templateDigest);
101
+ if (expected !== digest) {
102
+ throw Object.assign(new Error(`TEMPLATE_DIGEST_MISMATCH: 期望 ${expected},实际 ${digest}`), {
103
+ code: "TEMPLATE_DIGEST_MISMATCH",
104
+ retryable: false,
105
+ data: { expected, actual: digest },
106
+ });
107
+ }
108
+ }
109
+ return {
110
+ root,
111
+ binding: {
112
+ schemaVersion: WORKSPACE_TEMPLATE_BINDING_SCHEMA_VERSION,
113
+ ref,
114
+ digest,
115
+ },
116
+ };
117
+ }
118
+ export function calculateTemplateDigest(templateRoot) {
119
+ const root = resolve(templateRoot);
120
+ const hash = createHash("sha256");
121
+ let fileCount = 0;
122
+ let totalBytes = 0;
123
+ const visit = (directory) => {
124
+ for (const entry of readdirSync(directory, { withFileTypes: true }).sort((left, right) => left.name.localeCompare(right.name))) {
125
+ const path = join(directory, entry.name);
126
+ if (!includeTemplatePath(root, path))
127
+ continue;
128
+ const relativePath = relative(root, path).replaceAll("\\", "/");
129
+ if (entry.isSymbolicLink()) {
130
+ throw new Error(`TEMPLATE_SYMLINK_FORBIDDEN: ${relativePath}`);
131
+ }
132
+ if (entry.isDirectory()) {
133
+ visit(path);
134
+ continue;
135
+ }
136
+ if (!entry.isFile())
137
+ continue;
138
+ fileCount += 1;
139
+ const size = statSync(path).size;
140
+ totalBytes += size;
141
+ if (fileCount > TEMPLATE_MAX_FILES) {
142
+ throw new Error(`TEMPLATE_FILE_LIMIT_EXCEEDED: 模板最多 ${TEMPLATE_MAX_FILES} 个文件`);
143
+ }
144
+ if (totalBytes > TEMPLATE_MAX_BYTES) {
145
+ throw new Error(`TEMPLATE_BYTES_LIMIT_EXCEEDED: 模板最多 ${TEMPLATE_MAX_BYTES} 字节`);
146
+ }
147
+ hash.update(`file\0${relativePath}\0${size}\0`, "utf8");
148
+ hash.update(readFileSync(path));
149
+ hash.update("\0", "utf8");
150
+ }
151
+ };
152
+ visit(root);
153
+ return `sha256:${hash.digest("hex")}`;
154
+ }
155
+ export function readWorkspaceTemplateBinding(workspaceRoot) {
156
+ const path = join(resolve(workspaceRoot), TEMPLATE_BINDING_PATH);
157
+ if (!existsSync(path))
158
+ return null;
159
+ let value;
160
+ try {
161
+ value = JSON.parse(readFileSync(path, "utf8"));
162
+ }
163
+ catch {
164
+ throw new Error(`WORKSPACE_TEMPLATE_BINDING_INVALID: ${path}`);
165
+ }
166
+ if (value.schemaVersion !== WORKSPACE_TEMPLATE_BINDING_SCHEMA_VERSION ||
167
+ typeof value.ref !== "string" ||
168
+ !value.ref ||
169
+ typeof value.digest !== "string" ||
170
+ !/^sha256:[0-9a-f]{64}$/.test(value.digest)) {
171
+ throw new Error(`WORKSPACE_TEMPLATE_BINDING_INVALID: ${path}`);
172
+ }
173
+ return value;
174
+ }
175
+ export function ensureStudioWorkspaceBinding(workspaceRoot, input) {
176
+ const root = resolve(workspaceRoot);
177
+ const expected = preparedStudioWorkspaceBinding(input);
178
+ const current = readStudioWorkspaceBinding(root);
179
+ if (current)
180
+ assertStudioBindingIdentity(current, expected);
181
+ const prepared = current || expected;
182
+ if (!current)
183
+ writeStudioWorkspaceBinding(root, prepared);
184
+ if (!input.compiler)
185
+ return prepared;
186
+ if (prepared.compiler) {
187
+ if (!sameJson(prepared.compiler, input.compiler)) {
188
+ throw studioBindingError("STUDIO_WORKSPACE_COMPILER_DRIFT", "已有工作区的初始化编译摘要与本次结果不一致", "/compiler", prepared.compiler, input.compiler);
189
+ }
190
+ return prepared;
191
+ }
192
+ const compiled = {
193
+ ...prepared,
194
+ state: "compiled",
195
+ compiler: input.compiler,
196
+ };
197
+ writeStudioWorkspaceBinding(root, compiled);
198
+ return compiled;
199
+ }
200
+ export function readStudioWorkspaceBinding(workspaceRoot) {
201
+ const path = join(resolve(workspaceRoot), STUDIO_BINDING_PATH);
202
+ if (!existsSync(path))
203
+ return null;
204
+ let value;
205
+ try {
206
+ value = JSON.parse(readFileSync(path, "utf8"));
207
+ }
208
+ catch {
209
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_INVALID", "Studio 工作区绑定文件不是有效 JSON", "/");
210
+ }
211
+ if (!isStudioWorkspaceBinding(value)) {
212
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_INVALID", `Studio 工作区绑定不符合 ${STUDIO_WORKSPACE_BINDING_SCHEMA_VERSION}`, "/");
213
+ }
214
+ return value;
215
+ }
216
+ export function studioWorkspaceBindingDigest(binding) {
217
+ return `sha256:${createHash("sha256")
218
+ .update(canonicalJson(binding), "utf8")
219
+ .digest("hex")}`;
220
+ }
221
+ export function studioWorkspaceInitializationDigest(initialization) {
222
+ const { workspace: _invocationState, ...stableInitialization } = initialization;
223
+ return `sha256:${createHash("sha256")
224
+ .update(canonicalJson(stableInitialization), "utf8")
225
+ .digest("hex")}`;
226
+ }
227
+ function writeWorkspaceTemplateBinding(workspaceRoot, binding) {
228
+ const path = join(workspaceRoot, TEMPLATE_BINDING_PATH);
229
+ mkdirSync(dirname(path), { recursive: true });
230
+ writeFileSync(path, `${JSON.stringify(binding, null, 2)}\n`, "utf8");
231
+ }
232
+ function preparedStudioWorkspaceBinding(input) {
233
+ const siteBaseUrl = normalizeSiteBaseUrl(input.siteBaseUrl);
234
+ for (const [field, value] of [
235
+ ["projectId", input.projectId],
236
+ ["provisioningRunId", input.provisioningRunId],
237
+ ]) {
238
+ if (!isPlatformUuid(value)) {
239
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_INPUT_INVALID", `${field} 必须是平台签发的 UUID`, `/${field}`);
240
+ }
241
+ }
242
+ if (!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(input.appType)) {
243
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_INPUT_INVALID", "appType 必须与 --app-code 一样是 kebab-case", "/appType");
244
+ }
245
+ const appName = input.appName.trim();
246
+ if (!appName || appName.length > 256) {
247
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_INPUT_INVALID", "appName 必须为 1 到 256 个字符", "/appName");
248
+ }
249
+ return {
250
+ schemaVersion: STUDIO_WORKSPACE_BINDING_SCHEMA_VERSION,
251
+ applicationAuthority: STUDIO_APPLICATION_AUTHORITY,
252
+ siteBaseUrl,
253
+ projectId: input.projectId,
254
+ provisioningRunId: input.provisioningRunId,
255
+ appType: input.appType,
256
+ appName,
257
+ template: input.template,
258
+ state: "prepared",
259
+ compiler: null,
260
+ };
261
+ }
262
+ function assertStudioBindingIdentity(current, expected) {
263
+ for (const field of [
264
+ "applicationAuthority",
265
+ "siteBaseUrl",
266
+ "projectId",
267
+ "provisioningRunId",
268
+ "appType",
269
+ "appName",
270
+ "template",
271
+ ]) {
272
+ if (!sameJson(current[field], expected[field])) {
273
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_MISMATCH", `已有工作区的 ${field} 与本次 Studio 初始化请求不一致`, `/${field}`, current[field], expected[field]);
274
+ }
275
+ }
276
+ }
277
+ function writeStudioWorkspaceBinding(workspaceRoot, binding) {
278
+ const path = join(workspaceRoot, STUDIO_BINDING_PATH);
279
+ mkdirSync(dirname(path), { recursive: true });
280
+ const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;
281
+ writeFileSync(temporary, `${JSON.stringify(binding, null, 2)}\n`, {
282
+ encoding: "utf8",
283
+ mode: 0o600,
284
+ flag: "wx",
285
+ });
286
+ renameSync(temporary, path);
287
+ }
288
+ function isStudioWorkspaceBinding(value) {
289
+ if (!isRecord(value))
290
+ return false;
291
+ if (!hasExactKeys(value, [
292
+ "schemaVersion",
293
+ "applicationAuthority",
294
+ "siteBaseUrl",
295
+ "projectId",
296
+ "provisioningRunId",
297
+ "appType",
298
+ "appName",
299
+ "template",
300
+ "state",
301
+ "compiler",
302
+ ]) ||
303
+ value.schemaVersion !== STUDIO_WORKSPACE_BINDING_SCHEMA_VERSION ||
304
+ value.applicationAuthority !== STUDIO_APPLICATION_AUTHORITY ||
305
+ !validSiteBaseUrl(value.siteBaseUrl) ||
306
+ !isPlatformUuid(value.projectId) ||
307
+ !isPlatformUuid(value.provisioningRunId) ||
308
+ typeof value.appType !== "string" ||
309
+ !/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(value.appType) ||
310
+ !validBoundedString(value.appName, 256) ||
311
+ !isWorkspaceTemplateBinding(value.template) ||
312
+ (value.state !== "prepared" && value.state !== "compiled")) {
313
+ return false;
314
+ }
315
+ if (value.state === "prepared")
316
+ return value.compiler === null;
317
+ return isStudioCompilerSummary(value.compiler);
318
+ }
319
+ function isWorkspaceTemplateBinding(value) {
320
+ return (isRecord(value) &&
321
+ hasExactKeys(value, ["schemaVersion", "ref", "digest"]) &&
322
+ value.schemaVersion === WORKSPACE_TEMPLATE_BINDING_SCHEMA_VERSION &&
323
+ validBoundedString(value.ref, 4096) &&
324
+ typeof value.digest === "string" &&
325
+ /^sha256:[0-9a-f]{64}$/.test(value.digest));
326
+ }
327
+ function isStudioCompilerSummary(value) {
328
+ return (isRecord(value) &&
329
+ hasExactKeys(value, [
330
+ "toolchainVersion",
331
+ "contractVersion",
332
+ "compilerContractVersion",
333
+ "configurationDigest",
334
+ "contractDigest",
335
+ "aiCatalogDigest",
336
+ ]) &&
337
+ validBoundedString(value.toolchainVersion, 128) &&
338
+ validBoundedString(value.contractVersion, 128) &&
339
+ validBoundedString(value.compilerContractVersion, 128) &&
340
+ validDigest(value.configurationDigest) &&
341
+ validDigest(value.contractDigest) &&
342
+ validDigest(value.aiCatalogDigest));
343
+ }
344
+ function normalizeSiteBaseUrl(value) {
345
+ const normalized = String(value || "").trim().replace(/\/+$/, "");
346
+ if (!validSiteBaseUrl(normalized)) {
347
+ throw studioBindingError("STUDIO_WORKSPACE_BINDING_INPUT_INVALID", "siteBaseUrl 必须是无用户名密码、query 或 fragment 的 HTTPS 地址", "/siteBaseUrl");
348
+ }
349
+ return normalized;
350
+ }
351
+ function validSiteBaseUrl(value) {
352
+ if (typeof value !== "string" || value.length > 2048)
353
+ return false;
354
+ try {
355
+ const url = new URL(value);
356
+ return (url.protocol === "https:" &&
357
+ !url.username &&
358
+ !url.password &&
359
+ !url.search &&
360
+ !url.hash &&
361
+ value === value.replace(/\/+$/, ""));
362
+ }
363
+ catch {
364
+ return false;
365
+ }
366
+ }
367
+ function validBoundedString(value, maxLength) {
368
+ return (typeof value === "string" && value.length > 0 && value.length <= maxLength);
369
+ }
370
+ export function isPlatformUuid(value) {
371
+ return (typeof value === "string" &&
372
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value));
373
+ }
374
+ function validDigest(value) {
375
+ return typeof value === "string" && /^[0-9a-f]{64}$/.test(value);
376
+ }
377
+ function isRecord(value) {
378
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
379
+ }
380
+ function hasExactKeys(value, keys) {
381
+ return (Object.keys(value).sort().join("\0") === [...keys].sort().join("\0"));
382
+ }
383
+ function sameJson(left, right) {
384
+ return canonicalJson(left) === canonicalJson(right);
385
+ }
386
+ function canonicalJson(value) {
387
+ if (Array.isArray(value)) {
388
+ return `[${value.map(item => canonicalJson(item)).join(",")}]`;
389
+ }
390
+ if (isRecord(value)) {
391
+ return `{${Object.keys(value)
392
+ .sort()
393
+ .map(key => `${JSON.stringify(key)}:${canonicalJson(value[key])}`)
394
+ .join(",")}}`;
395
+ }
396
+ return JSON.stringify(value) ?? "null";
397
+ }
398
+ function studioBindingError(code, message, pointer, current, requested) {
399
+ return Object.assign(new Error(`${code}: ${message}`), {
400
+ code,
401
+ retryable: false,
402
+ data: {
403
+ pointer,
404
+ ...(current !== undefined ? { current } : {}),
405
+ ...(requested !== undefined ? { requested } : {}),
406
+ },
407
+ });
408
+ }
409
+ function normalizeTemplateDigest(value) {
410
+ const digest = String(value || "").trim().toLowerCase();
411
+ if (!/^sha256:[0-9a-f]{64}$/.test(digest)) {
412
+ throw new Error("TEMPLATE_DIGEST_INVALID: templateDigest 必须是 sha256:<64位小写十六进制>");
413
+ }
414
+ return digest;
415
+ }
58
416
  export async function prepareWorkspace(directory, options = {}) {
59
417
  const root = resolve(directory);
60
418
  const toolchainCapsule = options.toolchainCapsule || resolveCliToolchainCapsule();
@@ -1 +1 @@
1
- {"version":3,"file":"create-workspace.js","sourceRoot":"","sources":["../src/create-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-workspace.js","sourceRoot":"","sources":["../src/create-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type StudioCliEvent, type StudioCliEventType } from "openxiangda-contracts";
2
+ export declare class StudioCliEventStream {
3
+ readonly runId: string;
4
+ private readonly write;
5
+ private sequence;
6
+ constructor(runId: string, write?: (event: StudioCliEvent) => void);
7
+ emit(type: StudioCliEventType, payload: Record<string, unknown>): StudioCliEvent;
8
+ }
9
+ //# sourceMappingURL=studio-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-events.d.ts","sourceRoot":"","sources":["../src/studio-events.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,oBAAoB;IAI7B,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,OAAO,CAAC,QAAQ,CAAK;gBAGV,KAAK,EAAE,MAAM,EACL,KAAK,GAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAElD;IAUH,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAahE"}
@@ -0,0 +1,30 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { STUDIO_CLI_EVENT_SCHEMA_VERSION, } from "openxiangda-contracts";
3
+ export class StudioCliEventStream {
4
+ runId;
5
+ write;
6
+ sequence = 0;
7
+ constructor(runId, write = event => {
8
+ process.stdout.write(`${JSON.stringify(event)}\n`);
9
+ }) {
10
+ this.runId = runId;
11
+ this.write = write;
12
+ if (!runId || runId.length > 256) {
13
+ throw Object.assign(new Error("STUDIO_RUN_ID_INVALID: runId 必须为 1 到 256 个字符"), { code: "STUDIO_RUN_ID_INVALID", retryable: false });
14
+ }
15
+ }
16
+ emit(type, payload) {
17
+ const event = {
18
+ schemaVersion: STUDIO_CLI_EVENT_SCHEMA_VERSION,
19
+ eventId: randomUUID(),
20
+ runId: this.runId,
21
+ seq: ++this.sequence,
22
+ type,
23
+ timestamp: new Date().toISOString(),
24
+ payload,
25
+ };
26
+ this.write(event);
27
+ return event;
28
+ }
29
+ }
30
+ //# sourceMappingURL=studio-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-events.js","sourceRoot":"","sources":["../src/studio-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,+BAA+B,GAGhC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,OAAO,oBAAoB;IAIpB;IACQ;IAJX,QAAQ,GAAG,CAAC,CAAC;IAErB,YACW,KAAa,EACL,QAAyC,KAAK,CAAC,EAAE;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;QAHQ,UAAK,GAAL,KAAK,CAAQ;QACL,UAAK,GAAL,KAAK,CAErB;QAED,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,8CAA8C,CAAC,EACzD,EAAE,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,KAAK,EAAE,CACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAwB,EAAE,OAAgC;QAC7D,MAAM,KAAK,GAAmB;YAC5B,aAAa,EAAE,+BAA+B;YAC9C,OAAO,EAAE,UAAU,EAAE;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ;YACpB,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO;SACR,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "openxiangda-cli",
3
- "version": "2.0.0-alpha.99",
4
- "description": "Thin application-level CLI for OpenXiangda 2.0.",
3
+ "version": "2.0.0",
4
+ "description": "OpenXiangda 2.0 应用生命周期命令、创建器与模板。",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -21,10 +21,10 @@
21
21
  ],
22
22
  "dependencies": {
23
23
  "@oclif/core": "4.13.3",
24
- "openxiangda-contracts": "2.0.0-alpha.48",
25
- "openxiangda-devkit-core": "2.0.0-alpha.62",
26
- "openxiangda-mcp": "2.0.0-alpha.62",
27
- "openxiangda-skill-kit": "2.0.0-alpha.80"
24
+ "openxiangda-contracts": "2.0.0",
25
+ "openxiangda-devkit-core": "2.0.0",
26
+ "openxiangda-mcp": "2.0.0",
27
+ "openxiangda-skill-kit": "2.0.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "tsx": "4.23.12",
@@ -40,6 +40,15 @@
40
40
  "topicSeparator": " "
41
41
  },
42
42
  "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/1377385356/openxiangda.git",
46
+ "directory": "packages/cli"
47
+ },
48
+ "homepage": "https://github.com/1377385356/openxiangda",
49
+ "bugs": {
50
+ "url": "https://github.com/1377385356/openxiangda/issues"
51
+ },
43
52
  "scripts": {
44
53
  "build": "node ../../scripts/prune-package-dist.mjs && tsc -p tsconfig.json",
45
54
  "build:release": "node ../../scripts/prune-package-dist.mjs && pnpm build",
@@ -1,22 +1,26 @@
1
- # OpenXiangda 2.0 Application Agent Contract
1
+ # 应用开发约定
2
2
 
3
- - Use only the workspace-pinned CLI: `pnpm openxiangda <command>`. Never invoke a bare global `openxiangda` inside a 2.0 task.
4
- - Use Vite, React Router, Refine Core and Ant Design. Do not add Umi, ProComponents or another admin shell.
5
- - Declare each resource once in `openxiangda.config.ts` with only `code`, `name`, `fields` and optional list/layout/data-policy settings. Each field owns type, label, required state, Surface flags, reference/file metadata and access. Resource codes are lower kebab-case.
6
- - Never write resource-level `schemaVersion`, `appCode`, `schema`, `surface`, `capabilities`, `fieldPolicies` or `platform/data` modules. The compiler derives the strict DataResource, CRUD capabilities, Surface and AI Schema. The application manifest still starts with its one top-level `schemaVersion: 3`.
7
- - Ordinary list/get/create/update/delete, filters, export and batch operations use the platform Native Data API. Do not create Function CRUD or NestJS wrappers.
8
- - Add NestJS only for a named business action that needs a cross-resource transaction, an invariant or an external side effect.
9
- - Every interactive business action binds `@OpenXiangdaOperation(operation)` and injects `OpenXiangdaBusinessDataApiService` or `OpenXiangdaStandardOperations`. The platform checks the action capability once at App API ingress; the trusted backend then has full Data access only to its exact application/environment while audit retains the initiating user. Do not author `authorizationJSON` or reapply the user's resource, row and field permissions inside the action.
10
- - A NestJS backend declares only `enabled`, `isolation: 'shared' | 'dedicated'` and `resourceProfile: 'light' | 'standard'`. Never put raw Kubernetes resources, replicas, ports or environment maps in application metadata; the platform owns capacity and scaling.
11
- - Use the current logged-in user and the union of that user's application roles. The generated client uses same-origin cookies and does not transmit a RoleSession header. Business code must not persist a platform Token or authorization result and must not implement a second identity path.
12
- - Fields inherit the resource read/create/update capabilities. Use field `access` only to tighten them; arrays are all-of and `false` is explicit deny. There is no `write` fallback.
13
- - Field `type` is semantic, never a hand-authored database type. The supported catalog is exactly `text.short`, `text.long`, `text.rich`, `number.integer`, `number.decimal`, `boolean`, `date`, `time`, `datetime`, `date-range`, `datetime-range`, `option.single`, `option.multiple`, `cascade.single`, `cascade.multiple`, `user.single`, `user.multiple`, `department.single`, `department.multiple`, `resource-ref.single`, `resource-ref.multiple`, `file`, `image`, `signature`, `address`, `location`, `json`, `serial-number`, `uuid` and `subtable`. The compiler alone derives PostgreSQL columns, constraints and indexes.
14
- - Declare every custom operation capability in `authz.capabilities` with `kind: 'backend'`, then reference that same code from the operation and its allowed roles. Generated resource CRUD capabilities do not go in this catalog.
15
- - Visitor duplicate protection uses `createVisitorReservation({ duplicateMatch: { fieldCode: submittedValue }, ... })`. `duplicateMatch` is a non-empty value map, never a field-name array, and no mutable pre-read is allowed.
16
- - Desktop and mobile pages share values, validation and authorization, but use separate renderers. Options, members and departments store display snapshots; resource references store direct JSON display values; attachments, images and signatures use platform-managed file references.
17
- - `option.*`, `user.*`, `department.*` and `resource-ref.*` values never collapse to scalar IDs. Single values store one labeled object and multiple values store object arrays. `resource-ref.*` JSON is not a foreign key, trusted target snapshot or automatically refreshed copy; current target state is read by `resourceCode` plus `value`. A resource source `labelField` must be `text.short` or `text.long`; `serial-number` is allowed in source search, description and snapshot fields, but not as the label. `location` accepts only exact WGS84 coordinates captured by DingTalk or browser geolocation; it has no manual input or `manual` source. Roles that consume directory-backed fields explicitly include `app:<app-code>:directory:read`.
18
- - Derive role grants with `resourceCapabilityCodes(appCode, resourceCode)`. Declare current-user rows only with `currentUserDataPolicy(...)`; do not invent operators, values or alternate current-user spellings.
19
- - Do not add compatibility aliases, migration branches or silent fallbacks for an earlier 2.0 alpha contract. Replace an incorrect contract and regenerate the application.
20
- - Standard Workflow and Notification Hub are optional 2.0 modules. Enable them only through the canonical `openxiangda.config.ts` declarations and generated clients; never copy 1.x workflow/message code, tables, APIs, templates or callbacks into this workspace. Keep ordinary CRUD and application-specific state machines independent of them.
21
- - Run `pnpm openxiangda check --json` after contract changes and read `data.sealedArtifact`; check never seals, and an older `.openxiangda/build/app-package.json` is not the current check result. Use `pnpm openxiangda accept --plan <file>` only for optional real preproduction identity acceptance; it never blocks delivery. Deploy with `pnpm openxiangda deploy`, inspect with `pnpm openxiangda status` and `pnpm openxiangda logs`, and use the platform rollback command rather than mutating K3s directly.
22
- - AI-native clients start the workspace protocol through the same pinned binary: `pnpm exec openxiangda --mcp-stdio --cwd <workspace>`. Read `openxiangda://workspace/contracts` or call `contract_describe`, and require its `aiCatalog` and `aiCatalogDigest` to match the normal compiler output. This is a stdio transport mode, not a ninth CLI command. Never write an application MCP server, Catalog file, preview store or second authorization path.
3
+ <!-- OPENXIANGDA:BEGIN -->
4
+ ## 平台约定
5
+
6
+ 本项目使用 OpenXiangda 2.0。进入项目后以本地精确依赖和锁文件为准,使用 `pnpm openxiangda`;先运行 `context --json` 确认版本和绑定,使用 `docs` 按任务读取当前中文资料。
7
+
8
+ - 模型、页面、导航和权限由应用声明一次;编译器生成契约。业务代码不改生成结果、不创建 platform/data、不复制平台 Router、字段组件、客户端或权限状态。
9
+ - 当前用户、角色并集、数据授权和部署状态归平台;应用不保存凭据或授权快照。普通 CRUD Data API,真实业务动作才按需启用 Nest。
10
+ - 标准业务字段使用 `openxiangda/field-kit`;PC 补充控件使用 antd,移动使用有作用域的 `openxiangda/mobile` MobileSurface,不引入上游全局重置。
11
+ - 无账号表单读取 `docs public-access`,使用 frontend.publicAccess 和专用客户端;标准审批、通知和后端均按需启用。
12
+ - 日常使用 dev 和聚焦测试。只验证时使用 check;授权部署时直接 deploy,它已包含检查、测试和构建。生产必须指定成功测试运行并复用同一版本。
13
+ - deploy 默认持续反馈并跟踪平台结果;观察中断用 status <运行ID> --watch 继续,保留原运行,不重新构建。平台部署成功后仍需真实角色业务验收。
14
+ - 开发开始先同步远端默认主分支;同一工作区只有一个写者。发布前将本轮源码、生成契约与记录合入并推送主分支,从干净且同步的主分支冻结候选;任务分支已推送不等于已合入主线。不要覆盖其他会话改动或自动合并所有分支。
15
+ - 默认读取 AppSpec 当前规格、设计索引、活动变更和阶段缺口。新应用先用自然语言对话主动发现模块,完成本期 PRD、旅程、逐页交互、视觉/原型、权限与架构设计及实际确认,形成内容摘要绑定的评审基线后再制定实施计划和实现业务;参见 docs product-design docs interaction-patterns。既有应用仅修订受影响设计,不把 AI 建议写成用户确认。总纲保存长期规则,本轮变更关联需求、任务、源码与 AC 验收;测试发布前完成设计与计划,生产晋级前保存绑定原测试运行及包摘要的实际验收报告。更新当前规则、验证与发布结果和交接后归档;不得编造确认或通过结果。
16
+ - 根据变化风险记录业务意图。无行为变化引用已有记录;已有授权和已确认意图不重复向用户请求机械确认。真实角色和浏览器验收与本地测试分别记录。
17
+ - 失败保留错误码、指针和原候选;查询平台状态后使用允许的恢复操作,不自动重放未知结果。
18
+
19
+ MCP 使用同一项目 CLI:`pnpm exec openxiangda --mcp-stdio --cwd <workspace>`。先读取 workspace_context,再按任务读取 docs_read 和当前契约。登录、创建及长期 dev 使用 CLI/终端。
20
+
21
+ 详细用法:`pnpm openxiangda docs product-design`、`docs interaction-patterns`、`docs development`、`docs frontend`、`docs data-authz`、`docs administration`、`docs testing`、`docs delivery`。按需加载,无需每次通读全部资料。
22
+ <!-- OPENXIANGDA:END -->
23
+
24
+ ## 项目自有约定
25
+
26
+ 在此补充本项目的业务范围和团队要求;平台资料刷新保留本节内容。