openxiangda-devkit-core 2.0.0-alpha.100

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 (126) hide show
  1. package/README.md +13 -0
  2. package/dist/app-spec.d.ts +210 -0
  3. package/dist/app-spec.d.ts.map +1 -0
  4. package/dist/app-spec.js +1262 -0
  5. package/dist/app-spec.js.map +1 -0
  6. package/dist/application-services.d.ts +600 -0
  7. package/dist/application-services.d.ts.map +1 -0
  8. package/dist/application-services.js +1603 -0
  9. package/dist/application-services.js.map +1 -0
  10. package/dist/backend-image-build.d.ts +23 -0
  11. package/dist/backend-image-build.d.ts.map +1 -0
  12. package/dist/backend-image-build.js +209 -0
  13. package/dist/backend-image-build.js.map +1 -0
  14. package/dist/command-registry.d.ts +177 -0
  15. package/dist/command-registry.d.ts.map +1 -0
  16. package/dist/command-registry.js +27 -0
  17. package/dist/command-registry.js.map +1 -0
  18. package/dist/compiler/ai-catalog.d.ts +4 -0
  19. package/dist/compiler/ai-catalog.d.ts.map +1 -0
  20. package/dist/compiler/ai-catalog.js +353 -0
  21. package/dist/compiler/ai-catalog.js.map +1 -0
  22. package/dist/compiler/authorization-transition.d.ts +7 -0
  23. package/dist/compiler/authorization-transition.d.ts.map +1 -0
  24. package/dist/compiler/authorization-transition.js +27 -0
  25. package/dist/compiler/authorization-transition.js.map +1 -0
  26. package/dist/compiler/bundle.d.ts +34 -0
  27. package/dist/compiler/bundle.d.ts.map +1 -0
  28. package/dist/compiler/bundle.js +1865 -0
  29. package/dist/compiler/bundle.js.map +1 -0
  30. package/dist/compiler/config.d.ts +857 -0
  31. package/dist/compiler/config.d.ts.map +1 -0
  32. package/dist/compiler/config.js +3848 -0
  33. package/dist/compiler/config.js.map +1 -0
  34. package/dist/compiler/data-policy-expression.d.ts +12 -0
  35. package/dist/compiler/data-policy-expression.d.ts.map +1 -0
  36. package/dist/compiler/data-policy-expression.js +43 -0
  37. package/dist/compiler/data-policy-expression.js.map +1 -0
  38. package/dist/compiler/field-codec.d.ts +14 -0
  39. package/dist/compiler/field-codec.d.ts.map +1 -0
  40. package/dist/compiler/field-codec.js +131 -0
  41. package/dist/compiler/field-codec.js.map +1 -0
  42. package/dist/compiler/field-physical-plan.d.ts +10 -0
  43. package/dist/compiler/field-physical-plan.d.ts.map +1 -0
  44. package/dist/compiler/field-physical-plan.js +66 -0
  45. package/dist/compiler/field-physical-plan.js.map +1 -0
  46. package/dist/compiler/field-policy-path.d.ts +10 -0
  47. package/dist/compiler/field-policy-path.d.ts.map +1 -0
  48. package/dist/compiler/field-policy-path.js +283 -0
  49. package/dist/compiler/field-policy-path.js.map +1 -0
  50. package/dist/compiler/field-query-plan.d.ts +13 -0
  51. package/dist/compiler/field-query-plan.d.ts.map +1 -0
  52. package/dist/compiler/field-query-plan.js +122 -0
  53. package/dist/compiler/field-query-plan.js.map +1 -0
  54. package/dist/compiler/field-surface.d.ts +15 -0
  55. package/dist/compiler/field-surface.d.ts.map +1 -0
  56. package/dist/compiler/field-surface.js +51 -0
  57. package/dist/compiler/field-surface.js.map +1 -0
  58. package/dist/compiler/index.d.ts +6 -0
  59. package/dist/compiler/index.d.ts.map +1 -0
  60. package/dist/compiler/index.js +6 -0
  61. package/dist/compiler/index.js.map +1 -0
  62. package/dist/compiler/package-compiler.d.ts +22 -0
  63. package/dist/compiler/package-compiler.d.ts.map +1 -0
  64. package/dist/compiler/package-compiler.js +246 -0
  65. package/dist/compiler/package-compiler.js.map +1 -0
  66. package/dist/compiler/schema-composition.d.ts +21 -0
  67. package/dist/compiler/schema-composition.d.ts.map +1 -0
  68. package/dist/compiler/schema-composition.js +193 -0
  69. package/dist/compiler/schema-composition.js.map +1 -0
  70. package/dist/config.d.ts +2 -0
  71. package/dist/config.d.ts.map +1 -0
  72. package/dist/config.js +2 -0
  73. package/dist/config.js.map +1 -0
  74. package/dist/connected-development.d.ts +62 -0
  75. package/dist/connected-development.d.ts.map +1 -0
  76. package/dist/connected-development.js +393 -0
  77. package/dist/connected-development.js.map +1 -0
  78. package/dist/control-plane-client.d.ts +684 -0
  79. package/dist/control-plane-client.d.ts.map +1 -0
  80. package/dist/control-plane-client.js +860 -0
  81. package/dist/control-plane-client.js.map +1 -0
  82. package/dist/deployment.d.ts +67 -0
  83. package/dist/deployment.d.ts.map +1 -0
  84. package/dist/deployment.js +311 -0
  85. package/dist/deployment.js.map +1 -0
  86. package/dist/index.d.ts +17 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +17 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/internal/workflow.d.ts +83 -0
  91. package/dist/internal/workflow.d.ts.map +1 -0
  92. package/dist/internal/workflow.js +419 -0
  93. package/dist/internal/workflow.js.map +1 -0
  94. package/dist/nest-injection-contract.d.ts +4 -0
  95. package/dist/nest-injection-contract.d.ts.map +1 -0
  96. package/dist/nest-injection-contract.js +116 -0
  97. package/dist/nest-injection-contract.js.map +1 -0
  98. package/dist/package-compiler.d.ts +2 -0
  99. package/dist/package-compiler.d.ts.map +1 -0
  100. package/dist/package-compiler.js +2 -0
  101. package/dist/package-compiler.js.map +1 -0
  102. package/dist/session.d.ts +143 -0
  103. package/dist/session.d.ts.map +1 -0
  104. package/dist/session.js +351 -0
  105. package/dist/session.js.map +1 -0
  106. package/dist/testing.d.ts +77 -0
  107. package/dist/testing.d.ts.map +1 -0
  108. package/dist/testing.js +213 -0
  109. package/dist/testing.js.map +1 -0
  110. package/dist/toolchain-capsule.d.ts +45 -0
  111. package/dist/toolchain-capsule.d.ts.map +1 -0
  112. package/dist/toolchain-capsule.js +165 -0
  113. package/dist/toolchain-capsule.js.map +1 -0
  114. package/dist/version.d.ts +3 -0
  115. package/dist/version.d.ts.map +1 -0
  116. package/dist/version.js +11 -0
  117. package/dist/version.js.map +1 -0
  118. package/dist/workspace-loader.d.ts +17 -0
  119. package/dist/workspace-loader.d.ts.map +1 -0
  120. package/dist/workspace-loader.js +140 -0
  121. package/dist/workspace-loader.js.map +1 -0
  122. package/dist/workspace.d.ts +15 -0
  123. package/dist/workspace.d.ts.map +1 -0
  124. package/dist/workspace.js +69 -0
  125. package/dist/workspace.js.map +1 -0
  126. package/package.json +44 -0
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # openxiangda-devkit-core
2
+
3
+ Application services shared by the OpenXiangda 2.0 CLI and MCP server:
4
+
5
+ - validate `openxiangda-app.config.ts`;
6
+ - create a deterministic `WorkspaceContext`;
7
+ - compile and digest an `AppPackage`;
8
+ - negotiate platform capabilities;
9
+ - upload immutable artifacts and create/query a durable `DeploymentRun`.
10
+ - run loopback Web, NestJS and a connected proxy against the linked platform;
11
+ - keep developer access and connected Dev Session tokens in memory only.
12
+
13
+ The package has no console, prompt or global process-state dependencies.
@@ -0,0 +1,210 @@
1
+ import { SCHEMA_VERSIONS, type Diagnostic } from "openxiangda-contracts";
2
+ export declare const APP_SPEC_SCHEMAS: {
3
+ readonly app: "openxiangda.appspec/app/v1";
4
+ readonly capability: "openxiangda.appspec/capability/v1";
5
+ readonly change: "openxiangda.appspec/change/v1";
6
+ readonly decision: "openxiangda.appspec/decision/v1";
7
+ readonly context: "openxiangda.appspec/context/v2";
8
+ };
9
+ export declare const APP_SPEC_LIMITS: {
10
+ readonly maximumFiles: 128;
11
+ readonly maximumFileBytes: number;
12
+ readonly maximumTotalBytes: number;
13
+ readonly maximumContextBytes: number;
14
+ readonly maximumDirectoryEntries: 256;
15
+ readonly maximumHistoryDepth: 1;
16
+ };
17
+ export type AppSpecRisk = "L1" | "L2" | "L3";
18
+ export type AppSpecCurrentSpecStatus = "pending" | "merged" | "not-applicable";
19
+ export type AppSpecDocumentKind = "app" | "capability" | "change" | "decision";
20
+ type MetadataValue = string | string[] | boolean;
21
+ export interface AppSpecContractIndex {
22
+ appCode: string;
23
+ resourceCodes: string[];
24
+ actionCodes: string[];
25
+ configDigest?: string;
26
+ contractDigest?: string;
27
+ aiCatalogDigest?: string;
28
+ }
29
+ export interface AppSpecDocument {
30
+ kind: AppSpecDocumentKind;
31
+ id: string;
32
+ title: string;
33
+ status: string;
34
+ path: string;
35
+ metadata: Record<string, MetadataValue>;
36
+ requirementIds: string[];
37
+ acceptanceIds: string[];
38
+ references: {
39
+ capabilities: string[];
40
+ requirements: string[];
41
+ resources: string[];
42
+ actions: string[];
43
+ decisions: string[];
44
+ };
45
+ content: string;
46
+ }
47
+ export interface AppSpecDocumentSummary {
48
+ kind: AppSpecDocumentKind;
49
+ id: string;
50
+ title: string;
51
+ status: string;
52
+ path: string;
53
+ risk: AppSpecRisk | null;
54
+ requirementCount: number;
55
+ acceptanceScenarioCount: number;
56
+ }
57
+ export interface AppSpecContext {
58
+ schemaVersion: typeof APP_SPEC_SCHEMAS.context;
59
+ enabled: boolean;
60
+ mode: "advisory";
61
+ releaseGate: false;
62
+ root: "appspec";
63
+ selector: string | null;
64
+ contract: AppSpecContractIndex;
65
+ index: {
66
+ application: AppSpecDocumentSummary | null;
67
+ capabilities: AppSpecDocumentSummary[];
68
+ activeChanges: AppSpecDocumentSummary[];
69
+ decisions: AppSpecDocumentSummary[];
70
+ history: AppSpecDocumentSummary[];
71
+ };
72
+ application: AppSpecDocument | null;
73
+ capabilities: AppSpecDocument[];
74
+ activeChanges: AppSpecDocument[];
75
+ archivedChanges: AppSpecDocument[];
76
+ decisions: AppSpecDocument[];
77
+ contextBudget: {
78
+ maximumBytes: number;
79
+ contentBytes: number;
80
+ truncated: boolean;
81
+ omitted: AppSpecDocumentSummary[];
82
+ };
83
+ stats: {
84
+ files: number;
85
+ bytes: number;
86
+ capabilities: number;
87
+ activeChanges: number;
88
+ historyChanges: number;
89
+ decisions: number;
90
+ requirements: number;
91
+ acceptanceScenarios: number;
92
+ };
93
+ workspaceDigest: string | null;
94
+ selectionDigest: string | null;
95
+ diagnostics: Diagnostic[];
96
+ }
97
+ export interface InitializeAppSpecInput {
98
+ root: string;
99
+ appCode: string;
100
+ appName: string;
101
+ }
102
+ export interface CreateAppSpecCapabilityInput extends InitializeAppSpecInput {
103
+ id: string;
104
+ title: string;
105
+ resources?: string[];
106
+ actions?: string[];
107
+ }
108
+ export interface CreateAppSpecChangeInput extends InitializeAppSpecInput {
109
+ id: string;
110
+ title: string;
111
+ risk?: AppSpecRisk;
112
+ summary?: string;
113
+ capabilities?: string[];
114
+ requirements?: string[];
115
+ resources?: string[];
116
+ actions?: string[];
117
+ }
118
+ export interface CloseAppSpecChangeInput {
119
+ root: string;
120
+ id: string;
121
+ summary?: string;
122
+ currentSpec?: Exclude<AppSpecCurrentSpecStatus, "pending">;
123
+ contract: AppSpecContractIndex;
124
+ }
125
+ export declare function initializeAppSpec(input: InitializeAppSpecInput): {
126
+ schemaVersion: "openxiangda.appspec/context/v2";
127
+ enabled: boolean;
128
+ advisory: boolean;
129
+ releaseGate: boolean;
130
+ created: string[];
131
+ existing: string[];
132
+ };
133
+ export declare function createAppSpecCapability(input: CreateAppSpecCapabilityInput): {
134
+ schemaVersion: "openxiangda.appspec/context/v2";
135
+ enabled: boolean;
136
+ advisory: boolean;
137
+ releaseGate: boolean;
138
+ created: string;
139
+ };
140
+ export declare function createAppSpecChange(input: CreateAppSpecChangeInput): {
141
+ schemaVersion: "openxiangda.appspec/context/v2";
142
+ enabled: boolean;
143
+ advisory: boolean;
144
+ releaseGate: boolean;
145
+ created: string;
146
+ risk: AppSpecRisk;
147
+ status: string;
148
+ };
149
+ export declare function closeAppSpecChange(input: CloseAppSpecChangeInput): {
150
+ schemaVersion: "openxiangda.appspec/context/v2";
151
+ enabled: boolean;
152
+ advisory: boolean;
153
+ releaseGate: boolean;
154
+ archived: null;
155
+ status: string;
156
+ converged: boolean;
157
+ diagnostics: Diagnostic[];
158
+ } | {
159
+ schemaVersion: "openxiangda.appspec/context/v2";
160
+ enabled: boolean;
161
+ advisory: boolean;
162
+ releaseGate: boolean;
163
+ archived: string;
164
+ status: string;
165
+ converged: boolean;
166
+ diagnostics: Diagnostic[];
167
+ };
168
+ export declare function inspectAppSpec(root: string, contract: AppSpecContractIndex, selector?: string): AppSpecContext;
169
+ export declare function advisoryAppSpecDiagnostics(diagnostics: Diagnostic[]): {
170
+ severity: "info" | "warning";
171
+ remediation: string;
172
+ schemaVersion: typeof SCHEMA_VERSIONS.diagnostic;
173
+ code: string;
174
+ message: string;
175
+ path?: string;
176
+ source?: string;
177
+ retryable: boolean;
178
+ details?: Record<string, unknown>;
179
+ }[];
180
+ export declare function summarizeAppSpecContext(context: AppSpecContext): {
181
+ enabled: boolean;
182
+ mode: "advisory";
183
+ releaseGate: false;
184
+ workspaceDigest: string | null;
185
+ selectionDigest: string | null;
186
+ contextBudget: {
187
+ maximumBytes: number;
188
+ contentBytes: number;
189
+ truncated: boolean;
190
+ omitted: AppSpecDocumentSummary[];
191
+ };
192
+ stats: {
193
+ files: number;
194
+ bytes: number;
195
+ capabilities: number;
196
+ activeChanges: number;
197
+ historyChanges: number;
198
+ decisions: number;
199
+ requirements: number;
200
+ acceptanceScenarios: number;
201
+ };
202
+ diagnostics: {
203
+ errors: number;
204
+ warnings: number;
205
+ info: number;
206
+ };
207
+ nextCommand: string;
208
+ };
209
+ export {};
210
+ //# sourceMappingURL=app-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-spec.d.ts","sourceRoot":"","sources":["../src/app-spec.ts"],"names":[],"mappings":"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"}