engimcp 1.0.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/CHANGELOG.md +43 -0
- package/LICENSE +21 -0
- package/README.md +345 -0
- package/dist/audit/auditLog.d.ts +9 -0
- package/dist/audit/auditLog.js +20 -0
- package/dist/audit/auditLog.js.map +1 -0
- package/dist/bom/bomService.d.ts +23 -0
- package/dist/bom/bomService.js +44 -0
- package/dist/bom/bomService.js.map +1 -0
- package/dist/config/projectConfig.d.ts +16 -0
- package/dist/config/projectConfig.js +16 -0
- package/dist/config/projectConfig.js.map +1 -0
- package/dist/config/schema.d.ts +16 -0
- package/dist/config/schema.js +21 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/context/contextPack.d.ts +31 -0
- package/dist/context/contextPack.js +142 -0
- package/dist/context/contextPack.js.map +1 -0
- package/dist/context/tokenBudget.d.ts +1 -0
- package/dist/context/tokenBudget.js +4 -0
- package/dist/context/tokenBudget.js.map +1 -0
- package/dist/decisions/decisionService.d.ts +21 -0
- package/dist/decisions/decisionService.js +62 -0
- package/dist/decisions/decisionService.js.map +1 -0
- package/dist/dev/smokeProjectStatus.d.ts +1 -0
- package/dist/dev/smokeProjectStatus.js +9 -0
- package/dist/dev/smokeProjectStatus.js.map +1 -0
- package/dist/documents/documentService.d.ts +83 -0
- package/dist/documents/documentService.js +371 -0
- package/dist/documents/documentService.js.map +1 -0
- package/dist/documents/frontmatter.d.ts +14 -0
- package/dist/documents/frontmatter.js +30 -0
- package/dist/documents/frontmatter.js.map +1 -0
- package/dist/documents/headings.d.ts +6 -0
- package/dist/documents/headings.js +15 -0
- package/dist/documents/headings.js.map +1 -0
- package/dist/documents/markdownParser.d.ts +2 -0
- package/dist/documents/markdownParser.js +3 -0
- package/dist/documents/markdownParser.js.map +1 -0
- package/dist/documents/sectionPatch.d.ts +7 -0
- package/dist/documents/sectionPatch.js +73 -0
- package/dist/documents/sectionPatch.js.map +1 -0
- package/dist/documents/templates.d.ts +1 -0
- package/dist/documents/templates.js +62 -0
- package/dist/documents/templates.js.map +1 -0
- package/dist/filesystem/filesystemService.d.ts +168 -0
- package/dist/filesystem/filesystemService.js +606 -0
- package/dist/filesystem/filesystemService.js.map +1 -0
- package/dist/git/gitAdapter.d.ts +25 -0
- package/dist/git/gitAdapter.js +99 -0
- package/dist/git/gitAdapter.js.map +1 -0
- package/dist/graph/graphBuilder.d.ts +27 -0
- package/dist/graph/graphBuilder.js +126 -0
- package/dist/graph/graphBuilder.js.map +1 -0
- package/dist/graph/impact.d.ts +18 -0
- package/dist/graph/impact.js +53 -0
- package/dist/graph/impact.js.map +1 -0
- package/dist/graph/relations.d.ts +7 -0
- package/dist/graph/relations.js +28 -0
- package/dist/graph/relations.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +5 -0
- package/dist/mcp/errors.js +11 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/prompts.d.ts +2 -0
- package/dist/mcp/prompts.js +39 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +2 -0
- package/dist/mcp/resources.js +36 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/tools.d.ts +2 -0
- package/dist/mcp/tools.js +431 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/project/pathSafety.d.ts +6 -0
- package/dist/project/pathSafety.js +137 -0
- package/dist/project/pathSafety.js.map +1 -0
- package/dist/project/projectInit.d.ts +11 -0
- package/dist/project/projectInit.js +81 -0
- package/dist/project/projectInit.js.map +1 -0
- package/dist/project/projectService.d.ts +36 -0
- package/dist/project/projectService.js +60 -0
- package/dist/project/projectService.js.map +1 -0
- package/dist/project/writeGuards.d.ts +3 -0
- package/dist/project/writeGuards.js +46 -0
- package/dist/project/writeGuards.js.map +1 -0
- package/dist/requirements/requirementService.d.ts +19 -0
- package/dist/requirements/requirementService.js +72 -0
- package/dist/requirements/requirementService.js.map +1 -0
- package/dist/runtime/options.d.ts +7 -0
- package/dist/runtime/options.js +34 -0
- package/dist/runtime/options.js.map +1 -0
- package/dist/search/ftsIndex.d.ts +29 -0
- package/dist/search/ftsIndex.js +96 -0
- package/dist/search/ftsIndex.js.map +1 -0
- package/dist/search/searchService.d.ts +20 -0
- package/dist/search/searchService.js +17 -0
- package/dist/search/searchService.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/sqlite.d.ts +15 -0
- package/dist/storage/sqlite.js +80 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/tasks/taskService.d.ts +17 -0
- package/dist/tasks/taskService.js +57 -0
- package/dist/tasks/taskService.js.map +1 -0
- package/dist/utils/atomicWrite.d.ts +1 -0
- package/dist/utils/atomicWrite.js +10 -0
- package/dist/utils/atomicWrite.js.map +1 -0
- package/dist/utils/errors.d.ts +1 -0
- package/dist/utils/errors.js +2 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/ids.d.ts +3 -0
- package/dist/utils/ids.js +25 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/validation/checks.d.ts +1 -0
- package/dist/validation/checks.js +2 -0
- package/dist/validation/checks.js.map +1 -0
- package/dist/validation/validator.d.ts +18 -0
- package/dist/validation/validator.js +131 -0
- package/dist/validation/validator.js.map +1 -0
- package/dist/verification/testReportService.d.ts +19 -0
- package/dist/verification/testReportService.js +42 -0
- package/dist/verification/testReportService.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +49 -0
- package/templates/design_doc.md +24 -0
- package/templates/edr.md +58 -0
- package/templates/requirement.md +30 -0
- package/templates/task.md +22 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createBomItem } from "../bom/bomService.js";
|
|
3
|
+
import { buildContextPack } from "../context/contextPack.js";
|
|
4
|
+
import { createDecision } from "../decisions/decisionService.js";
|
|
5
|
+
import { addDocumentRelationship, createDocument, patchDocumentFrontmatter, patchDocumentSection, readDocument } from "../documents/documentService.js";
|
|
6
|
+
import { fsCopy, fsDelete, fsExists, fsGlob, fsList, fsMkdir, fsMove, fsRead, fsStat, fsTree, fsWrite } from "../filesystem/filesystemService.js";
|
|
7
|
+
import { queryGraph } from "../graph/graphBuilder.js";
|
|
8
|
+
import { analyzeImpact } from "../graph/impact.js";
|
|
9
|
+
import { relationTypes } from "../graph/relations.js";
|
|
10
|
+
import { createGitCommit, createProjectSnapshot, getGitStatus } from "../git/gitAdapter.js";
|
|
11
|
+
import { initProject } from "../project/projectInit.js";
|
|
12
|
+
import { getProjectMap, getProjectStatus } from "../project/projectService.js";
|
|
13
|
+
import { createRequirement } from "../requirements/requirementService.js";
|
|
14
|
+
import { searchProject } from "../search/searchService.js";
|
|
15
|
+
import { rebuildIndex } from "../storage/sqlite.js";
|
|
16
|
+
import { createTask } from "../tasks/taskService.js";
|
|
17
|
+
import { validateProject } from "../validation/validator.js";
|
|
18
|
+
import { createTestReport } from "../verification/testReportService.js";
|
|
19
|
+
const projectStatusInput = {
|
|
20
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
21
|
+
include_validation_summary: z.boolean().default(true),
|
|
22
|
+
include_git_status: z.boolean().default(true)
|
|
23
|
+
};
|
|
24
|
+
const projectInitInput = {
|
|
25
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
26
|
+
template: z.enum(["default"]).default("default"),
|
|
27
|
+
force: z.boolean().default(false)
|
|
28
|
+
};
|
|
29
|
+
const projectMapInput = {
|
|
30
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
31
|
+
kind: z.array(z.string()).optional(),
|
|
32
|
+
max_depth: z.number().int().positive().optional()
|
|
33
|
+
};
|
|
34
|
+
const docReadInput = {
|
|
35
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
36
|
+
id: z.string().nullable().optional(),
|
|
37
|
+
path: z.string().nullable().optional(),
|
|
38
|
+
kind: z.string().nullable().optional(),
|
|
39
|
+
heading_path: z.array(z.string()).nullable().optional(),
|
|
40
|
+
mode: z.enum(["full", "summary", "frontmatter", "headings", "section"]).default("full")
|
|
41
|
+
};
|
|
42
|
+
const docCreateInput = {
|
|
43
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
44
|
+
kind: z.string().min(1),
|
|
45
|
+
id: z.string().min(1),
|
|
46
|
+
title: z.string().min(1),
|
|
47
|
+
path: z.string().min(1),
|
|
48
|
+
template: z.string().default("design_doc"),
|
|
49
|
+
frontmatter: z.record(z.string(), z.unknown()).optional(),
|
|
50
|
+
dry_run: z.boolean().default(false)
|
|
51
|
+
};
|
|
52
|
+
const frontmatterPatchInput = {
|
|
53
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
54
|
+
id: z.string().min(1),
|
|
55
|
+
patch: z.record(z.string(), z.unknown()),
|
|
56
|
+
dry_run: z.boolean().default(false)
|
|
57
|
+
};
|
|
58
|
+
const docPatchSectionInput = {
|
|
59
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
60
|
+
id: z.string().min(1),
|
|
61
|
+
heading_path: z.array(z.string().min(1)).min(1),
|
|
62
|
+
operation: z.enum(["replace", "append", "prepend", "insert_after"]).default("replace"),
|
|
63
|
+
content: z.string(),
|
|
64
|
+
dry_run: z.boolean().default(false)
|
|
65
|
+
};
|
|
66
|
+
const docAddRelationshipInput = {
|
|
67
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
68
|
+
id: z.string().min(1),
|
|
69
|
+
relation_type: z.enum(relationTypes),
|
|
70
|
+
target_id: z.string().min(1),
|
|
71
|
+
dry_run: z.boolean().default(false)
|
|
72
|
+
};
|
|
73
|
+
const validateProjectInput = {
|
|
74
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
75
|
+
checks: z.array(z.string()).optional(),
|
|
76
|
+
severity: z.enum(["error", "warning"]).default("warning")
|
|
77
|
+
};
|
|
78
|
+
const graphQueryInput = {
|
|
79
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
80
|
+
id: z.string().min(1),
|
|
81
|
+
direction: z.enum(["outgoing", "incoming", "both"]).default("both"),
|
|
82
|
+
depth: z.number().int().positive().default(1),
|
|
83
|
+
relation_types: z.array(z.enum(relationTypes)).optional()
|
|
84
|
+
};
|
|
85
|
+
const impactAnalyzeInput = {
|
|
86
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
87
|
+
changed_ids: z.array(z.string().min(1)).min(1),
|
|
88
|
+
change_description: z.string().optional(),
|
|
89
|
+
depth: z.number().int().positive().default(2)
|
|
90
|
+
};
|
|
91
|
+
const requirementCreateInput = {
|
|
92
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
93
|
+
requirement_type: z.enum(["functional", "non_functional", "security", "acceptance"]),
|
|
94
|
+
title: z.string().min(1),
|
|
95
|
+
statement: z.string().min(1),
|
|
96
|
+
priority: z.enum(["must", "should", "could", "wont"]),
|
|
97
|
+
rationale: z.string().optional(),
|
|
98
|
+
related: z.array(z.string()).optional(),
|
|
99
|
+
dry_run: z.boolean().default(false)
|
|
100
|
+
};
|
|
101
|
+
const decisionCreateInput = {
|
|
102
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
103
|
+
title: z.string().min(1),
|
|
104
|
+
status: z.enum(["proposed", "accepted", "deprecated", "superseded"]).default("proposed"),
|
|
105
|
+
context: z.string().min(1),
|
|
106
|
+
options: z.array(z.string()).min(1),
|
|
107
|
+
decision: z.string().min(1),
|
|
108
|
+
consequences: z.string().min(1),
|
|
109
|
+
related_requirements: z.array(z.string()).optional(),
|
|
110
|
+
impacts: z.array(z.string()).optional(),
|
|
111
|
+
dry_run: z.boolean().default(false)
|
|
112
|
+
};
|
|
113
|
+
const taskCreateInput = {
|
|
114
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
115
|
+
title: z.string().min(1),
|
|
116
|
+
priority: z.enum(["low", "medium", "high"]).default("medium"),
|
|
117
|
+
related: z.array(z.string()).optional(),
|
|
118
|
+
due: z.string().nullable().optional(),
|
|
119
|
+
dry_run: z.boolean().default(false)
|
|
120
|
+
};
|
|
121
|
+
const contextPackInput = {
|
|
122
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
123
|
+
task: z.string().min(1),
|
|
124
|
+
seed_ids: z.array(z.string()).optional(),
|
|
125
|
+
max_tokens: z.number().int().positive().default(12000),
|
|
126
|
+
include_sections: z.boolean().default(true),
|
|
127
|
+
include_decisions: z.boolean().default(true),
|
|
128
|
+
include_open_tasks: z.boolean().default(true),
|
|
129
|
+
include_validation: z.boolean().default(true)
|
|
130
|
+
};
|
|
131
|
+
const gitStatusInput = {
|
|
132
|
+
root: z.string().min(1).describe("Absolute path to the project root.")
|
|
133
|
+
};
|
|
134
|
+
const projectSnapshotInput = {
|
|
135
|
+
root: z.string().min(1).describe("Absolute path to the project root.")
|
|
136
|
+
};
|
|
137
|
+
const gitCommitInput = {
|
|
138
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
139
|
+
message: z.string().min(1)
|
|
140
|
+
};
|
|
141
|
+
const searchInput = {
|
|
142
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
143
|
+
query: z.string().min(1),
|
|
144
|
+
filters: z
|
|
145
|
+
.object({
|
|
146
|
+
kind: z.array(z.string()).optional(),
|
|
147
|
+
status: z.array(z.string()).optional(),
|
|
148
|
+
tags: z.array(z.string()).optional(),
|
|
149
|
+
frontmatter: z.record(z.string(), z.unknown()).optional()
|
|
150
|
+
})
|
|
151
|
+
.optional(),
|
|
152
|
+
limit: z.number().int().positive().default(20)
|
|
153
|
+
};
|
|
154
|
+
const rebuildIndexInput = {
|
|
155
|
+
root: z.string().min(1).describe("Absolute path to the project root.")
|
|
156
|
+
};
|
|
157
|
+
const testReportCreateInput = {
|
|
158
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
159
|
+
id: z.string().min(1),
|
|
160
|
+
title: z.string().min(1),
|
|
161
|
+
verifies: z.array(z.string().min(1)).min(1),
|
|
162
|
+
result: z.enum(["pass", "fail", "blocked"]),
|
|
163
|
+
dry_run: z.boolean().default(false)
|
|
164
|
+
};
|
|
165
|
+
const bomItemCreateInput = {
|
|
166
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
167
|
+
id: z.string().min(1),
|
|
168
|
+
part_name: z.string().min(1),
|
|
169
|
+
quantity: z.number().positive(),
|
|
170
|
+
status: z.enum(["candidate", "approved", "rejected"]).default("candidate"),
|
|
171
|
+
source: z.string().optional(),
|
|
172
|
+
unit_cost: z.number().nonnegative().optional(),
|
|
173
|
+
currency: z.string().optional(),
|
|
174
|
+
related: z.array(z.string().min(1)).optional(),
|
|
175
|
+
dry_run: z.boolean().default(false)
|
|
176
|
+
};
|
|
177
|
+
const fsTreeInput = {
|
|
178
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
179
|
+
path: z.string().default("."),
|
|
180
|
+
max_depth: z.number().int().positive().default(4),
|
|
181
|
+
include_files: z.boolean().default(true),
|
|
182
|
+
include_dirs: z.boolean().default(true),
|
|
183
|
+
respect_deny_patterns: z.boolean().default(true)
|
|
184
|
+
};
|
|
185
|
+
const fsListInput = {
|
|
186
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
187
|
+
path: z.string().default("."),
|
|
188
|
+
recursive: z.boolean().default(false),
|
|
189
|
+
include_hidden: z.boolean().default(false)
|
|
190
|
+
};
|
|
191
|
+
const fsReadInput = {
|
|
192
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
193
|
+
path: z.string().min(1),
|
|
194
|
+
encoding: z.enum(["utf-8"]).default("utf-8"),
|
|
195
|
+
max_bytes: z.number().int().positive().default(200000),
|
|
196
|
+
mode: z.enum(["full", "head", "tail", "range", "metadata_only"]).default("full"),
|
|
197
|
+
offset: z.number().int().nonnegative().optional(),
|
|
198
|
+
length: z.number().int().positive().optional()
|
|
199
|
+
};
|
|
200
|
+
const fsWriteInput = {
|
|
201
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
202
|
+
path: z.string().min(1),
|
|
203
|
+
content: z.string(),
|
|
204
|
+
mode: z.enum(["create_new", "overwrite", "append"]).default("create_new"),
|
|
205
|
+
create_dirs: z.boolean().default(true),
|
|
206
|
+
dry_run: z.boolean().default(false)
|
|
207
|
+
};
|
|
208
|
+
const fsMkdirInput = {
|
|
209
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
210
|
+
path: z.string().min(1),
|
|
211
|
+
parents: z.boolean().default(true),
|
|
212
|
+
dry_run: z.boolean().default(false)
|
|
213
|
+
};
|
|
214
|
+
const fsMoveInput = {
|
|
215
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
216
|
+
source: z.string().min(1),
|
|
217
|
+
target: z.string().min(1),
|
|
218
|
+
update_links: z.boolean().default(false),
|
|
219
|
+
overwrite: z.boolean().default(false),
|
|
220
|
+
dry_run: z.boolean().default(false)
|
|
221
|
+
};
|
|
222
|
+
const fsCopyInput = {
|
|
223
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
224
|
+
source: z.string().min(1),
|
|
225
|
+
target: z.string().min(1),
|
|
226
|
+
overwrite: z.boolean().default(false),
|
|
227
|
+
dry_run: z.boolean().default(false)
|
|
228
|
+
};
|
|
229
|
+
const fsDeleteInput = {
|
|
230
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
231
|
+
path: z.string().min(1),
|
|
232
|
+
mode: z.enum(["trash"]).default("trash"),
|
|
233
|
+
recursive: z.boolean().default(false),
|
|
234
|
+
dry_run: z.boolean().default(false),
|
|
235
|
+
reason: z.string().optional(),
|
|
236
|
+
force: z.boolean().default(false)
|
|
237
|
+
};
|
|
238
|
+
const fsExistsInput = {
|
|
239
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
240
|
+
path: z.string().min(1)
|
|
241
|
+
};
|
|
242
|
+
const fsStatInput = {
|
|
243
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
244
|
+
path: z.string().min(1)
|
|
245
|
+
};
|
|
246
|
+
const fsGlobInput = {
|
|
247
|
+
root: z.string().min(1).describe("Absolute path to the project root."),
|
|
248
|
+
patterns: z.array(z.string().min(1)).min(1),
|
|
249
|
+
exclude: z.array(z.string().min(1)).optional(),
|
|
250
|
+
limit: z.number().int().positive().default(200)
|
|
251
|
+
};
|
|
252
|
+
function textResult(value) {
|
|
253
|
+
const result = {
|
|
254
|
+
content: [
|
|
255
|
+
{
|
|
256
|
+
type: "text",
|
|
257
|
+
text: JSON.stringify(value, null, 2)
|
|
258
|
+
}
|
|
259
|
+
]
|
|
260
|
+
};
|
|
261
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
262
|
+
result.structuredContent = value;
|
|
263
|
+
}
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
const genericOutputSchema = {
|
|
267
|
+
audit_id: z.string().optional(),
|
|
268
|
+
broken_links_created: z.array(z.string()).optional(),
|
|
269
|
+
changed: z.boolean().optional(),
|
|
270
|
+
commit: z.string().optional(),
|
|
271
|
+
content: z.unknown().optional(),
|
|
272
|
+
copied: z.unknown().optional(),
|
|
273
|
+
created: z.boolean().optional(),
|
|
274
|
+
created_paths: z.array(z.string()).optional(),
|
|
275
|
+
decisions: z.number().optional(),
|
|
276
|
+
deleted: z.unknown().optional(),
|
|
277
|
+
diff_summary: z.string().optional(),
|
|
278
|
+
dirty: z.boolean().optional(),
|
|
279
|
+
documents: z.number().optional(),
|
|
280
|
+
edges: z.unknown().optional(),
|
|
281
|
+
errors: z.unknown().optional(),
|
|
282
|
+
estimated_tokens: z.number().optional(),
|
|
283
|
+
excluded: z.unknown().optional(),
|
|
284
|
+
exists: z.boolean().optional(),
|
|
285
|
+
files: z.unknown().optional(),
|
|
286
|
+
frontmatter: z.unknown().optional(),
|
|
287
|
+
git: z.unknown().optional(),
|
|
288
|
+
headings: z.unknown().optional(),
|
|
289
|
+
id: z.string().optional(),
|
|
290
|
+
impact: z.unknown().optional(),
|
|
291
|
+
index: z.unknown().optional(),
|
|
292
|
+
is_git_repo: z.boolean().optional(),
|
|
293
|
+
items: z.unknown().optional(),
|
|
294
|
+
links: z.unknown().optional(),
|
|
295
|
+
links_updated: z.unknown().optional(),
|
|
296
|
+
matches: z.array(z.string()).optional(),
|
|
297
|
+
message: z.string().optional(),
|
|
298
|
+
moved: z.unknown().optional(),
|
|
299
|
+
nodes: z.unknown().optional(),
|
|
300
|
+
ok: z.boolean().optional(),
|
|
301
|
+
pack_id: z.string().optional(),
|
|
302
|
+
path: z.string().optional(),
|
|
303
|
+
project_id: z.string().optional(),
|
|
304
|
+
recommended_actions: z.unknown().optional(),
|
|
305
|
+
recommended_reads: z.unknown().optional(),
|
|
306
|
+
relations: z.number().optional(),
|
|
307
|
+
requirements: z.number().optional(),
|
|
308
|
+
results: z.unknown().optional(),
|
|
309
|
+
root: z.string().optional(),
|
|
310
|
+
size: z.number().optional(),
|
|
311
|
+
status: z.unknown().optional(),
|
|
312
|
+
summary: z.string().optional(),
|
|
313
|
+
task: z.string().optional(),
|
|
314
|
+
tasks_open: z.number().optional(),
|
|
315
|
+
trash_path: z.string().optional(),
|
|
316
|
+
truncated: z.boolean().optional(),
|
|
317
|
+
type: z.string().optional(),
|
|
318
|
+
validation: z.unknown().optional(),
|
|
319
|
+
validation_issues: z.number().optional(),
|
|
320
|
+
warnings: z.unknown().optional()
|
|
321
|
+
};
|
|
322
|
+
function registerStructuredTool(server, name, description, inputSchema, handler) {
|
|
323
|
+
server.registerTool(name, {
|
|
324
|
+
description,
|
|
325
|
+
inputSchema,
|
|
326
|
+
outputSchema: genericOutputSchema
|
|
327
|
+
}, (async (input) => handler(input)));
|
|
328
|
+
}
|
|
329
|
+
export function registerTools(server) {
|
|
330
|
+
registerStructuredTool(server, "engi_project_init", "Create a new EngiMCP project structure.", projectInitInput, async (input) => {
|
|
331
|
+
return textResult(await initProject(input));
|
|
332
|
+
});
|
|
333
|
+
registerStructuredTool(server, "engi_project_status", "Return a concise EngiMCP project status.", projectStatusInput, async (input) => {
|
|
334
|
+
const status = await getProjectStatus(input);
|
|
335
|
+
return textResult(status);
|
|
336
|
+
});
|
|
337
|
+
registerStructuredTool(server, "engi_project_map", "Return a tree/map of managed Markdown documents.", projectMapInput, async (input) => {
|
|
338
|
+
return textResult(await getProjectMap(input));
|
|
339
|
+
});
|
|
340
|
+
registerStructuredTool(server, "engi_doc_read", "Read a managed Markdown document by ID or path.", docReadInput, async (input) => {
|
|
341
|
+
return textResult(await readDocument(input.root, input));
|
|
342
|
+
});
|
|
343
|
+
registerStructuredTool(server, "engi_doc_create", "Create a Markdown document from a template.", docCreateInput, async (input) => {
|
|
344
|
+
return textResult(await createDocument(input));
|
|
345
|
+
});
|
|
346
|
+
registerStructuredTool(server, "engi_frontmatter_patch", "Patch YAML frontmatter for a managed document.", frontmatterPatchInput, async (input) => {
|
|
347
|
+
return textResult(await patchDocumentFrontmatter(input));
|
|
348
|
+
});
|
|
349
|
+
registerStructuredTool(server, "engi_doc_patch_section", "Patch a Markdown section by heading path.", docPatchSectionInput, async (input) => {
|
|
350
|
+
return textResult(await patchDocumentSection(input));
|
|
351
|
+
});
|
|
352
|
+
registerStructuredTool(server, "engi_doc_add_relationship", "Add a frontmatter relationship to a managed document.", docAddRelationshipInput, async (input) => {
|
|
353
|
+
return textResult(await addDocumentRelationship(input));
|
|
354
|
+
});
|
|
355
|
+
registerStructuredTool(server, "engi_validate_project", "Validate IDs, frontmatter, and basic document relationships.", validateProjectInput, async (input) => {
|
|
356
|
+
return textResult(await validateProject(input));
|
|
357
|
+
});
|
|
358
|
+
registerStructuredTool(server, "engi_graph_query", "Return graph neighbors for a document or entity.", graphQueryInput, async (input) => {
|
|
359
|
+
return textResult(await queryGraph(input));
|
|
360
|
+
});
|
|
361
|
+
registerStructuredTool(server, "engi_impact_analyze", "Analyze transitive document impact for changed IDs.", impactAnalyzeInput, async (input) => {
|
|
362
|
+
return textResult(await analyzeImpact(input));
|
|
363
|
+
});
|
|
364
|
+
registerStructuredTool(server, "engi_requirement_create", "Create a requirement document with the next typed requirement ID.", requirementCreateInput, async (input) => {
|
|
365
|
+
return textResult(await createRequirement(input));
|
|
366
|
+
});
|
|
367
|
+
registerStructuredTool(server, "engi_decision_create", "Create an Engineering Decision Record.", decisionCreateInput, async (input) => {
|
|
368
|
+
return textResult(await createDecision(input));
|
|
369
|
+
});
|
|
370
|
+
registerStructuredTool(server, "engi_task_create", "Create a project task document.", taskCreateInput, async (input) => {
|
|
371
|
+
return textResult(await createTask(input));
|
|
372
|
+
});
|
|
373
|
+
registerStructuredTool(server, "engi_context_pack", "Build compact task-specific context from project documents.", contextPackInput, async (input) => {
|
|
374
|
+
return textResult(await buildContextPack(input));
|
|
375
|
+
});
|
|
376
|
+
registerStructuredTool(server, "engi_git_status", "Return Git dirty status and changed files.", gitStatusInput, async (input) => {
|
|
377
|
+
return textResult(await getGitStatus(input.root));
|
|
378
|
+
});
|
|
379
|
+
registerStructuredTool(server, "engi_project_snapshot", "Create a local snapshot of project files before risky changes.", projectSnapshotInput, async (input) => {
|
|
380
|
+
return textResult(await createProjectSnapshot(input.root));
|
|
381
|
+
});
|
|
382
|
+
registerStructuredTool(server, "engi_git_commit", "Create a Git commit for current project changes.", gitCommitInput, async (input) => {
|
|
383
|
+
return textResult(await createGitCommit(input.root, input.message));
|
|
384
|
+
});
|
|
385
|
+
registerStructuredTool(server, "engi_search", "Search managed Markdown documents.", searchInput, async (input) => {
|
|
386
|
+
return textResult(await searchProject(input));
|
|
387
|
+
});
|
|
388
|
+
registerStructuredTool(server, "engi_rebuild_index", "Rebuild the derived SQLite project index.", rebuildIndexInput, async (input) => {
|
|
389
|
+
return textResult(await rebuildIndex(input.root));
|
|
390
|
+
});
|
|
391
|
+
registerStructuredTool(server, "engi_test_report_create", "Create a test report linked to verified requirements.", testReportCreateInput, async (input) => {
|
|
392
|
+
return textResult(await createTestReport(input));
|
|
393
|
+
});
|
|
394
|
+
registerStructuredTool(server, "engi_bom_item_create", "Create a BOM item document linked to related entities.", bomItemCreateInput, async (input) => {
|
|
395
|
+
return textResult(await createBomItem(input));
|
|
396
|
+
});
|
|
397
|
+
registerStructuredTool(server, "engi_fs_tree", "Return a bounded safe project tree.", fsTreeInput, async (input) => {
|
|
398
|
+
return textResult(await fsTree(input));
|
|
399
|
+
});
|
|
400
|
+
registerStructuredTool(server, "engi_fs_list", "List a project directory safely.", fsListInput, async (input) => {
|
|
401
|
+
return textResult(await fsList(input));
|
|
402
|
+
});
|
|
403
|
+
registerStructuredTool(server, "engi_fs_read", "Read an ordinary project file safely.", fsReadInput, async (input) => {
|
|
404
|
+
return textResult(await fsRead(input));
|
|
405
|
+
});
|
|
406
|
+
registerStructuredTool(server, "engi_fs_write", "Create, overwrite, or append an ordinary project file.", fsWriteInput, async (input) => {
|
|
407
|
+
return textResult(await fsWrite(input));
|
|
408
|
+
});
|
|
409
|
+
registerStructuredTool(server, "engi_fs_mkdir", "Create a project directory safely.", fsMkdirInput, async (input) => {
|
|
410
|
+
return textResult(await fsMkdir(input));
|
|
411
|
+
});
|
|
412
|
+
registerStructuredTool(server, "engi_fs_move", "Move or rename a project file or directory safely.", fsMoveInput, async (input) => {
|
|
413
|
+
return textResult(await fsMove(input));
|
|
414
|
+
});
|
|
415
|
+
registerStructuredTool(server, "engi_fs_copy", "Copy a project file or directory safely.", fsCopyInput, async (input) => {
|
|
416
|
+
return textResult(await fsCopy(input));
|
|
417
|
+
});
|
|
418
|
+
registerStructuredTool(server, "engi_fs_delete", "Move a project file or directory to project trash.", fsDeleteInput, async (input) => {
|
|
419
|
+
return textResult(await fsDelete(input));
|
|
420
|
+
});
|
|
421
|
+
registerStructuredTool(server, "engi_fs_exists", "Check whether a project path exists.", fsExistsInput, async (input) => {
|
|
422
|
+
return textResult(await fsExists(input));
|
|
423
|
+
});
|
|
424
|
+
registerStructuredTool(server, "engi_fs_stat", "Return project path metadata.", fsStatInput, async (input) => {
|
|
425
|
+
return textResult(await fsStat(input));
|
|
426
|
+
});
|
|
427
|
+
registerStructuredTool(server, "engi_fs_glob", "Find project files by safe glob patterns.", fsGlobInput, async (input) => {
|
|
428
|
+
return textResult(await fsGlob(input));
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function assertAbsoluteRoot(root: string): string;
|
|
2
|
+
export declare function isPathInsideRoot(root: string, target: string): boolean;
|
|
3
|
+
export declare function resolveInsideRoot(root: string, relativeOrAbsolutePath: string): string;
|
|
4
|
+
export declare function resolveSafePath(root: string, relativeOrAbsolutePath: string): Promise<string>;
|
|
5
|
+
export declare function isDeniedPath(relativePath: string): boolean;
|
|
6
|
+
export declare function isDeniedPathForRoot(root: string, relativePath: string): Promise<boolean>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { lstat, realpath } from "node:fs/promises";
|
|
3
|
+
import { readProjectConfig } from "../config/projectConfig.js";
|
|
4
|
+
import { EngiMcpError } from "../mcp/errors.js";
|
|
5
|
+
import { getRuntimeOptions } from "../runtime/options.js";
|
|
6
|
+
export function assertAbsoluteRoot(root) {
|
|
7
|
+
if (!path.isAbsolute(root)) {
|
|
8
|
+
throw new EngiMcpError("INVALID_ROOT", "Project root must be an absolute path.");
|
|
9
|
+
}
|
|
10
|
+
const resolvedRoot = path.resolve(root);
|
|
11
|
+
const runtimeRoot = getRuntimeOptions().root;
|
|
12
|
+
if (runtimeRoot && path.resolve(runtimeRoot) !== resolvedRoot) {
|
|
13
|
+
throw new EngiMcpError("ROOT_MISMATCH", `Project root must match the configured project root: ${runtimeRoot}`);
|
|
14
|
+
}
|
|
15
|
+
return resolvedRoot;
|
|
16
|
+
}
|
|
17
|
+
export function isPathInsideRoot(root, target) {
|
|
18
|
+
const relative = path.relative(root, target);
|
|
19
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
20
|
+
}
|
|
21
|
+
export function resolveInsideRoot(root, relativeOrAbsolutePath) {
|
|
22
|
+
const target = path.resolve(root, relativeOrAbsolutePath);
|
|
23
|
+
if (!isPathInsideRoot(root, target)) {
|
|
24
|
+
throw new EngiMcpError("PATH_OUTSIDE_ROOT", "Path must stay inside project root.");
|
|
25
|
+
}
|
|
26
|
+
return target;
|
|
27
|
+
}
|
|
28
|
+
export async function resolveSafePath(root, relativeOrAbsolutePath) {
|
|
29
|
+
const resolvedRoot = assertAbsoluteRoot(root);
|
|
30
|
+
const target = resolveInsideRoot(resolvedRoot, relativeOrAbsolutePath);
|
|
31
|
+
const relative = path.relative(resolvedRoot, target);
|
|
32
|
+
if (await isDeniedPathForRoot(resolvedRoot, relative)) {
|
|
33
|
+
throw new EngiMcpError("PATH_DENIED", `Path is denied by project safety rules: ${relative}`);
|
|
34
|
+
}
|
|
35
|
+
await assertRealPathInsideRoot(resolvedRoot, target);
|
|
36
|
+
return target;
|
|
37
|
+
}
|
|
38
|
+
export function isDeniedPath(relativePath) {
|
|
39
|
+
return isDeniedByPatterns(relativePath, defaultDenyPatterns);
|
|
40
|
+
}
|
|
41
|
+
export async function isDeniedPathForRoot(root, relativePath) {
|
|
42
|
+
const patterns = [...defaultDenyPatterns];
|
|
43
|
+
try {
|
|
44
|
+
const config = await readProjectConfig(root);
|
|
45
|
+
patterns.push(...(config.security?.deny_patterns ?? []));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Project config may not exist during early initialization; safe defaults still apply.
|
|
49
|
+
}
|
|
50
|
+
return isDeniedByPatterns(relativePath, patterns);
|
|
51
|
+
}
|
|
52
|
+
const defaultDenyPatterns = [
|
|
53
|
+
"**/.git",
|
|
54
|
+
"**/.git/**",
|
|
55
|
+
"**/.env",
|
|
56
|
+
"**/.ssh",
|
|
57
|
+
"**/.ssh/**",
|
|
58
|
+
"**/node_modules",
|
|
59
|
+
"**/node_modules/**",
|
|
60
|
+
"**/.engimcp/index.sqlite",
|
|
61
|
+
"**/.engimcp/cache",
|
|
62
|
+
"**/.engimcp/cache/**",
|
|
63
|
+
"**/*secret*",
|
|
64
|
+
"**/*private*",
|
|
65
|
+
"**/*.pem",
|
|
66
|
+
"**/*.key"
|
|
67
|
+
];
|
|
68
|
+
function isDeniedByPatterns(relativePath, patterns) {
|
|
69
|
+
const normalized = relativePath.split(path.sep).join("/");
|
|
70
|
+
return patterns.some((pattern) => globToRegExp(pattern).test(normalized));
|
|
71
|
+
}
|
|
72
|
+
async function assertRealPathInsideRoot(root, target) {
|
|
73
|
+
const realRoot = await realpath(root);
|
|
74
|
+
try {
|
|
75
|
+
const realTarget = await realpath(target);
|
|
76
|
+
if (!isPathInsideRoot(realRoot, realTarget)) {
|
|
77
|
+
throw new EngiMcpError("SYMLINK_OUTSIDE_ROOT", "Path resolves outside project root.");
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof EngiMcpError) {
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
let parent = path.dirname(target);
|
|
87
|
+
while (parent !== root && parent !== path.dirname(parent)) {
|
|
88
|
+
try {
|
|
89
|
+
const stat = await lstat(parent);
|
|
90
|
+
if (stat.isSymbolicLink()) {
|
|
91
|
+
const realParent = await realpath(parent);
|
|
92
|
+
if (!isPathInsideRoot(realRoot, realParent)) {
|
|
93
|
+
throw new EngiMcpError("SYMLINK_OUTSIDE_ROOT", "Path resolves outside project root.");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error instanceof EngiMcpError) {
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
parent = path.dirname(parent);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function globToRegExp(pattern) {
|
|
107
|
+
const normalized = pattern.split(path.sep).join("/");
|
|
108
|
+
let output = "^";
|
|
109
|
+
for (let index = 0; index < normalized.length; index += 1) {
|
|
110
|
+
const char = normalized[index];
|
|
111
|
+
const next = normalized[index + 1];
|
|
112
|
+
if (char === "*" && next === "*") {
|
|
113
|
+
if (normalized[index + 2] === "/") {
|
|
114
|
+
output += "(?:.*/)?";
|
|
115
|
+
index += 2;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
output += ".*";
|
|
119
|
+
index += 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (char === "*") {
|
|
123
|
+
output += "[^/]*";
|
|
124
|
+
}
|
|
125
|
+
else if (char === "?") {
|
|
126
|
+
output += "[^/]";
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
output += escapeRegExp(char ?? "");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return new RegExp(`${output}$`, "i");
|
|
133
|
+
}
|
|
134
|
+
function escapeRegExp(value) {
|
|
135
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=pathSafety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathSafety.js","sourceRoot":"","sources":["../../src/project/pathSafety.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,wCAAwC,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC,IAAI,CAAC;IAC7C,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,YAAY,EAAE,CAAC;QAC9D,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,wDAAwD,WAAW,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAc;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,sBAA8B;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IAE1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,sBAA8B;IAE9B,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAErD,IAAI,MAAM,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,2CAA2C,QAAQ,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,wBAAwB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,kBAAkB,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,YAAoB;IAC1E,MAAM,QAAQ,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,uFAAuF;IACzF,CAAC;IAED,OAAO,kBAAkB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,mBAAmB,GAAG;IAC1B,SAAS;IACT,YAAY;IACZ,SAAS;IACT,SAAS;IACT,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;IACpB,0BAA0B;IAC1B,mBAAmB;IACnB,sBAAsB;IACtB,aAAa;IACb,cAAc;IACd,UAAU;IACV,UAAU;CACX,CAAC;AAEF,SAAS,kBAAkB,CAAC,YAAoB,EAAE,QAAkB;IAClE,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,MAAc;IAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,qCAAqC,CAAC,CAAC;QACxF,CAAC;QACD,OAAO;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;oBAC5C,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,qCAAqC,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBAClC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,MAAM,GAAG,GAAG,CAAC;IAEjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClC,MAAM,IAAI,UAAU,CAAC;gBACrB,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,IAAI,CAAC;gBACf,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,OAAO,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,MAAM,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ProjectInitInput {
|
|
2
|
+
root: string;
|
|
3
|
+
template?: "default";
|
|
4
|
+
force?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ProjectInitResult {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
created_paths: string[];
|
|
9
|
+
warnings: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function initProject(input: ProjectInitInput): Promise<ProjectInitResult>;
|