@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 +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +4 -0
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/deploy.js +1 -1
- package/dist/commands/init.js +3 -3
- package/dist/commands/types.d.ts +22 -3
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +83 -8
- package/dist/commands/types.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +12 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/agent-guide.d.ts +1 -0
- package/dist/lib/agent-guide.d.ts.map +1 -1
- package/dist/lib/agent-guide.js +2 -0
- package/dist/lib/agent-guide.js.map +1 -1
- package/dist/lib/error-codes.d.ts +2 -0
- package/dist/lib/error-codes.d.ts.map +1 -1
- package/dist/lib/error-codes.js +6 -0
- package/dist/lib/error-codes.js.map +1 -1
- package/dist/lib/error-guidance/catalog.d.ts +49 -0
- package/dist/lib/error-guidance/catalog.d.ts.map +1 -1
- package/dist/lib/error-guidance/catalog.js +91 -0
- package/dist/lib/error-guidance/catalog.js.map +1 -1
- package/dist/lib/update-maintenance.d.ts +6 -0
- package/dist/lib/update-maintenance.d.ts.map +1 -1
- package/dist/lib/update-maintenance.js +17 -2
- package/dist/lib/update-maintenance.js.map +1 -1
- package/package.json +3 -3
- package/resources/gofer/copilot-instructions/typescript.instructions.md +2 -2
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
|
|
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;
|
|
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"}
|
package/dist/commands/agent.js
CHANGED
|
@@ -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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"}
|
package/dist/commands/deploy.js
CHANGED
package/dist/commands/init.js
CHANGED
|
@@ -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 <
|
|
794
|
-
throw new Error(`Node.js ${process.versions.node} is too old. EAI CLI requires Node.js
|
|
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: '
|
|
2066
|
+
NODE_VERSION: '24.x'
|
|
2067
2067
|
|
|
2068
2068
|
jobs:
|
|
2069
2069
|
build-and-deploy:
|
package/dist/commands/types.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
113
|
-
|
|
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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA6B,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/types.js
CHANGED
|
@@ -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
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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);
|