@specforge/mcp 2.1.6 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/blocked.js +6 -6
- package/dist/cli/commands/blocked.js.map +1 -1
- package/dist/cli/commands/debug/test.d.ts.map +1 -1
- package/dist/cli/commands/debug/test.js +4 -3
- package/dist/cli/commands/debug/test.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +39 -23
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/feedback.d.ts +16 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -0
- package/dist/cli/commands/feedback.js +220 -0
- package/dist/cli/commands/feedback.js.map +1 -0
- package/dist/cli/commands/feedback.types.d.ts +116 -0
- package/dist/cli/commands/feedback.types.d.ts.map +1 -0
- package/dist/cli/commands/feedback.types.js +97 -0
- package/dist/cli/commands/feedback.types.js.map +1 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/next.js +3 -3
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/review/epic-review.js +2 -2
- package/dist/cli/commands/review/epic-review.js.map +1 -1
- package/dist/cli/commands/review/types.d.ts +1 -1
- package/dist/cli/commands/review/types.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/agent-types.d.ts +49 -0
- package/dist/cli/commands/scaffold/agent-types.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/agent-types.js +37 -0
- package/dist/cli/commands/scaffold/agent-types.js.map +1 -0
- package/dist/cli/commands/scaffold/display.d.ts +31 -2
- package/dist/cli/commands/scaffold/display.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/display.js +176 -14
- package/dist/cli/commands/scaffold/display.js.map +1 -1
- package/dist/cli/commands/scaffold/register.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/register.js +8 -4
- package/dist/cli/commands/scaffold/register.js.map +1 -1
- package/dist/cli/commands/scaffold/scaffold.d.ts +1 -1
- package/dist/cli/commands/scaffold/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/scaffold.js +522 -30
- package/dist/cli/commands/scaffold/scaffold.js.map +1 -1
- package/dist/cli/commands/scaffold/targets.d.ts +12 -0
- package/dist/cli/commands/scaffold/targets.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/targets.js +33 -0
- package/dist/cli/commands/scaffold/targets.js.map +1 -1
- package/dist/cli/commands/scaffold/types.d.ts +34 -1
- package/dist/cli/commands/scaffold/types.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/types.js.map +1 -1
- package/dist/cli/commands/scaffold/utils.d.ts +22 -1
- package/dist/cli/commands/scaffold/utils.d.ts.map +1 -1
- package/dist/cli/commands/scaffold/utils.js +106 -0
- package/dist/cli/commands/scaffold/utils.js.map +1 -1
- package/dist/cli/commands/session/start.js +1 -1
- package/dist/cli/commands/session/start.js.map +1 -1
- package/dist/cli/commands/status.types.d.ts +1 -1
- package/dist/cli/commands/status.types.d.ts.map +1 -1
- package/dist/cli/commands/status.types.js +2 -2
- package/dist/cli/commands/status.types.js.map +1 -1
- package/dist/cli/commands/ticket/resolver.js +1 -1
- package/dist/cli/commands/ticket/resolver.js.map +1 -1
- package/dist/cli/commands/tickets.js +1 -1
- package/dist/cli/commands/tickets.js.map +1 -1
- package/dist/cli/commands/tickets.types.d.ts +1 -1
- package/dist/cli/commands/tickets.types.d.ts.map +1 -1
- package/dist/cli/config/writer.d.ts +32 -13
- package/dist/cli/config/writer.d.ts.map +1 -1
- package/dist/cli/config/writer.js +30 -11
- package/dist/cli/config/writer.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-implementer.d.ts +8 -0
- package/dist/cli/templates/agents/content/core/sfag-implementer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-implementer.js +111 -0
- package/dist/cli/templates/agents/content/core/sfag-implementer.js.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts +8 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.js +105 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.js.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts +8 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js +124 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts +8 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js +130 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js.map +1 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.d.ts +8 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.js +151 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.js.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.d.ts +8 -0
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.js +130 -0
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.js.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.d.ts +8 -0
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.js +181 -0
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.js.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.d.ts +8 -0
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.js +139 -0
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.js.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.d.ts +8 -0
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.js +147 -0
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.js.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.d.ts +8 -0
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.js +130 -0
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.js.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.d.ts +8 -0
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.js +169 -0
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.js.map +1 -0
- package/dist/cli/templates/agents/index.d.ts +23 -0
- package/dist/cli/templates/agents/index.d.ts.map +1 -0
- package/dist/cli/templates/agents/index.js +63 -0
- package/dist/cli/templates/agents/index.js.map +1 -0
- package/dist/cli/templates/content/sf-create-epics.d.ts +1 -1
- package/dist/cli/templates/content/sf-create-epics.d.ts.map +1 -1
- package/dist/cli/templates/content/sf-create-epics.js +72 -13
- package/dist/cli/templates/content/sf-create-epics.js.map +1 -1
- package/dist/cli/templates/content/sf-create-spec.d.ts +1 -1
- package/dist/cli/templates/content/sf-create-spec.d.ts.map +1 -1
- package/dist/cli/templates/content/sf-create-spec.js +91 -22
- package/dist/cli/templates/content/sf-create-spec.js.map +1 -1
- package/dist/cli/templates/content/sf-create-tickets.d.ts +1 -1
- package/dist/cli/templates/content/sf-create-tickets.d.ts.map +1 -1
- package/dist/cli/templates/content/sf-create-tickets.js +90 -18
- package/dist/cli/templates/content/sf-create-tickets.js.map +1 -1
- package/dist/cli/templates/index.d.ts +2 -1
- package/dist/cli/templates/index.d.ts.map +1 -1
- package/dist/cli/templates/index.js +4 -1
- package/dist/cli/templates/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/workflow-definitions.d.ts +41 -0
- package/dist/lib/workflow-definitions.d.ts.map +1 -0
- package/dist/lib/workflow-definitions.js +511 -0
- package/dist/lib/workflow-definitions.js.map +1 -0
- package/dist/tools/core/bulk.d.ts.map +1 -1
- package/dist/tools/core/bulk.js +5 -30
- package/dist/tools/core/bulk.js.map +1 -1
- package/dist/tools/core/epic.d.ts.map +1 -1
- package/dist/tools/core/epic.js +95 -11
- package/dist/tools/core/epic.js.map +1 -1
- package/dist/tools/core/feedback.d.ts +110 -0
- package/dist/tools/core/feedback.d.ts.map +1 -0
- package/dist/tools/core/feedback.js +303 -0
- package/dist/tools/core/feedback.js.map +1 -0
- package/dist/tools/core/help.d.ts.map +1 -1
- package/dist/tools/core/help.js +17 -2
- package/dist/tools/core/help.js.map +1 -1
- package/dist/tools/core/index.d.ts +2 -0
- package/dist/tools/core/index.d.ts.map +1 -1
- package/dist/tools/core/index.js +2 -0
- package/dist/tools/core/index.js.map +1 -1
- package/dist/tools/core/specification.d.ts.map +1 -1
- package/dist/tools/core/specification.js +98 -9
- package/dist/tools/core/specification.js.map +1 -1
- package/dist/tools/core/ticket.d.ts.map +1 -1
- package/dist/tools/core/ticket.js +48 -11
- package/dist/tools/core/ticket.js.map +1 -1
- package/dist/tools/core/workflow-guide.d.ts +13 -0
- package/dist/tools/core/workflow-guide.d.ts.map +1 -0
- package/dist/tools/core/workflow-guide.js +332 -0
- package/dist/tools/core/workflow-guide.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +131 -96
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epic.d.ts","sourceRoot":"","sources":["../../../src/tools/core/epic.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"epic.d.ts","sourceRoot":"","sources":["../../../src/tools/core/epic.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,IAmItB,CAAC;AAUF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAmG3F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,oEAGrD"}
|
package/dist/tools/core/epic.js
CHANGED
|
@@ -20,14 +20,33 @@ export const epicTool = {
|
|
|
20
20
|
epicId: { type: 'string', description: 'Epic ID' },
|
|
21
21
|
// For create/list/lookup
|
|
22
22
|
specificationId: { type: 'string', description: 'Specification ID' },
|
|
23
|
-
// For create/update
|
|
24
|
-
title: { type: 'string' },
|
|
25
|
-
description: { type: 'string' },
|
|
26
|
-
objective: { type: 'string' },
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
// For create/update - core fields
|
|
24
|
+
title: { type: 'string', description: 'Epic title' },
|
|
25
|
+
description: { type: 'string', description: 'Epic description (required for create)' },
|
|
26
|
+
objective: { type: 'string', description: 'Epic objective/goal (required for create)' },
|
|
27
|
+
content: { type: 'string', description: 'Full epic content (markdown)' },
|
|
28
|
+
scope: { type: 'string', description: "What's in/out of scope for this epic" },
|
|
29
|
+
status: { type: 'string', enum: ['todo', 'in_progress', 'completed'] },
|
|
30
|
+
priority: { type: 'string', enum: ['high', 'medium', 'low'] },
|
|
31
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Categorization tags' },
|
|
32
|
+
estimatedHours: { type: 'number', description: 'Total estimated hours for epic' },
|
|
33
|
+
// Planning fields
|
|
34
|
+
goals: { type: 'array', items: { type: 'string' }, description: 'Epic-specific goals' },
|
|
35
|
+
acceptanceCriteria: { type: 'array', items: { type: 'string' }, description: 'Epic-level success criteria' },
|
|
36
|
+
guardrails: { type: 'array', items: { type: 'string' }, description: 'What NOT to do' },
|
|
37
|
+
risks: { type: 'array', items: { type: 'string' }, description: 'Risk factors' },
|
|
38
|
+
constraints: { type: 'array', items: { type: 'string' }, description: 'Technical/business constraints' },
|
|
39
|
+
assumptions: { type: 'array', items: { type: 'string' }, description: 'Key assumptions made' },
|
|
40
|
+
// Technical details
|
|
41
|
+
architecture: { type: 'string', description: 'Architectural approach for this epic' },
|
|
42
|
+
fileStructure: { type: 'string', description: 'File/folder organization' },
|
|
43
|
+
techStack: { type: 'array', items: { type: 'string' }, description: 'Technologies used' },
|
|
44
|
+
dependencies: { type: 'array', items: { type: 'string' }, description: 'Required packages/libraries' },
|
|
45
|
+
apiContracts: { type: 'object', description: 'API specifications (if epic defines APIs)' },
|
|
46
|
+
// Pattern Inheritance (F7-003)
|
|
47
|
+
sharedPatterns: { type: 'object', description: 'EpicSharedPatterns - overrides spec patterns' },
|
|
48
|
+
additionalImports: { type: 'array', items: { type: 'string' }, description: 'Additional imports for this epic' },
|
|
49
|
+
commonFiles: { type: 'object', description: 'EpicCommonFiles - shared files across tickets' },
|
|
31
50
|
// For create - inline tickets
|
|
32
51
|
tickets: {
|
|
33
52
|
type: 'array',
|
|
@@ -44,7 +63,7 @@ export const epicTool = {
|
|
|
44
63
|
},
|
|
45
64
|
priority: {
|
|
46
65
|
type: 'string',
|
|
47
|
-
enum: ['
|
|
66
|
+
enum: ['high', 'medium', 'low'],
|
|
48
67
|
description: 'Ticket priority',
|
|
49
68
|
},
|
|
50
69
|
tags: {
|
|
@@ -58,8 +77,34 @@ export const epicTool = {
|
|
|
58
77
|
},
|
|
59
78
|
acceptanceCriteria: {
|
|
60
79
|
type: 'array',
|
|
61
|
-
items: { type: '
|
|
62
|
-
description: 'Acceptance criteria
|
|
80
|
+
items: { type: 'string' },
|
|
81
|
+
description: 'Acceptance criteria strings',
|
|
82
|
+
},
|
|
83
|
+
notes: { type: 'string', description: 'Additional context, warnings, considerations' },
|
|
84
|
+
implementation: { type: 'object', description: 'Detailed implementation steps' },
|
|
85
|
+
technicalDetails: { type: 'object', description: 'Technical details object' },
|
|
86
|
+
codeReferences: {
|
|
87
|
+
type: 'array',
|
|
88
|
+
items: {
|
|
89
|
+
type: 'object',
|
|
90
|
+
properties: {
|
|
91
|
+
name: { type: 'string' },
|
|
92
|
+
code: { type: 'string' },
|
|
93
|
+
language: { type: 'string' },
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
description: 'Code snippets as references',
|
|
97
|
+
},
|
|
98
|
+
typeReferences: {
|
|
99
|
+
type: 'array',
|
|
100
|
+
items: {
|
|
101
|
+
type: 'object',
|
|
102
|
+
properties: {
|
|
103
|
+
name: { type: 'string' },
|
|
104
|
+
definition: { type: 'string' },
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
description: 'Type definitions as references',
|
|
63
108
|
},
|
|
64
109
|
dependsOn: {
|
|
65
110
|
type: 'array',
|
|
@@ -103,9 +148,29 @@ export function createEpicOperations(apiClient) {
|
|
|
103
148
|
title: args.title,
|
|
104
149
|
description: args.description,
|
|
105
150
|
objective: args.objective,
|
|
151
|
+
content: args.content,
|
|
152
|
+
scope: args.scope,
|
|
106
153
|
priority: args.priority,
|
|
107
154
|
tags: args.tags,
|
|
108
155
|
estimatedHours: args.estimatedHours,
|
|
156
|
+
// Planning fields
|
|
157
|
+
goals: args.goals,
|
|
158
|
+
acceptanceCriteria: args.acceptanceCriteria,
|
|
159
|
+
guardrails: args.guardrails,
|
|
160
|
+
risks: args.risks,
|
|
161
|
+
constraints: args.constraints,
|
|
162
|
+
assumptions: args.assumptions,
|
|
163
|
+
// Technical details
|
|
164
|
+
architecture: args.architecture,
|
|
165
|
+
fileStructure: args.fileStructure,
|
|
166
|
+
techStack: args.techStack,
|
|
167
|
+
dependencies: args.dependencies,
|
|
168
|
+
apiContracts: args.apiContracts,
|
|
169
|
+
// Pattern Inheritance
|
|
170
|
+
sharedPatterns: args.sharedPatterns,
|
|
171
|
+
additionalImports: args.additionalImports,
|
|
172
|
+
commonFiles: args.commonFiles,
|
|
173
|
+
// Inline tickets
|
|
109
174
|
tickets: args.tickets,
|
|
110
175
|
});
|
|
111
176
|
},
|
|
@@ -123,10 +188,29 @@ export function createEpicOperations(apiClient) {
|
|
|
123
188
|
title: args.title,
|
|
124
189
|
description: args.description,
|
|
125
190
|
objective: args.objective,
|
|
191
|
+
content: args.content,
|
|
192
|
+
scope: args.scope,
|
|
126
193
|
status: args.status,
|
|
127
194
|
priority: args.priority,
|
|
128
195
|
tags: args.tags,
|
|
129
196
|
estimatedHours: args.estimatedHours,
|
|
197
|
+
// Planning fields
|
|
198
|
+
goals: args.goals,
|
|
199
|
+
acceptanceCriteria: args.acceptanceCriteria,
|
|
200
|
+
guardrails: args.guardrails,
|
|
201
|
+
risks: args.risks,
|
|
202
|
+
constraints: args.constraints,
|
|
203
|
+
assumptions: args.assumptions,
|
|
204
|
+
// Technical details
|
|
205
|
+
architecture: args.architecture,
|
|
206
|
+
fileStructure: args.fileStructure,
|
|
207
|
+
techStack: args.techStack,
|
|
208
|
+
dependencies: args.dependencies,
|
|
209
|
+
apiContracts: args.apiContracts,
|
|
210
|
+
// Pattern Inheritance
|
|
211
|
+
sharedPatterns: args.sharedPatterns,
|
|
212
|
+
additionalImports: args.additionalImports,
|
|
213
|
+
commonFiles: args.commonFiles,
|
|
130
214
|
});
|
|
131
215
|
},
|
|
132
216
|
list: async (args, _userId) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epic.js","sourceRoot":"","sources":["../../../src/tools/core/epic.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAG7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE;;;;;uCAKwB;IACrC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnD,WAAW,EAAE,0BAA0B;aACxC;YACD,iBAAiB;YACjB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;YAClD,yBAAyB;YACzB,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACpE,
|
|
1
|
+
{"version":3,"file":"epic.js","sourceRoot":"","sources":["../../../src/tools/core/epic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Tool
|
|
3
|
+
*
|
|
4
|
+
* MCP tool for submitting and managing structured feedback about MCP tools and operations.
|
|
5
|
+
* Uses local-first storage with future API sync capability.
|
|
6
|
+
*/
|
|
7
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
import { ConsolidatedToolArgs, OperationHandler } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Feedback categories
|
|
11
|
+
*/
|
|
12
|
+
export type FeedbackCategory = 'bug' | 'feature_request' | 'usability' | 'documentation' | 'performance';
|
|
13
|
+
/**
|
|
14
|
+
* Feedback severity levels
|
|
15
|
+
*/
|
|
16
|
+
export type FeedbackSeverity = 'critical' | 'high' | 'medium' | 'low';
|
|
17
|
+
/**
|
|
18
|
+
* Feedback entry stored in local storage
|
|
19
|
+
*/
|
|
20
|
+
export interface FeedbackEntry {
|
|
21
|
+
/** Unique feedback ID */
|
|
22
|
+
id: string;
|
|
23
|
+
/** Feedback category */
|
|
24
|
+
category: FeedbackCategory;
|
|
25
|
+
/** Brief summary of the feedback */
|
|
26
|
+
summary: string;
|
|
27
|
+
/** Severity level */
|
|
28
|
+
severity: FeedbackSeverity;
|
|
29
|
+
/** Which MCP tool this relates to (optional) */
|
|
30
|
+
tool?: string;
|
|
31
|
+
/** Specific operation within the tool (optional) */
|
|
32
|
+
toolOperation?: string;
|
|
33
|
+
/** Extended description (optional) */
|
|
34
|
+
details?: string;
|
|
35
|
+
/** Expected behavior (optional) */
|
|
36
|
+
expected?: string;
|
|
37
|
+
/** Actual behavior (optional) */
|
|
38
|
+
actual?: string;
|
|
39
|
+
/** Error message if bug (optional) */
|
|
40
|
+
errorMessage?: string;
|
|
41
|
+
/** Related ticket ID (optional) */
|
|
42
|
+
ticketId?: string;
|
|
43
|
+
/** Timestamp when created */
|
|
44
|
+
createdAt: string;
|
|
45
|
+
/** User ID who submitted */
|
|
46
|
+
userId: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Index entry for fast listing
|
|
50
|
+
*/
|
|
51
|
+
export interface FeedbackIndexEntry {
|
|
52
|
+
id: string;
|
|
53
|
+
category: FeedbackCategory;
|
|
54
|
+
severity: FeedbackSeverity;
|
|
55
|
+
summary: string;
|
|
56
|
+
tool?: string;
|
|
57
|
+
createdAt: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Index file structure
|
|
61
|
+
*/
|
|
62
|
+
export interface FeedbackIndex {
|
|
63
|
+
entries: FeedbackIndexEntry[];
|
|
64
|
+
lastUpdated: string;
|
|
65
|
+
}
|
|
66
|
+
export declare const FEEDBACK_CATEGORIES: FeedbackCategory[];
|
|
67
|
+
export declare const FEEDBACK_SEVERITIES: FeedbackSeverity[];
|
|
68
|
+
/**
|
|
69
|
+
* Get the feedback storage directory
|
|
70
|
+
*/
|
|
71
|
+
export declare function getFeedbackDir(): string;
|
|
72
|
+
/**
|
|
73
|
+
* Get the entries directory
|
|
74
|
+
*/
|
|
75
|
+
export declare function getEntriesDir(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Get the index file path
|
|
78
|
+
*/
|
|
79
|
+
export declare function getIndexPath(): string;
|
|
80
|
+
/**
|
|
81
|
+
* Ensure storage directories exist
|
|
82
|
+
*/
|
|
83
|
+
export declare function ensureStorageExists(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Generate a unique feedback ID
|
|
86
|
+
*/
|
|
87
|
+
export declare function generateFeedbackId(): string;
|
|
88
|
+
/**
|
|
89
|
+
* Read the feedback index
|
|
90
|
+
*/
|
|
91
|
+
export declare function readIndex(): FeedbackIndex;
|
|
92
|
+
/**
|
|
93
|
+
* Write the feedback index
|
|
94
|
+
*/
|
|
95
|
+
export declare function writeIndex(index: FeedbackIndex): void;
|
|
96
|
+
/**
|
|
97
|
+
* Read a feedback entry by ID
|
|
98
|
+
*/
|
|
99
|
+
export declare function readEntry(feedbackId: string): FeedbackEntry | null;
|
|
100
|
+
/**
|
|
101
|
+
* Write a feedback entry
|
|
102
|
+
*/
|
|
103
|
+
export declare function writeEntry(entry: FeedbackEntry): void;
|
|
104
|
+
export declare const feedbackTool: Tool;
|
|
105
|
+
export declare function createFeedbackOperations(): Record<string, OperationHandler>;
|
|
106
|
+
/**
|
|
107
|
+
* Create the feedback handler using operation router
|
|
108
|
+
*/
|
|
109
|
+
export declare function createFeedbackHandler(): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
|
|
110
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/tools/core/feedback.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,KAAK,GACL,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAMjD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAKjD,CAAC;AAMF;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAW1C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,aAAa,CAazC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAIrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAalE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAIrD;AAMD,eAAO,MAAM,YAAY,EAAE,IA2E1B,CAAC;AAkCF,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAiG3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,qEAGpC"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
// mcp/src/tools/core/feedback.ts
|
|
2
|
+
import { createOperationRouter } from './router.js';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as os from 'os';
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Constants
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export const FEEDBACK_CATEGORIES = [
|
|
10
|
+
'bug',
|
|
11
|
+
'feature_request',
|
|
12
|
+
'usability',
|
|
13
|
+
'documentation',
|
|
14
|
+
'performance',
|
|
15
|
+
];
|
|
16
|
+
export const FEEDBACK_SEVERITIES = [
|
|
17
|
+
'critical',
|
|
18
|
+
'high',
|
|
19
|
+
'medium',
|
|
20
|
+
'low',
|
|
21
|
+
];
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Storage Helpers
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Get the feedback storage directory
|
|
27
|
+
*/
|
|
28
|
+
export function getFeedbackDir() {
|
|
29
|
+
return path.join(os.homedir(), '.specforge', 'feedback');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the entries directory
|
|
33
|
+
*/
|
|
34
|
+
export function getEntriesDir() {
|
|
35
|
+
return path.join(getFeedbackDir(), 'entries');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the index file path
|
|
39
|
+
*/
|
|
40
|
+
export function getIndexPath() {
|
|
41
|
+
return path.join(getFeedbackDir(), 'index.json');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Ensure storage directories exist
|
|
45
|
+
*/
|
|
46
|
+
export function ensureStorageExists() {
|
|
47
|
+
const feedbackDir = getFeedbackDir();
|
|
48
|
+
const entriesDir = getEntriesDir();
|
|
49
|
+
if (!fs.existsSync(feedbackDir)) {
|
|
50
|
+
fs.mkdirSync(feedbackDir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
if (!fs.existsSync(entriesDir)) {
|
|
53
|
+
fs.mkdirSync(entriesDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate a unique feedback ID
|
|
58
|
+
*/
|
|
59
|
+
export function generateFeedbackId() {
|
|
60
|
+
const date = new Date().toISOString().split('T')[0];
|
|
61
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
62
|
+
return `fb_${date}_${random}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Read the feedback index
|
|
66
|
+
*/
|
|
67
|
+
export function readIndex() {
|
|
68
|
+
const indexPath = getIndexPath();
|
|
69
|
+
if (!fs.existsSync(indexPath)) {
|
|
70
|
+
return { entries: [], lastUpdated: new Date().toISOString() };
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const content = fs.readFileSync(indexPath, 'utf-8');
|
|
74
|
+
return JSON.parse(content);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return { entries: [], lastUpdated: new Date().toISOString() };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Write the feedback index
|
|
82
|
+
*/
|
|
83
|
+
export function writeIndex(index) {
|
|
84
|
+
ensureStorageExists();
|
|
85
|
+
const indexPath = getIndexPath();
|
|
86
|
+
fs.writeFileSync(indexPath, JSON.stringify(index, null, 2));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Read a feedback entry by ID
|
|
90
|
+
*/
|
|
91
|
+
export function readEntry(feedbackId) {
|
|
92
|
+
const entryPath = path.join(getEntriesDir(), `${feedbackId}.json`);
|
|
93
|
+
if (!fs.existsSync(entryPath)) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const content = fs.readFileSync(entryPath, 'utf-8');
|
|
98
|
+
return JSON.parse(content);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Write a feedback entry
|
|
106
|
+
*/
|
|
107
|
+
export function writeEntry(entry) {
|
|
108
|
+
ensureStorageExists();
|
|
109
|
+
const entryPath = path.join(getEntriesDir(), `${entry.id}.json`);
|
|
110
|
+
fs.writeFileSync(entryPath, JSON.stringify(entry, null, 2));
|
|
111
|
+
}
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// Tool Definition
|
|
114
|
+
// ============================================================================
|
|
115
|
+
export const feedbackTool = {
|
|
116
|
+
name: 'feedback',
|
|
117
|
+
description: `Submit and manage feedback about MCP tools. Operations:
|
|
118
|
+
- submit: Submit new feedback (requires category, summary)
|
|
119
|
+
- list: List recent feedback entries
|
|
120
|
+
- get: Get a specific feedback entry by ID`,
|
|
121
|
+
inputSchema: {
|
|
122
|
+
type: 'object',
|
|
123
|
+
properties: {
|
|
124
|
+
operation: {
|
|
125
|
+
type: 'string',
|
|
126
|
+
enum: ['submit', 'list', 'get'],
|
|
127
|
+
description: 'The operation to perform',
|
|
128
|
+
},
|
|
129
|
+
// For submit operation
|
|
130
|
+
category: {
|
|
131
|
+
type: 'string',
|
|
132
|
+
enum: ['bug', 'feature_request', 'usability', 'documentation', 'performance'],
|
|
133
|
+
description: 'Feedback category (required for submit)',
|
|
134
|
+
},
|
|
135
|
+
summary: {
|
|
136
|
+
type: 'string',
|
|
137
|
+
description: 'Brief summary of the feedback (required for submit)',
|
|
138
|
+
},
|
|
139
|
+
severity: {
|
|
140
|
+
type: 'string',
|
|
141
|
+
enum: ['critical', 'high', 'medium', 'low'],
|
|
142
|
+
description: 'Severity level (default: medium)',
|
|
143
|
+
},
|
|
144
|
+
tool: {
|
|
145
|
+
type: 'string',
|
|
146
|
+
description: 'Which MCP tool this relates to',
|
|
147
|
+
},
|
|
148
|
+
toolOperation: {
|
|
149
|
+
type: 'string',
|
|
150
|
+
description: 'Specific operation within the tool',
|
|
151
|
+
},
|
|
152
|
+
details: {
|
|
153
|
+
type: 'string',
|
|
154
|
+
description: 'Extended description',
|
|
155
|
+
},
|
|
156
|
+
expected: {
|
|
157
|
+
type: 'string',
|
|
158
|
+
description: 'Expected behavior',
|
|
159
|
+
},
|
|
160
|
+
actual: {
|
|
161
|
+
type: 'string',
|
|
162
|
+
description: 'Actual behavior',
|
|
163
|
+
},
|
|
164
|
+
errorMessage: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
description: 'Error message if reporting a bug',
|
|
167
|
+
},
|
|
168
|
+
ticketId: {
|
|
169
|
+
type: 'string',
|
|
170
|
+
description: 'Related ticket ID',
|
|
171
|
+
},
|
|
172
|
+
// For list operation
|
|
173
|
+
limit: {
|
|
174
|
+
type: 'number',
|
|
175
|
+
description: 'Maximum entries to return (default: 10)',
|
|
176
|
+
},
|
|
177
|
+
categoryFilter: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
enum: ['bug', 'feature_request', 'usability', 'documentation', 'performance'],
|
|
180
|
+
description: 'Filter by category',
|
|
181
|
+
},
|
|
182
|
+
// For get operation
|
|
183
|
+
feedbackId: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: 'Feedback ID to retrieve (required for get)',
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
required: ['operation'],
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
// ============================================================================
|
|
192
|
+
// Validation Helpers
|
|
193
|
+
// ============================================================================
|
|
194
|
+
function validateRequired(args, ...fields) {
|
|
195
|
+
for (const field of fields) {
|
|
196
|
+
if (args[field] === undefined || args[field] === null || args[field] === '') {
|
|
197
|
+
throw new Error(`${field} is required`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function validateCategory(category) {
|
|
202
|
+
if (!FEEDBACK_CATEGORIES.includes(category)) {
|
|
203
|
+
throw new Error(`Invalid category '${category}'. Valid: ${FEEDBACK_CATEGORIES.join(', ')}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function validateSeverity(severity) {
|
|
207
|
+
if (!FEEDBACK_SEVERITIES.includes(severity)) {
|
|
208
|
+
throw new Error(`Invalid severity '${severity}'. Valid: ${FEEDBACK_SEVERITIES.join(', ')}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Operation Handlers
|
|
213
|
+
// ============================================================================
|
|
214
|
+
export function createFeedbackOperations() {
|
|
215
|
+
return {
|
|
216
|
+
submit: async (args, userId) => {
|
|
217
|
+
validateRequired(args, 'category', 'summary');
|
|
218
|
+
const category = args.category;
|
|
219
|
+
const summary = args.summary;
|
|
220
|
+
const severity = args.severity || 'medium';
|
|
221
|
+
validateCategory(category);
|
|
222
|
+
validateSeverity(severity);
|
|
223
|
+
const id = generateFeedbackId();
|
|
224
|
+
const now = new Date().toISOString();
|
|
225
|
+
const entry = {
|
|
226
|
+
id,
|
|
227
|
+
category: category,
|
|
228
|
+
summary,
|
|
229
|
+
severity: severity,
|
|
230
|
+
tool: args.tool,
|
|
231
|
+
toolOperation: args.toolOperation,
|
|
232
|
+
details: args.details,
|
|
233
|
+
expected: args.expected,
|
|
234
|
+
actual: args.actual,
|
|
235
|
+
errorMessage: args.errorMessage,
|
|
236
|
+
ticketId: args.ticketId,
|
|
237
|
+
createdAt: now,
|
|
238
|
+
userId,
|
|
239
|
+
};
|
|
240
|
+
// Write entry file
|
|
241
|
+
writeEntry(entry);
|
|
242
|
+
// Update index
|
|
243
|
+
const index = readIndex();
|
|
244
|
+
index.entries.unshift({
|
|
245
|
+
id,
|
|
246
|
+
category: entry.category,
|
|
247
|
+
severity: entry.severity,
|
|
248
|
+
summary: entry.summary,
|
|
249
|
+
tool: entry.tool,
|
|
250
|
+
createdAt: now,
|
|
251
|
+
});
|
|
252
|
+
index.lastUpdated = now;
|
|
253
|
+
writeIndex(index);
|
|
254
|
+
return {
|
|
255
|
+
success: true,
|
|
256
|
+
feedbackId: id,
|
|
257
|
+
message: `Feedback submitted successfully`,
|
|
258
|
+
entry: {
|
|
259
|
+
id,
|
|
260
|
+
category: entry.category,
|
|
261
|
+
severity: entry.severity,
|
|
262
|
+
summary: entry.summary,
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
},
|
|
266
|
+
list: async (args, _userId) => {
|
|
267
|
+
const limit = args.limit || 10;
|
|
268
|
+
const categoryFilter = args.categoryFilter;
|
|
269
|
+
const index = readIndex();
|
|
270
|
+
let entries = index.entries;
|
|
271
|
+
// Apply category filter
|
|
272
|
+
if (categoryFilter) {
|
|
273
|
+
validateCategory(categoryFilter);
|
|
274
|
+
entries = entries.filter((e) => e.category === categoryFilter);
|
|
275
|
+
}
|
|
276
|
+
// Apply limit
|
|
277
|
+
entries = entries.slice(0, limit);
|
|
278
|
+
return {
|
|
279
|
+
entries,
|
|
280
|
+
total: index.entries.length,
|
|
281
|
+
filtered: entries.length,
|
|
282
|
+
filters: categoryFilter ? { category: categoryFilter } : undefined,
|
|
283
|
+
};
|
|
284
|
+
},
|
|
285
|
+
get: async (args, _userId) => {
|
|
286
|
+
validateRequired(args, 'feedbackId');
|
|
287
|
+
const feedbackId = args.feedbackId;
|
|
288
|
+
const entry = readEntry(feedbackId);
|
|
289
|
+
if (!entry) {
|
|
290
|
+
throw new Error(`Feedback not found: ${feedbackId}`);
|
|
291
|
+
}
|
|
292
|
+
return entry;
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Create the feedback handler using operation router
|
|
298
|
+
*/
|
|
299
|
+
export function createFeedbackHandler() {
|
|
300
|
+
const operations = createFeedbackOperations();
|
|
301
|
+
return createOperationRouter('feedback', operations);
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../../src/tools/core/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/tools/core/help.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/tools/core/help.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA0DpE,eAAO,MAAM,QAAQ,EAAE,IAkBtB,CAAC;AAUF,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAyCvE;AAED,wBAAgB,iBAAiB,qEAGhC"}
|