openxiangda-devkit-core 2.0.0-alpha.12 → 2.0.0-alpha.121

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 (188) hide show
  1. package/README.md +3 -8
  2. package/dist/app-spec.d.ts +228 -0
  3. package/dist/app-spec.d.ts.map +1 -0
  4. package/dist/app-spec.js +1443 -0
  5. package/dist/app-spec.js.map +1 -0
  6. package/dist/application-services.d.ts +996 -49
  7. package/dist/application-services.d.ts.map +1 -1
  8. package/dist/application-services.js +1348 -197
  9. package/dist/application-services.js.map +1 -1
  10. package/dist/application-ui-contract.d.ts +5 -0
  11. package/dist/application-ui-contract.d.ts.map +1 -0
  12. package/dist/application-ui-contract.js +149 -0
  13. package/dist/application-ui-contract.js.map +1 -0
  14. package/dist/backend-image-build.d.ts +23 -0
  15. package/dist/backend-image-build.d.ts.map +1 -0
  16. package/dist/backend-image-build.js +204 -0
  17. package/dist/backend-image-build.js.map +1 -0
  18. package/dist/command-process.d.ts +14 -0
  19. package/dist/command-process.d.ts.map +1 -0
  20. package/dist/command-process.js +51 -0
  21. package/dist/command-process.js.map +1 -0
  22. package/dist/command-registry.d.ts +123 -366
  23. package/dist/command-registry.d.ts.map +1 -1
  24. package/dist/command-registry.js +26 -266
  25. package/dist/command-registry.js.map +1 -1
  26. package/dist/compiler/ai-catalog.d.ts +4 -0
  27. package/dist/compiler/ai-catalog.d.ts.map +1 -0
  28. package/dist/compiler/ai-catalog.js +354 -0
  29. package/dist/compiler/ai-catalog.js.map +1 -0
  30. package/dist/compiler/application-model.d.ts +60 -0
  31. package/dist/compiler/application-model.d.ts.map +1 -0
  32. package/dist/compiler/application-model.js +141 -0
  33. package/dist/compiler/application-model.js.map +1 -0
  34. package/dist/compiler/authorization-transition.d.ts +7 -0
  35. package/dist/compiler/authorization-transition.d.ts.map +1 -0
  36. package/dist/compiler/authorization-transition.js +27 -0
  37. package/dist/compiler/authorization-transition.js.map +1 -0
  38. package/dist/compiler/bundle.d.ts +34 -0
  39. package/dist/compiler/bundle.d.ts.map +1 -0
  40. package/dist/compiler/bundle.js +1910 -0
  41. package/dist/compiler/bundle.js.map +1 -0
  42. package/dist/compiler/config.d.ts +882 -0
  43. package/dist/compiler/config.d.ts.map +1 -0
  44. package/dist/compiler/config.js +4118 -0
  45. package/dist/compiler/config.js.map +1 -0
  46. package/dist/compiler/data-policy-expression.d.ts +12 -0
  47. package/dist/compiler/data-policy-expression.d.ts.map +1 -0
  48. package/dist/compiler/data-policy-expression.js +43 -0
  49. package/dist/compiler/data-policy-expression.js.map +1 -0
  50. package/dist/compiler/field-codec.d.ts +14 -0
  51. package/dist/compiler/field-codec.d.ts.map +1 -0
  52. package/dist/compiler/field-codec.js +131 -0
  53. package/dist/compiler/field-codec.js.map +1 -0
  54. package/dist/compiler/field-physical-plan.d.ts +10 -0
  55. package/dist/compiler/field-physical-plan.d.ts.map +1 -0
  56. package/dist/compiler/field-physical-plan.js +66 -0
  57. package/dist/compiler/field-physical-plan.js.map +1 -0
  58. package/dist/compiler/field-policy-path.d.ts +10 -0
  59. package/dist/compiler/field-policy-path.d.ts.map +1 -0
  60. package/dist/compiler/field-policy-path.js +283 -0
  61. package/dist/compiler/field-policy-path.js.map +1 -0
  62. package/dist/compiler/field-query-plan.d.ts +13 -0
  63. package/dist/compiler/field-query-plan.d.ts.map +1 -0
  64. package/dist/compiler/field-query-plan.js +122 -0
  65. package/dist/compiler/field-query-plan.js.map +1 -0
  66. package/dist/compiler/field-surface.d.ts +15 -0
  67. package/dist/compiler/field-surface.d.ts.map +1 -0
  68. package/dist/compiler/field-surface.js +51 -0
  69. package/dist/compiler/field-surface.js.map +1 -0
  70. package/dist/compiler/index.d.ts +6 -0
  71. package/dist/compiler/index.d.ts.map +1 -0
  72. package/dist/compiler/index.js +6 -0
  73. package/dist/compiler/index.js.map +1 -0
  74. package/dist/compiler/package-compiler.d.ts +22 -0
  75. package/dist/compiler/package-compiler.d.ts.map +1 -0
  76. package/dist/compiler/package-compiler.js +257 -0
  77. package/dist/compiler/package-compiler.js.map +1 -0
  78. package/dist/compiler/permission-review.d.ts +139 -0
  79. package/dist/compiler/permission-review.d.ts.map +1 -0
  80. package/dist/compiler/permission-review.js +131 -0
  81. package/dist/compiler/permission-review.js.map +1 -0
  82. package/dist/compiler/schema-composition.d.ts +21 -0
  83. package/dist/compiler/schema-composition.d.ts.map +1 -0
  84. package/dist/compiler/schema-composition.js +193 -0
  85. package/dist/compiler/schema-composition.js.map +1 -0
  86. package/dist/config.d.ts +1 -1
  87. package/dist/config.js +1 -1
  88. package/dist/configuration-preflight.d.ts +7 -0
  89. package/dist/configuration-preflight.d.ts.map +1 -0
  90. package/dist/configuration-preflight.js +13 -0
  91. package/dist/configuration-preflight.js.map +1 -0
  92. package/dist/connected-development.d.ts +62 -0
  93. package/dist/connected-development.d.ts.map +1 -0
  94. package/dist/connected-development.js +393 -0
  95. package/dist/connected-development.js.map +1 -0
  96. package/dist/control-plane-client.d.ts +353 -123
  97. package/dist/control-plane-client.d.ts.map +1 -1
  98. package/dist/control-plane-client.js +420 -141
  99. package/dist/control-plane-client.js.map +1 -1
  100. package/dist/delivery-cache.d.ts +34 -0
  101. package/dist/delivery-cache.d.ts.map +1 -0
  102. package/dist/delivery-cache.js +186 -0
  103. package/dist/delivery-cache.js.map +1 -0
  104. package/dist/delivery-source.d.ts +17 -0
  105. package/dist/delivery-source.d.ts.map +1 -0
  106. package/dist/delivery-source.js +85 -0
  107. package/dist/delivery-source.js.map +1 -0
  108. package/dist/deployment-observer.d.ts +14 -0
  109. package/dist/deployment-observer.d.ts.map +1 -0
  110. package/dist/deployment-observer.js +68 -0
  111. package/dist/deployment-observer.js.map +1 -0
  112. package/dist/deployment.d.ts +55 -3
  113. package/dist/deployment.d.ts.map +1 -1
  114. package/dist/deployment.js +182 -21
  115. package/dist/deployment.js.map +1 -1
  116. package/dist/design-readiness.d.ts +24 -0
  117. package/dist/design-readiness.d.ts.map +1 -0
  118. package/dist/design-readiness.js +102 -0
  119. package/dist/design-readiness.js.map +1 -0
  120. package/dist/developer-errors.d.ts +11 -0
  121. package/dist/developer-errors.d.ts.map +1 -0
  122. package/dist/developer-errors.js +16 -0
  123. package/dist/developer-errors.js.map +1 -0
  124. package/dist/developer-operations.d.ts +188 -0
  125. package/dist/developer-operations.d.ts.map +1 -0
  126. package/dist/developer-operations.js +58 -0
  127. package/dist/developer-operations.js.map +1 -0
  128. package/dist/development-lifecycle.d.ts +75 -0
  129. package/dist/development-lifecycle.d.ts.map +1 -0
  130. package/dist/development-lifecycle.js +189 -0
  131. package/dist/development-lifecycle.js.map +1 -0
  132. package/dist/documentation.d.ts +111 -0
  133. package/dist/documentation.d.ts.map +1 -0
  134. package/dist/documentation.js +112 -0
  135. package/dist/documentation.js.map +1 -0
  136. package/dist/index.d.ts +16 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +16 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/internal/workflow.d.ts +83 -0
  141. package/dist/internal/workflow.d.ts.map +1 -0
  142. package/dist/internal/workflow.js +419 -0
  143. package/dist/internal/workflow.js.map +1 -0
  144. package/dist/nest-injection-contract.d.ts +4 -0
  145. package/dist/nest-injection-contract.d.ts.map +1 -0
  146. package/dist/nest-injection-contract.js +116 -0
  147. package/dist/nest-injection-contract.js.map +1 -0
  148. package/dist/operation-progress.d.ts +26 -0
  149. package/dist/operation-progress.d.ts.map +1 -0
  150. package/dist/operation-progress.js +92 -0
  151. package/dist/operation-progress.js.map +1 -0
  152. package/dist/optional-backend.d.ts +14 -0
  153. package/dist/optional-backend.d.ts.map +1 -0
  154. package/dist/optional-backend.js +145 -0
  155. package/dist/optional-backend.js.map +1 -0
  156. package/dist/package-compiler.d.ts +1 -1
  157. package/dist/package-compiler.d.ts.map +1 -1
  158. package/dist/package-compiler.js +1 -1
  159. package/dist/package-compiler.js.map +1 -1
  160. package/dist/session.d.ts +149 -4
  161. package/dist/session.d.ts.map +1 -1
  162. package/dist/session.js +362 -23
  163. package/dist/session.js.map +1 -1
  164. package/dist/testing.d.ts +77 -0
  165. package/dist/testing.d.ts.map +1 -0
  166. package/dist/testing.js +213 -0
  167. package/dist/testing.js.map +1 -0
  168. package/dist/toolchain-capsule.d.ts +45 -0
  169. package/dist/toolchain-capsule.d.ts.map +1 -0
  170. package/dist/toolchain-capsule.js +165 -0
  171. package/dist/toolchain-capsule.js.map +1 -0
  172. package/dist/workspace-loader.d.ts +1 -1
  173. package/dist/workspace-loader.d.ts.map +1 -1
  174. package/dist/workspace-loader.js +35 -3
  175. package/dist/workspace-loader.js.map +1 -1
  176. package/dist/workspace-operation.d.ts +3 -0
  177. package/dist/workspace-operation.d.ts.map +1 -0
  178. package/dist/workspace-operation.js +45 -0
  179. package/dist/workspace-operation.js.map +1 -0
  180. package/dist/workspace.d.ts.map +1 -1
  181. package/dist/workspace.js +37 -1
  182. package/dist/workspace.js.map +1 -1
  183. package/package.json +16 -4
  184. package/templates/backend/Dockerfile +20 -0
  185. package/templates/backend/package.json +27 -0
  186. package/templates/backend/src/app.module.ts +23 -0
  187. package/templates/backend/src/main.ts +5 -0
  188. package/templates/backend/tsconfig.json +9 -0
@@ -1,6 +1,8 @@
1
- import { type AppArtifact, type DeploymentRun, type DevkitResult, type Diagnostic, type WorkspaceIdentity } from "openxiangda-contracts";
2
- import { type CompiledAppPackage } from "openxiangda-compiler";
3
- import { OpenXiangdaControlPlaneClient, type CreateApplicationSecretInput, type CreateOAuthClientInput, type ControlPlaneClientOptions, type RotateApplicationSecretInput, type UpdateApplicationSecretInput, type UpdateOAuthClientInput } from "./control-plane-client.js";
1
+ import { OPENXIANGDA_CONTRACT_VERSION, SCHEMA_VERSIONS, type DeploymentEnvironment, type DeploymentRun, type DevkitResult, type Diagnostic, type ConfigurationValidationResult, type WorkspaceIdentity } from "openxiangda-contracts";
2
+ import { type CompiledAppPackage } from "./compiler/index.js";
3
+ import { OpenXiangdaControlPlaneClient, type CreateApplicationSecretInput, type CreateNativeRoleMembershipInput, type CreateOAuthClientInput, type ControlPlaneClientOptions, type NativeRelationshipGrantFilter, type RotateApplicationSecretInput, type UpdateApplicationSecretInput, type UpdateNativeRoleMembershipInput, type UpdateOAuthClientInput } from "./control-plane-client.js";
4
+ import { type ToolchainCapsule } from "./toolchain-capsule.js";
5
+ import { type AppSpecContractIndex, type AppSpecRisk } from "./app-spec.js";
4
6
  export interface GenerateOptions {
5
7
  root?: string;
6
8
  check?: boolean;
@@ -13,13 +15,32 @@ export interface BuildOptions {
13
15
  }
14
16
  export interface BuiltApplication {
15
17
  package: CompiledAppPackage;
18
+ sealedArtifact: SealedArtifactStatus;
16
19
  outputDirectory?: string;
17
20
  }
18
- interface SealedApplication extends BuiltApplication {
19
- artifactContent: Record<string, string>;
21
+ export interface SealedArtifactStatus {
22
+ schemaVersion: "openxiangda.sealed-artifact-status/v2";
23
+ state: "check-did-not-seal" | "sealed";
24
+ sealed: boolean;
25
+ usableForDeploy: boolean;
26
+ refreshedBy: "check" | "build";
27
+ persisted: boolean;
28
+ statusPath: ".openxiangda/build/seal-status.json";
29
+ manifestPath: ".openxiangda/build/app-package.json";
30
+ workspaceRevision: string | null;
31
+ workspaceDirty: boolean;
32
+ packageDigest: string | null;
33
+ previousArtifact?: {
34
+ packageDigest: string | null;
35
+ sourceRevision: string | null;
36
+ sourceDirty: boolean | null;
37
+ matchesWorkspaceSource: boolean;
38
+ };
39
+ reasonCode?: "OPENXIANGDA_CHECK_DOES_NOT_SEAL";
40
+ nextCommand: "openxiangda check" | "openxiangda deploy";
20
41
  }
21
42
  export interface DeployOptions extends BuildOptions {
22
- environment: "development" | "preproduction" | "production";
43
+ environment: "preproduction";
23
44
  environmentId?: string;
24
45
  idempotencyKey?: string;
25
46
  requestId?: string;
@@ -28,17 +49,434 @@ export declare class OpenXiangdaApplicationServices {
28
49
  private readonly options;
29
50
  constructor(options?: {
30
51
  toolchainVersion?: string;
52
+ toolchainCapsule?: ToolchainCapsule;
31
53
  client?: OpenXiangdaControlPlaneClient;
32
54
  clientOptions?: ControlPlaneClientOptions;
33
55
  });
34
- workspaceContext(root?: string): Promise<DevkitResult<import("openxiangda-contracts").WorkspaceContext>>;
56
+ workspaceContext(root?: string): Promise<DevkitResult<{
57
+ development: {
58
+ application: {
59
+ path: string;
60
+ content: string;
61
+ } | null;
62
+ records: {
63
+ id: string;
64
+ title: string;
65
+ status: string;
66
+ path: string;
67
+ kind: import("./app-spec.js").AppSpecDocumentKind;
68
+ }[];
69
+ schemaVersion: "openxiangda.development-lifecycle/v2";
70
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
71
+ readyForImplementation: boolean;
72
+ design: {
73
+ readyForImplementation: boolean;
74
+ reviewId: string | null;
75
+ scope: "change" | "initial" | null;
76
+ baselineDigest: string | null;
77
+ documentIds: string[];
78
+ diagnostics: Diagnostic[];
79
+ };
80
+ readyForTest: boolean;
81
+ changeId: string | null;
82
+ acceptanceIds: string[];
83
+ currentSpecDigest: string | null;
84
+ diagnostics: Diagnostic[];
85
+ nextCommand: string;
86
+ };
87
+ schemaVersion: typeof SCHEMA_VERSIONS.workspaceContext;
88
+ workspace: WorkspaceIdentity;
89
+ roots: {
90
+ frontend: string;
91
+ backend: string;
92
+ platform: string;
93
+ };
94
+ toolchain: {
95
+ packageName?: "openxiangda-devkit-core";
96
+ version: string;
97
+ contractVersion: typeof OPENXIANGDA_CONTRACT_VERSION;
98
+ nodeVersion: string;
99
+ packageManager: string;
100
+ studio?: import("openxiangda-contracts").StudioWorkspaceProtocolCapabilities;
101
+ };
102
+ environments: Array<{
103
+ id?: string;
104
+ name: string;
105
+ kind: DeploymentEnvironment;
106
+ }>;
107
+ changedDomains: Array<"frontend" | "backend" | "data" | "authz" | "events" | "workflow" | "config">;
108
+ }>>;
109
+ appSpecInit(root?: string): Promise<DevkitResult<{
110
+ schemaVersion: "openxiangda.appspec/context/v4";
111
+ enabled: boolean;
112
+ advisory: boolean;
113
+ releaseGate: boolean;
114
+ created: string[];
115
+ existing: string[];
116
+ }>>;
117
+ appSpecAddCapability(input: {
118
+ root?: string;
119
+ id: string;
120
+ title: string;
121
+ resources?: string[];
122
+ actions?: string[];
123
+ }): Promise<DevkitResult<{
124
+ schemaVersion: "openxiangda.appspec/context/v4";
125
+ enabled: boolean;
126
+ advisory: boolean;
127
+ releaseGate: boolean;
128
+ created: string;
129
+ }>>;
130
+ appSpecNew(input: {
131
+ root?: string;
132
+ id: string;
133
+ title: string;
134
+ risk?: AppSpecRisk;
135
+ summary?: string;
136
+ capabilities?: string[];
137
+ requirements?: string[];
138
+ resources?: string[];
139
+ actions?: string[];
140
+ }): Promise<DevkitResult<{
141
+ schemaVersion: "openxiangda.appspec/context/v4";
142
+ enabled: boolean;
143
+ advisory: boolean;
144
+ releaseGate: boolean;
145
+ created: string;
146
+ risk: AppSpecRisk;
147
+ status: string;
148
+ }>>;
149
+ appSpecContext(root?: string, selector?: string, historyOffset?: number): Promise<DevkitResult<{
150
+ lifecycle: {
151
+ schemaVersion: "openxiangda.development-lifecycle/v2";
152
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
153
+ readyForImplementation: boolean;
154
+ design: {
155
+ readyForImplementation: boolean;
156
+ reviewId: string | null;
157
+ scope: "change" | "initial" | null;
158
+ baselineDigest: string | null;
159
+ documentIds: string[];
160
+ diagnostics: Diagnostic[];
161
+ };
162
+ readyForTest: boolean;
163
+ changeId: string | null;
164
+ acceptanceIds: string[];
165
+ currentSpecDigest: string | null;
166
+ diagnostics: Diagnostic[];
167
+ nextCommand: string;
168
+ };
169
+ schemaVersion: "openxiangda.appspec/context/v4";
170
+ enabled: boolean;
171
+ mode: "guided";
172
+ releaseGate: true;
173
+ root: "appspec";
174
+ selector: string | null;
175
+ contract: AppSpecContractIndex;
176
+ index: {
177
+ application: import("./app-spec.js").AppSpecDocumentSummary | null;
178
+ capabilities: import("./app-spec.js").AppSpecDocumentSummary[];
179
+ activeChanges: import("./app-spec.js").AppSpecDocumentSummary[];
180
+ decisions: import("./app-spec.js").AppSpecDocumentSummary[];
181
+ designs: import("./app-spec.js").AppSpecDocumentSummary[];
182
+ history: import("./app-spec.js").AppSpecDocumentSummary[];
183
+ };
184
+ application: import("./app-spec.js").AppSpecDocument | null;
185
+ capabilities: import("./app-spec.js").AppSpecDocument[];
186
+ activeChanges: import("./app-spec.js").AppSpecDocument[];
187
+ archivedChanges: import("./app-spec.js").AppSpecDocument[];
188
+ decisions: import("./app-spec.js").AppSpecDocument[];
189
+ designs: import("./app-spec.js").AppSpecDocument[];
190
+ historyPage: {
191
+ offset: number;
192
+ limit: number;
193
+ total: number;
194
+ nextOffset: number | null;
195
+ };
196
+ contextBudget: {
197
+ maximumBytes: number;
198
+ contentBytes: number;
199
+ truncated: boolean;
200
+ omitted: import("./app-spec.js").AppSpecDocumentSummary[];
201
+ };
202
+ stats: {
203
+ files: number;
204
+ bytes: number;
205
+ capabilities: number;
206
+ activeChanges: number;
207
+ historyChanges: number;
208
+ decisions: number;
209
+ designs: number;
210
+ requirements: number;
211
+ acceptanceScenarios: number;
212
+ };
213
+ workspaceDigest: string | null;
214
+ selectionDigest: string | null;
215
+ diagnostics: Diagnostic[];
216
+ }>>;
217
+ appSpecCheck(root?: string): Promise<DevkitResult<{
218
+ lifecycle: {
219
+ schemaVersion: "openxiangda.development-lifecycle/v2";
220
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
221
+ readyForImplementation: boolean;
222
+ design: {
223
+ readyForImplementation: boolean;
224
+ reviewId: string | null;
225
+ scope: "change" | "initial" | null;
226
+ baselineDigest: string | null;
227
+ documentIds: string[];
228
+ diagnostics: Diagnostic[];
229
+ };
230
+ readyForTest: boolean;
231
+ changeId: string | null;
232
+ acceptanceIds: string[];
233
+ currentSpecDigest: string | null;
234
+ diagnostics: Diagnostic[];
235
+ nextCommand: string;
236
+ };
237
+ schemaVersion: "openxiangda.appspec/context/v4";
238
+ enabled: boolean;
239
+ mode: "guided";
240
+ releaseGate: true;
241
+ root: "appspec";
242
+ selector: string | null;
243
+ contract: AppSpecContractIndex;
244
+ index: {
245
+ application: import("./app-spec.js").AppSpecDocumentSummary | null;
246
+ capabilities: import("./app-spec.js").AppSpecDocumentSummary[];
247
+ activeChanges: import("./app-spec.js").AppSpecDocumentSummary[];
248
+ decisions: import("./app-spec.js").AppSpecDocumentSummary[];
249
+ designs: import("./app-spec.js").AppSpecDocumentSummary[];
250
+ history: import("./app-spec.js").AppSpecDocumentSummary[];
251
+ };
252
+ application: import("./app-spec.js").AppSpecDocument | null;
253
+ capabilities: import("./app-spec.js").AppSpecDocument[];
254
+ activeChanges: import("./app-spec.js").AppSpecDocument[];
255
+ archivedChanges: import("./app-spec.js").AppSpecDocument[];
256
+ decisions: import("./app-spec.js").AppSpecDocument[];
257
+ designs: import("./app-spec.js").AppSpecDocument[];
258
+ historyPage: {
259
+ offset: number;
260
+ limit: number;
261
+ total: number;
262
+ nextOffset: number | null;
263
+ };
264
+ contextBudget: {
265
+ maximumBytes: number;
266
+ contentBytes: number;
267
+ truncated: boolean;
268
+ omitted: import("./app-spec.js").AppSpecDocumentSummary[];
269
+ };
270
+ stats: {
271
+ files: number;
272
+ bytes: number;
273
+ capabilities: number;
274
+ activeChanges: number;
275
+ historyChanges: number;
276
+ decisions: number;
277
+ designs: number;
278
+ requirements: number;
279
+ acceptanceScenarios: number;
280
+ };
281
+ workspaceDigest: string | null;
282
+ selectionDigest: string | null;
283
+ diagnostics: Diagnostic[];
284
+ }>>;
285
+ appSpecVerify(root: string | undefined, deploymentId: string, evidencePath?: string): Promise<DevkitResult<{
286
+ ok: boolean;
287
+ path: string;
288
+ sourceDeploymentId: string;
289
+ packageDigest: string;
290
+ scenarios: any;
291
+ diagnostics: Diagnostic[];
292
+ }>>;
293
+ appSpecClose(input: {
294
+ root?: string;
295
+ id: string;
296
+ summary?: string;
297
+ currentSpec?: "merged" | "not-applicable";
298
+ }): Promise<DevkitResult<{
299
+ schemaVersion: "openxiangda.appspec/context/v4";
300
+ enabled: boolean;
301
+ advisory: boolean;
302
+ releaseGate: boolean;
303
+ archived: null;
304
+ status: string;
305
+ converged: boolean;
306
+ } | {
307
+ schemaVersion: "openxiangda.appspec/context/v4";
308
+ enabled: boolean;
309
+ advisory: boolean;
310
+ releaseGate: boolean;
311
+ archived: string;
312
+ status: string;
313
+ converged: boolean;
314
+ }>>;
315
+ accept(input: {
316
+ root?: string;
317
+ planPath: string;
318
+ }): Promise<DevkitResult<undefined> | DevkitResult<{
319
+ schemaVersion: "openxiangda.preproduction-acceptance-identities/v2";
320
+ appCode: string;
321
+ environmentKey: "preproduction";
322
+ expiresAt: string;
323
+ actors: Array<{
324
+ key: string;
325
+ userId: string;
326
+ roleCodes: string[];
327
+ expiresAt: string;
328
+ loginUrl: string;
329
+ loginUrlExpiresAt: string;
330
+ }>;
331
+ manual: boolean;
332
+ releaseGate: boolean;
333
+ planPath: string;
334
+ }>>;
35
335
  contractDescribe(root?: string): Promise<DevkitResult<{
36
336
  configDigest: string;
37
337
  contractDigest: string;
38
- contract: import("openxiangda-compiler").ContractBundleV2;
338
+ aiCatalogDigest: string;
339
+ contract: import("openxiangda-contracts").ContractBundleV3;
340
+ aiCatalog: import("openxiangda-contracts").AiCapabilityCatalog;
341
+ permissionReview: {
342
+ digest: string;
343
+ schemaVersion: "openxiangda.permission-review/v2";
344
+ appCode: string;
345
+ configDigest: string;
346
+ contractDigest: string;
347
+ authority: "declaration-projection";
348
+ runtimeAuthorizationRequired: true;
349
+ semantics: {
350
+ roleCapabilities: "sealed-declared-grants; current-user application roles are unioned";
351
+ roleDeniedCapabilities: "removed from that role during compilation; not a global deny across roles";
352
+ capabilityMatch: "static prerequisite only; never runtime allow";
353
+ fieldPolicies: "resource operation is required; field rules can only narrow it; empty is deny";
354
+ hiddenFields: "presentation only; not an authorization rule";
355
+ rowPolicies: "raw declarations; evaluated by the platform with current identity, grants and record facts";
356
+ workflowTasks: "platform Task Surface and fresh command token decide current participant, state, field and operation access";
357
+ navigation: "page selection and visibility do not grant resource or operation access";
358
+ perspectives: "read projections only; never replace the actor or mutation/workflow authorization";
359
+ };
360
+ roles: {
361
+ capabilityCodes: string[];
362
+ description?: string;
363
+ code: string;
364
+ name: string;
365
+ }[];
366
+ capabilities: import("openxiangda-contracts").AppCapabilityContract[];
367
+ perspectives: import("openxiangda-contracts").AppPerspectiveContract[];
368
+ pages: {
369
+ adminAccess: import("openxiangda-contracts").AppFrontendRouteAccess | null;
370
+ admin: import("openxiangda-contracts").AppAdminPageContract[];
371
+ custom: import("openxiangda-contracts").AppFrontendRouteContract[];
372
+ standard: import("openxiangda-contracts").AppRouteManifestEntryV3[];
373
+ };
374
+ resources: {
375
+ code: string;
376
+ name: string;
377
+ operationCapabilities: {
378
+ read: string;
379
+ create: string;
380
+ update: string;
381
+ delete: string;
382
+ };
383
+ dataPolicyCode: string | null;
384
+ mutationOwner: "native" | "action" | "readonly" | "workflow" | null;
385
+ generated: {
386
+ list?: boolean;
387
+ detail?: boolean;
388
+ create?: boolean;
389
+ update?: boolean;
390
+ delete?: boolean;
391
+ } | null;
392
+ views: {
393
+ code: string;
394
+ name: string;
395
+ generated: Required<{
396
+ list?: boolean;
397
+ detail?: boolean;
398
+ create?: boolean;
399
+ update?: boolean;
400
+ delete?: boolean;
401
+ }>;
402
+ fieldOrder: {
403
+ list: string[];
404
+ form: string[];
405
+ detail: string[];
406
+ };
407
+ mobile: {
408
+ enabled: boolean;
409
+ };
410
+ }[];
411
+ defaultFieldOrder: {
412
+ list: string[] | null;
413
+ form: string[] | null;
414
+ detail: string[] | null;
415
+ } | null;
416
+ fields: {
417
+ code: string;
418
+ type: "boolean" | "date" | "file" | "subtable" | "text.short" | "text.long" | "text.rich" | "number.integer" | "number.decimal" | "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" | "image" | "signature" | "address" | "location" | "uuid" | "json" | "serial-number";
419
+ label: string;
420
+ hidden: boolean;
421
+ system: boolean;
422
+ read: import("./compiler/permission-review.js").PermissionReviewFieldRequirement;
423
+ create: import("./compiler/permission-review.js").PermissionReviewFieldRequirement;
424
+ update: import("./compiler/permission-review.js").PermissionReviewFieldRequirement;
425
+ mask: "null" | "omit" | null;
426
+ }[];
427
+ }[];
428
+ authorization: {
429
+ authenticatedUserRoleCode: string | null;
430
+ dataPolicies: import("openxiangda-contracts").AppDataPolicyDeclaration[];
431
+ scopeDimensions: import("openxiangda-contracts").AppScopeDimensionDeclaration[];
432
+ scopeSources: import("openxiangda-contracts").AppScopeSourceDeclaration[];
433
+ roleMembershipSources: import("openxiangda-contracts").AppRoleMembershipSourceDeclaration[];
434
+ relationshipGrantSources: import("openxiangda-contracts").AppRelationshipGrantSourceDeclaration[];
435
+ authorizationTransitions: import("openxiangda-contracts").AppAuthorizationTransitionDeclaration[];
436
+ publicAccess: import("openxiangda-contracts").AnonymousPublicAccessContractV2 | null;
437
+ };
438
+ operations: import("openxiangda-contracts").AppApiOperationContract[];
439
+ workflows: {
440
+ runtimeAuthorizationRequired: true;
441
+ contracts: import("openxiangda-contracts").AppWorkflowContract[];
442
+ definitions: {
443
+ workflowCode: string;
444
+ version: number;
445
+ subject: import("openxiangda-contracts").WorkflowSubjectDefinition;
446
+ organizationContext: {
447
+ department?: {
448
+ source: "none" | "user_primary_department" | "choose_if_multiple" | "always_choose" | "fixed" | "from_input" | "from_role_scope";
449
+ required?: boolean;
450
+ value?: string;
451
+ path?: string;
452
+ dimension?: string;
453
+ };
454
+ } | null;
455
+ startAt: string;
456
+ nodes: Record<string, import("openxiangda-contracts").WorkflowNode>;
457
+ }[];
458
+ bindings: import("openxiangda-contracts").NativeWorkflowBindingDeclaration[];
459
+ activations: import("openxiangda-contracts").NativeWorkflowActivationDeclaration[];
460
+ providers: import("openxiangda-contracts").NativeWorkflowProviderDeclaration[];
461
+ editableParameters: import("openxiangda-contracts").NativeWorkflowEditableParameterDeclaration[];
462
+ };
463
+ };
464
+ adminNavigationAuthoring: {
465
+ schemaVersion: string;
466
+ owner: string;
467
+ target: string;
468
+ configured: boolean;
469
+ applyMode: string;
470
+ automaticRuntimeDiscovery: boolean;
471
+ suggestion: import("./compiler/config.js").AdminNavigationSuggestionSource;
472
+ };
39
473
  counts: {
40
474
  backendSecrets: number;
475
+ backendOperations: number;
476
+ frontendRoutes: number;
477
+ anonymousPublicPolicies: number;
41
478
  dataResources: number;
479
+ aiCapabilities: number;
42
480
  eventSubscriptions: number;
43
481
  timerSubscriptions: number;
44
482
  workflowDefinitions: number;
@@ -46,8 +484,42 @@ export declare class OpenXiangdaApplicationServices {
46
484
  workflowProviders: number;
47
485
  };
48
486
  }>>;
487
+ contractContext(root?: string, input?: {
488
+ selector?: string;
489
+ offset?: number;
490
+ limit?: number;
491
+ }): Promise<{
492
+ data: {
493
+ configDigest: string;
494
+ contractDigest: string;
495
+ aiCatalogDigest: string;
496
+ counts: {
497
+ backendSecrets: number;
498
+ backendOperations: number;
499
+ frontendRoutes: number;
500
+ anonymousPublicPolicies: number;
501
+ dataResources: number;
502
+ aiCapabilities: number;
503
+ eventSubscriptions: number;
504
+ timerSubscriptions: number;
505
+ workflowDefinitions: number;
506
+ workflowBindings: number;
507
+ workflowProviders: number;
508
+ };
509
+ selector: string;
510
+ selection: unknown;
511
+ };
512
+ ok: boolean;
513
+ operation: string;
514
+ workspace: WorkspaceIdentity;
515
+ diagnostics: Diagnostic[];
516
+ nextActions: import("openxiangda-contracts").NextAction[];
517
+ traceId?: string;
518
+ }>;
49
519
  platformCapabilities(root?: string): Promise<DevkitResult<import("openxiangda-contracts").PlatformCapabilities>>;
50
- provisionApplication(root?: string): Promise<DevkitResult<import("openxiangda-contracts").ProvisionedApplication>>;
520
+ administrationContext(root: string | undefined, environmentKey?: string): Promise<DevkitResult<import("openxiangda-contracts").ApplicationAdministrationContext>>;
521
+ workflowNodeConfigurations(root: string | undefined, workflowCode: string, environmentKey?: string): Promise<DevkitResult<import("openxiangda-contracts").WorkflowNodeConfigurations>>;
522
+ provisionApplication(root?: string): Promise<DevkitResult<undefined> | DevkitResult<import("openxiangda-contracts").ProvisionedApplication>>;
51
523
  oauthClients(root?: string): Promise<DevkitResult<{
52
524
  items: import("openxiangda-contracts").OAuthClient[];
53
525
  total: number;
@@ -72,7 +544,7 @@ export declare class OpenXiangdaApplicationServices {
72
544
  rotateOAuthClientSecret(root: string | undefined, clientId: string, gracePeriodSeconds?: number): Promise<DevkitResult<import("./control-plane-client.js").OAuthClientSecretResult>>;
73
545
  revokeOAuthClient(root: string | undefined, clientId: string): Promise<DevkitResult<import("openxiangda-contracts").OAuthClient>>;
74
546
  oauthAuditEvents(root: string | undefined, input?: {
75
- environmentKey?: string;
547
+ environmentKey?: DeploymentEnvironment | string;
76
548
  clientId?: string;
77
549
  limit?: number;
78
550
  }): Promise<DevkitResult<{
@@ -93,6 +565,64 @@ export declare class OpenXiangdaApplicationServices {
93
565
  applicationSecretAuditEvents(root: string | undefined, environmentKey: string, name: string, limit?: number): Promise<DevkitResult<{
94
566
  items: import("openxiangda-contracts").ApplicationSecretAuditEvent[];
95
567
  }>>;
568
+ nativeRoleMemberships(root: string | undefined, environmentKey: string, input?: {
569
+ status?: "active" | "revoked" | "expired";
570
+ userId?: string;
571
+ roleCode?: string;
572
+ keyword?: string;
573
+ limit?: number;
574
+ offset?: number;
575
+ }): Promise<DevkitResult<import("openxiangda-contracts").NativeRoleMembershipPage>>;
576
+ createNativeRoleMembership(root: string | undefined, input: CreateNativeRoleMembershipInput): Promise<DevkitResult<import("openxiangda-contracts").NativeRoleMembershipMutationResult>>;
577
+ updateNativeRoleMembership(root: string | undefined, membershipId: string, input: UpdateNativeRoleMembershipInput): Promise<DevkitResult<import("openxiangda-contracts").NativeRoleMembershipMutationResult>>;
578
+ revokeNativeRoleMembership(root: string | undefined, membershipId: string, input: {
579
+ environmentKey: DeploymentEnvironment;
580
+ operationId: string;
581
+ expectedRevision: number;
582
+ reason: string;
583
+ }): Promise<DevkitResult<import("openxiangda-contracts").NativeRoleMembershipMutationResult>>;
584
+ nativeSuperAdmins(root: string | undefined, environmentKey: string, input?: {
585
+ status?: "active" | "revoked";
586
+ userId?: string;
587
+ keyword?: string;
588
+ limit?: number;
589
+ offset?: number;
590
+ }): Promise<DevkitResult<import("openxiangda-contracts").NativeSuperAdminGrantPage>>;
591
+ grantNativeSuperAdmin(root: string | undefined, environmentKey: string, input: {
592
+ operationId: string;
593
+ userId: string;
594
+ }): Promise<DevkitResult<{
595
+ grant: import("openxiangda-contracts").NativeSuperAdminGrant;
596
+ environmentSubjectVersions: Array<Record<string, unknown>>;
597
+ revokedSessionCount: number;
598
+ }>>;
599
+ revokeNativeSuperAdmin(root: string | undefined, environmentKey: string, grantId: string, input: {
600
+ operationId: string;
601
+ expectedRevision: number;
602
+ }): Promise<DevkitResult<{
603
+ grant: import("openxiangda-contracts").NativeSuperAdminGrant;
604
+ environmentSubjectVersions: Array<Record<string, unknown>>;
605
+ revokedSessionCount: number;
606
+ }>>;
607
+ nativeRelationshipGrants(root: string | undefined, environmentKey: string, input?: Omit<NativeRelationshipGrantFilter, "environmentKey">): Promise<DevkitResult<import("openxiangda-contracts").NativeRelationshipGrantPage>>;
608
+ createNativeRelationshipGrant(root: string | undefined, input: Parameters<OpenXiangdaControlPlaneClient["createNativeRelationshipGrant"]>[1]): Promise<DevkitResult<{
609
+ grant: import("openxiangda-contracts").NativeRelationshipGrant;
610
+ }>>;
611
+ updateNativeRelationshipGrant(root: string | undefined, grantId: string, input: Parameters<OpenXiangdaControlPlaneClient["updateNativeRelationshipGrant"]>[2]): Promise<DevkitResult<{
612
+ grant: import("openxiangda-contracts").NativeRelationshipGrant;
613
+ }>>;
614
+ revokeNativeRelationshipGrant(root: string | undefined, grantId: string, input: Parameters<OpenXiangdaControlPlaneClient["revokeNativeRelationshipGrant"]>[2]): Promise<DevkitResult<{
615
+ grant: import("openxiangda-contracts").NativeRelationshipGrant;
616
+ }>>;
617
+ nativeAuthorizationProjectionHealth(root: string | undefined, environmentKey: string): Promise<DevkitResult<import("openxiangda-contracts").NativeAuthorizationProjectionHealth>>;
618
+ rebuildNativeAuthorizationProjections(root: string | undefined, input: {
619
+ environmentKey: DeploymentEnvironment;
620
+ operationId: string;
621
+ }): Promise<DevkitResult<import("openxiangda-contracts").NativeAuthorizationProjectionMutationResult>>;
622
+ recoverNativeAuthorizationProjection(root: string | undefined, jobId: string, input: {
623
+ environmentKey: DeploymentEnvironment;
624
+ operationId: string;
625
+ }): Promise<DevkitResult<import("openxiangda-contracts").NativeAuthorizationProjectionMutationResult>>;
96
626
  eventSubscriptions(root?: string): Promise<DevkitResult<{
97
627
  items: import("openxiangda-contracts").EventSubscription[];
98
628
  }>>;
@@ -100,11 +630,6 @@ export declare class OpenXiangdaApplicationServices {
100
630
  expectedRevision: number;
101
631
  status: "active" | "paused";
102
632
  }): Promise<DevkitResult<import("openxiangda-contracts").EventSubscription>>;
103
- rotateEventSubscriptionSecret(root: string | undefined, subscriptionId: string, input: {
104
- expectedRevision: number;
105
- idempotencyKey: string;
106
- gracePeriodSeconds?: number;
107
- }): Promise<DevkitResult<import("openxiangda-contracts").EventSubscription>>;
108
633
  eventDeliveries(root: string | undefined, limit?: number): Promise<DevkitResult<{
109
634
  items: import("openxiangda-contracts").EventDelivery[];
110
635
  }>>;
@@ -129,49 +654,267 @@ export declare class OpenXiangdaApplicationServices {
129
654
  environments?: Array<{
130
655
  id?: string;
131
656
  name: string;
132
- kind: "development" | "preproduction" | "production";
657
+ kind: DeploymentEnvironment;
133
658
  }>;
134
659
  }): Promise<DevkitResult<{
135
660
  schemaVersion: number;
136
661
  appCode: string;
137
662
  baseUrl: string;
138
663
  environments: {
664
+ kind: "preproduction" | "production";
139
665
  id?: string;
140
666
  name: string;
141
- kind: "development" | "preproduction" | "production";
142
667
  }[];
143
668
  path: string;
144
669
  }>>;
145
- generate(input?: GenerateOptions): Promise<DevkitResult<{
670
+ generate(input?: GenerateOptions): Promise<DevkitResult<undefined> | DevkitResult<{
146
671
  output: string;
147
672
  changed: boolean;
148
673
  contractDigest: string;
674
+ aiCatalogDigest: string;
149
675
  }>>;
150
- check(root?: string): Promise<DevkitResult<{
676
+ check(root?: string, environmentKey?: DeploymentEnvironment): Promise<DevkitResult<undefined> | DevkitResult<{
677
+ generated: {
678
+ output: string;
679
+ changed: boolean;
680
+ contractDigest: string;
681
+ aiCatalogDigest: string;
682
+ } | undefined;
683
+ compatibility: ConfigurationValidationResult | null;
151
684
  stages: {
685
+ name: string;
686
+ state: "passed" | "failed" | "skipped";
152
687
  ok: boolean;
153
- exitCode: number;
688
+ exitCode: number | null;
154
689
  output: string;
155
- name: string;
690
+ reused?: boolean;
156
691
  }[];
692
+ sealedArtifact: SealedArtifactStatus;
693
+ appSpec: {
694
+ lifecycle: {
695
+ schemaVersion: "openxiangda.development-lifecycle/v2";
696
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
697
+ readyForImplementation: boolean;
698
+ design: {
699
+ readyForImplementation: boolean;
700
+ reviewId: string | null;
701
+ scope: "change" | "initial" | null;
702
+ baselineDigest: string | null;
703
+ documentIds: string[];
704
+ diagnostics: Diagnostic[];
705
+ };
706
+ readyForTest: boolean;
707
+ changeId: string | null;
708
+ acceptanceIds: string[];
709
+ currentSpecDigest: string | null;
710
+ diagnostics: Diagnostic[];
711
+ nextCommand: string;
712
+ };
713
+ enabled: boolean;
714
+ mode: "guided";
715
+ releaseGate: true;
716
+ workspaceDigest: string | null;
717
+ selectionDigest: string | null;
718
+ historyPage: {
719
+ offset: number;
720
+ limit: number;
721
+ total: number;
722
+ nextOffset: number | null;
723
+ };
724
+ contextBudget: {
725
+ maximumBytes: number;
726
+ contentBytes: number;
727
+ truncated: boolean;
728
+ omitted: import("./app-spec.js").AppSpecDocumentSummary[];
729
+ };
730
+ stats: {
731
+ files: number;
732
+ bytes: number;
733
+ capabilities: number;
734
+ activeChanges: number;
735
+ historyChanges: number;
736
+ decisions: number;
737
+ designs: number;
738
+ requirements: number;
739
+ acceptanceScenarios: number;
740
+ };
741
+ diagnostics: {
742
+ errors: number;
743
+ warnings: number;
744
+ info: number;
745
+ };
746
+ nextCommand: string;
747
+ };
157
748
  }>>;
158
- test(root?: string): Promise<DevkitResult<{
749
+ test(root?: string): Promise<DevkitResult<undefined> | DevkitResult<{
159
750
  ok: boolean;
160
751
  exitCode: number;
161
752
  output: string;
753
+ outputTruncated: boolean;
162
754
  }>>;
163
755
  build(input?: BuildOptions): Promise<DevkitResult<BuiltApplication>>;
164
- private buildSealed;
165
- deploymentPlan(input: BuildOptions & {
166
- environment: string;
167
- }): Promise<DevkitResult<BuiltApplication> | {
756
+ buildPreview(root?: string): Promise<{
168
757
  operation: string;
169
758
  data: {
170
- environment: string;
171
- packageDigest: string;
172
- appCode: string;
173
- artifacts: AppArtifact[];
174
- requiredCapabilities: string[];
759
+ sealed: boolean;
760
+ packageDigest: null;
761
+ check: {
762
+ generated: {
763
+ output: string;
764
+ changed: boolean;
765
+ contractDigest: string;
766
+ aiCatalogDigest: string;
767
+ } | undefined;
768
+ compatibility: ConfigurationValidationResult | null;
769
+ stages: {
770
+ name: string;
771
+ state: "passed" | "failed" | "skipped";
772
+ ok: boolean;
773
+ exitCode: number | null;
774
+ output: string;
775
+ reused?: boolean;
776
+ }[];
777
+ sealedArtifact: SealedArtifactStatus;
778
+ appSpec: {
779
+ lifecycle: {
780
+ schemaVersion: "openxiangda.development-lifecycle/v2";
781
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
782
+ readyForImplementation: boolean;
783
+ design: {
784
+ readyForImplementation: boolean;
785
+ reviewId: string | null;
786
+ scope: "change" | "initial" | null;
787
+ baselineDigest: string | null;
788
+ documentIds: string[];
789
+ diagnostics: Diagnostic[];
790
+ };
791
+ readyForTest: boolean;
792
+ changeId: string | null;
793
+ acceptanceIds: string[];
794
+ currentSpecDigest: string | null;
795
+ diagnostics: Diagnostic[];
796
+ nextCommand: string;
797
+ };
798
+ enabled: boolean;
799
+ mode: "guided";
800
+ releaseGate: true;
801
+ workspaceDigest: string | null;
802
+ selectionDigest: string | null;
803
+ historyPage: {
804
+ offset: number;
805
+ limit: number;
806
+ total: number;
807
+ nextOffset: number | null;
808
+ };
809
+ contextBudget: {
810
+ maximumBytes: number;
811
+ contentBytes: number;
812
+ truncated: boolean;
813
+ omitted: import("./app-spec.js").AppSpecDocumentSummary[];
814
+ };
815
+ stats: {
816
+ files: number;
817
+ bytes: number;
818
+ capabilities: number;
819
+ activeChanges: number;
820
+ historyChanges: number;
821
+ decisions: number;
822
+ designs: number;
823
+ requirements: number;
824
+ acceptanceScenarios: number;
825
+ };
826
+ diagnostics: {
827
+ errors: number;
828
+ warnings: number;
829
+ info: number;
830
+ };
831
+ nextCommand: string;
832
+ };
833
+ } | undefined;
834
+ };
835
+ ok: boolean;
836
+ workspace: WorkspaceIdentity;
837
+ diagnostics: Diagnostic[];
838
+ nextActions: import("openxiangda-contracts").NextAction[];
839
+ traceId?: string;
840
+ } | {
841
+ operation: string;
842
+ data: {
843
+ sealed: boolean;
844
+ packageDigest: null;
845
+ check: {
846
+ generated: {
847
+ output: string;
848
+ changed: boolean;
849
+ contractDigest: string;
850
+ aiCatalogDigest: string;
851
+ } | undefined;
852
+ compatibility: ConfigurationValidationResult | null;
853
+ stages: {
854
+ name: string;
855
+ state: "passed" | "failed" | "skipped";
856
+ ok: boolean;
857
+ exitCode: number | null;
858
+ output: string;
859
+ reused?: boolean;
860
+ }[];
861
+ sealedArtifact: SealedArtifactStatus;
862
+ appSpec: {
863
+ lifecycle: {
864
+ schemaVersion: "openxiangda.development-lifecycle/v2";
865
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
866
+ readyForImplementation: boolean;
867
+ design: {
868
+ readyForImplementation: boolean;
869
+ reviewId: string | null;
870
+ scope: "change" | "initial" | null;
871
+ baselineDigest: string | null;
872
+ documentIds: string[];
873
+ diagnostics: Diagnostic[];
874
+ };
875
+ readyForTest: boolean;
876
+ changeId: string | null;
877
+ acceptanceIds: string[];
878
+ currentSpecDigest: string | null;
879
+ diagnostics: Diagnostic[];
880
+ nextCommand: string;
881
+ };
882
+ enabled: boolean;
883
+ mode: "guided";
884
+ releaseGate: true;
885
+ workspaceDigest: string | null;
886
+ selectionDigest: string | null;
887
+ historyPage: {
888
+ offset: number;
889
+ limit: number;
890
+ total: number;
891
+ nextOffset: number | null;
892
+ };
893
+ contextBudget: {
894
+ maximumBytes: number;
895
+ contentBytes: number;
896
+ truncated: boolean;
897
+ omitted: import("./app-spec.js").AppSpecDocumentSummary[];
898
+ };
899
+ stats: {
900
+ files: number;
901
+ bytes: number;
902
+ capabilities: number;
903
+ activeChanges: number;
904
+ historyChanges: number;
905
+ decisions: number;
906
+ designs: number;
907
+ requirements: number;
908
+ acceptanceScenarios: number;
909
+ };
910
+ diagnostics: {
911
+ errors: number;
912
+ warnings: number;
913
+ info: number;
914
+ };
915
+ nextCommand: string;
916
+ };
917
+ } | undefined;
175
918
  };
176
919
  ok: boolean;
177
920
  workspace: WorkspaceIdentity;
@@ -179,12 +922,187 @@ export declare class OpenXiangdaApplicationServices {
179
922
  nextActions: import("openxiangda-contracts").NextAction[];
180
923
  traceId?: string;
181
924
  }>;
182
- deploy(input: DeployOptions): Promise<DevkitResult<SealedApplication> | DevkitResult<undefined> | DevkitResult<DeploymentRun>>;
183
- deploymentStatus(root: string | undefined, deploymentId?: string): Promise<DevkitResult<DeploymentRun | {
184
- items: DeploymentRun[];
185
- total: number;
925
+ private buildSealed;
926
+ deploymentPlan(input: {
927
+ root?: string;
928
+ environment: "preproduction";
929
+ }): Promise<DevkitResult<undefined> | DevkitResult<{
930
+ lifecycle: {
931
+ schemaVersion: "openxiangda.development-lifecycle/v2";
932
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
933
+ readyForImplementation: boolean;
934
+ design: {
935
+ readyForImplementation: boolean;
936
+ reviewId: string | null;
937
+ scope: "change" | "initial" | null;
938
+ baselineDigest: string | null;
939
+ documentIds: string[];
940
+ diagnostics: Diagnostic[];
941
+ };
942
+ readyForTest: boolean;
943
+ changeId: string | null;
944
+ acceptanceIds: string[];
945
+ currentSpecDigest: string | null;
946
+ diagnostics: Diagnostic[];
947
+ nextCommand: string;
948
+ };
949
+ }> | DevkitResult<{
950
+ environment: "preproduction";
951
+ appCode: string;
952
+ sealed: boolean;
953
+ packageDigest: null;
954
+ buildOwner: string;
955
+ source: import("./delivery-source.js").PublishedDeliverySource;
956
+ frontendRoot: string;
957
+ backendRoot: string;
958
+ configDigest: string;
959
+ contractDigest: string;
186
960
  }>>;
187
- deploymentLogs(root: string | undefined, deploymentId: string): Promise<{
961
+ deploy(input: DeployOptions): Promise<DevkitResult<undefined> | DevkitResult<{
962
+ lifecycle: {
963
+ schemaVersion: "openxiangda.development-lifecycle/v2";
964
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
965
+ readyForImplementation: boolean;
966
+ design: {
967
+ readyForImplementation: boolean;
968
+ reviewId: string | null;
969
+ scope: "change" | "initial" | null;
970
+ baselineDigest: string | null;
971
+ documentIds: string[];
972
+ diagnostics: Diagnostic[];
973
+ };
974
+ readyForTest: boolean;
975
+ changeId: string | null;
976
+ acceptanceIds: string[];
977
+ currentSpecDigest: string | null;
978
+ diagnostics: Diagnostic[];
979
+ nextCommand: string;
980
+ };
981
+ }> | DevkitResult<{
982
+ sealedArtifact: SealedArtifactStatus;
983
+ package: CompiledAppPackage;
984
+ artifactContent: Record<string, string>;
985
+ }> | DevkitResult<DeploymentRun> | {
986
+ operation: string;
987
+ ok: boolean;
988
+ workspace: WorkspaceIdentity;
989
+ data?: {
990
+ output: string;
991
+ changed: boolean;
992
+ contractDigest: string;
993
+ aiCatalogDigest: string;
994
+ };
995
+ diagnostics: Diagnostic[];
996
+ nextActions: import("openxiangda-contracts").NextAction[];
997
+ traceId?: string;
998
+ } | {
999
+ operation: string;
1000
+ ok: boolean;
1001
+ workspace: WorkspaceIdentity;
1002
+ data?: {
1003
+ generated: {
1004
+ output: string;
1005
+ changed: boolean;
1006
+ contractDigest: string;
1007
+ aiCatalogDigest: string;
1008
+ } | undefined;
1009
+ compatibility: ConfigurationValidationResult | null;
1010
+ stages: {
1011
+ name: string;
1012
+ state: "passed" | "failed" | "skipped";
1013
+ ok: boolean;
1014
+ exitCode: number | null;
1015
+ output: string;
1016
+ reused?: boolean;
1017
+ }[];
1018
+ sealedArtifact: SealedArtifactStatus;
1019
+ appSpec: {
1020
+ lifecycle: {
1021
+ schemaVersion: "openxiangda.development-lifecycle/v2";
1022
+ stage: "design-incomplete" | "ready-for-implementation" | "ready-for-test";
1023
+ readyForImplementation: boolean;
1024
+ design: {
1025
+ readyForImplementation: boolean;
1026
+ reviewId: string | null;
1027
+ scope: "change" | "initial" | null;
1028
+ baselineDigest: string | null;
1029
+ documentIds: string[];
1030
+ diagnostics: Diagnostic[];
1031
+ };
1032
+ readyForTest: boolean;
1033
+ changeId: string | null;
1034
+ acceptanceIds: string[];
1035
+ currentSpecDigest: string | null;
1036
+ diagnostics: Diagnostic[];
1037
+ nextCommand: string;
1038
+ };
1039
+ enabled: boolean;
1040
+ mode: "guided";
1041
+ releaseGate: true;
1042
+ workspaceDigest: string | null;
1043
+ selectionDigest: string | null;
1044
+ historyPage: {
1045
+ offset: number;
1046
+ limit: number;
1047
+ total: number;
1048
+ nextOffset: number | null;
1049
+ };
1050
+ contextBudget: {
1051
+ maximumBytes: number;
1052
+ contentBytes: number;
1053
+ truncated: boolean;
1054
+ omitted: import("./app-spec.js").AppSpecDocumentSummary[];
1055
+ };
1056
+ stats: {
1057
+ files: number;
1058
+ bytes: number;
1059
+ capabilities: number;
1060
+ activeChanges: number;
1061
+ historyChanges: number;
1062
+ decisions: number;
1063
+ designs: number;
1064
+ requirements: number;
1065
+ acceptanceScenarios: number;
1066
+ };
1067
+ diagnostics: {
1068
+ errors: number;
1069
+ warnings: number;
1070
+ info: number;
1071
+ };
1072
+ nextCommand: string;
1073
+ };
1074
+ };
1075
+ diagnostics: Diagnostic[];
1076
+ nextActions: import("openxiangda-contracts").NextAction[];
1077
+ traceId?: string;
1078
+ }>;
1079
+ deploymentStatus(root: string | undefined, deploymentId?: string): Promise<DevkitResult<undefined> | DevkitResult<DeploymentRun>>;
1080
+ environmentStatus(root?: string): Promise<DevkitResult<import("openxiangda-contracts").ApplicationEnvironmentList>>;
1081
+ startEnvironment(root: string | undefined, environment: DeploymentEnvironment, options?: {
1082
+ idempotencyKey?: string;
1083
+ requestId?: string;
1084
+ }): Promise<DevkitResult<DeploymentRun>>;
1085
+ stopEnvironment(root: string | undefined, environment: DeploymentEnvironment, options?: {
1086
+ idempotencyKey?: string;
1087
+ requestId?: string;
1088
+ }): Promise<DevkitResult<DeploymentRun>>;
1089
+ deploymentLogs(root: string | undefined, deploymentId?: string): Promise<{
1090
+ operation: string;
1091
+ ok: boolean;
1092
+ workspace: WorkspaceIdentity;
1093
+ data?: undefined;
1094
+ diagnostics: Diagnostic[];
1095
+ nextActions: import("openxiangda-contracts").NextAction[];
1096
+ traceId?: string;
1097
+ } | {
1098
+ operation: string;
1099
+ ok: boolean;
1100
+ workspace: WorkspaceIdentity;
1101
+ data?: DeploymentRun;
1102
+ diagnostics: Diagnostic[];
1103
+ nextActions: import("openxiangda-contracts").NextAction[];
1104
+ traceId?: string;
1105
+ } | {
188
1106
  operation: string;
189
1107
  data: {
190
1108
  deploymentId: string;
@@ -192,6 +1110,11 @@ export declare class OpenXiangdaApplicationServices {
192
1110
  stage: string;
193
1111
  checkpoints: import("openxiangda-contracts").DeploymentCheckpoint[];
194
1112
  failure: import("openxiangda-contracts").DeploymentFailure | undefined;
1113
+ rootFailure: import("openxiangda-contracts").DeploymentFailure | null;
1114
+ latestFailure: import("openxiangda-contracts").DeploymentFailure | null;
1115
+ candidate: import("openxiangda-contracts").DeploymentCandidate;
1116
+ recovery: import("openxiangda-contracts").DeploymentRecovery;
1117
+ attempts: import("openxiangda-contracts").DeploymentAttempt[];
195
1118
  traceId: unknown;
196
1119
  };
197
1120
  ok: boolean;
@@ -202,28 +1125,52 @@ export declare class OpenXiangdaApplicationServices {
202
1125
  }>;
203
1126
  retry(root: string | undefined, deploymentId: string): Promise<DevkitResult<DeploymentRun>>;
204
1127
  cancel(root: string | undefined, deploymentId: string): Promise<DevkitResult<DeploymentRun>>;
205
- promote(root: string | undefined, deploymentId: string, environment: "preproduction" | "production"): Promise<DevkitResult<DeploymentRun>>;
206
- rollback(root: string | undefined, environment: "development" | "preproduction" | "production", appVersionId: string): Promise<DevkitResult<DeploymentRun>>;
207
- doctor(root?: string): Promise<DevkitResult<{
208
- commands: {
209
- command: string;
210
- ok: boolean;
211
- version: string;
212
- }[];
213
- platform: Record<string, unknown>;
214
- }>>;
215
- dev(root?: string): Promise<DevkitResult<{
216
- exitCode: number;
1128
+ private deploymentRecoveryActions;
1129
+ productionDeploymentPlan(root: string | undefined, deploymentId: string): Promise<DevkitResult<{
1130
+ environment: string;
1131
+ sourceDeploymentId: string;
1132
+ appVersionId: string;
1133
+ packageDigest: string;
1134
+ sealed: boolean;
1135
+ submitted: boolean;
1136
+ rebuild: boolean;
1137
+ businessAcceptance: string;
217
1138
  }>>;
1139
+ deployProduction(root: string | undefined, deploymentId: string): Promise<DevkitResult<undefined> | DevkitResult<DeploymentRun>>;
1140
+ private productionPromotionDiagnostics;
1141
+ rollback(root: string | undefined, environment: DeploymentEnvironment, appVersionId: string, options?: {
1142
+ operationId?: string;
1143
+ }): Promise<DevkitResult<DeploymentRun>>;
1144
+ private deploymentEnvironment;
1145
+ private changeEnvironmentRuntimeState;
1146
+ dev(root?: string, input?: {
1147
+ noOpen?: boolean;
1148
+ /** @internal Used by the packaged browser verification harness. */
1149
+ webPort?: number;
1150
+ onStatus?: (message: string) => void;
1151
+ }): Promise<DevkitResult<undefined> | DevkitResult<import("./connected-development.js").ConnectedDevelopmentResult>>;
218
1152
  private workspace;
1153
+ private appSpecContractIndex;
1154
+ private validateTargetConfigurationCompatibility;
1155
+ private configurationCompatibilityDiagnostic;
219
1156
  private client;
220
1157
  private get toolchainVersion();
1158
+ private deliveryCacheContext;
1159
+ private get toolchainCapsule();
1160
+ private initializeBackend;
1161
+ private packageScriptLabel;
221
1162
  private runPackageScript;
1163
+ private repositoryIdentity;
222
1164
  private directoryBundle;
1165
+ private writeCheckSealedArtifactStatus;
1166
+ private sealedArtifactStatus;
1167
+ private previousSealedArtifact;
1168
+ private writeSealedArtifactStatus;
223
1169
  private versionTrainDiagnostics;
1170
+ private toolchainDiagnostics;
224
1171
  private diagnostic;
1172
+ private connectedDevelopmentFailure;
225
1173
  private ok;
226
1174
  private result;
227
1175
  }
228
- export {};
229
1176
  //# sourceMappingURL=application-services.d.ts.map