@planu/cli 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/engine/challenge-prioritizer.d.ts +17 -0
  2. package/dist/engine/challenge-prioritizer.d.ts.map +1 -0
  3. package/dist/engine/challenge-prioritizer.js +77 -0
  4. package/dist/engine/challenge-prioritizer.js.map +1 -0
  5. package/dist/engine/lifecycle-hints.d.ts +12 -0
  6. package/dist/engine/lifecycle-hints.d.ts.map +1 -0
  7. package/dist/engine/lifecycle-hints.js +79 -0
  8. package/dist/engine/lifecycle-hints.js.map +1 -0
  9. package/dist/tools/challenge-spec.d.ts.map +1 -1
  10. package/dist/tools/challenge-spec.js +13 -1
  11. package/dist/tools/challenge-spec.js.map +1 -1
  12. package/dist/tools/clarify-requirements/multiple-choice.d.ts +30 -0
  13. package/dist/tools/clarify-requirements/multiple-choice.d.ts.map +1 -0
  14. package/dist/tools/clarify-requirements/multiple-choice.js +292 -0
  15. package/dist/tools/clarify-requirements/multiple-choice.js.map +1 -0
  16. package/dist/tools/clarify-requirements.d.ts.map +1 -1
  17. package/dist/tools/clarify-requirements.js +43 -4
  18. package/dist/tools/clarify-requirements.js.map +1 -1
  19. package/dist/tools/resolve-project-id.d.ts +46 -2
  20. package/dist/tools/resolve-project-id.d.ts.map +1 -1
  21. package/dist/tools/resolve-project-id.js +78 -2
  22. package/dist/tools/resolve-project-id.js.map +1 -1
  23. package/dist/tools/resolve-project-path.d.ts +21 -0
  24. package/dist/tools/resolve-project-path.d.ts.map +1 -0
  25. package/dist/tools/resolve-project-path.js +117 -0
  26. package/dist/tools/resolve-project-path.js.map +1 -0
  27. package/dist/tools/update-status/response-builder.d.ts.map +1 -1
  28. package/dist/tools/update-status/response-builder.js +20 -1
  29. package/dist/tools/update-status/response-builder.js.map +1 -1
  30. package/dist/types/analysis.d.ts +7 -0
  31. package/dist/types/analysis.d.ts.map +1 -1
  32. package/dist/types/common/primitives.d.ts +14 -0
  33. package/dist/types/common/primitives.d.ts.map +1 -1
  34. package/dist/types/cross-repo-search.d.ts +29 -0
  35. package/dist/types/cross-repo-search.d.ts.map +1 -1
  36. package/dist/types/spec/clarification.d.ts +8 -0
  37. package/dist/types/spec/clarification.d.ts.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import type { FailureScenario, PrioritizedScenario, Spec } from '../types/index.js';
2
+ /**
3
+ * Compute a relevance score (0-100) for a scenario given the spec's type and target.
4
+ * Formula: base = probability * impact (0-1), boosted by keyword match (up to +30 points).
5
+ */
6
+ export declare function computeRelevanceScore(scenario: FailureScenario, spec: Spec): number;
7
+ /**
8
+ * Given a list of failure scenarios, assign relevanceScore to each and return
9
+ * the top-3 ranked by score descending.
10
+ * Always returns exactly 3 items (or fewer if scenarios has < 3 entries).
11
+ */
12
+ export declare function prioritizeScenarios(scenarios: FailureScenario[], spec: Spec): PrioritizedScenario[];
13
+ /**
14
+ * Build the "must address" summary prefix that leads with the top-3 scenarios.
15
+ */
16
+ export declare function buildPrioritizedSummary(top3: PrioritizedScenario[]): string;
17
+ //# sourceMappingURL=challenge-prioritizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"challenge-prioritizer.d.ts","sourceRoot":"","sources":["../../src/engine/challenge-prioritizer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAkCpF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAkBnF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,eAAe,EAAE,EAC5B,IAAI,EAAE,IAAI,GACT,mBAAmB,EAAE,CAYvB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAO3E"}
@@ -0,0 +1,77 @@
1
+ // engine/challenge-prioritizer.ts — SPEC-338
2
+ // Ranks failure scenarios by relevance to the specific spec type/target
3
+ // and selects the top-3 most critical ones.
4
+ // --- Probability weight map (0-1) ---
5
+ const PROBABILITY_WEIGHT = {
6
+ low: 0.25,
7
+ medium: 0.55,
8
+ high: 1.0,
9
+ };
10
+ // --- Impact weight map (0-1) ---
11
+ const IMPACT_WEIGHT = {
12
+ low: 0.1,
13
+ medium: 0.35,
14
+ high: 0.65,
15
+ critical: 1.0,
16
+ };
17
+ /** Keywords that boost relevance when they appear in the scenario text. */
18
+ const SPEC_TYPE_KEYWORDS = {
19
+ feature: ['data', 'user', 'input', 'validation', 'state'],
20
+ bugfix: ['regression', 'edge case', 'null', 'undefined', 'race'],
21
+ refactor: ['interface', 'contract', 'compatibility', 'migration', 'deprecat'],
22
+ architecture: ['coupling', 'blast radius', 'rollback', 'migration', 'service'],
23
+ spike: ['timeout', 'external', 'rate limit', 'api', 'latency'],
24
+ };
25
+ const SPEC_TARGET_KEYWORDS = {
26
+ backend: ['database', 'concurrency', 'transaction', 'queue', 'retry'],
27
+ frontend: ['render', 'state', 'ux', 'loading', 'offline'],
28
+ fullstack: ['sync', 'consistency', 'cache', 'session', 'race'],
29
+ mobile: ['offline', 'battery', 'network', 'crash', 'permission'],
30
+ infrastructure: ['deployment', 'rollback', 'network', 'config', 'secret'],
31
+ };
32
+ /**
33
+ * Compute a relevance score (0-100) for a scenario given the spec's type and target.
34
+ * Formula: base = probability * impact (0-1), boosted by keyword match (up to +30 points).
35
+ */
36
+ export function computeRelevanceScore(scenario, spec) {
37
+ const probWeight = PROBABILITY_WEIGHT[scenario.probability];
38
+ const impactWeight = IMPACT_WEIGHT[scenario.impact];
39
+ // Base score: probability * impact, scaled to 0-70
40
+ const base = probWeight * impactWeight * 70;
41
+ // Keyword boost: up to +30
42
+ const lower = scenario.scenario.toLowerCase();
43
+ const typeKeywords = SPEC_TYPE_KEYWORDS[spec.type] ?? [];
44
+ const targetKeywords = SPEC_TARGET_KEYWORDS[spec.target] ?? [];
45
+ const allKeywords = [...typeKeywords, ...targetKeywords];
46
+ const matchCount = allKeywords.filter((kw) => lower.includes(kw)).length;
47
+ const maxKeywords = Math.max(allKeywords.length, 1);
48
+ const boost = (matchCount / maxKeywords) * 30;
49
+ return Math.round(Math.min(base + boost, 100));
50
+ }
51
+ /**
52
+ * Given a list of failure scenarios, assign relevanceScore to each and return
53
+ * the top-3 ranked by score descending.
54
+ * Always returns exactly 3 items (or fewer if scenarios has < 3 entries).
55
+ */
56
+ export function prioritizeScenarios(scenarios, spec) {
57
+ const scored = scenarios.map((s) => ({
58
+ ...s,
59
+ relevanceScore: computeRelevanceScore(s, spec),
60
+ }));
61
+ scored.sort((a, b) => b.relevanceScore - a.relevanceScore);
62
+ return scored.slice(0, 3).map((s, idx) => ({
63
+ ...s,
64
+ rank: idx + 1,
65
+ }));
66
+ }
67
+ /**
68
+ * Build the "must address" summary prefix that leads with the top-3 scenarios.
69
+ */
70
+ export function buildPrioritizedSummary(top3) {
71
+ if (top3.length === 0) {
72
+ return '';
73
+ }
74
+ const lines = top3.map((s) => `${s.rank}. ${s.scenario}`);
75
+ return `Here are the 3 things you MUST address before coding:\n${lines.join('\n')}`;
76
+ }
77
+ //# sourceMappingURL=challenge-prioritizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"challenge-prioritizer.js","sourceRoot":"","sources":["../../src/engine/challenge-prioritizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { SpecStatus, NextAction, LifecycleMap } from '../types/index.js';
2
+ /**
3
+ * Returns the guided next action for a given status transition.
4
+ * The hint targets the *newStatus* reached, guiding what to do from there.
5
+ */
6
+ export declare function buildNextAction(newStatus: SpecStatus): NextAction;
7
+ /**
8
+ * Returns the lifecycle map for the given current status.
9
+ * Shows where the spec is, what's next, and what remains.
10
+ */
11
+ export declare function buildLifecycleMap(currentStatus: SpecStatus): LifecycleMap;
12
+ //# sourceMappingURL=lifecycle-hints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-hints.d.ts","sourceRoot":"","sources":["../../src/engine/lifecycle-hints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuC9E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAYjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,UAAU,GAAG,YAAY,CA0BzE"}
@@ -0,0 +1,79 @@
1
+ /** Forward lifecycle order excluding terminal states */
2
+ const LIFECYCLE_STAGES = ['draft', 'review', 'approved', 'implementing', 'done'];
3
+ /** Maps each forward transition to a guided next action */
4
+ const NEXT_ACTION_MAP = {
5
+ review: {
6
+ step: 'Get approval',
7
+ prompt: "Share this plan with your team or just tell me 'approved' to move forward",
8
+ suggestedCommand: 'update_status(approved)',
9
+ whenToDoIt: "When you're happy with the plan",
10
+ },
11
+ approved: {
12
+ step: 'Create your git branch',
13
+ prompt: 'Run: git checkout -b feat/<spec-slug>',
14
+ suggestedCommand: 'manage_git(branch)',
15
+ whenToDoIt: 'Before writing any code',
16
+ },
17
+ implementing: {
18
+ step: 'Start coding',
19
+ prompt: 'Implement the spec following the technical plan',
20
+ suggestedCommand: 'validate(specId)',
21
+ whenToDoIt: 'While developing',
22
+ },
23
+ done: {
24
+ step: 'Validate your implementation',
25
+ prompt: 'Run validate to check that your code matches the spec',
26
+ suggestedCommand: 'validate(specId)',
27
+ whenToDoIt: 'After all tests pass',
28
+ },
29
+ discarded: {
30
+ step: 'Archive or delete spec',
31
+ prompt: 'This spec has been discarded. You can delete it or keep it for reference.',
32
+ suggestedCommand: 'delete_spec(specId)',
33
+ whenToDoIt: 'When cleanup is needed',
34
+ },
35
+ };
36
+ /**
37
+ * Returns the guided next action for a given status transition.
38
+ * The hint targets the *newStatus* reached, guiding what to do from there.
39
+ */
40
+ export function buildNextAction(newStatus) {
41
+ const hint = NEXT_ACTION_MAP[newStatus];
42
+ if (hint !== undefined) {
43
+ return hint;
44
+ }
45
+ // Fallback for any unrecognised status
46
+ return {
47
+ step: 'Continue',
48
+ prompt: `Spec is now ${newStatus}. Check Planu for next steps.`,
49
+ suggestedCommand: 'list_specs()',
50
+ whenToDoIt: 'When ready',
51
+ };
52
+ }
53
+ /**
54
+ * Returns the lifecycle map for the given current status.
55
+ * Shows where the spec is, what's next, and what remains.
56
+ */
57
+ export function buildLifecycleMap(currentStatus) {
58
+ const currentIdx = LIFECYCLE_STAGES.indexOf(currentStatus);
59
+ if (currentIdx === -1) {
60
+ // Terminal state (discarded) or unknown — show full chain as completed/irrelevant
61
+ return {
62
+ stages: LIFECYCLE_STAGES,
63
+ current: currentStatus,
64
+ next: null,
65
+ remaining: [],
66
+ };
67
+ }
68
+ const nextStatus = currentIdx < LIFECYCLE_STAGES.length - 1
69
+ ? (LIFECYCLE_STAGES[currentIdx + 1] ?? null)
70
+ : null;
71
+ const remaining = LIFECYCLE_STAGES.slice(currentIdx + 2);
72
+ return {
73
+ stages: LIFECYCLE_STAGES,
74
+ current: currentStatus,
75
+ next: nextStatus,
76
+ remaining,
77
+ };
78
+ }
79
+ //# sourceMappingURL=lifecycle-hints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-hints.js","sourceRoot":"","sources":["../../src/engine/lifecycle-hints.ts"],"names":[],"mappings":"AAGA,wDAAwD;AACxD,MAAM,gBAAgB,GAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AAE/F,2DAA2D;AAC3D,MAAM,eAAe,GAA4C;IAC/D,MAAM,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,2EAA2E;QACnF,gBAAgB,EAAE,yBAAyB;QAC3C,UAAU,EAAE,iCAAiC;KAC9C;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,uCAAuC;QAC/C,gBAAgB,EAAE,oBAAoB;QACtC,UAAU,EAAE,yBAAyB;KACtC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,iDAAiD;QACzD,gBAAgB,EAAE,kBAAkB;QACpC,UAAU,EAAE,kBAAkB;KAC/B;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,uDAAuD;QAC/D,gBAAgB,EAAE,kBAAkB;QACpC,UAAU,EAAE,sBAAsB;KACnC;IACD,SAAS,EAAE;QACT,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,2EAA2E;QACnF,gBAAgB,EAAE,qBAAqB;QACvC,UAAU,EAAE,wBAAwB;KACrC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAqB;IACnD,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,uCAAuC;IACvC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,eAAe,SAAS,+BAA+B;QAC/D,gBAAgB,EAAE,cAAc;QAChC,UAAU,EAAE,YAAY;KACzB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAyB;IACzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAE3D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,kFAAkF;QAClF,OAAO;YACL,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GACd,UAAU,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACtC,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;QAC5C,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAEzD,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,UAAU;QAChB,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"challenge-spec.d.ts","sourceRoot":"","sources":["../../src/tools/challenge-spec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAIlB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAqC3B,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoKvF"}
1
+ {"version":3,"file":"challenge-spec.d.ts","sourceRoot":"","sources":["../../src/tools/challenge-spec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAIlB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAsC3B,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiLvF"}
@@ -5,6 +5,7 @@ import { specStore, knowledgeStore } from '../storage/index.js';
5
5
  import { t, ti } from '../i18n/index.js';
6
6
  import { generateFailureScenarios, generateSecurityScenarios, generateScaleScenarios, generateDataConsistencyScenarios, generateGameChallenges, generateDesktopAutoUpdateChallenges, } from './challenge-spec-scenarios.js';
7
7
  import { generateConcurrencyAnalysis, buildScalabilityAssessment, calculateOverallRisk, readSpecContent, } from './challenge-spec-helpers.js';
8
+ import { prioritizeScenarios, buildPrioritizedSummary } from '../engine/challenge-prioritizer.js';
8
9
  import { generateAgentChallengeScenarios, isAgentSpec, } from './challenge-spec/agent-challenge-scenarios.js';
9
10
  import { getPlatformChallenges } from './challenge-spec/platform-challenge-scenarios.js';
10
11
  import { generateSecurityChallengeScenarios } from './challenge-spec/security-challenge-scenarios.js';
@@ -102,8 +103,16 @@ export async function handleChallengeSpec(args) {
102
103
  const scalabilityAssessment = buildScalabilityAssessment(spec, knowledge, failureScenarios);
103
104
  // 8. Calculate overall risk
104
105
  const overallRisk = calculateOverallRisk(failureScenarios, concurrencyAnalysis);
106
+ // 9. Compute relevance scores and select top-3 (SPEC-338)
107
+ const prioritized = prioritizeScenarios(failureScenarios, spec);
108
+ const prioritizedSummary = buildPrioritizedSummary(prioritized);
109
+ // Attach relevanceScore to each scenario in the full list
110
+ const failureScenariosScored = failureScenarios.map((s) => {
111
+ const match = prioritized.find((p) => p.scenario === s.scenario);
112
+ return match !== undefined ? { ...s, relevanceScore: match.relevanceScore } : s;
113
+ });
105
114
  const analysis = {
106
- failureScenarios,
115
+ failureScenarios: failureScenariosScored,
107
116
  concurrencyAnalysis,
108
117
  scalabilityAssessment,
109
118
  overallRisk,
@@ -120,8 +129,11 @@ export async function handleChallengeSpec(args) {
120
129
  type: 'text',
121
130
  text: JSON.stringify({
122
131
  ...analysis,
132
+ prioritized,
123
133
  summary: {
124
134
  totalScenarios: failureScenarios.length,
135
+ shownByDefault: 3,
136
+ mustAddressBeforeCoding: prioritizedSummary,
125
137
  criticalImpact: failureScenarios.filter((s) => s.impact === 'critical').length,
126
138
  highImpact: failureScenarios.filter((s) => s.impact === 'high').length,
127
139
  raceConditions: concurrencyAnalysis.raceConditions.length,
@@ -1 +1 @@
1
- {"version":3,"file":"challenge-spec.js","sourceRoot":"","sources":["../../src/tools/challenge-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"challenge-spec.js","sourceRoot":"","sources":["../../src/tools/challenge-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ClarificationQuestion } from '../../types/index.js';
2
+ /** Detected stack info from package files in the project directory. */
3
+ export interface StackDetectionResult {
4
+ framework: string | null;
5
+ language: string | null;
6
+ database: string | null;
7
+ /** Raw names found in package.json dependencies */
8
+ detectedLibs: string[];
9
+ }
10
+ /**
11
+ * Detect the project stack by reading package.json and/or requirements.txt
12
+ * from the given project path.
13
+ */
14
+ export declare function detectStack(projectPath: string): Promise<StackDetectionResult>;
15
+ /**
16
+ * Returns true if the question should be skipped because the stack already
17
+ * provides a definitive answer.
18
+ */
19
+ export declare function shouldSkipQuestion(question: ClarificationQuestion, stack: StackDetectionResult): boolean;
20
+ /**
21
+ * Attaches structured `options[]` to a question based on its content.
22
+ * Each question gets 3-8 concrete choices + 'Other: ___' fallback.
23
+ */
24
+ export declare function attachOptions(question: ClarificationQuestion): ClarificationQuestion;
25
+ /**
26
+ * Builds a `suggestedDescription` string from accumulated answers.
27
+ * The returned string is suitable for passing directly to create_spec.
28
+ */
29
+ export declare function buildSuggestedDescription(topic: string, answers: Record<string, string>, questions: ClarificationQuestion[]): string;
30
+ //# sourceMappingURL=multiple-choice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple-choice.d.ts","sourceRoot":"","sources":["../../../src/tools/clarify-requirements/multiple-choice.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mDAAmD;IACnD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA4FD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoGpF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAYT;AASD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,qBAAqB,GAAG,qBAAqB,CAwDpF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,SAAS,EAAE,qBAAqB,EAAE,GACjC,MAAM,CAgBR"}
@@ -0,0 +1,292 @@
1
+ // tools/clarify-requirements/multiple-choice.ts — SPEC-337
2
+ // Structured multiple-choice options for clarify_requirements interview mode.
3
+ // Provides: per-question options[], stack detection, suggestedDescription builder.
4
+ import { readFile } from 'node:fs/promises';
5
+ import { join } from 'node:path';
6
+ const OPTIONS_CATALOG = {
7
+ stack_frontend: [
8
+ 'Next.js',
9
+ 'Remix',
10
+ 'Nuxt',
11
+ 'SvelteKit',
12
+ 'Astro',
13
+ 'Vite + React',
14
+ 'Angular',
15
+ 'Other: ___',
16
+ ],
17
+ stack_backend: [
18
+ 'Express',
19
+ 'Fastify',
20
+ 'NestJS',
21
+ 'Hono',
22
+ 'FastAPI',
23
+ 'Django',
24
+ 'Spring Boot',
25
+ 'Other: ___',
26
+ ],
27
+ stack_database: [
28
+ 'PostgreSQL',
29
+ 'MySQL',
30
+ 'SQLite',
31
+ 'MongoDB',
32
+ 'Redis',
33
+ 'Supabase',
34
+ 'PlanetScale',
35
+ 'Other: ___',
36
+ ],
37
+ stack_language: ['TypeScript', 'JavaScript', 'Python', 'Go', 'Java', 'Rust', 'Other: ___'],
38
+ auth_method: [
39
+ 'Email + password',
40
+ 'Google OAuth',
41
+ 'GitHub OAuth',
42
+ 'Magic link',
43
+ 'JWT (custom)',
44
+ 'Session-based',
45
+ 'API key',
46
+ 'Other: ___',
47
+ ],
48
+ scope_type: ['New feature', 'Improvement to existing', 'Bug fix', 'Refactor', 'Other: ___'],
49
+ user_type: ['End user', 'Admin', 'Developer / internal', 'All users', 'Other: ___'],
50
+ mvp_scope: [
51
+ 'Core happy path only',
52
+ 'Happy path + error handling',
53
+ 'Full feature with edge cases',
54
+ 'MVP first, iterate later',
55
+ 'Other: ___',
56
+ ],
57
+ performance_target: [
58
+ '< 100ms (real-time)',
59
+ '< 500ms (interactive)',
60
+ '< 2s (acceptable)',
61
+ 'No strict SLA',
62
+ 'Other: ___',
63
+ ],
64
+ ui_mockup: [
65
+ 'Yes, Figma mockup available',
66
+ 'Rough sketch only',
67
+ 'No mockup — describe in text',
68
+ 'Other: ___',
69
+ ],
70
+ login_method: [
71
+ 'Email/password',
72
+ 'Google',
73
+ 'Apple',
74
+ 'Magic link',
75
+ 'GitHub',
76
+ 'SSO / SAML',
77
+ 'Other: ___',
78
+ ],
79
+ };
80
+ /**
81
+ * Detect the project stack by reading package.json and/or requirements.txt
82
+ * from the given project path.
83
+ */
84
+ export async function detectStack(projectPath) {
85
+ const result = {
86
+ framework: null,
87
+ language: null,
88
+ database: null,
89
+ detectedLibs: [],
90
+ };
91
+ try {
92
+ const pkgRaw = await readFile(join(projectPath, 'package.json'), 'utf-8');
93
+ const pkg = JSON.parse(pkgRaw);
94
+ const allDeps = {
95
+ ...(pkg.dependencies ?? {}),
96
+ ...(pkg.devDependencies ?? {}),
97
+ };
98
+ const libs = Object.keys(allDeps);
99
+ result.detectedLibs = libs;
100
+ // Framework detection
101
+ if (libs.includes('next')) {
102
+ result.framework = 'Next.js';
103
+ }
104
+ else if (libs.includes('@remix-run/react') || libs.includes('@remix-run/node')) {
105
+ result.framework = 'Remix';
106
+ }
107
+ else if (libs.includes('nuxt')) {
108
+ result.framework = 'Nuxt';
109
+ }
110
+ else if (libs.includes('@sveltejs/kit')) {
111
+ result.framework = 'SvelteKit';
112
+ }
113
+ else if (libs.includes('astro')) {
114
+ result.framework = 'Astro';
115
+ }
116
+ else if (libs.includes('fastify')) {
117
+ result.framework = 'Fastify';
118
+ }
119
+ else if (libs.includes('@nestjs/core')) {
120
+ result.framework = 'NestJS';
121
+ }
122
+ else if (libs.includes('express')) {
123
+ result.framework = 'Express';
124
+ }
125
+ else if (libs.includes('hono')) {
126
+ result.framework = 'Hono';
127
+ }
128
+ // Language (TypeScript presence)
129
+ if (libs.includes('typescript') || libs.includes('ts-node') || libs.includes('tsx')) {
130
+ result.language = 'TypeScript';
131
+ }
132
+ else {
133
+ result.language = 'JavaScript';
134
+ }
135
+ // Database detection
136
+ if (libs.includes('pg') || libs.includes('postgres')) {
137
+ result.database = 'PostgreSQL';
138
+ }
139
+ else if (libs.includes('mysql2') || libs.includes('mysql')) {
140
+ result.database = 'MySQL';
141
+ }
142
+ else if (libs.includes('better-sqlite3') || libs.includes('sqlite3')) {
143
+ result.database = 'SQLite';
144
+ }
145
+ else if (libs.includes('mongoose') || libs.includes('mongodb')) {
146
+ result.database = 'MongoDB';
147
+ }
148
+ else if (libs.includes('@supabase/supabase-js')) {
149
+ result.database = 'Supabase';
150
+ }
151
+ else if (libs.includes('ioredis') || libs.includes('redis')) {
152
+ result.database = 'Redis';
153
+ }
154
+ }
155
+ catch {
156
+ // No package.json — try requirements.txt for Python
157
+ try {
158
+ const reqRaw = await readFile(join(projectPath, 'requirements.txt'), 'utf-8');
159
+ const lines = reqRaw
160
+ .split('\n')
161
+ .map((l) => (l.split('=')[0] ?? l).split('>')[0]?.split('<')[0]?.trim().toLowerCase() ?? '');
162
+ result.detectedLibs = lines.filter(Boolean);
163
+ if (lines.includes('django') || lines.includes('django-rest-framework')) {
164
+ result.framework = 'Django';
165
+ result.language = 'Python';
166
+ }
167
+ else if (lines.includes('fastapi')) {
168
+ result.framework = 'FastAPI';
169
+ result.language = 'Python';
170
+ }
171
+ else if (lines.includes('flask')) {
172
+ result.framework = 'Flask';
173
+ result.language = 'Python';
174
+ }
175
+ else {
176
+ result.language = 'Python';
177
+ }
178
+ if (lines.includes('psycopg2') || lines.includes('psycopg2-binary')) {
179
+ result.database = 'PostgreSQL';
180
+ }
181
+ else if (lines.includes('pymysql') || lines.includes('mysql-connector-python')) {
182
+ result.database = 'MySQL';
183
+ }
184
+ else if (lines.includes('motor') || lines.includes('pymongo')) {
185
+ result.database = 'MongoDB';
186
+ }
187
+ }
188
+ catch {
189
+ // No manifest files found — detection yields nulls
190
+ }
191
+ }
192
+ return result;
193
+ }
194
+ /**
195
+ * Returns true if the question should be skipped because the stack already
196
+ * provides a definitive answer.
197
+ */
198
+ export function shouldSkipQuestion(question, stack) {
199
+ const lower = question.question.toLowerCase();
200
+ if ((lower.includes('stack') || lower.includes('framework') || lower.includes('language')) &&
201
+ (stack.framework !== null || stack.language !== null)) {
202
+ return true;
203
+ }
204
+ if (lower.includes('database') && stack.database !== null) {
205
+ return true;
206
+ }
207
+ return false;
208
+ }
209
+ /**
210
+ * Resolves option list from a catalog key.
211
+ */
212
+ function resolveOptions(key) {
213
+ return OPTIONS_CATALOG[key];
214
+ }
215
+ /**
216
+ * Attaches structured `options[]` to a question based on its content.
217
+ * Each question gets 3-8 concrete choices + 'Other: ___' fallback.
218
+ */
219
+ export function attachOptions(question) {
220
+ const lower = question.question.toLowerCase();
221
+ let options;
222
+ if (lower.includes('login') || lower.includes('sign in') || lower.includes('sign up')) {
223
+ options = resolveOptions('login_method');
224
+ }
225
+ else if (lower.includes('auth')) {
226
+ options = resolveOptions('auth_method');
227
+ }
228
+ else if (lower.includes('frontend') || lower.includes('ui framework')) {
229
+ options = resolveOptions('stack_frontend');
230
+ }
231
+ else if (lower.includes('backend') || lower.includes('server framework')) {
232
+ options = resolveOptions('stack_backend');
233
+ }
234
+ else if (lower.includes('database') || lower.includes('db')) {
235
+ options = resolveOptions('stack_database');
236
+ }
237
+ else if (lower.includes('stack') || lower.includes('framework') || lower.includes('language')) {
238
+ options = resolveOptions('stack_language');
239
+ }
240
+ else if (lower.includes('new feature') ||
241
+ lower.includes('improvement') ||
242
+ lower.includes('feature or')) {
243
+ options = resolveOptions('scope_type');
244
+ }
245
+ else if (lower.includes('user') &&
246
+ (lower.includes('who') || lower.includes('primary') || lower.includes('persona'))) {
247
+ options = resolveOptions('user_type');
248
+ }
249
+ else if (lower.includes('must-have') ||
250
+ lower.includes('minimum viable') ||
251
+ lower.includes('mvp') ||
252
+ lower.includes('first version')) {
253
+ options = resolveOptions('mvp_scope');
254
+ }
255
+ else if (lower.includes('performance') ||
256
+ lower.includes('response time') ||
257
+ lower.includes('latency')) {
258
+ options = resolveOptions('performance_target');
259
+ }
260
+ else if (lower.includes('mockup') ||
261
+ lower.includes('design') ||
262
+ lower.includes('reference design')) {
263
+ options = resolveOptions('ui_mockup');
264
+ }
265
+ else if (lower.includes('scope') && lower.includes('done')) {
266
+ options = resolveOptions('mvp_scope');
267
+ }
268
+ if (options === undefined) {
269
+ return question;
270
+ }
271
+ return { ...question, options };
272
+ }
273
+ /**
274
+ * Builds a `suggestedDescription` string from accumulated answers.
275
+ * The returned string is suitable for passing directly to create_spec.
276
+ */
277
+ export function buildSuggestedDescription(topic, answers, questions) {
278
+ const parts = [`Feature: ${topic}.`];
279
+ for (const q of questions) {
280
+ const answer = answers[q.id];
281
+ if (answer === undefined || answer.trim() === '') {
282
+ continue;
283
+ }
284
+ const trimmedAnswer = answer.trim();
285
+ const shortQuestion = q.question
286
+ .replace(/^(What|Who|Is|Are|Does|Do|How|Which)\s+/i, '')
287
+ .replace(/\?$/, '');
288
+ parts.push(`${shortQuestion}: ${trimmedAnswer}.`);
289
+ }
290
+ return parts.join(' ');
291
+ }
292
+ //# sourceMappingURL=multiple-choice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple-choice.js","sourceRoot":"","sources":["../../../src/tools/clarify-requirements/multiple-choice.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"clarify-requirements.d.ts","sourceRoot":"","sources":["../../src/tools/clarify-requirements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EAGxB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAyF3B,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,UAAU,CAAC,CA2FrB"}
1
+ {"version":3,"file":"clarify-requirements.d.ts","sourceRoot":"","sources":["../../src/tools/clarify-requirements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EAGxB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAwG3B,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,UAAU,CAAC,CA4HrB"}