agent-bober 0.7.0 → 0.8.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/README.md +64 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +176 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/discovery/config-generator.d.ts +28 -0
- package/dist/discovery/config-generator.d.ts.map +1 -0
- package/dist/discovery/config-generator.js +225 -0
- package/dist/discovery/config-generator.js.map +1 -0
- package/dist/discovery/index.d.ts +20 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +19 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/scanner.d.ts +17 -0
- package/dist/discovery/scanner.d.ts.map +1 -0
- package/dist/discovery/scanner.js +120 -0
- package/dist/discovery/scanner.js.map +1 -0
- package/dist/discovery/scanners/ci-checks.d.ts +10 -0
- package/dist/discovery/scanners/ci-checks.d.ts.map +1 -0
- package/dist/discovery/scanners/ci-checks.js +169 -0
- package/dist/discovery/scanners/ci-checks.js.map +1 -0
- package/dist/discovery/scanners/code-conventions.d.ts +12 -0
- package/dist/discovery/scanners/code-conventions.d.ts.map +1 -0
- package/dist/discovery/scanners/code-conventions.js +216 -0
- package/dist/discovery/scanners/code-conventions.js.map +1 -0
- package/dist/discovery/scanners/documentation.d.ts +17 -0
- package/dist/discovery/scanners/documentation.d.ts.map +1 -0
- package/dist/discovery/scanners/documentation.js +92 -0
- package/dist/discovery/scanners/documentation.js.map +1 -0
- package/dist/discovery/scanners/git-conventions.d.ts +11 -0
- package/dist/discovery/scanners/git-conventions.d.ts.map +1 -0
- package/dist/discovery/scanners/git-conventions.js +128 -0
- package/dist/discovery/scanners/git-conventions.js.map +1 -0
- package/dist/discovery/scanners/package-scripts.d.ts +9 -0
- package/dist/discovery/scanners/package-scripts.d.ts.map +1 -0
- package/dist/discovery/scanners/package-scripts.js +112 -0
- package/dist/discovery/scanners/package-scripts.js.map +1 -0
- package/dist/discovery/scanners/test-conventions.d.ts +9 -0
- package/dist/discovery/scanners/test-conventions.d.ts.map +1 -0
- package/dist/discovery/scanners/test-conventions.js +231 -0
- package/dist/discovery/scanners/test-conventions.js.map +1 -0
- package/dist/discovery/synthesizer.d.ts +30 -0
- package/dist/discovery/synthesizer.d.ts.map +1 -0
- package/dist/discovery/synthesizer.js +348 -0
- package/dist/discovery/synthesizer.js.map +1 -0
- package/dist/discovery/types.d.ts +160 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +9 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/init.d.ts.map +1 -1
- package/dist/mcp/tools/init.js +102 -1
- package/dist/mcp/tools/init.js.map +1 -1
- package/package.json +2 -2
- package/skills/bober.principles/SKILL.md +36 -3
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the deep programmatic codebase scanner.
|
|
3
|
+
*
|
|
4
|
+
* DiscoveryReport is the top-level output of scanProject().
|
|
5
|
+
* All sections are optional -- a graceful failure in a sub-scanner
|
|
6
|
+
* produces a null/empty section, not a thrown error.
|
|
7
|
+
*/
|
|
8
|
+
/** Bober command categories mapped from package.json scripts. */
|
|
9
|
+
export interface CommandMapping {
|
|
10
|
+
/** Script name in package.json (e.g. "build", "test:watch"). */
|
|
11
|
+
scriptName: string;
|
|
12
|
+
/** Actual command string (e.g. "tsc", "vitest run"). */
|
|
13
|
+
command: string;
|
|
14
|
+
/** Full run command including package manager prefix (e.g. "npm run build"). */
|
|
15
|
+
runCommand: string;
|
|
16
|
+
}
|
|
17
|
+
export type BoberCommandCategory = "build" | "test" | "lint" | "typecheck" | "dev" | "install";
|
|
18
|
+
export interface PackageScriptsReport {
|
|
19
|
+
/** Detected package manager. */
|
|
20
|
+
packageManager: "npm" | "yarn" | "pnpm" | "bun" | null;
|
|
21
|
+
/** All scripts from package.json. */
|
|
22
|
+
allScripts: Record<string, string>;
|
|
23
|
+
/** Scripts mapped to bober categories. */
|
|
24
|
+
categorized: Partial<Record<BoberCommandCategory, CommandMapping>>;
|
|
25
|
+
}
|
|
26
|
+
export type CICategory = "test" | "lint" | "build" | "deploy" | "other";
|
|
27
|
+
export interface CIStep {
|
|
28
|
+
/** Name of the CI step if present. */
|
|
29
|
+
name: string | null;
|
|
30
|
+
/** The run command extracted from the step. */
|
|
31
|
+
runCommand: string;
|
|
32
|
+
/** Inferred category. */
|
|
33
|
+
category: CICategory;
|
|
34
|
+
}
|
|
35
|
+
export interface CIWorkflow {
|
|
36
|
+
/** Relative path to the workflow file (e.g. ".github/workflows/ci.yml"). */
|
|
37
|
+
file: string;
|
|
38
|
+
steps: CIStep[];
|
|
39
|
+
}
|
|
40
|
+
export interface CIChecksReport {
|
|
41
|
+
workflows: CIWorkflow[];
|
|
42
|
+
/** Flat list of all unique run commands across all workflows. */
|
|
43
|
+
allRunCommands: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface GitConventionsReport {
|
|
46
|
+
/** Whether conventional commits (feat:, fix:, etc.) are detected. */
|
|
47
|
+
usesConventionalCommits: boolean;
|
|
48
|
+
/** Most common commit prefix pattern (e.g. "bober(", "feat:", "TICKET-"). */
|
|
49
|
+
mostCommonPrefix: string | null;
|
|
50
|
+
/** Raw sample of recent commit messages (last 50). */
|
|
51
|
+
recentMessages: string[];
|
|
52
|
+
/** Detected branch naming patterns (e.g. "feature/*", "bober/*"). */
|
|
53
|
+
branchPatterns: string[];
|
|
54
|
+
/** All branch names from git branch -a. */
|
|
55
|
+
branches: string[];
|
|
56
|
+
/** Whether the repo has a linear history (no merge commits). */
|
|
57
|
+
hasLinearHistory: boolean;
|
|
58
|
+
/** Ratio of merge commits among sampled commits (0-1). */
|
|
59
|
+
mergeCommitRatio: number;
|
|
60
|
+
}
|
|
61
|
+
export type FileNamingStyle = "camelCase" | "kebab-case" | "PascalCase" | "snake_case" | "mixed";
|
|
62
|
+
export interface FileNamingReport {
|
|
63
|
+
dominant: FileNamingStyle;
|
|
64
|
+
counts: Record<FileNamingStyle, number>;
|
|
65
|
+
}
|
|
66
|
+
export interface ImportStyleReport {
|
|
67
|
+
/** Count of relative imports (e.g. ./foo, ../bar). */
|
|
68
|
+
relativeCount: number;
|
|
69
|
+
/** Count of absolute/alias imports (e.g. @/components, src/utils). */
|
|
70
|
+
absoluteCount: number;
|
|
71
|
+
/** Whether imports use .js extensions (common in ESM TypeScript). */
|
|
72
|
+
usesJsExtensions: boolean;
|
|
73
|
+
/** Example import lines (up to 5). */
|
|
74
|
+
examples: string[];
|
|
75
|
+
}
|
|
76
|
+
export interface ExportStyleReport {
|
|
77
|
+
namedExportCount: number;
|
|
78
|
+
defaultExportCount: number;
|
|
79
|
+
/** Dominant style. */
|
|
80
|
+
dominant: "named" | "default" | "mixed";
|
|
81
|
+
}
|
|
82
|
+
export interface TypeScriptPatternsReport {
|
|
83
|
+
/** Number of `any` usages across sampled files. */
|
|
84
|
+
anyCount: number;
|
|
85
|
+
/** Number of `@ts-ignore` / `@ts-expect-error` usages. */
|
|
86
|
+
tsIgnoreCount: number;
|
|
87
|
+
/** Number of `enum` declarations. */
|
|
88
|
+
enumCount: number;
|
|
89
|
+
/** Number of `interface` declarations. */
|
|
90
|
+
interfaceCount: number;
|
|
91
|
+
/** Number of `type` alias declarations. */
|
|
92
|
+
typeAliasCount: number;
|
|
93
|
+
}
|
|
94
|
+
export interface CodeConventionsReport {
|
|
95
|
+
/** Total source files sampled. */
|
|
96
|
+
filesSampled: number;
|
|
97
|
+
fileNaming: FileNamingReport;
|
|
98
|
+
importStyle: ImportStyleReport;
|
|
99
|
+
exportStyle: ExportStyleReport;
|
|
100
|
+
typescriptPatterns: TypeScriptPatternsReport | null;
|
|
101
|
+
}
|
|
102
|
+
export type TestFramework = "vitest" | "jest" | "mocha" | "jasmine" | "pytest" | "unknown";
|
|
103
|
+
export type MockingLibrary = "vitest" | "jest" | "sinon" | "testdouble" | "none" | "unknown";
|
|
104
|
+
export interface TestConventionsReport {
|
|
105
|
+
framework: TestFramework;
|
|
106
|
+
/** Dominant test file naming pattern (e.g. "*.test.ts", "*.spec.ts"). */
|
|
107
|
+
filePattern: "*.test.ts" | "*.spec.ts" | "*.test.js" | "*.spec.js" | "mixed" | "unknown";
|
|
108
|
+
/** Whether test files are colocated with source (true) or in a separate dir (false). */
|
|
109
|
+
colocated: boolean;
|
|
110
|
+
/** Test directories found (e.g. ["__tests__", "test", "tests"]). */
|
|
111
|
+
testDirs: string[];
|
|
112
|
+
mockingLibrary: MockingLibrary;
|
|
113
|
+
/** Whether a coverage config was detected. */
|
|
114
|
+
hasCoverageConfig: boolean;
|
|
115
|
+
/** Total test files found. */
|
|
116
|
+
testFileCount: number;
|
|
117
|
+
}
|
|
118
|
+
export interface DocFile {
|
|
119
|
+
/** Relative path from project root. */
|
|
120
|
+
path: string;
|
|
121
|
+
/** Content truncated to 2000 chars. */
|
|
122
|
+
content: string;
|
|
123
|
+
/** Whether the content was truncated. */
|
|
124
|
+
truncated: boolean;
|
|
125
|
+
}
|
|
126
|
+
export interface DocumentationReport {
|
|
127
|
+
files: DocFile[];
|
|
128
|
+
}
|
|
129
|
+
export interface DetectedStackReport {
|
|
130
|
+
hasTypescript: boolean;
|
|
131
|
+
hasReact: boolean;
|
|
132
|
+
hasNext: boolean;
|
|
133
|
+
hasVite: boolean;
|
|
134
|
+
hasPlaywright: boolean;
|
|
135
|
+
hasEslint: boolean;
|
|
136
|
+
hasVitest: boolean;
|
|
137
|
+
hasJest: boolean;
|
|
138
|
+
hasPython: boolean;
|
|
139
|
+
hasRust: boolean;
|
|
140
|
+
hasNestjs: boolean;
|
|
141
|
+
hasFastify: boolean;
|
|
142
|
+
hasExpress: boolean;
|
|
143
|
+
/** Primary language detected. */
|
|
144
|
+
primaryLanguage: "typescript" | "javascript" | "python" | "rust" | "unknown";
|
|
145
|
+
}
|
|
146
|
+
export interface DiscoveryReport {
|
|
147
|
+
/** Absolute path to the scanned project root. */
|
|
148
|
+
projectRoot: string;
|
|
149
|
+
/** ISO timestamp of the scan. */
|
|
150
|
+
scannedAt: string;
|
|
151
|
+
packageScripts: PackageScriptsReport | null;
|
|
152
|
+
packageManager: "npm" | "yarn" | "pnpm" | "bun" | null;
|
|
153
|
+
ciChecks: CIChecksReport;
|
|
154
|
+
gitConventions: GitConventionsReport | null;
|
|
155
|
+
codeConventions: CodeConventionsReport | null;
|
|
156
|
+
testConventions: TestConventionsReport | null;
|
|
157
|
+
documentation: DocumentationReport;
|
|
158
|
+
detectedStack: DetectedStackReport | null;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the deep programmatic codebase scanner.
|
|
3
|
+
*
|
|
4
|
+
* DiscoveryReport is the top-level output of scanProject().
|
|
5
|
+
* All sections are optional -- a graceful failure in a sub-scanner
|
|
6
|
+
* produces a null/empty section, not a thrown error.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -26,4 +26,8 @@ export { logger, Logger } from "./utils/logger.js";
|
|
|
26
26
|
export { findProjectRoot } from "./utils/fs.js";
|
|
27
27
|
export { createBoberMCPServer } from "./mcp/index.js";
|
|
28
28
|
export { RunManager } from "./mcp/run-manager.js";
|
|
29
|
+
export { scanProject } from "./discovery/scanner.js";
|
|
30
|
+
export { synthesizePrinciples } from "./discovery/synthesizer.js";
|
|
31
|
+
export { generateEvalConfig } from "./discovery/config-generator.js";
|
|
32
|
+
export type { DiscoveryReport } from "./discovery/types.js";
|
|
29
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -31,4 +31,8 @@ export { findProjectRoot } from "./utils/fs.js";
|
|
|
31
31
|
// ── MCP Server ──────────────────────────────────────────────────────
|
|
32
32
|
export { createBoberMCPServer } from "./mcp/index.js";
|
|
33
33
|
export { RunManager } from "./mcp/run-manager.js";
|
|
34
|
+
// ── Discovery ────────────────────────────────────────────────────────
|
|
35
|
+
export { scanProject } from "./discovery/scanner.js";
|
|
36
|
+
export { synthesizePrinciples } from "./discovery/synthesizer.js";
|
|
37
|
+
export { generateEvalConfig } from "./discovery/config-generator.js";
|
|
34
38
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAOL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnE,sEAAsE;AAEtE,OAAO,EAIL,cAAc,EACd,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAGL,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAOL,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,sEAAsE;AAEtE,OAAO,EAIL,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,YAAY,GAEb,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EACL,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,GAGb,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,GAGf,MAAM,gCAAgC,CAAC;AAExC,sEAAsE;AAEtE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GAEd,MAAM,0BAA0B,CAAC;AAQlC,sEAAsE;AAEtE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAoB1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAEzF,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,uEAAuE;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAOL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnE,sEAAsE;AAEtE,OAAO,EAIL,cAAc,EACd,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAGL,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAOL,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,sEAAsE;AAEtE,OAAO,EAIL,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,YAAY,GAEb,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EACL,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,GAGb,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,GAGf,MAAM,gCAAgC,CAAC;AAExC,sEAAsE;AAEtE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GAEd,MAAM,0BAA0B,CAAC;AAQlC,sEAAsE;AAEtE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAoB1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAEzF,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,uEAAuE;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,wEAAwE;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"AAsBA,wBAAgB,gBAAgB,IAAI,IAAI,CA0OvC"}
|
package/dist/mcp/tools/init.js
CHANGED
|
@@ -11,6 +11,9 @@ import { createDefaultConfig } from "../../config/schema.js";
|
|
|
11
11
|
import { getPresetNames } from "../../config/defaults.js";
|
|
12
12
|
import { ensureBoberDir } from "../../state/index.js";
|
|
13
13
|
import { registerTool } from "./registry.js";
|
|
14
|
+
import { scanProject } from "../../discovery/scanner.js";
|
|
15
|
+
import { generateEvalConfig } from "../../discovery/config-generator.js";
|
|
16
|
+
import { synthesizePrinciples } from "../../discovery/synthesizer.js";
|
|
14
17
|
// ── Registration ─────────────────────────────────────────────────────
|
|
15
18
|
export function registerInitTool() {
|
|
16
19
|
registerTool({
|
|
@@ -75,7 +78,105 @@ export function registerInitTool() {
|
|
|
75
78
|
if (alreadyExists) {
|
|
76
79
|
process.stderr.write(`[bober_init] Overwriting existing bober.config.json in ${projectRoot}\n`);
|
|
77
80
|
}
|
|
78
|
-
//
|
|
81
|
+
// ── Brownfield: run auto-discovery pipeline ────────────────────
|
|
82
|
+
if (mode === "brownfield") {
|
|
83
|
+
process.stderr.write(`[bober_init] Running brownfield auto-discovery for ${projectRoot}\n`);
|
|
84
|
+
const report = await scanProject(projectRoot);
|
|
85
|
+
const evalConfig = generateEvalConfig(report);
|
|
86
|
+
const config = createDefaultConfig(projectName, mode, undefined, {
|
|
87
|
+
planner: {
|
|
88
|
+
maxClarifications: 5,
|
|
89
|
+
model: "opus",
|
|
90
|
+
provider,
|
|
91
|
+
},
|
|
92
|
+
generator: {
|
|
93
|
+
model: "sonnet",
|
|
94
|
+
maxTurnsPerSprint: 50,
|
|
95
|
+
autoCommit: true,
|
|
96
|
+
branchPattern: "bober/{feature-name}",
|
|
97
|
+
provider,
|
|
98
|
+
},
|
|
99
|
+
evaluator: {
|
|
100
|
+
model: "sonnet",
|
|
101
|
+
strategies: evalConfig.strategies,
|
|
102
|
+
maxIterations: 3,
|
|
103
|
+
provider,
|
|
104
|
+
},
|
|
105
|
+
commands: evalConfig.commands,
|
|
106
|
+
});
|
|
107
|
+
// Write bober.config.json
|
|
108
|
+
const configPath = join(projectRoot, "bober.config.json");
|
|
109
|
+
await writeFile(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
110
|
+
// Create .bober/ directory structure
|
|
111
|
+
await ensureBoberDir(projectRoot);
|
|
112
|
+
// Synthesize principles
|
|
113
|
+
let principles = null;
|
|
114
|
+
let principlesError = null;
|
|
115
|
+
try {
|
|
116
|
+
principles = await synthesizePrinciples(report, projectRoot, config);
|
|
117
|
+
const principlesPath = join(projectRoot, ".bober", "principles.md");
|
|
118
|
+
await writeFile(principlesPath, principles, "utf-8");
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
principlesError = err instanceof Error ? err.message : String(err);
|
|
122
|
+
process.stderr.write(`[bober_init] Could not synthesize principles: ${principlesError}\n`);
|
|
123
|
+
}
|
|
124
|
+
// Build discovery summary for response
|
|
125
|
+
const stack = report.detectedStack;
|
|
126
|
+
const detectedTech = [];
|
|
127
|
+
if (stack) {
|
|
128
|
+
if (stack.hasTypescript)
|
|
129
|
+
detectedTech.push("TypeScript");
|
|
130
|
+
if (stack.hasReact)
|
|
131
|
+
detectedTech.push("React");
|
|
132
|
+
if (stack.hasNext)
|
|
133
|
+
detectedTech.push("Next.js");
|
|
134
|
+
if (stack.hasVite)
|
|
135
|
+
detectedTech.push("Vite");
|
|
136
|
+
if (stack.hasEslint)
|
|
137
|
+
detectedTech.push("ESLint");
|
|
138
|
+
if (stack.hasVitest)
|
|
139
|
+
detectedTech.push("Vitest");
|
|
140
|
+
if (stack.hasJest)
|
|
141
|
+
detectedTech.push("Jest");
|
|
142
|
+
if (stack.hasPlaywright)
|
|
143
|
+
detectedTech.push("Playwright");
|
|
144
|
+
if (stack.hasNestjs)
|
|
145
|
+
detectedTech.push("NestJS");
|
|
146
|
+
if (stack.hasFastify)
|
|
147
|
+
detectedTech.push("Fastify");
|
|
148
|
+
if (stack.hasExpress)
|
|
149
|
+
detectedTech.push("Express");
|
|
150
|
+
if (stack.hasPython)
|
|
151
|
+
detectedTech.push("Python");
|
|
152
|
+
if (stack.hasRust)
|
|
153
|
+
detectedTech.push("Rust");
|
|
154
|
+
}
|
|
155
|
+
process.stderr.write(`[bober_init] Initialised brownfield project "${projectName}" in ${projectRoot}\n`);
|
|
156
|
+
return JSON.stringify({
|
|
157
|
+
status: "initialised",
|
|
158
|
+
projectName,
|
|
159
|
+
mode,
|
|
160
|
+
provider,
|
|
161
|
+
configPath,
|
|
162
|
+
boberDir: join(projectRoot, ".bober"),
|
|
163
|
+
discovery: {
|
|
164
|
+
detectedTech,
|
|
165
|
+
packageManager: report.packageManager,
|
|
166
|
+
strategies: evalConfig.strategies.map((s) => s.type),
|
|
167
|
+
commands: evalConfig.commands,
|
|
168
|
+
},
|
|
169
|
+
principles: principles ?? null,
|
|
170
|
+
principlesError,
|
|
171
|
+
message: alreadyExists
|
|
172
|
+
? "Existing configuration was overwritten using auto-discovery."
|
|
173
|
+
: "Brownfield project initialised with auto-discovered configuration.",
|
|
174
|
+
nextStep: principles
|
|
175
|
+
? "Run bober_plan with a task description to generate a sprint plan."
|
|
176
|
+
: "Run /bober-principles to generate project principles, then bober_plan.",
|
|
177
|
+
}, null, 2);
|
|
178
|
+
}
|
|
179
|
+
// ── Greenfield: use preset/default config ──────────────────────
|
|
79
180
|
const config = createDefaultConfig(projectName, mode, rawPreset, {
|
|
80
181
|
planner: {
|
|
81
182
|
maxClarifications: 5,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,mEAAmE;AACnE,qEAAqE;AACrE,kCAAkC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-bober",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Generator-Evaluator multi-agent harness for building applications autonomously with any LLM. Supports Claude, GPT, Gemini, Ollama. Includes MCP server for Cursor/Windsurf.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
],
|
|
34
34
|
"author": "BOBER3r",
|
|
35
35
|
"license": "MIT",
|
|
36
|
-
"homepage": "https://
|
|
36
|
+
"homepage": "https://agentbober.com",
|
|
37
37
|
"repository": {
|
|
38
38
|
"type": "git",
|
|
39
39
|
"url": "git+https://github.com/BOBER3r/agent-bober.git"
|
|
@@ -37,7 +37,40 @@ If the user wants to update, proceed to Step 3 with the existing content as a st
|
|
|
37
37
|
|
|
38
38
|
Proceed to Step 2.
|
|
39
39
|
|
|
40
|
-
## Step 2:
|
|
40
|
+
## Step 2: Auto-Discovery (Brownfield mode)
|
|
41
|
+
|
|
42
|
+
**Check this FIRST before interviewing the user.**
|
|
43
|
+
|
|
44
|
+
If `bober.config.json` exists with `"mode": "brownfield"` AND no arguments were provided to this command:
|
|
45
|
+
|
|
46
|
+
1. **Run the auto-discovery pipeline** — analyze the codebase to discover conventions:
|
|
47
|
+
- Read and parse `package.json` to detect scripts, dependencies, and package manager
|
|
48
|
+
- Scan `.github/workflows/` or `.gitlab-ci.yml` to identify CI checks
|
|
49
|
+
- Read recent git log to detect commit style (conventional commits, prefix patterns)
|
|
50
|
+
- Sample source files to detect naming conventions, import style, export style, TypeScript patterns
|
|
51
|
+
- Find test files to identify the testing framework and file patterns
|
|
52
|
+
|
|
53
|
+
2. **Generate principles from discovered patterns** — synthesize the discovered conventions into a structured `principles.md` document using the same format as Step 3. Ground every rule in actual evidence from the codebase scan.
|
|
54
|
+
|
|
55
|
+
3. **Show the generated principles** to the user:
|
|
56
|
+
```
|
|
57
|
+
I analyzed your codebase and discovered these conventions:
|
|
58
|
+
|
|
59
|
+
<generated principles content>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
4. **Ask for additions or confirmation:**
|
|
63
|
+
```
|
|
64
|
+
Want to add or modify anything? You can provide additional notes or say "looks good".
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
5. **If the user provides additions**, merge them into the generated principles document. Expand any short notes into full principle statements following the quality rules in Step 3.
|
|
68
|
+
|
|
69
|
+
6. **Save to `.bober/principles.md`** and proceed to Step 4 (Confirm and Report).
|
|
70
|
+
|
|
71
|
+
The existing interview flow (below) applies only to greenfield projects or when arguments are provided.
|
|
72
|
+
|
|
73
|
+
## Step 2a: Interview the User (Greenfield or with args)
|
|
41
74
|
|
|
42
75
|
Ask the user 3-5 targeted questions to understand their project principles. Adapt the questions based on whether `bober.config.json` exists and what it reveals about the project type.
|
|
43
76
|
|
|
@@ -80,7 +113,7 @@ E) Not applicable (no UI in this project)
|
|
|
80
113
|
F) Other (please describe)
|
|
81
114
|
```
|
|
82
115
|
|
|
83
|
-
## Step
|
|
116
|
+
## Step 2b: Expand Raw Input (if user provides a prompt/argument)
|
|
84
117
|
|
|
85
118
|
If the user provides text with this command — whether a short note like `"performance-first, minimal dependencies"` or a long paste of requirements, a PRD, or rough notes — your job is to **intelligently expand and elevate** that input into a polished principles document:
|
|
86
119
|
|
|
@@ -92,7 +125,7 @@ If the user provides text with this command — whether a short note like `"perf
|
|
|
92
125
|
|
|
93
126
|
The goal: the user pastes rough notes, you produce a comprehensive, opinionated principles document that makes them say "yes, exactly — and I didn't even think of those."
|
|
94
127
|
|
|
95
|
-
Skip the interview (Step
|
|
128
|
+
Skip the interview (Step 2a) entirely when the user provides substantive input. Go straight to generating the document.
|
|
96
129
|
|
|
97
130
|
## Step 3: Generate Principles Document
|
|
98
131
|
|