openxiangda-devkit-core 2.59.0 → 2.62.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 (53) hide show
  1. package/dist/application-agent-source.d.ts +4 -0
  2. package/dist/application-agent-source.d.ts.map +1 -0
  3. package/dist/application-agent-source.js +45 -0
  4. package/dist/application-agent-source.js.map +1 -0
  5. package/dist/application-services.d.ts +43 -0
  6. package/dist/application-services.d.ts.map +1 -1
  7. package/dist/application-services.js +37 -0
  8. package/dist/application-services.js.map +1 -1
  9. package/dist/application-template-catalog.d.ts +101 -0
  10. package/dist/application-template-catalog.d.ts.map +1 -0
  11. package/dist/application-template-catalog.js +52 -0
  12. package/dist/application-template-catalog.js.map +1 -0
  13. package/dist/command-registry.d.ts +20 -0
  14. package/dist/command-registry.d.ts.map +1 -1
  15. package/dist/command-registry.js +2 -0
  16. package/dist/command-registry.js.map +1 -1
  17. package/dist/compiler/ai-catalog.d.ts.map +1 -1
  18. package/dist/compiler/ai-catalog.js +14 -0
  19. package/dist/compiler/ai-catalog.js.map +1 -1
  20. package/dist/compiler/bundle.d.ts +7 -0
  21. package/dist/compiler/bundle.d.ts.map +1 -1
  22. package/dist/compiler/bundle.js +13 -3
  23. package/dist/compiler/bundle.js.map +1 -1
  24. package/dist/compiler/config.d.ts +4 -0
  25. package/dist/compiler/config.d.ts.map +1 -1
  26. package/dist/compiler/config.js +33 -0
  27. package/dist/compiler/config.js.map +1 -1
  28. package/dist/compiler/permission-review.d.ts.map +1 -1
  29. package/dist/control-plane-client.d.ts +15 -0
  30. package/dist/control-plane-client.d.ts.map +1 -1
  31. package/dist/control-plane-client.js +12 -0
  32. package/dist/control-plane-client.js.map +1 -1
  33. package/dist/documentation.d.ts +7 -3
  34. package/dist/documentation.d.ts.map +1 -1
  35. package/dist/documentation.js +1 -0
  36. package/dist/documentation.js.map +1 -1
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/internal/workflow.d.ts +7 -1
  42. package/dist/internal/workflow.d.ts.map +1 -1
  43. package/dist/internal/workflow.js +27 -18
  44. package/dist/internal/workflow.js.map +1 -1
  45. package/dist/session.d.ts +1 -1
  46. package/dist/workflow-source-sync.d.ts +59 -0
  47. package/dist/workflow-source-sync.d.ts.map +1 -0
  48. package/dist/workflow-source-sync.js +254 -0
  49. package/dist/workflow-source-sync.js.map +1 -0
  50. package/dist/workspace-loader.d.ts.map +1 -1
  51. package/dist/workspace-loader.js +2 -1
  52. package/dist/workspace-loader.js.map +1 -1
  53. package/package.json +2 -2
@@ -1,3 +1,4 @@
1
+ import { compileApplicationAgentsV2, NativeApplicationAgentContractError } from 'openxiangda-contracts/native-compiler';
1
2
  import { normalizeDataMutationGrants } from 'openxiangda-contracts';
2
3
  import { parseNativeParentReadPolicy, validateNativeParentReadPolicies, NativeParentReadPolicyError, NativeDataPolicyExpressionV2Error } from 'openxiangda-contracts/native-compiler';
3
4
  import { assertWorkflowNativeStagePolicy } from 'openxiangda-contracts';
@@ -808,6 +809,16 @@ function validateEventFilterCondition(value, path, allowedFields, diagnostics, s
808
809
  export function validateAppConfig(value) {
809
810
  const diagnostics = [];
810
811
  const config = object(value);
812
+ if (config.agents !== undefined) {
813
+ try {
814
+ compileApplicationAgentsV2(String(object(config.app).code || ''), config.agents, (Array.isArray(object(config.data).resources) ? object(config.data).resources : []), { allowInstructionFiles: true, authz: object(config.authz) });
815
+ }
816
+ catch (error) {
817
+ if (!(error instanceof NativeApplicationAgentContractError))
818
+ throw error;
819
+ diagnostics.push(diagnostic(error.code, error.message, error.pointer));
820
+ }
821
+ }
811
822
  rejectNativeEnvironmentFields(config, diagnostics);
812
823
  if (config.schemaVersion !== 3) {
813
824
  diagnostics.push(diagnostic('APP_CONFIG_SCHEMA_UNSUPPORTED', 'schemaVersion 必须是 3', 'schemaVersion', '使用 Native 2.0 模板重新生成 openxiangda-app.config.ts;不支持 v2 自动转换'));
@@ -1044,6 +1055,12 @@ export function validateAppConfig(value) {
1044
1055
  }
1045
1056
  });
1046
1057
  }
1058
+ (Array.isArray(source.filterWhere) ? source.filterWhere : []).forEach((rawFilter, filterIndex) => {
1059
+ const filterField = string(object(rawFilter).field);
1060
+ if (!targetFieldList.some(candidate => string(object(candidate).code) === filterField)) {
1061
+ diagnostics.push(diagnostic('APP_CONFIG_DATA_RESOURCE_SOURCE_FILTER_FIELD_NOT_FOUND', `动态来源筛选字段 ${filterField} 未在 ${targetCode} 声明`, `${sourcePath}.filterWhere[${filterIndex}].field`));
1062
+ }
1063
+ });
1047
1064
  const sourceFilters = Array.isArray(source.filters) ? source.filters : [];
1048
1065
  sourceFilters.forEach((rawFilter, filterIndex) => {
1049
1066
  const filter = object(rawFilter);
@@ -2526,6 +2543,7 @@ export function validateAppConfig(value) {
2526
2543
  'definitionVersion',
2527
2544
  'bindingVersion',
2528
2545
  'acceptedCommandDeactivationPolicy',
2546
+ 'sourceBase',
2529
2547
  ].includes(key))) {
2530
2548
  diagnostics.push(diagnostic('APP_CONFIG_WORKFLOW_ACTIVATION_INVALID', 'Workflow activation 只能声明固定版本与停用策略', path));
2531
2549
  }
@@ -2537,6 +2555,11 @@ export function validateAppConfig(value) {
2537
2555
  if ('environmentKey' in activation) {
2538
2556
  diagnostics.push(diagnostic('APP_CONFIG_ENVIRONMENT_OVERRIDE_FORBIDDEN', 'Workflow activation 属于环境中立 AppVersion,不能声明 environmentKey', `${path}.environmentKey`));
2539
2557
  }
2558
+ if (activation.sourceBase !== undefined) {
2559
+ const base = object(activation.sourceBase);
2560
+ if (Object.keys(base).length !== 2 || !['definitionDigest', 'bindingDigest'].every(key => /^(sha256:)?[a-f0-9]{64}$/.test(String(base[key] || ''))))
2561
+ diagnostics.push(diagnostic('APP_CONFIG_WORKFLOW_SOURCE_BASE_INVALID', '源码基线只能包含 definitionDigest 和 bindingDigest', `${path}.sourceBase`));
2562
+ }
2540
2563
  const definitionVersion = Number(activation.definitionVersion);
2541
2564
  const bindingVersion = Number(activation.bindingVersion);
2542
2565
  const definition = definitionByKey.get(`${workflowCode}:${definitionVersion}`);
@@ -3229,6 +3252,15 @@ function validateBackendOperations(rawOperations, declaredResources, declaredRes
3229
3252
  ? ai.sideEffects
3230
3253
  : [];
3231
3254
  const risk = string(ai.risk);
3255
+ if (risk === 'external' && ai.reconcile === undefined) {
3256
+ diagnostics.push({
3257
+ ...diagnostic('AI_EXTERNAL_RECONCILIATION_MISSING', '外部 AI 操作未声明业务结果核对能力,执行结果不确定时只能保留未知并人工核实', `${path}.ai.reconcile`),
3258
+ severity: 'warning',
3259
+ });
3260
+ }
3261
+ if (object(ai.reconcile).kind === 'platform-transaction') {
3262
+ diagnostics.push({ ...diagnostic('AI_APP_TRANSACTION_RECONCILIATION_UNSUPPORTED', '应用业务操作的 completing 平台事务核对尚未提供;请声明只读状态操作,否则保留结果未知', `${path}.ai.reconcile`), severity: 'warning' });
3263
+ }
3232
3264
  const aiKeys = Object.keys(ai);
3233
3265
  const allowedAiKeys = new Set([
3234
3266
  'name',
@@ -3237,6 +3269,7 @@ function validateBackendOperations(rawOperations, declaredResources, declaredRes
3237
3269
  'confirmation',
3238
3270
  'resources',
3239
3271
  'sideEffects',
3272
+ 'reconcile',
3240
3273
  'concurrency',
3241
3274
  'timeoutMs',
3242
3275
  'agent',