mastra 1.29.0 → 1.29.1-alpha.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.
- package/dist/commands/deploy/index.d.ts +40 -0
- package/dist/commands/deploy/index.d.ts.map +1 -1
- package/dist/commands/server/deploy.d.ts.map +1 -1
- package/dist/commands/server/platform-api.d.ts +17 -1
- package/dist/commands/server/platform-api.d.ts.map +1 -1
- package/dist/commands/studio/deploy.d.ts.map +1 -1
- package/dist/commands/studio/platform-api.d.ts +2 -0
- package/dist/commands/studio/platform-api.d.ts.map +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.js +164 -49
- package/dist/index.js.map +1 -1
- package/dist/studio/assets/{core-DZ8VqGw4.js → core-Bq5d47BY.js} +1 -1
- package/dist/studio/assets/{index-C_pF9NFh.js → index-BT8Yu78J.js} +2 -2
- package/dist/studio/assets/{main-CFNEuACq.js → main-B_u71fJY.js} +240 -240
- package/dist/studio/assets/{style-Dmvhf4HL.css → style-Bq6sywnu.css} +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/utils/detect-project-type.d.ts +9 -0
- package/dist/utils/detect-project-type.d.ts.map +1 -0
- package/package.json +5 -5
|
@@ -98,6 +98,46 @@ export declare function resolveProject(token: string, orgId: string, projectConf
|
|
|
98
98
|
projectSlug?: string;
|
|
99
99
|
organizationId?: string;
|
|
100
100
|
} | null, flagProject?: string, defaultName?: string | null, autoAccept?: boolean): Promise<ProjectResolution>;
|
|
101
|
+
/**
|
|
102
|
+
* Create the platform project for a first deploy.
|
|
103
|
+
*
|
|
104
|
+
* Factory projects go through the server project endpoint with
|
|
105
|
+
* `factoryEnabled: true`, the same call `create-factory` makes. The platform
|
|
106
|
+
* only provisions factory backing (workspace sandboxes, `<slug>.factory.*`
|
|
107
|
+
* route) for projects created with that flag, and the unified deploy path
|
|
108
|
+
* has no way to set it afterwards. Everything else keeps using the studio
|
|
109
|
+
* project endpoint.
|
|
110
|
+
*/
|
|
111
|
+
export declare function createDeployProject(token: string, orgId: string, projectName: string, opts?: {
|
|
112
|
+
projectType?: string;
|
|
113
|
+
region?: string;
|
|
114
|
+
}): Promise<{
|
|
115
|
+
id: string;
|
|
116
|
+
name: string;
|
|
117
|
+
slug: string | null;
|
|
118
|
+
}>;
|
|
119
|
+
/**
|
|
120
|
+
* Whether an existing project was created as a Factory project. Reads the
|
|
121
|
+
* studio project list, which is the only CLI-facing endpoint that returns
|
|
122
|
+
* the flag. `undefined` means it could not be determined (lookup failed or
|
|
123
|
+
* the project was not in the list), in which case the caller proceeds.
|
|
124
|
+
*/
|
|
125
|
+
export declare function lookupProjectFactoryFlag(token: string, orgId: string, projectId: string): Promise<boolean | undefined>;
|
|
126
|
+
export type NonFactoryTargetChoice = 'create' | 'deploy';
|
|
127
|
+
/**
|
|
128
|
+
* A Factory build deployed into a project created without the factory flag
|
|
129
|
+
* runs as a plain server deployment: no workspace sandboxes, and the
|
|
130
|
+
* `<slug>.factory.*` route is never registered. The flag cannot be added
|
|
131
|
+
* afterwards on the unified path, so the useful way out is a new project.
|
|
132
|
+
* Offer that before touching the environment. Under `--yes` there is nobody
|
|
133
|
+
* to ask, so warn and keep the requested target.
|
|
134
|
+
*/
|
|
135
|
+
export declare function resolveNonFactoryTarget(input: {
|
|
136
|
+
projectName: string;
|
|
137
|
+
/** Name for a replacement project; `null` when package.json has no name. */
|
|
138
|
+
newProjectName: string | null;
|
|
139
|
+
autoAccept: boolean;
|
|
140
|
+
}): Promise<NonFactoryTargetChoice>;
|
|
101
141
|
type EnvironmentResolution = {
|
|
102
142
|
existing: true;
|
|
103
143
|
environment: Environment;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/server/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/server/deploy.ts"],"names":[],"mappings":"AA6CA,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BrG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBpE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKhE;AAgBD,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgDjC;AAqLD,KAAK,mBAAmB,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,mBAAmB,iBAsB1F"}
|
|
@@ -23,7 +23,17 @@ type ServerDeployResponse = paths['/v1/server/deploys/{id}']['get'] extends {
|
|
|
23
23
|
} ? T : never;
|
|
24
24
|
export type ServerDeployStatus = ServerDeployResponse;
|
|
25
25
|
export declare function fetchServerProjects(token: string, orgId: string): Promise<ServerProject[]>;
|
|
26
|
-
|
|
26
|
+
type CreateServerProjectBody = paths['/v1/server/projects']['post']['requestBody']['content']['application/json'];
|
|
27
|
+
/**
|
|
28
|
+
* Creation options beyond the name, taken from the generated request body so
|
|
29
|
+
* they cannot drift from the platform contract. `factoryEnabled` marks the
|
|
30
|
+
* project as a Mastra Factory project: the platform only provisions factory
|
|
31
|
+
* backing (workspace sandboxes, factory route) for projects created with it,
|
|
32
|
+
* and the unified deploy path cannot set it afterwards.
|
|
33
|
+
*/
|
|
34
|
+
export type CreateServerProjectOptions = Pick<CreateServerProjectBody, 'factoryEnabled' | 'region'>;
|
|
35
|
+
export type ServerProjectRegion = NonNullable<CreateServerProjectOptions['region']>;
|
|
36
|
+
export declare function createServerProject(token: string, orgId: string, name: string, options?: CreateServerProjectOptions): Promise<ServerProject>;
|
|
27
37
|
export declare function fetchServerDeployStatus(deployId: string, token: string, orgId?: string): Promise<ServerDeployStatus>;
|
|
28
38
|
export declare function fetchServerDeployDiagnosis(deployId: string, token: string, orgId?: string): Promise<DeployDiagnosisLookup>;
|
|
29
39
|
export declare function startServerDeployDiagnosis(deployId: string, token: string, orgId?: string): Promise<void>;
|
|
@@ -31,6 +41,12 @@ export declare function uploadServerDeploy(token: string, orgId: string, project
|
|
|
31
41
|
projectName?: string;
|
|
32
42
|
envVars?: Record<string, string>;
|
|
33
43
|
disablePlatformObservability?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Set for Factory builds. The legacy server deploy route marks the
|
|
46
|
+
* project as a Factory project and provisions factory backing when it
|
|
47
|
+
* sees this, including on projects created without the flag.
|
|
48
|
+
*/
|
|
49
|
+
factoryEnabled?: boolean;
|
|
34
50
|
}): Promise<{
|
|
35
51
|
id: string;
|
|
36
52
|
status: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-api.d.ts","sourceRoot":"","sources":["../../../src/commands/server/platform-api.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,KAAK,sBAAsB,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,SAAS;IACxE,SAAS,EAAE;QAAE,GAAG,EAAE;YAAE,OAAO,EAAE;gBAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CAClE,GACG,CAAC,GACD,KAAK,CAAC;AACV,MAAM,MAAM,aAAa,GAAG,sBAAsB,SAAS;IAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAEjG,KAAK,oBAAoB,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,SAAS;IAC1E,SAAS,EAAE;QAAE,GAAG,EAAE;YAAE,OAAO,EAAE;gBAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CAClE,GACG,CAAC,GACD,KAAK,CAAC;AACV,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEtD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAShG;AAED,
|
|
1
|
+
{"version":3,"file":"platform-api.d.ts","sourceRoot":"","sources":["../../../src/commands/server/platform-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/studio/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/studio/deploy.ts"],"names":[],"mappings":"AAyDA,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWlE;AACD,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBrG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBpE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKhE;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAa7E;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgDjC;AAsLD,KAAK,mBAAmB,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,mBAAmB,iBAsBpF"}
|
|
@@ -4,6 +4,8 @@ export interface Project {
|
|
|
4
4
|
name: string;
|
|
5
5
|
slug: string | null;
|
|
6
6
|
organizationId: string;
|
|
7
|
+
/** Present on the studio list endpoint; set at creation and never changed by deploys on the unified path. */
|
|
8
|
+
factoryEnabled?: boolean;
|
|
7
9
|
latestDeployId: string | null;
|
|
8
10
|
latestDeployStatus: string | null;
|
|
9
11
|
latestDeployCreatedAt?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-api.d.ts","sourceRoot":"","sources":["../../../src/commands/studio/platform-api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CASpF;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWhG;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW5G;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC,CA0BhC;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBzG;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,GACA,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoEzC;AAiDD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,SAAS,GACjB,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
|
|
1
|
+
{"version":3,"file":"platform-api.d.ts","sourceRoot":"","sources":["../../../src/commands/studio/platform-api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CASpF;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWhG;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW5G;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC,CA0BhC;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBzG;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,GACA,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoEzC;AAiDD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,SAAS,GACjB,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
|
package/dist/docs/SKILL.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -42,7 +42,7 @@ import handler from "serve-handler";
|
|
|
42
42
|
//#region package.json
|
|
43
43
|
var package_default = {
|
|
44
44
|
name: "mastra",
|
|
45
|
-
version: "1.29.0",
|
|
45
|
+
version: "1.29.1-alpha.0",
|
|
46
46
|
license: "Apache-2.0",
|
|
47
47
|
description: "cli for mastra",
|
|
48
48
|
type: "module",
|
|
@@ -2169,6 +2169,24 @@ function truncate(s, max) {
|
|
|
2169
2169
|
return s.length <= max ? s : `${s.slice(0, max - 1)}…`;
|
|
2170
2170
|
}
|
|
2171
2171
|
//#endregion
|
|
2172
|
+
//#region src/utils/detect-project-type.ts
|
|
2173
|
+
/**
|
|
2174
|
+
* Detect the project type (e.g. `factory`) from the Mastra entry file under
|
|
2175
|
+
* `src/mastra`. Deploy commands run this before project resolution so a new
|
|
2176
|
+
* platform project can be created with the right flags. Detection failures
|
|
2177
|
+
* fall back to `undefined`; the build step reports entry-file problems with a
|
|
2178
|
+
* better error than this would.
|
|
2179
|
+
*/
|
|
2180
|
+
async function detectProjectType(targetDir) {
|
|
2181
|
+
const mastraEntryFile = findMastraEntryFile(join(targetDir, "src", "mastra"));
|
|
2182
|
+
if (!mastraEntryFile) return void 0;
|
|
2183
|
+
try {
|
|
2184
|
+
return await analyzeEntryProjectType(mastraEntryFile);
|
|
2185
|
+
} catch {
|
|
2186
|
+
return;
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2189
|
+
//#endregion
|
|
2172
2190
|
//#region src/utils/workers-manifest-guard.ts
|
|
2173
2191
|
/**
|
|
2174
2192
|
* Legacy-deploy workers-manifest guard.
|
|
@@ -2754,6 +2772,7 @@ async function runStudioDeploy(dir, opts) {
|
|
|
2754
2772
|
const skipPreflight = opts.skipPreflight || process.env.MASTRA_SKIP_PREFLIGHT === "1";
|
|
2755
2773
|
p.intro("mastra studio deploy");
|
|
2756
2774
|
const packageName = getPackageName$2(targetDir);
|
|
2775
|
+
if (await detectProjectType(targetDir) === "factory") p.log.warn(["This directory builds a Mastra Factory, but `mastra studio deploy` cannot enable Factory support on the project.", "Use `mastra deploy` instead; it creates Factory projects with the flag and registers the Factory URL."].join("\n"));
|
|
2757
2776
|
const gitBranch = getGitBranch$1(targetDir);
|
|
2758
2777
|
const mastraVersion = getMastraVersion(targetDir);
|
|
2759
2778
|
const token = await getToken();
|
|
@@ -12295,8 +12314,12 @@ async function fetchServerProjects(token, orgId) {
|
|
|
12295
12314
|
if (error) throwApiError("Failed to fetch server projects", response.status);
|
|
12296
12315
|
return data.projects;
|
|
12297
12316
|
}
|
|
12298
|
-
async function createServerProject(token, orgId, name) {
|
|
12299
|
-
const { data, error, response } = await createApiClient(token, orgId).POST("/v1/server/projects", { body: {
|
|
12317
|
+
async function createServerProject(token, orgId, name, options = {}) {
|
|
12318
|
+
const { data, error, response } = await createApiClient(token, orgId).POST("/v1/server/projects", { body: {
|
|
12319
|
+
name,
|
|
12320
|
+
...options.factoryEnabled !== void 0 ? { factoryEnabled: options.factoryEnabled } : {},
|
|
12321
|
+
...options.region ? { region: options.region } : {}
|
|
12322
|
+
} });
|
|
12300
12323
|
if (error) throwApiError(`Failed to create server project — ${error.detail ?? "unknown error"}`, response.status);
|
|
12301
12324
|
return data.project;
|
|
12302
12325
|
}
|
|
@@ -12339,7 +12362,8 @@ async function uploadServerDeploy(token, orgId, projectId, zipBuffer, meta) {
|
|
|
12339
12362
|
projectId,
|
|
12340
12363
|
projectName: meta?.projectName,
|
|
12341
12364
|
envVars: meta?.envVars,
|
|
12342
|
-
...meta?.disablePlatformObservability !== void 0 ? { disablePlatformObservability: meta.disablePlatformObservability } : {}
|
|
12365
|
+
...meta?.disablePlatformObservability !== void 0 ? { disablePlatformObservability: meta.disablePlatformObservability } : {},
|
|
12366
|
+
...meta?.factoryEnabled ? { factoryEnabled: true } : {}
|
|
12343
12367
|
} });
|
|
12344
12368
|
if (error) throwApiError("Deploy failed", response.status, extractApiErrorDetail(error));
|
|
12345
12369
|
const { id, status, uploadUrl } = data;
|
|
@@ -14826,6 +14850,99 @@ async function resolveProject$1(token, orgId, projectConfig, flagProject, defaul
|
|
|
14826
14850
|
projectName: name
|
|
14827
14851
|
};
|
|
14828
14852
|
}
|
|
14853
|
+
function toServerProjectRegion(region) {
|
|
14854
|
+
return region === "eu" || region === "us" ? region : void 0;
|
|
14855
|
+
}
|
|
14856
|
+
/**
|
|
14857
|
+
* Create the platform project for a first deploy.
|
|
14858
|
+
*
|
|
14859
|
+
* Factory projects go through the server project endpoint with
|
|
14860
|
+
* `factoryEnabled: true`, the same call `create-factory` makes. The platform
|
|
14861
|
+
* only provisions factory backing (workspace sandboxes, `<slug>.factory.*`
|
|
14862
|
+
* route) for projects created with that flag, and the unified deploy path
|
|
14863
|
+
* has no way to set it afterwards. Everything else keeps using the studio
|
|
14864
|
+
* project endpoint.
|
|
14865
|
+
*/
|
|
14866
|
+
async function createDeployProject(token, orgId, projectName, opts = {}) {
|
|
14867
|
+
if (opts.projectType === "factory") {
|
|
14868
|
+
const region = toServerProjectRegion(opts.region);
|
|
14869
|
+
return createServerProject(token, orgId, projectName, {
|
|
14870
|
+
factoryEnabled: true,
|
|
14871
|
+
...region ? { region } : {}
|
|
14872
|
+
});
|
|
14873
|
+
}
|
|
14874
|
+
return createProject(token, orgId, projectName);
|
|
14875
|
+
}
|
|
14876
|
+
/**
|
|
14877
|
+
* Whether an existing project was created as a Factory project. Reads the
|
|
14878
|
+
* studio project list, which is the only CLI-facing endpoint that returns
|
|
14879
|
+
* the flag. `undefined` means it could not be determined (lookup failed or
|
|
14880
|
+
* the project was not in the list), in which case the caller proceeds.
|
|
14881
|
+
*/
|
|
14882
|
+
async function lookupProjectFactoryFlag(token, orgId, projectId) {
|
|
14883
|
+
try {
|
|
14884
|
+
const match = (await fetchProjects$1(token, orgId)).find((project) => project.id === projectId);
|
|
14885
|
+
return typeof match?.factoryEnabled === "boolean" ? match.factoryEnabled : void 0;
|
|
14886
|
+
} catch {
|
|
14887
|
+
return;
|
|
14888
|
+
}
|
|
14889
|
+
}
|
|
14890
|
+
/**
|
|
14891
|
+
* A Factory build deployed into a project created without the factory flag
|
|
14892
|
+
* runs as a plain server deployment: no workspace sandboxes, and the
|
|
14893
|
+
* `<slug>.factory.*` route is never registered. The flag cannot be added
|
|
14894
|
+
* afterwards on the unified path, so the useful way out is a new project.
|
|
14895
|
+
* Offer that before touching the environment. Under `--yes` there is nobody
|
|
14896
|
+
* to ask, so warn and keep the requested target.
|
|
14897
|
+
*/
|
|
14898
|
+
async function resolveNonFactoryTarget(input) {
|
|
14899
|
+
const explanation = [`This directory was scaffolded as a Mastra Factory, but the platform project "${input.projectName}" was created without Factory support, and that can't be added later.`, `Deploying there runs it as a plain server: no workspace sandboxes, and the Factory URL will not work.`];
|
|
14900
|
+
if (input.autoAccept) {
|
|
14901
|
+
p.log.warn(explanation.join("\n"));
|
|
14902
|
+
return "deploy";
|
|
14903
|
+
}
|
|
14904
|
+
const choice = await p.select({
|
|
14905
|
+
message: [...explanation, "How do you want to continue?"].join("\n"),
|
|
14906
|
+
options: [
|
|
14907
|
+
...input.newProjectName ? [{
|
|
14908
|
+
value: "create",
|
|
14909
|
+
label: `Create a new Factory project "${input.newProjectName}" and deploy there`,
|
|
14910
|
+
hint: "recommended"
|
|
14911
|
+
}] : [],
|
|
14912
|
+
{
|
|
14913
|
+
value: "deploy",
|
|
14914
|
+
label: `Deploy to "${input.projectName}" anyway as a plain server`
|
|
14915
|
+
},
|
|
14916
|
+
{
|
|
14917
|
+
value: "cancel",
|
|
14918
|
+
label: "Cancel"
|
|
14919
|
+
}
|
|
14920
|
+
]
|
|
14921
|
+
});
|
|
14922
|
+
if (p.isCancel(choice) || choice === "cancel") {
|
|
14923
|
+
p.cancel("Deploy cancelled.");
|
|
14924
|
+
process.exit(0);
|
|
14925
|
+
}
|
|
14926
|
+
return choice;
|
|
14927
|
+
}
|
|
14928
|
+
async function promptDeployRegion() {
|
|
14929
|
+
const selectedRegion = await p.select({
|
|
14930
|
+
message: "Select a deployment region",
|
|
14931
|
+
initialValue: "us",
|
|
14932
|
+
options: [{
|
|
14933
|
+
value: "us",
|
|
14934
|
+
label: "United States"
|
|
14935
|
+
}, {
|
|
14936
|
+
value: "eu",
|
|
14937
|
+
label: "Europe"
|
|
14938
|
+
}]
|
|
14939
|
+
});
|
|
14940
|
+
if (p.isCancel(selectedRegion)) {
|
|
14941
|
+
p.cancel("Deploy cancelled.");
|
|
14942
|
+
process.exit(0);
|
|
14943
|
+
}
|
|
14944
|
+
return selectedRegion;
|
|
14945
|
+
}
|
|
14829
14946
|
async function resolveEnvironment(token, orgId, projectId, envName, autoAccept, requestedRegion) {
|
|
14830
14947
|
const existing = (await fetchEnvironments(token, orgId, projectId)).find((env) => env.name.toLowerCase() === envName.toLowerCase());
|
|
14831
14948
|
if (existing) return {
|
|
@@ -14844,24 +14961,7 @@ async function resolveEnvironment(token, orgId, projectId, envName, autoAccept,
|
|
|
14844
14961
|
}
|
|
14845
14962
|
}
|
|
14846
14963
|
let region = requestedRegion;
|
|
14847
|
-
if (!region && !autoAccept)
|
|
14848
|
-
const selectedRegion = await p.select({
|
|
14849
|
-
message: "Select a deployment region",
|
|
14850
|
-
initialValue: "us",
|
|
14851
|
-
options: [{
|
|
14852
|
-
value: "us",
|
|
14853
|
-
label: "United States"
|
|
14854
|
-
}, {
|
|
14855
|
-
value: "eu",
|
|
14856
|
-
label: "Europe"
|
|
14857
|
-
}]
|
|
14858
|
-
});
|
|
14859
|
-
if (p.isCancel(selectedRegion)) {
|
|
14860
|
-
p.cancel("Deploy cancelled.");
|
|
14861
|
-
process.exit(0);
|
|
14862
|
-
}
|
|
14863
|
-
region = selectedRegion;
|
|
14864
|
-
}
|
|
14964
|
+
if (!region && !autoAccept) region = await promptDeployRegion();
|
|
14865
14965
|
return {
|
|
14866
14966
|
existing: false,
|
|
14867
14967
|
name: envName,
|
|
@@ -14987,6 +15087,7 @@ async function pollEnvironmentDeploy(token, orgId, projectId, environmentId, dep
|
|
|
14987
15087
|
}
|
|
14988
15088
|
async function unifiedDeployAction(dir, opts) {
|
|
14989
15089
|
if (opts.workers !== void 0 && opts.workers !== "dedicated" && opts.workers !== "in-process") throw new Error(`--workers must be "dedicated" or "in-process" (got "${String(opts.workers)}")`);
|
|
15090
|
+
if (opts.region !== void 0 && opts.region !== "us" && opts.region !== "eu") throw new Error(`--region must be "us" or "eu" (got "${String(opts.region)}")`);
|
|
14990
15091
|
const analytics = getAnalytics();
|
|
14991
15092
|
if (!analytics) return runUnifiedDeploy(dir, opts);
|
|
14992
15093
|
return analytics.trackCommandExecution({
|
|
@@ -15022,14 +15123,29 @@ async function runUnifiedDeploy(dir, opts) {
|
|
|
15022
15123
|
const packageName = getPackageName$1(targetDir);
|
|
15023
15124
|
const gitBranch = getGitBranch(targetDir);
|
|
15024
15125
|
const mastraVersion = getMastraVersion(targetDir);
|
|
15126
|
+
const projectType = await detectProjectType(targetDir);
|
|
15127
|
+
const isFactoryProject = projectType === "factory";
|
|
15025
15128
|
const token = await getToken();
|
|
15026
15129
|
const userId = isHeadless ? void 0 : (await loadCredentials())?.user.id;
|
|
15027
15130
|
const projectConfig = await loadProjectConfig(targetDir, opts.config);
|
|
15028
15131
|
const { orgId, orgName } = await resolveOrg$1(token, projectConfig, opts.org);
|
|
15029
|
-
|
|
15132
|
+
let resolution = await resolveProject$1(token, orgId, projectConfig, opts.project, packageName, autoAccept);
|
|
15133
|
+
if (resolution.existing && isFactoryProject) {
|
|
15134
|
+
if (await lookupProjectFactoryFlag(token, orgId, resolution.projectId) === false) {
|
|
15135
|
+
if (await resolveNonFactoryTarget({
|
|
15136
|
+
projectName: resolution.projectName,
|
|
15137
|
+
newProjectName: packageName,
|
|
15138
|
+
autoAccept
|
|
15139
|
+
}) === "create" && packageName) resolution = {
|
|
15140
|
+
existing: false,
|
|
15141
|
+
projectName: packageName
|
|
15142
|
+
};
|
|
15143
|
+
}
|
|
15144
|
+
}
|
|
15030
15145
|
let projectId;
|
|
15031
15146
|
let projectName;
|
|
15032
15147
|
let projectSlug;
|
|
15148
|
+
let requestedRegion = opts.region;
|
|
15033
15149
|
if (resolution.existing) {
|
|
15034
15150
|
projectId = resolution.projectId;
|
|
15035
15151
|
projectName = resolution.projectName;
|
|
@@ -15038,7 +15154,7 @@ async function runUnifiedDeploy(dir, opts) {
|
|
|
15038
15154
|
projectName = resolution.projectName;
|
|
15039
15155
|
p.note([
|
|
15040
15156
|
`Organization: ${orgName}`,
|
|
15041
|
-
`Project: ${projectName} (new)`,
|
|
15157
|
+
`Project: ${projectName} (new${isFactoryProject ? " Factory project" : ""})`,
|
|
15042
15158
|
`Environment: ${envName}`,
|
|
15043
15159
|
`Directory: ${targetDir}`,
|
|
15044
15160
|
...gitBranch ? [`Git branch: ${gitBranch}`] : [],
|
|
@@ -15051,14 +15167,18 @@ async function runUnifiedDeploy(dir, opts) {
|
|
|
15051
15167
|
process.exit(0);
|
|
15052
15168
|
}
|
|
15053
15169
|
}
|
|
15054
|
-
|
|
15170
|
+
if (isFactoryProject && !requestedRegion && !autoAccept) requestedRegion = await promptDeployRegion();
|
|
15171
|
+
const project = await createDeployProject(token, orgId, projectName, {
|
|
15172
|
+
projectType,
|
|
15173
|
+
region: requestedRegion
|
|
15174
|
+
});
|
|
15055
15175
|
projectId = project.id;
|
|
15056
15176
|
projectSlug = project.slug ?? project.name;
|
|
15057
|
-
p.log.success(`Created project "${projectName}"`);
|
|
15177
|
+
p.log.success(`Created ${isFactoryProject ? "Factory " : ""}project "${projectName}"`);
|
|
15058
15178
|
await saveProjectConfig(targetDir, getProjectConfigToSave(projectId, projectName, projectSlug, orgId, projectConfig), opts.config);
|
|
15059
15179
|
p.log.success(`Saved ${opts.config || ".mastra-project.json"}`);
|
|
15060
15180
|
}
|
|
15061
|
-
const envResolution = await resolveEnvironment(token, orgId, projectId, envName, autoAccept,
|
|
15181
|
+
const envResolution = await resolveEnvironment(token, orgId, projectId, envName, autoAccept, requestedRegion);
|
|
15062
15182
|
let environment;
|
|
15063
15183
|
if (envResolution.existing) environment = envResolution.environment;
|
|
15064
15184
|
else {
|
|
@@ -15094,12 +15214,7 @@ async function runUnifiedDeploy(dir, opts) {
|
|
|
15094
15214
|
const s = p.spinner();
|
|
15095
15215
|
const tTotal = performance.now();
|
|
15096
15216
|
let t;
|
|
15097
|
-
const
|
|
15098
|
-
const outputDirectory = join(targetDir, ".mastra");
|
|
15099
|
-
const mastraEntryFile = findMastraEntryFile(mastraDir);
|
|
15100
|
-
let projectType;
|
|
15101
|
-
if (mastraEntryFile) projectType = await analyzeEntryProjectType(mastraEntryFile);
|
|
15102
|
-
const staleness = await checkBuildStaleness(targetDir, mastraDir, outputDirectory, projectType);
|
|
15217
|
+
const staleness = await checkBuildStaleness(targetDir, join(targetDir, "src", "mastra"), join(targetDir, ".mastra"), projectType);
|
|
15103
15218
|
const workersManifestExists = await hasWorkersManifest(targetDir);
|
|
15104
15219
|
const workerManifestChecked = await hasWorkerManifestCheck(targetDir);
|
|
15105
15220
|
const buildNeedsRefresh = deployBuildNeedsRefresh(staleness, workersManifestExists, workerManifestChecked);
|
|
@@ -15553,7 +15668,16 @@ async function resolveOrg(token, projectConfig, flagOrg) {
|
|
|
15553
15668
|
orgName: selectedOrg.name
|
|
15554
15669
|
};
|
|
15555
15670
|
}
|
|
15556
|
-
async function resolveProject(token, orgId, projectConfig, flagProject, defaultName, autoAccept) {
|
|
15671
|
+
async function resolveProject(token, orgId, projectConfig, flagProject, defaultName, autoAccept, isFactoryProject = false) {
|
|
15672
|
+
const createProjectNamed = async (name) => {
|
|
15673
|
+
const created = isFactoryProject ? await createServerProject(token, orgId, name, { factoryEnabled: true }) : await createServerProject(token, orgId, name);
|
|
15674
|
+
p.log.success(`Created ${isFactoryProject ? "Factory project" : "project"} "${created.name}"`);
|
|
15675
|
+
return {
|
|
15676
|
+
projectId: created.id,
|
|
15677
|
+
projectName: created.name,
|
|
15678
|
+
projectSlug: created.slug ?? created.name
|
|
15679
|
+
};
|
|
15680
|
+
};
|
|
15557
15681
|
const envProjectId = process.env.MASTRA_PROJECT_ID;
|
|
15558
15682
|
if (envProjectId) return {
|
|
15559
15683
|
projectId: envProjectId,
|
|
@@ -15582,13 +15706,7 @@ async function resolveProject(token, orgId, projectConfig, flagProject, defaultN
|
|
|
15582
15706
|
process.exit(0);
|
|
15583
15707
|
}
|
|
15584
15708
|
}
|
|
15585
|
-
|
|
15586
|
-
p.log.success(`Created project "${created.name}"`);
|
|
15587
|
-
return {
|
|
15588
|
-
projectId: created.id,
|
|
15589
|
-
projectName: created.name,
|
|
15590
|
-
projectSlug: created.slug ?? created.name
|
|
15591
|
-
};
|
|
15709
|
+
return createProjectNamed(flagProject);
|
|
15592
15710
|
}
|
|
15593
15711
|
if (projectConfig?.projectId && projectConfig.organizationId === orgId) return {
|
|
15594
15712
|
projectId: projectConfig.projectId,
|
|
@@ -15637,12 +15755,7 @@ async function resolveProject(token, orgId, projectConfig, flagProject, defaultN
|
|
|
15637
15755
|
};
|
|
15638
15756
|
}
|
|
15639
15757
|
}
|
|
15640
|
-
|
|
15641
|
-
return {
|
|
15642
|
-
projectId: project.id,
|
|
15643
|
-
projectName: project.name,
|
|
15644
|
-
projectSlug: project.slug ?? project.name
|
|
15645
|
-
};
|
|
15758
|
+
return createProjectNamed(name);
|
|
15646
15759
|
}
|
|
15647
15760
|
async function serverDeployAction(dir, opts) {
|
|
15648
15761
|
const analytics = getAnalytics();
|
|
@@ -15673,6 +15786,7 @@ async function runServerDeploy(dir, opts) {
|
|
|
15673
15786
|
const skipPreflight = opts.skipPreflight || process.env.MASTRA_SKIP_PREFLIGHT === "1";
|
|
15674
15787
|
p.intro("mastra server deploy");
|
|
15675
15788
|
const packageName = getPackageName(targetDir);
|
|
15789
|
+
const isFactoryProject = await detectProjectType(targetDir) === "factory";
|
|
15676
15790
|
let token;
|
|
15677
15791
|
try {
|
|
15678
15792
|
token = await getToken();
|
|
@@ -15685,7 +15799,7 @@ async function runServerDeploy(dir, opts) {
|
|
|
15685
15799
|
const hasProject = Boolean(process.env.MASTRA_PROJECT_ID || opts.project || projectConfig?.projectId);
|
|
15686
15800
|
if (isHeadless && (!hasOrg || !hasProject)) throw new Error("MASTRA_ORG_ID and MASTRA_PROJECT_ID (or --org/--project flags, or .mastra-project.json) are required when MASTRA_API_TOKEN is set");
|
|
15687
15801
|
const { orgId, orgName } = await resolveOrg(token, projectConfig, opts.org);
|
|
15688
|
-
const { projectId, projectName, projectSlug } = await resolveProject(token, orgId, projectConfig, opts.project, packageName, autoAccept);
|
|
15802
|
+
const { projectId, projectName, projectSlug } = await resolveProject(token, orgId, projectConfig, opts.project, packageName, autoAccept, isFactoryProject);
|
|
15689
15803
|
if (!(projectConfig?.projectId === projectId && projectConfig?.organizationId === orgId)) {
|
|
15690
15804
|
p.note([
|
|
15691
15805
|
`Organization: ${orgName}`,
|
|
@@ -15763,7 +15877,8 @@ async function runServerDeploy(dir, opts) {
|
|
|
15763
15877
|
const deployResult = await uploadServerDeploy(token, orgId, projectId, zipBuffer, {
|
|
15764
15878
|
projectName,
|
|
15765
15879
|
envVars: envCount > 0 ? envVars : void 0,
|
|
15766
|
-
disablePlatformObservability: projectConfig?.disablePlatformObservability === true
|
|
15880
|
+
disablePlatformObservability: projectConfig?.disablePlatformObservability === true,
|
|
15881
|
+
...isFactoryProject ? { factoryEnabled: true } : {}
|
|
15767
15882
|
});
|
|
15768
15883
|
s.stop(`Deploy accepted: ${deployResult.id}`);
|
|
15769
15884
|
await rm(zipPath, { force: true });
|