mcp-architector 1.2.2 → 1.5.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.
@@ -0,0 +1,70 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { getProjectDir, isScriptsMigrated, setMigratedScriptsFlag, writeEntry, } from './storage.js';
4
+ function getScriptsDir(projectId) {
5
+ return path.join(getProjectDir(projectId), 'scripts');
6
+ }
7
+ async function listLegacyScriptIds(projectId) {
8
+ try {
9
+ const files = await fs.readdir(getScriptsDir(projectId));
10
+ return files.filter((f) => f.endsWith('.json')).map((f) => f.replace('.json', ''));
11
+ }
12
+ catch (error) {
13
+ if (error.code === 'ENOENT') {
14
+ return [];
15
+ }
16
+ throw error;
17
+ }
18
+ }
19
+ async function readLegacyScript(projectId, scriptId) {
20
+ try {
21
+ const content = await fs.readFile(path.join(getScriptsDir(projectId), `${scriptId}.json`), 'utf-8');
22
+ return JSON.parse(content);
23
+ }
24
+ catch (error) {
25
+ if (error.code === 'ENOENT') {
26
+ return null;
27
+ }
28
+ throw error;
29
+ }
30
+ }
31
+ export async function removeScriptsDirectory(projectId) {
32
+ await fs.rm(getScriptsDir(projectId), { recursive: true, force: true });
33
+ }
34
+ function scriptToEntry(script) {
35
+ return {
36
+ id: script.scriptId,
37
+ kind: 'script',
38
+ title: script.scriptName,
39
+ summary: script.description,
40
+ payload: {
41
+ usage: script.usage,
42
+ examples: script.examples,
43
+ parameters: script.parameters,
44
+ notes: script.notes ?? '',
45
+ },
46
+ tags: ['script', 'migrated'],
47
+ createdAt: script.createdAt,
48
+ updatedAt: script.updatedAt,
49
+ };
50
+ }
51
+ export async function migrateScriptsToEntries(projectId) {
52
+ if (await isScriptsMigrated(projectId)) {
53
+ await removeScriptsDirectory(projectId);
54
+ return { migrated: false, count: 0 };
55
+ }
56
+ const scriptIds = await listLegacyScriptIds(projectId);
57
+ let count = 0;
58
+ for (const scriptId of scriptIds) {
59
+ const script = await readLegacyScript(projectId, scriptId);
60
+ if (!script) {
61
+ continue;
62
+ }
63
+ await writeEntry(projectId, scriptToEntry(script));
64
+ count += 1;
65
+ }
66
+ await setMigratedScriptsFlag(projectId);
67
+ await removeScriptsDirectory(projectId);
68
+ return { migrated: count > 0, count };
69
+ }
70
+ //# sourceMappingURL=migrate-scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-scripts.js","sourceRoot":"","sources":["../src/migrate-scripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { BuiltinSliceInfo, Entry, EntryFilter, ProjectArchitecture, SliceBuildOptions, SliceDefinition, SliceResponse } from './types.js';
2
+ export declare const BUILTIN_SLICES: BuiltinSliceInfo[];
3
+ export declare function getBuiltinSlice(sliceId: string): BuiltinSliceInfo | undefined;
4
+ export declare function resolveSliceFilter(sliceId: string, customSlice: SliceDefinition | null): EntryFilter | null;
5
+ export declare function matchesEntryFilter(entry: Entry, filter: EntryFilter): boolean;
6
+ export declare function clampLimit(limit?: number): number;
7
+ export declare function buildSliceResponse(sliceId: string, sliceTitle: string, entries: Entry[], options: SliceBuildOptions, architecture: ProjectArchitecture | null): SliceResponse;
8
+ export declare function countEntriesForKinds(indexItems: {
9
+ kind: string;
10
+ }[], kinds: string[]): number;
11
+ //# sourceMappingURL=slices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slices.d.ts","sourceRoot":"","sources":["../src/slices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,KAAK,EACL,WAAW,EAEX,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EAEf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,cAAc,EAAE,gBAAgB,EAqE5C,CAAC;AAKF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE7E;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,eAAe,GAAG,IAAI,GAClC,WAAW,GAAG,IAAI,CAYpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAyB7E;AAgED,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,KAAK,EAAE,EAChB,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,mBAAmB,GAAG,IAAI,GACvC,aAAa,CA4Df;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC9B,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,CAGR"}
package/dist/slices.js ADDED
@@ -0,0 +1,229 @@
1
+ export const BUILTIN_SLICES = [
2
+ {
3
+ id: 'api',
4
+ title: 'API and entry points',
5
+ description: 'HTTP, gRPC, GraphQL, WebSocket, MCP tools/resources, CLI commands',
6
+ kinds: [
7
+ 'http-endpoint',
8
+ 'grpc-method',
9
+ 'graphql-field',
10
+ 'websocket-route',
11
+ 'mcp-tool',
12
+ 'mcp-resource',
13
+ 'cli-command',
14
+ ],
15
+ },
16
+ {
17
+ id: 'persistence',
18
+ title: 'Persistence',
19
+ description: 'Tables, entities, repositories, migrations',
20
+ kinds: ['db-table', 'entity', 'repository', 'migration'],
21
+ },
22
+ {
23
+ id: 'events',
24
+ title: 'Events and messaging',
25
+ description: 'Events, topics, queues, messages',
26
+ kinds: ['event', 'topic', 'queue', 'message'],
27
+ },
28
+ {
29
+ id: 'domain',
30
+ title: 'Domain language',
31
+ description: 'Glossary, invariants, lifecycles',
32
+ kinds: ['glossary', 'invariant', 'lifecycle'],
33
+ },
34
+ {
35
+ id: 'flows',
36
+ title: 'Flows and scenarios',
37
+ description: 'End-to-end flows with steps in payload',
38
+ kinds: ['flow'],
39
+ },
40
+ {
41
+ id: 'integrations',
42
+ title: 'Integrations',
43
+ description: 'External systems and APIs',
44
+ kinds: ['integration', 'external-api'],
45
+ },
46
+ {
47
+ id: 'config',
48
+ title: 'Configuration',
49
+ description: 'Environment variables, feature flags, config keys',
50
+ kinds: ['env-var', 'feature-flag', 'config-key'],
51
+ },
52
+ {
53
+ id: 'runtime',
54
+ title: 'Runtime',
55
+ description: 'Services, entrypoints, scheduled jobs',
56
+ kinds: ['service', 'entrypoint', 'job'],
57
+ },
58
+ {
59
+ id: 'decisions',
60
+ title: 'Decisions and constraints',
61
+ description: 'ADRs and architectural constraints',
62
+ kinds: ['adr', 'constraint'],
63
+ },
64
+ {
65
+ id: 'scripts',
66
+ title: 'Scripts and commands',
67
+ description: 'Build, test, deploy commands (kind=script)',
68
+ kinds: ['script'],
69
+ },
70
+ ];
71
+ const DEFAULT_LIMIT = 50;
72
+ const MAX_LIMIT = 200;
73
+ export function getBuiltinSlice(sliceId) {
74
+ return BUILTIN_SLICES.find((s) => s.id === sliceId);
75
+ }
76
+ export function resolveSliceFilter(sliceId, customSlice) {
77
+ const builtin = getBuiltinSlice(sliceId);
78
+ if (builtin) {
79
+ return { kinds: builtin.kinds };
80
+ }
81
+ if (customSlice && customSlice.id === sliceId) {
82
+ return {
83
+ kinds: customSlice.filter.kinds,
84
+ tags: customSlice.filter.tags,
85
+ };
86
+ }
87
+ return null;
88
+ }
89
+ export function matchesEntryFilter(entry, filter) {
90
+ if (filter.kinds?.length && !filter.kinds.includes(entry.kind)) {
91
+ return false;
92
+ }
93
+ if (filter.tags?.length) {
94
+ const entryTags = entry.tags ?? [];
95
+ if (!filter.tags.some((t) => entryTags.includes(t))) {
96
+ return false;
97
+ }
98
+ }
99
+ if (filter.query) {
100
+ const q = filter.query.trim().toLowerCase();
101
+ const haystack = [
102
+ entry.title,
103
+ entry.summary,
104
+ entry.kind,
105
+ ...(entry.tags ?? []),
106
+ ]
107
+ .join(' ')
108
+ .toLowerCase();
109
+ if (!haystack.includes(q)) {
110
+ return false;
111
+ }
112
+ }
113
+ return true;
114
+ }
115
+ function attachModuleContext(row, architecture) {
116
+ const moduleName = row.refs?.moduleName;
117
+ if (!moduleName || !architecture) {
118
+ return row;
119
+ }
120
+ const mod = architecture.modules.find((m) => m.name === moduleName);
121
+ if (!mod) {
122
+ return row;
123
+ }
124
+ return {
125
+ ...row,
126
+ moduleContext: { name: mod.name, description: mod.description },
127
+ };
128
+ }
129
+ function toCompactRow(entry) {
130
+ return {
131
+ id: entry.id,
132
+ kind: entry.kind,
133
+ title: entry.title,
134
+ summary: entry.summary,
135
+ refs: entry.refs?.files || entry.refs?.moduleName ? entry.refs : undefined,
136
+ };
137
+ }
138
+ function entryToTableRow(entry) {
139
+ const payload = entry.payload ?? {};
140
+ const apiKinds = new Set([
141
+ 'http-endpoint',
142
+ 'grpc-method',
143
+ 'graphql-field',
144
+ 'websocket-route',
145
+ 'mcp-tool',
146
+ 'mcp-resource',
147
+ 'cli-command',
148
+ ]);
149
+ if (apiKinds.has(entry.kind)) {
150
+ return {
151
+ id: entry.id,
152
+ kind: entry.kind,
153
+ method: payload.method ?? '',
154
+ path: payload.path ?? entry.title,
155
+ summary: entry.summary,
156
+ files: entry.refs?.files ?? [],
157
+ moduleName: entry.refs?.moduleName ?? '',
158
+ };
159
+ }
160
+ return {
161
+ id: entry.id,
162
+ kind: entry.kind,
163
+ title: entry.title,
164
+ summary: entry.summary,
165
+ files: entry.refs?.files ?? [],
166
+ moduleName: entry.refs?.moduleName ?? '',
167
+ };
168
+ }
169
+ export function clampLimit(limit) {
170
+ if (limit === undefined || limit < 1) {
171
+ return DEFAULT_LIMIT;
172
+ }
173
+ return Math.min(limit, MAX_LIMIT);
174
+ }
175
+ export function buildSliceResponse(sliceId, sliceTitle, entries, options, architecture) {
176
+ const limit = clampLimit(options.limit);
177
+ const filtered = options.query
178
+ ? entries.filter((e) => matchesEntryFilter(e, { query: options.query }))
179
+ : entries;
180
+ const sorted = [...filtered].sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
181
+ const slice = sorted.slice(0, limit);
182
+ if (options.format === 'detail') {
183
+ const items = options.includeModuleContext
184
+ ? slice.map((entry) => {
185
+ const row = toCompactRow(entry);
186
+ const withCtx = attachModuleContext(row, architecture);
187
+ return {
188
+ ...entry,
189
+ moduleContext: withCtx.moduleContext,
190
+ };
191
+ })
192
+ : slice;
193
+ return {
194
+ sliceId,
195
+ title: sliceTitle,
196
+ format: 'detail',
197
+ total: filtered.length,
198
+ returned: items.length,
199
+ items: items,
200
+ };
201
+ }
202
+ if (options.format === 'table') {
203
+ return {
204
+ sliceId,
205
+ title: sliceTitle,
206
+ format: 'table',
207
+ total: filtered.length,
208
+ returned: slice.length,
209
+ items: slice.map(entryToTableRow),
210
+ };
211
+ }
212
+ let items = slice.map(toCompactRow);
213
+ if (options.includeModuleContext) {
214
+ items = items.map((row) => attachModuleContext(row, architecture));
215
+ }
216
+ return {
217
+ sliceId,
218
+ title: sliceTitle,
219
+ format: 'compact',
220
+ total: filtered.length,
221
+ returned: items.length,
222
+ items,
223
+ };
224
+ }
225
+ export function countEntriesForKinds(indexItems, kinds) {
226
+ const kindSet = new Set(kinds);
227
+ return indexItems.filter((i) => kindSet.has(i.kind)).length;
228
+ }
229
+ //# sourceMappingURL=slices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slices.js","sourceRoot":"","sources":["../src/slices.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { ProjectArchitecture, ModuleDetails, ScriptDocumentation } from './types.js';
1
+ import type { Entry, EntryFilter, EntryIndex, EntryIndexItem, ProjectArchitecture, ModuleDetails, ProjectSummary, SliceDefinition } from './types.js';
2
+ export declare function getStorageBaseDir(): string;
2
3
  /**
3
4
  * Get the storage directory for a specific project
4
5
  */
@@ -15,6 +16,25 @@ export declare function getModuleFile(projectId: string, moduleId: string): stri
15
16
  * Initialize storage for a project
16
17
  */
17
18
  export declare function initializeProjectStorage(projectId: string): Promise<void>;
19
+ export declare function getEntriesDir(projectId: string): string;
20
+ export declare function getEntryFile(projectId: string, entryId: string): string;
21
+ export declare function getEntryIndexFile(projectId: string): string;
22
+ export declare function getSliceFile(projectId: string, sliceId: string): string;
23
+ export declare function readEntryIndex(projectId: string): Promise<EntryIndex>;
24
+ export declare function readEntry(projectId: string, entryId: string): Promise<Entry | null>;
25
+ export declare function writeEntry(projectId: string, entry: Entry): Promise<void>;
26
+ export declare function deleteEntry(projectId: string, entryId: string): Promise<void>;
27
+ export declare function listEntryIds(projectId: string): Promise<string[]>;
28
+ export declare function findEntryByKindTitle(projectId: string, kind: string, title: string): Promise<Entry | null>;
29
+ export declare function filterIndexItems(items: EntryIndexItem[], filter?: EntryFilter): EntryIndexItem[];
30
+ export declare function loadEntries(projectId: string, filter?: EntryFilter): Promise<Entry[]>;
31
+ export declare function rebuildEntryIndex(projectId: string): Promise<EntryIndex>;
32
+ export declare function readSlice(projectId: string, sliceId: string): Promise<SliceDefinition | null>;
33
+ export declare function writeSlice(projectId: string, slice: SliceDefinition): Promise<void>;
34
+ export declare function deleteSlice(projectId: string, sliceId: string): Promise<void>;
35
+ export declare function listSliceIds(projectId: string): Promise<string[]>;
36
+ export declare function setMigratedScriptsFlag(projectId: string): Promise<void>;
37
+ export declare function isScriptsMigrated(projectId: string): Promise<boolean>;
18
38
  /**
19
39
  * Read project architecture from storage
20
40
  */
@@ -39,22 +59,7 @@ export declare function listModules(projectId: string): Promise<string[]>;
39
59
  * Delete a module
40
60
  */
41
61
  export declare function deleteModule(projectId: string, moduleId: string): Promise<void>;
42
- /**
43
- * Get the path to a script documentation file
44
- */
45
- export declare function getScriptFile(projectId: string, scriptId: string): string;
46
- /**
47
- * Read script documentation from storage
48
- */
49
- export declare function readScript(projectId: string, scriptId: string): Promise<ScriptDocumentation | null>;
50
- /**
51
- * Write script documentation to storage
52
- */
53
- export declare function writeScript(projectId: string, scriptDoc: ScriptDocumentation): Promise<void>;
54
- /**
55
- * List all scripts in a project
56
- */
57
- export declare function listScripts(projectId: string): Promise<string[]>;
62
+ export declare function listProjects(currentProjectId?: string | null, query?: string): Promise<ProjectSummary[]>;
58
63
  /**
59
64
  * Normalize project ID from workdir or user input
60
65
  */
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAI1F;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAaD;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAW7F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAWnG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAWzG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAatE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3D"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}