@monoes/monomindcli 1.6.8 → 1.7.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/.claude/commands/monomind-createtask.md +73 -111
- package/.claude/commands/monomind-do.md +227 -115
- package/.claude/commands/monomind-idea.md +46 -109
- package/.claude/commands/monomind-improve.md +352 -0
- package/.claude/helpers/graphify-freshen.cjs +12 -97
- package/.claude/helpers/hook-handler.cjs +16 -0
- package/.claude/helpers/statusline.cjs +89 -65
- package/.claude/skills/monomind-task-engine/SKILL.md +358 -0
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +72 -10
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +152 -24
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/shared-instructions-generator.d.ts +38 -0
- package/dist/src/init/shared-instructions-generator.d.ts.map +1 -0
- package/dist/src/init/shared-instructions-generator.js +571 -0
- package/dist/src/init/shared-instructions-generator.js.map +1 -0
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/mcp-tools/graphify-tools.d.ts +4 -4
- package/dist/src/mcp-tools/graphify-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/graphify-tools.js +84 -60
- package/dist/src/mcp-tools/graphify-tools.js.map +1 -1
- package/dist/src/ui/dashboard.html +219 -45
- package/dist/src/ui/server.mjs +201 -16
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Instructions Generator
|
|
3
|
+
*
|
|
4
|
+
* Auto-detects project profile and generates:
|
|
5
|
+
* 1. .agents/shared_instructions.md — prepended to every agent prompt
|
|
6
|
+
* 2. Memory seeds — pre-loaded into AgentDB so agents start with project best practices
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import { execSync } from 'node:child_process';
|
|
11
|
+
function readJSON(p) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function fileExists(cwd, ...parts) {
|
|
20
|
+
return fs.existsSync(path.join(cwd, ...parts));
|
|
21
|
+
}
|
|
22
|
+
function detectSrcDir(cwd) {
|
|
23
|
+
for (const d of ['src', 'packages', 'lib', 'app']) {
|
|
24
|
+
if (fs.existsSync(path.join(cwd, d)) && fs.statSync(path.join(cwd, d)).isDirectory()) {
|
|
25
|
+
return d;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
function detectTestDir(cwd) {
|
|
31
|
+
for (const d of ['tests', 'test', '__tests__', 'spec']) {
|
|
32
|
+
if (fs.existsSync(path.join(cwd, d)) && fs.statSync(path.join(cwd, d)).isDirectory()) {
|
|
33
|
+
return d;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
function extractMaxFileLines(claudeMd) {
|
|
39
|
+
const m = claudeMd.match(/(?:keep|max|under|limit).*?(\d{3,4})\s*lines/i);
|
|
40
|
+
return m ? parseInt(m[1], 10) : null;
|
|
41
|
+
}
|
|
42
|
+
export function detectProjectProfile(cwd) {
|
|
43
|
+
const profile = {
|
|
44
|
+
name: path.basename(cwd),
|
|
45
|
+
description: '',
|
|
46
|
+
language: 'unknown',
|
|
47
|
+
framework: [],
|
|
48
|
+
packageManager: 'unknown',
|
|
49
|
+
testFramework: [],
|
|
50
|
+
buildTool: [],
|
|
51
|
+
isMonorepo: false,
|
|
52
|
+
monorepoTool: '',
|
|
53
|
+
database: [],
|
|
54
|
+
hasDocker: false,
|
|
55
|
+
hasCi: false,
|
|
56
|
+
ciTool: '',
|
|
57
|
+
maxFileLines: null,
|
|
58
|
+
srcDir: detectSrcDir(cwd),
|
|
59
|
+
testDir: detectTestDir(cwd),
|
|
60
|
+
version: '0.0.0',
|
|
61
|
+
isPublicNpm: false,
|
|
62
|
+
};
|
|
63
|
+
// ── package.json (Node/TS/JS) ──────────────────────────────────────────────
|
|
64
|
+
const pkg = readJSON(path.join(cwd, 'package.json'));
|
|
65
|
+
if (pkg) {
|
|
66
|
+
profile.name = pkg['name'] || profile.name;
|
|
67
|
+
profile.description = pkg['description'] || '';
|
|
68
|
+
profile.version = pkg['version'] || '0.0.0';
|
|
69
|
+
profile.isPublicNpm = !pkg['private'];
|
|
70
|
+
const deps = {
|
|
71
|
+
...(pkg['dependencies'] || {}),
|
|
72
|
+
...(pkg['devDependencies'] || {}),
|
|
73
|
+
...(pkg['peerDependencies'] || {}),
|
|
74
|
+
};
|
|
75
|
+
// Language
|
|
76
|
+
profile.language = deps['typescript'] || fileExists(cwd, 'tsconfig.json') ? 'typescript' : 'javascript';
|
|
77
|
+
// Package manager
|
|
78
|
+
if (fileExists(cwd, 'pnpm-lock.yaml') || fileExists(cwd, 'pnpm-workspace.yaml'))
|
|
79
|
+
profile.packageManager = 'pnpm';
|
|
80
|
+
else if (fileExists(cwd, 'yarn.lock'))
|
|
81
|
+
profile.packageManager = 'yarn';
|
|
82
|
+
else if (fileExists(cwd, 'bun.lockb'))
|
|
83
|
+
profile.packageManager = 'bun';
|
|
84
|
+
else
|
|
85
|
+
profile.packageManager = 'npm';
|
|
86
|
+
// Monorepo
|
|
87
|
+
if (fileExists(cwd, 'pnpm-workspace.yaml') || (pkg['workspaces'] && profile.packageManager === 'pnpm')) {
|
|
88
|
+
profile.isMonorepo = true;
|
|
89
|
+
profile.monorepoTool = 'pnpm-workspaces';
|
|
90
|
+
}
|
|
91
|
+
else if (pkg['workspaces']) {
|
|
92
|
+
profile.isMonorepo = true;
|
|
93
|
+
profile.monorepoTool = 'npm-workspaces';
|
|
94
|
+
}
|
|
95
|
+
if (deps['turbo'] || fileExists(cwd, 'turbo.json')) {
|
|
96
|
+
profile.isMonorepo = true;
|
|
97
|
+
profile.monorepoTool = 'turborepo';
|
|
98
|
+
}
|
|
99
|
+
if (deps['nx'] || fileExists(cwd, 'nx.json')) {
|
|
100
|
+
profile.isMonorepo = true;
|
|
101
|
+
profile.monorepoTool = 'nx';
|
|
102
|
+
}
|
|
103
|
+
// Framework
|
|
104
|
+
if (deps['next'])
|
|
105
|
+
profile.framework.push('nextjs');
|
|
106
|
+
else if (deps['react'])
|
|
107
|
+
profile.framework.push('react');
|
|
108
|
+
if (deps['vue'])
|
|
109
|
+
profile.framework.push('vue');
|
|
110
|
+
if (deps['nuxt'] || deps['nuxt3'])
|
|
111
|
+
profile.framework.push('nuxt');
|
|
112
|
+
if (deps['@angular/core'])
|
|
113
|
+
profile.framework.push('angular');
|
|
114
|
+
if (deps['svelte'] || deps['@sveltejs/kit'])
|
|
115
|
+
profile.framework.push('svelte');
|
|
116
|
+
if (deps['express'])
|
|
117
|
+
profile.framework.push('express');
|
|
118
|
+
if (deps['fastify'])
|
|
119
|
+
profile.framework.push('fastify');
|
|
120
|
+
if (deps['hono'])
|
|
121
|
+
profile.framework.push('hono');
|
|
122
|
+
if (deps['@nestjs/core'])
|
|
123
|
+
profile.framework.push('nestjs');
|
|
124
|
+
if (deps['elysia'])
|
|
125
|
+
profile.framework.push('elysia');
|
|
126
|
+
// Testing
|
|
127
|
+
if (deps['vitest'])
|
|
128
|
+
profile.testFramework.push('vitest');
|
|
129
|
+
if (deps['jest'] || deps['@jest/core'])
|
|
130
|
+
profile.testFramework.push('jest');
|
|
131
|
+
if (deps['mocha'])
|
|
132
|
+
profile.testFramework.push('mocha');
|
|
133
|
+
if (deps['@playwright/test'])
|
|
134
|
+
profile.testFramework.push('playwright');
|
|
135
|
+
if (deps['cypress'])
|
|
136
|
+
profile.testFramework.push('cypress');
|
|
137
|
+
// Build
|
|
138
|
+
if (deps['vite'] || fileExists(cwd, 'vite.config.ts') || fileExists(cwd, 'vite.config.js'))
|
|
139
|
+
profile.buildTool.push('vite');
|
|
140
|
+
if (deps['esbuild'])
|
|
141
|
+
profile.buildTool.push('esbuild');
|
|
142
|
+
if (deps['webpack'])
|
|
143
|
+
profile.buildTool.push('webpack');
|
|
144
|
+
if (deps['rollup'])
|
|
145
|
+
profile.buildTool.push('rollup');
|
|
146
|
+
if (fileExists(cwd, 'tsconfig.json') && profile.buildTool.length === 0)
|
|
147
|
+
profile.buildTool.push('tsc');
|
|
148
|
+
// Database
|
|
149
|
+
if (deps['pg'] || deps['postgres'] || deps['@neondatabase/serverless'])
|
|
150
|
+
profile.database.push('postgres');
|
|
151
|
+
if (deps['better-sqlite3'] || deps['@libsql/client'] || deps['sql.js'])
|
|
152
|
+
profile.database.push('sqlite');
|
|
153
|
+
if (deps['mongoose'] || deps['mongodb'])
|
|
154
|
+
profile.database.push('mongodb');
|
|
155
|
+
if (deps['redis'] || deps['ioredis'])
|
|
156
|
+
profile.database.push('redis');
|
|
157
|
+
if (deps['drizzle-orm'])
|
|
158
|
+
profile.database.push('drizzle');
|
|
159
|
+
if (deps['prisma'] || deps['@prisma/client'])
|
|
160
|
+
profile.database.push('prisma');
|
|
161
|
+
if (deps['@supabase/supabase-js'])
|
|
162
|
+
profile.database.push('supabase');
|
|
163
|
+
}
|
|
164
|
+
// ── Cargo.toml (Rust) ──────────────────────────────────────────────────────
|
|
165
|
+
if (fileExists(cwd, 'Cargo.toml') && profile.language === 'unknown') {
|
|
166
|
+
profile.language = 'rust';
|
|
167
|
+
profile.packageManager = 'cargo';
|
|
168
|
+
try {
|
|
169
|
+
const cargo = fs.readFileSync(path.join(cwd, 'Cargo.toml'), 'utf-8');
|
|
170
|
+
const nameM = cargo.match(/^name\s*=\s*"([^"]+)"/m);
|
|
171
|
+
if (nameM)
|
|
172
|
+
profile.name = nameM[1];
|
|
173
|
+
if (fileExists(cwd, 'Cargo.lock') && cargo.includes('[workspace]'))
|
|
174
|
+
profile.isMonorepo = true;
|
|
175
|
+
if (cargo.includes('axum') || cargo.includes('actix') || cargo.includes('warp'))
|
|
176
|
+
profile.framework.push('web');
|
|
177
|
+
if (cargo.includes('tokio'))
|
|
178
|
+
profile.framework.push('tokio');
|
|
179
|
+
if (cargo.includes('serde'))
|
|
180
|
+
profile.framework.push('serde');
|
|
181
|
+
}
|
|
182
|
+
catch { /* skip */ }
|
|
183
|
+
}
|
|
184
|
+
// ── pyproject.toml / requirements.txt (Python) ────────────────────────────
|
|
185
|
+
if ((fileExists(cwd, 'pyproject.toml') || fileExists(cwd, 'requirements.txt')) && profile.language === 'unknown') {
|
|
186
|
+
profile.language = 'python';
|
|
187
|
+
if (fileExists(cwd, 'poetry.lock'))
|
|
188
|
+
profile.packageManager = 'poetry';
|
|
189
|
+
else if (fileExists(cwd, 'uv.lock'))
|
|
190
|
+
profile.packageManager = 'uv';
|
|
191
|
+
else
|
|
192
|
+
profile.packageManager = 'pip';
|
|
193
|
+
try {
|
|
194
|
+
const pp = fs.readFileSync(path.join(cwd, 'pyproject.toml'), 'utf-8');
|
|
195
|
+
if (pp.includes('fastapi') || pp.includes('FastAPI'))
|
|
196
|
+
profile.framework.push('fastapi');
|
|
197
|
+
if (pp.includes('django'))
|
|
198
|
+
profile.framework.push('django');
|
|
199
|
+
if (pp.includes('flask'))
|
|
200
|
+
profile.framework.push('flask');
|
|
201
|
+
if (pp.includes('pytest'))
|
|
202
|
+
profile.testFramework.push('pytest');
|
|
203
|
+
if (pp.includes('sqlalchemy'))
|
|
204
|
+
profile.database.push('sqlalchemy');
|
|
205
|
+
}
|
|
206
|
+
catch { /* skip */ }
|
|
207
|
+
}
|
|
208
|
+
// ── go.mod (Go) ───────────────────────────────────────────────────────────
|
|
209
|
+
if (fileExists(cwd, 'go.mod') && profile.language === 'unknown') {
|
|
210
|
+
profile.language = 'go';
|
|
211
|
+
profile.packageManager = 'unknown'; // go mod doesn't have a separate PM
|
|
212
|
+
try {
|
|
213
|
+
const gomod = fs.readFileSync(path.join(cwd, 'go.mod'), 'utf-8');
|
|
214
|
+
if (gomod.includes('gin-gonic/gin'))
|
|
215
|
+
profile.framework.push('gin');
|
|
216
|
+
if (gomod.includes('labstack/echo'))
|
|
217
|
+
profile.framework.push('echo');
|
|
218
|
+
if (gomod.includes('gofiber/fiber'))
|
|
219
|
+
profile.framework.push('fiber');
|
|
220
|
+
}
|
|
221
|
+
catch { /* skip */ }
|
|
222
|
+
}
|
|
223
|
+
// ── Infrastructure detection ───────────────────────────────────────────────
|
|
224
|
+
profile.hasDocker = fileExists(cwd, 'Dockerfile') || fileExists(cwd, 'docker-compose.yml') || fileExists(cwd, 'docker-compose.yaml');
|
|
225
|
+
if (fileExists(cwd, '.github', 'workflows')) {
|
|
226
|
+
profile.hasCi = true;
|
|
227
|
+
profile.ciTool = 'github-actions';
|
|
228
|
+
}
|
|
229
|
+
else if (fileExists(cwd, '.circleci')) {
|
|
230
|
+
profile.hasCi = true;
|
|
231
|
+
profile.ciTool = 'circleci';
|
|
232
|
+
}
|
|
233
|
+
else if (fileExists(cwd, '.gitlab-ci.yml')) {
|
|
234
|
+
profile.hasCi = true;
|
|
235
|
+
profile.ciTool = 'gitlab-ci';
|
|
236
|
+
}
|
|
237
|
+
// ── CLAUDE.md conventions extraction ──────────────────────────────────────
|
|
238
|
+
try {
|
|
239
|
+
const claudeMd = fs.readFileSync(path.join(cwd, 'CLAUDE.md'), 'utf-8');
|
|
240
|
+
profile.maxFileLines = extractMaxFileLines(claudeMd);
|
|
241
|
+
}
|
|
242
|
+
catch { /* skip */ }
|
|
243
|
+
return profile;
|
|
244
|
+
}
|
|
245
|
+
// ── Shared Instructions Generator ────────────────────────────────────────────
|
|
246
|
+
function langBestPractices(profile) {
|
|
247
|
+
const { language, framework, testFramework, buildTool, packageManager, isMonorepo, database } = profile;
|
|
248
|
+
const sections = [];
|
|
249
|
+
if (language === 'typescript' || language === 'javascript') {
|
|
250
|
+
sections.push(`## TypeScript / Node.js Best Practices
|
|
251
|
+
- Use \`const\` by default; \`let\` only when the variable must be reassigned
|
|
252
|
+
- Prefer \`async/await\` over raw Promises or callbacks
|
|
253
|
+
- Always type function parameters and return values explicitly — no implicit \`any\`
|
|
254
|
+
- Use \`unknown\` instead of \`any\` at system boundaries; narrow with type guards
|
|
255
|
+
- Keep modules small and focused — one clear responsibility per file
|
|
256
|
+
- Prefer named exports over default exports (easier to refactor and search)
|
|
257
|
+
- Use \`satisfies\` operator to validate literals against types without widening
|
|
258
|
+
- Handle errors explicitly — never swallow them silently`);
|
|
259
|
+
if (language === 'typescript') {
|
|
260
|
+
sections.push(`## TypeScript Strictness
|
|
261
|
+
- Always enable \`strict: true\` in tsconfig
|
|
262
|
+
- Use \`readonly\` for arrays and objects that shouldn't be mutated
|
|
263
|
+
- Prefer \`interface\` for public API shapes, \`type\` for unions/intersections/computed
|
|
264
|
+
- Use discriminated unions for state machines and result types`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (language === 'python') {
|
|
268
|
+
sections.push(`## Python Best Practices
|
|
269
|
+
- Use type hints everywhere — run \`mypy\` or \`pyright\` in strict mode
|
|
270
|
+
- Prefer \`dataclasses\` or \`pydantic\` models over plain dicts for structured data
|
|
271
|
+
- Use \`pathlib.Path\` instead of \`os.path\`
|
|
272
|
+
- Prefer \`with\` statements for resource management
|
|
273
|
+
- Use \`logging\` module, never \`print\` in production code
|
|
274
|
+
- Keep functions under 50 lines; split long functions immediately`);
|
|
275
|
+
}
|
|
276
|
+
if (language === 'rust') {
|
|
277
|
+
sections.push(`## Rust Best Practices
|
|
278
|
+
- Prefer \`Result<T, E>\` over panics for recoverable errors
|
|
279
|
+
- Use \`?\` operator for error propagation
|
|
280
|
+
- Document all public items with \`///\` doc comments
|
|
281
|
+
- Run \`clippy\` before every commit
|
|
282
|
+
- Avoid \`unwrap()\` in production paths — use \`expect("reason")\` or proper handling
|
|
283
|
+
- Keep \`unsafe\` blocks minimal and always document the invariant they maintain`);
|
|
284
|
+
}
|
|
285
|
+
if (language === 'go') {
|
|
286
|
+
sections.push(`## Go Best Practices
|
|
287
|
+
- Errors are values — always handle them, never \`_\` a returned error in production
|
|
288
|
+
- Use \`context.Context\` as the first parameter of any function that does I/O
|
|
289
|
+
- Prefer table-driven tests with \`t.Run\`
|
|
290
|
+
- Keep interfaces small — prefer 1-3 methods
|
|
291
|
+
- Use \`defer\` for cleanup but be aware of loop-defer pitfalls`);
|
|
292
|
+
}
|
|
293
|
+
// Framework-specific
|
|
294
|
+
if (framework.includes('react') || framework.includes('nextjs')) {
|
|
295
|
+
sections.push(`## React / Next.js Best Practices
|
|
296
|
+
- Prefer Server Components by default in Next.js 13+ App Router
|
|
297
|
+
- Co-locate tests with the component they test
|
|
298
|
+
- Extract shared logic into custom hooks
|
|
299
|
+
- Use \`useCallback\` and \`useMemo\` only when profiling shows a real problem
|
|
300
|
+
- Keep components under 200 lines — split into sub-components when larger
|
|
301
|
+
- Never put business logic in components — keep it in hooks or server actions`);
|
|
302
|
+
}
|
|
303
|
+
if (framework.includes('nestjs')) {
|
|
304
|
+
sections.push(`## NestJS Best Practices
|
|
305
|
+
- Follow the module → service → controller layering strictly
|
|
306
|
+
- Use DTOs with class-validator for all input validation
|
|
307
|
+
- Inject dependencies via constructor — never instantiate services directly
|
|
308
|
+
- Use pipes for transformation, guards for authorization, interceptors for cross-cutting concerns`);
|
|
309
|
+
}
|
|
310
|
+
if (framework.includes('fastapi')) {
|
|
311
|
+
sections.push(`## FastAPI Best Practices
|
|
312
|
+
- Use Pydantic v2 models for all request/response schemas
|
|
313
|
+
- Separate router, service, and repository layers
|
|
314
|
+
- Use \`async def\` for all endpoints that do any I/O
|
|
315
|
+
- Handle errors with \`HTTPException\` — never let raw exceptions propagate`);
|
|
316
|
+
}
|
|
317
|
+
// Testing
|
|
318
|
+
if (testFramework.includes('vitest') || testFramework.includes('jest')) {
|
|
319
|
+
sections.push(`## Testing (${testFramework.join(' / ')})
|
|
320
|
+
- Follow London School TDD: write the failing test first, then the minimum implementation
|
|
321
|
+
- Mock at the boundary — mock HTTP clients and DB adapters, not business logic
|
|
322
|
+
- Test behavior, not implementation — avoid testing private methods
|
|
323
|
+
- Use \`describe\` / \`it\` blocks that read like documentation
|
|
324
|
+
- Keep each test file focused on one unit; integration tests live in a separate directory`);
|
|
325
|
+
}
|
|
326
|
+
if (testFramework.includes('pytest')) {
|
|
327
|
+
sections.push(`## Testing (pytest)
|
|
328
|
+
- Write tests before implementation (TDD)
|
|
329
|
+
- Use \`pytest.fixture\` for shared setup; prefer function-scoped fixtures
|
|
330
|
+
- Use \`pytest.mark.parametrize\` for data-driven tests
|
|
331
|
+
- Mock external calls with \`pytest-mock\` — never let tests hit the real network or DB`);
|
|
332
|
+
}
|
|
333
|
+
// Database
|
|
334
|
+
if (database.includes('postgres') || database.includes('sqlite')) {
|
|
335
|
+
sections.push(`## Database Best Practices
|
|
336
|
+
- Never run raw interpolated SQL — always use parameterized queries
|
|
337
|
+
- Keep migrations small and reversible
|
|
338
|
+
- Index foreign keys and columns used in WHERE/ORDER BY
|
|
339
|
+
- Use transactions for operations that must be atomic
|
|
340
|
+
- Do not fetch more columns than needed — avoid \`SELECT *\`${database.includes('drizzle') ? '\n- Use Drizzle schema objects for all query building — no raw SQL except for complex aggregates' : ''}${database.includes('prisma') ? '\n- Use Prisma transactions (\`prisma.$transaction\`) for multi-step writes' : ''}`);
|
|
341
|
+
}
|
|
342
|
+
// Monorepo
|
|
343
|
+
if (isMonorepo) {
|
|
344
|
+
const pmRun = packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npm run';
|
|
345
|
+
sections.push(`## Monorepo Conventions
|
|
346
|
+
- Make changes in the appropriate package — never write code that cuts across package boundaries without a clear interface
|
|
347
|
+
- Shared types live in a dedicated \`@<scope>/types\` or \`@<scope>/shared\` package
|
|
348
|
+
- Run \`${pmRun} build\` in changed packages before running tests that depend on them
|
|
349
|
+
- Use internal package references (workspace protocol) — never copy code between packages`);
|
|
350
|
+
}
|
|
351
|
+
// CI
|
|
352
|
+
if (profile.hasCi) {
|
|
353
|
+
sections.push(`## CI / CD
|
|
354
|
+
- All code must pass CI before merging — do not bypass checks
|
|
355
|
+
- Keep CI builds under 10 minutes — split slow jobs if needed
|
|
356
|
+
- Never commit secrets or API keys — use environment variables from the CI secret store
|
|
357
|
+
- Write commit messages that pass the conventional commits format: \`type(scope): description\``);
|
|
358
|
+
}
|
|
359
|
+
return sections.join('\n\n');
|
|
360
|
+
}
|
|
361
|
+
export function generateSharedInstructions(profile) {
|
|
362
|
+
const { name, description, language, framework, packageManager, srcDir, testDir, maxFileLines } = profile;
|
|
363
|
+
const runCmd = packageManager === 'pnpm' ? 'pnpm' :
|
|
364
|
+
packageManager === 'yarn' ? 'yarn' :
|
|
365
|
+
packageManager === 'bun' ? 'bun run' :
|
|
366
|
+
packageManager === 'cargo' ? 'cargo' :
|
|
367
|
+
packageManager === 'poetry' ? 'poetry run' :
|
|
368
|
+
packageManager === 'uv' ? 'uv run' :
|
|
369
|
+
'npm run';
|
|
370
|
+
const langLabel = language === 'typescript' ? 'TypeScript' :
|
|
371
|
+
language === 'javascript' ? 'JavaScript' :
|
|
372
|
+
language === 'python' ? 'Python' :
|
|
373
|
+
language === 'rust' ? 'Rust' :
|
|
374
|
+
language === 'go' ? 'Go' : 'Unknown';
|
|
375
|
+
const frameworkStr = profile.framework.length ? ` · ${profile.framework.map(f => f.charAt(0).toUpperCase() + f.slice(1)).join(' + ')}` : '';
|
|
376
|
+
const dbStr = profile.database.length ? `\n- **Database:** ${profile.database.join(', ')}` : '';
|
|
377
|
+
const testStr = profile.testFramework.length ? `\n- **Test framework:** ${profile.testFramework.join(', ')}` : '';
|
|
378
|
+
const ciStr = profile.hasCi ? `\n- **CI:** ${profile.ciTool}` : '';
|
|
379
|
+
const monorepoStr = profile.isMonorepo ? `\n- **Monorepo:** yes (${profile.monorepoTool})` : '';
|
|
380
|
+
const maxLinesStr = maxFileLines ? `\n- **Max file size:** ${maxFileLines} lines` : '';
|
|
381
|
+
return `# ${name} — Shared Agent Instructions
|
|
382
|
+
|
|
383
|
+
> Auto-generated by \`monomind init\`. Edit freely — this file is prepended to every agent prompt.
|
|
384
|
+
> Stack: **${langLabel}${frameworkStr}**
|
|
385
|
+
|
|
386
|
+
## Project Overview
|
|
387
|
+
${description ? `\n${description}\n` : ''}
|
|
388
|
+
- **Language:** ${langLabel}
|
|
389
|
+
- **Package manager:** ${packageManager}
|
|
390
|
+
- **Source directory:** ${srcDir || '(root)'}
|
|
391
|
+
- **Test directory:** ${testDir || '(co-located)'}${maxLinesStr}${dbStr}${testStr}${ciStr}${monorepoStr}
|
|
392
|
+
|
|
393
|
+
## How to Run
|
|
394
|
+
\`\`\`bash
|
|
395
|
+
# Install dependencies
|
|
396
|
+
${packageManager === 'cargo' ? 'cargo build' :
|
|
397
|
+
packageManager === 'poetry' ? 'poetry install' :
|
|
398
|
+
packageManager === 'uv' ? 'uv sync' :
|
|
399
|
+
`${packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npm'} install`}
|
|
400
|
+
|
|
401
|
+
# Run tests
|
|
402
|
+
${profile.testFramework.includes('vitest') ? `${runCmd} test` :
|
|
403
|
+
profile.testFramework.includes('jest') ? `${runCmd} test` :
|
|
404
|
+
profile.testFramework.includes('pytest') ? 'pytest' :
|
|
405
|
+
language === 'rust' ? 'cargo test' :
|
|
406
|
+
language === 'go' ? 'go test ./...' :
|
|
407
|
+
`${runCmd} test`}
|
|
408
|
+
|
|
409
|
+
# Type check / lint
|
|
410
|
+
${language === 'typescript' ? `${runCmd} typecheck` :
|
|
411
|
+
language === 'python' ? 'mypy . && ruff check .' :
|
|
412
|
+
language === 'rust' ? 'cargo clippy' :
|
|
413
|
+
language === 'go' ? 'go vet ./...' :
|
|
414
|
+
`${runCmd} lint`}
|
|
415
|
+
\`\`\`
|
|
416
|
+
|
|
417
|
+
## Critical Constraints
|
|
418
|
+
- **Never** modify files outside your assigned task scope
|
|
419
|
+
- **Always** run tests before reporting a task complete
|
|
420
|
+
- **Never** commit secrets, credentials, or .env files
|
|
421
|
+
- **Always** write tests alongside implementation (TDD)
|
|
422
|
+
- Prefer editing existing files over creating new ones
|
|
423
|
+
- Keep commits small and descriptive (conventional commits format)
|
|
424
|
+
${maxFileLines ? `- Keep files under **${maxFileLines} lines** — split when approaching the limit\n` : ''}- NEVER save working files to the root directory — use ${srcDir || 'src'}/ for source, ${testDir || 'tests'}/ for tests
|
|
425
|
+
|
|
426
|
+
## Code Quality Non-Negotiables
|
|
427
|
+
- No commented-out code in committed files
|
|
428
|
+
- No \`TODO\` comments without a linked issue
|
|
429
|
+
- All public functions/methods must have typed signatures
|
|
430
|
+
- Errors must be handled explicitly — never silently swallowed
|
|
431
|
+
- Remove debug logs before committing
|
|
432
|
+
|
|
433
|
+
${langBestPractices(profile)}
|
|
434
|
+
|
|
435
|
+
## Agent Collaboration Rules
|
|
436
|
+
- Write a brief ## Handoff Context block when completing a task in a chain
|
|
437
|
+
- Include: files changed, key decisions, what the next task needs to know
|
|
438
|
+
- If BLOCKED, stop immediately and report with full context — do not guess
|
|
439
|
+
- Search project memory before starting: \`npx monomind memory search --query "[task]"\`
|
|
440
|
+
- Store successful patterns after completion: \`npx monomind memory store --namespace patterns --key "[pattern]" --value "[what worked]"\`
|
|
441
|
+
`;
|
|
442
|
+
}
|
|
443
|
+
export function generateMemorySeeds(profile) {
|
|
444
|
+
const seeds = [];
|
|
445
|
+
// Project context seed
|
|
446
|
+
seeds.push({
|
|
447
|
+
key: `project-profile-${profile.name}`,
|
|
448
|
+
value: JSON.stringify({
|
|
449
|
+
name: profile.name,
|
|
450
|
+
language: profile.language,
|
|
451
|
+
framework: profile.framework,
|
|
452
|
+
packageManager: profile.packageManager,
|
|
453
|
+
testFramework: profile.testFramework,
|
|
454
|
+
isMonorepo: profile.isMonorepo,
|
|
455
|
+
database: profile.database,
|
|
456
|
+
srcDir: profile.srcDir,
|
|
457
|
+
testDir: profile.testDir,
|
|
458
|
+
}),
|
|
459
|
+
namespace: 'project',
|
|
460
|
+
});
|
|
461
|
+
// Stack-specific best practices
|
|
462
|
+
if (profile.language === 'typescript') {
|
|
463
|
+
seeds.push({
|
|
464
|
+
key: 'ts-error-handling',
|
|
465
|
+
value: 'Use Result<T, E> pattern with discriminated unions for recoverable errors. Never throw in library code. Use unknown instead of any at boundaries, narrow with type guards.',
|
|
466
|
+
namespace: 'patterns',
|
|
467
|
+
});
|
|
468
|
+
seeds.push({
|
|
469
|
+
key: 'ts-module-structure',
|
|
470
|
+
value: 'One responsibility per file. Named exports only. Types in .types.ts files co-located with implementation. Index barrel files only at package boundaries, not inside modules.',
|
|
471
|
+
namespace: 'patterns',
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
if (profile.language === 'python') {
|
|
475
|
+
seeds.push({
|
|
476
|
+
key: 'py-error-handling',
|
|
477
|
+
value: 'Use specific exception types, never bare except. Use contextlib.suppress only for truly ignorable errors. Log exceptions with traceback before re-raising or swallowing.',
|
|
478
|
+
namespace: 'patterns',
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
if (profile.language === 'rust') {
|
|
482
|
+
seeds.push({
|
|
483
|
+
key: 'rust-error-handling',
|
|
484
|
+
value: 'Use thiserror for library errors, anyhow for application errors. Avoid unwrap() in production paths. Document safety invariants in any unsafe block.',
|
|
485
|
+
namespace: 'patterns',
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
// Framework patterns
|
|
489
|
+
if (profile.framework.includes('react') || profile.framework.includes('nextjs')) {
|
|
490
|
+
seeds.push({
|
|
491
|
+
key: 'react-component-pattern',
|
|
492
|
+
value: 'Keep components under 200 lines. Extract business logic to custom hooks. Use Server Components by default in Next.js app router. Co-locate tests with components.',
|
|
493
|
+
namespace: 'patterns',
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
if (profile.framework.includes('nestjs')) {
|
|
497
|
+
seeds.push({
|
|
498
|
+
key: 'nestjs-layer-pattern',
|
|
499
|
+
value: 'Controller → Service → Repository layering. DTOs with class-validator for all input. Guards for auth, Interceptors for cross-cutting concerns. Never inject repositories directly into controllers.',
|
|
500
|
+
namespace: 'patterns',
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
// Database patterns
|
|
504
|
+
if (profile.database.includes('postgres') || profile.database.includes('sqlite')) {
|
|
505
|
+
seeds.push({
|
|
506
|
+
key: 'db-query-safety',
|
|
507
|
+
value: 'Always use parameterized queries. Never interpolate user input into SQL. Index foreign keys. Use transactions for multi-step writes. Prefer specific column selects over SELECT *.',
|
|
508
|
+
namespace: 'patterns',
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
if (profile.database.includes('drizzle')) {
|
|
512
|
+
seeds.push({
|
|
513
|
+
key: 'drizzle-patterns',
|
|
514
|
+
value: 'Always use drizzle schema objects for queries. Use db.transaction() for atomic operations. Keep schema definitions in schema.ts. Run drizzle-kit generate after schema changes.',
|
|
515
|
+
namespace: 'patterns',
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
// Testing patterns
|
|
519
|
+
if (profile.testFramework.includes('vitest') || profile.testFramework.includes('jest')) {
|
|
520
|
+
seeds.push({
|
|
521
|
+
key: 'tdd-pattern',
|
|
522
|
+
value: 'Red-Green-Refactor cycle. Write the failing test first. Mock at the boundary (HTTP clients, DB adapters). Test behavior not implementation. Each test describes one behavior.',
|
|
523
|
+
namespace: 'patterns',
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
// Monorepo patterns
|
|
527
|
+
if (profile.isMonorepo) {
|
|
528
|
+
seeds.push({
|
|
529
|
+
key: 'monorepo-conventions',
|
|
530
|
+
value: `Monorepo uses ${profile.monorepoTool}. Changes must stay within the relevant package. Shared types in dedicated packages. Use workspace protocol for internal deps. Build changed packages before running dependent tests.`,
|
|
531
|
+
namespace: 'patterns',
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
return seeds;
|
|
535
|
+
}
|
|
536
|
+
// ── Writer (called from executor.ts) ─────────────────────────────────────────
|
|
537
|
+
export function writeSharedInstructions(cwd, force, result) {
|
|
538
|
+
const agentsDir = path.join(cwd, '.agents');
|
|
539
|
+
const siPath = path.join(agentsDir, 'shared_instructions.md');
|
|
540
|
+
// Skip if already exists and not forcing
|
|
541
|
+
if (fs.existsSync(siPath) && !force) {
|
|
542
|
+
result.skipped.push('.agents/shared_instructions.md');
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
try {
|
|
546
|
+
const profile = detectProjectProfile(cwd);
|
|
547
|
+
const content = generateSharedInstructions(profile);
|
|
548
|
+
if (!fs.existsSync(agentsDir)) {
|
|
549
|
+
fs.mkdirSync(agentsDir, { recursive: true });
|
|
550
|
+
}
|
|
551
|
+
fs.writeFileSync(siPath, content, 'utf-8');
|
|
552
|
+
result.created.files.push('.agents/shared_instructions.md');
|
|
553
|
+
// Seed memory (best-effort, non-blocking)
|
|
554
|
+
const seeds = generateMemorySeeds(profile);
|
|
555
|
+
for (const seed of seeds) {
|
|
556
|
+
try {
|
|
557
|
+
execSync(`npx --yes monomind@latest memory store --key "${seed.key}" --value ${JSON.stringify(seed.value)} --namespace ${seed.namespace}`, { cwd, stdio: 'ignore', timeout: 8000 });
|
|
558
|
+
}
|
|
559
|
+
catch {
|
|
560
|
+
// Non-critical — memory seeding is best-effort
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
if (seeds.length > 0) {
|
|
564
|
+
result.created.files.push(`.agents: ${seeds.length} memory patterns seeded`);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
catch {
|
|
568
|
+
// Non-critical — shared instructions generation is best-effort
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=shared-instructions-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-instructions-generator.js","sourceRoot":"","sources":["../../../src/init/shared-instructions-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/src/init/types.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export interface InitComponents {
|
|
|
24
24
|
runtime: boolean;
|
|
25
25
|
/** Create CLAUDE.md with swarm guidance */
|
|
26
26
|
claudeMd: boolean;
|
|
27
|
-
/** Build knowledge graph on init using
|
|
27
|
+
/** Build knowledge graph on init using graphify (Python) */
|
|
28
28
|
graphify: boolean;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/init/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/init/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gCAAgC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,wBAAwB;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,uEAAuE;IACvE,UAAU,EAAE,OAAO,CAAC;IACpB,gCAAgC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,YAAY,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,aAAa,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,mCAAmC;IACnC,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,2BAA2B;IAC3B,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,IAAI,EAAE,OAAO,CAAC;IACd,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,iCAAiC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,EAAE,EAAE,OAAO,CAAC;IACZ,kCAAkC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,0BAA0B;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,mBAAmB,GAAG,UAAU,CAAC;IACrE,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,aAAa,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,2BAA2B;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAErG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,KAAK,EAAE,yBAAyB,GAAG,0BAA0B,GAAG,0BAA0B,GAAG,MAAM,CAAC;IACpG,mDAAmD;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,EAAE,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,mBAAmB;IACnB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACvC,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IACpD,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAkC7C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,UAAU,EAAE,cAAc,CAAC;IAC3B,0BAA0B;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,6BAA6B;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,+BAA+B;IAC/B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,wBAAwB;IACxB,GAAG,EAAE,SAAS,CAAC;IACf,4BAA4B;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,+BAA+B;IAC/B,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAkGlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAgElC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WA+C/B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
|