@enterpriseai/cli 3.15.7 → 3.15.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ environments.
25
25
  | License | Apache-2.0 |
26
26
  | Source | Public GitHub repository with issues, releases, and CI |
27
27
  | Publishing | GitHub Actions trusted publishing with npm provenance |
28
- | Runtime | Node.js 20 or newer |
28
+ | Runtime | Node.js 24 LTS or newer |
29
29
  | Secrets | No secrets, tenant credentials, or local environment files are committed or published |
30
30
  | Support | Security issues are handled through [SECURITY.md](SECURITY.md); product issues through GitHub Issues |
31
31
 
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,eAAO,MAAM,YAAY,SACsC,CAAC"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,eAAO,MAAM,YAAY,SACsC,CAAC"}
@@ -27,6 +27,10 @@ function printGuideText() {
27
27
  for (const command of guide.firstCommands) {
28
28
  console.log(`- ${formatCommand(command)}`);
29
29
  }
30
+ out.heading('Capabilities');
31
+ for (const capability of guide.capabilities) {
32
+ console.log(`- ${chalk.cyan(capability)}`);
33
+ }
30
34
  out.heading('Operating rules');
31
35
  for (const rule of guide.operatingRules) {
32
36
  console.log(`- ${rule}`);
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -707,7 +707,7 @@ on:
707
707
 
708
708
  env:
709
709
  APP_NAME: ${appName}
710
- NODE_VERSION: '20.x'
710
+ NODE_VERSION: '24.x'
711
711
 
712
712
  jobs:
713
713
  build-and-deploy:
@@ -790,8 +790,8 @@ export function buildForwardedInitArgs(nameArg, options, answers, tenantId) {
790
790
  async function runCreatePreflight() {
791
791
  showCreateSection("Making sure your computer has the correct prerequisites.");
792
792
  const nodeMajor = Number.parseInt(process.versions.node.split(".")[0] || "0", 10);
793
- if (nodeMajor < 20) {
794
- throw new Error(`Node.js ${process.versions.node} is too old. EAI CLI requires Node.js 20 or newer.`);
793
+ if (nodeMajor < 24) {
794
+ throw new Error(`Node.js ${process.versions.node} is too old. EAI CLI requires Node.js 24 or newer.`);
795
795
  }
796
796
  const checks = [
797
797
  { label: "Git", command: "git", args: ["--version"] },
@@ -2063,7 +2063,7 @@ on:
2063
2063
 
2064
2064
  env:
2065
2065
  APP_NAME: ${opts.name}
2066
- NODE_VERSION: '20.x'
2066
+ NODE_VERSION: '24.x'
2067
2067
 
2068
2068
  jobs:
2069
2069
  build-and-deploy:
@@ -25,14 +25,21 @@ export interface TypeSeedVerificationResult {
25
25
  failedCount: number;
26
26
  converged: boolean;
27
27
  }
28
+ /** Reports either a planned or completed tenant-scoped Object Type publication. */
28
29
  export interface TypeSeedResult {
29
30
  tenantKey: string;
30
31
  tenantId: string;
32
+ dryRun?: boolean;
33
+ requestedObjectTypes?: Array<{
34
+ name: string;
35
+ slug?: string;
36
+ }>;
31
37
  created: number;
32
38
  updated: number;
33
39
  failed: number;
34
40
  verification?: TypeSeedVerificationResult;
35
41
  publishingMode?: "app-manifest" | "direct-object-types";
42
+ appManifestRequestShape?: "name-derived-slug" | "explicit-name-and-slug";
36
43
  resourceApiSchemaSync?: Record<string, unknown>;
37
44
  appManifestFallbackReason?: string;
38
45
  error?: string;
@@ -71,7 +78,8 @@ export interface RemoteObjectTypeDocument {
71
78
  status?: string;
72
79
  publishedAt?: string | null;
73
80
  }
74
- export declare function shouldFailTypeSeedRun(results: Array<Pick<TypeSeedResult, "verification" | "resourceApiSchemaSync">>): boolean;
81
+ /** Treats dry runs as plans and completed runs as successful only after convergence. */
82
+ export declare function shouldFailTypeSeedRun(results: Array<Pick<TypeSeedResult, "dryRun" | "verification" | "resourceApiSchemaSync">>): boolean;
75
83
  export interface ResourceApiSchemaSyncGuidance {
76
84
  title: string;
77
85
  currentState: string;
@@ -109,8 +117,19 @@ export declare function diffObjectTypesForTenant(tenantKey: string, tenantId: st
109
117
  export declare function resolveTypesPullOutputPath(root: string, output: string): Promise<string>;
110
118
  export declare function describeFailedPlatformResponse(response: Response): Promise<string>;
111
119
  export declare function appObjectTypePublishFallbackReason(response: Response, phase: "save" | "publish"): Promise<string | null>;
112
- export declare function toAppManifestObjectTypes(types: ObjectTypeDefinition[]): Record<string, unknown>[];
113
- export declare function summarizeAppObjectTypePublish(tenantKey: string, tenantId: string, types: ObjectTypeDefinition[], payload: unknown): TypeSeedResult;
120
+ /**
121
+ * Serializes source Object Types into either deployed app-manifest request shape.
122
+ * Relationship targets remain exact source slugs in both shapes.
123
+ */
124
+ export declare function toAppManifestObjectTypes(types: ObjectTypeDefinition[], requestShape?: "name-derived-slug" | "explicit-name-and-slug"): Record<string, unknown>[];
125
+ /** Builds a non-mutating publication plan without claiming platform convergence. */
126
+ export declare function buildTypeSeedDryRunResult(tenantKey: string, tenantId: string, types: ObjectTypeDefinition[]): TypeSeedResult;
127
+ /** Converts the app-manifest publish response into the stable CLI seed result. */
128
+ export declare function summarizeAppObjectTypePublish(tenantKey: string, tenantId: string, types: ObjectTypeDefinition[], payload: unknown, appManifestRequestShape?: TypeSeedResult["appManifestRequestShape"]): TypeSeedResult;
129
+ /**
130
+ * Publishes through the app manifest and negotiates the receiver's slug shape once.
131
+ * Falls back to legacy direct writes only when the app-manifest route is unavailable.
132
+ */
114
133
  export declare function trySeedViaAppManifestPublish(client: PlatformAPIClient, tenantKey: string, tenantId: string, types: ObjectTypeDefinition[]): Promise<{
115
134
  result?: TypeSeedResult;
116
135
  fallbackReason?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"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"}
@@ -15,11 +15,16 @@ import { canonicalizeObjectTypeRelationshipTargets, findProjectRoot, loadObjectT
15
15
  import { extractServerErrorContext, PlatformAPIClient } from "../lib/api.js";
16
16
  import { resolveCommandContext } from "../lib/context.js";
17
17
  import { validateObjectTypeDefaultValues } from "../lib/object-type-defaults.js";
18
+ import { deriveObjectTypeSlugV1 } from "../lib/object-type-identifiers.js";
18
19
  import { isRecord, toObjectTypeSlug } from "../lib/utils.js";
19
20
  import * as out from "../lib/output.js";
20
21
  import { ErrorCode, exitWithError } from "../lib/error-codes.js";
22
+ /** Treats dry runs as plans and completed runs as successful only after convergence. */
21
23
  export function shouldFailTypeSeedRun(results) {
22
24
  return results.some((result) => {
25
+ if (result.dryRun) {
26
+ return false;
27
+ }
23
28
  const syncStatus = isRecord(result.resourceApiSchemaSync)
24
29
  ? String(result.resourceApiSchemaSync.status ?? "").toLowerCase()
25
30
  : undefined;
@@ -595,11 +600,42 @@ export async function appObjectTypePublishFallbackReason(response, phase) {
595
600
  }
596
601
  return null;
597
602
  }
598
- export function toAppManifestObjectTypes(types) {
599
- return types.map((type) => ({
600
- ...type,
601
- status: type.status ?? "published",
602
- }));
603
+ /**
604
+ * Serializes source Object Types into either deployed app-manifest request shape.
605
+ * Relationship targets remain exact source slugs in both shapes.
606
+ */
607
+ export function toAppManifestObjectTypes(types, requestShape = "explicit-name-and-slug") {
608
+ return types.map((type) => {
609
+ if (requestShape === "explicit-name-and-slug") {
610
+ return {
611
+ ...type,
612
+ status: type.status ?? "published",
613
+ };
614
+ }
615
+ const manifestType = { ...type };
616
+ delete manifestType.slug;
617
+ return {
618
+ ...manifestType,
619
+ status: type.status ?? "published",
620
+ };
621
+ });
622
+ }
623
+ /** Builds a non-mutating publication plan without claiming platform convergence. */
624
+ export function buildTypeSeedDryRunResult(tenantKey, tenantId, types) {
625
+ return {
626
+ tenantKey,
627
+ tenantId,
628
+ dryRun: true,
629
+ requestedObjectTypes: types.map((type) => ({
630
+ name: type.name,
631
+ ...(type.slug ? { slug: type.slug } : {}),
632
+ })),
633
+ created: 0,
634
+ updated: 0,
635
+ failed: 0,
636
+ publishingMode: "app-manifest",
637
+ appManifestRequestShape: "explicit-name-and-slug",
638
+ };
603
639
  }
604
640
  function readStringArray(value) {
605
641
  return Array.isArray(value)
@@ -636,7 +672,8 @@ function readTypeSeedVerification(tenantId, requestedTypes, value, counts) {
636
672
  converged: value.converged === true,
637
673
  };
638
674
  }
639
- export function summarizeAppObjectTypePublish(tenantKey, tenantId, types, payload) {
675
+ /** Converts the app-manifest publish response into the stable CLI seed result. */
676
+ export function summarizeAppObjectTypePublish(tenantKey, tenantId, types, payload, appManifestRequestShape) {
640
677
  const body = isRecord(payload) ? payload : {};
641
678
  const results = Array.isArray(body.results)
642
679
  ? body.results.filter(isRecord)
@@ -657,17 +694,52 @@ export function summarizeAppObjectTypePublish(tenantKey, tenantId, types, payloa
657
694
  failed,
658
695
  verification: readTypeSeedVerification(tenantId, types.map((type) => type.name), body.verification, counts),
659
696
  publishingMode: "app-manifest",
697
+ ...(appManifestRequestShape ? { appManifestRequestShape } : {}),
660
698
  resourceApiSchemaSync: isRecord(body.resourceApiSchemaSync)
661
699
  ? enrichResourceApiSchemaSync(body.resourceApiSchemaSync)
662
700
  : undefined,
663
701
  };
664
702
  }
703
+ /**
704
+ * Publishes through the app manifest and negotiates the receiver's slug shape once.
705
+ * Falls back to legacy direct writes only when the app-manifest route is unavailable.
706
+ */
665
707
  export async function trySeedViaAppManifestPublish(client, tenantKey, tenantId, types) {
666
- const manifestResponse = await client.saveAppObjectTypeManifest(tenantKey, toAppManifestObjectTypes(types));
708
+ let appManifestRequestShape = "explicit-name-and-slug";
709
+ let manifestResponse = await client.saveAppObjectTypeManifest(tenantKey, toAppManifestObjectTypes(types));
667
710
  const manifestFallbackReason = await appObjectTypePublishFallbackReason(manifestResponse, "save");
668
711
  if (manifestFallbackReason) {
669
712
  return { fallbackReason: manifestFallbackReason };
670
713
  }
714
+ // INVARIANT: A 422 saves no manifest, so only that response permits the
715
+ // one alternate-shape retry without duplicating a platform write.
716
+ if (manifestResponse.status === 422) {
717
+ const explicitFailure = await describeFailedPlatformResponse(manifestResponse);
718
+ const exactSlugType = types.find((type) => typeof type.slug === "string" &&
719
+ type.slug !== deriveObjectTypeSlugV1(type.name));
720
+ if (exactSlugType) {
721
+ throw new Error([
722
+ `app manifest save failed: ${explicitFailure}`,
723
+ `The deployed platform requires explicit slug support to preserve Object Type "${exactSlugType.name}" with slug "${exactSlugType.slug}".`,
724
+ "Do not remove or rename the source slug. Upgrade the platform receiver, then retry once.",
725
+ "Run eai errors explain app_manifest_validation_failed --format json.",
726
+ ].join("\n"));
727
+ }
728
+ const nameDerivedResponse = await client.saveAppObjectTypeManifest(tenantKey, toAppManifestObjectTypes(types, "name-derived-slug"));
729
+ if (nameDerivedResponse.ok) {
730
+ manifestResponse = nameDerivedResponse;
731
+ appManifestRequestShape = "name-derived-slug";
732
+ }
733
+ else {
734
+ const nameDerivedFailure = await describeFailedPlatformResponse(nameDerivedResponse);
735
+ throw new Error([
736
+ "app manifest save failed for both supported request shapes",
737
+ `explicit-name-and-slug: ${explicitFailure}`,
738
+ `name-derived-slug: ${nameDerivedFailure}`,
739
+ "Run eai errors explain app_manifest_validation_failed --format json.",
740
+ ].join("\n"));
741
+ }
742
+ }
671
743
  if (!manifestResponse.ok) {
672
744
  const detail = await describeFailedPlatformResponse(manifestResponse);
673
745
  throw new Error(`app manifest save failed: ${detail}${appOwnedStoragePublishGuidance(detail, tenantKey, tenantId)}`);
@@ -681,7 +753,7 @@ export async function trySeedViaAppManifestPublish(client, tenantKey, tenantId,
681
753
  const detail = await describeFailedPlatformResponse(publishResponse);
682
754
  throw new Error(`app manifest publish failed: ${detail}${appOwnedStoragePublishGuidance(detail, tenantKey, tenantId)}`);
683
755
  }
684
- const result = summarizeAppObjectTypePublish(tenantKey, tenantId, types, await publishResponse.json());
756
+ const result = summarizeAppObjectTypePublish(tenantKey, tenantId, types, await publishResponse.json(), appManifestRequestShape);
685
757
  return { result };
686
758
  }
687
759
  const RESOURCEAPI_SYNC_SUCCESS_STATUSES = new Set([
@@ -1089,12 +1161,15 @@ Examples:
1089
1161
  out.heading(`Tenant: ${tenantKey} → ${chalk.dim(tenantId)} ${chalk.dim(`(${describeTenantResolutionSource(resolution.source)})`)}`);
1090
1162
  }
1091
1163
  if (options.dryRun) {
1164
+ const dryRunResult = buildTypeSeedDryRunResult(tenantKey, tenantId, types);
1092
1165
  if (options.format !== "json") {
1093
1166
  for (const type of types) {
1094
1167
  out.info(`Would publish: ${chalk.cyan(type.name)}`);
1095
1168
  }
1169
+ out.info(`App manifest request shape: ${chalk.cyan("explicit-name-and-slug")}`);
1096
1170
  out.info("Dry run — no changes made");
1097
1171
  }
1172
+ jsonResults.push(dryRunResult);
1098
1173
  continue;
1099
1174
  }
1100
1175
  const client = new PlatformAPIClient(publicApiUrl, tenantId);