mcp-spec-cli 1.0.9 → 1.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.
Files changed (68) hide show
  1. package/api/spec-workflow.openapi.yaml +31 -23
  2. package/dist/cli.js +25 -14
  3. package/dist/cli.js.map +1 -1
  4. package/dist/features/shared/MarkdownTaskUpdater.d.ts +14 -0
  5. package/dist/features/shared/MarkdownTaskUpdater.d.ts.map +1 -0
  6. package/dist/features/shared/MarkdownTaskUpdater.js +75 -0
  7. package/dist/features/shared/MarkdownTaskUpdater.js.map +1 -0
  8. package/dist/features/shared/SpecManager.d.ts +4 -1
  9. package/dist/features/shared/SpecManager.d.ts.map +1 -1
  10. package/dist/features/shared/SpecManager.js +16 -16
  11. package/dist/features/shared/SpecManager.js.map +1 -1
  12. package/dist/features/shared/TaskGuidanceRepository.d.ts +36 -0
  13. package/dist/features/shared/TaskGuidanceRepository.d.ts.map +1 -0
  14. package/dist/features/shared/TaskGuidanceRepository.js +23 -0
  15. package/dist/features/shared/TaskGuidanceRepository.js.map +1 -0
  16. package/dist/features/shared/TaskLexer.d.ts +18 -0
  17. package/dist/features/shared/TaskLexer.d.ts.map +1 -0
  18. package/dist/features/shared/TaskLexer.js +60 -0
  19. package/dist/features/shared/TaskLexer.js.map +1 -0
  20. package/dist/features/shared/TemplateRepository.d.ts +14 -0
  21. package/dist/features/shared/TemplateRepository.d.ts.map +1 -0
  22. package/dist/features/shared/TemplateRepository.js +40 -0
  23. package/dist/features/shared/TemplateRepository.js.map +1 -0
  24. package/dist/features/shared/WorkflowStateRepository.d.ts +18 -0
  25. package/dist/features/shared/WorkflowStateRepository.d.ts.map +1 -0
  26. package/dist/features/shared/WorkflowStateRepository.js +30 -0
  27. package/dist/features/shared/WorkflowStateRepository.js.map +1 -0
  28. package/dist/features/shared/markdownTaskUpdater.d.ts +14 -0
  29. package/dist/features/shared/markdownTaskUpdater.d.ts.map +1 -0
  30. package/dist/features/shared/markdownTaskUpdater.js +75 -0
  31. package/dist/features/shared/markdownTaskUpdater.js.map +1 -0
  32. package/dist/features/shared/openApiLoader.d.ts +37 -42
  33. package/dist/features/shared/openApiLoader.d.ts.map +1 -1
  34. package/dist/features/shared/openApiLoader.js +13 -127
  35. package/dist/features/shared/openApiLoader.js.map +1 -1
  36. package/dist/features/shared/taskGuidanceRepository.d.ts +36 -0
  37. package/dist/features/shared/taskGuidanceRepository.d.ts.map +1 -0
  38. package/dist/features/shared/taskGuidanceRepository.js +23 -0
  39. package/dist/features/shared/taskGuidanceRepository.js.map +1 -0
  40. package/dist/features/shared/taskLexer.d.ts +18 -0
  41. package/dist/features/shared/taskLexer.d.ts.map +1 -0
  42. package/dist/features/shared/taskLexer.js +66 -0
  43. package/dist/features/shared/taskLexer.js.map +1 -0
  44. package/dist/features/shared/taskParser.d.ts +32 -13
  45. package/dist/features/shared/taskParser.d.ts.map +1 -1
  46. package/dist/features/shared/taskParser.js +72 -240
  47. package/dist/features/shared/taskParser.js.map +1 -1
  48. package/dist/features/shared/templateRepository.d.ts +14 -0
  49. package/dist/features/shared/templateRepository.d.ts.map +1 -0
  50. package/dist/features/shared/templateRepository.js +40 -0
  51. package/dist/features/shared/templateRepository.js.map +1 -0
  52. package/dist/features/shared/workflowStateRepository.d.ts +18 -0
  53. package/dist/features/shared/workflowStateRepository.d.ts.map +1 -0
  54. package/dist/features/shared/workflowStateRepository.js +30 -0
  55. package/dist/features/shared/workflowStateRepository.js.map +1 -0
  56. package/dist/features/task/TaskGuidancePresenter.d.ts +20 -0
  57. package/dist/features/task/TaskGuidancePresenter.d.ts.map +1 -0
  58. package/dist/features/task/TaskGuidancePresenter.js +84 -0
  59. package/dist/features/task/TaskGuidancePresenter.js.map +1 -0
  60. package/dist/features/task/completeTask.d.ts +3 -3
  61. package/dist/features/task/completeTask.d.ts.map +1 -1
  62. package/dist/features/task/completeTask.js +63 -309
  63. package/dist/features/task/completeTask.js.map +1 -1
  64. package/dist/features/task/taskGuidancePresenter.d.ts +20 -0
  65. package/dist/features/task/taskGuidancePresenter.d.ts.map +1 -0
  66. package/dist/features/task/taskGuidancePresenter.js +84 -0
  67. package/dist/features/task/taskGuidancePresenter.js.map +1 -0
  68. package/package.json +4 -4
@@ -0,0 +1,60 @@
1
+ import { lexer } from 'marked';
2
+ /**
3
+ * TaskLexer uses 'marked' to extract relevant task tokens and their line numbers.
4
+ */
5
+ export class TaskLexer {
6
+ /**
7
+ * Lexes the markdown content into a stream of task-related tokens.
8
+ */
9
+ static lex(content) {
10
+ const tokens = lexer(content);
11
+ const taskTokens = [];
12
+ const lines = content.split('\n');
13
+ const findLineNumber = (raw, startFrom) => {
14
+ for (let i = startFrom; i < lines.length; i++) {
15
+ if (lines[i].includes(raw.split('\n')[0].trim())) {
16
+ return i + 1;
17
+ }
18
+ }
19
+ return -1;
20
+ };
21
+ let currentLine = 0;
22
+ const processTokens = (tokens) => {
23
+ for (const token of tokens) {
24
+ if (token.type === 'heading') {
25
+ const line = findLineNumber(token.raw, currentLine);
26
+ if (line !== -1) {
27
+ taskTokens.push({
28
+ type: 'heading',
29
+ text: token.text,
30
+ depth: token.depth,
31
+ raw: token.raw,
32
+ line
33
+ });
34
+ currentLine = line;
35
+ }
36
+ }
37
+ else if (token.type === 'list_item') {
38
+ const line = findLineNumber(token.raw, currentLine);
39
+ if (line !== -1) {
40
+ taskTokens.push({
41
+ type: 'list_item',
42
+ text: token.text,
43
+ checked: token.checked,
44
+ raw: token.raw,
45
+ line
46
+ });
47
+ currentLine = line;
48
+ }
49
+ }
50
+ // Recursively process tokens if any (for nested lists)
51
+ if ('tokens' in token && token.tokens) {
52
+ processTokens(token.tokens);
53
+ }
54
+ }
55
+ };
56
+ processTokens(tokens);
57
+ return taskTokens;
58
+ }
59
+ }
60
+ //# sourceMappingURL=TaskLexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskLexer.js","sourceRoot":"","sources":["../../../src/features/shared/TaskLexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAS,MAAM,QAAQ,CAAC;AAWtC;;GAEG;AACH,MAAM,OAAO,SAAS;IACpB;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAe;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,SAAiB,EAAU,EAAE;YAChE,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC;QAEF,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,aAAa,GAAG,CAAC,MAAe,EAAE,EAAE;YACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;oBACpD,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;wBAChB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,GAAG,EAAE,KAAK,CAAC,GAAG;4BACd,IAAI;yBACL,CAAC,CAAC;wBACH,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;oBACpD,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;wBAChB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,WAAW;4BACjB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,GAAG,EAAE,KAAK,CAAC,GAAG;4BACd,IAAI;yBACL,CAAC,CAAC;wBACH,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAED,uDAAuD;gBACvD,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACtC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TemplateRepository manages document templates from the OpenAPI spec.
3
+ */
4
+ export declare class TemplateRepository {
5
+ /**
6
+ * Gets a document template by stage and interpolates variables.
7
+ */
8
+ static getInterpolatedTemplate(stage: 'requirements' | 'design' | 'tasks' | 'skipped', variables: Record<string, any>): string;
9
+ /**
10
+ * Internal formatter for document templates.
11
+ */
12
+ private static formatTemplate;
13
+ }
14
+ //# sourceMappingURL=TemplateRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateRepository.d.ts","sourceRoot":"","sources":["../../../src/features/shared/TemplateRepository.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAU9H;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAqB9B"}
@@ -0,0 +1,40 @@
1
+ import { openApiLoader, OpenApiLoader } from './openApiLoader.js';
2
+ /**
3
+ * TemplateRepository manages document templates from the OpenAPI spec.
4
+ */
5
+ export class TemplateRepository {
6
+ /**
7
+ * Gets a document template by stage and interpolates variables.
8
+ */
9
+ static getInterpolatedTemplate(stage, variables) {
10
+ openApiLoader.loadSpec();
11
+ const template = openApiLoader.getDocumentTemplate(stage);
12
+ if (!template) {
13
+ throw new Error(`Template not found for stage: ${stage}`);
14
+ }
15
+ return this.formatTemplate(template, variables);
16
+ }
17
+ /**
18
+ * Internal formatter for document templates.
19
+ */
20
+ static formatTemplate(template, values) {
21
+ const lines = [];
22
+ if (template.title) {
23
+ lines.push(`# ${OpenApiLoader.replaceVariables(template.title, values)}`);
24
+ lines.push('');
25
+ }
26
+ if (Array.isArray(template.sections)) {
27
+ for (const section of template.sections) {
28
+ if (section.content) {
29
+ lines.push(OpenApiLoader.replaceVariables(section.content, values));
30
+ }
31
+ else if (section.placeholder) {
32
+ lines.push(section.placeholder);
33
+ }
34
+ lines.push('');
35
+ }
36
+ }
37
+ return lines.join('\n').trim();
38
+ }
39
+ }
40
+ //# sourceMappingURL=TemplateRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateRepository.js","sourceRoot":"","sources":["../../../src/features/shared/TemplateRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAsD,EAAE,SAA8B;QACnH,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,QAAa,EAAE,MAA2B;QACtE,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtE,CAAC;qBAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAClC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * WorkflowStateRepository manages progress rules, stage names, and file mapping.
3
+ */
4
+ export declare class WorkflowStateRepository {
5
+ /**
6
+ * Gets the display name for a given stage.
7
+ */
8
+ static getStageDisplayName(stage: string): string;
9
+ /**
10
+ * Gets the file name associated with a stage.
11
+ */
12
+ static getStageFileName(stage: string): string;
13
+ /**
14
+ * Calculates overall progress based on the state of each stage.
15
+ */
16
+ static calculateOverallProgress(requirementsStatus: number, designStatus: number, tasksStatus: number): number;
17
+ }
18
+ //# sourceMappingURL=WorkflowStateRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowStateRepository.d.ts","sourceRoot":"","sources":["../../../src/features/shared/WorkflowStateRepository.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAMjD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAM9C;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAI/G"}
@@ -0,0 +1,30 @@
1
+ import { openApiLoader } from './openApiLoader.js';
2
+ /**
3
+ * WorkflowStateRepository manages progress rules, stage names, and file mapping.
4
+ */
5
+ export class WorkflowStateRepository {
6
+ /**
7
+ * Gets the display name for a given stage.
8
+ */
9
+ static getStageDisplayName(stage) {
10
+ openApiLoader.loadSpec();
11
+ const stageNames = openApiLoader.getStageNames();
12
+ return stageNames[stage] || stage;
13
+ }
14
+ /**
15
+ * Gets the file name associated with a stage.
16
+ */
17
+ static getStageFileName(stage) {
18
+ openApiLoader.loadSpec();
19
+ const fileNames = openApiLoader.getFileNames();
20
+ return fileNames[stage] || `${stage}.md`;
21
+ }
22
+ /**
23
+ * Calculates overall progress based on the state of each stage.
24
+ */
25
+ static calculateOverallProgress(requirementsStatus, designStatus, tasksStatus) {
26
+ // Current simple logic, could be moved to spec later
27
+ return Math.round((requirementsStatus + designStatus + tasksStatus) / 3);
28
+ }
29
+ }
30
+ //# sourceMappingURL=WorkflowStateRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowStateRepository.js","sourceRoot":"","sources":["../../../src/features/shared/WorkflowStateRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAa;QACtC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;QACjD,OAAQ,UAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAa;QACnC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAQ,SAAiB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,kBAA0B,EAAE,YAAoB,EAAE,WAAmB;QACnG,qDAAqD;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MarkdownTaskUpdater performs surgical updates to task checkboxes in Markdown content.
3
+ */
4
+ export declare class MarkdownTaskUpdater {
5
+ /**
6
+ * Updates the checkbox for a task and its ancestors if they become fully completed.
7
+ */
8
+ static updateTaskStatus(content: string, taskId: string, completed: boolean): string;
9
+ /**
10
+ * Updates the checkbox for multiple tasks specified by their IDs.
11
+ */
12
+ static updateBatchTaskStatus(content: string, taskIds: string[], completed: boolean): string;
13
+ }
14
+ //# sourceMappingURL=markdownTaskUpdater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownTaskUpdater.d.ts","sourceRoot":"","sources":["../../../src/features/shared/markdownTaskUpdater.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM;IAuDpF;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM;CAW7F"}
@@ -0,0 +1,75 @@
1
+ import { TaskLexer } from './taskLexer.js';
2
+ /**
3
+ * MarkdownTaskUpdater performs surgical updates to task checkboxes in Markdown content.
4
+ */
5
+ export class MarkdownTaskUpdater {
6
+ /**
7
+ * Updates the checkbox for a task and its ancestors if they become fully completed.
8
+ */
9
+ static updateTaskStatus(content, taskId, completed) {
10
+ const taskTokens = TaskLexer.lex(content);
11
+ let lines = content.split('\n');
12
+ const tasksToUpdate = new Set();
13
+ tasksToUpdate.add(taskId);
14
+ // Auto-mark parent tasks if all siblings are completed
15
+ if (completed && taskId.includes('.')) {
16
+ const parts = taskId.split('.');
17
+ let currentId = taskId;
18
+ while (currentId.includes('.')) {
19
+ const parentId = currentId.split('.').slice(0, -1).join('.');
20
+ const siblingTokens = taskTokens.filter(t => {
21
+ if (t.type !== 'list_item')
22
+ return false;
23
+ const match = t.text.match(/^(\d+(?:\.\d+)*)\.?/);
24
+ if (!match)
25
+ return false;
26
+ const id = match[1];
27
+ return id.startsWith(parentId + '.') && id.split('.').length === parentId.split('.').length + 1;
28
+ });
29
+ const allSiblingsDone = siblingTokens.every(t => {
30
+ const match = t.text.match(/^(\d+(?:\.\d+)*)\.?/);
31
+ const id = match ? match[1] : '';
32
+ return id === currentId ? true : !!t.checked;
33
+ });
34
+ if (allSiblingsDone) {
35
+ tasksToUpdate.add(parentId);
36
+ currentId = parentId;
37
+ }
38
+ else {
39
+ break;
40
+ }
41
+ }
42
+ }
43
+ for (const id of tasksToUpdate) {
44
+ const taskToken = taskTokens.find(token => {
45
+ if (token.type !== 'list_item')
46
+ return false;
47
+ const idMatch = token.text.match(/^(\d+(?:\.\d+)*)\.?/);
48
+ return idMatch && idMatch[1] === id;
49
+ });
50
+ if (taskToken) {
51
+ const lineIndex = taskToken.line - 1;
52
+ const originalLine = lines[lineIndex];
53
+ const newStatus = completed ? '[x]' : '[ ]';
54
+ lines[lineIndex] = originalLine.replace(/\[\s?[x ]?\s?\]/, newStatus);
55
+ }
56
+ }
57
+ return lines.join('\n');
58
+ }
59
+ /**
60
+ * Updates the checkbox for multiple tasks specified by their IDs.
61
+ */
62
+ static updateBatchTaskStatus(content, taskIds, completed) {
63
+ let updatedContent = content;
64
+ for (const taskId of taskIds) {
65
+ try {
66
+ updatedContent = this.updateTaskStatus(updatedContent, taskId, completed);
67
+ }
68
+ catch (error) {
69
+ console.warn(`Could not update task ${taskId}: ${error instanceof Error ? error.message : String(error)}`);
70
+ }
71
+ }
72
+ return updatedContent;
73
+ }
74
+ }
75
+ //# sourceMappingURL=markdownTaskUpdater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownTaskUpdater.js","sourceRoot":"","sources":["../../../src/features/shared/markdownTaskUpdater.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,7 @@
1
1
  export interface OpenApiSpec {
2
- paths: {
3
- '/spec': {
4
- post: {
5
- responses: {
6
- '200': {
7
- content: {
8
- 'application/json': {
9
- schema: {
10
- $ref: string;
11
- };
12
- };
13
- };
14
- };
15
- };
16
- };
17
- };
18
- };
2
+ paths: Record<string, any>;
19
3
  components: {
20
- schemas: Record<string, unknown>;
4
+ schemas: Record<string, any>;
21
5
  };
22
6
  'x-error-responses': Record<string, {
23
7
  displayText: string;
@@ -28,8 +12,8 @@ export interface OpenApiSpec {
28
12
  mimeType: string;
29
13
  text?: string;
30
14
  }>;
31
- 'x-global-config': unknown;
32
- 'x-document-templates': Record<string, unknown>;
15
+ 'x-global-config': Record<string, any>;
16
+ 'x-document-templates': Record<string, any>;
33
17
  'x-task-guidance-template'?: {
34
18
  separator: string;
35
19
  header: string;
@@ -53,36 +37,47 @@ export interface OpenApiSpec {
53
37
  batchCompleted: string;
54
38
  };
55
39
  };
40
+ 'x-workflow-config'?: {
41
+ stage_names: Record<string, string>;
42
+ file_names: Record<string, string>;
43
+ };
56
44
  }
45
+ /**
46
+ * OpenApiLoader is a singleton for loading and accessing the raw spec data.
47
+ */
57
48
  export declare class OpenApiLoader {
58
49
  private static instance;
59
50
  private spec;
60
- private examples;
61
51
  private constructor();
62
52
  static getInstance(): OpenApiLoader;
63
53
  loadSpec(): OpenApiSpec;
64
- private cacheExamples;
65
- getResponseExample(responseType: string, criteria?: Record<string, unknown>): unknown;
66
- getErrorResponse(errorType: string): string | null;
67
- getProgressRules(): unknown;
68
- private getNestedValue;
69
- static replaceVariables(template: string, variables: Record<string, unknown>): string;
70
- getSharedResource(resourceId: string): {
71
- uri: string;
72
- title?: string;
73
- mimeType: string;
74
- text?: string;
54
+ getStageNames(): Record<string, string>;
55
+ getFileNames(): Record<string, string>;
56
+ getDocumentTemplate(type: string): any;
57
+ getTaskGuidanceTemplate(): {
58
+ separator: string;
59
+ header: string;
60
+ instructions: {
61
+ prefix: string;
62
+ taskFocus: string;
63
+ progressTracking: string;
64
+ workflow: string;
65
+ };
66
+ prompts: {
67
+ firstTask: string;
68
+ nextTask: string;
69
+ continueTask: string;
70
+ batchContinue: string;
71
+ };
72
+ completionMessages: {
73
+ taskCompleted: string;
74
+ allCompleted: string;
75
+ alreadyCompleted: string;
76
+ batchSucceeded: string;
77
+ batchCompleted: string;
78
+ };
75
79
  } | null;
76
- getGlobalConfig(): unknown;
77
- getDocumentTemplate(templateType: string): unknown;
78
- resolveResources(resources?: Array<unknown>): Array<{
79
- uri: string;
80
- title?: string;
81
- mimeType: string;
82
- text?: string;
83
- }> | undefined;
84
- getTaskGuidanceTemplate(): OpenApiSpec['x-task-guidance-template'] | null;
85
- getExamplesCount(responseType: string): number;
80
+ static replaceVariables(template: string, variables: Record<string, any>): string;
86
81
  }
87
82
  export declare const openApiLoader: OpenApiLoader;
88
83
  //# sourceMappingURL=openApiLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openApiLoader.d.ts","sourceRoot":"","sources":["../../../src/features/shared/openApiLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openApiLoader.d.ts","sourceRoot":"","sources":["../../../src/features/shared/openApiLoader.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,CAAC;IACF,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvG,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,0BAA0B,CAAC,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAChG,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9F,kBAAkB,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/I,CAAC;IACF,mBAAmB,CAAC,EAAE;QACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,IAAI,CAA4B;IAExC,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,QAAQ,IAAI,WAAW;IAQvB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAItC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAItC,uBAAuB;mBAhDV,MAAM;gBACT,MAAM;sBACA;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE;iBACtF;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE;4BACzE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE;;IAiD/I,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;CAQlF;AAED,eAAO,MAAM,aAAa,eAA8B,CAAC"}
@@ -3,14 +3,14 @@ import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { dirname } from 'path';
6
- import { isObject } from './typeGuards.js';
7
6
  const __filename = fileURLToPath(import.meta.url);
8
7
  const __dirname = dirname(__filename);
9
- // Singleton pattern for loading OpenAPI specification
8
+ /**
9
+ * OpenApiLoader is a singleton for loading and accessing the raw spec data.
10
+ */
10
11
  export class OpenApiLoader {
11
12
  static instance;
12
13
  spec = null;
13
- examples = new Map();
14
14
  constructor() { }
15
15
  static getInstance() {
16
16
  if (!OpenApiLoader.instance) {
@@ -18,95 +18,27 @@ export class OpenApiLoader {
18
18
  }
19
19
  return OpenApiLoader.instance;
20
20
  }
21
- // Load OpenAPI specification
22
21
  loadSpec() {
23
- if (this.spec) {
22
+ if (this.spec)
24
23
  return this.spec;
25
- }
26
24
  const specPath = path.join(__dirname, '../../../api/spec-workflow.openapi.yaml');
27
25
  const specContent = fs.readFileSync(specPath, 'utf8');
28
26
  this.spec = yaml.load(specContent);
29
- // Parse and cache all examples
30
- this.cacheExamples();
31
27
  return this.spec;
32
28
  }
33
- // Cache all response examples
34
- cacheExamples() {
35
- if (!this.spec)
36
- return;
37
- const schemas = this.spec.components.schemas;
38
- for (const [schemaName, schema] of Object.entries(schemas)) {
39
- if (!isObject(schema))
40
- continue;
41
- // Support standard OpenAPI 3.1.0 examples field
42
- if ('examples' in schema && Array.isArray(schema.examples)) {
43
- this.examples.set(schemaName, schema.examples);
44
- }
45
- // Maintain backward compatibility with custom x-examples field
46
- else if ('x-examples' in schema && Array.isArray(schema['x-examples'])) {
47
- this.examples.set(schemaName, schema['x-examples']);
48
- }
49
- }
50
- }
51
- // Get response example
52
- getResponseExample(responseType, criteria) {
53
- const examples = this.examples.get(responseType);
54
- if (!examples || examples.length === 0) {
55
- return null;
56
- }
57
- // If no filter criteria, return the first example
58
- if (!criteria) {
59
- return examples[0];
60
- }
61
- // Filter examples by criteria
62
- for (const example of examples) {
63
- let matches = true;
64
- for (const [key, value] of Object.entries(criteria)) {
65
- if (this.getNestedValue(example, key) !== value) {
66
- matches = false;
67
- break;
68
- }
69
- }
70
- if (matches) {
71
- return example;
72
- }
73
- }
74
- // No match found, return the first one
75
- return examples[0];
29
+ getStageNames() {
30
+ return this.spec?.['x-global-config']?.stage_names || {};
76
31
  }
77
- // Get error response template
78
- getErrorResponse(errorType) {
79
- if (!this.spec || !this.spec['x-error-responses']) {
80
- return null;
81
- }
82
- const errorResponse = this.spec['x-error-responses'][errorType];
83
- return errorResponse?.displayText || null;
32
+ getFileNames() {
33
+ return this.spec?.['x-global-config']?.file_names || {};
84
34
  }
85
- // Get progress calculation rules
86
- getProgressRules() {
87
- if (!this.spec)
88
- return null;
89
- const progressSchema = this.spec.components.schemas.Progress;
90
- if (isObject(progressSchema) && 'x-progress-rules' in progressSchema) {
91
- return progressSchema['x-progress-rules'];
92
- }
93
- return null;
35
+ getDocumentTemplate(type) {
36
+ return this.spec?.['x-document-templates']?.[type] || null;
94
37
  }
95
- // Utility function: get nested object value
96
- getNestedValue(obj, path) {
97
- const keys = path.split('.');
98
- let current = obj;
99
- for (const key of keys) {
100
- if (isObject(current) && key in current) {
101
- current = current[key];
102
- }
103
- else {
104
- return undefined;
105
- }
106
- }
107
- return current;
38
+ getTaskGuidanceTemplate() {
39
+ return this.spec?.['x-task-guidance-template'] || null;
108
40
  }
109
- // Replace template variables
41
+ // Still useful for interpolation across repositories
110
42
  static replaceVariables(template, variables) {
111
43
  let result = template;
112
44
  for (const [key, value] of Object.entries(variables)) {
@@ -115,52 +47,6 @@ export class OpenApiLoader {
115
47
  }
116
48
  return result;
117
49
  }
118
- // Get shared resource - directly return MCP format
119
- getSharedResource(resourceId) {
120
- if (!this.spec || !this.spec['x-shared-resources']) {
121
- return null;
122
- }
123
- return this.spec['x-shared-resources'][resourceId] || null;
124
- }
125
- // Get global configuration
126
- getGlobalConfig() {
127
- if (!this.spec)
128
- return {};
129
- return this.spec['x-global-config'] || {};
130
- }
131
- // Get document template
132
- getDocumentTemplate(templateType) {
133
- if (!this.spec)
134
- return null;
135
- return this.spec['x-document-templates']?.[templateType] || null;
136
- }
137
- // Resolve resource list - no conversion needed, use MCP format directly
138
- resolveResources(resources) {
139
- if (!resources || resources.length === 0) {
140
- return undefined;
141
- }
142
- const resolved = [];
143
- for (const resource of resources) {
144
- if (isObject(resource) && 'ref' in resource && typeof resource.ref === 'string') {
145
- // Get from shared resources - already in MCP format
146
- const sharedResource = this.getSharedResource(resource.ref);
147
- if (sharedResource) {
148
- resolved.push(sharedResource);
149
- }
150
- }
151
- }
152
- return resolved.length > 0 ? resolved : undefined;
153
- }
154
- // Get task guidance template
155
- getTaskGuidanceTemplate() {
156
- if (!this.spec)
157
- return null;
158
- return this.spec['x-task-guidance-template'] || null;
159
- }
160
- // Debug method: get cached examples count
161
- getExamplesCount(responseType) {
162
- return this.examples.get(responseType)?.length || 0;
163
- }
164
50
  }
165
51
  export const openApiLoader = OpenApiLoader.getInstance();
166
52
  //# sourceMappingURL=openApiLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openApiLoader.js","sourceRoot":"","sources":["../../../src/features/shared/openApiLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openApiLoader.js","sourceRoot":"","sources":["../../../src/features/shared/openApiLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAyBtC;;GAEG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAC,QAAQ,CAAgB;IAC/B,IAAI,GAAuB,IAAI,CAAC;IAExC,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAgB,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,aAAa;QACX,OAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAS,EAAE,WAAW,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,YAAY;QACV,OAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAS,EAAE,UAAU,IAAI,EAAE,CAAC;IACnE,CAAC;IAED,mBAAmB,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,gBAAgB,CAAC,QAAgB,EAAE,SAA8B;QACtE,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * TaskGuidanceRepository manages guidance-related data from the OpenAPI spec.
3
+ */
4
+ export declare class TaskGuidanceRepository {
5
+ /**
6
+ * Loads the guidance template structure from the spec.
7
+ */
8
+ static getGuidanceTemplate(): {
9
+ separator: string;
10
+ header: string;
11
+ instructions: {
12
+ prefix: string;
13
+ taskFocus: string;
14
+ progressTracking: string;
15
+ workflow: string;
16
+ };
17
+ prompts: {
18
+ firstTask: string;
19
+ nextTask: string;
20
+ continueTask: string;
21
+ batchContinue: string;
22
+ };
23
+ completionMessages: {
24
+ taskCompleted: string;
25
+ allCompleted: string;
26
+ alreadyCompleted: string;
27
+ batchSucceeded: string;
28
+ batchCompleted: string;
29
+ };
30
+ } | null;
31
+ /**
32
+ * Gets a specific completion message by key.
33
+ */
34
+ static getCompletionMessage(key: string): string;
35
+ }
36
+ //# sourceMappingURL=taskGuidanceRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskGuidanceRepository.d.ts","sourceRoot":"","sources":["../../../src/features/shared/taskGuidanceRepository.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACH,MAAM,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;IAK1B;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAKjD"}