agent-bober 0.6.2 → 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.
Files changed (190) hide show
  1. package/README.md +220 -30
  2. package/dist/cli/commands/eval.d.ts +2 -0
  3. package/dist/cli/commands/eval.d.ts.map +1 -1
  4. package/dist/cli/commands/eval.js +10 -0
  5. package/dist/cli/commands/eval.js.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +357 -62
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/plan.d.ts +2 -0
  10. package/dist/cli/commands/plan.d.ts.map +1 -1
  11. package/dist/cli/commands/plan.js +10 -0
  12. package/dist/cli/commands/plan.js.map +1 -1
  13. package/dist/cli/commands/run.d.ts +2 -0
  14. package/dist/cli/commands/run.d.ts.map +1 -1
  15. package/dist/cli/commands/run.js +10 -0
  16. package/dist/cli/commands/run.js.map +1 -1
  17. package/dist/cli/commands/sprint.d.ts +2 -0
  18. package/dist/cli/commands/sprint.d.ts.map +1 -1
  19. package/dist/cli/commands/sprint.js +10 -0
  20. package/dist/cli/commands/sprint.js.map +1 -1
  21. package/dist/cli/index.js +22 -2
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/config/schema.d.ts +160 -43
  24. package/dist/config/schema.d.ts.map +1 -1
  25. package/dist/config/schema.js +11 -7
  26. package/dist/config/schema.js.map +1 -1
  27. package/dist/contracts/sprint-contract.d.ts +8 -8
  28. package/dist/discovery/config-generator.d.ts +28 -0
  29. package/dist/discovery/config-generator.d.ts.map +1 -0
  30. package/dist/discovery/config-generator.js +225 -0
  31. package/dist/discovery/config-generator.js.map +1 -0
  32. package/dist/discovery/index.d.ts +20 -0
  33. package/dist/discovery/index.d.ts.map +1 -0
  34. package/dist/discovery/index.js +19 -0
  35. package/dist/discovery/index.js.map +1 -0
  36. package/dist/discovery/scanner.d.ts +17 -0
  37. package/dist/discovery/scanner.d.ts.map +1 -0
  38. package/dist/discovery/scanner.js +120 -0
  39. package/dist/discovery/scanner.js.map +1 -0
  40. package/dist/discovery/scanners/ci-checks.d.ts +10 -0
  41. package/dist/discovery/scanners/ci-checks.d.ts.map +1 -0
  42. package/dist/discovery/scanners/ci-checks.js +169 -0
  43. package/dist/discovery/scanners/ci-checks.js.map +1 -0
  44. package/dist/discovery/scanners/code-conventions.d.ts +12 -0
  45. package/dist/discovery/scanners/code-conventions.d.ts.map +1 -0
  46. package/dist/discovery/scanners/code-conventions.js +216 -0
  47. package/dist/discovery/scanners/code-conventions.js.map +1 -0
  48. package/dist/discovery/scanners/documentation.d.ts +17 -0
  49. package/dist/discovery/scanners/documentation.d.ts.map +1 -0
  50. package/dist/discovery/scanners/documentation.js +92 -0
  51. package/dist/discovery/scanners/documentation.js.map +1 -0
  52. package/dist/discovery/scanners/git-conventions.d.ts +11 -0
  53. package/dist/discovery/scanners/git-conventions.d.ts.map +1 -0
  54. package/dist/discovery/scanners/git-conventions.js +128 -0
  55. package/dist/discovery/scanners/git-conventions.js.map +1 -0
  56. package/dist/discovery/scanners/package-scripts.d.ts +9 -0
  57. package/dist/discovery/scanners/package-scripts.d.ts.map +1 -0
  58. package/dist/discovery/scanners/package-scripts.js +112 -0
  59. package/dist/discovery/scanners/package-scripts.js.map +1 -0
  60. package/dist/discovery/scanners/test-conventions.d.ts +9 -0
  61. package/dist/discovery/scanners/test-conventions.d.ts.map +1 -0
  62. package/dist/discovery/scanners/test-conventions.js +231 -0
  63. package/dist/discovery/scanners/test-conventions.js.map +1 -0
  64. package/dist/discovery/synthesizer.d.ts +30 -0
  65. package/dist/discovery/synthesizer.d.ts.map +1 -0
  66. package/dist/discovery/synthesizer.js +348 -0
  67. package/dist/discovery/synthesizer.js.map +1 -0
  68. package/dist/discovery/types.d.ts +160 -0
  69. package/dist/discovery/types.d.ts.map +1 -0
  70. package/dist/discovery/types.js +9 -0
  71. package/dist/discovery/types.js.map +1 -0
  72. package/dist/index.d.ts +12 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +12 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/mcp/index.d.ts +4 -0
  77. package/dist/mcp/index.d.ts.map +1 -0
  78. package/dist/mcp/index.js +4 -0
  79. package/dist/mcp/index.js.map +1 -0
  80. package/dist/mcp/run-manager.d.ts +47 -0
  81. package/dist/mcp/run-manager.d.ts.map +1 -0
  82. package/dist/mcp/run-manager.js +79 -0
  83. package/dist/mcp/run-manager.js.map +1 -0
  84. package/dist/mcp/server.d.ts +15 -0
  85. package/dist/mcp/server.d.ts.map +1 -0
  86. package/dist/mcp/server.js +107 -0
  87. package/dist/mcp/server.js.map +1 -0
  88. package/dist/mcp/tools/config.d.ts +2 -0
  89. package/dist/mcp/tools/config.d.ts.map +1 -0
  90. package/dist/mcp/tools/config.js +153 -0
  91. package/dist/mcp/tools/config.js.map +1 -0
  92. package/dist/mcp/tools/contracts.d.ts +2 -0
  93. package/dist/mcp/tools/contracts.d.ts.map +1 -0
  94. package/dist/mcp/tools/contracts.js +61 -0
  95. package/dist/mcp/tools/contracts.js.map +1 -0
  96. package/dist/mcp/tools/eval.d.ts +2 -0
  97. package/dist/mcp/tools/eval.d.ts.map +1 -0
  98. package/dist/mcp/tools/eval.js +157 -0
  99. package/dist/mcp/tools/eval.js.map +1 -0
  100. package/dist/mcp/tools/index.d.ts +20 -0
  101. package/dist/mcp/tools/index.d.ts.map +1 -0
  102. package/dist/mcp/tools/index.js +47 -0
  103. package/dist/mcp/tools/index.js.map +1 -0
  104. package/dist/mcp/tools/init.d.ts +2 -0
  105. package/dist/mcp/tools/init.d.ts.map +1 -0
  106. package/dist/mcp/tools/init.js +222 -0
  107. package/dist/mcp/tools/init.js.map +1 -0
  108. package/dist/mcp/tools/plan.d.ts +2 -0
  109. package/dist/mcp/tools/plan.d.ts.map +1 -0
  110. package/dist/mcp/tools/plan.js +97 -0
  111. package/dist/mcp/tools/plan.js.map +1 -0
  112. package/dist/mcp/tools/principles.d.ts +2 -0
  113. package/dist/mcp/tools/principles.d.ts.map +1 -0
  114. package/dist/mcp/tools/principles.js +66 -0
  115. package/dist/mcp/tools/principles.js.map +1 -0
  116. package/dist/mcp/tools/registry.d.ts +45 -0
  117. package/dist/mcp/tools/registry.d.ts.map +1 -0
  118. package/dist/mcp/tools/registry.js +23 -0
  119. package/dist/mcp/tools/registry.js.map +1 -0
  120. package/dist/mcp/tools/run.d.ts +2 -0
  121. package/dist/mcp/tools/run.d.ts.map +1 -0
  122. package/dist/mcp/tools/run.js +66 -0
  123. package/dist/mcp/tools/run.js.map +1 -0
  124. package/dist/mcp/tools/spec.d.ts +2 -0
  125. package/dist/mcp/tools/spec.d.ts.map +1 -0
  126. package/dist/mcp/tools/spec.js +32 -0
  127. package/dist/mcp/tools/spec.js.map +1 -0
  128. package/dist/mcp/tools/sprint.d.ts +2 -0
  129. package/dist/mcp/tools/sprint.d.ts.map +1 -0
  130. package/dist/mcp/tools/sprint.js +243 -0
  131. package/dist/mcp/tools/sprint.js.map +1 -0
  132. package/dist/mcp/tools/status.d.ts +2 -0
  133. package/dist/mcp/tools/status.d.ts.map +1 -0
  134. package/dist/mcp/tools/status.js +76 -0
  135. package/dist/mcp/tools/status.js.map +1 -0
  136. package/dist/orchestrator/agentic-loop.d.ts +7 -6
  137. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  138. package/dist/orchestrator/agentic-loop.js +33 -40
  139. package/dist/orchestrator/agentic-loop.js.map +1 -1
  140. package/dist/orchestrator/context-handoff.d.ts +20 -20
  141. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  142. package/dist/orchestrator/evaluator-agent.js +2 -2
  143. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  144. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  145. package/dist/orchestrator/generator-agent.js +2 -2
  146. package/dist/orchestrator/generator-agent.js.map +1 -1
  147. package/dist/orchestrator/model-resolver.d.ts +35 -4
  148. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  149. package/dist/orchestrator/model-resolver.js +68 -15
  150. package/dist/orchestrator/model-resolver.js.map +1 -1
  151. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  152. package/dist/orchestrator/planner-agent.js +2 -2
  153. package/dist/orchestrator/planner-agent.js.map +1 -1
  154. package/dist/orchestrator/tools/index.d.ts +3 -4
  155. package/dist/orchestrator/tools/index.d.ts.map +1 -1
  156. package/dist/orchestrator/tools/index.js.map +1 -1
  157. package/dist/orchestrator/tools/schemas.d.ts +11 -12
  158. package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
  159. package/dist/orchestrator/tools/schemas.js +3 -2
  160. package/dist/orchestrator/tools/schemas.js.map +1 -1
  161. package/dist/providers/anthropic.d.ts +15 -0
  162. package/dist/providers/anthropic.d.ts.map +1 -0
  163. package/dist/providers/anthropic.js +133 -0
  164. package/dist/providers/anthropic.js.map +1 -0
  165. package/dist/providers/factory.d.ts +37 -0
  166. package/dist/providers/factory.d.ts.map +1 -0
  167. package/dist/providers/factory.js +119 -0
  168. package/dist/providers/factory.js.map +1 -0
  169. package/dist/providers/google.d.ts +39 -0
  170. package/dist/providers/google.d.ts.map +1 -0
  171. package/dist/providers/google.js +195 -0
  172. package/dist/providers/google.js.map +1 -0
  173. package/dist/providers/index.d.ts +7 -0
  174. package/dist/providers/index.d.ts.map +1 -0
  175. package/dist/providers/index.js +6 -0
  176. package/dist/providers/index.js.map +1 -0
  177. package/dist/providers/openai-compat.d.ts +39 -0
  178. package/dist/providers/openai-compat.d.ts.map +1 -0
  179. package/dist/providers/openai-compat.js +42 -0
  180. package/dist/providers/openai-compat.js.map +1 -0
  181. package/dist/providers/openai.d.ts +41 -0
  182. package/dist/providers/openai.d.ts.map +1 -0
  183. package/dist/providers/openai.js +205 -0
  184. package/dist/providers/openai.js.map +1 -0
  185. package/dist/providers/types.d.ts +144 -0
  186. package/dist/providers/types.d.ts.map +1 -0
  187. package/dist/providers/types.js +8 -0
  188. package/dist/providers/types.js.map +1 -0
  189. package/package.json +22 -4
  190. package/skills/bober.principles/SKILL.md +36 -3
@@ -0,0 +1,153 @@
1
+ // ── bober_config tool ─────────────────────────────────────────────────
2
+ //
3
+ // No args -> read and return bober.config.json as-is.
4
+ // With { key, value } -> update a specific dot-path field and write back.
5
+ // e.g. key="generator.model", value="opus"
6
+ import { readFile, writeFile, access } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import { constants } from "node:fs";
9
+ import { cwd } from "node:process";
10
+ import { registerTool } from "./registry.js";
11
+ // ── Helpers ───────────────────────────────────────────────────────────
12
+ const CONFIG_CANDIDATES = ["bober.config.json", ".bober/config.json"];
13
+ async function findConfigPath(projectRoot) {
14
+ for (const candidate of CONFIG_CANDIDATES) {
15
+ const fullPath = join(projectRoot, candidate);
16
+ try {
17
+ await access(fullPath, constants.R_OK);
18
+ return fullPath;
19
+ }
20
+ catch {
21
+ // not found, try next
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ /**
27
+ * Set a value at a dot-separated path inside a plain object.
28
+ * Creates intermediate objects as needed.
29
+ * Returns the mutated object (same reference).
30
+ */
31
+ function setNestedValue(obj, dotPath, value) {
32
+ const parts = dotPath.split(".");
33
+ let cursor = obj;
34
+ for (let i = 0; i < parts.length - 1; i++) {
35
+ const part = parts[i];
36
+ if (cursor[part] === undefined ||
37
+ cursor[part] === null ||
38
+ typeof cursor[part] !== "object" ||
39
+ Array.isArray(cursor[part])) {
40
+ cursor[part] = {};
41
+ }
42
+ cursor = cursor[part];
43
+ }
44
+ const lastPart = parts[parts.length - 1];
45
+ cursor[lastPart] = value;
46
+ }
47
+ /**
48
+ * Attempt to coerce a string value to a more appropriate JSON type.
49
+ * "true"/"false" -> boolean, numeric strings -> number, else keep as string.
50
+ */
51
+ function coerceValue(raw) {
52
+ if (raw === "true")
53
+ return true;
54
+ if (raw === "false")
55
+ return false;
56
+ const n = Number(raw);
57
+ if (!isNaN(n) && raw.trim() !== "")
58
+ return n;
59
+ return raw;
60
+ }
61
+ // ── Registration ─────────────────────────────────────────────────────
62
+ export function registerConfigTool() {
63
+ registerTool({
64
+ name: "bober_config",
65
+ description: "Read or update the Bober project configuration (bober.config.json). " +
66
+ "Without arguments returns the full config as JSON. " +
67
+ "With key and value, updates a specific config field using dot-notation " +
68
+ "(e.g. key='generator.model', value='opus'). " +
69
+ "Numeric and boolean values are coerced automatically.",
70
+ inputSchema: {
71
+ type: "object",
72
+ properties: {
73
+ key: {
74
+ type: "string",
75
+ description: "Dot-separated config path to update (e.g. generator.model, evaluator.maxIterations).",
76
+ },
77
+ value: {
78
+ type: "string",
79
+ description: "New value for the key. Numbers and booleans are coerced automatically.",
80
+ },
81
+ },
82
+ additionalProperties: false,
83
+ },
84
+ handler: async (args) => {
85
+ const projectRoot = cwd();
86
+ const configPath = await findConfigPath(projectRoot);
87
+ if (!configPath) {
88
+ return JSON.stringify({
89
+ error: "No bober.config.json found. Run bober_init first.",
90
+ }, null, 2);
91
+ }
92
+ // Parse the existing config file
93
+ let rawContent;
94
+ try {
95
+ rawContent = await readFile(configPath, "utf-8");
96
+ }
97
+ catch (err) {
98
+ return JSON.stringify({
99
+ error: `Failed to read config: ${err instanceof Error ? err.message : String(err)}`,
100
+ }, null, 2);
101
+ }
102
+ let parsed;
103
+ try {
104
+ parsed = JSON.parse(rawContent);
105
+ }
106
+ catch (err) {
107
+ return JSON.stringify({
108
+ error: `Invalid JSON in config file: ${err instanceof Error ? err.message : String(err)}`,
109
+ }, null, 2);
110
+ }
111
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
112
+ return JSON.stringify({ error: "Config file does not contain a JSON object." }, null, 2);
113
+ }
114
+ const configObj = parsed;
115
+ const key = typeof args.key === "string" && args.key.trim()
116
+ ? args.key.trim()
117
+ : undefined;
118
+ const value = typeof args.value === "string" ? args.value : undefined;
119
+ // Read mode (no key provided)
120
+ if (key === undefined) {
121
+ return JSON.stringify({
122
+ path: configPath,
123
+ config: configObj,
124
+ }, null, 2);
125
+ }
126
+ // Update mode requires both key and value
127
+ if (value === undefined) {
128
+ return JSON.stringify({
129
+ error: "Both key and value must be provided to update the config.",
130
+ }, null, 2);
131
+ }
132
+ const coerced = coerceValue(value);
133
+ setNestedValue(configObj, key, coerced);
134
+ try {
135
+ await writeFile(configPath, JSON.stringify(configObj, null, 2) + "\n", "utf-8");
136
+ }
137
+ catch (err) {
138
+ return JSON.stringify({
139
+ error: `Failed to write config: ${err instanceof Error ? err.message : String(err)}`,
140
+ }, null, 2);
141
+ }
142
+ process.stderr.write(`[bober_config] Updated ${key} = ${JSON.stringify(coerced)} in ${configPath}\n`);
143
+ return JSON.stringify({
144
+ status: "updated",
145
+ path: configPath,
146
+ key,
147
+ value: coerced,
148
+ config: configObj,
149
+ }, null, 2);
150
+ },
151
+ });
152
+ }
153
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/mcp/tools/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerContractsTool(): void;
2
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/contracts.ts"],"names":[],"mappings":"AAYA,wBAAgB,qBAAqB,IAAI,IAAI,CAmE5C"}
@@ -0,0 +1,61 @@
1
+ // ── bober_contracts tool ──────────────────────────────────────────────
2
+ //
3
+ // No args -> list all contracts with id, feature, status, dependsOn.
4
+ // With { contractId } -> return the full contract JSON.
5
+ import { cwd } from "node:process";
6
+ import { listContracts, loadContract } from "../../state/index.js";
7
+ import { registerTool } from "./registry.js";
8
+ // ── Registration ─────────────────────────────────────────────────────
9
+ export function registerContractsTool() {
10
+ registerTool({
11
+ name: "bober_contracts",
12
+ description: "List all sprint contracts or read a specific contract. " +
13
+ "Without arguments returns a summary list of all contracts (id, feature, status, dependsOn). " +
14
+ "With contractId returns the full contract JSON including success criteria and evaluator feedback.",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ contractId: {
19
+ type: "string",
20
+ description: "Contract ID to read. Omit to list all contracts.",
21
+ },
22
+ },
23
+ additionalProperties: false,
24
+ },
25
+ handler: async (args) => {
26
+ const projectRoot = cwd();
27
+ const contractId = typeof args.contractId === "string" && args.contractId.trim()
28
+ ? args.contractId.trim()
29
+ : undefined;
30
+ // Return full contract when contractId is provided
31
+ if (contractId !== undefined) {
32
+ try {
33
+ const contract = await loadContract(projectRoot, contractId);
34
+ return JSON.stringify(contract, null, 2);
35
+ }
36
+ catch (err) {
37
+ return JSON.stringify({
38
+ error: `Contract "${contractId}" not found.`,
39
+ details: err instanceof Error ? err.message : String(err),
40
+ }, null, 2);
41
+ }
42
+ }
43
+ // List mode
44
+ const contracts = await listContracts(projectRoot);
45
+ if (contracts.length === 0) {
46
+ return JSON.stringify({
47
+ contracts: [],
48
+ message: "No contracts found. Run bober_plan first to generate sprint contracts.",
49
+ }, null, 2);
50
+ }
51
+ const summary = contracts.map((c) => ({
52
+ id: c.id,
53
+ feature: c.feature,
54
+ status: c.status,
55
+ dependsOn: c.dependsOn,
56
+ }));
57
+ return JSON.stringify({ contracts: summary }, null, 2);
58
+ },
59
+ });
60
+ }
61
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/mcp/tools/contracts.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,qEAAqE;AACrE,wDAAwD;AAExD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,wEAAwE;AAExE,MAAM,UAAU,qBAAqB;IACnC,YAAY,CAAC;QACX,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,yDAAyD;YACzD,8FAA8F;YAC9F,mGAAmG;QACrG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,kDAAkD;iBACrD;aACF;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAmB,EAAE;YAChE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;YAC1B,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAC3D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBACxB,CAAC,CAAC,SAAS,CAAC;YAEhB,mDAAmD;YACnD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;oBAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC,SAAS,CACnB;wBACE,KAAK,EAAE,aAAa,UAAU,cAAc;wBAC5C,OAAO,EACL,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACnD,EACD,IAAI,EACJ,CAAC,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,YAAY;YACZ,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,SAAS,CACnB;oBACE,SAAS,EAAE,EAAE;oBACb,OAAO,EACL,wEAAwE;iBAC3E,EACD,IAAI,EACJ,CAAC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC,CAAC;YAEJ,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerEvalTool(): void;
2
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/eval.ts"],"names":[],"mappings":"AAwBA,wBAAgB,gBAAgB,IAAI,IAAI,CAuKvC"}
@@ -0,0 +1,157 @@
1
+ // ── bober_eval tool ──────────────────────────────────────────────────
2
+ //
3
+ // Runs the evaluator agent against a specific sprint or the most
4
+ // recent in-progress sprint.
5
+ // Accepts { sprintId?: string }. Returns a JSON eval result summary.
6
+ import { cwd } from "node:process";
7
+ import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
8
+ import { configExists, loadConfig } from "../../config/loader.js";
9
+ import { createHandoff } from "../../orchestrator/context-handoff.js";
10
+ import { runEvaluatorAgent } from "../../orchestrator/evaluator-agent.js";
11
+ import { ensureBoberDir, listContracts, loadLatestSpec, } from "../../state/index.js";
12
+ import { getCurrentBranch, getChangedFiles } from "../../utils/git.js";
13
+ import { registerTool } from "./registry.js";
14
+ // ── Registration ─────────────────────────────────────────────────────
15
+ export function registerEvalTool() {
16
+ registerTool({
17
+ name: "bober_eval",
18
+ description: "Run the Bober evaluator agent against a sprint. " +
19
+ "If sprintId is omitted the most recent in-progress, evaluating, or " +
20
+ "needs-rework sprint is targeted (falls back to the last contract). " +
21
+ "Returns a JSON object with pass/fail, score, per-criterion details, " +
22
+ "and actionable feedback.",
23
+ inputSchema: {
24
+ type: "object",
25
+ properties: {
26
+ sprintId: {
27
+ type: "string",
28
+ description: "ID of the sprint contract to evaluate. Omit to target the most " +
29
+ "recent active sprint.",
30
+ },
31
+ },
32
+ additionalProperties: false,
33
+ },
34
+ handler: async (args) => {
35
+ const sprintId = typeof args.sprintId === "string" && args.sprintId.trim()
36
+ ? args.sprintId.trim()
37
+ : undefined;
38
+ const projectRoot = cwd();
39
+ const hasConfig = await configExists(projectRoot);
40
+ if (!hasConfig) {
41
+ throw new McpError(ErrorCode.InvalidRequest, "No bober.config.json found. Run bober_init first.");
42
+ }
43
+ let config;
44
+ try {
45
+ config = await loadConfig(projectRoot);
46
+ }
47
+ catch (err) {
48
+ return JSON.stringify({
49
+ error: `Failed to load config: ${err instanceof Error ? err.message : String(err)}`,
50
+ });
51
+ }
52
+ await ensureBoberDir(projectRoot);
53
+ const spec = await loadLatestSpec(projectRoot);
54
+ if (!spec) {
55
+ return JSON.stringify({
56
+ error: "No plan found. Run bober_plan first.",
57
+ });
58
+ }
59
+ const contracts = await listContracts(projectRoot);
60
+ if (contracts.length === 0) {
61
+ return JSON.stringify({
62
+ error: "No sprint contracts found. Run bober_plan first.",
63
+ });
64
+ }
65
+ // Resolve target contract
66
+ let targetContract;
67
+ if (sprintId) {
68
+ targetContract = contracts.find((c) => c.id === sprintId);
69
+ if (!targetContract) {
70
+ return JSON.stringify({
71
+ error: `Sprint "${sprintId}" not found.`,
72
+ available: contracts.map((c) => c.id),
73
+ });
74
+ }
75
+ }
76
+ else {
77
+ targetContract = contracts.find((c) => c.status === "in-progress" ||
78
+ c.status === "evaluating" ||
79
+ c.status === "needs-rework");
80
+ if (!targetContract) {
81
+ // Fall back to the last contract
82
+ targetContract = contracts[contracts.length - 1];
83
+ }
84
+ }
85
+ process.stderr.write(`[bober_eval] Evaluating: ${targetContract.feature} (${targetContract.id})\n`);
86
+ // Build project context
87
+ let currentBranch;
88
+ try {
89
+ currentBranch = await getCurrentBranch(projectRoot);
90
+ }
91
+ catch {
92
+ currentBranch = "unknown";
93
+ }
94
+ const projectContext = {
95
+ name: config.project.name,
96
+ type: config.project.mode,
97
+ techStack: spec.techStack,
98
+ entryPoints: [],
99
+ currentBranch,
100
+ };
101
+ // Get changed files
102
+ let changedFiles;
103
+ try {
104
+ changedFiles = await getChangedFiles(projectRoot);
105
+ }
106
+ catch {
107
+ changedFiles = [];
108
+ }
109
+ const completedContracts = contracts.filter((c) => c.status === "passed");
110
+ const handoff = createHandoff({
111
+ from: "generator",
112
+ to: "evaluator",
113
+ projectContext,
114
+ spec,
115
+ currentContract: targetContract,
116
+ sprintHistory: completedContracts,
117
+ instructions: `Evaluate sprint: ${targetContract.feature}`,
118
+ changedFiles,
119
+ });
120
+ try {
121
+ const evaluation = await runEvaluatorAgent(handoff, projectRoot, config);
122
+ return JSON.stringify({
123
+ contractId: targetContract.id,
124
+ feature: targetContract.feature,
125
+ passed: evaluation.passed,
126
+ score: evaluation.score,
127
+ summary: evaluation.summary,
128
+ feedback: evaluation.results
129
+ .filter((r) => !r.passed && r.feedback)
130
+ .map((r) => ({ evaluator: r.evaluator, feedback: r.feedback })),
131
+ results: evaluation.results.map((r) => ({
132
+ evaluator: r.evaluator,
133
+ passed: r.passed,
134
+ score: r.score,
135
+ summary: r.summary,
136
+ failedCriteria: r.details
137
+ .filter((d) => !d.passed)
138
+ .map((d) => ({
139
+ message: d.message,
140
+ severity: d.severity,
141
+ ...(d.file ? { file: d.file, line: d.line } : {}),
142
+ })),
143
+ })),
144
+ timestamp: evaluation.timestamp,
145
+ }, null, 2);
146
+ }
147
+ catch (err) {
148
+ return JSON.stringify({
149
+ error: `Evaluation failed: ${err instanceof Error ? err.message : String(err)}`,
150
+ contractId: targetContract.id,
151
+ feature: targetContract.feature,
152
+ });
153
+ }
154
+ },
155
+ });
156
+ }
157
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/mcp/tools/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Registers all built-in agent-bober MCP tools into the global registry.
3
+ * Call this once before starting the MCP server.
4
+ *
5
+ * Registered tools (10 total):
6
+ * 1. bober_init – Initialise a project
7
+ * 2. bober_plan – Generate a sprint plan
8
+ * 3. bober_sprint – Execute the next sprint cycle
9
+ * 4. bober_eval – Evaluate a sprint
10
+ * 5. bober_run – Start the full pipeline asynchronously
11
+ * 6. bober_status – Poll pipeline status
12
+ * 7. bober_contracts – List/read sprint contracts
13
+ * 8. bober_spec – Read the latest plan spec
14
+ * 9. bober_principles – Read/write .bober/principles.md
15
+ * 10. bober_config – Read/update bober.config.json
16
+ */
17
+ export declare function registerAllTools(): void;
18
+ export { registerTool, getAllTools, getTool } from "./registry.js";
19
+ export type { BoberToolDefinition, JsonSchemaObject, JsonSchemaProperty, } from "./registry.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAgBvC;AAED,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,47 @@
1
+ // ── Tool Registration ───────────────────────────────────────────────
2
+ //
3
+ // This file is the central place where all MCP tools are registered.
4
+ // Import each tool module's register function here and call it once.
5
+ import { registerInitTool } from "./init.js";
6
+ import { registerPlanTool } from "./plan.js";
7
+ import { registerSprintTool } from "./sprint.js";
8
+ import { registerEvalTool } from "./eval.js";
9
+ import { registerRunTool } from "./run.js";
10
+ import { registerStatusTool } from "./status.js";
11
+ import { registerContractsTool } from "./contracts.js";
12
+ import { registerSpecTool } from "./spec.js";
13
+ import { registerPrinciplesTool } from "./principles.js";
14
+ import { registerConfigTool } from "./config.js";
15
+ /**
16
+ * Registers all built-in agent-bober MCP tools into the global registry.
17
+ * Call this once before starting the MCP server.
18
+ *
19
+ * Registered tools (10 total):
20
+ * 1. bober_init – Initialise a project
21
+ * 2. bober_plan – Generate a sprint plan
22
+ * 3. bober_sprint – Execute the next sprint cycle
23
+ * 4. bober_eval – Evaluate a sprint
24
+ * 5. bober_run – Start the full pipeline asynchronously
25
+ * 6. bober_status – Poll pipeline status
26
+ * 7. bober_contracts – List/read sprint contracts
27
+ * 8. bober_spec – Read the latest plan spec
28
+ * 9. bober_principles – Read/write .bober/principles.md
29
+ * 10. bober_config – Read/update bober.config.json
30
+ */
31
+ export function registerAllTools() {
32
+ // ── Core workflow tools ─────────────────────────────────────────
33
+ registerInitTool();
34
+ registerPlanTool();
35
+ registerSprintTool();
36
+ registerEvalTool();
37
+ // ── Async pipeline tools ────────────────────────────────────────
38
+ registerRunTool();
39
+ registerStatusTool();
40
+ // ── Read / configuration tools ──────────────────────────────────
41
+ registerContractsTool();
42
+ registerSpecTool();
43
+ registerPrinciplesTool();
44
+ registerConfigTool();
45
+ }
46
+ export { registerTool, getAllTools, getTool } from "./registry.js";
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB;IAC9B,mEAAmE;IACnE,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,gBAAgB,EAAE,CAAC;IAEnB,mEAAmE;IACnE,eAAe,EAAE,CAAC;IAClB,kBAAkB,EAAE,CAAC;IAErB,mEAAmE;IACnE,qBAAqB,EAAE,CAAC;IACxB,gBAAgB,EAAE,CAAC;IACnB,sBAAsB,EAAE,CAAC;IACzB,kBAAkB,EAAE,CAAC;AACvB,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerInitTool(): void;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/init.ts"],"names":[],"mappings":"AAsBA,wBAAgB,gBAAgB,IAAI,IAAI,CA0OvC"}