create-cogenta 0.1.6 → 0.2.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/blueprint-defaults.d.ts +58 -0
- package/dist/blueprint-defaults.d.ts.map +1 -0
- package/dist/blueprint-defaults.js +111 -0
- package/dist/blueprint-defaults.js.map +1 -0
- package/dist/blueprints/association.d.ts.map +1 -1
- package/dist/blueprints/association.js +50 -1
- package/dist/blueprints/association.js.map +1 -1
- package/dist/blueprints/blog.d.ts.map +1 -1
- package/dist/blueprints/blog.js +26 -0
- package/dist/blueprints/blog.js.map +1 -1
- package/dist/blueprints/content-pack.d.ts +9 -1
- package/dist/blueprints/content-pack.d.ts.map +1 -1
- package/dist/blueprints/content-pack.js +18 -0
- package/dist/blueprints/content-pack.js.map +1 -1
- package/dist/blueprints/documentation.d.ts.map +1 -1
- package/dist/blueprints/documentation.js +45 -1
- package/dist/blueprints/documentation.js.map +1 -1
- package/dist/blueprints/magazine.d.ts.map +1 -1
- package/dist/blueprints/magazine.js +34 -0
- package/dist/blueprints/magazine.js.map +1 -1
- package/dist/blueprints/portfolio.d.ts.map +1 -1
- package/dist/blueprints/portfolio.js +26 -0
- package/dist/blueprints/portfolio.js.map +1 -1
- package/dist/blueprints/restaurant.d.ts.map +1 -1
- package/dist/blueprints/restaurant.js +50 -1
- package/dist/blueprints/restaurant.js.map +1 -1
- package/dist/blueprints/saas.d.ts.map +1 -1
- package/dist/blueprints/saas.js +50 -1
- package/dist/blueprints/saas.js.map +1 -1
- package/dist/blueprints/vitrine.d.ts.map +1 -1
- package/dist/blueprints/vitrine.js +36 -0
- package/dist/blueprints/vitrine.js.map +1 -1
- package/dist/config-file.d.ts.map +1 -1
- package/dist/config-file.js +22 -0
- package/dist/config-file.js.map +1 -1
- package/dist/document-step.d.ts +35 -0
- package/dist/document-step.d.ts.map +1 -0
- package/dist/document-step.js +53 -0
- package/dist/document-step.js.map +1 -0
- package/dist/plan-flow.d.ts +51 -0
- package/dist/plan-flow.d.ts.map +1 -0
- package/dist/plan-flow.js +77 -0
- package/dist/plan-flow.js.map +1 -0
- package/dist/recap.d.ts +3 -0
- package/dist/recap.d.ts.map +1 -1
- package/dist/recap.js +26 -2
- package/dist/recap.js.map +1 -1
- package/dist/scaffold.d.ts +37 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +113 -9
- package/dist/scaffold.js.map +1 -1
- package/dist/skin-flow.d.ts +22 -8
- package/dist/skin-flow.d.ts.map +1 -1
- package/dist/skin-flow.js +57 -29
- package/dist/skin-flow.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/wizard.d.ts +19 -3
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +254 -45
- package/dist/wizard.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { proposeSitePlan, resolveApprovedPlan, summarisePlan, } from '@cogenta/agents';
|
|
2
|
+
function printBrief(draft, out) {
|
|
3
|
+
out.heading('What we understood from your document');
|
|
4
|
+
out.line(draft.brief.summary);
|
|
5
|
+
out.detail(`Activity: ${draft.brief.activity}`);
|
|
6
|
+
out.detail(`Audience: ${draft.brief.audience}`);
|
|
7
|
+
out.detail(`Tone: ${draft.brief.tone}`);
|
|
8
|
+
out.detail(`Languages: ${draft.brief.languages.join(', ')}`);
|
|
9
|
+
for (const source of draft.brief.sources) {
|
|
10
|
+
out.detail(`Read from ${source.filename} (${source.format}, ${source.characters} characters${source.truncated ? ', truncated' : ''})`);
|
|
11
|
+
}
|
|
12
|
+
for (const warning of draft.brief.warnings)
|
|
13
|
+
out.warn(warning);
|
|
14
|
+
for (const violation of draft.violations)
|
|
15
|
+
out.warn(violation.explanation);
|
|
16
|
+
}
|
|
17
|
+
export async function runPlanFlow(options) {
|
|
18
|
+
options.out.heading('Reading your document');
|
|
19
|
+
options.out.detail('Analysing the brief, proposing a content model and several designs…');
|
|
20
|
+
const proposed = await proposeSitePlan({
|
|
21
|
+
client: options.client,
|
|
22
|
+
model: options.model,
|
|
23
|
+
documents: options.documents,
|
|
24
|
+
...(options.siteName === undefined ? {} : { siteName: options.siteName }),
|
|
25
|
+
...(options.blueprintLabel === undefined ? {} : { blueprintLabel: options.blueprintLabel }),
|
|
26
|
+
...(options.skinCount === undefined ? {} : { skinCount: options.skinCount }),
|
|
27
|
+
});
|
|
28
|
+
if (!proposed.ok) {
|
|
29
|
+
options.out.bad(`The document could not be turned into a plan (${proposed.stage}): ${proposed.reason}`);
|
|
30
|
+
return { kind: 'failed', stage: proposed.stage, reason: proposed.reason };
|
|
31
|
+
}
|
|
32
|
+
const { draft } = proposed;
|
|
33
|
+
printBrief(draft, options.out);
|
|
34
|
+
for (const warning of draft.warnings)
|
|
35
|
+
options.out.warn(warning);
|
|
36
|
+
const wantsReview = await options.prompter.confirm('Review this proposal now, item by item? (answering no saves it as a draft to review in the admin later — nothing is applied either way)', false);
|
|
37
|
+
if (!wantsReview) {
|
|
38
|
+
return {
|
|
39
|
+
kind: 'deferred',
|
|
40
|
+
draft,
|
|
41
|
+
reason: 'the proposal was not reviewed, so it was saved as a draft instead of being applied',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const decisions = {};
|
|
45
|
+
for (const section of summarisePlan(draft)) {
|
|
46
|
+
if (section.items.length === 0)
|
|
47
|
+
continue;
|
|
48
|
+
options.out.heading(section.title);
|
|
49
|
+
options.out.line(section.description);
|
|
50
|
+
if (section.mode === 'one-of') {
|
|
51
|
+
const chosen = await options.prompter.choice('Which one?', [
|
|
52
|
+
...section.items.map((item) => ({
|
|
53
|
+
label: item.title,
|
|
54
|
+
value: item.id,
|
|
55
|
+
hint: item.detail,
|
|
56
|
+
})),
|
|
57
|
+
{ label: 'None of them', value: null },
|
|
58
|
+
], 0);
|
|
59
|
+
for (const item of section.items) {
|
|
60
|
+
decisions[item.id] = item.id === chosen ? 'accepted' : 'rejected';
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
for (const item of section.items) {
|
|
65
|
+
options.out.detail(item.detail);
|
|
66
|
+
const keep = await options.prompter.confirm(`Keep “${item.title}”?`, true);
|
|
67
|
+
decisions[item.id] = keep ? 'accepted' : 'rejected';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const approved = resolveApprovedPlan(draft, decisions);
|
|
71
|
+
options.out.ok(`Approved: ${approved.collections.length} collection(s), ${approved.pages.length} page(s), ${approved.demoContent.length} demonstration entr${approved.demoContent.length === 1 ? 'y' : 'ies'}${approved.skinId === undefined ? ', no design' : `, the “${approved.skinId}” design`}.`);
|
|
72
|
+
if (approved.rejected.length > 0) {
|
|
73
|
+
options.out.detail(`Refused: ${approved.rejected.join(', ')}.`);
|
|
74
|
+
}
|
|
75
|
+
return { kind: 'reviewed', draft, decisions, approved };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=plan-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-flow.js","sourceRoot":"","sources":["../src/plan-flow.ts"],"names":[],"mappings":"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"}
|
package/dist/recap.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Output } from '@cogenta/cli';
|
|
|
2
2
|
import type { ResolvedBlueprint } from './blueprints/registry.js';
|
|
3
3
|
import type { EnvironmentReport } from './environment.js';
|
|
4
4
|
import type { ValidateKeyResult } from './llm-setup.js';
|
|
5
|
+
import type { PlanFlowOutcome } from './plan-flow.js';
|
|
5
6
|
import type { ScaffoldResult } from './scaffold.js';
|
|
6
7
|
import type { SkinOutcome } from './skin-flow.js';
|
|
7
8
|
import type { WizardAnswers } from './types.js';
|
|
@@ -13,6 +14,8 @@ export interface RecapInput {
|
|
|
13
14
|
readonly scaffold: ScaffoldResult;
|
|
14
15
|
/** Present only when generation was attempted (L9 task 7) — absent means it was never offered (no LLM, no description). */
|
|
15
16
|
readonly skinOutcome?: SkinOutcome;
|
|
17
|
+
/** Present only when a specification document was read (L19). Absent means the step was never entered. */
|
|
18
|
+
readonly plan?: PlanFlowOutcome;
|
|
16
19
|
}
|
|
17
20
|
/** Step 10: "ce qui est actif, ce qui est dégradé et pourquoi, prochaine étape." Every degraded item names why, never just that it is degraded. */
|
|
18
21
|
export declare function printRecap(input: RecapInput, out: Output): void;
|
package/dist/recap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,2HAA2H;IAC3H,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,2HAA2H;IAC3H,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,0GAA0G;IAC1G,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAChC;AAED,mJAAmJ;AACnJ,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAmH/D"}
|
package/dist/recap.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BLUEPRINT_CONTENT_PACKS } from './blueprints/content-packs.js';
|
|
2
2
|
/** Step 10: "ce qui est actif, ce qui est dégradé et pourquoi, prochaine étape." Every degraded item names why, never just that it is degraded. */
|
|
3
3
|
export function printRecap(input, out) {
|
|
4
|
-
const { answers, environment, resolvedBlueprint, keyValidation, scaffold, skinOutcome } = input;
|
|
4
|
+
const { answers, environment, resolvedBlueprint, keyValidation, scaffold, skinOutcome, plan } = input;
|
|
5
5
|
out.heading('Your site');
|
|
6
6
|
out.ok(`${answers.siteName} — ${answers.siteUrl}`);
|
|
7
7
|
out.detail(answers.targetDir);
|
|
@@ -51,6 +51,30 @@ export function printRecap(input, out) {
|
|
|
51
51
|
out.heading('Recommended agents');
|
|
52
52
|
out.detail('Not enabled — no site runs a live agent scheduler yet. Recorded in .cogenta/recommended-agents.json for when one exists.');
|
|
53
53
|
}
|
|
54
|
+
if (plan !== undefined) {
|
|
55
|
+
out.heading('Your document');
|
|
56
|
+
if (plan.kind === 'failed') {
|
|
57
|
+
out.bad(`No plan could be produced (${plan.stage}): ${plan.reason}`);
|
|
58
|
+
out.detail('The site was created from your answers alone. Nothing was applied from the document.');
|
|
59
|
+
}
|
|
60
|
+
else if (plan.kind === 'deferred') {
|
|
61
|
+
out.warn('A plan was proposed but nobody reviewed it, so nothing from it was applied.');
|
|
62
|
+
if (scaffold.sitePlanPath !== undefined)
|
|
63
|
+
out.detail(`Saved at ${scaffold.sitePlanPath}`);
|
|
64
|
+
out.detail('Open the admin and review it there — it applies only once you accept it, item by item.');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
out.ok(`${scaffold.approvedCollectionNames.length} collection(s) you approved were added${scaffold.approvedCollectionNames.length === 0 ? '' : `: ${scaffold.approvedCollectionNames.join(', ')}`}.`);
|
|
68
|
+
if (scaffold.approvedEntriesSeeded > 0) {
|
|
69
|
+
out.detail(`${scaffold.approvedEntriesSeeded} demonstration entr${scaffold.approvedEntriesSeeded === 1 ? 'y was' : 'ies were'} created as drafts, never published — read them before you publish them.`);
|
|
70
|
+
}
|
|
71
|
+
if (plan.approved.rejected.length > 0) {
|
|
72
|
+
out.detail(`You refused: ${plan.approved.rejected.join(', ')}.`);
|
|
73
|
+
}
|
|
74
|
+
for (const violation of plan.draft.violations)
|
|
75
|
+
out.detail(violation.explanation);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
54
78
|
out.heading('Admin account');
|
|
55
79
|
if (scaffold.usersExitCode === 0) {
|
|
56
80
|
out.line(scaffold.usersOutput.trim());
|
|
@@ -71,6 +95,6 @@ export function printRecap(input, out) {
|
|
|
71
95
|
out.line('npm install');
|
|
72
96
|
out.line('npx cogenta serve');
|
|
73
97
|
out.detail(`Then open ${answers.siteUrl}/admin and sign in with the admin account above.`);
|
|
74
|
-
out.detail('A
|
|
98
|
+
out.detail('A password is all it takes to sign in, for every role (ADR-0021). The admin recommends a second factor for an account that can publish or administer, and the profile screen is where to turn one on — it is never demanded at the door.');
|
|
75
99
|
}
|
|
76
100
|
//# sourceMappingURL=recap.js.map
|
package/dist/recap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recap.js","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"recap.js","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"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"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { type DemoEntry, type PlanDecisions, type SitePlanDraft } from '@cogenta/agents';
|
|
1
2
|
import type { SkinTokens } from '@cogenta/render';
|
|
3
|
+
import { type CollectionDefinition } from '@cogenta/schema';
|
|
2
4
|
export interface ScaffoldAnswers {
|
|
3
5
|
readonly targetDir: string;
|
|
4
6
|
readonly siteName: string;
|
|
@@ -15,6 +17,35 @@ export interface ScaffoldAnswers {
|
|
|
15
17
|
readonly blueprintId?: string;
|
|
16
18
|
/** Already generated and validated by `chooseSkin` (L9 task 7). Absent: the theme's default `tokens.json` is copied, exactly as before this option existed. */
|
|
17
19
|
readonly skinTokens?: SkinTokens;
|
|
20
|
+
/** Every locale the site is set up with. Defaults to `[defaultLocale]` — the behaviour before L19. */
|
|
21
|
+
readonly locales?: readonly string[];
|
|
22
|
+
/** L19 task 8's confirmed per-site-type defaults. Absent: `@cogenta/core`'s own defaults apply, unchanged. */
|
|
23
|
+
readonly security?: {
|
|
24
|
+
readonly pageMaxAge: number;
|
|
25
|
+
readonly hstsMaxAge: number;
|
|
26
|
+
};
|
|
27
|
+
/** `false` skips the blueprint's demo content. Defaults to `true` — the behaviour before L19. */
|
|
28
|
+
readonly seedDemoContent?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Collections a human approved item by item from a document-driven plan
|
|
31
|
+
* (L19). Written into `cogenta.schema.mjs` alongside the blueprint's own,
|
|
32
|
+
* and their tables created. Never the whole proposal — only what
|
|
33
|
+
* `resolveApprovedPlan` returned.
|
|
34
|
+
*/
|
|
35
|
+
readonly approvedCollections?: readonly CollectionDefinition[];
|
|
36
|
+
/** Demonstration entries approved one at a time, seeded into `approvedCollections`. */
|
|
37
|
+
readonly approvedDemoContent?: readonly DemoEntry[];
|
|
38
|
+
/**
|
|
39
|
+
* A proposal to keep on disk for later review. Written to
|
|
40
|
+
* `.cogenta/site-plans/`, never applied by this function — this is how a
|
|
41
|
+
* non-interactive run leaves a plan waiting for a human rather than
|
|
42
|
+
* publishing one behind their back (L19, "jamais une publication
|
|
43
|
+
* automatique").
|
|
44
|
+
*/
|
|
45
|
+
readonly sitePlan?: {
|
|
46
|
+
readonly draft: SitePlanDraft;
|
|
47
|
+
readonly decisions?: PlanDecisions;
|
|
48
|
+
};
|
|
18
49
|
}
|
|
19
50
|
export interface ScaffoldResult {
|
|
20
51
|
readonly configPath: string;
|
|
@@ -29,6 +60,12 @@ export interface ScaffoldResult {
|
|
|
29
60
|
readonly schemaPath: string;
|
|
30
61
|
/** Present only when a blueprint wrote `theme.tokens.json` — says whether the AI-generated skin was used or the theme's default was copied. */
|
|
31
62
|
readonly skinSource?: 'generated' | 'default';
|
|
63
|
+
/** Names of the collections that came from an approved document-driven plan, in the order written. */
|
|
64
|
+
readonly approvedCollectionNames: readonly string[];
|
|
65
|
+
/** How many approved demonstration entries were actually seeded. */
|
|
66
|
+
readonly approvedEntriesSeeded: number;
|
|
67
|
+
/** Where an unreviewed proposal was left waiting, when one was. */
|
|
68
|
+
readonly sitePlanPath?: string;
|
|
32
69
|
}
|
|
33
70
|
/**
|
|
34
71
|
* Step 9: "Installation, migrations, contenu de démo." Writes the site's
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,iBAAiB,CAAA;AAIxB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,+JAA+J;IAC/J,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,sGAAsG;IACtG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,8GAA8G;IAC9G,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IAChF,iGAAiG;IACjG,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAA;IAC9D,uFAAuF;IACvF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;KAAE,CAAA;CAC1F;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,2JAA2J;IAC3J,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,+IAA+I;IAC/I,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,sGAAsG;IACtG,QAAQ,CAAC,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnD,oEAAoE;IACpE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAsHD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,EACxB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,OAAO,CAAC,cAAc,CAAC,CA2IzB"}
|
package/dist/scaffold.js
CHANGED
|
@@ -2,10 +2,11 @@ import { randomBytes } from 'node:crypto';
|
|
|
2
2
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { createFileSitePlanStore, } from '@cogenta/agents';
|
|
5
6
|
import { createUserStore, ensureAuthTables } from '@cogenta/auth';
|
|
6
7
|
import { createOutput, runMigrate, runUsers } from '@cogenta/cli';
|
|
7
8
|
import { createDatabaseRegistry, createLogger } from '@cogenta/core';
|
|
8
|
-
import { createSchemaTables } from '@cogenta/schema';
|
|
9
|
+
import { createContentStore, createSchemaTables, validateCollectionSet, } from '@cogenta/schema';
|
|
9
10
|
import { BLUEPRINT_CONTENT_PACKS } from './blueprints/content-packs.js';
|
|
10
11
|
import { DEFAULT_BLUEPRINT_ID, resolveBlueprint } from './blueprints/registry.js';
|
|
11
12
|
function capture() {
|
|
@@ -31,11 +32,18 @@ function configFileContents(answers) {
|
|
|
31
32
|
const llmBlock = answers.llm === undefined
|
|
32
33
|
? ''
|
|
33
34
|
: ` llm: { provider: ${JSON.stringify(answers.llm.provider)}, model: ${JSON.stringify(answers.llm.model)} },\n`;
|
|
35
|
+
// Written only when the human confirmed L19 task 8's per-site-type
|
|
36
|
+
// recommendations. Absent, `@cogenta/core`'s own defaults apply, and a
|
|
37
|
+
// config file generated before L19 is unchanged byte for byte.
|
|
38
|
+
const securityBlock = answers.security === undefined
|
|
39
|
+
? ''
|
|
40
|
+
: ` security: { pageMaxAge: ${answers.security.pageMaxAge}, hstsMaxAge: ${answers.security.hstsMaxAge} },\n`;
|
|
41
|
+
const locales = answers.locales ?? [answers.defaultLocale];
|
|
34
42
|
return `export default {
|
|
35
43
|
site: {
|
|
36
44
|
name: ${JSON.stringify(answers.siteName)},
|
|
37
45
|
url: ${JSON.stringify(answers.siteUrl)},
|
|
38
|
-
locales:
|
|
46
|
+
locales: ${JSON.stringify(locales)},
|
|
39
47
|
defaultLocale: ${JSON.stringify(answers.defaultLocale)},
|
|
40
48
|
},
|
|
41
49
|
database: {
|
|
@@ -44,9 +52,28 @@ function configFileContents(answers) {
|
|
|
44
52
|
},
|
|
45
53
|
cache: { path: ${JSON.stringify(join(answers.targetDir, '.cogenta', 'cache'))} },
|
|
46
54
|
storage: { path: ${JSON.stringify(join(answers.targetDir, '.cogenta', 'media'))} },
|
|
47
|
-
${llmBlock}}
|
|
55
|
+
${llmBlock}${securityBlock}}
|
|
48
56
|
`;
|
|
49
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* The blueprint's collections plus whatever a human approved from a
|
|
60
|
+
* document-driven plan, with a name collision resolved in the blueprint's
|
|
61
|
+
* favour.
|
|
62
|
+
*
|
|
63
|
+
* That direction is deliberate: the blueprint's `page` collection is seeded
|
|
64
|
+
* with real demo pages by `seedDemoContent`, and replacing its definition
|
|
65
|
+
* with a proposed one of the same name would leave those rows referring to
|
|
66
|
+
* fields that no longer exist. The dropped proposal is reported, not
|
|
67
|
+
* silently discarded.
|
|
68
|
+
*/
|
|
69
|
+
function mergeCollections(fromBlueprint, approved) {
|
|
70
|
+
const taken = new Set(fromBlueprint.map((collection) => collection.name));
|
|
71
|
+
const added = approved.filter((collection) => !taken.has(collection.name));
|
|
72
|
+
const all = [...fromBlueprint, ...added];
|
|
73
|
+
if (added.length > 0)
|
|
74
|
+
validateCollectionSet(all);
|
|
75
|
+
return { all, added };
|
|
76
|
+
}
|
|
50
77
|
function schemaFileContents(collections) {
|
|
51
78
|
// Every `FieldDefinition` a blueprint declares here is plain, serialisable
|
|
52
79
|
// data (contract A) — `defineCollection` validates and returns it as-is,
|
|
@@ -119,15 +146,34 @@ export async function scaffoldSite(answers, env = process.env) {
|
|
|
119
146
|
// unconditionally is what makes "npm create cogenta" with every default
|
|
120
147
|
// answer produce a site `cogenta serve` can actually start.
|
|
121
148
|
const schemaPath = join(answers.targetDir, 'cogenta.schema.mjs');
|
|
122
|
-
|
|
149
|
+
const merged = mergeCollections(pack?.collections ?? [], answers.approvedCollections ?? []);
|
|
150
|
+
await writeFile(schemaPath, schemaFileContents(merged.all), 'utf8');
|
|
123
151
|
let skinSource;
|
|
124
|
-
|
|
152
|
+
// A plan the human approved brings its own skin, whatever blueprint was
|
|
153
|
+
// picked — including `blank`, which has no content pack and therefore
|
|
154
|
+
// never wrote a `theme.tokens.json` before.
|
|
155
|
+
const writesTheme = pack !== undefined || answers.approvedCollections !== undefined;
|
|
156
|
+
if (writesTheme) {
|
|
125
157
|
skinSource = answers.skinTokens === undefined ? 'default' : 'generated';
|
|
126
158
|
const tokensJson = answers.skinTokens === undefined
|
|
127
159
|
? await canonicalTokensJson()
|
|
128
160
|
: `${JSON.stringify(answers.skinTokens, null, 2)}\n`;
|
|
129
161
|
await writeFile(join(answers.targetDir, 'theme.tokens.json'), tokensJson, 'utf8');
|
|
130
|
-
|
|
162
|
+
if (pack !== undefined) {
|
|
163
|
+
await writeFile(join(answers.targetDir, '.cogenta', 'recommended-agents.json'), `${JSON.stringify(pack.recommendedAgents, null, 2)}\n`, 'utf8');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// A proposal nobody reviewed is written down, never acted on. This is the
|
|
167
|
+
// only thing a non-interactive run does with a document-driven plan.
|
|
168
|
+
let sitePlanPath;
|
|
169
|
+
if (answers.sitePlan !== undefined) {
|
|
170
|
+
const directory = join(answers.targetDir, '.cogenta', 'site-plans');
|
|
171
|
+
const store = createFileSitePlanStore(directory);
|
|
172
|
+
await store.save(answers.sitePlan.draft);
|
|
173
|
+
if (answers.sitePlan.decisions !== undefined) {
|
|
174
|
+
await store.recordDecisions(answers.sitePlan.draft.id, answers.sitePlan.decisions);
|
|
175
|
+
}
|
|
176
|
+
sitePlanPath = join(directory, `${answers.sitePlan.draft.id}.plan.json`);
|
|
131
177
|
}
|
|
132
178
|
const migrateCapture = capture();
|
|
133
179
|
const migrateStderr = capture();
|
|
@@ -149,17 +195,29 @@ export async function scaffoldSite(answers, env = process.env) {
|
|
|
149
195
|
out: createOutput(usersCapture.write, false),
|
|
150
196
|
stderr: usersStderr.write,
|
|
151
197
|
});
|
|
152
|
-
|
|
198
|
+
let approvedEntriesSeeded = 0;
|
|
199
|
+
const needsDatabaseWork = merged.all.length > 0;
|
|
200
|
+
if (needsDatabaseWork && migrateExitCode === 0 && usersExitCode === 0) {
|
|
153
201
|
const logger = createLogger({ level: 'silent' });
|
|
154
202
|
const selection = await createDatabaseRegistry({ logger }).select({
|
|
155
203
|
driver: answers.databaseDriver,
|
|
156
204
|
url: databaseUrlFor(answers),
|
|
157
205
|
});
|
|
158
206
|
try {
|
|
159
|
-
await createSchemaTables(selection.instance,
|
|
207
|
+
await createSchemaTables(selection.instance, merged.all);
|
|
160
208
|
await ensureAuthTables(selection.instance);
|
|
161
209
|
const admin = await createUserStore(selection.instance).byEmail(answers.adminEmail);
|
|
162
|
-
|
|
210
|
+
if (pack !== undefined && (answers.seedDemoContent ?? true)) {
|
|
211
|
+
await pack.seedDemoContent(selection.instance, answers.defaultLocale, admin?.id ?? null);
|
|
212
|
+
}
|
|
213
|
+
approvedEntriesSeeded = await seedApprovedEntries({
|
|
214
|
+
db: selection.instance,
|
|
215
|
+
collections: merged.added,
|
|
216
|
+
entries: answers.approvedDemoContent ?? [],
|
|
217
|
+
defaultLocale: answers.defaultLocale,
|
|
218
|
+
adminId: admin?.id ?? null,
|
|
219
|
+
...(answers.llm === undefined ? {} : { model: answers.llm.model }),
|
|
220
|
+
});
|
|
163
221
|
}
|
|
164
222
|
finally {
|
|
165
223
|
await selection.dispose();
|
|
@@ -175,6 +233,52 @@ export async function scaffoldSite(answers, env = process.env) {
|
|
|
175
233
|
fellBackToBlank,
|
|
176
234
|
schemaPath,
|
|
177
235
|
...(skinSource === undefined ? {} : { skinSource }),
|
|
236
|
+
approvedCollectionNames: merged.added.map((collection) => collection.name),
|
|
237
|
+
approvedEntriesSeeded,
|
|
238
|
+
...(sitePlanPath === undefined ? {} : { sitePlanPath }),
|
|
178
239
|
};
|
|
179
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Seeds the demonstration entries a human approved, one at a time, through
|
|
243
|
+
* the real `ContentStore` — the same path the blueprints' own seeders take.
|
|
244
|
+
*
|
|
245
|
+
* Entries are created as drafts, not published. A blueprint's demo content
|
|
246
|
+
* is written by this repository and vouched for; this is written by a model
|
|
247
|
+
* about somebody's business, and putting it live on a public site before its
|
|
248
|
+
* owner has read it is precisely the automatic application R6 forbids.
|
|
249
|
+
*/
|
|
250
|
+
async function seedApprovedEntries(input) {
|
|
251
|
+
if (input.entries.length === 0)
|
|
252
|
+
return 0;
|
|
253
|
+
const stores = new Map(input.collections.map((collection) => [
|
|
254
|
+
collection.name,
|
|
255
|
+
createContentStore({
|
|
256
|
+
db: input.db,
|
|
257
|
+
collection,
|
|
258
|
+
defaultLocale: input.defaultLocale,
|
|
259
|
+
}),
|
|
260
|
+
]));
|
|
261
|
+
let seeded = 0;
|
|
262
|
+
for (const entry of input.entries) {
|
|
263
|
+
const store = stores.get(entry.collection);
|
|
264
|
+
if (store === undefined)
|
|
265
|
+
continue;
|
|
266
|
+
await store.create({
|
|
267
|
+
status: 'draft',
|
|
268
|
+
createdBy: input.adminId,
|
|
269
|
+
// `generated`, not the `human` default: contract A calls `provenance`
|
|
270
|
+
// non-optional because the European AI framework requires it, and this
|
|
271
|
+
// entry was written by a model about somebody's business.
|
|
272
|
+
provenance: 'generated',
|
|
273
|
+
provenanceDetail: {
|
|
274
|
+
agent: 'site-planner',
|
|
275
|
+
...(input.model === undefined ? {} : { model: input.model }),
|
|
276
|
+
at: new Date().toISOString(),
|
|
277
|
+
},
|
|
278
|
+
values: entry.values,
|
|
279
|
+
});
|
|
280
|
+
seeded++;
|
|
281
|
+
}
|
|
282
|
+
return seeded;
|
|
283
|
+
}
|
|
180
284
|
//# sourceMappingURL=scaffold.js.map
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEpE,OAAO,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/skin-flow.d.ts
CHANGED
|
@@ -11,25 +11,39 @@ export interface ChooseSkinOptions {
|
|
|
11
11
|
readonly blueprintLabel: string;
|
|
12
12
|
readonly siteName: string;
|
|
13
13
|
readonly targetDir: string;
|
|
14
|
-
/** Caps how many manual "regenerate" rounds the user can ask for, on top of each
|
|
14
|
+
/** Caps how many manual "regenerate" rounds the user can ask for, on top of each candidate's own three automatic correction attempts. */
|
|
15
15
|
readonly maxRegenerations?: number;
|
|
16
|
+
/** How many designs to propose. Clamped to 2..5 by `generateSkinCandidates`. Defaults to 3. */
|
|
17
|
+
readonly candidateCount?: number;
|
|
16
18
|
}
|
|
17
19
|
export type SkinOutcome = {
|
|
18
20
|
readonly kind: 'generated';
|
|
19
21
|
readonly tokens: SkinTokens;
|
|
20
22
|
readonly attempts: number;
|
|
23
|
+
/** Which of the proposed designs the human picked. */
|
|
24
|
+
readonly candidateId: string;
|
|
25
|
+
readonly candidateLabel: string;
|
|
26
|
+
/** How many were actually offered — the lot requires this to be at least two. */
|
|
27
|
+
readonly offered: number;
|
|
21
28
|
} | {
|
|
22
29
|
readonly kind: 'default';
|
|
23
30
|
readonly reason: string;
|
|
24
31
|
};
|
|
25
32
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* `--yes
|
|
32
|
-
*
|
|
33
|
+
* L19 task 3, in the installer: "l'utilisateur voit et choisit explicitement
|
|
34
|
+
* entre deux et cinq gabarits proposés, jamais un seul choix imposé."
|
|
35
|
+
*
|
|
36
|
+
* The shape of the round is what it was in L9 task 7 — generate, preview on
|
|
37
|
+
* three real pages, then accept / regenerate / fall back to the default,
|
|
38
|
+
* bounded so a non-interactive `--yes` run (whose `Prompter.choice` always
|
|
39
|
+
* answers with its default) never loops. What changed is that a round now
|
|
40
|
+
* produces several designs rather than one, each validated against contract
|
|
41
|
+
* D by `generateSkin`'s own loop, and the accept step is a pick among them.
|
|
42
|
+
*
|
|
43
|
+
* A round that cannot produce at least two distinct valid designs is not
|
|
44
|
+
* offered as a choice: it falls through to the next round, and eventually to
|
|
45
|
+
* the default skin, saying why. Presenting one option as if it were a
|
|
46
|
+
* decision is the failure mode this task exists to remove.
|
|
33
47
|
*/
|
|
34
48
|
export declare function chooseSkin(options: ChooseSkinOptions): Promise<SkinOutcome>;
|
|
35
49
|
//# sourceMappingURL=skin-flow.d.ts.map
|
package/dist/skin-flow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin-flow.d.ts","sourceRoot":"","sources":["../src/skin-flow.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"skin-flow.d.ts","sourceRoot":"","sources":["../src/skin-flow.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,cAAc,EAAsB,MAAM,iBAAiB,CAAA;AACjG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,yIAAyI;IACzI,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAwBzD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAqEjF"}
|