groundplan 0.1.0 → 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.
@@ -1,49 +1,55 @@
1
+ import fs from 'node:fs';
1
2
  import path from 'node:path';
2
3
  import * as p from '@clack/prompts';
3
4
  import pc from 'picocolors';
4
- import { apply, buildPlan, choiceSets, commandVars, delegationToolsJson, engineGlobals, hasRequiredFailure, loadCatalog, recommend, renderAdapterFiles, writeAdapterFiles, resolve, test as testCondition, } from '@groundplan/core';
5
- import { flagBool, flagString, parseArgs } from '../args.js';
6
- import { askAnswers } from './recommend.js';
5
+ import { apply, autoSelect, buildPlan, commandVars, delegationToolsJson, engineGlobals, hasRequiredFailure, inferSelection, loadCatalog, renderAdapterFiles, resolve, resolveVariableDefaults, runChecks, verificationPlan, writeAdapterFiles, } from '@opengroundplan/core';
6
+ import { flagBool, flagList, flagString, parseArgs } from '../args.js';
7
+ /**
8
+ * `groundplan new` — describe a project, get a repository. The brief drives everything; the
9
+ * interview only appears for a fork the description genuinely left open. `--yes` and
10
+ * `--non-interactive` suppress even those, taking the inferred default for each.
11
+ */
7
12
  export async function cmdNew(argv, config) {
8
13
  const args = parseArgs(argv);
14
+ const asJson = flagBool(args, 'json');
15
+ const yes = flagBool(args, 'yes');
9
16
  const dryRun = flagBool(args, 'dry-run');
10
- p.intro(pc.bgCyan(pc.black(' groundplan new ')));
17
+ const nonInteractive = asJson || yes || flagBool(args, 'non-interactive');
18
+ if (!asJson)
19
+ p.intro(pc.bgCyan(pc.black(' groundplan new ')));
11
20
  const catalog = await loadCatalog(config);
12
21
  if (catalog.blueprints.size === 0) {
13
22
  throw new Error('No blueprints installed. Run `groundplan doctor` and check templates/.');
14
23
  }
15
- const solutionName = args.positional[0] ?? (await askSolutionName());
16
- const target = path.resolve(flagString(args, 'target') ?? solutionName);
17
- const answers = await askAnswers();
18
- // Rank first, then let the user override — the recommendation is advice, not a lock.
19
- const ranked = recommend(catalog.architectures.values(), {
20
- priorities: answers.priorities,
21
- teamSize: answers.teamSize,
22
- stack: answers.stack,
23
- family: answers.family,
24
+ let description = readBrief(args);
25
+ if (!description && !nonInteractive)
26
+ description = await askBrief();
27
+ if (!description) {
28
+ throw new Error('Nothing to build from. Give a description, or --brief <file> / --from-readme / --from-spec.');
29
+ }
30
+ // The one shared inference pipeline — the model (when configured) proposes catalog-constrained
31
+ // overrides, explicit flags win, and the deterministic planner fills the rest.
32
+ const inferred = await inferSelection(description, catalog, config, {
33
+ overrides: collectOverrides(args),
34
+ useModel: !flagBool(args, 'no-ai'),
24
35
  });
25
- const architecture = await pickArchitecture(ranked);
26
- const base = await pickBase(catalog, answers.stack, architecture);
27
- const layers = await pickLayers(catalog, base);
28
- const adapters = await pickAdapters(catalog, config);
29
- const selected = resolve({ base, architecture, layers }, catalog.blueprints);
30
- for (const warning of selected.warnings)
31
- p.log.warn(warning);
32
- const vars = {
33
- ...engineGlobals({
34
- solutionName,
35
- base,
36
- stack: answers.stack,
37
- teamSize: answers.teamSize,
38
- architecture,
39
- adapters,
40
- today: new Date().toISOString().slice(0, 10),
41
- delegationTools: delegationToolsJson(adapters.map((id) => catalog.adapters.get(id)).filter((a) => a !== undefined)),
42
- }),
43
- ...commandVars(selected.order, answers.stack, config),
44
- ...(await askBlueprintVariables(selected.order, { base, stack: answers.stack, architecture })),
45
- };
46
- const plan = await buildPlan({ solution: solutionName, target, blueprints: selected.order, adapters, architecture, vars }, config);
36
+ const gaps = inferred.gaps;
37
+ let selection = inferred.selection;
38
+ if (inferred.viaModel)
39
+ selection.assumptions.unshift(`Understood by ${config.ai.inferModel}`);
40
+ if (!nonInteractive)
41
+ selection = await refine(description, catalog, config, selection, inferred.baseOverrides);
42
+ const name = await resolveName(args, description, nonInteractive);
43
+ const target = path.resolve(flagString(args, 'target') ?? name);
44
+ const plan = await planFromSelection(selection, name, target, catalog, config);
45
+ if (asJson) {
46
+ console.log(JSON.stringify(toJson(selection, plan, name, target, gaps), null, 2));
47
+ return;
48
+ }
49
+ printSelection(selection);
50
+ if (gaps.length) {
51
+ p.log.warn(`Not in the catalog yet — you'll need to add these yourself:\n ${gaps.join('\n ')}`);
52
+ }
47
53
  printPlan(plan);
48
54
  for (const warning of plan.warnings)
49
55
  p.log.warn(warning);
@@ -51,21 +57,222 @@ export async function cmdNew(argv, config) {
51
57
  p.outro(pc.dim('Dry run — nothing written.'));
52
58
  return;
53
59
  }
54
- const approved = await p.confirm({ message: `Write ${plan.files.length} files to ${target}?` });
55
- if (p.isCancel(approved) || !approved) {
56
- p.cancel('Nothing written.');
57
- return;
60
+ if (!yes) {
61
+ const approved = await p.confirm({ message: `Write ${plan.files.length} files to ${target}?` });
62
+ if (p.isCancel(approved) || !approved) {
63
+ p.cancel('Nothing written.');
64
+ return;
65
+ }
58
66
  }
67
+ await generate(selection, plan, name, target, catalog, config, flagBool(args, 'verify'));
68
+ }
69
+ /* ── input ─────────────────────────────────────────────────────────────────── */
70
+ /** Resolve the brief from flags or the positional argument; empty string when there is none. */
71
+ function readBrief(args) {
72
+ const file = flagString(args, 'brief');
73
+ if (file)
74
+ return readFileBrief(file);
75
+ if (flagBool(args, 'from-readme'))
76
+ return readFileBrief('README.md');
77
+ if (flagBool(args, 'from-spec'))
78
+ return readFileBrief(findSpec());
79
+ const positional = args.positional[0];
80
+ if (!positional)
81
+ return '';
82
+ if (isFileArg(positional))
83
+ return readFileBrief(positional);
84
+ if (/\s/.test(positional.trim()))
85
+ return positional.trim(); // a sentence, not a name
86
+ return '';
87
+ }
88
+ function isFileArg(arg) {
89
+ return /\.(md|txt|markdown)$/i.test(arg) || fileExists(arg);
90
+ }
91
+ function readFileBrief(file) {
92
+ if (!file)
93
+ throw new Error('No spec file found. Looked for ./spec.md and specs/*/spec.md.');
94
+ if (!fileExists(file))
95
+ throw new Error(`Cannot read "${file}" — file not found.`);
96
+ return fs.readFileSync(file, 'utf8').trim();
97
+ }
98
+ function findSpec() {
99
+ if (fileExists('spec.md'))
100
+ return 'spec.md';
101
+ const dirs = fileExists('specs') ? fs.readdirSync('specs', { withFileTypes: true }) : [];
102
+ for (const dir of dirs.filter((d) => d.isDirectory()).sort().reverse()) {
103
+ const candidate = path.join('specs', dir.name, 'spec.md');
104
+ if (fileExists(candidate))
105
+ return candidate;
106
+ }
107
+ return undefined;
108
+ }
109
+ function fileExists(file) {
110
+ try {
111
+ fs.accessSync(file);
112
+ return true;
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ function collectOverrides(args) {
119
+ const overrides = {};
120
+ const stack = flagString(args, 'stack');
121
+ if (stack)
122
+ overrides.stack = stack;
123
+ const architecture = flagString(args, 'architecture');
124
+ if (architecture)
125
+ overrides.architecture = architecture;
126
+ const base = flagString(args, 'base');
127
+ if (base)
128
+ overrides.base = base;
129
+ const layers = flagList(args, 'layers');
130
+ if (layers)
131
+ overrides.layers = layers;
132
+ const adapters = flagList(args, 'adapters');
133
+ if (adapters)
134
+ overrides.adapters = adapters;
135
+ return overrides;
136
+ }
137
+ /* ── interactive refinement — only the questions the brief left open ─────────── */
138
+ const REFINABLE = new Set(['stack', 'priorities', 'architecture', 'base']);
139
+ const PRIORITY_CHOICES = [
140
+ { value: 'simplicity', label: 'Simplicity', hint: 'ship fast, few moving parts' },
141
+ { value: 'scalability', label: 'Scalability', hint: 'grow with load' },
142
+ { value: 'deployability', label: 'Deployability', hint: 'deploy often, independently' },
143
+ { value: 'testability', label: 'Testability', hint: 'fast, isolated tests' },
144
+ { value: 'evolvability', label: 'Evolvability', hint: 'change direction cheaply' },
145
+ { value: 'fault-tolerance', label: 'Fault tolerance', hint: 'survive partial failure' },
146
+ { value: 'maintainability', label: 'Maintainability', hint: 'easy to change safely' },
147
+ { value: 'responsiveness', label: 'Responsiveness', hint: 'low latency to the user' },
148
+ { value: 'cost', label: 'Low cost', hint: 'minimize infrastructure spend' },
149
+ ];
150
+ async function refine(description, catalog, config, selection, baseOverrides) {
151
+ const overrides = { ...baseOverrides };
152
+ const handled = new Set();
153
+ for (;;) {
154
+ const question = selection.questions.find((q) => REFINABLE.has(q.field) && !handled.has(q.field));
155
+ if (!question)
156
+ break;
157
+ handled.add(question.field);
158
+ if (question.field === 'priorities') {
159
+ overrides.priorities = await askPriorities();
160
+ }
161
+ else if (question.field === 'stack') {
162
+ overrides.stack = (await askSelect('Primary stack', question.options, question.chosen));
163
+ }
164
+ else if (question.field === 'architecture') {
165
+ overrides.architecture = await askSelect('Architecture', question.options, question.chosen);
166
+ }
167
+ else if (question.field === 'base') {
168
+ overrides.base = await askSelect('Base template', question.options, question.chosen);
169
+ }
170
+ selection = autoSelect(description, catalog, { defaultAdapters: config.defaultAdapters, overrides });
171
+ }
172
+ return selection;
173
+ }
174
+ async function askSelect(message, options, initial) {
175
+ const value = await p.select({
176
+ message,
177
+ initialValue: initial,
178
+ options: options.map((o) => ({ value: o.id, label: o.label, hint: o.hint })),
179
+ });
180
+ assertNotCancelled(value);
181
+ return value;
182
+ }
183
+ async function askPriorities() {
184
+ const chosen = (await p.multiselect({
185
+ message: 'What matters most? (pick 2-4)',
186
+ options: PRIORITY_CHOICES,
187
+ required: true,
188
+ }));
189
+ assertNotCancelled(chosen);
190
+ const priorities = {};
191
+ chosen.forEach((c, i) => (priorities[c] = Math.max(5 - i, 2)));
192
+ return priorities;
193
+ }
194
+ async function askBrief() {
195
+ const value = await p.text({
196
+ message: 'Describe your project in a sentence or two',
197
+ placeholder: 'An AI tutoring platform with realtime voice and screen monitoring',
198
+ validate: (v) => (v.trim().length > 0 ? undefined : 'Say a little about what you are building'),
199
+ });
200
+ assertNotCancelled(value);
201
+ return value.trim();
202
+ }
203
+ async function resolveName(args, description, nonInteractive) {
204
+ const explicit = flagString(args, 'name') ?? bareNameArg(args) ?? targetName(args);
205
+ if (explicit)
206
+ return explicit;
207
+ const derived = slugify(description) || 'app';
208
+ if (nonInteractive)
209
+ return derived;
210
+ const value = await p.text({ message: 'Project name', defaultValue: derived, placeholder: derived });
211
+ assertNotCancelled(value);
212
+ return value.trim() || derived;
213
+ }
214
+ /** A bare positional token (`groundplan new acme-billing`) is a name, not a brief. */
215
+ function bareNameArg(args) {
216
+ const positional = args.positional[0];
217
+ if (positional && !isFileArg(positional) && !/\s/.test(positional.trim()))
218
+ return positional.trim();
219
+ return undefined;
220
+ }
221
+ function targetName(args) {
222
+ const target = flagString(args, 'target');
223
+ return target ? path.basename(target) : undefined;
224
+ }
225
+ const NAME_FILLERS = new Set(['build', 'create', 'make', 'a', 'an', 'the', 'my', 'some', 'app', 'for']);
226
+ /** A repo name from the first few meaningful words — "Build an AI tutoring…" → "ai-tutoring". */
227
+ function slugify(text) {
228
+ const words = text
229
+ .toLowerCase()
230
+ .replace(/[^a-z0-9]+/g, ' ')
231
+ .trim()
232
+ .split(/\s+/)
233
+ .filter((w) => w && !NAME_FILLERS.has(w));
234
+ return words.slice(0, 3).join('-');
235
+ }
236
+ /* ── plan assembly ───────────────────────────────────────────────────────────── */
237
+ async function planFromSelection(selection, name, target, catalog, config) {
238
+ const selected = resolve({ base: selection.base, architecture: selection.architecture, layers: selection.layers }, catalog.blueprints);
239
+ const adapterEntries = selection.adapters
240
+ .map((id) => catalog.adapters.get(id))
241
+ .filter((a) => a !== undefined);
242
+ const globals = engineGlobals({
243
+ solutionName: name,
244
+ base: selection.base,
245
+ stack: selection.stack,
246
+ teamSize: selection.teamSize,
247
+ architecture: selection.architecture,
248
+ adapters: selection.adapters,
249
+ today: new Date().toISOString().slice(0, 10),
250
+ delegationTools: delegationToolsJson(adapterEntries),
251
+ });
252
+ const cmds = commandVars(selected.order, selection.stack, config);
253
+ const context = { base: selection.base, stack: selection.stack, architecture: selection.architecture };
254
+ const { vars: filled } = resolveVariableDefaults(selected.order, { ...context, ...globals, ...cmds });
255
+ return buildPlan({
256
+ solution: name,
257
+ target,
258
+ blueprints: selected.order,
259
+ adapters: selection.adapters,
260
+ architecture: selection.architecture,
261
+ vars: { ...globals, ...cmds, ...filled },
262
+ }, config);
263
+ }
264
+ async function generate(selection, plan, name, target, catalog, config, verify) {
59
265
  const spinner = p.spinner();
60
266
  spinner.start('Generating');
61
267
  const result = await apply(plan, config, { onProgress: (m) => spinner.message(m) });
62
268
  spinner.stop(`Wrote ${result.written.length} files`);
63
- // Compile AGENTS.md outward, one file per selected tool. Without this the repo has the
64
- // source of truth and nothing pointing at it, which is the whole point of the adapters.
269
+ const adapterEntries = selection.adapters
270
+ .map((id) => catalog.adapters.get(id))
271
+ .filter((a) => a !== undefined);
65
272
  const emitted = await renderAdapterFiles({
66
- adapters: adapters.map((id) => catalog.adapters.get(id)).filter((a) => a !== undefined),
273
+ adapters: adapterEntries,
67
274
  registry: [...catalog.registry.values()],
68
- vars,
275
+ vars: plan.variables,
69
276
  config,
70
277
  });
71
278
  await writeAdapterFiles(target, emitted.files);
@@ -89,154 +296,42 @@ export async function cmdNew(argv, config) {
89
296
  process.exitCode = 1;
90
297
  return;
91
298
  }
92
- p.outro(`${pc.green('✔')} ${solutionName} ready at ${pc.cyan(target)}`);
93
- }
94
- async function askSolutionName() {
95
- const value = await p.text({
96
- message: 'Solution name',
97
- placeholder: 'acme-billing',
98
- validate: (v) => (v.trim().length > 0 ? undefined : 'Required'),
99
- });
100
- assertNotCancelled(value);
101
- return value.trim();
102
- }
103
- async function pickArchitecture(ranked) {
104
- if (ranked.length === 0)
105
- return undefined;
106
- const value = await p.select({
107
- message: 'Architecture',
108
- options: ranked.slice(0, 6).map((r, i) => ({
109
- value: r.architecture.id,
110
- label: `${r.architecture.name}${i === 0 ? pc.green(' ← recommended') : ''}`,
111
- hint: `${Math.round(r.fit * 100)}% fit — ${r.architecture.keyTradeoff}`,
112
- })),
113
- });
114
- assertNotCancelled(value);
115
- return value;
116
- }
117
- async function pickBase(catalog, stack, architecture) {
118
- const bases = [...catalog.blueprints.values()].filter((b) => b.kind === 'base' &&
119
- b.stack === stack &&
120
- (!architecture || b.supportsArchitectures.length === 0 || b.supportsArchitectures.includes(architecture)));
121
- if (bases.length === 0) {
122
- // Two very different causes; saying "no base for this stack" when eight exist sends the
123
- // reader looking in the wrong place.
124
- const forStack = [...catalog.blueprints.values()].filter((b) => b.kind === 'base' && b.stack === stack);
125
- throw new Error(forStack.length === 0
126
- ? `No base template for stack "${stack}" yet.`
127
- : `No ${stack} base supports the "${architecture}" architecture. ` +
128
- `Bases for this stack: ${forStack.map((b) => b.id).join(', ')}. ` +
129
- `A base opts in through supportsArchitectures in its blueprint.yaml.`);
130
- }
131
- if (bases.length === 1)
132
- return bases[0].id;
133
- const value = await p.select({
134
- message: 'Base template',
135
- options: bases.map((b) => ({ value: b.id, label: b.name, hint: b.description })),
136
- });
137
- assertNotCancelled(value);
138
- return value;
139
- }
140
- /**
141
- * Choice sets are asked first as pick-one (database, ORM, auth provider…), then everything
142
- * else as checkboxes. Presenting exclusive alternatives as checkboxes invites a selection
143
- * the resolver will only reject afterwards.
144
- */
145
- async function pickLayers(catalog, base) {
146
- const baseStack = catalog.blueprints.get(base)?.stack;
147
- const layers = [...catalog.blueprints.values()].filter((b) => b.kind === 'layer' && (!b.stack || b.stack === baseStack));
148
- if (layers.length === 0)
149
- return [];
150
- const selected = [];
151
- const sets = choiceSets(layers);
152
- for (const [setName, options] of [...sets.entries()].sort()) {
153
- const preselected = options.find((o) => o.choiceDefault);
154
- const value = await p.select({
155
- message: `${setName.replace(/-/g, ' ')}`,
156
- initialValue: preselected?.id,
157
- options: [
158
- ...options.map((o) => ({ value: o.id, label: o.name, hint: o.description })),
159
- { value: '', label: 'None', hint: 'skip this' },
160
- ],
161
- });
162
- assertNotCancelled(value);
163
- if (value)
164
- selected.push(value);
165
- }
166
- const rest = layers.filter((l) => !l.choiceSet);
167
- if (rest.length === 0)
168
- return selected;
169
- const extras = await p.multiselect({
170
- message: 'Capabilities',
171
- options: rest.map((l) => ({ value: l.id, label: l.name, hint: l.description })),
172
- required: false,
173
- });
174
- assertNotCancelled(extras);
175
- return [...selected, ...extras];
176
- }
177
- async function pickAdapters(catalog, config) {
178
- const available = [...catalog.adapters.values()];
179
- if (available.length === 0)
180
- return [];
181
- const value = await p.multiselect({
182
- message: 'Which AI coding tools will touch this repo?',
183
- options: available.map((a) => ({
184
- value: a.id,
185
- label: a.name,
186
- hint: a.readsAgentsMd ? 'reads AGENTS.md natively' : 'needs a wrapper file',
187
- })),
188
- initialValues: config.defaultAdapters.filter((id) => catalog.adapters.has(id)),
189
- required: false,
190
- });
191
- assertNotCancelled(value);
192
- return value;
193
- }
194
- /**
195
- * Only asks questions the selected blueprints actually declared, and only those whose `when`
196
- * holds. Skipping the condition asked a .NET user which Python package manager to use, and —
197
- * worse — recorded an answer the templates then rendered as fact.
198
- *
199
- * A skipped variable still takes its declared default, because a template may reference it
200
- * even on a stack that was never asked: the docker layer's compose file names a Dockerfile
201
- * whose suffix only one stack chooses.
202
- */
203
- async function askBlueprintVariables(blueprints, context) {
204
- const answers = {};
205
- const asked = new Set();
206
- const skipped = [];
207
- for (const blueprint of blueprints) {
208
- for (const variable of blueprint.variables) {
209
- if (asked.has(variable.name))
210
- continue;
211
- asked.add(variable.name);
212
- if (!testCondition(variable.when, { ...context, ...answers })) {
213
- skipped.push(variable);
214
- asked.delete(variable.name);
215
- continue;
216
- }
217
- const value = variable.type === 'boolean'
218
- ? await p.confirm({ message: variable.prompt, initialValue: Boolean(variable.default) })
219
- : variable.type === 'select'
220
- ? await p.select({
221
- message: variable.prompt,
222
- options: (variable.choices ?? []).map((c) => ({ value: c.value, label: c.label })),
223
- })
224
- : await p.text({
225
- message: variable.prompt,
226
- defaultValue: variable.default === undefined ? '' : String(variable.default),
227
- });
228
- assertNotCancelled(value);
229
- answers[variable.name] = value;
299
+ if (verify) {
300
+ const failed = await runVerification(selection.stack, target, config);
301
+ if (failed) {
302
+ p.outro(pc.red(`${name} generated, but a check failed. See ${pc.cyan(target)}.`));
303
+ process.exitCode = 1;
304
+ return;
230
305
  }
231
306
  }
232
- // A template may reference a variable this stack was never asked for. Its declared default
233
- // is the right value; leaving it unset would fail generation on an unresolved token.
234
- for (const variable of skipped) {
235
- if (!(variable.name in answers) && variable.default !== undefined) {
236
- answers[variable.name] = variable.default;
307
+ p.outro(`${pc.green('✔')} ${name} ready at ${pc.cyan(target)}`);
308
+ }
309
+ /** Run the stack's own checks against the generated repo; returns true if any failed. */
310
+ async function runVerification(stack, target, config) {
311
+ const checks = verificationPlan(stack, config);
312
+ if (checks.length === 0)
313
+ return false;
314
+ const spinner = p.spinner();
315
+ spinner.start('Verifying');
316
+ const results = await runChecks(target, checks, config, { onProgress: (n) => spinner.message(`Verifying — ${n}`) });
317
+ spinner.stop('Verification');
318
+ let anyFailed = false;
319
+ for (const r of results) {
320
+ if (r.ok)
321
+ p.log.success(`${r.name}: ${r.command}`);
322
+ else {
323
+ anyFailed = true;
324
+ p.log.error(`${r.name} failed: ${r.command}\n${pc.dim(r.output.slice(-800))}`);
237
325
  }
238
326
  }
239
- return answers;
327
+ return anyFailed;
328
+ }
329
+ /* ── output ─────────────────────────────────────────────────────────────────── */
330
+ function printSelection(selection) {
331
+ const pct = Math.round(selection.confidence * 100);
332
+ console.log(`\n${pc.bold('Understood')} ${pc.dim(`— ${pct}% confidence`)}`);
333
+ for (const note of selection.assumptions)
334
+ console.log(` ${pc.green('·')} ${pc.dim(note)}`);
240
335
  }
241
336
  function printPlan(plan) {
242
337
  const byBlueprint = new Map();
@@ -247,8 +342,9 @@ function printPlan(plan) {
247
342
  for (const [blueprint, count] of byBlueprint) {
248
343
  console.log(` ${pc.cyan(blueprint.padEnd(24))} ${pc.dim(`${count} files`)}`);
249
344
  }
250
- if (plan.adapters.length)
345
+ if (plan.adapters.length) {
251
346
  console.log(` ${pc.cyan('ai-tools'.padEnd(24))} ${pc.dim(plan.adapters.join(', '))}`);
347
+ }
252
348
  if (plan.postApply.length) {
253
349
  console.log(`\n${pc.dim('After writing:')}`);
254
350
  for (const step of plan.postApply) {
@@ -257,6 +353,35 @@ function printPlan(plan) {
257
353
  }
258
354
  console.log();
259
355
  }
356
+ function toJson(selection, plan, name, target, gaps) {
357
+ return {
358
+ name,
359
+ target,
360
+ confidence: selection.confidence,
361
+ gaps,
362
+ stack: selection.stack,
363
+ architecture: selection.architecture,
364
+ base: selection.base,
365
+ layers: selection.layers,
366
+ adapters: selection.adapters,
367
+ intent: {
368
+ matched: selection.intent.matched,
369
+ priorities: selection.intent.priorities,
370
+ teamSize: selection.teamSize,
371
+ },
372
+ ranked: selection.ranked.slice(0, 5).map((r) => ({
373
+ id: r.architecture.id,
374
+ name: r.architecture.name,
375
+ fit: Math.round(r.fit * 100) / 100,
376
+ reasons: r.reasons,
377
+ concerns: r.concerns,
378
+ })),
379
+ assumptions: selection.assumptions,
380
+ questions: selection.questions,
381
+ files: plan.files.map((f) => ({ path: f.path, from: f.fromBlueprint })),
382
+ postApply: plan.postApply,
383
+ };
384
+ }
260
385
  function assertNotCancelled(value) {
261
386
  if (p.isCancel(value)) {
262
387
  p.cancel('Cancelled.');
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- import { type Characteristic, type GroundplanConfig, type Stack } from '@groundplan/core';
2
- export interface Answers {
3
- stack: Stack;
4
- teamSize: number;
5
- priorities: Partial<Record<Characteristic, number>>;
6
- family?: 'application' | 'system' | 'frontend' | 'data' | 'ai';
7
- }
8
- export declare function askAnswers(): Promise<Answers>;
1
+ import { type GroundplanConfig } from '@opengroundplan/core';
2
+ /**
3
+ * `groundplan recommend "<brief>"` — rank architectures against a described project, and say
4
+ * why the top one won and why the runners-up did not. No scaffolding, no interview.
5
+ */
9
6
  export declare function cmdRecommend(argv: string[], config: GroundplanConfig): Promise<void>;