@noodleseed/one 0.167.0 → 0.169.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/deployment-delete-ops.d.ts +12 -0
- package/dist/commands/deployment-delete-ops.d.ts.map +1 -0
- package/dist/commands/deployment-delete-ops.js +230 -0
- package/dist/commands/deployment-delete-ops.js.map +1 -0
- package/dist/commands/deployment-delete-recovery.d.ts +35 -0
- package/dist/commands/deployment-delete-recovery.d.ts.map +1 -0
- package/dist/commands/deployment-delete-recovery.js +99 -0
- package/dist/commands/deployment-delete-recovery.js.map +1 -0
- package/dist/commands/deployments-ops.d.ts +2 -1
- package/dist/commands/deployments-ops.d.ts.map +1 -1
- package/dist/commands/deployments-ops.js +5 -1
- package/dist/commands/deployments-ops.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js +4 -2
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +8 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +20 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +9 -2
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +27 -1
- package/node_modules/@noodle-borg/control-plane/dist/delete-deployment.d.ts +44 -0
- package/node_modules/@noodle-borg/control-plane/dist/delete-deployment.js +105 -0
- package/node_modules/@noodle-borg/control-plane/dist/deployment-deletion-contracts.d.ts +20 -0
- package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +2 -0
- package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
- package/node_modules/@noodle-borg/service/dist/deployment-deletion.js +40 -0
- package/node_modules/@noodle-borg/service/dist/registry-compile.js +6 -0
- package/node_modules/@noodle-borg/service/dist/registry-deletion.js +75 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js +4 -2
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +4 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/registry.js +7 -23
- package/node_modules/@noodle-borg/service/dist/routes/deploy-dispatch.js +15 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployment-delete.js +53 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js +8 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file-deletion.js +64 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +23 -5
- package/node_modules/@noodle-borg/service/dist/store.d.ts +5 -1
- package/node_modules/@noodle-borg/service/package.json +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/deployment-deletion.d.ts +29 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/deployment-deletion.js +33 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConfigLocation } from '../config.js';
|
|
2
|
+
type DeleteAction = 'delete' | 'delete-version';
|
|
3
|
+
interface DeletePrompts {
|
|
4
|
+
readonly isInteractive: () => boolean;
|
|
5
|
+
readonly confirm: (message: string, options?: {
|
|
6
|
+
readonly initial?: boolean;
|
|
7
|
+
}) => Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
/** Permanent hosted deployment deletion; all mutations go through the tenant-scoped service API. */
|
|
10
|
+
export declare function runDeploymentDelete(action: DeleteAction, rest: readonly string[], env: NodeJS.ProcessEnv, home: ConfigLocation, prompts?: DeletePrompts): Promise<number>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=deployment-delete-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-delete-ops.d.ts","sourceRoot":"","sources":["../../src/commands/deployment-delete-ops.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAmBnD,KAAK,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAEhD,UAAU,aAAa;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnG;AAmBD,oGAAoG;AACpG,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,aAA+B,GACvC,OAAO,CAAC,MAAM,CAAC,CASjB"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { deploymentDeleteClientResponseSchema, } from '@noodle-borg/wire-contracts';
|
|
2
|
+
import { resolveControlPlaneToken, serviceJson } from '../control-plane.js';
|
|
3
|
+
import { confirm as confirmPrompt, isInteractive as detectInteractive } from '../prompts.js';
|
|
4
|
+
import { normalizeCommandServerVersion } from './deploy-version-resolution.js';
|
|
5
|
+
import { deleteEvidenceMismatch, deleteServiceFailure, versionDeleteCommand, } from './deployment-delete-recovery.js';
|
|
6
|
+
import { EXIT, printJsonOk } from './output.js';
|
|
7
|
+
import { authRequired, resolveOrgTarget } from './resource-shared.js';
|
|
8
|
+
import { parseCommandFlags, printCliFailure, resolveTenantTarget, usageError, } from './shared.js';
|
|
9
|
+
const DEFAULT_PROMPTS = {
|
|
10
|
+
isInteractive: detectInteractive,
|
|
11
|
+
confirm: confirmPrompt,
|
|
12
|
+
};
|
|
13
|
+
/** Permanent hosted deployment deletion; all mutations go through the tenant-scoped service API. */
|
|
14
|
+
export async function runDeploymentDelete(action, rest, env, home, prompts = DEFAULT_PROMPTS) {
|
|
15
|
+
const args = parseDeleteArgs(action, rest);
|
|
16
|
+
const usageFailure = validateDeleteArgs(action, args);
|
|
17
|
+
if (usageFailure !== undefined) {
|
|
18
|
+
return printCliFailure(`deployments ${action}`, usageFailure, args.json);
|
|
19
|
+
}
|
|
20
|
+
return action === 'delete'
|
|
21
|
+
? deleteDeployment(args, env, home, prompts)
|
|
22
|
+
: deleteVersion(args, env, home, prompts);
|
|
23
|
+
}
|
|
24
|
+
function parseDeleteArgs(action, rest) {
|
|
25
|
+
const parsed = parseCommandFlags(rest, {
|
|
26
|
+
values: action === 'delete'
|
|
27
|
+
? { '--org': 'org', '--service': 'service', '--auth-token': 'authToken' }
|
|
28
|
+
: {
|
|
29
|
+
'--org': 'org',
|
|
30
|
+
'--app': 'app',
|
|
31
|
+
'--env': 'targetEnv',
|
|
32
|
+
'--service': 'service',
|
|
33
|
+
'--auth-token': 'authToken',
|
|
34
|
+
},
|
|
35
|
+
booleans: { '--json': 'json', '--yes': 'yes' },
|
|
36
|
+
});
|
|
37
|
+
return parsed;
|
|
38
|
+
}
|
|
39
|
+
function validateDeleteArgs(action, args) {
|
|
40
|
+
const label = action === 'delete' ? 'deployment id' : 'version or legacy';
|
|
41
|
+
const usage = action === 'delete'
|
|
42
|
+
? 'noodle deployments delete <deployment-id> --org <org> --yes'
|
|
43
|
+
: 'noodle deployments delete-version <version|legacy> --org <org> --app <app> --env <env> --yes';
|
|
44
|
+
if (args.parseError !== undefined)
|
|
45
|
+
return usageError(args.parseError, usage);
|
|
46
|
+
if (args.positional.length !== 1) {
|
|
47
|
+
return usageError(`deployments ${action} requires exactly one ${label}`, usage);
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
async function deleteDeployment(args, env, home, prompts) {
|
|
52
|
+
const deploymentId = args.positional[0];
|
|
53
|
+
const target = resolveOrgTarget(args.org, home);
|
|
54
|
+
if (!target.ok)
|
|
55
|
+
return printCliFailure('deployments delete', target.error, args.json);
|
|
56
|
+
if (!args.yes) {
|
|
57
|
+
const warning = `Permanently delete deployment ${deploymentId} from ${target.org}? ` +
|
|
58
|
+
'Only an inactive deployment can be deleted. This cannot be undone.';
|
|
59
|
+
if (args.json || !prompts.isInteractive()) {
|
|
60
|
+
return printCliFailure('deployments delete', confirmationRequired('delete', warning, `noodle deployments delete ${deploymentId} --org ${target.org} --yes`), args.json);
|
|
61
|
+
}
|
|
62
|
+
if (!(await prompts.confirm(warning, { initial: false }))) {
|
|
63
|
+
console.error('deployments delete: cancelled');
|
|
64
|
+
return EXIT.USAGE;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const resolved = await resolveControlPlaneToken({
|
|
68
|
+
serviceFlag: args.service ?? target.serviceUrl,
|
|
69
|
+
authFlag: args.authToken,
|
|
70
|
+
env,
|
|
71
|
+
home,
|
|
72
|
+
});
|
|
73
|
+
if (resolved.token === undefined) {
|
|
74
|
+
return printCliFailure('deployments delete', authRequired(), args.json);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const response = deploymentDeleteClientResponseSchema.parse(await serviceJson(`${resolved.serviceUrl}/v1/orgs/${encodeURIComponent(target.org)}` +
|
|
78
|
+
`/deployments/${encodeURIComponent(deploymentId)}`, resolved.token, { method: 'DELETE' }));
|
|
79
|
+
const evidenceFailure = deleteEvidenceMismatch(response, {
|
|
80
|
+
kind: 'deployment',
|
|
81
|
+
org: target.org,
|
|
82
|
+
deploymentId,
|
|
83
|
+
});
|
|
84
|
+
if (evidenceFailure !== undefined) {
|
|
85
|
+
return printCliFailure('deployments delete', evidenceFailure, args.json);
|
|
86
|
+
}
|
|
87
|
+
return printDeleteResult(response, resolved.serviceUrl, args.json);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return printCliFailure('deployments delete', deleteServiceFailure(error, {
|
|
91
|
+
action: 'delete',
|
|
92
|
+
org: target.org,
|
|
93
|
+
deploymentId,
|
|
94
|
+
}), args.json);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async function deleteVersion(args, env, home, prompts) {
|
|
98
|
+
const target = resolveTenantTarget(args, home);
|
|
99
|
+
if (!target.ok)
|
|
100
|
+
return printCliFailure('deployments delete-version', target.error, args.json);
|
|
101
|
+
const requested = args.positional[0];
|
|
102
|
+
const version = exactDeleteVersion(requested, args.json);
|
|
103
|
+
if (!version.ok)
|
|
104
|
+
return version.exitCode;
|
|
105
|
+
const resolved = await resolveControlPlaneToken({
|
|
106
|
+
serviceFlag: args.service ?? target.serviceUrl,
|
|
107
|
+
authFlag: args.authToken,
|
|
108
|
+
env,
|
|
109
|
+
home,
|
|
110
|
+
});
|
|
111
|
+
if (resolved.token === undefined) {
|
|
112
|
+
return printCliFailure('deployments delete-version', authRequired(), args.json);
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const inventoryUrl = new URL(`${resolved.serviceUrl}/v1/orgs/${encodeURIComponent(target.org)}/deployments`);
|
|
116
|
+
inventoryUrl.searchParams.set('app', target.app);
|
|
117
|
+
inventoryUrl.searchParams.set('env', target.env);
|
|
118
|
+
inventoryUrl.searchParams.set('archived', 'true');
|
|
119
|
+
const inventory = await serviceJson(inventoryUrl.toString(), resolved.token);
|
|
120
|
+
const expectedDeploymentIds = inventory.deployments
|
|
121
|
+
.filter((deployment) => version.value === 'legacy'
|
|
122
|
+
? deployment.serverVersion === undefined
|
|
123
|
+
: deployment.serverVersion === version.value)
|
|
124
|
+
.map((deployment) => deployment.deploymentId);
|
|
125
|
+
if (expectedDeploymentIds.length === 0) {
|
|
126
|
+
return printCliFailure('deployments delete-version', versionNotFound(target, version.value), args.json);
|
|
127
|
+
}
|
|
128
|
+
if (expectedDeploymentIds.length > 10000) {
|
|
129
|
+
return printCliFailure('deployments delete-version', {
|
|
130
|
+
code: 'deployment_inventory_too_large',
|
|
131
|
+
message: 'The version has more than 10,000 deployment records.',
|
|
132
|
+
cause: 'The deletion contract cannot bind an inventory larger than 10,000 records.',
|
|
133
|
+
fix: 'Contact Noodle Seed support before attempting permanent deletion.',
|
|
134
|
+
next: `noodle deployments list --org ${target.org} --app ${target.app} --env ${target.env}`,
|
|
135
|
+
exitCode: EXIT.FAILURE,
|
|
136
|
+
}, args.json);
|
|
137
|
+
}
|
|
138
|
+
const warning = versionDeleteWarning(target, version.value, expectedDeploymentIds.length);
|
|
139
|
+
if (!args.yes) {
|
|
140
|
+
if (args.json || !prompts.isInteractive()) {
|
|
141
|
+
return printCliFailure('deployments delete-version', confirmationRequired('delete-version', warning, versionDeleteCommand(target, version.value, true)), args.json);
|
|
142
|
+
}
|
|
143
|
+
if (!(await prompts.confirm(warning, { initial: false }))) {
|
|
144
|
+
console.error('deployments delete-version: cancelled');
|
|
145
|
+
return EXIT.USAGE;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const endpoint = `${resolved.serviceUrl}/v1/orgs/${encodeURIComponent(target.org)}` +
|
|
149
|
+
`/apps/${encodeURIComponent(target.app)}/envs/${encodeURIComponent(target.env)}` +
|
|
150
|
+
`/versions/${encodeURIComponent(version.value)}`;
|
|
151
|
+
const response = deploymentDeleteClientResponseSchema.parse(await serviceJson(endpoint, resolved.token, {
|
|
152
|
+
method: 'DELETE',
|
|
153
|
+
headers: { 'content-type': 'application/json' },
|
|
154
|
+
body: JSON.stringify({ expectedDeploymentIds }),
|
|
155
|
+
}));
|
|
156
|
+
const evidenceFailure = deleteEvidenceMismatch(response, {
|
|
157
|
+
kind: 'version',
|
|
158
|
+
target,
|
|
159
|
+
expectedDeploymentIds,
|
|
160
|
+
});
|
|
161
|
+
if (evidenceFailure !== undefined) {
|
|
162
|
+
return printCliFailure('deployments delete-version', evidenceFailure, args.json);
|
|
163
|
+
}
|
|
164
|
+
return printDeleteResult(response, resolved.serviceUrl, args.json, version.value);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return printCliFailure('deployments delete-version', deleteServiceFailure(error, {
|
|
168
|
+
action: 'delete-version',
|
|
169
|
+
org: target.org,
|
|
170
|
+
app: target.app,
|
|
171
|
+
env: target.env,
|
|
172
|
+
version: version.value,
|
|
173
|
+
}), args.json);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function exactDeleteVersion(requested, json) {
|
|
177
|
+
if (requested === 'legacy')
|
|
178
|
+
return { ok: true, value: requested };
|
|
179
|
+
const normalized = normalizeCommandServerVersion('deployments delete-version', requested, json);
|
|
180
|
+
if (!normalized.ok || normalized.value === undefined) {
|
|
181
|
+
return { ok: false, exitCode: normalized.ok ? EXIT.USAGE : normalized.exitCode };
|
|
182
|
+
}
|
|
183
|
+
return { ok: true, value: normalized.value };
|
|
184
|
+
}
|
|
185
|
+
function versionDeleteWarning(target, version, count) {
|
|
186
|
+
const outage = version === 'legacy'
|
|
187
|
+
? 'Its deployment URLs stop working immediately.'
|
|
188
|
+
: "Deleting it takes the version's pinned URL offline immediately.";
|
|
189
|
+
return (`Permanently delete ${target.org}/${target.app}/${target.env} version ${version} and ` +
|
|
190
|
+
`${count} deployment ${count === 1 ? 'record' : 'records'}? ` +
|
|
191
|
+
`${outage} This cannot be undone.`);
|
|
192
|
+
}
|
|
193
|
+
function confirmationRequired(action, warning, next) {
|
|
194
|
+
return {
|
|
195
|
+
code: 'confirmation_required',
|
|
196
|
+
message: `deployments ${action} requires confirmation`,
|
|
197
|
+
cause: warning,
|
|
198
|
+
fix: 'Review the permanent deletion target, then re-run with --yes.',
|
|
199
|
+
next,
|
|
200
|
+
exitCode: EXIT.USAGE,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function versionNotFound(target, version) {
|
|
204
|
+
return {
|
|
205
|
+
code: 'version_not_found',
|
|
206
|
+
message: `Version ${version} was not found.`,
|
|
207
|
+
cause: `${target.org}/${target.app}/${target.env} has no deployment records for exact version ${version}.`,
|
|
208
|
+
fix: 'Check the exact version or use legacy for unversioned deployment records.',
|
|
209
|
+
next: `noodle deployments list --org ${target.org} --app ${target.app} --env ${target.env}`,
|
|
210
|
+
exitCode: EXIT.FAILURE,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function printDeleteResult(response, service, json, version) {
|
|
214
|
+
if (json) {
|
|
215
|
+
printJsonOk({ service, ...(version === undefined ? {} : { version }), ...response });
|
|
216
|
+
return EXIT.OK;
|
|
217
|
+
}
|
|
218
|
+
console.log(`service: ${service}`);
|
|
219
|
+
console.log(`target: ${response.target.org}/${response.target.app}/${response.target.env}`);
|
|
220
|
+
if (version !== undefined)
|
|
221
|
+
console.log(`version: ${version}`);
|
|
222
|
+
console.log(`deleted: ${response.deletedDeploymentIds.length}`);
|
|
223
|
+
for (const deploymentId of response.deletedDeploymentIds)
|
|
224
|
+
console.log(` ${deploymentId}`);
|
|
225
|
+
if (!response.auditRecorded) {
|
|
226
|
+
console.error('warning: deletion completed, but its audit record could not be saved');
|
|
227
|
+
}
|
|
228
|
+
return EXIT.OK;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=deployment-delete-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-delete-ops.js","sourceRoot":"","sources":["../../src/commands/deployment-delete-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { DeploymentDeleteResponse } from '@noodle-borg/wire-contracts';
|
|
2
|
+
import { type CliFailure } from './shared.js';
|
|
3
|
+
type ExpectedDeleteEvidence = {
|
|
4
|
+
readonly kind: 'deployment';
|
|
5
|
+
readonly org: string;
|
|
6
|
+
readonly deploymentId: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'version';
|
|
9
|
+
readonly target: {
|
|
10
|
+
readonly org: string;
|
|
11
|
+
readonly app: string;
|
|
12
|
+
readonly env: string;
|
|
13
|
+
};
|
|
14
|
+
readonly expectedDeploymentIds: readonly string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function deleteEvidenceMismatch(response: DeploymentDeleteResponse, expected: ExpectedDeleteEvidence): CliFailure | undefined;
|
|
17
|
+
type DeleteFailureContext = {
|
|
18
|
+
readonly action: 'delete';
|
|
19
|
+
readonly org: string;
|
|
20
|
+
readonly deploymentId: string;
|
|
21
|
+
} | {
|
|
22
|
+
readonly action: 'delete-version';
|
|
23
|
+
readonly org: string;
|
|
24
|
+
readonly app: string;
|
|
25
|
+
readonly env: string;
|
|
26
|
+
readonly version: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function deleteServiceFailure(error: unknown, context: DeleteFailureContext): CliFailure;
|
|
29
|
+
export declare function versionDeleteCommand(target: {
|
|
30
|
+
readonly org: string;
|
|
31
|
+
readonly app: string;
|
|
32
|
+
readonly env: string;
|
|
33
|
+
}, version: string, yes: boolean): string;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=deployment-delete-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-delete-recovery.d.ts","sourceRoot":"","sources":["../../src/commands/deployment-delete-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAG5E,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,aAAa,CAAC;AAE9D,KAAK,sBAAsB,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACpF;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD,CAAC;AAEN,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,wBAAwB,EAClC,QAAQ,EAAE,sBAAsB,GAC/B,UAAU,GAAG,SAAS,CAwBxB;AAQD,KAAK,oBAAoB,GACrB;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAClF;IACE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAuE9F;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAC5E,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,OAAO,GACX,MAAM,CAKR"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { ServiceRequestError } from '../control-plane.js';
|
|
2
|
+
import { EXIT } from './output.js';
|
|
3
|
+
import { serviceFailure } from './shared.js';
|
|
4
|
+
export function deleteEvidenceMismatch(response, expected) {
|
|
5
|
+
const matches = expected.kind === 'deployment'
|
|
6
|
+
? response.target.org === expected.org &&
|
|
7
|
+
response.deletedDeploymentIds.length === 1 &&
|
|
8
|
+
response.deletedDeploymentIds[0] === expected.deploymentId
|
|
9
|
+
: response.target.org === expected.target.org &&
|
|
10
|
+
response.target.app === expected.target.app &&
|
|
11
|
+
response.target.env === expected.target.env &&
|
|
12
|
+
sameIds(response.deletedDeploymentIds, expected.expectedDeploymentIds);
|
|
13
|
+
if (matches)
|
|
14
|
+
return undefined;
|
|
15
|
+
const next = expected.kind === 'deployment'
|
|
16
|
+
? `noodle deployments list --org ${expected.org}`
|
|
17
|
+
: `noodle deployments list --org ${expected.target.org} --app ${expected.target.app} --env ${expected.target.env}`;
|
|
18
|
+
return {
|
|
19
|
+
code: 'deployment_delete_evidence_mismatch',
|
|
20
|
+
message: 'The service returned deletion evidence for a different target or deployment set.',
|
|
21
|
+
cause: 'The response did not match the exact deletion request. The mutation may already have completed.',
|
|
22
|
+
fix: 'Refresh deployment history and reconcile the current state before attempting any retry.',
|
|
23
|
+
next,
|
|
24
|
+
exitCode: EXIT.FAILURE,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function sameIds(actual, expected) {
|
|
28
|
+
if (actual.length !== expected.length)
|
|
29
|
+
return false;
|
|
30
|
+
const actualIds = new Set(actual);
|
|
31
|
+
return expected.every((deploymentId) => actualIds.has(deploymentId));
|
|
32
|
+
}
|
|
33
|
+
export function deleteServiceFailure(error, context) {
|
|
34
|
+
if (!(error instanceof ServiceRequestError) || error.code === undefined) {
|
|
35
|
+
return serviceFailure(`deployments ${context.action}`, error, context.action === 'delete'
|
|
36
|
+
? `noodle deployments list --org ${context.org}`
|
|
37
|
+
: versionDeleteCommand(context, context.version, false));
|
|
38
|
+
}
|
|
39
|
+
const common = {
|
|
40
|
+
code: error.code,
|
|
41
|
+
message: error.message,
|
|
42
|
+
cause: error.message,
|
|
43
|
+
exitCode: error.status === 401 || error.status === 403 ? EXIT.AUTH : EXIT.FAILURE,
|
|
44
|
+
};
|
|
45
|
+
if (error.code === 'active_deployment' && context.action === 'delete') {
|
|
46
|
+
return {
|
|
47
|
+
...common,
|
|
48
|
+
fix: 'Roll back to another deployment first, or delete the whole version.',
|
|
49
|
+
next: `noodle rollback <inactive-deployment-id> --org ${context.org}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (error.code === 'deployment_locked' && context.action === 'delete-version') {
|
|
53
|
+
return {
|
|
54
|
+
...common,
|
|
55
|
+
fix: 'Unlock this exact version before deleting it.',
|
|
56
|
+
next: `noodle deployments unlock --org ${context.org} --app ${context.app}` +
|
|
57
|
+
` --env ${context.env} --version ${context.version} --yes`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (error.code === 'app_archived' && context.action === 'delete-version') {
|
|
61
|
+
return {
|
|
62
|
+
...common,
|
|
63
|
+
fix: 'Restore the archived app before deleting its deployments.',
|
|
64
|
+
next: `noodle restore ${context.app} --org ${context.org}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (error.code === 'deployment_delete_conflict' && context.action === 'delete-version') {
|
|
68
|
+
return {
|
|
69
|
+
...common,
|
|
70
|
+
fix: 'Refresh the deployment history and confirm the new exact inventory.',
|
|
71
|
+
next: versionDeleteCommand(context, context.version, false),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (error.code === 'deployment_not_found' || error.code === 'version_not_found') {
|
|
75
|
+
const list = context.action === 'delete'
|
|
76
|
+
? `noodle deployments list --org ${context.org}`
|
|
77
|
+
: `noodle deployments list --org ${context.org} --app ${context.app} --env ${context.env}`;
|
|
78
|
+
return {
|
|
79
|
+
...common,
|
|
80
|
+
fix: 'Check the exact target against the current deployment history.',
|
|
81
|
+
next: list,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (error.code === 'organization_owner_required') {
|
|
85
|
+
return {
|
|
86
|
+
...common,
|
|
87
|
+
fix: 'Ask an organization owner to delete the deployment records or sign in as an owner.',
|
|
88
|
+
next: 'noodle whoami',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return serviceFailure(`deployments ${context.action}`, error, context.action === 'delete'
|
|
92
|
+
? `noodle deployments list --org ${context.org}`
|
|
93
|
+
: versionDeleteCommand(context, context.version, false));
|
|
94
|
+
}
|
|
95
|
+
export function versionDeleteCommand(target, version, yes) {
|
|
96
|
+
return (`noodle deployments delete-version ${version} --org ${target.org} --app ${target.app}` +
|
|
97
|
+
` --env ${target.env}${yes ? ' --yes' : ''}`);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=deployment-delete-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-delete-recovery.js","sourceRoot":"","sources":["../../src/commands/deployment-delete-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { ConfigLocation } from '../config.js';
|
|
2
2
|
import { type TableOptions } from '../table.js';
|
|
3
3
|
import { type WatchFrame } from '../watch.js';
|
|
4
|
+
import { runDeploymentDelete } from './deployment-delete-ops.js';
|
|
4
5
|
import { type DeploymentSummary } from './resource-shared.js';
|
|
5
|
-
export declare function runDeployments(rest: readonly string[], env: NodeJS.ProcessEnv, home: ConfigLocation): Promise<number>;
|
|
6
|
+
export declare function runDeployments(rest: readonly string[], env: NodeJS.ProcessEnv, home: ConfigLocation, prompts?: Parameters<typeof runDeploymentDelete>[4]): Promise<number>;
|
|
6
7
|
interface CommonDeploymentsArgs {
|
|
7
8
|
readonly org?: string;
|
|
8
9
|
readonly app?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments-ops.d.ts","sourceRoot":"","sources":["../../src/commands/deployments-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAcnD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAA6B,KAAK,UAAU,EAA4B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"deployments-ops.d.ts","sourceRoot":"","sources":["../../src/commands/deployments-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAcnD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAA6B,KAAK,UAAU,EAA4B,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,EAML,KAAK,iBAAiB,EAMvB,MAAM,sBAAsB,CAAC;AAU9B,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,MAAM,CAAC,CAajB;AAID,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAqBD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAChD,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CA8BrB;AAwLD,iHAAiH;AACjH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,iBAAiB,EAAE,EACzC,IAAI,EAAE,YAAY,GACjB,MAAM,CAER"}
|
|
@@ -13,13 +13,14 @@ import { resolveControlPlaneToken, ServiceRequestError, serviceJson } from '../c
|
|
|
13
13
|
import { relativeTime } from '../relative-time.js';
|
|
14
14
|
import { renderTable } from '../table.js';
|
|
15
15
|
import { parseWatchFlags, runWatch, watchJsonConflictFailure } from '../watch.js';
|
|
16
|
+
import { runDeploymentDelete } from './deployment-delete-ops.js';
|
|
16
17
|
import { runDeploymentLockUpdate } from './deployment-lock-ops.js';
|
|
17
18
|
import { runDeploymentPackage } from './deployment-package.js';
|
|
18
19
|
import { EXIT, printJsonOk } from './output.js';
|
|
19
20
|
import { ACCESS_CHIP_COLORS, ACTIVE_GREEN, ARCHIVED_AMBER, authRequired, DIM_GRAY, notFoundDeployment, resolveOrgTarget, stdoutTableOptions, } from './resource-shared.js';
|
|
20
21
|
import { parseCommandFlags, printCliFailure, printCommandUsageFailure, serviceFailure, usage, } from './shared.js';
|
|
21
22
|
import { pickOrgInteractively } from './target-picker.js';
|
|
22
|
-
export async function runDeployments(rest, env, home) {
|
|
23
|
+
export async function runDeployments(rest, env, home, prompts) {
|
|
23
24
|
const [subcommand, ...tail] = rest;
|
|
24
25
|
if (subcommand === 'list')
|
|
25
26
|
return runDeploymentsList(tail, env, home);
|
|
@@ -27,6 +28,9 @@ export async function runDeployments(rest, env, home) {
|
|
|
27
28
|
return runDeploymentsInspect(tail, env, home);
|
|
28
29
|
if (subcommand === 'package')
|
|
29
30
|
return runDeploymentPackage(tail, env, home);
|
|
31
|
+
if (subcommand === 'delete' || subcommand === 'delete-version') {
|
|
32
|
+
return runDeploymentDelete(subcommand, tail, env, home, prompts);
|
|
33
|
+
}
|
|
30
34
|
if (subcommand === 'lock' || subcommand === 'unlock') {
|
|
31
35
|
return runDeploymentLockUpdate(subcommand, tail, env, home);
|
|
32
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments-ops.js","sourceRoot":"","sources":["../../src/commands/deployments-ops.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAe,WAAW,EAAqB,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAmB,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,YAAY,EAIZ,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,KAAK,GACN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAuB,EACvB,GAAsB,EACtB,IAAoB;
|
|
1
|
+
{"version":3,"file":"deployments-ops.js","sourceRoot":"","sources":["../../src/commands/deployments-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,11 +147,12 @@ export const BEHAVIOR_SKILLS = [
|
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
name: 'embedding-mcp-assistants',
|
|
150
|
-
description: 'Use when embedding a Noodle assistant into an existing SaaS or web application with browser, identity, session, and credential boundaries.',
|
|
151
|
-
outcome: 'Select one decision-complete assistant topology, then deliver the embed with identity and credential separation proven at the tested level.',
|
|
150
|
+
description: 'Use when embedding a Noodle assistant into an existing SaaS or web application, or improving signup or onboarding conversion with public-to-product onboarding, with browser, identity, session, and credential boundaries.',
|
|
151
|
+
outcome: 'Select one decision-complete assistant topology, including the dual-surface continuous-onboarding default when it fits, then deliver the embed with identity and credential separation proven at the tested level.',
|
|
152
152
|
positiveTriggers: [
|
|
153
153
|
'Embed the Noodle assistant in an existing web app.',
|
|
154
154
|
'Wire browser mounting and session exchange.',
|
|
155
|
+
'Choose a first Noodle workflow for software where more signed-in users are valuable.',
|
|
155
156
|
],
|
|
156
157
|
negativeTriggers: [
|
|
157
158
|
'Do not use to build a standalone MCP App.',
|
|
@@ -163,6 +164,7 @@ export const BEHAVIOR_SKILLS = [
|
|
|
163
164
|
'Access mode plus the identity, session, and server-owned routing boundary.',
|
|
164
165
|
'Managed or custom renderer and its explicit product benefit.',
|
|
165
166
|
'Model owner and requested local, hosted, or production evidence level.',
|
|
167
|
+
'For a first-workflow recommendation: evidence for a public visitor surface, account boundary, useful pre-account result, and authenticated outcome.',
|
|
166
168
|
],
|
|
167
169
|
primaryReference: 'references/embedded-assistant.md',
|
|
168
170
|
supportingReferences: ['references/authoring-workflow.md'],
|
|
@@ -5,7 +5,8 @@ import { NOODLE_WORDMARK } from './welcome-wordmark.js';
|
|
|
5
5
|
export const PLUGIN_NAME = 'noodle-seed';
|
|
6
6
|
/** Cold-start discovery text shared by direct marketplace and official-directory projections. */
|
|
7
7
|
const BOOTSTRAP_SKILL_DESCRIPTION = 'Use when asked to build, create, or ship an MCP server, MCP app, AI app, or connector, or to ' +
|
|
8
|
-
'make a product, API, or SaaS reachable by AI agents
|
|
8
|
+
'make a product, API, or SaaS reachable by AI agents, or when a software business wants to improve ' +
|
|
9
|
+
'signup or onboarding conversion or choose a first Noodle workflow. Bootstraps Noodle Seed — TypeScript ' +
|
|
9
10
|
'authoring with the noodle CLI, local validation and testing, and governed hosted deployment.';
|
|
10
11
|
function bootstrapRouterBody() {
|
|
11
12
|
return [
|
|
@@ -41,6 +42,12 @@ function bootstrapRouterBody() {
|
|
|
41
42
|
`${PLUGIN_WINDOWS_SUPPORT.installCommand}` +
|
|
42
43
|
'`; never expose a private plugin path as a workaround.',
|
|
43
44
|
'',
|
|
45
|
+
'## First-workflow default',
|
|
46
|
+
'',
|
|
47
|
+
'When the user wants to get started but has not chosen a workflow, inspect the available product and repository context. If more signed-up or signed-in users are valuable and the product has a public visitor entry point, an existing account boundary, a genuine useful result that can be delivered before signup, and a meaningful next action inside the authenticated product, recommend public-to-product continuous onboarding as the first workflow.',
|
|
48
|
+
'',
|
|
49
|
+
'This default is not limited to B2B SaaS. Do not infer fit from the industry label alone, and do not manufacture pre-signup value or pressure. If the evidence is incomplete, ask only for the smallest missing fit fact. After project setup, route the accepted recommendation to `embedding-mcp-assistants`; the project-local playbook owns the two-surface design and exact implementation.',
|
|
50
|
+
'',
|
|
44
51
|
'## Cold start (no project yet)',
|
|
45
52
|
'',
|
|
46
53
|
'1. New or empty directory: use `noodle-readiness.setup_project` with `mode: "initialize"`, or inline-execute the public fallback `noodle init --json`. This prepares the SaaS profile, installs pinned project-local tooling, and runs local checks. Preserve the existing package manager; use `install: false` / `--no-install` only for explicitly files-only work.',
|
|
@@ -9,6 +9,7 @@ export function renderEmbeddedAssistantReference() {
|
|
|
9
9
|
'',
|
|
10
10
|
'- Architecture',
|
|
11
11
|
'- Select the architecture before code',
|
|
12
|
+
'- First-workflow default: continuous onboarding',
|
|
12
13
|
'- Install into the existing application',
|
|
13
14
|
'- Author and validate',
|
|
14
15
|
'- Product workflow guidance',
|
|
@@ -69,6 +70,25 @@ export function renderEmbeddedAssistantReference() {
|
|
|
69
70
|
'',
|
|
70
71
|
'The architecture brief must state the selected topology, why it fits the named user and job, the two code owners and two local processes, credential and identity flow, routing authority, model owner, files expected to change, and the first requested evidence boundary. If identity/session ownership, exact origin, tenant-routing authority, model ownership, or evidence target is unavailable, return a blocked architecture brief naming the missing owner or decision and do not edit either codebase.',
|
|
71
72
|
'',
|
|
73
|
+
'### First-workflow default: continuous onboarding',
|
|
74
|
+
'',
|
|
75
|
+
'When a customer asks what to build first, inspect the available product and repository evidence before asking them to choose from a menu. This default is not limited to B2B SaaS: it applies to any software or digital service where converting an anonymous visitor into a legitimately useful authenticated relationship is valuable.',
|
|
76
|
+
'',
|
|
77
|
+
'Recommend continuous onboarding by default when all four fit signals are present:',
|
|
78
|
+
'',
|
|
79
|
+
'1. A public visitor surface exists where the assistant can begin without identity.',
|
|
80
|
+
'2. The product already has signup or sign-in that the customer application owns.',
|
|
81
|
+
'3. The assistant can deliver a genuine useful result before account creation, using only information the visitor chooses to provide.',
|
|
82
|
+
'4. A meaningful authenticated product outcome can continue from that work and finish through the customer’s authorized API.',
|
|
83
|
+
'',
|
|
84
|
+
'When the evidence is clear, recommend one assistant on two customer-owned surfaces rather than presenting an unranked workflow menu: a mixed public surface using `publicWebsite({ signIn: true })` and an in-product `authenticatedWebsite(...)` surface. The public experience produces and, when needed, temporarily saves the useful reviewed draft; identity is requested only when it unlocks the next step; the authenticated experience adopts that state, resumes the interrupted request, and separately confirms the final business action. This gives the customer one concrete first workflow while establishing both its public-site and in-product integration boundaries.',
|
|
85
|
+
'',
|
|
86
|
+
'Treat both mounts as one first-workflow delivery scope. Do not call it complete when only the public or only the authenticated surface works; report that evidence as partial and name the missing mount. The two surfaces may live in separate customer repositories and release independently, so “one scope” is not a claim of atomic deployment.',
|
|
87
|
+
'',
|
|
88
|
+
'Do not recommend this default when there is no genuine pre-account value, no customer-owned account boundary, no meaningful authenticated continuation, or no feasible public and product mount. Ask only for the smallest missing fit fact instead of making the user classify the company. Keep signup optional until identity is truly required, never imply that prior effort obligates registration, and treat improved conversion as a hypothesis to measure—not a guarantee. This design does not guarantee a conversion lift.',
|
|
89
|
+
'',
|
|
90
|
+
'Once selected, begin with the bundled [stateful-draft example](../examples/stateful-draft/README.md) and the public [signup-continuity guide](https://docs.noodleseed.dev/docs/guides/signup-continuity). Adapt the draft to the smallest useful customer-specific result; do not invent a universal SaaS schema or replace the customer’s identity provider and product API.',
|
|
91
|
+
'',
|
|
72
92
|
'## Install into the existing application',
|
|
73
93
|
'',
|
|
74
94
|
'Configure or reuse an existing capability before generating files. Public embedding uses the existing script or embed ID and needs no customer backend session/config route. Reuse application APIs and business functions; generate a thin handler only where the approved architecture identifies a missing stable boundary.',
|