devloom 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/.ai/core.dsl +44 -0
  2. package/.ai/skills.dsl +39 -0
  3. package/.ai/verify.dsl +97 -0
  4. package/.ai/workflow.dsl +81 -0
  5. package/.opencode/themes/devloom-night-owl.json +103 -0
  6. package/GUIDE.md +572 -115
  7. package/README.md +583 -109
  8. package/SECURITY.md +93 -0
  9. package/agents/devloom-developer-flash.md +31 -0
  10. package/agents/devloom-developer-senior.md +32 -0
  11. package/agents/devloom-developer.md +21 -55
  12. package/agents/devloom-documenter-flash.md +28 -0
  13. package/agents/devloom-documenter.md +17 -56
  14. package/agents/devloom-orchestrator.md +236 -356
  15. package/agents/devloom-planner-flash.md +34 -0
  16. package/agents/devloom-planner-senior.md +35 -0
  17. package/agents/devloom-planner.md +36 -0
  18. package/agents/devloom-qa-flash.md +32 -0
  19. package/agents/devloom-qa.md +21 -83
  20. package/agents/devloom-security-senior.md +35 -0
  21. package/agents/devloom-security.md +34 -0
  22. package/agents/devloom-verifier.md +33 -0
  23. package/agents/devloom-vision.md +113 -0
  24. package/agents/devloom-visual-critic.md +102 -0
  25. package/agents/devloom-visual-director.md +84 -0
  26. package/commands/devloom-agents.md +49 -0
  27. package/commands/devloom-auto.md +11 -0
  28. package/commands/devloom-context.md +82 -0
  29. package/commands/devloom-deepseek-mimo.md +11 -0
  30. package/commands/devloom-deepseek.md +11 -0
  31. package/commands/devloom-free.md +11 -0
  32. package/commands/devloom-go-economy.md +11 -0
  33. package/commands/devloom-go-flash.md +11 -0
  34. package/commands/devloom-go.md +11 -0
  35. package/commands/devloom-init.md +28 -50
  36. package/commands/devloom-loop-status.md +25 -0
  37. package/commands/devloom-loop.md +36 -0
  38. package/commands/devloom-mimo.md +11 -0
  39. package/commands/devloom-plan.md +13 -0
  40. package/commands/devloom-refresh.md +22 -0
  41. package/commands/devloom-resume.md +30 -49
  42. package/commands/devloom-save.md +69 -0
  43. package/commands/devloom-status.md +9 -18
  44. package/commands/devloom.md +99 -67
  45. package/dist/agents.d.ts +30 -0
  46. package/dist/agents.d.ts.map +1 -0
  47. package/dist/agents.js +139 -0
  48. package/dist/agents.js.map +1 -0
  49. package/dist/bootstrap.d.ts +56 -0
  50. package/dist/bootstrap.d.ts.map +1 -0
  51. package/dist/bootstrap.js +116 -0
  52. package/dist/bootstrap.js.map +1 -0
  53. package/dist/constraints.d.ts +5 -0
  54. package/dist/constraints.d.ts.map +1 -0
  55. package/dist/constraints.js +45 -0
  56. package/dist/constraints.js.map +1 -0
  57. package/dist/context.d.ts +42 -0
  58. package/dist/context.d.ts.map +1 -0
  59. package/dist/context.js +636 -0
  60. package/dist/context.js.map +1 -0
  61. package/dist/guard.d.ts +19 -0
  62. package/dist/guard.d.ts.map +1 -0
  63. package/dist/guard.js +418 -0
  64. package/dist/guard.js.map +1 -0
  65. package/dist/loop.d.ts +64 -0
  66. package/dist/loop.d.ts.map +1 -0
  67. package/dist/loop.js +164 -0
  68. package/dist/loop.js.map +1 -0
  69. package/dist/plugin.d.ts.map +1 -1
  70. package/dist/plugin.js +101 -1
  71. package/dist/plugin.js.map +1 -1
  72. package/dist/tui-agents.d.ts +61 -0
  73. package/dist/tui-agents.d.ts.map +1 -0
  74. package/dist/tui-agents.js +89 -0
  75. package/dist/tui-agents.js.map +1 -0
  76. package/dist/tui.d.ts +6 -0
  77. package/dist/tui.d.ts.map +1 -0
  78. package/dist/tui.js +92 -0
  79. package/dist/tui.js.map +1 -0
  80. package/dist/worktree.d.ts +46 -0
  81. package/dist/worktree.d.ts.map +1 -0
  82. package/dist/worktree.js +272 -0
  83. package/dist/worktree.js.map +1 -0
  84. package/package.json +46 -6
  85. package/patterns/changelog-drafter.md +38 -0
  86. package/patterns/ci-sweeper.md +40 -0
  87. package/patterns/daily-triage.md +37 -0
  88. package/patterns/dependency-sweeper.md +40 -0
  89. package/patterns/design-audit.md +63 -0
  90. package/patterns/issue-triage.md +37 -0
  91. package/patterns/post-merge-cleanup.md +34 -0
  92. package/patterns/pr-babysitter.md +37 -0
  93. package/patterns/registry.yaml +52 -0
  94. package/postinstall.mjs +264 -64
  95. package/project/README.md +29 -0
  96. package/protocol/agent-contracts.md +27 -0
  97. package/protocol/artifact-system.md +53 -0
  98. package/protocol/model-routing.md +194 -0
  99. package/protocol/orchestrator-core.md +43 -0
  100. package/protocol/project-system.md +45 -0
  101. package/protocol/rules.md +18 -0
  102. package/protocol/verification-policy.md +48 -0
  103. package/scripts/briefing.mjs +192 -0
  104. package/scripts/loop-run.mjs +205 -0
  105. package/scripts/model-capabilities.mjs +194 -0
  106. package/scripts/plugin-cache.mjs +269 -0
  107. package/scripts/profile.mjs +755 -0
  108. package/scripts/visual-benchmark.mjs +149 -0
  109. package/scripts/worktree.mjs +445 -0
  110. package/skills/build/development.md +33 -0
  111. package/skills/build/live-docs.md +38 -0
  112. package/skills/build/simplify.md +50 -0
  113. package/skills/build/vision-analysis.md +98 -0
  114. package/skills/design/app-design.md +31 -0
  115. package/skills/design/design-grounding.md +30 -0
  116. package/skills/design/design-system.md +27 -0
  117. package/skills/design/game-design.md +35 -0
  118. package/skills/design/motion-design.md +34 -0
  119. package/skills/design/visual-direction.md +32 -0
  120. package/skills/design/web-design.md +33 -0
  121. package/skills/loop/changelog-drafter.md +32 -0
  122. package/skills/loop/ci-sweeper.md +24 -0
  123. package/skills/loop/constraints.md +21 -0
  124. package/skills/loop/dependency-sweeper.md +24 -0
  125. package/skills/loop/design-audit.md +67 -0
  126. package/skills/loop/issue-triage.md +27 -0
  127. package/skills/loop/post-merge-cleanup.md +24 -0
  128. package/skills/loop/pr-babysitter.md +26 -0
  129. package/skills/loop/triage.md +25 -0
  130. package/skills/loop/verifier.md +20 -0
  131. package/skills/meta/skill-discovery.md +23 -0
  132. package/skills/plan/planning.md +27 -0
  133. package/skills/plan/verification-planning.md +40 -0
  134. package/skills/review/security-review.md +63 -0
  135. package/skills/ship/documentation.md +11 -0
  136. package/skills/verify/app-verification.md +19 -0
  137. package/skills/verify/quality-assurance.md +17 -0
  138. package/skills/verify/visual-critique.md +30 -0
  139. package/skills/verify/visual-quality-gate.md +29 -0
  140. package/skills/verify/visual-regression.md +25 -0
  141. package/agents/devloom-analyst.md +0 -83
  142. package/agents/devloom-architect.md +0 -88
@@ -0,0 +1,636 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, statSync } from "node:fs";
2
+ import { join, basename } from "node:path";
3
+ export const CONTEXT_DIR = [".opencode", "devloom", "context"];
4
+ export const CONTEXT_FILES = ["project.md", "conventions.md", "security.md", "examples.md"];
5
+ export const MVI_MAX_LINES = 200;
6
+ /** Directories that must never influence project-wide detection or example extraction. */
7
+ const SKIP_DIRS = new Set(["node_modules", ".git", "dist", "coverage", "build", "out", ".next", ".devloom-worktrees"]);
8
+ /**
9
+ * Walk a directory tree, pruning ignored dirs, and return up to `max` file paths
10
+ * RELATIVE to `dir`, sorted for determinism. `readdirSync({ recursive: true })`
11
+ * enumerates the whole tree every call — including node_modules — which is
12
+ * O(tree) I/O on every plugin init. `walkProject` skips ignored dirs up front;
13
+ * the returned cap is applied AFTER collection so callers always see files in a
14
+ * stable order rather than whatever directory traversal happened to hit first.
15
+ */
16
+ function walkProject(dir, max = 100) {
17
+ const results = [];
18
+ const stack = [[dir, ""]];
19
+ while (stack.length > 0) {
20
+ const [abs, rel] = stack.pop();
21
+ let entries;
22
+ try {
23
+ entries = readdirSync(abs, { withFileTypes: true });
24
+ }
25
+ catch {
26
+ continue;
27
+ }
28
+ for (const entry of entries) {
29
+ if (entry.name.startsWith(".") || SKIP_DIRS.has(entry.name))
30
+ continue;
31
+ const relPath = rel ? `${rel}/${entry.name}` : entry.name;
32
+ if (entry.isDirectory())
33
+ stack.push([join(abs, entry.name), relPath]);
34
+ else
35
+ results.push(relPath);
36
+ }
37
+ }
38
+ return results.sort().slice(0, max);
39
+ }
40
+ function contextDir(rootDir) {
41
+ return join(rootDir, ...CONTEXT_DIR);
42
+ }
43
+ export function contextFilePath(rootDir, file) {
44
+ return join(contextDir(rootDir), file);
45
+ }
46
+ export function readContextSummary(rootDir) {
47
+ const dir = contextDir(rootDir);
48
+ const files = CONTEXT_FILES.map((name) => {
49
+ const path = join(dir, name);
50
+ if (!existsSync(path)) {
51
+ return { name, exists: false, lines: 0, overLimit: false };
52
+ }
53
+ const content = readFileSync(path, "utf8");
54
+ const lines = content.split("\n").length;
55
+ return { name, exists: true, lines, overLimit: lines > MVI_MAX_LINES };
56
+ });
57
+ const totalLines = files.reduce((sum, f) => sum + f.lines, 0);
58
+ const hasContext = files.some((f) => f.exists);
59
+ return { hasContext, files, totalLines };
60
+ }
61
+ export function readContext(rootDir) {
62
+ const dir = contextDir(rootDir);
63
+ const result = {};
64
+ for (const name of CONTEXT_FILES) {
65
+ const path = join(dir, name);
66
+ result[name] = existsSync(path) ? readFileSync(path, "utf8") : "";
67
+ }
68
+ return result;
69
+ }
70
+ export function contextSummaryString(rootDir) {
71
+ const summary = readContextSummary(rootDir);
72
+ if (!summary.hasContext)
73
+ return "context=none";
74
+ const existing = summary.files.filter((f) => f.exists);
75
+ const overLimit = existing.filter((f) => f.overLimit);
76
+ const parts = [`context=${existing.length}`, `lines=${summary.totalLines}`];
77
+ if (overLimit.length > 0) {
78
+ parts.push(`overMVI=${overLimit.map((f) => f.name).join(",")}`);
79
+ }
80
+ return parts.join(" ");
81
+ }
82
+ export function ensureContextDir(rootDir) {
83
+ const dir = contextDir(rootDir);
84
+ if (!existsSync(dir))
85
+ mkdirSync(dir, { recursive: true });
86
+ }
87
+ function readJson(path, fallback) {
88
+ try {
89
+ return JSON.parse(readFileSync(path, "utf8"));
90
+ }
91
+ catch {
92
+ return fallback;
93
+ }
94
+ }
95
+ function readPackageJson(rootDir) {
96
+ const path = join(rootDir, "package.json");
97
+ if (!existsSync(path))
98
+ return null;
99
+ return readJson(path, {});
100
+ }
101
+ function hasFile(rootDir, ...segments) {
102
+ return existsSync(join(rootDir, ...segments));
103
+ }
104
+ function detectLanguage(rootDir, pkg) {
105
+ if (hasFile(rootDir, "tsconfig.json"))
106
+ return "TypeScript";
107
+ if (pkg && (pkg.dependencies?.typescript || pkg.devDependencies?.typescript))
108
+ return "TypeScript";
109
+ if (hasFile(rootDir, "go.mod"))
110
+ return "Go";
111
+ if (hasFile(rootDir, "pyproject.toml") || hasFile(rootDir, "requirements.txt"))
112
+ return "Python";
113
+ if (hasFile(rootDir, "Cargo.toml"))
114
+ return "Rust";
115
+ if (hasFile(rootDir, "pom.xml") || hasFile(rootDir, "build.gradle"))
116
+ return "Java";
117
+ if (hasFile(rootDir, "Gemfile"))
118
+ return "Ruby";
119
+ if (pkg)
120
+ return "JavaScript";
121
+ return "Unknown";
122
+ }
123
+ function detectFramework(rootDir, pkg) {
124
+ if (!pkg) {
125
+ if (hasFile(rootDir, "go.mod"))
126
+ return "net/http or chi/gin";
127
+ if (hasFile(rootDir, "pyproject.toml"))
128
+ return "FastAPI/Django/Flask";
129
+ if (hasFile(rootDir, "Cargo.toml"))
130
+ return "axum/actix";
131
+ return "Unknown";
132
+ }
133
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
134
+ if (deps.next)
135
+ return "Next.js";
136
+ if (deps.react)
137
+ return "React";
138
+ if (deps.vue)
139
+ return "Vue";
140
+ if (deps.svelte)
141
+ return "Svelte";
142
+ if (deps.fastify)
143
+ return "Fastify";
144
+ if (deps.express)
145
+ return "Express";
146
+ if (deps.hono)
147
+ return "Hono";
148
+ if (deps.nestjs)
149
+ return "NestJS";
150
+ if (deps["@nestjs/core"])
151
+ return "NestJS";
152
+ return "Unknown";
153
+ }
154
+ function detectOrm(rootDir, pkg) {
155
+ if (!pkg) {
156
+ if (hasFile(rootDir, "prisma", "schema.prisma"))
157
+ return "Prisma";
158
+ return "Unknown";
159
+ }
160
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
161
+ if (deps.drizzle)
162
+ return "Drizzle";
163
+ if (deps.prisma || hasFile(rootDir, "prisma", "schema.prisma"))
164
+ return "Prisma";
165
+ if (deps["@prisma/client"])
166
+ return "Prisma";
167
+ if (deps.typeorm)
168
+ return "TypeORM";
169
+ if (deps.sequelize)
170
+ return "Sequelize";
171
+ if (deps.mongoose || deps.mongodb)
172
+ return "Mongoose";
173
+ if (deps.prisma)
174
+ return "Prisma";
175
+ if (deps.kysely)
176
+ return "Kysely";
177
+ return "Unknown";
178
+ }
179
+ function detectDatabase(rootDir, pkg) {
180
+ if (!pkg)
181
+ return "Unknown";
182
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
183
+ if (deps.pg || deps["postgres-js"] || deps.postgres)
184
+ return "PostgreSQL";
185
+ if (deps.mysql2 || deps.mysql)
186
+ return "MySQL";
187
+ if (deps.sqlite3 || deps["better-sqlite3"])
188
+ return "SQLite";
189
+ if (deps.mongoose || deps.mongodb)
190
+ return "MongoDB";
191
+ if (deps.redis || deps.ioredis)
192
+ return "Redis";
193
+ if (hasFile(rootDir, "prisma", "schema.prisma")) {
194
+ try {
195
+ const schema = readFileSync(join(rootDir, "prisma", "schema.prisma"), "utf8");
196
+ const provider = schema.match(/provider\s*=\s*"(\w+)"/);
197
+ if (provider)
198
+ return provider[1] === "postgresql" ? "PostgreSQL" : provider[1];
199
+ }
200
+ catch { }
201
+ }
202
+ return "Unknown";
203
+ }
204
+ function detectStyling(pkg) {
205
+ if (!pkg)
206
+ return "Unknown";
207
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
208
+ if (deps.tailwindcss || deps["@tailwindcss/postcss"])
209
+ return "Tailwind";
210
+ if (deps["styled-components"])
211
+ return "styled-components";
212
+ if (deps["@emotion/styled"])
213
+ return "Emotion";
214
+ if (deps.sass || deps["node-sass"])
215
+ return "Sass/SCSS";
216
+ if (deps.bootstrap)
217
+ return "Bootstrap";
218
+ return "Unknown";
219
+ }
220
+ function detectValidation(pkg) {
221
+ if (!pkg)
222
+ return "Unknown";
223
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
224
+ if (deps.zod)
225
+ return "Zod";
226
+ if (deps.yup)
227
+ return "Yup";
228
+ if (deps.joi)
229
+ return "Joi";
230
+ if (deps["class-validator"])
231
+ return "class-validator";
232
+ if (deps.valibot)
233
+ return "Valibot";
234
+ return "Unknown";
235
+ }
236
+ function detectTesting(rootDir, pkg) {
237
+ if (!pkg)
238
+ return "Unknown";
239
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
240
+ if (deps.jest || hasFile(rootDir, "jest.config.js") || hasFile(rootDir, "jest.config.mjs"))
241
+ return "Jest";
242
+ if (deps.vitest || hasFile(rootDir, "vitest.config.ts"))
243
+ return "Vitest";
244
+ if (deps["@testing-library/react"])
245
+ return "Testing Library + Jest";
246
+ if (deps.pytest)
247
+ return "pytest";
248
+ if (deps.mocha)
249
+ return "Mocha";
250
+ if (deps["@playwright/test"])
251
+ return "Playwright";
252
+ return "Unknown";
253
+ }
254
+ function detectLinter(pkg) {
255
+ if (!pkg)
256
+ return "Unknown";
257
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
258
+ if (deps.eslint)
259
+ return "ESLint";
260
+ if (deps.biome)
261
+ return "Biome";
262
+ if (deps.deno)
263
+ return "deno lint";
264
+ if (deps.ruff)
265
+ return "Ruff";
266
+ return "Unknown";
267
+ }
268
+ function detectPackageManager(rootDir) {
269
+ if (hasFile(rootDir, "bun.lock") || hasFile(rootDir, "bun.lockb"))
270
+ return "bun";
271
+ if (hasFile(rootDir, "pnpm-lock.yaml"))
272
+ return "pnpm";
273
+ if (hasFile(rootDir, "yarn.lock"))
274
+ return "yarn";
275
+ if (hasFile(rootDir, "package-lock.json"))
276
+ return "npm";
277
+ if (hasFile(rootDir, "go.sum") || hasFile(rootDir, "go.mod"))
278
+ return "go mod";
279
+ if (hasFile(rootDir, "Cargo.lock") || hasFile(rootDir, "Cargo.toml"))
280
+ return "cargo";
281
+ if (hasFile(rootDir, "uv.lock") || hasFile(rootDir, "pyproject.toml"))
282
+ return "uv/pip";
283
+ return "Unknown";
284
+ }
285
+ function detectTypeCheck(rootDir, pkg) {
286
+ if (!pkg)
287
+ return "Unknown";
288
+ const hasTsc = hasFile(rootDir, "tsconfig.json");
289
+ const scripts = pkg.scripts || {};
290
+ if (scripts.typecheck)
291
+ return "npm run typecheck";
292
+ if (scripts["type-check"])
293
+ return "npm run type-check";
294
+ if (hasTsc)
295
+ return "tsc --noEmit";
296
+ return "Unknown";
297
+ }
298
+ function detectKeyLibraries(pkg) {
299
+ if (!pkg)
300
+ return [];
301
+ const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
302
+ const notable = [
303
+ "next-auth", "jsonwebtoken", "bcryptjs", "argon2",
304
+ "stripe", "twilio", "sendgrid", "nodemailer",
305
+ "ioredis", "bull", "bullmq",
306
+ "openai", "anthropic", "@anthropic-ai/sdk",
307
+ "winston", "pino", "dotenv",
308
+ "lodash", "date-fns", "dayjs",
309
+ "rxjs", "zod", "drizzle-orm",
310
+ "playwright", "@playwright/test",
311
+ "storybook",
312
+ ];
313
+ return notable.filter((lib) => deps[lib]);
314
+ }
315
+ function detectNamingConventions(rootDir) {
316
+ const srcDir = join(rootDir, "src");
317
+ const dirs = existsSync(srcDir) ? srcDir : rootDir;
318
+ let hasKebab = false;
319
+ let hasPascal = false;
320
+ let hasCamel = false;
321
+ try {
322
+ for (const base of walkProject(dirs, 100).map((p) => p.split("/").pop() || p)) {
323
+ if (base.includes("-") && base.match(/^[a-z]/))
324
+ hasKebab = true;
325
+ if (base.match(/^[A-Z][a-zA-Z]*\.(ts|tsx|js|jsx)$/))
326
+ hasPascal = true;
327
+ if (base.match(/^[a-z][a-zA-Z]*\.(ts|tsx|js|jsx)$/) && !base.includes("-"))
328
+ hasCamel = true;
329
+ }
330
+ }
331
+ catch { }
332
+ return {
333
+ files: hasKebab ? "kebab-case" : hasCamel ? "camelCase" : "default",
334
+ components: hasPascal ? "PascalCase" : "PascalCase",
335
+ functions: "camelCase",
336
+ };
337
+ }
338
+ function findExampleFiles(rootDir, patterns, maxFiles = 3) {
339
+ const srcDir = join(rootDir, "src");
340
+ const searchDir = existsSync(srcDir) ? srcDir : rootDir;
341
+ const results = [];
342
+ // Walk a bounded candidate set (100 files, node_modules pruned) rather than
343
+ // capping the walk at maxFiles: a tiny cap can return paths that sort before
344
+ // the file the pattern is actually looking for.
345
+ for (const entry of walkProject(searchDir, 100)) {
346
+ const full = join(searchDir, entry);
347
+ try {
348
+ const stat = statSync(full);
349
+ if (!stat.isFile())
350
+ continue;
351
+ }
352
+ catch {
353
+ continue;
354
+ }
355
+ if (patterns.some((p) => p.test(entry))) {
356
+ results.push(full);
357
+ if (results.length >= maxFiles)
358
+ break;
359
+ }
360
+ }
361
+ return results;
362
+ }
363
+ function extractApiExample(rootDir) {
364
+ const apiFiles = findExampleFiles(rootDir, [
365
+ /route\.(ts|js)$/,
366
+ /controller\.(ts|js)$/,
367
+ /handler\.(ts|js)$/,
368
+ /api\/.*\.(ts|js)$/,
369
+ ], 1);
370
+ if (apiFiles.length === 0)
371
+ return "";
372
+ try {
373
+ const content = readFileSync(apiFiles[0], "utf8");
374
+ const lines = content.split("\n").slice(0, 40).join("\n");
375
+ return lines;
376
+ }
377
+ catch {
378
+ return "";
379
+ }
380
+ }
381
+ function extractComponentExample(rootDir) {
382
+ const componentFiles = findExampleFiles(rootDir, [
383
+ /^[A-Z][a-zA-Z]*\.(tsx|jsx)$/,
384
+ ], 1);
385
+ if (componentFiles.length === 0)
386
+ return "";
387
+ try {
388
+ const content = readFileSync(componentFiles[0], "utf8");
389
+ const lines = content.split("\n").slice(0, 40).join("\n");
390
+ return lines;
391
+ }
392
+ catch {
393
+ return "";
394
+ }
395
+ }
396
+ function detectSecurityPatterns(_rootDir, pkg) {
397
+ const patterns = [];
398
+ if (!pkg)
399
+ return patterns;
400
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
401
+ if (deps.zod || deps.yup || deps.joi)
402
+ patterns.push("- Input validation with " + (deps.zod ? "Zod" : deps.yup ? "Yup" : "Joi"));
403
+ if (deps.bcryptjs || deps.argon2 || deps.bcrypt)
404
+ patterns.push("- Password hashing with " + (deps.argon2 ? "argon2" : "bcrypt"));
405
+ if (deps.jsonwebtoken || deps["next-auth"] || deps["@auth/core"])
406
+ patterns.push("- Auth via " + (deps["next-auth"] ? "NextAuth" : deps["@auth/core"] ? "Auth.js" : "JWT"));
407
+ if (deps.helmet)
408
+ patterns.push("- Helmet for HTTP headers");
409
+ if (deps.cors)
410
+ patterns.push("- CORS configured");
411
+ if (deps["express-rate-limit"] || deps["rate-limiter-flexible"])
412
+ patterns.push("- Rate limiting");
413
+ if (patterns.length === 0) {
414
+ patterns.push("- Validate all user input (never trust input)");
415
+ patterns.push("- Use parameterized queries (no string concatenation for SQL)");
416
+ patterns.push("- Store secrets in environment variables, never hardcode");
417
+ patterns.push("- Use .env files for local dev, add .env to .gitignore");
418
+ }
419
+ return patterns;
420
+ }
421
+ export function detectTechStack(rootDir) {
422
+ const pkg = readPackageJson(rootDir);
423
+ return {
424
+ language: detectLanguage(rootDir, pkg),
425
+ framework: detectFramework(rootDir, pkg),
426
+ orm: detectOrm(rootDir, pkg),
427
+ database: detectDatabase(rootDir, pkg),
428
+ styling: detectStyling(pkg),
429
+ validation: detectValidation(pkg),
430
+ testing: detectTesting(rootDir, pkg),
431
+ linter: detectLinter(pkg),
432
+ typeCheck: detectTypeCheck(rootDir, pkg),
433
+ packageManager: detectPackageManager(rootDir),
434
+ keyLibraries: detectKeyLibraries(pkg),
435
+ };
436
+ }
437
+ function buildProjectMd(stack, now) {
438
+ const libs = stack.keyLibraries.length > 0
439
+ ? stack.keyLibraries.map((l) => `- ${l}`).join("\n")
440
+ : "- (auto-detected on next run)";
441
+ return `# Project Patterns
442
+ > Auto-generated: ${now}
443
+ > MVI: keep under 200 lines. Edit manually to override.
444
+
445
+ ## Tech Stack
446
+ - Language: ${stack.language}
447
+ - Framework: ${stack.framework}
448
+ - ORM: ${stack.orm}
449
+ - Database: ${stack.database}
450
+ - Styling: ${stack.styling}
451
+ - Validation: ${stack.validation}
452
+ - Testing: ${stack.testing}
453
+ - Linter: ${stack.linter}
454
+ - Type check: ${stack.typeCheck}
455
+ - Package manager: ${stack.packageManager}
456
+
457
+ ## Architecture
458
+ - Follow existing project structure (auto-detected)
459
+ - SOLID + Clean Architecture principles
460
+ - Dependency inversion: domain has no framework coupling
461
+ - Surgical changes: smallest correct diff
462
+
463
+ ## Key Libraries
464
+ ${libs}
465
+ `;
466
+ }
467
+ function buildConventionsMd(rootDir, now) {
468
+ const naming = detectNamingConventions(rootDir);
469
+ const stack = detectTechStack(rootDir);
470
+ const standards = [];
471
+ if (stack.language === "TypeScript") {
472
+ standards.push("- TypeScript strict mode");
473
+ standards.push("- No 'any' types");
474
+ standards.push("- Explicit return types on public APIs");
475
+ }
476
+ standards.push("- Prefer early returns over deep nesting");
477
+ standards.push("- No magic numbers — extract constants");
478
+ standards.push("- Co-locate tests next to source files");
479
+ standards.push("- One component/module per file");
480
+ return `# Coding Conventions
481
+ > Auto-generated: ${now}
482
+ > MVI: keep under 200 lines. Edit manually to override.
483
+
484
+ ## Naming
485
+ - Files: ${naming.files}
486
+ - Components: ${naming.components}
487
+ - Functions: ${naming.functions}
488
+ - Constants: UPPER_SNAKE_CASE
489
+ - Types/Interfaces: PascalCase
490
+
491
+ ## Code Standards
492
+ ${standards.join("\n")}
493
+
494
+ ## File Organization
495
+ - Follow existing project directory structure
496
+ - Index files (index.ts) for barrel exports
497
+ - Test files: *.test.ts next to source
498
+ `;
499
+ }
500
+ function buildSecurityMd(rootDir, now) {
501
+ const pkg = readPackageJson(rootDir);
502
+ const patterns = detectSecurityPatterns(rootDir, pkg);
503
+ return `# Security Requirements
504
+ > Auto-generated: ${now}
505
+ > MVI: keep under 200 lines. Edit manually to override.
506
+
507
+ ## Detected Patterns
508
+ ${patterns.join("\n")}
509
+
510
+ ## Universal Rules
511
+ - Never trust user input — validate everything
512
+ - Parameterized queries only (no SQL string concatenation)
513
+ - Secrets in environment variables, never in code
514
+ - .env files in .gitignore
515
+ - Auth checks on every protected route
516
+ - Rate limit auth endpoints
517
+ `;
518
+ }
519
+ function buildExamplesMd(rootDir, now) {
520
+ const apiExample = extractApiExample(rootDir);
521
+ const componentExample = extractComponentExample(rootDir);
522
+ const apiSection = apiExample
523
+ ? `## API Endpoint Pattern (from your codebase)\n\`\`\`typescript\n${apiExample}\n\`\`\``
524
+ : `## API Endpoint Pattern (template — no example found in codebase)\n\`\`\`typescript\n// Follow your framework's convention\n// Validate input, handle errors, return proper status codes\n\`\`\``;
525
+ const componentSection = componentExample
526
+ ? `## Component Pattern (from your codebase)\n\`\`\`typescript\n${componentExample}\n\`\`\``
527
+ : `## Component Pattern (template — no example found in codebase)\n\`\`\`typescript\n// Follow your framework's component convention\n\`\`\``;
528
+ return `# Code Examples
529
+ > Auto-generated: ${now}
530
+ > MVI: keep examples under 80 lines each.
531
+
532
+ ${apiSection}
533
+
534
+ ${componentSection}
535
+ `;
536
+ }
537
+ export function generateContext(rootDir, force = false) {
538
+ const dir = contextDir(rootDir);
539
+ ensureContextDir(rootDir);
540
+ const now = new Date().toISOString();
541
+ const stack = detectTechStack(rootDir);
542
+ const files = {
543
+ "project.md": buildProjectMd(stack, now),
544
+ "conventions.md": buildConventionsMd(rootDir, now),
545
+ "security.md": buildSecurityMd(rootDir, now),
546
+ "examples.md": buildExamplesMd(rootDir, now),
547
+ };
548
+ const generated = [];
549
+ const skipped = [];
550
+ for (const [name, content] of Object.entries(files)) {
551
+ const path = join(dir, name);
552
+ if (existsSync(path) && !force) {
553
+ skipped.push(name);
554
+ continue;
555
+ }
556
+ writeFileSync(path, content);
557
+ generated.push(name);
558
+ }
559
+ return { generated, skipped };
560
+ }
561
+ export function autoGenerateContextIfMissing(rootDir) {
562
+ const summary = readContextSummary(rootDir);
563
+ if (summary.hasContext)
564
+ return false;
565
+ const result = generateContext(rootDir, false);
566
+ return result.generated.length > 0;
567
+ }
568
+ function dirTree(rootDir, dir, depth = 0, maxDepth = 4) {
569
+ if (depth > maxDepth)
570
+ return "";
571
+ const absPath = join(rootDir, dir);
572
+ let entries;
573
+ try {
574
+ entries = readdirSync(absPath);
575
+ }
576
+ catch {
577
+ return "";
578
+ }
579
+ const indent = " ".repeat(depth);
580
+ let result = "";
581
+ const dirs = [];
582
+ const files = [];
583
+ for (const entry of entries.sort()) {
584
+ if (entry.startsWith(".") || entry === "node_modules" || entry === "dist" || entry === "coverage" || entry === ".git")
585
+ continue;
586
+ const full = join(absPath, entry);
587
+ try {
588
+ if (statSync(full).isDirectory())
589
+ dirs.push(entry);
590
+ else
591
+ files.push(entry);
592
+ }
593
+ catch { }
594
+ }
595
+ for (const d of dirs) {
596
+ result += `${indent}${d}/\n`;
597
+ result += dirTree(rootDir, join(dir, d), depth + 1, maxDepth);
598
+ }
599
+ for (const f of files.slice(0, 8)) {
600
+ result += `${indent}${f}\n`;
601
+ }
602
+ if (files.length > 8)
603
+ result += `${indent}... (+${files.length - 8} more)\n`;
604
+ return result;
605
+ }
606
+ export function buildAtlas(rootDir) {
607
+ const pkg = readPackageJson(rootDir);
608
+ const name = pkg?.name || basename(rootDir);
609
+ return [
610
+ `# Architecture Atlas: ${name}`,
611
+ `> Auto-generated. Edit manually to override. Update when project structure changes significantly.`,
612
+ "",
613
+ "## Directory Tree",
614
+ "```",
615
+ dirTree(rootDir, ".").trim(),
616
+ "```",
617
+ "",
618
+ "## Key Files",
619
+ "- package.json" + (pkg ? ` (${pkg.description || "no description"})` : ""),
620
+ "- tsconfig.json" + (existsSync(join(rootDir, "tsconfig.json")) ? " (TypeScript config)" : " (not found)"),
621
+ "- README.md" + (existsSync(join(rootDir, "README.md")) ? " (project docs)" : " (not found)"),
622
+ "",
623
+ "## Tech Stack",
624
+ ...Object.entries(detectTechStack(rootDir)).map(([k, v]) => `- ${k}: ${v}`),
625
+ "",
626
+ ].join("\n");
627
+ }
628
+ export function ensureAtlas(rootDir) {
629
+ const atlasPath = join(contextDir(rootDir), "atlas.md");
630
+ if (existsSync(atlasPath))
631
+ return false;
632
+ const atlas = buildAtlas(rootDir);
633
+ writeFileSync(atlasPath, atlas);
634
+ return true;
635
+ }
636
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}