@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.
- package/dist/engine/challenge-prioritizer.d.ts +17 -0
- package/dist/engine/challenge-prioritizer.d.ts.map +1 -0
- package/dist/engine/challenge-prioritizer.js +77 -0
- package/dist/engine/challenge-prioritizer.js.map +1 -0
- package/dist/engine/lifecycle-hints.d.ts +12 -0
- package/dist/engine/lifecycle-hints.d.ts.map +1 -0
- package/dist/engine/lifecycle-hints.js +79 -0
- package/dist/engine/lifecycle-hints.js.map +1 -0
- package/dist/tools/challenge-spec.d.ts.map +1 -1
- package/dist/tools/challenge-spec.js +13 -1
- package/dist/tools/challenge-spec.js.map +1 -1
- package/dist/tools/clarify-requirements/multiple-choice.d.ts +30 -0
- package/dist/tools/clarify-requirements/multiple-choice.d.ts.map +1 -0
- package/dist/tools/clarify-requirements/multiple-choice.js +292 -0
- package/dist/tools/clarify-requirements/multiple-choice.js.map +1 -0
- package/dist/tools/clarify-requirements.d.ts.map +1 -1
- package/dist/tools/clarify-requirements.js +43 -4
- package/dist/tools/clarify-requirements.js.map +1 -1
- package/dist/tools/resolve-project-id.d.ts +46 -2
- package/dist/tools/resolve-project-id.d.ts.map +1 -1
- package/dist/tools/resolve-project-id.js +78 -2
- package/dist/tools/resolve-project-id.js.map +1 -1
- package/dist/tools/resolve-project-path.d.ts +21 -0
- package/dist/tools/resolve-project-path.d.ts.map +1 -0
- package/dist/tools/resolve-project-path.js +117 -0
- package/dist/tools/resolve-project-path.js.map +1 -0
- package/dist/tools/update-status/response-builder.d.ts.map +1 -1
- package/dist/tools/update-status/response-builder.js +20 -1
- package/dist/tools/update-status/response-builder.js.map +1 -1
- package/dist/types/analysis.d.ts +7 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/common/primitives.d.ts +14 -0
- package/dist/types/common/primitives.d.ts.map +1 -1
- package/dist/types/cross-repo-search.d.ts +29 -0
- package/dist/types/cross-repo-search.d.ts.map +1 -1
- package/dist/types/spec/clarification.d.ts +8 -0
- package/dist/types/spec/clarification.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ import { knowledgeStore } from '../storage/index.js';
|
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
4
|
import { isShortTopic, generateMetaQuestions, detectContradictions, buildSuggestedAnswers, } from './clarify-requirements/questions.js';
|
|
5
5
|
import { generateQuestions } from './clarify-requirements/questions-context.js';
|
|
6
|
+
import { detectStack, shouldSkipQuestion, attachOptions, buildSuggestedDescription, } from './clarify-requirements/multiple-choice.js';
|
|
6
7
|
/** Resume an existing clarification session with new answers. */
|
|
7
8
|
async function handleResumeSession(projectId, sessionId, newAnswers, knowledge) {
|
|
8
9
|
const existing = await knowledgeStore.getClarification(projectId, sessionId).catch(() => null);
|
|
@@ -32,6 +33,9 @@ async function handleResumeSession(projectId, sessionId, newAnswers, knowledge)
|
|
|
32
33
|
...q,
|
|
33
34
|
suggestedAnswers: q.suggestedAnswers ?? buildSuggestedAnswers(q, knowledge),
|
|
34
35
|
}));
|
|
36
|
+
const suggestedDescription = specReady
|
|
37
|
+
? buildSuggestedDescription(existing.topic, mergedAnswers, enriched)
|
|
38
|
+
: undefined;
|
|
35
39
|
const updated = {
|
|
36
40
|
...existing,
|
|
37
41
|
questions: enriched,
|
|
@@ -39,11 +43,14 @@ async function handleResumeSession(projectId, sessionId, newAnswers, knowledge)
|
|
|
39
43
|
isComplete: specReady,
|
|
40
44
|
contradictions: contradictions.length > 0 ? contradictions : undefined,
|
|
41
45
|
specReady,
|
|
46
|
+
interviewMode: 'multiple-choice',
|
|
47
|
+
...(suggestedDescription !== undefined ? { suggestedDescription } : {}),
|
|
42
48
|
};
|
|
43
49
|
await knowledgeStore.addClarification(projectId, updated);
|
|
44
50
|
const result = {
|
|
45
51
|
sessionId: existing.id,
|
|
46
52
|
topic: existing.topic,
|
|
53
|
+
interviewMode: 'multiple-choice',
|
|
47
54
|
questionsCount: existing.questions.length,
|
|
48
55
|
questions: enriched.map((q) => ({
|
|
49
56
|
id: q.id,
|
|
@@ -51,9 +58,12 @@ async function handleResumeSession(projectId, sessionId, newAnswers, knowledge)
|
|
|
51
58
|
category: q.category,
|
|
52
59
|
importance: q.importance,
|
|
53
60
|
suggestedAnswers: q.suggestedAnswers,
|
|
61
|
+
options: q.options,
|
|
62
|
+
skipped: q.skipped,
|
|
54
63
|
answered: mergedAnswers[q.id] !== undefined,
|
|
55
64
|
})),
|
|
56
65
|
specReady,
|
|
66
|
+
...(suggestedDescription !== undefined ? { suggestedDescription } : {}),
|
|
57
67
|
answeredCount: Object.keys(mergedAnswers).length,
|
|
58
68
|
...(contradictions.length > 0
|
|
59
69
|
? {
|
|
@@ -86,31 +96,57 @@ export async function handleClarifyRequirements(params) {
|
|
|
86
96
|
// Generate main clarification questions (cap total at maxQuestions)
|
|
87
97
|
const mainMaxQ = Math.max(1, maxQuestions - metaQuestions.length);
|
|
88
98
|
const mainQuestions = generateQuestions(topic, context, knowledge, mainMaxQ);
|
|
89
|
-
const
|
|
90
|
-
//
|
|
91
|
-
const
|
|
99
|
+
const rawQuestions = [...metaQuestions, ...mainQuestions].slice(0, maxQuestions);
|
|
100
|
+
// Detect project stack for auto-skip and option filtering (SPEC-337)
|
|
101
|
+
const projectPath = knowledge?.projectPath ?? '';
|
|
102
|
+
const stack = projectPath !== ''
|
|
103
|
+
? await detectStack(projectPath).catch(() => ({
|
|
104
|
+
framework: null,
|
|
105
|
+
language: null,
|
|
106
|
+
database: null,
|
|
107
|
+
detectedLibs: [],
|
|
108
|
+
}))
|
|
109
|
+
: { framework: null, language: null, database: null, detectedLibs: [] };
|
|
110
|
+
// Apply multiple-choice options + mark skipped questions (SPEC-337)
|
|
111
|
+
const questions = rawQuestions.map((q) => {
|
|
112
|
+
const withOptions = attachOptions(q);
|
|
113
|
+
const skipped = shouldSkipQuestion(q, stack);
|
|
114
|
+
return skipped ? { ...withOptions, skipped: true } : withOptions;
|
|
115
|
+
});
|
|
116
|
+
// Determine if spec is ready (all non-skipped critical questions have non-empty answers)
|
|
117
|
+
const criticalIds = questions
|
|
118
|
+
.filter((q) => q.importance === 'critical' && q.skipped !== true)
|
|
119
|
+
.map((q) => q.id);
|
|
92
120
|
const specReady = answers !== undefined &&
|
|
93
121
|
criticalIds.every((id) => {
|
|
94
122
|
const ans = answers[id];
|
|
95
123
|
return ans !== undefined && ans.trim() !== '';
|
|
96
124
|
});
|
|
125
|
+
// Build suggestedDescription when spec is ready (SPEC-337)
|
|
126
|
+
const currentAnswers = answers ?? {};
|
|
127
|
+
const suggestedDescription = specReady
|
|
128
|
+
? buildSuggestedDescription(topic, currentAnswers, questions)
|
|
129
|
+
: undefined;
|
|
97
130
|
// Create a clarification session
|
|
98
131
|
const session = {
|
|
99
132
|
id: randomUUID().slice(0, 8),
|
|
100
133
|
projectId,
|
|
101
134
|
topic,
|
|
102
135
|
questions,
|
|
103
|
-
answers:
|
|
136
|
+
answers: currentAnswers,
|
|
104
137
|
isComplete: specReady,
|
|
105
138
|
createdAt: new Date().toISOString(),
|
|
106
139
|
contradictions: contradictions.length > 0 ? contradictions : undefined,
|
|
107
140
|
specReady,
|
|
141
|
+
interviewMode: 'multiple-choice',
|
|
142
|
+
...(suggestedDescription !== undefined ? { suggestedDescription } : {}),
|
|
108
143
|
};
|
|
109
144
|
// Persist the session
|
|
110
145
|
await knowledgeStore.addClarification(projectId, session);
|
|
111
146
|
const result = {
|
|
112
147
|
sessionId: session.id,
|
|
113
148
|
topic,
|
|
149
|
+
interviewMode: 'multiple-choice',
|
|
114
150
|
questionsCount: questions.length,
|
|
115
151
|
hasMetaQuestions: metaQuestions.length > 0,
|
|
116
152
|
questions: questions.map((q) => ({
|
|
@@ -121,8 +157,11 @@ export async function handleClarifyRequirements(params) {
|
|
|
121
157
|
suggestedAnswer: q.suggestedAnswer,
|
|
122
158
|
/* v8 ignore next 1 */
|
|
123
159
|
suggestedAnswers: q.suggestedAnswers ?? [],
|
|
160
|
+
options: q.options,
|
|
161
|
+
skipped: q.skipped,
|
|
124
162
|
})),
|
|
125
163
|
specReady,
|
|
164
|
+
...(suggestedDescription !== undefined ? { suggestedDescription } : {}),
|
|
126
165
|
instructions: specReady
|
|
127
166
|
? 'All critical questions answered. Call create_spec with clarificationSessionId to create a precise spec.'
|
|
128
167
|
: 'Answer the questions above, then call create_spec with the gathered context. You can skip nice-to-have questions if the user does not have strong opinions.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clarify-requirements.js","sourceRoot":"","sources":["../../src/tools/clarify-requirements.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"clarify-requirements.js","sourceRoot":"","sources":["../../src/tools/clarify-requirements.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,yBAAyB,GAC1B,MAAM,2CAA2C,CAAC;AAEnD,iEAAiE;AACjE,KAAK,UAAU,mBAAmB,CAChC,SAAiB,EACjB,SAAiB,EACjB,UAAkC,EAClC,SAAkE;IAElE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,KAAK,EAAE,YAAY,SAAS,qFAAqF;qBAClH,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IAC7D,MAAM,cAAc,GAClB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,GAAG,CAAC;QACJ,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,qBAAqB,CAAC,CAAC,EAAE,SAAS,CAAC;KAC5E,CAAC,CAAC,CAAC;IACJ,MAAM,oBAAoB,GAAG,SAAS;QACpC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC;QACpE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAyB;QACpC,GAAG,QAAQ;QACX,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QACtE,SAAS;QACT,aAAa,EAAE,iBAAiB;QAChC,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;IACF,MAAM,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,QAAQ,CAAC,EAAE;QACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,aAAa,EAAE,iBAAiB;QAChC,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;QACzC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS;SAC5C,CAAC,CAAC;QACH,SAAS;QACT,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM;QAChD,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC;gBACE,cAAc;gBACd,oBAAoB,EAClB,sEAAsE;aACzE;YACH,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,SAAS;YACrB,CAAC,CAAC,gFAAgF;YAClF,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,kCAAkC;QAC1H,OAAO,EAAE,oBAAoB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,YAAY;KACxG,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAgC;IAEhC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEnF,IAAI,CAAC;QACH,sGAAsG;QACtG,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEjF,gDAAgD;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,MAAM,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;QACnF,CAAC;QAED,qDAAqD;QACrD,MAAM,cAAc,GAClB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAElF,yDAAyD;QACzD,MAAM,aAAa,GAA4B,YAAY,CAAC,KAAK,CAAC;YAChE,CAAC,CAAC,qBAAqB,EAAE;YACzB,CAAC,CAAC,EAAE,CAAC;QAEP,oEAAoE;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAEjF,qEAAqE;QACrE,MAAM,WAAW,GAAG,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC;QACjD,MAAM,KAAK,GACT,WAAW,KAAK,EAAE;YAChB,CAAC,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC1C,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,EAAE;aACjB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAE5E,oEAAoE;QACpE,MAAM,SAAS,GAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAChE,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,yFAAyF;QACzF,MAAM,WAAW,GAAG,SAAS;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;aAChE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,SAAS,GACb,OAAO,KAAK,SAAS;YACrB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;gBACvB,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxB,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAChD,CAAC,CAAC,CAAC;QAEL,2DAA2D;QAC3D,MAAM,cAAc,GAAG,OAAO,IAAI,EAAE,CAAC;QACrC,MAAM,oBAAoB,GAAG,SAAS;YACpC,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC;YAC7D,CAAC,CAAC,SAAS,CAAC;QAEd,iCAAiC;QACjC,MAAM,OAAO,GAAyB;YACpC,EAAE,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,cAAc,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACtE,SAAS;YACT,aAAa,EAAE,iBAAiB;YAChC,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;QAEF,sBAAsB;QACtB,MAAM,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,MAAM,GAA4B;YACtC,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,KAAK;YACL,aAAa,EAAE,iBAAiB;YAChC,cAAc,EAAE,SAAS,CAAC,MAAM;YAChC,gBAAgB,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;YAC1C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,eAAe,EAAE,CAAC,CAAC,eAAe;gBAClC,sBAAsB;gBACtB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,EAAE;gBAC1C,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,SAAS;YACT,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,YAAY,EAAE,SAAS;gBACrB,CAAC,CAAC,yGAAyG;gBAC3G,CAAC,CAAC,6JAA6J;YACjK,OAAO,EAAE,EAAE,CAAC,oCAAoC,EAAE;gBAChD,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC/B,KAAK;aACN,CAAC;SACH,CAAC;QAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;YACvC,MAAM,CAAC,oBAAoB;gBACzB,6FAA6F,CAAC;QAClG,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,13 +1,57 @@
|
|
|
1
|
-
import type { ToolResult } from '../types/index.js';
|
|
1
|
+
import type { ToolResult, RegisteredProjectSummary } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Resolve projectId from either projectId or projectPath.
|
|
4
4
|
* projectPath takes precedence when both are provided.
|
|
5
5
|
* Returns null when neither is provided.
|
|
6
|
+
*
|
|
7
|
+
* This is the SYNC fast path for callers that always have an explicit param.
|
|
8
|
+
* For zero-config auto-detection use resolveProjectIdOrAutoDetect().
|
|
6
9
|
*/
|
|
7
10
|
export declare function resolveProjectId(params: {
|
|
8
11
|
projectId?: string;
|
|
9
12
|
projectPath?: string;
|
|
10
13
|
}): string | null;
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Result returned by resolveProjectIdOrAutoDetect.
|
|
16
|
+
* On success: { ok: true, projectId, projectPath, autoDetected }
|
|
17
|
+
* On failure: { ok: false, errorResult } ā return errorResult directly to the caller.
|
|
18
|
+
*/
|
|
19
|
+
export type ResolveResult = {
|
|
20
|
+
ok: true;
|
|
21
|
+
projectId: string;
|
|
22
|
+
projectPath: string;
|
|
23
|
+
autoDetected: boolean;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
errorResult: ToolResult;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a projectId with full zero-config auto-detection (SPEC-341).
|
|
30
|
+
*
|
|
31
|
+
* Falls back to PLANU_PROJECT_PATH env var and the global project registry
|
|
32
|
+
* when neither projectId nor projectPath is passed explicitly.
|
|
33
|
+
*
|
|
34
|
+
* Returns a discriminated union so callers can early-return on failure:
|
|
35
|
+
*
|
|
36
|
+
* ```ts
|
|
37
|
+
* const resolved = await resolveProjectIdOrAutoDetect(params);
|
|
38
|
+
* if (!resolved.ok) return resolved.errorResult;
|
|
39
|
+
* const { projectId, projectPath, autoDetected } = resolved;
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveProjectIdOrAutoDetect(params: {
|
|
43
|
+
projectId?: string;
|
|
44
|
+
projectPath?: string;
|
|
45
|
+
}): Promise<ResolveResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Build a ToolResult error for the "missing project" case.
|
|
48
|
+
* Includes a registeredProjects[] list so the user can see their options.
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildMissingProjectError(registeredProjects: RegisteredProjectSummary[]): ToolResult;
|
|
51
|
+
/**
|
|
52
|
+
* Build a ToolResult error for the "ambiguous project" case (multiple registered).
|
|
53
|
+
* Lists all known projects with their id + path so the user can pick one.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildAmbiguousProjectError(registeredProjects: RegisteredProjectSummary[]): ToolResult;
|
|
12
56
|
export declare const missingProjectIdError: ToolResult;
|
|
13
57
|
//# sourceMappingURL=resolve-project-id.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-project-id.d.ts","sourceRoot":"","sources":["../../src/tools/resolve-project-id.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-project-id.d.ts","sourceRoot":"","sources":["../../src/tools/resolve-project-id.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE9E;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,GAAG,IAAI,CAQhB;AAMD;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GAC3E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwBzB;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,kBAAkB,EAAE,wBAAwB,EAAE,GAC7C,UAAU,CASZ;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,kBAAkB,EAAE,wBAAwB,EAAE,GAC7C,UAAU,CAUZ;AAKD,eAAO,MAAM,qBAAqB,EAAE,UAQnC,CAAC"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
// tools/resolve-project-id.ts ā Shared
|
|
1
|
+
// tools/resolve-project-id.ts ā Shared helpers for project resolution
|
|
2
|
+
//
|
|
3
|
+
// SPEC-304: resolveProjectId (sync, fast ā for callers that always have a path/id)
|
|
4
|
+
// SPEC-341: resolveProjectIdOrAutoDetect (async ā zero-config auto-detection)
|
|
5
|
+
// buildMissingProjectError (async ā includes registeredProjects list)
|
|
2
6
|
import { hashProjectPath } from '../storage/base-store.js';
|
|
7
|
+
import { resolveProjectPath } from './resolve-project-path.js';
|
|
3
8
|
/**
|
|
4
9
|
* Resolve projectId from either projectId or projectPath.
|
|
5
10
|
* projectPath takes precedence when both are provided.
|
|
6
11
|
* Returns null when neither is provided.
|
|
12
|
+
*
|
|
13
|
+
* This is the SYNC fast path for callers that always have an explicit param.
|
|
14
|
+
* For zero-config auto-detection use resolveProjectIdOrAutoDetect().
|
|
7
15
|
*/
|
|
8
16
|
export function resolveProjectId(params) {
|
|
9
17
|
if (params.projectPath?.trim()) {
|
|
@@ -14,7 +22,75 @@ export function resolveProjectId(params) {
|
|
|
14
22
|
}
|
|
15
23
|
return null;
|
|
16
24
|
}
|
|
17
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a projectId with full zero-config auto-detection (SPEC-341).
|
|
27
|
+
*
|
|
28
|
+
* Falls back to PLANU_PROJECT_PATH env var and the global project registry
|
|
29
|
+
* when neither projectId nor projectPath is passed explicitly.
|
|
30
|
+
*
|
|
31
|
+
* Returns a discriminated union so callers can early-return on failure:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const resolved = await resolveProjectIdOrAutoDetect(params);
|
|
35
|
+
* if (!resolved.ok) return resolved.errorResult;
|
|
36
|
+
* const { projectId, projectPath, autoDetected } = resolved;
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export async function resolveProjectIdOrAutoDetect(params) {
|
|
40
|
+
const result = await resolveProjectPath(params);
|
|
41
|
+
switch (result.kind) {
|
|
42
|
+
case 'resolved':
|
|
43
|
+
return {
|
|
44
|
+
ok: true,
|
|
45
|
+
projectId: result.projectId,
|
|
46
|
+
projectPath: result.projectPath,
|
|
47
|
+
autoDetected: result.autoDetected,
|
|
48
|
+
};
|
|
49
|
+
case 'ambiguous':
|
|
50
|
+
return {
|
|
51
|
+
ok: false,
|
|
52
|
+
errorResult: buildAmbiguousProjectError(result.registeredProjects),
|
|
53
|
+
};
|
|
54
|
+
case 'missing':
|
|
55
|
+
return {
|
|
56
|
+
ok: false,
|
|
57
|
+
errorResult: buildMissingProjectError(result.registeredProjects),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Error builders
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
/**
|
|
65
|
+
* Build a ToolResult error for the "missing project" case.
|
|
66
|
+
* Includes a registeredProjects[] list so the user can see their options.
|
|
67
|
+
*/
|
|
68
|
+
export function buildMissingProjectError(registeredProjects) {
|
|
69
|
+
const hint = 'Provide projectPath to identify the project. Example: { "projectPath": "/path/to/your/project" }';
|
|
70
|
+
const content = [{ type: 'text', text: hint }];
|
|
71
|
+
return {
|
|
72
|
+
content,
|
|
73
|
+
isError: true,
|
|
74
|
+
registeredProjects,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build a ToolResult error for the "ambiguous project" case (multiple registered).
|
|
79
|
+
* Lists all known projects with their id + path so the user can pick one.
|
|
80
|
+
*/
|
|
81
|
+
export function buildAmbiguousProjectError(registeredProjects) {
|
|
82
|
+
const lines = registeredProjects.map((p) => ` ⢠${p.name} path: "${p.path}" id: "${p.id}"`);
|
|
83
|
+
const text = `Multiple projects are registered. Pass projectPath or projectId to select one:\n` +
|
|
84
|
+
lines.join('\n');
|
|
85
|
+
return {
|
|
86
|
+
content: [{ type: 'text', text }],
|
|
87
|
+
isError: true,
|
|
88
|
+
registeredProjects,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Static error result for backwards-compatibility.
|
|
92
|
+
// Prefer buildMissingProjectError() when registeredProjects data is available.
|
|
93
|
+
// New code should use resolveProjectIdOrAutoDetect() + its built-in error instead.
|
|
18
94
|
export const missingProjectIdError = {
|
|
19
95
|
content: [
|
|
20
96
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-project-id.js","sourceRoot":"","sources":["../../src/tools/resolve-project-id.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"resolve-project-id.js","sourceRoot":"","sources":["../../src/tools/resolve-project-id.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,mFAAmF;AACnF,8EAA8E;AAC9E,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAGhC;IACC,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAeD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,MAGlD;IACC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,0BAA0B,CAAC,MAAM,CAAC,kBAAkB,CAAC;aACnE,CAAC;QAEJ,KAAK,SAAS;YACZ,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,wBAAwB,CAAC,MAAM,CAAC,kBAAkB,CAAC;aACjE,CAAC;IACN,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,kBAA8C;IAE9C,MAAM,IAAI,GACR,kGAAkG,CAAC;IACrG,MAAM,OAAO,GAA0B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO;QACL,OAAO;QACP,OAAO,EAAE,IAAI;QACb,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,kBAA8C;IAE9C,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/F,MAAM,IAAI,GACR,kFAAkF;QAClF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI;QACb,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,+EAA+E;AAC/E,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAe;IAC/C,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,+GAA+G;SACtH;KACF;IACD,OAAO,EAAE,IAAI;CACd,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ProjectAutoDetectResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Attempt to resolve a projectId + projectPath from the provided inputs.
|
|
4
|
+
*
|
|
5
|
+
* When the caller passes `projectPath` or `projectId` explicitly, this
|
|
6
|
+
* function returns immediately without hitting the filesystem.
|
|
7
|
+
*
|
|
8
|
+
* When neither is provided it falls back to:
|
|
9
|
+
* 1. `PLANU_PROJECT_PATH` env var
|
|
10
|
+
* 2. Single registered project in the global registry
|
|
11
|
+
* 3. Ambiguous / missing error with the full registered-project list
|
|
12
|
+
*
|
|
13
|
+
* @param params.projectId - Optional explicit project hash
|
|
14
|
+
* @param params.projectPath - Optional explicit absolute path
|
|
15
|
+
* @returns ProjectAutoDetectResult discriminated union
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveProjectPath(params: {
|
|
18
|
+
projectId?: string;
|
|
19
|
+
projectPath?: string;
|
|
20
|
+
}): Promise<ProjectAutoDetectResult>;
|
|
21
|
+
//# sourceMappingURL=resolve-project-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-project-path.d.ts","sourceRoot":"","sources":["../../src/tools/resolve-project-path.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAA4B,MAAM,mBAAmB,CAAC;AA8B3F;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAqEnC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// tools/resolve-project-path.ts ā SPEC-341: Zero-config auto-detect projectPath.
|
|
2
|
+
//
|
|
3
|
+
// Priority order:
|
|
4
|
+
// 1. Explicit projectPath or projectId passed by the caller (fastest path, no I/O)
|
|
5
|
+
// 2. PLANU_PROJECT_PATH environment variable
|
|
6
|
+
// 3. Single registered project in the global registry (auto-detect)
|
|
7
|
+
// 4. Multiple registered projects ā ambiguous error with list
|
|
8
|
+
// 5. No registered projects ā missing error
|
|
9
|
+
//
|
|
10
|
+
// This module is intentionally side-effect-free: it reads the global registry
|
|
11
|
+
// and the env var but never mutates any state.
|
|
12
|
+
import { hashProjectPath } from '../storage/base-store.js';
|
|
13
|
+
import { getProjects } from '../storage/global-projects-store.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Helpers
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Derive a human-readable project name from its absolute path.
|
|
19
|
+
* Uses the last non-empty path segment (the directory name).
|
|
20
|
+
*/
|
|
21
|
+
function projectNameFromPath(projectPath) {
|
|
22
|
+
const parts = projectPath.replace(/\\/g, '/').split('/').filter(Boolean);
|
|
23
|
+
return parts[parts.length - 1] ?? projectPath;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert a RegisteredProject entry into a compact summary for error responses.
|
|
27
|
+
*/
|
|
28
|
+
function toSummary(p) {
|
|
29
|
+
return {
|
|
30
|
+
id: p.hash,
|
|
31
|
+
path: p.path,
|
|
32
|
+
name: projectNameFromPath(p.path),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Public API
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Attempt to resolve a projectId + projectPath from the provided inputs.
|
|
40
|
+
*
|
|
41
|
+
* When the caller passes `projectPath` or `projectId` explicitly, this
|
|
42
|
+
* function returns immediately without hitting the filesystem.
|
|
43
|
+
*
|
|
44
|
+
* When neither is provided it falls back to:
|
|
45
|
+
* 1. `PLANU_PROJECT_PATH` env var
|
|
46
|
+
* 2. Single registered project in the global registry
|
|
47
|
+
* 3. Ambiguous / missing error with the full registered-project list
|
|
48
|
+
*
|
|
49
|
+
* @param params.projectId - Optional explicit project hash
|
|
50
|
+
* @param params.projectPath - Optional explicit absolute path
|
|
51
|
+
* @returns ProjectAutoDetectResult discriminated union
|
|
52
|
+
*/
|
|
53
|
+
export async function resolveProjectPath(params) {
|
|
54
|
+
// 1. Explicit projectPath ā highest priority
|
|
55
|
+
const explicitPath = params.projectPath?.trim();
|
|
56
|
+
if (explicitPath) {
|
|
57
|
+
return {
|
|
58
|
+
kind: 'resolved',
|
|
59
|
+
projectId: hashProjectPath(explicitPath),
|
|
60
|
+
projectPath: explicitPath,
|
|
61
|
+
autoDetected: false,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// 2. Explicit projectId ā second priority
|
|
65
|
+
const explicitId = params.projectId?.trim();
|
|
66
|
+
if (explicitId) {
|
|
67
|
+
// We only have the hash, not the original path.
|
|
68
|
+
// Return a resolved result with an empty projectPath so callers that only
|
|
69
|
+
// need the projectId can still proceed. Callers that need projectPath will
|
|
70
|
+
// fall back to reading knowledge from the store (existing behavior).
|
|
71
|
+
return {
|
|
72
|
+
kind: 'resolved',
|
|
73
|
+
projectId: explicitId,
|
|
74
|
+
projectPath: '',
|
|
75
|
+
autoDetected: false,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// 3. PLANU_PROJECT_PATH environment variable
|
|
79
|
+
const envPath = process.env.PLANU_PROJECT_PATH?.trim();
|
|
80
|
+
if (envPath) {
|
|
81
|
+
return {
|
|
82
|
+
kind: 'resolved',
|
|
83
|
+
projectId: hashProjectPath(envPath),
|
|
84
|
+
projectPath: envPath,
|
|
85
|
+
autoDetected: true,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// 4. Global registry lookup
|
|
89
|
+
let projects;
|
|
90
|
+
try {
|
|
91
|
+
projects = await getProjects();
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Registry unreadable ā treat as missing
|
|
95
|
+
projects = [];
|
|
96
|
+
}
|
|
97
|
+
if (projects.length === 1) {
|
|
98
|
+
// Exactly one registered project ā auto-use it
|
|
99
|
+
const only = projects[0];
|
|
100
|
+
/* v8 ignore next 3 */
|
|
101
|
+
if (only === undefined) {
|
|
102
|
+
return { kind: 'missing', registeredProjects: [] };
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
kind: 'resolved',
|
|
106
|
+
projectId: only.hash,
|
|
107
|
+
projectPath: only.path,
|
|
108
|
+
autoDetected: true,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const summaries = projects.map(toSummary);
|
|
112
|
+
if (projects.length > 1) {
|
|
113
|
+
return { kind: 'ambiguous', registeredProjects: summaries };
|
|
114
|
+
}
|
|
115
|
+
return { kind: 'missing', registeredProjects: [] };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=resolve-project-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-project-path.js","sourceRoot":"","sources":["../../src/tools/resolve-project-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-builder.d.ts","sourceRoot":"","sources":["../../../src/tools/update-status/response-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"response-builder.d.ts","sourceRoot":"","sources":["../../../src/tools/update-status/response-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAA4B,MAAM,sBAAsB,CAAC;AAK7F,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOpD,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,UAAU,EACzB,SAAS,EAAE,UAAU,EACrB,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,EACtC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B,UAAU,CAgGZ"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { t } from '../../i18n/index.js';
|
|
2
2
|
import { formatSuccess, addNextSteps } from '../response-helpers.js';
|
|
3
|
+
import { buildNextAction, buildLifecycleMap } from '../../engine/lifecycle-hints.js';
|
|
3
4
|
export const STATUS_EMOJIS = {
|
|
4
5
|
draft: 'š',
|
|
5
6
|
review: 'š',
|
|
@@ -58,6 +59,11 @@ export function buildStatusResponse(result, specId, currentStatus, newStatus, re
|
|
|
58
59
|
if (recordActualHint) {
|
|
59
60
|
lines.push(`\nš” ${recordActualHint}`);
|
|
60
61
|
}
|
|
62
|
+
// SPEC-340: nextAction and lifecycleMap
|
|
63
|
+
const nextAction = buildNextAction(newStatus);
|
|
64
|
+
const lifecycleMap = buildLifecycleMap(newStatus);
|
|
65
|
+
lines.push(buildLifecycleMapLine(lifecycleMap));
|
|
66
|
+
lines.push(`\n**Next step:** ${nextAction.step}\n> ${nextAction.prompt}\n> \`${nextAction.suggestedCommand}\` ā ${nextAction.whenToDoIt}`);
|
|
61
67
|
const allNextSteps = [...(r.implementingSuggestions ?? [])];
|
|
62
68
|
const baseText = formatSuccess(t('tools.response.statusTitle'), lines.join(''));
|
|
63
69
|
const withNextSteps = allNextSteps.length > 0 ? addNextSteps(baseText, allNextSteps) : baseText;
|
|
@@ -66,7 +72,20 @@ export function buildStatusResponse(result, specId, currentStatus, newStatus, re
|
|
|
66
72
|
: withNextSteps;
|
|
67
73
|
return {
|
|
68
74
|
content: [{ type: 'text', text: markdownText }],
|
|
69
|
-
structuredContent: result,
|
|
75
|
+
structuredContent: { ...result, nextAction, lifecycleMap },
|
|
70
76
|
};
|
|
71
77
|
}
|
|
78
|
+
/** Render a compact lifecycle map line showing current, next, and remaining steps */
|
|
79
|
+
function buildLifecycleMapLine(map) {
|
|
80
|
+
const parts = map.stages.map((stage) => {
|
|
81
|
+
if (stage === map.current) {
|
|
82
|
+
return `**[${stage}]**`;
|
|
83
|
+
}
|
|
84
|
+
if (map.remaining.includes(stage) || stage === map.next) {
|
|
85
|
+
return stage;
|
|
86
|
+
}
|
|
87
|
+
return `~~${stage}~~`;
|
|
88
|
+
});
|
|
89
|
+
return `\nš ${parts.join(' ā ')}`;
|
|
90
|
+
}
|
|
72
91
|
//# sourceMappingURL=response-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-builder.js","sourceRoot":"","sources":["../../../src/tools/update-status/response-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"response-builder.js","sourceRoot":"","sources":["../../../src/tools/update-status/response-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/types/analysis.d.ts
CHANGED
|
@@ -13,6 +13,13 @@ export interface FailureScenario {
|
|
|
13
13
|
requiredHandling: string;
|
|
14
14
|
dataConsistency: string;
|
|
15
15
|
userExperience: string;
|
|
16
|
+
/** Relevance score 0-100 relative to the spec's type and target. SPEC-338. */
|
|
17
|
+
relevanceScore?: number;
|
|
18
|
+
}
|
|
19
|
+
/** Top-3 prioritized scenarios for the spec. SPEC-338. */
|
|
20
|
+
export interface PrioritizedScenario extends FailureScenario {
|
|
21
|
+
relevanceScore: number;
|
|
22
|
+
rank: number;
|
|
16
23
|
}
|
|
17
24
|
export interface ConcurrencyAnalysis {
|
|
18
25
|
hotPaths: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/types/analysis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/types/analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,4 +25,18 @@ export interface NodeError extends Error {
|
|
|
25
25
|
}
|
|
26
26
|
export type TemplateMap = Record<string, Record<string, unknown>>;
|
|
27
27
|
export type PricingMap = Record<string, Record<string, number>>;
|
|
28
|
+
/** SPEC-340: Guided next action after a status transition */
|
|
29
|
+
export interface NextAction {
|
|
30
|
+
step: string;
|
|
31
|
+
prompt: string;
|
|
32
|
+
suggestedCommand: string;
|
|
33
|
+
whenToDoIt: string;
|
|
34
|
+
}
|
|
35
|
+
/** SPEC-340: Lifecycle map showing position and remaining steps */
|
|
36
|
+
export interface LifecycleMap {
|
|
37
|
+
stages: SpecStatus[];
|
|
38
|
+
current: SpecStatus;
|
|
39
|
+
next: SpecStatus | null;
|
|
40
|
+
remaining: SpecStatus[];
|
|
41
|
+
}
|
|
28
42
|
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/types/common/primitives.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,MAAM,GAAG,WAAW,CAAC;AACjG,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;AAErE,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAKxD,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,OAAO,GACP,WAAW,CAAC;AAChB,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,eAAe,CAAC;AACjF,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,gBAAgB,GAChB,UAAU,GACV,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAE5E,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,WAAW,GACX,eAAe,GACf,WAAW,GACX,WAAW,GACX,cAAc,GACd,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/types/common/primitives.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,MAAM,GAAG,WAAW,CAAC;AACjG,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;AAErE,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAKxD,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,OAAO,GACP,WAAW,CAAC;AAChB,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,eAAe,CAAC;AACjF,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,gBAAgB,GAChB,UAAU,GACV,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAE5E,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,WAAW,GACX,eAAe,GACf,WAAW,GACX,WAAW,GACX,cAAc,GACd,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhE,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB"}
|